User sign-in/account linking, profiles, barcode to items, database changes

master
Skylar Ittner 5 years ago
parent b24bb20a8b
commit af13a70976

@ -0,0 +1,15 @@
<?php
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
$database->update("players", [
"latitude" => $VARS["latitude"],
"longitude" => $VARS["longitude"],
"lastping" => date("Y-m-d H:i:s")
], ["accountid" => getRequestUser()->getUID()]);
sendJsonResp();

@ -0,0 +1,24 @@
<?php
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
if ($database->has("players", ["accountid" => getRequestUser()->getUID()])) {
sendJsonResp($Strings->get("Your account is already active.", false), "ERROR");
}
$database->insert("players", [
"accountid" => getRequestUser()->getUID(),
"level" => 1.0,
"energy" => 100,
"maxenergy" => 100,
"credits" => 500,
"lastping" => date("Y-m-d H:i:s"),
"teamid" => $VARS['team'],
"nickname" => getRequestUser()->getName(),
]);
sendJsonResp();

@ -0,0 +1,24 @@
<?php
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
if (empty($VARS["id"])) {
$accountid = getRequestUser()->getUID();
} else {
$accountid = $VARS["id"];
}
if ($database->has("players", ["accountid" => $accountid])) {
$profile = $database->get("players", ["accountid (id)", "nickname (name)", "level", "energy", "maxenergy", "teamid"], ["accountid" => $accountid]);
} else {
sendJsonResp($Strings->get("Player does not exist.", false), "ERROR");
}
exitWithJson([
"status" => "OK",
"profile" => $profile
]);

@ -0,0 +1,27 @@
<?php
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
$items = $database->select(
'items', [
'[>]inventory' => ['itemid' => 'itemid'],
'[>]itemclasses' => ['classid', 'classid']
], [
'inventory.itemuuid (uuid)',
'inventory.itemid (id)',
'inventory.itemjson (json)',
'items.itemname (name)',
'items.itemdesc (description)',
'items.itemcode (code)',
'itemclasses.classid (classid)',
'itemclasses.classname (classname'
], [
"playeruuid" => getRequestUser()->getUID()
]
);
exitWithJson(["status" => "OK", "items" => $items]);

@ -0,0 +1,97 @@
<?php
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
use AnthonyMartin\GeoLocation\GeoLocation as GeoLocation;
$userlocation = GeoLocation::fromDegrees($VARS["latitude"], $VARS["longitude"]);
$radius = 2;
if (!empty($VARS["radius"])) {
$radius = min(10.0, $VARS["radius"] * 1.0);
}
$searchbounds = $userlocation->boundingCoordinates($radius, "miles");
ob_flush();
$people = $database->debug()->select("accounts", [
"publicid",
"name",
"username",
"verified",
"latitude",
"longitude"
], [
"AND" => [
'latitude[<>]' => [$searchbounds[0]->getLatitudeInDegrees(), $searchbounds[1]->getLatitudeInDegrees()],
'longitude[<>]' => [$searchbounds[0]->getLongitudeInDegrees(), $searchbounds[1]->getLongitudeInDegrees()],
"lastgpsfix[>]" => date("Y-m-d H:i:s", strtotime("-1 hour")),
"type" => 2
],
"LIMIT" => 100
]
);
$query = ob_get_contents();
ob_clean();
$people = $database->query($query)->fetchAll();
$nearby = [];
if (!empty($VARS["format"]) && $VARS["format"] == "geojson") {
$geojson = [
"name" => "Nearby People",
"type" => "FeatureCollection",
"features" => []
];
foreach ($people as $person) {
$geojson["features"][] = [
"type" => "Feature",
"geometry" => [
"type" => "Point",
"coordinates" => [
$person["longitude"] * 1.0,
$person["latitude"] * 1.0
]
],
"properties" => [
"id" => $person["publicid"],
"name" => utf8_encode(empty($person["name"]) ? $person["username"] : $person["name"]),
"username" => $person["username"],
"verified" => $person["verified"] == 1
]
];
}
exitWithJson($geojson);
}
foreach ($people as $person) {
$nearby[] = [
"name" => (empty($person["name"]) ? $person["username"] : $person["name"]),
"username" => $person["username"],
"verified" => $person["verified"] == 1,
"publicid" => $person["publicid"],
"latitude" => $person["latitude"] * 1.0,
"longitude" => $person["longitude"] * 1.0
];
}
exitWithJson([
"status" => "OK",
"radius" => $radius,
"bounds" => [
0 => [
"latitude" => $searchbounds[0]->getLatitudeInDegrees(),
"longitude" => $searchbounds[0]->getLongitudeInDegrees()
],
1 => [
"latitude" => $searchbounds[1]->getLatitudeInDegrees(),
"longitude" => $searchbounds[1]->getLongitudeInDegrees()
],
],
"nearby" => $nearby
]);

