From 4a0a902d48bbf720e7fc2f81f19bc55227327717 Mon Sep 17 00:00:00 2001 From: Will Stephenson Date: Tue, 9 Jan 2018 10:20:23 -0500 Subject: [PATCH] [#34] New Data System - Battles --- api/v1/PtuAPI.php | 2 +- js/ptu-battle.js | 12 ++--- js/ptu-char.js | 49 +++++++++++++++++--- js/ptu-io.js | 15 ++++++ lib/propel2/src/Propel/PtuToolkit/PtuApp.php | 19 +++++++- 5 files changed, 83 insertions(+), 14 deletions(-) diff --git a/api/v1/PtuAPI.php b/api/v1/PtuAPI.php index d49d59e..b31b95f 100644 --- a/api/v1/PtuAPI.php +++ b/api/v1/PtuAPI.php @@ -394,7 +394,7 @@ public function data() { } } else if (!is_null($this->args[0]) && $this->method == "GET") - return $app->getCharacterById($this->args[0]); + return $app->getCharacterById($this->args[0], array_key_exists("buffs", $_GET) ? $_GET['buffs'] : false); else if (!is_null($this->args[0]) && $this->method == "POST") return $app->saveCharacterData($this->args[0], $this->request); } diff --git a/js/ptu-battle.js b/js/ptu-battle.js index 1649428..af8c2df 100644 --- a/js/ptu-battle.js +++ b/js/ptu-battle.js @@ -57,8 +57,8 @@ var ActionImpl = { var dmg_bonus = mods && mods['dmg_bonus'] ? mods['dmg_bonus'] : 0, acc_bonus = mods && mods['acc_bonus'] ? mods['acc_bonus'] : 0; - var dealer = getJSONNonAsync("api/v1/data/character/" + dealer_id); - var target = target_id !== "other" ? getJSONNonAsync("api/v1/data/character/" + target_id) : null; + var dealer = CharacterHelper.fetchCharWithBuffs(dealer_id); + var target = target_id !== "other" ? CharacterHelper.fetchCharWithBuffs(target_id) : null; if ($.type(move) !== "object") { move = getJSONNonAsync("api/v1/moves/" + move); @@ -231,7 +231,7 @@ var ActionImpl = { damageCharacter: function (target, moveType, moveIsSpecial, damage) { if (target && $.type(target) !== "object") { - target = getJSONNonAsync("api/v1/data/character/" + target); + target = CharacterHelper.fetchCharWithBuffs(target); } damage -= moveIsSpecial ? target["Sdef"] : target["Def"]; @@ -328,11 +328,11 @@ var ActionImpl = { // If Character ID's were provided instead of JSON, fetch JSON if (target && $.type(target) !== "object") { - target = getJSONNonAsync("api/v1/data/character/" + target); + target = CharacterHelper.fetchCharWithBuffs(target); } if (dealer && $.type(dealer) !== "object") { - dealer = getJSONNonAsync("api/v1/data/character/" + dealer); + dealer = CharacterHelper.fetchCharWithBuffs(dealer); } // If trigger is a prereq @@ -364,7 +364,7 @@ var ActionImpl = { else if (trigger.type==="CS"){ //Raising/lowering stats $.each(trigger.stat, function(k, stat){ - CharacterHelper.modifyCombatStage(char["CharacterId"], trigger.stat, trigger.value); + CharacterHelper.modifyCombatStage(char["CharacterId"], stat, trigger.value); // Log change if (trigger.value > 0) diff --git a/js/ptu-char.js b/js/ptu-char.js index 016531e..de4444f 100644 --- a/js/ptu-char.js +++ b/js/ptu-char.js @@ -1,4 +1,41 @@ var CharacterHelper = { + fetchCharWithBuffs: function (charId) { + var char = getJSONNonAsync("api/v1/data/character/" + charId, {"buffs": true}); + + $.each(char["Buffs"], function (k, v) { + // TODO prereqs + if (v.type === "CS" && !v.prereq) { + var multiplier = getStageMultiplier(parseInt(v.value)); + + switch (v.target_stat) { + case "HP": + char["Hp"] = Math.round(char["Hp"] * multiplier); + break; + case "ATK": + char["Atk"] = Math.round(char["Atk"] * multiplier); + break; + case "DEF": + char["Def"] = Math.round(char["Def"] * multiplier); + break; + case "SDEF": + case "SPDEF": + char["Sdef"] = Math.round(char["Sdef"] * multiplier); + break; + case "SATK": + case "SPATK": + char["Satk"] = Math.round(char["Satk"] * multiplier); + break; + case "SPD": + case "SPEED": + char["Spd"] = Math.round(char["Spd"] * multiplier); + break; + } + } + }); + + return char; + }, + getEvadeBonus: function (char_id) { //TODO implement return 0; @@ -11,17 +48,17 @@ var CharacterHelper = { } else { $.post("api/v1/data/character/cs", { - "characterId": charId, + "character_id": charId, "stat": stat, "value": amnt }, function (response) { if ($.isNumeric(response)) { // Notify client - sendMessage(battle[charId]['client_id'], JSON.stringify({ - "type": "data_changed", - "field": "stage-" + stat, - "value": parseInt(response) - })); + // sendMessage(battle[charId]['client_id'], JSON.stringify({ TODO + // "type": "data_changed", + // "field": "stage-" + stat, + // "value": parseInt(response) + // })); } }); } diff --git a/js/ptu-io.js b/js/ptu-io.js index c9819df..d4ea17d 100644 --- a/js/ptu-io.js +++ b/js/ptu-io.js @@ -52,4 +52,19 @@ function getJSONNonAsync(url) { } }); return result; +} + +function getJSONNonAsync(url, data) { + var result; + $.ajax({ + type:'GET', + url:url, + dataType:'json', + async:false, + data: data, + success:function(data){ + result = data; + } + }); + return result; } \ No newline at end of file diff --git a/lib/propel2/src/Propel/PtuToolkit/PtuApp.php b/lib/propel2/src/Propel/PtuToolkit/PtuApp.php index 33f6b42..a5fb0e4 100644 --- a/lib/propel2/src/Propel/PtuToolkit/PtuApp.php +++ b/lib/propel2/src/Propel/PtuToolkit/PtuApp.php @@ -108,7 +108,7 @@ public function getCampaignById($campaignId) { * @param $characterId * @return array */ - public function getCharacterById($characterId) { + public function getCharacterById($characterId, $fetchBuffs = false) { $char = CharactersQuery::create()->findOneByCharacterId($characterId)->toArray(); $char["Hp"] = $char["BaseHp"] + $char["LvlUpHp"] + $char["AddHp"]; @@ -118,9 +118,26 @@ public function getCharacterById($characterId) { $char["Sdef"] = $char["BaseSdef"] + $char["LvlUpSdef"] + $char["AddSdef"]; $char["Spd"] = $char["BaseSpd"] + $char["LvlUpSpd"] + $char["AddSpd"]; + if ($fetchBuffs) { + $char["Buffs"] = $this->getCharacterBuffs($characterId); + } + return $char; } + public function getCharacterBuffs($characterId) { + $sql = "SELECT cb.prereq, cb.type, cb.value, cb.target_stat FROM character_buffs cb +INNER JOIN battles b ON cb.battle_id = b.battle_id +WHERE b.is_active > 0 AND cb.character_id=:cId"; + + $conn = Propel::getConnection(); + $st = $conn->prepare($sql); + $st->bindParam('cId', $characterId); + $st->execute(); + + return $st->fetchAll(PDO::FETCH_ASSOC); + } + public function getCharacterMoves($characterId) { $charMoves = CharactersQuery::create()->findOneByCharacterId($characterId)->getCharacterMovessJoinMoves(); $moves = array();