Oyun kuralları ve otomasyonlar
Bu sayfa panelin “Kurallar” ekranının iki parçasını anlatır: oyunun eklentisinin bildirdiği oyun kuralı değerleri (örneğin polis eşikleri) ve olay olunca otomatik iş yapan otomasyonlar. Oyunun davranışını kod yayımlamadan ayarlamak ya da bir olaya otomatik tepki vermek istiyorsanız okuyun.
Ne işe yarar
- Oyun kuralı değerleri: Oyunun eklentisi hangi sayıların ayarlanabilir olduğunu bildirir (ad, birim, alt ve üst sınır, adım, varsayılan). Operatör bu değerleri panelde değiştirir ve yayınlar; yeni değerler oyunda kısa süre içinde (en geç yaklaşık 6 saniye) geçerli olur. Her yayın yeni bir sürüm olur ve tek tıkla eski değerlere dönülebilir.
- Otomasyonlar: “Şu olay olunca, şu koşul doğruysa, şunu yap” biçiminde kurallar. Kural, karakter olaylarına (
level_up,xp_added…) bağlanır ve karaktere stat, kaynak, bayrak, değiştirici ya da ödül verir. Koşullar CEL ifadesiyle yazılır; panelde yapısal bir oluşturucu CEL’i sizin için üretir.
Oyun kuralı değerleri panel yüzeyidir: oyun sunucunuz bunları bir REST ucuyla yazmaz; eklenti değerleri sunucuda okur. Otomasyonlar ise hem panelden hem REST ile yönetilir (characters modülünün parçasıdır).
Panelde nerede
| Ne yapacaksınız | Panel sayfası |
|---|---|
| Kurallar ekranına genel bakış, konu ve kartlar | Kurallar |
| Bir oyun kuralı kartını düzenleyip yayınlamak, önizlemek | Kural kartı |
| Yayın geçmişini ve farkı görmek, geri almak | Kural geçmişi |
| Otomasyon oluşturmak, düzenlemek, açıp kapatmak | Otomasyon düzenleyici |
Oyun kuralı değerleri
Model
- Katalog: Oyunun eklentisi bildirir. Konular, kartlar ve her kartın parametreleri vardır; her parametre bir birimle (örn. saniye, metre, yüzde) ve sınırlarla gelir. Katalog yoksa ya da eklenti bildirmiyorsa panelde yalnız Otomasyonlar görünür.
- Sürüm: Etkin değerler en son sürümdür. Hiç yayın yoksa eklentinin kod varsayılanları kullanılır (“Kod varsayılanı”). Yayın ve geri alma yeni sürüm yazar; geçmiş silinmez.
- Uygulama zamanı: Parametre
canlıise yayından sonra kısa sürede uygulanır;yeniden başlatmadaise oyun sunucusu yeniden başlayana dek eski değer kalır ve panel “Yayında / Bekliyor” olarak ikisini birlikte gösterir. - Doğrulama: Değerler katalog sınırı, adım ve alanlar arası kısıtlarla sunucuda doğrulanır; hatalı alan alan başına bildirilir. Eklenti ayrıca aynı sınırlarla yeniden doğrular; geçersiz bir değer oyunu bozmaz, eklenti kod varsayılanlarına döner.
- Yetki: Okuma dört panel rolünde; yayın ve geri alma yalnız
super_adminvegame_managerrollerinde. Yayın ve geri alma 8–500 karakterlik bir gerekçe ister ve denetim kaydına yazılır. - Eşzamanlılık: Yayın, gördüğünüz sürümü (
expectedVersion) taşır; siz bakarken başka biri yayınladıysa409döner ve sekmeyi yenilemeniz gerekir. - Önizleme: Panel, bir senaryoyu (örn. sürekli hız ihlali) eklentinin gerçek mantığıyla bugünkü ve önerilen değerlerle çalıştırıp olay zaman çizelgesini gösterir; hiçbir şey kaydetmez.
- İstemci uyarısı: Bir parametre
clientVisibleise oyun istemcisi onu eklentinin sorgusundan okur. İstemci o değeri henüz okumuyorsa panel yayın sırasında sizi uyarır.
Oyuna etkisi
Oyun kuralı değerlerini oyun kodunuz REST ile okumaz. Eklenti değerleri sunucuda her adımda tek bir görüntüden alır; istemciye gereken değerler eklentinin kendi sorgusuyla gelir. Bu davranış eklentiye özgüdür; bugün yalnız package-ride eklentisi bir katalog bildirir. Üçüncü taraf eklentilerin katalog bildirmesi ve yüklenmesi henüz desteklenmez; bkz. Eklentiler: genel bakış.
Otomasyonlar
Model
- Kural (rule):
key(tekil anahtar),trigger_type(tetikleyici olay),condition(CEL ifadesi),actions(eylem listesi) vepriority. Kural sürümlüdür; her yayın yeni sürümdür. - Tetikleyici:
flag_set,attribute_set,resource_changed,modifier_added,modifiers_removed,xp_added,level_up,ability_unlocked,event_emitted,character_rolled_back. Bilinmeyen tür reddedilir. Panel oluşturucusucharacter_rolled_backseçeneğini sunmaz. - Eylemler:
add_stat(key,delta),add_resource(key,delta),set_flag(key,value),add_modifier,remove_modifiervegrant_reward(what: sabit para{ "type": "currency", "key", "amount" }ya da ödül tablosu{ "type": "table", "key" }). - CEL bağlamı: Koşulda
character,event,nowveseeddeğişkenleri vardır;has_ability,base_statveclampişlevleri kullanılabilir. Zamanı ve tohumu bağlam taşır, kural kendi saatini okuyamaz;now()verandom()yoktur. Kurallar kayıt anında derlenir, çalışma anında değil. - Bütçe (değişmez): Bir komut zincirinde en çok 50 kural değerlendirilir, 200 eylem üretilir, zincir derinliği 5’i, koşul ifadesi 500 düğümü aşamaz. Aşım fail-closed’dur: komut
429ile reddedilir ve hangi sınırın aşıldığı söylenir. Birbirini tetikleyen iki kural bu sınırla kesilir.
Panel oluşturucusu
Oluşturucu “Ne zaman → Koşullar → Ne yap” yapısından CEL üretir: koşul satırları (alan, işleç, değer) hepsi (&&) ya da herhangi biri (||) ile birleşir; en çok 20 koşul ve 10 eylem eklenebilir. Metin değerleri kaçışlanır; satır sonu ve kontrol karakterleri reddedilir. Oluşturucu varken sunucu kuralı yeniden derler (istemcinin gönderdiği CEL metni oluşturucu kuralında okunmaz). Yeni kural kapalı başlar; “hemen aç” seçeneği işaretsizdir. Yayın öncesi örnek bir olayla dry-run (deneme koşusu) yapabilirsiniz; zorunlu değildir.
Oyunun yaptığı çağrılar
Kural uçları API anahtarıyla çağrılır:
Authorization: Bearer crx_live_<önek>_<gizli>
| Yöntem ve yol | Ne yapar |
|---|---|
POST /v1/rules | Kuralı kaydeder (201) |
GET /v1/rules | Kuralları listeler (cursor, limit) |
GET /v1/rules/{key} | Kuralın güncel sürümünü okur |
POST /v1/rules/{key}/enable, POST /v1/rules/{key}/disable | Kuralı açar / kapatır (204) |
DELETE /v1/rules/{key} | Kuralı siler (204) |
POST /v1/rules/dry-run | Kuralı bir karaktere karşı yazmadan dener |
Uyarı
Bilinen kısıt: Kural yazan uçlar anahtar türüne bakmaz; geçerli bir istemci anahtarı da kural kaydedebilir ya da silebilir. İstemci anahtarını oyuna gömüyorsanız kural yönetimini kendi sunucunuzdan yapın ve bu uçları istemciden çağırmayın.
TypeScript SDK’sı bu uçları tipli sunar: createRule, listRules, getRule, deleteRule, enableRule, disableRule, dryRunRule (bkz. TypeScript SDK). Bu uçlar ham CEL metni alır; panel oluşturucusunun yapısal modeli yalnız panel yüzeyindedir.
Kural kaydetmek
POST /v1/rules
Authorization: Bearer crx_live_<önek>_<gizli>
Content-Type: application/json
{
"key": "lvl10_reward",
"trigger_type": "level_up",
"condition": "event.to == 10",
"actions": [
{ "type": "grant_reward", "what": { "type": "currency", "key": "gold", "amount": 1000 } },
{ "type": "set_flag", "key": "reached_level_10", "value": true }
],
"priority": 0
}
{ "key": "lvl10_reward", "current_version": 1, "enabled": true, "created_at": "2026-11-03T09:00:00Z" }
REST ile kaydedilen kural hemen açık başlar (enabled: true); panel oluşturucusundan farklı olarak kapalı başlatmak için kaydın ardından POST /v1/rules/{key}/disable çağırın. event.to seviye atlama olayının yeni seviyesidir; olay alanları tetikleyiciye göre değişir. Koşul derlenemezse, tetikleyici bilinmiyorsa ya da bütçe sınırı aşılıyorsa kayıt reddedilir.
Deneme koşusu
POST /v1/rules/dry-run
Authorization: Bearer crx_live_<önek>_<gizli>
Content-Type: application/json
{ "condition": "character.progression.level >= 10", "actions": [ { "type": "set_flag", "key": "veteran", "value": true } ], "character_id": "0192f0f2-…" }
{ "condition_result": true, "node_cost": 7, "would_produce_events": [ { "...": "…" } ], "would_grant": [], "warnings": [] }
Dry-run hiçbir olay yazmaz ve ödül vermez.
Sürümleme ve tekrar güvenliği
- Oyun kuralı yayını ve geri alma:
Idempotency-KeyveexpectedVersionile panel tarafından yapılır; aynı anahtarla tekrar aynı sürümü döndürür, tek denetim kaydı yazar. - Otomasyon yayını: her yayın yeni sürümdür; eski sürümler silinmez ve “geri al” eski sürümü yeni sürüm olarak yeniden yazar.
- REST kural uçlarında
Idempotency-KeyveIf-Matchyoktur.
Olaylar
Kuralın çalıştırdığı eylemler normal karakter olaylarını üretir (flag_set, xp_added …); bunlar webhook’larla iletilebilir. Kuralın ürettiği ödül reward_granted olayı da üretir.
Sınırlar
- Komut zincirinde 50 kural, 200 eylem, derinlik 5, koşul başına 500 düğüm.
- Panel oluşturucusunda en çok 20 koşul ve 10 eylem.
- Oyun kuralı gerekçesi 8–500 karakter.
- Oyun kuralı tam sayı değerleri panelde ±(2^53−1) ile sınırlıdır.
Sık görülen hatalar
| Belirti | Neden | Çözüm |
|---|---|---|
429 (komut) | Kural zinciri bütçeyi aştı | Birbirini tetikleyen kuralları sadeleştirin |
Kayıtta 400/422 | CEL derlenemedi, bilinmeyen tetikleyici ya da alan | Koşulu önce dry-run ile deneyin |
Panelde 409 (yayın) | Siz bakarken başka biri yayınladı | Sekmeyi yenileyip tekrar yayınlayın |
Panelde alan hatası (422) | Değer sınır, adım ya da kısıt dışında | Alanın gösterdiği sınıra uyun |
| Değeri yayınladım, oyun eski davranıyor | Parametre yeniden başlatmada uygulanıyor ya da 6 saniye dolmadı | Panelin “Bekliyor” göstergesine bakın |
Çalışan örnek
Yukarıdaki iki istek (lvl10_reward kaydı ve dry-run) birlikte tam bir akıştır: önce dry-run ile koşulu deneyin, sonra POST /v1/rules ile kaydedin, sonra bir karaktere add_xp komutuyla seviye atlatarak kuralın çalıştığını Karakterler sayfasındaki akışla doğrulayın.