Live pool
| slave | tenant | address | players | rooms | load | state |
|---|
Live server pool
| slave | tenant | address | players | rooms | load | state |
|---|
Tenant servers
| tenant | status | max rooms | container | live |
|---|
Provision a tenant server
Günlük seyir
Sunucu dağılımı
| slave | tenant | adres | oyuncu | masa | doluluk | durum | son sinyal |
|---|
Eşleşme kuyrukları
| tenant | bahis | koltuk | mod | bekleyen |
|---|
Günün CCU eğrisi
Canlı masalar
| masa | slave | tenant | mod | koltuk | insan/bot | bahis | süre | oturanlar |
|---|
Hangi oyuncu hangi sunucuda
| kullanıcı | slave | adres | tenant | masa | koltuk | son sinyal |
|---|
El hacmi
Bitiş tipi ve masa şekli
| bitiş tipi | el | pay |
|---|
Masa şekli
| koltuk | mod | paralı el | pratik el |
|---|
Huni
| adım | sayı | bir önceki adımın |
|---|
Bahis kademesi
| bahis | el | masa | hacim | pay |
|---|
Son eller
| zaman | tenant | masa | el | oyuncu | kazanan |
|---|
Yeni hesaplar
Kayıt tipi
| tip | hesap | pay |
|---|
Kohort — kayıt gününe göre
| gün | hesap | oynayan | el | ödeyen | ilk gün öde. | coin | elmas | D0 | D1 | D7 | D30 |
|---|
Açılan hesaplar
| kullanıcı | kayıt | tip | el (paralı) | el (pratik) | coin | elmas | son giriş | durum |
|---|
En aktif oyuncular
| kullanıcı | el | pratik | galibiyet | oran |
|---|
Kaynak ve reklam kampanyası
| kanal | reklam kampanyası | ağ | kurulum | atfedilen | ilk gün oynayan | ilk gün ödeyen | ort. dk | el | D1 | D7 | D30 | coin | elmas |
|---|
Atıf yöntemi
| yöntem | güven | hesap |
|---|
Apple'ın kendi bildirdiği — kampanya seviyesi
| ağ | kaynak | kampanya | kurulum | ince değer | kaba değer | yeniden kurulum | reddedilen |
|---|
Atfedilemeyen — platforma göre
| platform | hesap |
|---|
Takip linkleri
/a/<kod> adresinden hedefine yönlendirilir ve o kurulum bu reklam kampanyasına
yazılır. İptal edilen bir link çözülmeyi bırakır ama satırı kalır: ona yazılmış kurulumlar
kampanyasını korumalı, yoksa geçen ayın kazanım dağılımı kendini yeniden yazar. Aynı kodu yeniden
kaydetmek onu geri açar.| kod | kanal | ağ | reklam kampanyası | hedef | durum |
|---|
SKAN kaynak eşlemesi
| ağ id | kaynak | reklam kampanyası | ağ | ülke | yerleşim |
|---|
Kategori kırılımı
| grup | para | sipariş | tutar | ürün | pay |
|---|
Gerçek para (IAP)
| para birimi | sağlayıcı | işlem | tutar |
|---|
En çok alınan ürünler
| ürün | kategori | alt kategori | para | sipariş | adet | alıcı | tutar | iade |
|---|
Tenant kırılımı
| tenant | tanımlı oran | uygulanan | kesilen | bekleyen | kasa | bahis hacmi | efektif |
|---|
Para akışı
| kaynak | para | giren | çıkan | net | hareket |
|---|
Günlük rake
Ödedi, karşılığını alamadı
Satın alma hunisi
| ray | dünya | durum | sebep | deneme | bildirilen tutar |
|---|
Reklam musluğu
| tenant | yerleşim | para | ödül | oyuncu | basılan |
|---|
Tahsil edilemeyen borç
| para | borçlu oyuncu | kalan |
|---|
Kapasite
Günün saatine göre
| saat | tepe | ortalama | dip | örnek saat | pay |
|---|
Haftanın gününe göre
| gün | tepe | ortalama | örnek saat | pay |
|---|
Günlük tepe ve dip
| gün | tepe | ortalama | dip | masa tepe | kuyruk tepe |
|---|
Sayaçlar
Para ve reklam rayları
/health hepsi kapalıyken de
"Healthy" der. Değer asla gösterilmez, yalnız durum ve eksik değişkenin adı.| ray | durum | eksik | ne yapar |
|---|
Host
Containers
| container | cpu | memory | of limit | pids |
|---|
Tenants
| tenant | server name | currency | rake | max ccu | players |
|---|
Players
| username | email / device | coin | diamond | elo | last login |
|---|
Moderation
Adjust balance
Tenant wallets
| tenant | coin | diamond |
|---|
Inventory
| item | logical asset | source | granted |
|---|
Recent games
| time | tenant | room | round | players | winners |
|---|
Game history
| time | tenant | room | round | players | winners |
|---|
Chat history
Kaydedilen metin oyuncunun YAZDIĞI hâldir — filtre uygulanmadan önceki hâli. Oyuncuya giden mesaj her zaman maskelidir.
| time | channel | tenant | sender | target | text | filtered |
|---|
Küfür filtresi
Buraya eklenen kelime bütün sohbet ve fısıltılarda maskelenir. Değişiklik en geç bir dakika içinde bütün sunuculara yayılır.
| kelime | tenant | ekleyen | tarih |
|---|
Bildirim gönder
Mesaj her oyuncunun posta kutusuna yazılır; oyunda olana anlık, olmayana cihaz bildirimi olarak gider. Cihaz bildiriminde SADECE başlık ve metin görünür — telefon ekranında gösterilecek her şeyi buraya yazmak gerekir.
Game mode table
The deck, the dealt hand and the turn budget for each table size. These are the rules of the game, so there is ONE table for the whole platform and no tenant can hold a different one. A table takes these values when it is SEATED and keeps them for the whole match — an edit reaches players on the next table, never mid-hand. Leave a row untouched to keep the value the build ships.
| Seats | Copies / stone | False jokers | Dealt | Dealer extra | Turn (s) | Çift eşiği | Seri eşiği | Deck | Pool | Draws each |
|---|
Stake ladder
What each bet level actually costs a player. There is ONE ladder for the whole platform. Levels must run 0, 1, 2 … with no gaps — the level is half of the matchmaking queue key and also the index of the chip the client renders — and amounts must strictly increase, so a higher chip never costs less. An open room keeps the price it was created with; an edit reaches the next table, never one already advertised.
| Level | Amount (coins) | Label shown to the player |
|---|
Rated seasons
Rated play is refused while a tenant is between seasons, so nothing rated happens until a season is
open here. Exactly ONE season can be active per tenant — the database enforces it, not this page.
Leaving the dates empty starts the season now and ends it after the configured length
(ranked.season_days). Closing a season also retires its leaderboard key.
| Season | Status | Starts | Ends |
|---|
Daily login calendar
Day N of a player's streak pays row N, and the calendar CYCLES — with seven rows, day 8 pays row 1 again. The cycle length is the number of rows, which is why saving replaces the whole calendar: adding one row re-phases every player who is mid-streak. Keep the length fixed for the life of a season. A tenant with no rows has no daily-reward screen at all, and never borrows OFFICIAL's.
The streak breaks at the PLAYER's own midnight, not the server's. Amounts are paid straight into that tenant's wallets, so this page is a faucet — treat a zero you did not mean as a live incident.
| Day | Kind | Amount | Item id | Art id |
|---|
Quests
A quest counts one metric until it reaches its target, then pays once — for good. There is no reset: progress is per player and per quest id, and it is what a completed quest is paid against. Deleting a quest stops it counting but does not erase progress, so re-adding the same id later brings the old counts back with it.
"Reward text" is what the player is shown; the kind and amount beside it are what is actually paid. Keeping those two in step is a product decision no code can check — a quest that says 500 and pays 50 is a bug only a person can see.
Window is how often the quest starts over, on the SERVER's day — Lifetime never resets. Weight is how likely it is to be drawn from the pool: 200 is twice 100, and 0 keeps it in the pool for players already holding it while never drawing it again. Each player is dealt a few quests per window and keeps them until it closes, so a large pool means players see different ones. Over is the threshold a metric like "open a run worth N or more" compares against; it is required by those metrics and ignored by the rest.
Track decides which LIST the row belongs to. quest rows are drawn into the daily
rotation and pay coins or items; pass rows are season missions shown on the Savaş Bileti
screen and pay pass_xp. They share this table and the same scoring engine, but not the
same pool — a pass mission never takes a daily quest slot.
How many at once is the size of the hand each player is dealt from the pool, per window. Three daily quests out of a pool of twenty means two players rarely see the same list. It takes effect when a player's next window opens — nobody mid-window is re-dealt.
| Id | Metric | Over | Target | Track | Window | Weight | Title | Reward text | Pays | Amount | Item id | On |
|---|
Season pass
The season ladder. XP is CUMULATIVE — the total needed to reach that tier, not the step from the one below — so it must rise from tier to tier. A rung asking for less than the one under it opens at the same moment, and because every tier reads one XP total nothing downstream can tell: the player takes both boxes and one rung is never climbed. The save is refused rather than allowing it.
Each tier has two boxes. Leaving a Pays empty means that track has NO box on that tier — a real shape, and how the premium half sells itself. The premium ticket is an ordinary store bundle with the id shown below; there is no separate purchase route, so the sale appears in the revenue panel exactly like every other one.
Saving a season as active closes whichever season was active before. Boxes players already opened stay opened whatever you change afterwards — raising a tier's XP never takes a reward back.
| Tier | XP (total) | Free pays | Amount | Free art | Premium pays | Amount | Premium art |
|---|
Achievements
Lifetime goals. Progress comes from the shared metric counters, so a family (wins_10 / wins_100 / wins_1000) reads ONE number and its stages cannot disagree — which is why a higher stage in a family must ask for a bigger target. A lower one makes every stage claimable at once and the player takes the gold without ever seeing the bronze; the save is refused rather than letting that through.
Retiring is not deleting. Unticking On stops an achievement being offered and keeps every unlock players already earned. Removing the row deletes the definition, and those unlocks are left pointing at nothing. If you just want it to stop appearing, untick it.
Hidden keeps a locked achievement in the list without its name, so the "17 of 40" count still adds up. It is a surprise, not a secret — treat the title as public.
| Id | Family | Stage | Metric | Target | Title | Pays | Amount | Art id | Hidden | On |
|---|
Spin wheel
The wheel the lobby's "Şans Çarkı" turns. Weight is a relative likelihood, not a percentage: a slice at 300 is three times one at 100, and the odds are always weight ÷ total. A weight of 0 keeps the slice on the wheel and stops it ever landing — which is different from deleting it, because the slice index IS the physical wedge and deleting one renumbers the rest.
Players never see these weights. The wheel they read carries the layout, the labels and the prizes, and nothing about the odds. Saving replaces the whole wheel — a partial write could leave a gap, and a wheel with a gap stops on the wrong wedge.
| # | Weight | Odds | Label | Pays | Amount | Item id | Art id |
|---|
Ödüllü reklam yerleşimleri
Bir yerleşim, operatör açana kadar KAPALIDIR ve kapalıyken hiçbir şey ödemez. Ödül miktarı doğrudan bir jeton musluğudur: buradaki rakam, günlük hak ve oyuncu sayısıyla çarpılınca ekonomiye giren toplamdır.
Reklam birimi kimliği olmayan bir yerleşim açılamaz. Ödül yalnız Google'ın imzalı callback'iyle verilir ve o callback'in reklam birimi buradaki iki değerden biriyle eşleşmek zorundadır — boş bırakılan bir alan joker DEĞİLDİR, hiçbir şeyle eşleşmez. Böyle bir yerleşim oyuncunun günlük hakkını harcar ve karşılığında hiçbir şey ödemez.
| Yerleşim | Ödül | Hak/gün | Bekleme | Reklam birimi | Durum |
|---|
Yerleşim
Ürünler
Oyuncuya satılan her şey burada. Para birimi fiat olan satır bir IAP
ürünüdür — gerçek parayla, App Store ve Google Play üzerinden satılır; ötekiler cüzdandan
alınır. Ayrı bir IAP tablosu yoktur ve olmamalıdır: aynı raf, aynı kurallar, tek fark ödemenin
nereden geçtiğidir.
| durum | item id | ad | kategori | fiyat | verilen | teslimat | mağazalar |
|---|
İşlemler
Para defterinin kendisi: satın alımlar, mağaza harcamaları, hediyeler ve iadeler tek listede, en yenisi üstte. Tutarlar para birimi başına okunur ve asla toplanmaz — çip ile elmas ayrı şeylerdir. Sağlayıcının aldığı gerçek para yalnız IAP satırlarında vardır; boş olması ücretsiz demek değil, sağlayıcının bize bildirmediği demektir.
| Ne zaman | Oyuncu | Tür | Ürün | Tutar | Sağlayıcı | Ortam | Durum | Ödenen |
|---|
Ödendi, teslim edilemedi
Bu listedeki her satır, sağlayıcının parayı ALDIĞINI doğruladığı ama bizim teslim edemediğimiz bir satın almadır. Yani karşısında parasını ödemiş ve karşılığını almamış bir insan var. Reddedilen makbuzlar ve sağlayıcıya ulaşamadığımız denemeler burada DEĞİLDİR — onlarda kimse ödemedi.
Bir satırı çözmek onu kuyruktan çıkarır; ürünü elle vermek ayrı bir işlemdir ve notu buraya yazılır.
| Ne zaman | Oyuncu | Sağlayıcı | Ürün | Sebep | Tutar |
|---|
Add / edit store item
fiat seçmek bu satırı bir IAP ürünü yapar. O zaman
item id, App Store Connect / Play Console'daki ürün kimliğinin birebir aynısı
olmalıdır — eşleşmezse oyuncu mağazaya parayı öder, makbuz doğrulanır ve elimizde verecek bir şey
olmaz. Gerçek parayla satılan bir satır coin ya da diamond vermek zorundadır; kozmetik bir ürün
gerçek parayla satılamaz, çünkü bu sürümde ödeme alındıktan sonra onu teslim edecek bir yol yok.
Fiyat kuruş cinsindendir; cüzdan fiyatları ise doğrudan çip sayısıdır.
Leave the name blank and the player sees the raw item id on the shop card, in the purchase confirmation and on the receipt line. Art and motion are addressable logical ids — publish a different asset at the same id and the card's picture or animation changes with no client release. Leave motion empty to keep the card still.
Asset distribution
🖼️ Just a photo (no Unity needed)
Drop a plain PNG/JPG for one skin slot (a tile face, a table background, an avatar frame logical id). Max 15MB. Where it goes next depends on the tenant, and the two are NOT the same: a tenant upload is stored pending and reaches that tenant's players in their next match once it clears the review queue below — no Unity, no version, no publish; an upload to OFFICIAL is a waiting room rather than a release — no player reads it, and it reaches them only after a content build absorbs it and that catalog is published. Either way this and the Addressable-build path below are independent.
Upload & seal a tenant asset version (Addressable build)
Pick the whole ServerData/<BuildTarget> folder Unity wrote. Every file is uploaded
under that platform, the catalog is stored where the manifest points, and the version is sealed with
the build's own catalog-descriptor.json — which is what the isolation gate validates the
catalog against, so a build that shadows a platform-owned id is refused instead of published.
Publish then makes the sealed version live. Bundle files up to 200MB are accepted.
One file at a time
🕵️ Review queue — tenant photo uploads
A photo a TENANT uploads is stored pending and is served to nobody until it clears review here. (A first-party upload to OFFICIAL is different: it is approved on arrival, and it reaches players only once a content build absorbs it and that catalog is published.) Approving records the exact version you looked at, so a re-upload between your look and your click cannot ride along.
| tenant | logical id | v | state | size |
|---|
Manifest versions
| version | platform | skin label | state | hash |
|---|
Store catalog
| item | tab | art / motion | price | currency | state |
|---|
Takip linki
SKAN kaynak eşlemesi
Storefront promotions
| promo | kind | headline | % | window | state |
|---|
Add / edit promotion
The vitrine banner. once per player is the first-purchase rule: the offer disappears the moment that player has bought anything, so it is never shown to someone the till would refuse. The percentage here is what the banner ADVERTISES — the price a player actually pays is still the item's own live discount, so set both when the offer must be honoured at the till.
Permissions
New staff account
Staff roles
Audit log
| time | actor | action | target | permission |
|---|