「JavaScriptで、味方の攻撃(詳細)」の編集履歴(バックアップ)一覧はこちら

JavaScriptで、味方の攻撃(詳細)」(2012/04/03 (火) 18:13:26) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

ピップの行動は打撃攻撃のみ載せる。他の行動は、アイテムを使う処理にすべて書いてあるので、そちらを参照されたい。 1対1の殴りあいより複雑になったことは、、、 -敵が複数の場合は、どの敵を選ぶか自動で選ぶ。 -召還悪魔フレッドがこちらに加勢した場合、ピップの後、敵1の前に攻撃させるようにする。 -魔法の効果やステータス変化たくさんありすぎ // ピップが行動可能か調べ、ユーザーにピップの行動ボタンをクリックするよう促す combat.Pip_select = function (){ // ターン数の計算 if (Pip.first_strike === true) { combat.turn_num++; } //add_msg("combat.Pip_select()に入った。"); if (Pip.LIFE_POINT <= 0) { add_msg("ピップは死んでいる。。。"); combat.Pip2enemy_turn(); } else if (Pip.LIFE_POINT <= 5) { add_msg("ピップは気絶している。。。"); combat.do_next = "enemy0_select"; combat.Pip2enemy_turn(); } else { add_msg("ピップはどうする? 「殴る」などの行動ボタンをクリックせよ。"); //combat.do_next = "Pip_do"; } if (Pip.bone_pain === true) { add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。"); } if (Pip.yoga > 0) { add_msg("ヨガで関節が痛み、、敵に与える被害点が2点マイナスされる。"); } } // 「殴る」をクリック function click_punch() { Pip.attack_base = 6; Pip.extra_damage = 0; Pip.attack_way = "素手"; dice.start(2,"combat.Pip_strike()"); } // 戦利品アイテムを使用 function click_event(i) { // 略 } // マーリンの隠れ家2の装備品アイテムを使用 function click_equip(i) { // 略 } // マーリンの隠れ家3の魔法の品アイテムを使用 function click_magic(i) { // 略 } // ピップや味方フレッドが攻撃する敵の対象を自動で選ぶ combat.find_Pip2enemy_target = function () { //find target var i = 0; var found_target = -1; for (i = 0; i < enemy.length; i++) { if (found_target === -1 && enemy[i].LIFE_POINT > 5 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) { found_target = i; } } if (found_target === -1) { for (i = 0; i < enemy.length; i++) { if (found_target === -1 && enemy[i].LIFE_POINT > 0 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) { found_target = i; } } } if (found_target === -1) { add_msg("敵が見つからない?"); } //add_msg("ピップが狙う標的は" + enemy[found_target].name + found_target); return found_target; } // ピップが素手や剣などの打撃攻撃時の被害点計算 combat.Pip_strike = function () { //add_msg("pip_strikeに入った。"); var i = combat.find_Pip2enemy_target(); if (Section.num === "82") { // 見えない敵 Pip.attack_base = Math.max(Pip.attack_base, 5); } else if (Section.num === "171") { // ワニガエル獣 Pip.attack_base = Math.max(Pip.attack_base, 5); } var attack_point = Math.max(dice.dice12pip - Pip.attack_base, 0) + Pip.extra_damage; var damage_point = attack_point - enemy[i].defence; add_msg("ピップは" + Pip.attack_way + "で" + enemy[i].name + "を攻撃。"); if (Pip.bone_pain === true) { add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。"); damage_point = Math.floor(damage_point / 2); } if (Pip.yoga > 0) { add_msg("ヨガで関節が痛み、敵に与える被害点が2点マイナスされる。"); damage_point -= 2; } if (Pip.Lucky_Coin > 0) { add_msg("幸運の金貨で、敵に与える被害点が2点プラスされる。"); damage_point += 2; } if (Pip.attack_way === "即死剣" && dice.dice12pip >= 11) { add_msg("即死剣で" + enemy[i].name + "は即死した!"); enemy[i].LIFE_POINT = 0; update_status(); } else if (dice.dice12pip - Pip.attack_base <= 0) { add_msg("空振り!"); } else if (damage_point <= 0) { add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。"); } else { if (EJ.pudding > 0) { add_msg("E・Jがプリンになっているので与える被害点は2点になってしまう。"); damage_point = 2; } if (Pip.Lucky_Coin > 0) { Pip.Lucky_Coin--; if (Pip.Lucky_Coin > 0) { add_msg("幸運の金貨の効果は残り" + Pip.Lucky_Coin + "回。"); } else { add_msg("幸運の金貨の効果が切れた。"); data_magic[9].label = "使う"; } } enemy[i].LIFE_POINT -= damage_point; add_msg("ピップは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。"); if (Section.num === "131") { combat.round++; add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。"); } if (Section.num === "146") { combat.round++; add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。"); } update_status(); } combat.Pip2enemy_turn(); } // 味方フレッドが行動できるか判定 combat.Fred_select = function () { //add_msg("combat.Fred_select()に入った。"); if (Fred.sumon === false) { //add_msg("フレッドは味方についていない。"); combat.enemy_select(0); } else if (Fred.LIFE_POINT <= 0) { add_msg("フレッドは死んでいる。"); combat.enemy_select(0); } else if (Fred.LIFE_POINT <= 5) { add_msg("フレッドは気絶している。"); combat.enemy_select(0); } else { var i = combat.find_Pip2enemy_target(); add_msg("フレッドは" + Fred.attack_way + "で" + enemy[i].name + "を攻撃。"); dice.start(2, "combat.Fred_do()"); } } // 味方フレッドの攻撃 combat.Fred_do = function () { var i = combat.find_Pip2enemy_target(); if (Section.num === "82") { // 見えない敵 Fred.attack_base = Math.max(Fred.attack_base, 5); } else if (Section.num === "171") { // ワニガエル獣 Fred.attack_base = Math.max(Pip.attack_base, 5); } var attack_point = Math.max(dice.dice12pip - Fred.attack_base, 0) + Fred.extra_damage; var damage_point = attack_point - enemy[i].defence; //add_msg("dice.dice12pip = " + dice.dice12pip ); //add_msg("Fred.attack_base = " + Fred.attack_base ); //add_msg("Fred.extra_damage = " + Fred.extra_damage ); //add_msg("attack_point = " + attack_point ); //add_msg("enemy[i].defence = " + enemy[i].defence ); //add_msg("damage_point = " + damage_point ); if (dice.dice12pip - Fred.attack_base <= 0) { add_msg("空振り!"); } else if (damage_point <= 0) { add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。"); } else { enemy[i].LIFE_POINT -= damage_point; add_msg("フレッドは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。"); update_status(); if (Section.num === "131") { combat.round++; add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。"); } if (Section.num === "146") { combat.round++; add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。"); } } Fred.done = true; combat.enemy_select(0); } // 戦闘を続行して敵にターンを渡すかどうか判断 combat.Pip2enemy_turn = function () { var i; var max_enemy_LIFE_POINT = 0; for (i = 0; i < enemy.length; i++) { if (enemy[i].Friendly_Reaction === true || enemy[i].Bribery === true) { // 友好的またはワイロで買収された敵はカウントしない } else { max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[i].LIFE_POINT); } } if (Pip.LIFE_POINT <= 0 && Pip.Resurrection_Wand === true) { add_msg("復活の杖で14行きを避けた! ピップの生命点が完全回復した!"); Pip.Resurrection_Wand = false; Pip.LIFE_POINT = Pip.max_LIFE_POINT; data_magic[Pip_magic[i].id_num].label = "使う"; } if (Pip.LIFE_POINT <= 0) { //ピップが死んだ add_msg("ピップは生命点が0になった。14に行け。"); } else if (max_enemy_LIFE_POINT <= 0) { //敵が死んだ add_msg("敵をやっつけた!"); combat.result(); //戦後処理へ } else if (max_enemy_LIFE_POINT <= 5 && Section.num === "36" && Section.subnum === 0) { //三つ目獣を気絶 add_msg("三つ目獣を気絶させた!"); combat.result(); //戦後処理へ } else if (combat.round === 4 && Section.num === "131") { // 4ラウンド終了 add_msg("4ラウンド終了。"); combat.result(); //戦後処理へ } else if (combat.round === 4 && Section.num === "146") { // 4ラウンド終了 add_msg("4ラウンド終了。"); combat.result(); //戦後処理へ } else { if (Pip.Boots_of_Speed === 1) { add_msg("スピードアップ靴のお陰でもう1回続けて行動できる。"); Pip.Boots_of_Speed = 2; combat.Pip_select(); } else if (Pip.Boots_of_Speed === 2) { add_msg("スピードアップ靴の2回目の行動が終わった。"); Pip.Boots_of_Speed = 1; combat.Fred_select(); } else { combat.Fred_select(); } } }
ピップの行動は打撃攻撃のみ載せる。他の行動は、アイテムを使う処理にすべて書いてあるので、そちらを参照されたい。 1対1の殴りあいより複雑になったことは、、、 -敵が複数の場合は、どの敵を選ぶか自動で選ぶ。 -召還悪魔フレッドがこちらに加勢した場合、ピップの後、敵1の前に攻撃させるようにする。 -魔法の効果やステータス変化たくさんありすぎ // ピップが行動可能か調べ、ユーザーにピップの行動ボタンをクリックするよう促す combat.Pip_select = function (){ // ターン数の計算 if (Pip.first_strike === true) { combat.turn_num++; } //add_msg("combat.Pip_select()に入った。"); if (Pip.LIFE_POINT <= 0) { add_msg("ピップは死んでいる。。。"); combat.Pip2enemy_turn(); } else if (Pip.LIFE_POINT <= 5) { add_msg("ピップは気絶している。。。"); combat.do_next = "enemy0_select"; combat.Pip2enemy_turn(); } else { add_msg("ピップはどうする? 「殴る」などの行動ボタンをクリックせよ。"); //combat.do_next = "Pip_do"; } if (Pip.bone_pain === true) { add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。"); } if (Pip.yoga > 0) { add_msg("ヨガで関節が痛み、、敵に与える被害点が2点マイナスされる。"); } } // 「殴る」をクリック function click_punch() { Pip.attack_base = 6; Pip.extra_damage = 0; Pip.attack_way = "素手"; dice.start(2,"combat.Pip_strike()"); } // 戦利品アイテムを使用 function click_event(i) { // 略 } // マーリンの隠れ家2の装備品アイテムを使用 function click_equip(i) { // 略 } // マーリンの隠れ家3の魔法の品アイテムを使用 function click_magic(i) { // 略 } // ピップや味方フレッドが攻撃する敵の対象を自動で選ぶ combat.find_Pip2enemy_target = function () { //find target var i = 0; var found_target = -1; for (i = 0; i < enemy.length; i++) { if (found_target === -1 && enemy[i].LIFE_POINT > 5 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) { found_target = i; } } if (found_target === -1) { for (i = 0; i < enemy.length; i++) { if (found_target === -1 && enemy[i].LIFE_POINT > 0 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) { found_target = i; } } } if (found_target === -1) { add_msg("敵が見つからない?"); } //add_msg("ピップが狙う標的は" + enemy[found_target].name + found_target); return found_target; } // ピップが素手や剣などの打撃攻撃時の被害点計算 combat.Pip_strike = function () { //add_msg("pip_strikeに入った。"); var i = combat.find_Pip2enemy_target(); if (Section.num === "82") { // 見えない敵 Pip.attack_base = Math.max(Pip.attack_base, 5); } else if (Section.num === "171") { // ワニガエル獣 Pip.attack_base = Math.max(Pip.attack_base, 5); } var attack_point = Math.max(dice.dice12pip - Pip.attack_base, 0) + Pip.extra_damage; var damage_point = attack_point - enemy[i].defence; add_msg("ピップは" + Pip.attack_way + "で" + enemy[i].name + "を攻撃。"); if (Pip.bone_pain === true) { add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。"); damage_point = Math.floor(damage_point / 2); } if (Pip.yoga > 0) { add_msg("ヨガで関節が痛み、敵に与える被害点が2点マイナスされる。"); damage_point -= 2; } if (Pip.Lucky_Coin > 0) { add_msg("幸運の金貨で、敵に与える被害点が2点プラスされる。"); damage_point += 2; } if (Pip.attack_way === "即死剣" && dice.dice12pip >= 11) { add_msg("即死剣で" + enemy[i].name + "は即死した!"); enemy[i].LIFE_POINT = 0; update_status(); } else if (dice.dice12pip - Pip.attack_base <= 0) { add_msg("空振り!"); } else if (damage_point <= 0) { add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。"); } else { if (EJ.pudding > 0) { add_msg("E・Jがプリンになっているので与える被害点は2点になってしまう。"); damage_point = 2; } if (Pip.Lucky_Coin > 0) { Pip.Lucky_Coin--; if (Pip.Lucky_Coin > 0) { add_msg("幸運の金貨の効果は残り" + Pip.Lucky_Coin + "回。"); } else { add_msg("幸運の金貨の効果が切れた。"); data_magic[9].label = "使う"; } } enemy[i].LIFE_POINT -= damage_point; add_msg("ピップは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。"); if (Section.num === "131") { combat.round++; add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。"); } if (Section.num === "146") { combat.round++; add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。"); } update_status(); } combat.Pip2enemy_turn(); } // 味方フレッドが行動できるか判定 combat.Fred_select = function () { //add_msg("combat.Fred_select()に入った。"); if (Fred.sumon === false) { //add_msg("フレッドは味方についていない。"); combat.enemy_select(0); } else if (Fred.LIFE_POINT <= 0) { add_msg("フレッドは死んでいる。"); combat.enemy_select(0); } else if (Fred.LIFE_POINT <= 5) { add_msg("フレッドは気絶している。"); combat.enemy_select(0); } else { var i = combat.find_Pip2enemy_target(); add_msg("フレッドは" + Fred.attack_way + "で" + enemy[i].name + "を攻撃。"); dice.start(2, "combat.Fred_do()"); } } // 味方フレッドの攻撃 combat.Fred_do = function () { var i = combat.find_Pip2enemy_target(); if (Section.num === "82") { // 見えない敵 Fred.attack_base = Math.max(Fred.attack_base, 5); } else if (Section.num === "171") { // ワニガエル獣 Fred.attack_base = Math.max(Pip.attack_base, 5); } var attack_point = Math.max(dice.dice12pip - Fred.attack_base, 0) + Fred.extra_damage; var damage_point = attack_point - enemy[i].defence; //add_msg("dice.dice12pip = " + dice.dice12pip ); //add_msg("Fred.attack_base = " + Fred.attack_base ); //add_msg("Fred.extra_damage = " + Fred.extra_damage ); //add_msg("attack_point = " + attack_point ); //add_msg("enemy[i].defence = " + enemy[i].defence ); //add_msg("damage_point = " + damage_point ); if (dice.dice12pip - Fred.attack_base <= 0) { add_msg("空振り!"); } else if (damage_point <= 0) { add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。"); } else { enemy[i].LIFE_POINT -= damage_point; add_msg("フレッドは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。"); update_status(); if (Section.num === "131") { combat.round++; add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。"); } if (Section.num === "146") { combat.round++; add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。"); } } Fred.done = true; combat.enemy_select(0); } // 戦闘を続行して敵にターンを渡すかどうか判断 combat.Pip2enemy_turn = function () { var i; var max_enemy_LIFE_POINT = 0; for (i = 0; i < enemy.length; i++) { if (enemy[i].Friendly_Reaction === true || enemy[i].Bribery === true) { // 友好的またはワイロで買収された敵はカウントしない } else { max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[i].LIFE_POINT); } } if (Pip.LIFE_POINT <= 0 && Pip.Resurrection_Wand === true) { add_msg("復活の杖で14行きを避けた! ピップの生命点が完全回復した!"); Pip.Resurrection_Wand = false; Pip.LIFE_POINT = Pip.max_LIFE_POINT; data_magic[Pip_magic[i].id_num].label = "使う"; } if (Pip.LIFE_POINT <= 0) { //ピップが死んだ add_msg("ピップは生命点が0になった。14に行け。"); } else if (max_enemy_LIFE_POINT <= 0) { //敵が死んだ add_msg("敵をやっつけた!"); combat.result(); //戦後処理へ } else if (max_enemy_LIFE_POINT <= 5 && Section.num === "36" && Section.subnum === 0) { //三つ目獣を気絶 add_msg("三つ目獣を気絶させた!"); combat.result(); //戦後処理へ } else if (combat.round === 4 && Section.num === "131") { // 4ラウンド終了 add_msg("4ラウンド終了。"); combat.result(); //戦後処理へ } else if (combat.round === 4 && Section.num === "146") { // 4ラウンド終了 add_msg("4ラウンド終了。"); combat.result(); //戦後処理へ } else { if (Pip.Boots_of_Speed === 1) { add_msg("スピードアップ靴のお陰でもう1回続けて行動できる。"); Pip.Boots_of_Speed = 2; combat.Pip_select(); } else if (Pip.Boots_of_Speed === 2) { add_msg("スピードアップ靴の2回目の行動が終わった。"); Pip.Boots_of_Speed = 1; combat.Fred_select(); } else { combat.Fred_select(); } } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: