Klanlar ve partiler
Bu sayfa kalıcı oyuncu topluluklarını (klan) ve geçici takımları (parti) Open Play’de nasıl kuracağınızı ve yöneteceğinizi anlatır. Üyelik, davet, klan hazinesi, klan XP’si ve parti ödül dağıtımını güvenilir bir sunucudan yönetmek istiyorsanız okuyun.
Ne işe yarar
Sosyal modül (social) iki yapıyı yönetir:
- Klan (clan): Kalıcı topluluk. Lider, subay ve üye rolleri, davet ve başvuru akışı, ortak hazine (para birimi) ve XP/seviye vardır.
- Parti (party): Geçici takım. Kapasitesi, ganimet kuralı ve ödül bölüştürmesi vardır; dağılınca sona erer.
Önemli: Bu uçların hepsi sunucu anahtarıyla çağrılır. Oyuncu istemcisi doğrudan klan ya da parti ucunu çağıramaz; oyuncunun kimliği isteğin gövdesinde (actor_player_id gibi) sizin güvenilir sunucunuz tarafından yazılır. Oyuncunun “kendi klanını yönetebildiğini” doğrulamak sizin sunucunuzun işidir; Open Play klan içindeki rol kurallarını (kimin kimi atabileceği, hazineden kimin çekebileceği) uygular.
Modül kapalıysa uçlar 404 ve {"code":"module_disabled","module":"social"} döner. Modülü Oyun ayarları › Modüller sayfasından açın.
Panelde nerede
| Ne yapacaksınız | Panel sayfası |
|---|---|
| Klanları listelemek, üyelik, davet, başvuru, kasa ve komut geçmişini görmek | Klanlar |
| Partileri, üyelerini, ganimet kuralını ve ödül dağıtımlarını görmek | Partiler |
| Klan ve parti sohbeti | Sohbet, Şehir sohbeti |
| Klan hazinesinde kullanılan para birimi | Para birimleri |
Veri modeli (düz dille)
Klan
name(3–64 karakter),tag(2–8 karakter),leader_player_id,xp,highest_level_reached,state(activeya dadisbanded) vemembers.- Roller:
leader,officer,member. - Ortam ayarları (
/v1/clan-settings):max_members(üye sınırı),request_ttl_seconds(davet ve başvuru ömrü),officer_can_withdraw(subay hazineden çekebilir mi) velevel_curve_key(klan seviyesi için seviye eğrisi). - Davet (invite): Klanın oyuncuya gönderdiği çağrı. Durumları
pending,accepted,declined,revoked,expired. - Başvuru (application): Oyuncunun klana başvurusu. Durumları
pending,accepted,rejected,cancelled,expired. - Hazine: Klanın cüzdanı;
depositvewithdrawile para birimi hareketi yapılır ve defterdeclan_treasuryolarak görünür.
Parti
leader_player_id,capacity(pozitif),loot_rule(equal: eşit pay,weighted: baz puan payları),state(active,disbanded) vemembers.- Davet:
share_bp(üyenin baz puan payı;weightedkuralda payların toplamı tam 10000 olmalıdır) taşır ve 24 saat geçerlidir. Durumlarıpending,accepted,expired. - Ödül dağıtımı: Tek bir para birimi tutarını üyelere böler. Eşit dağıtımda artık kuruşlar
player_idsırasına göre dağıtılır; sonuç her zaman belirlenimcidir. Dağıtım kaydı üye anlık görüntüsünü, bacakları,delivery_mode(inlineya daoutbox) ve durumu (processing,queued,completed) taşır.
Oyunun yaptığı çağrılar
Hepsi sunucu (ya da yönetici) anahtarıyla:
Authorization: Bearer crx_live_<önek>_<gizli>
İstemci anahtarı ve oyuncu oturumu reddedilir (403).
Klan
| Yöntem ve yol | Gövde | Ne yapar |
|---|---|---|
GET /v1/clan-settings, PATCH /v1/clan-settings | max_members, request_ttl_seconds, officer_can_withdraw, level_curve_key | Ortam ayarlarını okur / günceller |
GET /v1/clans | — | Klanları listeler |
POST /v1/clans | leader_player_id, name, tag | Klan kurar |
GET /v1/clans/{clan_id} | — | Klanı üyeleriyle okur |
PATCH /v1/clans/{clan_id} | actor_player_id, name, tag | Ad ve etiketi günceller |
POST /v1/clans/{clan_id}/invites | inviter_player_id, invitee_player_id | Davet gönderir |
GET /v1/clan-invites/{invite_id}, POST …/respond | actor_player_id, decision (accept, decline, revoke, expire) | Daveti okur / yanıtlar |
POST /v1/clans/{clan_id}/applications | applicant_player_id | Başvuru açar |
GET /v1/clan-applications/{application_id}, POST …/resolve | actor_player_id, decision (accept, reject, cancel, expire) | Başvuruyu okur / çözer |
POST /v1/clans/{clan_id}/leave | actor_player_id | Üye ayrılır |
POST /v1/clans/{clan_id}/members/kick | actor_player_id, target_player_id | Üyeyi çıkarır |
POST /v1/clans/{clan_id}/members/role | actor_player_id, target_player_id, role | Rol değiştirir |
POST /v1/clans/{clan_id}/leadership | actor_player_id, target_player_id | Liderliği devreder |
POST /v1/clans/{clan_id}/disband | actor_player_id | Klanı dağıtır |
POST /v1/clans/{clan_id}/treasury/deposit, …/withdraw | actor_player_id, currency_id, amount | Hazineye yatırır / çeker |
POST /v1/clans/{clan_id}/xp | amount | Klana XP ekler |
Klan yazma komutlarının hepsinde Idempotency-Key zorunludur. Yanıt hep aynı zarftadır: { "type": "clan" | "invite" | "application" | "settings" | "treasury" | "xp", "<tür>": { … }, "replayed": false }. Örneğin klan kurma:
POST /v1/clans
Authorization: Bearer crx_live_<önek>_<gizli>
Idempotency-Key: clan-kur-oyuncu-1234
Content-Type: application/json
{ "leader_player_id": "0192f0f2-5b1a-7c3e-9d11-4a5b6c7d8e9f", "name": "Kurt Sürüsü", "tag": "KRT" }
201 döner ve type: "clan" zarfı içinde klan kaydı gelir. TypeScript SDK’sı bu uçları tipli olarak sunar (createClan, getClan, createClanInvite, respondClanInvite, depositClanTreasury, addClanXp …); bkz. TypeScript SDK.
Parti
| Yöntem ve yol | Gövde | Ne yapar |
|---|---|---|
POST /v1/parties | leader_player_id, capacity, loot_rule | Parti kurar |
GET /v1/parties?player_id= | — | Oyuncunun partilerini listeler |
GET /v1/parties/{party_id} | — | Partiyi üyeleriyle okur |
PATCH /v1/parties/{party_id} | actor_player_id, capacity | Kapasiteyi günceller |
POST /v1/parties/{party_id}/invites | inviter_player_id, invitee_player_id, share_bp | Davet gönderir |
POST /v1/party-invites/{invite_id}/accept | actor_player_id | Daveti kabul eder |
POST /v1/parties/{party_id}/leave | actor_player_id | Üye ayrılır |
POST /v1/parties/{party_id}/disband | actor_player_id | Partiyi dağıtır |
POST /v1/parties/{party_id}/rewards | currency_key, amount | Ödülü üyelere böler |
Parti ödül dağıtımında Idempotency-Key zorunludur; aynı anahtarla tekrar aynı dağıtımı replayed: true ile döndürür, ikinci dağıtım yapmaz. Diğer parti komutları Idempotency-Key istemez.
Not
TypeScript SDK’sında parti uçları için tipli istemci yoktur; ham REST ile çağrılır.
Sürümleme ve tekrar güvenliği
- Klan komutları ve parti ödül dağıtımı
Idempotency-Keyister: aynı anahtar ve aynı gövde tekrar çalışmaz (replayed: true); aynı anahtar farklı gövde422; uçuşta aynı anahtar409. If-Matchbu modülde kullanılmaz.- Genel kurallar: Idempotency ve eşzamanlılık.
Olaylar
Klan ve parti olayları (ClanMemberJoined, ClanXpAdded, PartyMemberJoined, RewardDistributed …) kural otomasyonunda ve görev hedeflerinde kullanılabilir. Webhook filtresi olarak seçilebilen türler arasında klan ya da parti olayı yoktur; filtresiz kayıtlı uç noktalar bütün olayları alır ve bunlara klan/parti olayları dahildir, ancak zarf biçimi belgelenmiş bir sözleşme değildir. Seçilebilir türler: Webhook olayları.
Sınırlar
- Klan adı 3–64, etiketi 2–8 karakter.
- Parti kapasitesi pozitif olmalı; kapasite aşımı reddedilir. Parti daveti 24 saat geçerlidir.
- Klan üye sınırı ve davet/başvuru ömrü ortam ayarlarındadır.
- Parti ödülünde
weightedpayların toplamı 10000 olmalıdır;amountpozitif olmalıdır.
Sık görülen hatalar
| Belirti | Neden | Çözüm |
|---|---|---|
403 | Oyuncu oturumu ya da istemci anahtarıyla çağrı; ya da actor_player_id’nin klan içinde bu işlem için yetkisi yok (örn. üye başka üyeyi atamaz) | Çağrıyı sunucu anahtarıyla yapın; actor_player_id rolünü kontrol edin |
400 | Idempotency-Key eksik; klan adı/etiketi uzunluk ya da karakter kuralına uymuyor; XP ya da tutar pozitif değil; parti kapasitesi pozitif değil | Girdiyi düzeltin |
409 | Aynı ad ya da etiketle klan var; oyuncu zaten başka bir aktif klanda/partide; bekleyen davet ya da başvuru zaten var; aynı anahtar uçuşta | Çakışan kaydı okuyup kararı oyuna bırakın |
422 | Parti kapasitesi/pay kuralları (kapasite aşımı, weighted pay toplamı 10000 değil, yinelenen oyuncu) ya da aynı anahtar farklı gövde | Girdiyi düzeltin; yeni anahtar kullanın |
404 | Klan, davet ya da parti yok | Kimlikleri GET ile doğrulayın |
Çalışan örnek
TypeScript’te klan kurup davet gönderme (SDK’nın tipli klan istemcisiyle):
/** Güvenilir backend örneği: klan kurar ve bir oyuncuya davet gönderir. Server anahtarı yalnız sunucuda durur. */
import { CrxClient } from "@ferdiunal/open-play-ts";
/** Lider için klan kurar, ardından davet gönderir; her yazma kendi `Idempotency-Key`'iyle tekrar güvenlidir. */
export async function foundClanAndInvite(baseUrl: string, serverApiKey: string, leaderId: string, friendId: string): Promise<string> {
const crx = new CrxClient({ baseUrl, apiKey: serverApiKey });
const created = await crx.createClan({
body: { leader_player_id: leaderId, name: "Kurt Sürüsü", tag: "KRT" },
headers: { "Idempotency-Key": `clan-kur-${leaderId}` },
});
if (created.type !== "clan") throw new Error("Beklenmeyen yanıt zarfı");
await crx.createClanInvite({
path: { clan_id: created.clan.id },
body: { inviter_player_id: leaderId, invitee_player_id: friendId },
headers: { "Idempotency-Key": `davet-${created.clan.id}-${friendId}` },
});
return created.clan.id;
}