İçeriğe atla

Oda barındırma

Maçlar

Bir maçın nasıl ilerlediği ve onu nasıl başlatacağınız, duraklatacağınız, sınırlayacağınız ve takip edeceğiniz.

Aşamalar

Bir oda dört aşamadan geçer; bu aşamalar getState().phase ile bildirilir:

AşamaNe olurBiter
lobbyOyuncular takım seçer; disk yoktur.startGame()
playingMaç saniyede 60 tick hızında çalışır.Bir gol, bir galibiyet veya stopGame()
goalBir golden sonra top 5.5 saniye boyunca oyun dışıdır.Başlama vuruşu pozisyonları sıfırlanır
finishedBir takım kazanmıştır; sonuç 5 saniye boyunca gösterilir.lobby'ye geri döner

Bir takım skor sınırına ulaştığında veya bir takım önde olarak süre bittiğinde maç kazanılır. Süre sınırında skor berabereyse oyun bir sonraki gole kadar sürer.

Bir maçı kontrol edin

JavaScript
await room.setScoreLimit(3); // 0 = no limit
await room.setTimeLimit(5); // minutes, 0 = no limit
await room.startGame();

Skor ve süre sınırları, stadyumlar gibi, yalnızca maçlar arasında değişir: bir maç sırasında bu çağrılar hiçbir şey yapmaz. Bunları startGame()'den önce ayarlayın.

pauseGame(true) oyunu dondurur; pauseGame(false) iki saniyelik bir geri sayımdan sonra devam ettirir. stopGame() maçı kazanan olmadan sonlandırır.

Maçı takip edin

Olaylar size ne olduğunu bildirir; okumalar ise durumun ne olduğunu gösterir.

JavaScript
room.onTeamGoal = (team) => {
  const { red, blue, time } = room.getScores();
  console.log(
    `${Math.floor(time / 60)}' ` +
      `${team === 1 ? 'Red' : 'Blue'} scores: ${red}–${blue}`,
  );
};

room.onTeamVictory = ({ red, blue }) => {
  void room.sendAnnouncement(
    `Full time: Red ${red} – ${blue} Blue`,
    null,
    null,
    'bold',
  );
};

onGameTick, oyun sırasında her simülasyon adımından önce saniyede 60 kez çalışır. Topa hâkimiyet veya ısı haritaları gibi her anı takip etmesi gereken işler için kullanın ve hızlı tutun: yavaş bir işleyici tüm odayı yavaşlatır. Süreciniz yarım saniyeden uzun süre tıkanırsa oda maçı duraklatır ve Host scheduler stalled; match paused. bildirir.

Maçları sürdürün

Yaygın bir düzen, bir maç bittiğinde bir sonrakini otomatik olarak başlatır:

JavaScript
room.onGameStop = async () => {
  const fielded = room
    .getPlayerList()
    .filter((p) => p.team !== 0);
  if (fielded.length >= 2) {
    await new Promise((resolve) => setTimeout(resolve, 3000));
    await room.startGame();
  }
};

onGameStop, bir maç durdurulduğunda da bittikten sonra lobiye döndüğünde de tetiklenir.

Şut spamı

setKickRateLimit(min, rate, burst), oyuncuların ne kadar hızlı şut çekebileceğini sınırlar. Maç ortasında bile anında uygulanır.