diff --git a/.gitignore b/.gitignore index 07fe371..2b4bcaa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ vendor settings.php nbproject/private -*.sync-conflict* \ No newline at end of file +*.sync-conflict* +database.mwb.bak \ No newline at end of file diff --git a/api/actions/useitem.php b/api/actions/useitem.php new file mode 100644 index 0000000..f19f8a6 --- /dev/null +++ b/api/actions/useitem.php @@ -0,0 +1,77 @@ +has("inventory", ["AND" => ["itemuuid" => $VARS["uuid"], "accountid" => $user->getUID()]])) { + sendJsonResp("That item doesn't exist.", "ERROR"); +} + +$item = $database->get( + "items", + [ + "[>]inventory" => ["itemid" => "itemid"], + "[>]itemclasses" => ["classid" => "classid"] + ], + [ + "inventory.itemjson", + "items.classid", + "itemclasses.classname", + "items.itemcode" + ], + [ + "AND" => [ + "inventory.itemuuid" => $VARS["uuid"], + "inventory.accountid" => $user->getUID() + ] + ] +); +$itemuuid = $VARS["uuid"]; +$item['itemcode'] = json_decode($item['itemcode'], true); +if (empty($item['itemjson']) || $item['itemjson'] == "[]") { + $itemjson = json_encode(['uses' => $item['itemcode']['uses']]); +} else { + $itemjson = json_decode($item["itemjson"], true); +} + +$player = $database->get("players", ["energy", "maxenergy", "teamid"], ["accountid" => $user->getUID()]); + +switch ($item["classname"]) { + case "healmagic": + if ($player["energy"] < $player["maxenergy"]) { + $newhp = $player["energy"] + $item["itemcode"]["amount"]; + if ($newhp > $player["maxenergy"]) { + $newhp = $player["maxenergy"]; + } + $diff = $newhp - $player["energy"]; + $database->update("players", ["energy" => $newhp], ["accountid" => $user->getUID()]); + if ($itemjson["uses"] <= 1) { + $database->delete("inventory", ["AND" => ["itemuuid" => $itemuuid, "accountid" => $user->getUID()]]); + } else if ($itemjson["uses"] > 1) { + $itemjson["uses"] -= 1; + $database->update("inventory", ["itemjson" => json_encode($itemjson)], ["itemuuid" => $itemuuid]); + } + sendJsonResp($Strings->build("Restored {x} energy points.", ["x" => $diff], false)); + } else { + sendJsonResp($Strings->get("That would have no effect.", false)); + } + break; + case "artifact": + if (empty($VARS["placeid"]) || !$database->has("locations", ["AND" => ["osmid" => $VARS["placeid"], "teamid" => $player["teamid"]]])) { + sendJsonResp($Strings->get("You can't use that right now.", false)); + } + $place = $database->get("locations", ["locationid", "teamid", "ownerid", "currentlife", "maxlife"], ["locationid" => $VARS["placeid"]]); + $placelife = $place["currentlife"] + $item["itemcode"]["amount"]; + $placemax = $place["maxlife"] + $item["itemcode"]["amount"]; + $database->update("locations", ["currentlife" => $placelife, "maxlife" => $placemax], ["osmid" => $VARS["placeid"]]); + // TODO: give user some exp + sendJsonResp($Strings->get("Artifact activated.")); + break; + default: + sendJsonResp($Strings->get("You can't use that right now.", false)); +} \ No newline at end of file diff --git a/api/apisettings.php b/api/apisettings.php index 0e932a9..2aebbe2 100644 --- a/api/apisettings.php +++ b/api/apisettings.php @@ -74,4 +74,11 @@ $APIS = [ "message" => "string" ] ], + "useitem" => [ + "load" => "useitem.php", + "vars" => [ + "uuid" => "numeric", + "placeid (optional)" => "numeric" + ] + ] ]; \ No newline at end of file diff --git a/database.mwb.bak b/database.mwb.bak index 437b760..c8277a1 100644 Binary files a/database.mwb.bak and b/database.mwb.bak differ diff --git a/langs/en/items.json b/langs/en/items.json new file mode 100644 index 0000000..7540d21 --- /dev/null +++ b/langs/en/items.json @@ -0,0 +1,3 @@ +{ + "Restored {x} energy points.": "Restored {x} energy points." +}