İçeriğe atla

Oda ve olaylarOda

Maçlar

Maçları başlatın, duraklatın ve durdurun, sınırlarını belirleyin ve skoru okuyun.

Bir oda her zaman şu aşamalardan birindedir: maçlar arasında lobby, oynanırken playing, bir golden sonra 5.5 saniye boyunca goal ve bir galibiyetten sonra lobiye dönmeden önce 5 saniye boyunca finished. Simülasyon saniyede 60 tick hızında çalışır.

Kontrol

startGame()

yöntem
room.startGame(): Promise<void>

Maçı lobiden veya bitmiş aşamadan başlatır. Bir maç sürerken hiçbir şey yapmaz. Minimum oyuncu sayısı yoktur. onGameStart olayını tetikler.

Döndürür

Promise<void>

JavaScript
room.onPlayerJoin = async () => {
  const fielded = room
    .getPlayerList()
    .filter((p) => p.team !== 0);
  if (
    fielded.length >= 2 &&
    room.getScores() === null
  )
    await room.startGame();
};

stopGame()

yöntem
room.stopGame(): Promise<void>

Maçı sonlandırır ve lobiye döner. onGameStop olayını tetikler.

Döndürür

Promise<void>

pauseGame()

yöntem
room.pauseGame(paused: boolean): Promise<void>

Sürmekte olan bir maçı dondurur veya devam ettirir; lobide hiçbir şey yapmaz. Devam ettirme, oyun sürmeden önce iki saniyelik bir geri sayım (119 tick) başlatır. onGamePause veya onGameUnpause olayını, ardından onGamePauseChange olayını tetikler.

Parametreler

pausedbooleanzorunlu
true duraklatmak için, false devam ettirmek için.

Döndürür

Promise<void>

JavaScript
room.onPlayerLeave = async (player) => {
  if (player.team !== 0)
    await room.pauseGame(true);
};

Kurallar

setScoreLimit()

yöntem
room.setScoreLimit(limit: number): Promise<void>

Yalnızca maçlar arasında uygulanır: bir maç sırasında çağrı hiçbir şey yapmaz. Varsayılan değer 5'tir.

Parametreler

limitnumberzorunlu
Kazanmak için gereken gol sayısı, 0dan 99a kadar. 0, skor sınırı olmadığı anlamına gelir. Diğer tam sayılar sınırlanır.

Döndürür

Promise<void>

JavaScript
await room.setScoreLimit(3);
await room.setTimeLimit(5);
await room.startGame();

setTimeLimit()

yöntem
room.setTimeLimit(minutes: number): Promise<void>

Yalnızca maçlar arasında uygulanır. Varsayılan değer 5 dakikadır. Süre dolduğunda önde olan takım kazanır; skor eşitse oyun bir sonraki gole kadar sürer.

Parametreler

minutesnumberzorunlu
Dakika cinsinden maç süresi, 0dan 99a kadar. 0, süre sınırı olmadığı anlamına gelir.

Döndürür

Promise<void>

setKickRateLimit()

yöntem
room.setKickRateLimit(min?: number, rate?: number, burst?: number): Promise<void>

Şut spam’ini önlemek için oyuncuların ne kadar hızlı şut atabileceğini sınırlar. Her oyuncu, her tick’te bir tick’lik yeniden dolum kazanır, rate × burst’e kadar, ve şut atmak için negatif olmayan bir bakiyeye ihtiyaç duyar. Değerler kendi aralıklarına sınırlanır. Bir maç sırasında dahil olmak üzere hemen etkili olur. Sınırlanmış değerlerle onKickRateLimitSet olayını tetikler.

Parametreler

minnumber
Her şuttan sonraki bekleme süresi, tick cinsinden (saniyede 60), 0–255. Varsayılan 2dir.
ratenumber
Her şutun harcadığı yeniden dolum süresi, tick cinsinden: zamanla bir oyuncu en fazla her rate tick’te bir şut atabilir. 0–255; 0 (varsayılan) kotayı kapatır.
burstnumber
Bir oyuncunun biriktirebileceği yeniden dolum şut sayısı, 0–100. Varsayılan 0dır.

Döndürür

Promise<void>

JavaScript
// A 6-tick cooldown, two kicks a second
// sustained, and up to three kicks saved
// for a quick exchange.
await room.setKickRateLimit(6, 30, 3);

Durum

getScores()

yöntem
room.getScores(): HostScores | null

time saniye cinsinden oynanan süredir ve timeLimit saniye cinsindendir. Bkz. HostScores.

Döndürür

HostScores | nullSkor, ya da lobide ve oda kapandıktan sonra null.

JavaScript
const scores = room.getScores();
if (scores) {
  const minute = Math.floor(scores.time / 60);
  await room.sendAnnouncement(
    `${minute}' Red ${scores.red}` +
      ` – ${scores.blue} Blue`,
  );
}

getBallPosition()

yöntem
room.getBallPosition(): { x: number; y: number; } | null

Döndürür

{ x: number; y: number; } | nullTopun konumu, ya da lobide ve oda kapandıktan sonra null.

JavaScript
room.onGameTick = () => {
  const ball = room.getBallPosition();
  if (ball && Math.abs(ball.x) < 1)
    centreTicks++;
};

getState()

yöntem
room.getState(): MatchState

Tam MatchState nesnesini döndürür: aşama, tick sayaçları, sınırlar, başlama vuruşunu alacak takım ve ham disk verisi. Çoğu ihtiyaç için getScores() ve fizik metotlarını kullanın; getState(), maçı ayrıntılı olarak analiz eden araçlar içindir.

Döndürür

MatchStateMaçın tamamının bir anlık görüntüsü.

JavaScript
const { phase, elapsed, red, blue } =
  room.getState();
console.log(
  phase,
  (elapsed / 60).toFixed(1),
  red,
  blue,
);