@ -0,0 +1,18 @@
<?php
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
if (empty($VARS["id"])) {
$accountid = getRequestUser()->getUID();
} else {
$accountid = $VARS["id"];
}
exitWithJson([
"status" => "OK",
"exists" => $database->has("players", ["accountid" => $accountid])
]);

@ -0,0 +1,81 @@
<?php
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/**
* https://www.sitepoint.com/php-random-number-generator/
*/
class Random {
// random seed
private static $RSeed = 0;
// set seed
public static function seed($s = 0) {
self::$RSeed = abs(intval($s)) % 9999999 + 1;
self::num();
}
// generate random number
public static function num($min = 0, $max = 9999999) {
if (self::$RSeed == 0) {
self::seed(mt_rand());
}
self::$RSeed = (self::$RSeed * 125) % 2796203;
return self::$RSeed % ($max - $min + 1) + $min;
}
}
$returndata = [
"status" => "OK",
"item" => "",
"munzee" => "",
"messages" => []
];
try {
if (strpos($VARS["code"], "munzee") > 1) {
if (!empty($VARS["latitude"]) && !empty($VARS["longitude"]) && !empty($VARS["accuracy"])) {
include 'capturemunzee.php';
}
}
} catch (Exception $ex) {
//file_put_contents("munzee.log", "Error with Munzee code: $ex\n", FILE_APPEND);
}
if ($database->has('claimedcodes', ["AND" => ['code' => $VARS["code"], 'accountid' => getRequestUser()->getUID()]])) {
$returndata['messages'][] = $Strings->get("You've already discovered that.", false);
} else {
$codearray = str_split($VARS["code"]);
$codeint = 0;
foreach ($codearray as $chr) {
$codeint += ord($chr);
}
Random::seed($codeint);
$items = $database->select("items", ["itemid", "weight"]);
$weighted = [];
foreach ($items as $item) {
for ($i = 0; $i < $item["weight"]; $i++) {
$weighted[] = $item["itemid"];
}
}
$itemid = $weighted[Random::num(0, count($weighted))];
$database->insert('inventory', ['accountid' => getRequestUser()->getUID(), 'itemid' => $itemid]);
$database->insert('claimedcodes', ['code' => $VARS["code"], 'accountid' => getRequestUser()->getUID()]);
$itemname = $database->get('items', 'itemname', ['itemid' => $itemid]);
$returndata["item"] = $itemname;
$returndata['messages'][] = $Strings->build("You found one {item}", ["item" => $itemname], false);
}
exitWithJson($returndata);

@ -11,5 +11,35 @@ $APIS = [
"load" => "ping.php",
"vars" => [
]
],
"items" => [
"load" => "items.php"
],
"createplayer" => [
"load" => "createplayer.php",
"vars" => [
"team" => "/[1-6]/"
]
],
"playerexists" => [
"load" => "playerexists.php",
"vars" => [
"id (optional)" => "/[0-9]+/"
]
],
"getprofile" => [
"load" => "getprofile.php",
"vars" => [
"id (optional)" => "/[0-9]+/"
]
],
"code" => [
"load" => "submitcode.php",
"vars" => [
"code" => "string",
"latitude (optional)" => "/[0-9]{0,3}\.[0-9]{2,10}/",
"longitude (optional)" => "/[0-9]{0,3}\.[0-9]{2,10}/",
"accuracy (optional)" => "number"
]
]
];
];

Binary file not shown.

Binary file not shown.

