public function collect($params) { $userId = self::getUserIdByToken($params['token']); if (!$userId) { return Utils::formatErrorMessage(ERROR_BAD_TOKEN, "Bad Token"); } $sql = "SELECT id\n\t\t\t\tFROM users\n\t\t\t\tWHERE username = '******'author_name'] . "'"; $result = $GLOBALS['app']['db']->fetchAll($sql); echo $result; if (count($result) == 0) { return Utils::formatErrorMessage(ERROR_BAD_USERNAME, "Bad username"); } $author_id = $result[0]['id']; $gifts = file_get_contents(__DIR__ . "./../../../assets/json/giftsSettings.json", FILE_USE_INCLUDE_PATH); $gifts = json_decode($gifts, true); $sql = "UPDATE gift_users\n\t\t\t\tSET is_collected = true\n\t\t\t\tWHERE user_id = " . $userId . "\n AND author_users_id = " . $author_id . "\n\t\t\t\t\tAND name = '" . $params['name'] . "'\n\t\t\t\t\tAND is_collected = false\n\t\t\t\t\tLIMIT 1"; $result = $GLOBALS['app']['db']->exec($sql); if ($result == 0) { return Utils::formatErrorMessage(ERROR_NO_GIFT, "No gifts"); } if (!array_key_exists($params['name'], $gifts)) { return Utils::formatErrorMessage(ERROR_BAD_GIFTS, "Bad gift name"); } $gifts = $gifts[$params['name']]; $resourceId = ResourcesController::getResourceIdByName($gifts['resource_name']); ResourcesController::addResource($resourceId, $gifts['resource_amount'], $userId); return ResourcesController::getResource($userId); }
public function collect($params) { $userId = self::getUserIdByToken(addslashes($params['token'])); if (!$userId) { return Utils::formatErrorMessage(ERROR_BAD_TOKEN, "Bad token"); } //initialisation $building = self::getBuildingByPosition(addslashes($params['x']), addslashes($params['y']), $userId); $buildingName = BuildingModel::getBuildingNameByTypeId($building['building_type_id']); $settings = self::getSettings(); $buildingDetails = self::getBuildingDetails($buildingName, $building['building_id'], $userId); //Vérifie si le batiment est collectable if (!array_key_exists("last_recolt_at", $buildingDetails)) { return Utils::formatErrorMessage(ERROR_BUILDING, "Le batiment n'est pas collectable"); } //Recupéré le paramétrage $buildingJson = $settings[$buildingName]; if (array_key_exists("1", $settings[$buildingName])) { $buildingJson = $settings[$buildingName][$buildingDetails['lvl']]; } //recupère la dernière date de recolte $dateLastRecolt = $buildingDetails['last_recolt_at']; if (strtotime($buildingDetails['last_recolt_at']) < strtotime($building['construct_end_at'])) { $dateLastRecolt = $building['construct_end_at']; } //Récupère le temps en heure $hourDetails = BuildingModel::getTimeLeft($dateLastRecolt); //Calcule du gain de ressource $gainPerHour = $buildingJson['production']; $maxCapacity = $buildingJson['capacity']; $gainResource = $gainPerHour * $hourDetails; $housesInRadius = 0; //récupère dans le .json le resource_boost et le radius $boost = $settings['house']['resource_multiplier']; $radius = $settings['house']['action_radius']; //récupère tous les house du joueur $houseID = BuildingModel::getBuildingTypeIdByName('house'); $sql = "SELECT x, y\n\t\t\t\tFROM building_users\n\t\t\t\tWHERE user_id =" . $userId . " AND building_type_id = " . $houseID; $result = $GLOBALS['app']['db']->fetchAll($sql); foreach ($result as $house) { $AB = sqrt(pow($house['x'] - $params['x'], 2) + pow($house['y'] - $params['y'], 2)); if ($AB < $radius) { $housesInRadius++; } } //savoir si un batiment est dans le radius : AB = \sqrt{(x_B-x_A)^2 + (y_B-y_A)^2}. //multiplier $gain resource par le % $bonusResource = $gainResource * (1 + $housesInRadius * $boost); $gainResource = $bonusResource > 0 ? $bonusResource : $gainResource; if ($gainResource > $maxCapacity) { $gainResource = $maxCapacity; } if ($gainResource < 1) { return ResourcesController::getResource($userId); } $resourceId = ResourcesController::getResourceIdByName($buildingJson['resource_production']); ResourcesController::addResource($resourceId, $gainResource, $userId); $sql = "UPDATE building_" . $buildingName . "\n\t\t\tSET last_recolt_at = '" . date("Y-m-d H:i:s") . "'\n\t\t\tWHERE id = " . $buildingDetails['id'] . "\n\t\t\t\tAND user_id = " . $userId; $result = $GLOBALS['app']['db']->exec($sql); return ResourcesController::getResource($userId); }
public function paradeUpdate($params) { $userId = self::getUserIdByToken(addslashes($params['token'])); if (!$userId) { return Utils::formatErrorMessage(ERROR_BAD_TOKEN, "Bad token"); } $params['hardPurchase'] = $params['hardPurchase'] == 'true'; $paradeSettings = file_get_contents(__DIR__ . "./../../../assets/json/paradeSettings.json", FILE_USE_INCLUDE_PATH); $paradeSettings = json_decode($paradeSettings, true); $lanterns = LanternsController::getLanterns($userId); $maxBonus = $paradeSettings['generatedBonusCountPerLanterns'] * count($lanterns); if ($params['bonusHarvested'] > $maxBonus) { return Utils::formatErrorMessage(ERROR_BONUS_SENT_TOO_BIG, "Bonus sent is too big"); } $offeringResourceId = ResourcesController::getResourceIdByName("offering"); if (!$params['hardPurchase']) { $sql = "SELECT last_parade_at FROM users WHERE id = '" . $userId . "'"; $result = $GLOBALS['app']['db']->fetchAll($sql); $lastParadeAt = new DateTime($result[0]['last_parade_at']); $now = new DateTime(); // Verification de si la parade n'a pas eu lieu aujourd'hui if ($lastParadeAt->format('d') != $now->format('d') || $now->getTimestamp() - $lastParadeAt->getTimestamp() >= 86400) { $sql = "UPDATE users\n\t\t\t\t\t\tSET last_parade_at = NOW()\n\t\t\t\t\t\tWHERE id = '" . $userId . "'"; $result = $GLOBALS['app']['db']->exec($sql); $goldGained = $this->convertBonusToGold($params['bonusHarvested'], $paradeSettings, $userId); ResourcesController::addResource($offeringResourceId, $goldGained, $userId); } else { return Utils::formatErrorMessage(ERROR_PARADE_ALREADY_LAUNCH, "Parade already launched today"); } } else { $resourceId = ResourcesController::getResourceIdByName("spice"); if (ResourcesController::spendResource($resourceId, $paradeSettings['paradeHardPrice'], $userId)) { $goldGained = $this->convertBonusToGold($params['bonusHarvested'], $paradeSettings, $userId); ResourcesController::addResource($offeringResourceId, $goldGained, $userId); } else { return Utils::formatErrorMessage(ERROR_NO_MONEY, "Not enought spice"); } } return ResourcesController::getResource($userId); }