Rehberler
Davetlerle çok oyunculu
Sayfayı kopyala
İki oyuncu odası. Onu sunucunuzda oluşturun, Lia'ın arkadaş seçici ile veya bir bağlantı ile bir arkadaşınızı davet edin ve her iki oyuncuyu aynı odada yerleştirin.
Fikir: bir oda bir id'ye sahiptir ve bu id davete girer's startParam. Daveti açan kişi, startParam ile uygulamanı açar ve sayfan, onlarla odaya katılır. Lia'kendi Lia XO böyle çalışır.
#1. Sunucunda bir oda oluştur
app.post("/api/rooms", async (req, res) => {
const playerId = await playerFrom(req.body.session); // see Verify on your server
if (!playerId) return res.status(401).end();
const room = "room-" + crypto.randomUUID().replace(/-/g, "").slice(0, 10);
await db.createRoom(room, { host: playerId, players: [playerId] });
res.json({ room });
});
app.post("/api/rooms/join", async (req, res) => {
const playerId = await playerFrom(req.body.session);
if (!playerId) return res.status(401).end();
const room = await db.room(req.body.room);
if (!room) return res.status(404).json({ error: "no_room" });
if (room.players.length >= 2 && !room.players.includes(playerId)) return res.status(409).json({ error: "full" });
await db.addPlayer(req.body.room, playerId);
res.json({ room: req.body.room });
});Oda kimlikleri startParam'a sığmalı: 1 ile 64 arasında harfler, rakamlar, _ ve -.
#2. Bir arkadaşınızı davet edin
async function playWithAFriend() {
const { room } = await api("/api/rooms", {});
showWaiting(room);
const { invited } = await Lia.inviteFriend({ startParam: room });
if (!invited) Lia.toast("Share the link to invite someone");
}
// Or a link to send anywhere: opens your app in Lia, or the App Store without it.
async function shareRoom(room) {
await Lia.share("Play with me: " + Lia.inviteLink(room));
}Her seçilen arkadaş, onların Lia sohbetinde bir kart alır. Lia sadece arkadaşlarınızı davet etmenizi izler, ve sadece uygulamanızı açabildiğiniz arkadaşlar (uygulama's test modunda, sadece testçiler).
#3. odada indir
Uygulamanız açıldığında startParam'u okuyun ve onun gelmesini dinleyin'açık (kişi ikinci bir daveti tıklar):
function route(startParam) {
if (startParam && startParam.startsWith("room-")) joinRoom(startParam);
}
Lia.init().then(function () {
route(Lia.startParam);
Lia.ready();
});
Lia.on("startParam", function (data) { route(data.startParam); });
async function joinRoom(room) {
try {
await api("/api/rooms/join", { room });
openTable(room);
} catch (error) {
Lia.toast(error.message === "full" ? "That game is full" : "That game has ended");
}
}startParam sadece bir ipucudur: herkes herhangi bir startParam ile bir bağlantı oluşturabilir, bu yüzden sunucunuz o odanın var olup olmadığını ve oyuncunun katılabileceğini karar verir.
#4. Canlı oynayın
Oyuncuları sunucunuza bağlayın (bir WebSocket genellikle yaygındır) ve her oyuncuyu doğrulayın's oturumu, odaya katılmadan önce. Oyun oynarken:
Lia.enableClosingConfirmation(); // "Leave the game?" if they close
Lia.disableVerticalSwipes(); // a swipe down won't close the sheet mid move
Lia.onPause(function () { socket.send(JSON.stringify({ type: "away" })); });
Lia.onResume(function () { socket.send(JSON.stringify({ type: "back" })); });#5. Bildirimle sıra sizde
Zaman's biri'hareket ve onlar'uygulamandan ayrıldığında, bir bildirim odanın startParam ile onları doğrudan geri getirir:
{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "@kofi played. Your move.", "startParam": "room-a81c2e09f4" }#Kamuya açık tablolar
Davetler arkadaşlar için. Lia'a kimseyi dahil etmek için, aynı zamanda odanın listesini lobi beklerken:
// When the room is made: list it (as the host, with one seat taken).
await lia("POST", "/lobby/tables", { tableId: room, hostPlayerId: playerId, seats: 2, taken: 1, title: "Quick game" });
// When someone joins from the lobby: seat them through Lia first (it refuses blocked players and full tables).
app.post("/api/rooms/sit", async (req, res) => {
const playerId = await playerFrom(req.body.session);
if (!playerId) return res.status(401).end();
try {
const { full } = await lia("POST", `/lobby/tables/${encodeURIComponent(req.body.room)}/sit`, { playerId });
await db.addPlayer(req.body.room, playerId);
if (full) startGame(req.body.room);
res.json({ room: req.body.room });
} catch (error) {
res.status(409).json({ error: error.data?.error ?? "failed" }); // full, not_found, own_table
}
});
// When the game starts or the room closes: take it out (safe to repeat).
await lia("DELETE", `/lobby/tables/${encodeURIComponent(room)}`);Sayfanızda, açık tabloları gösterin ve Lia seçmiş kişileri oturtun'kendi lobi (onlar startParam ile gelir lobby-<table id>):
const { tables } = await Lia.lobby.tables();
renderTables(tables, (table) => api("/api/rooms/sit", { room: table.id }));
function route(startParam) {
if (startParam?.startsWith("lobby-")) return api("/api/rooms/sit", { room: startParam.slice(6) }).then(openTable);
if (startParam?.startsWith("room-")) return joinRoom(startParam);
}Yabancılar't Lia üzerinden sohbet edin, bloklar saygı göstersin ve oyuncular rapor birbirlerine.
#Bilinmesi gereken sınırlar
- Bir kişi günde 20 arkadaşı uygulamanıza davet edebilir, bu yüzden davetler, sohbetlerde hoş karşılanan şey olmaya devam eder.
- Bir sunucu, uygulamanızda aynı anda 3 açık kamuya açık masa var ve bir liste en fazla bir saat sürer.
Lia.inviteFriend()cevaplar{ invited }, kimin davet edildiğini asla değil: sunucunuz, onların katıldığı anda kimin katıldığını öğrenir.
Otomatik çeviri. İngilizce, doğru kaynaktır. İngilizce olarak oku