
『Artifacts MMO』攻撃しよう!
『Artifacts MMO』とは?
『Artifacts MMO』は、APIを通じてプレイヤーがゲーム世界を直接操作・カスタマイズできる次世代型のオンラインマルチプレイヤーゲームです。プレイヤーは、ゲーム内のアイテム、キャラクター、環境などをAPIを活用してプログラミングし、自分だけの冒険を創り上げることができます。これにより、従来のゲームでは味わえなかった自由度や創造性を楽しむことが可能です。
前回の記事は、こちらです
彼を知り己を知れば百戦殆うからず
孫子もこう言っているので、まずは自分と敵のステータスを確認しましょう。
彼を知る
公式ドキュメントを読んでAPIを確認します。
モンスターの名前を指定すると、そのモンスターの情報を教えてくれます。
今回の対戦相手「Chicken」を指定してみましょう。
const API_TOKEN = "書き換えてください";
const monster = "chicken";
const url = `https://api.artifactsmmo.com/monsters/${monster}`;
const headers = new Headers();
headers.append("Accept", "application/json");
headers.append("Content-Type", "application/json");
headers.append("Authorization", `Bearer ${API_TOKEN}`);
const requestOptions = {
method: "GET",
headers: headers,
redirect: "follow",
};
const res = await fetch(url, requestOptions);
const { data } = await res.json();
console.log(data);
このプログラムをmonster.jsとして保存しました。
Node.jsを使って実行してみましょう。
環境構築は、こちらを参考にしてください。
node monster.js
{
name: 'Chicken',
code: 'chicken',
level: 1,
hp: 60,
attack_fire: 0,
attack_earth: 0,
attack_water: 4,
attack_air: 0,
res_fire: 0,
res_earth: 0,
res_water: 0,
res_air: 0,
min_gold: 0,
max_gold: 3,
drops: [
{ code: 'raw_chicken', rate: 10, min_quantity: 1, max_quantity: 1 },
{ code: 'egg', rate: 12, min_quantity: 1, max_quantity: 1 },
{ code: 'feather', rate: 8, min_quantity: 1, max_quantity: 1 }
]
}
ChickenのHPは60で、水属性の攻撃力4を持っているようです。
己を知る
公式ドキュメントを読んでAPIを確認します。
どうやらレスポンスとして沢山の情報が返ってくるようです。
今回はChickenとの戦いに必要な情報だけを取り出します。
name: キャラクターの名前
hp: キャラクターの実際のHP
attack_fire: 火属性の攻撃力
attack_earth: 土属性の攻撃力
attack_water: 水属性の攻撃力
attack_air: 風属性の攻撃力
const API_TOKEN = "書き換えてください";
const url = `https://api.artifactsmmo.com/my/characters`;
const headers = new Headers();
headers.append("Accept", "application/json");
headers.append("Content-Type", "application/json");
headers.append("Authorization", `Bearer ${API_TOKEN}`);
const requestOptions = {
method: "GET",
headers: headers,
redirect: "follow",
};
const res = await fetch(url, requestOptions);
const { data } = await res.json();
const status = data.map((character) => ({
name: character.name,
hp: character.hp,
attack_fire: character.attack_fire,
attack_earth: character.attack_earth,
attack_water: character.attack_water,
attack_air: character.attack_air,
}));
console.log(status);
プログラムは、my_status.jsとして保存しました。
Node.jsを使って実行してみましょう。
node my_status.js
[
{
name: 'CyberTribe',
hp: 120,
attack_fire: 0,
attack_earth: 4,
attack_water: 0,
attack_air: 0
}
]
私のキャラクターのHPは120で、土属性の攻撃力4を持っているようです。
いざ尋常に
敵のHPは60で、攻撃力は4です。
私のHPは120で、攻撃力は4です。
つまり30ターン後には決着がつくはずです。
敵: 0HP
自分: 60HP
実際にやってみましょう!
fight.jsという名前で保存します。
cost API_TOKEN = "書き換えてください";
const characterName = "書き換えてください";
const url = `https://api.artifactsmmo.com/my/${characterName}/action/fight`;
const headers = new Headers();
headers.append("Accept", "application/json");
headers.append("Content-Type", "application/json");
headers.append("Authorization", `Bearer ${API_TOKEN}`);
const requestOptions = {
method: "POST",
headers: headers,
redirect: "follow",
};
const res = await fetch(url, requestOptions);
const { data } = await res.json();
console.log(data);
node fight.js
ログの中のfightに戦闘の結果が保存されていますね。
fight: {
xp: 22,
gold: 0,
drops: [],
turns: 29,
monster_blocked_hits: { fire: 0, earth: 0, water: 0, air: 0, total: 0 },
player_blocked_hits: { fire: 0, earth: 0, water: 0, air: 0, total: 0 },
logs: [
'Fight start: Character HP: 120/120, Monster HP: 60/60',
'Turn 1: The character used earth attack and dealt 4 damage. (Monster HP: 56/60)',
'Turn 2: The monster used water attack and dealt 4 damage. (Character HP: 116/120)',
'Turn 3: The character used earth attack and dealt 4 damage. (Monster HP: 52/60)',
'Turn 4: The monster used water attack and dealt 4 damage. (Character HP: 112/120)',
'Turn 5: The character used earth attack and dealt 4 damage. (Monster HP: 48/60)',
'Turn 6: The monster used water attack and dealt 4 damage. (Character HP: 108/120)',
'Turn 7: The character used earth attack and dealt 4 damage. (Monster HP: 44/60)',
'Turn 8: The monster used water attack and dealt 4 damage. (Character HP: 104/120)',
'Turn 9: The character used earth attack and dealt 4 damage. (Monster HP: 40/60)',
'Turn 10: The monster used water attack and dealt 4 damage. (Character HP: 100/120)',
'Turn 11: The character used earth attack and dealt 4 damage. (Monster HP: 36/60)',
'Turn 12: The monster used water attack and dealt 4 damage. (Character HP: 96/120)',
'Turn 13: The character used earth attack and dealt 4 damage. (Monster HP: 32/60)',
'Turn 14: The monster used water attack and dealt 4 damage. (Character HP: 92/120)',
'Turn 15: The character used earth attack and dealt 4 damage. (Monster HP: 28/60)',
'Turn 16: The monster used water attack and dealt 4 damage. (Character HP: 88/120)',
'Turn 17: The character used earth attack and dealt 4 damage. (Monster HP: 24/60)',
'Turn 18: The monster used water attack and dealt 4 damage. (Character HP: 84/120)',
'Turn 19: The character used earth attack and dealt 4 damage. (Monster HP: 20/60)',
'Turn 20: The monster used water attack and dealt 4 damage. (Character HP: 80/120)',
'Turn 21: The character used earth attack and dealt 4 damage. (Monster HP: 16/60)',
'Turn 22: The monster used water attack and dealt 4 damage. (Character HP: 76/120)',
'Turn 23: The character used earth attack and dealt 4 damage. (Monster HP: 12/60)',
'Turn 24: The monster used water attack and dealt 4 damage. (Character HP: 72/120)',
'Turn 25: The character used earth attack and dealt 4 damage. (Monster HP: 8/60)',
'Turn 26: The monster used water attack and dealt 4 damage. (Character HP: 68/120)',
'Turn 27: The character used earth attack and dealt 4 damage. (Monster HP: 4/60)',
'Turn 28: The monster used water attack and dealt 4 damage. (Character HP: 64/120)',
'Turn 29: The character used earth attack and dealt 4 damage. (Monster HP: 0/60)',
'Fight result: win. (Character HP: 64/120, Monster HP: 0/60)'
],
result: 'win'
},

29ターン目に勝利して経験値22を得たみたいです。
ゴールドとアイテムは手に入らなかったですね。
まとめ
APIを使って遊ぶことができる風変わりなゲーム『Artifacts MMO』について紹介しました。APIリクエストを使って敵を倒すことができましたね。次回はAPIを使用して傷ついた体を癒したいと思います!