@ -0,0 +1,136 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/**
* Author: Skylar Ittner
* Created: Apr 26, 2019
*/
ALTER TABLE `terranquest`.`inventory`
DROP FOREIGN KEY `fk_inventory_players`;
ALTER TABLE `terranquest`.`player_badges`
DROP FOREIGN KEY `fk_achievements_has_players_players1`;
ALTER TABLE `terranquest`.`locations`
DROP FOREIGN KEY `fk_locations_players1`;
ALTER TABLE `terranquest`.`claimedcodes`
DROP FOREIGN KEY `fk_claimedcodes_players1`;
ALTER TABLE `terranquest`.`munzee`
DROP FOREIGN KEY `fk_munzee_players1`;
ALTER TABLE `terranquest`.`messages`
DROP FOREIGN KEY `fk_messages_players1`;
ALTER TABLE `terranquest`.`artifacts`
DROP FOREIGN KEY `fk_artifacts_players1`;
ALTER TABLE `terranquest`.`private_messages`
DROP FOREIGN KEY `fk_private_messages_players1`,
DROP FOREIGN KEY `fk_private_messages_players2`;
ALTER TABLE `terranquest`.`inventory`
CHANGE COLUMN `playeruuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ;
ALTER TABLE `terranquest`.`players`
CHANGE COLUMN `uuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ;
ALTER TABLE `terranquest`.`player_badges`
CHANGE COLUMN `playeruuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ;
ALTER TABLE `terranquest`.`locations`
CHANGE COLUMN `owneruuid` `ownerid` VARCHAR(60) CHARACTER SET 'utf8' NULL DEFAULT NULL ;
ALTER TABLE `terranquest`.`claimedcodes`
CHANGE COLUMN `playeruuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ;
ALTER TABLE `terranquest`.`munzee`
CHANGE COLUMN `player_uuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ;
ALTER TABLE `terranquest`.`messages`
CHANGE COLUMN `message` `message` VARCHAR(500) COLLATE 'utf8mb4_bin' NOT NULL ,
CHANGE COLUMN `uuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NULL DEFAULT NULL ;
ALTER TABLE `terranquest`.`artifacts`
CHANGE COLUMN `currentlife` `currentlife` DECIMAL(7,2) NOT NULL DEFAULT 100 ,
CHANGE COLUMN `maxlife` `maxlife` DECIMAL(7,2) NOT NULL DEFAULT 100 ,
CHANGE COLUMN `playeruuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NULL DEFAULT NULL ;
ALTER TABLE `terranquest`.`private_messages`
CHANGE COLUMN `from_uuid` `from_id` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL DEFAULT 0 ,
CHANGE COLUMN `to_uuid` `to_id` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ;
ALTER TABLE `terranquest`.`inventory`
ADD CONSTRAINT `fk_inventory_players`
FOREIGN KEY (`accountid`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `terranquest`.`player_badges`
ADD CONSTRAINT `fk_achievements_has_players_players1`
FOREIGN KEY (`accountid`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `terranquest`.`locations`
ADD CONSTRAINT `fk_locations_players1`
FOREIGN KEY (`ownerid`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `terranquest`.`claimedcodes`
ADD CONSTRAINT `fk_claimedcodes_players1`
FOREIGN KEY (`accountid`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `terranquest`.`munzee`
ADD CONSTRAINT `fk_munzee_players1`
FOREIGN KEY (`accountid`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `terranquest`.`messages`
ADD CONSTRAINT `fk_messages_players1`
FOREIGN KEY (`accountid`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `terranquest`.`artifacts`
ADD CONSTRAINT `fk_artifacts_players1`
FOREIGN KEY (`accountid`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `terranquest`.`private_messages`
ADD CONSTRAINT `fk_private_messages_players1`
FOREIGN KEY (`from_id`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_private_messages_players2`
FOREIGN KEY (`to_id`)
REFERENCES `terranquest`.`players` (`accountid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE `terranquest`.`items`
ADD COLUMN `weight` INT(3) NOT NULL DEFAULT 1 AFTER `itemcode`;
ALTER TABLE `terranquest`.`messages`
CHANGE COLUMN `message` `message` VARCHAR(500) COLLATE 'utf8mb4_bin' NOT NULL ;
ALTER TABLE `terranquest`.`artifacts`
CHANGE COLUMN `currentlife` `currentlife` DECIMAL(7,2) NOT NULL DEFAULT 100 ,
CHANGE COLUMN `maxlife` `maxlife` DECIMAL(7,2) NOT NULL DEFAULT 100 ;
Loading…
Cancel
Save