function tribe_getContent($caveID, $tribeID) { global $db, $template; if (!$tribeID) { $template->throwError('Der Stamm wurde nicht gefunden.'); return; } // open template $template->setFile('tribeDetail.tmpl'); $template->setShowResource(false); $tribe = Tribe::getByID($tribeID); if ($tribe == null) { $template->throwError('Der Stamm wurde nicht gefunden.'); return; } // parse tribe message $parser = new parser(); $tribe['description'] = $parser->p($tribe['description']); $ranking = Tribe::getRanking($tribeID); $tribe['rank'] = $ranking; // leader if ($tribe['leaderID'] != 0) { $leader = Player::getPlayer($tribe['leaderID']); $tribe['leader_name'] = $leader->name; } $template->addVar('tribe_details', $tribe); // history $template->addVar('tribe_history', Tribe::getHistory($tribeID)); // player list $template->addVar('tribe_player_list', Tribe::getPlayerList($tribeID, true, true)); // relations $relations = TribeRelation::getRelations($tribeID); $relationsData = array(); if (isset($relations['own'])) { foreach ($relations['own'] as $target => $relationData) { $relationsData[$target] = array('tribe' => $relationData['targetTag'], 'tribeID_target' => $relationData['tribeID_target'], 'relation_to' => $GLOBALS['relationList'][$relationData['relationType']]['name'], 'relation_from' => isset($relations['other'][$target]) && $relations['other'][$target] ? $GLOBALS['relationList'][$relations['other'][$target]['relationType']]['name'] : $GLOBALS['relationList'][0]['name']); } } if (isset($relations['other'])) { foreach ($relations['other'] as $target => $relationData) { // already printed out this relation if (isset($relationsData[$target])) { continue; } $relationsData[$target] = array('tribe' => $relationData['targetTag'], 'tribeID_target' => $relationData['tribeID_target'], 'relation_to' => $GLOBALS['relationList'][0]['name'], 'relation_from' => $GLOBALS['relationList'][$relationData['relationType']]['name']); } } $template->addVar('relations_data', $relationsData); }
public function __construct($options = array()) { $enableSSH = false; if (count($options) > 0) { $this->installLocation = $options['installLocation'] . "/ShooterGame/Saved/SavedArks"; if (isset($options['enableSSH'])) { $enableSSH = $options['enableSSH']; } if ($enableSSH === true) { if (!function_exists('ssh2_connect')) { die('You must enable php_ssh2 for your PHP installation to use SSH!'); } } } if (!isset($this->installLocation)) { die('Invalid Settings!'); } $this->Players = array(); $this->Tribes = array(); $Rules = array(); $this->SteamLoaded = false; $this->DataLoaded = false; if ($enableSSH === false) { $this->Timers['App'] = MicroTime(true); $this->playerFiles = glob("{$this->installLocation}/*.arkprofile"); $this->tribeFiles = glob("{$this->installLocation}/*.arktribe"); if (!$this->playerFiles && !$this->tribeFiles) { die('Invalid directory detected, no profiles or tribes found!'); } foreach ($this->playerFiles as $key => $value) { $player = new Player(); $parse = (object) $player->ParsePlayer($value); if (!$parse->Id) { continue; } $this->Players[(string) $parse->Id] = $parse; } foreach ($this->tribeFiles as $key => $value) { $tribe = new Tribe(); $parse = $tribe->ParseTribe($value); if (!$parse->Id) { continue; } $this->Tribes[$parse->Id] = $parse; } } else { if ($this->setupSSH($options['SSHSettings']['host'], @$options['SSHSettings']['port'], $options['SSHSettings']['known_host'], $options['SSHSettings']['pub_key_location'], $options['SSHSettings']['priv_key_location'], $options['SSHSettings']['key_user'], $options['SSHSettings']['cache_dir'])) { $this->Timers['App'] = MicroTime(true); $this->playerFiles = glob($options['SSHSettings']['cache_dir'] . '/*.arkprofile'); $this->tribeFiles = glob($options['SSHSettings']['cache_dir'] . '/*.arktribe'); if (!$this->playerFiles && !$this->tribeFiles) { die('Invalid directory detected, no profiles or tribes found!'); } foreach ($this->playerFiles as $key => $value) { $player = new Player(); $parse = (object) $player->ParsePlayer($value); if (!$parse->Id) { continue; } $this->Players[(string) $parse->Id] = $parse; } foreach ($this->tribeFiles as $key => $value) { $tribe = new Tribe(); $parse = $tribe->ParseTribe($value); if (!$parse->Id) { continue; } $this->Tribes[$parse->Id] = $parse; } } else { die('SSH Failed To Process, please check your logs for any exceptions!'); } } // $this->Timer = MicroTime(true); $this->LinkPlayerTribe(); // $this->Timer = MicroTime(true) - $this->Timer; // $tribe = new Tribe(); // $tribe->ParseTribe($installLocation."/1596232110.arktribe"); $this->Timers['App'] = Number_Format(MicroTime(true) - $this->Timers['App'], 4, '.', ''); }
echo "The following tribes have been set invalid:\n"; for ($i = 0; $i < sizeof($invalidated_tribes); ++$i) { echo $tribes[$invalidated_tribes[$i]]['tag'] . " \n"; } echo "The following tribes have been set valid:\n"; for ($i = 0; $i < sizeof($validated_tribes); ++$i) { echo $tribes[$validated_tribes[$i]]['tag'] . " \n"; } echo "The following tribes have been deleted:\n"; for ($i = 0; $i < sizeof($deleted_tribes); ++$i) { echo $deleted_tribes[$i] . " \n"; } // ---------------------------------------------------------------------------- // Step 2: Recalculate the leaders echo "-- Checking Tribe Leaders --\n"; $tribes = Tribe::getAllTribes(); if ($tribes < 0) { echo "Error retrieving all tribes.\n"; return -1; } foreach ($tribes as $tribeID => $data) { if (($r = TribeLeader::recalcLeader($tribeID, $data['leaderID'])) < 0) { echo "Error recalcing leader for Tribe {$data['tag']}\n"; return -1; } if ($r > 0) { echo "Tribe {$data['tag']} has a new leader: {$r}\n"; } } // ---------------------------------------------------------------------------- // Step 3 Check Relations
public static function processWonder($wonderID, $casterTribeData, $targetTribeName) { global $db; if ($wonderID < 0 || empty($casterTribeData) || empty($targetTribeName)) { return -30; } // check if wonder exists and is TribeWonder if (isset($GLOBALS['wonderTypeList'][$wonderID]) || !$wonder->isTribeWonder) { $wonder = $GLOBALS['wonderTypeList'][$wonderID]; } else { return -33; } // check if tribes exist $targetTribeData = Tribe::getID($targetTribeName, true); if (empty($targetTribeData)) { return -15; } $casterTribeID = $casterTribeData['tribeID']; $targetTribeID = $targetTribeData['tribeID']; // check if tribe is valid if (!$targetTribeData['valid']) { return -34; } // check if caster tribe ist valid if (!$casterTribeData['valid']) { return -35; } $casterTribeRelations = TribeRelation::getRelations($casterTribeID); $targetTribeRelations = TribeRelation::getRelations($targetTribeID); $wonderPossible = false; foreach ($wonder->targetsPossible as $targetsPossible) { // check target if ($targetsPossible['target'] == 'own' && $casterTribeID !== $targetTribeID) { continue; } if ($targetsPossible['target'] == 'other' && $casterTribeID === $targetTribeID) { continue; } // check relation $check = self::checkRelations($targetsPossible['relation'], $targetTribeID, $casterTribeID, $casterTribeRelations, $targetTribeRelations); if ($check == true) { $wonderPossible = true; break; } } if ($wonderPossible == false) { return -37; } // take wonder Costs from TribeStorage $memberNumber = Tribe::getMemberCount($casterTribeID); if (!processProductionCost($wonder, 0, NULL, $memberNumber, true)) { return -33; } // does the wonder fail? if ((double) rand() / (double) getRandMax() > $wonder->chance) { return 11; // wonder did fail } // schedule the wonder's impacts // create a random factor between -0.3 and +0.3 $delayRandFactor = rand(0, getrandmax()) / getrandmax() * 0.6 - 0.3; // now calculate the delayDelta depending on the first impact's delay $delayDelta = $wonder->impactList[0]['delay'] * $delayRandFactor; // get targets $targets = Tribe::getPlayerList($targetTribeID, false, true); if (sizeof($targets) == 0) { return -33; } $now = time(); // loop over targets foreach ($targets as $playerID => $playerData) { foreach ($playerData['caves'] as $caveID => $caveData) { // loop over impacts foreach ($wonder->impactList as $impactID => $impact) { $delay = (int) (($delayDelta + $impact['delay']) * WONDER_TIME_BASE_FACTOR); $sql = $db->prepare("INSERT INTO " . EVENT_WONDER_TABLE . "\n (casterID, sourceID, targetID, wonderID, impactID, start, end)\n VALUES\n (:playerID, :caveID, :targetID, :wonderID, :impactID, :start, :end)"); $sql->bindValue('playerID', 0, PDO::PARAM_INT); // playerID 0, for not receiving lots of wonder-end-messages $sql->bindValue('caveID', $casterTribeID, PDO::PARAM_INT); $sql->bindValue('targetID', $caveID, PDO::PARAM_INT); $sql->bindValue('wonderID', $wonderID, PDO::PARAM_INT); $sql->bindValue('impactID', $impactID, PDO::PARAM_INT); $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR); $sql->bindValue('end', time_toDatetime($now + $delay), PDO::PARAM_STR); $sql->execute(); } // end foreach impactList } } // end foreach target // send caster messages $messageClass = new Messages(); $messageClass->sendSystemMessage($_SESSION['player']->playerID, 9, sprintf(_("Stammeswunder erwirkt auf %s"), $targetTribeData['tag']), sprintf(_("Sie haben auf den Stamm %s ein Stammeswunder %s erwirkt."), $targetTribeData['tag'], $wonder->name)); // send target messages $targetPlayersArray = array(); foreach ($targets as $target) { if (!isset($targetPlayersArray[$target['playerID']])) { $targetPlayersArray[$target['playerID']] = $target; } } foreach ($targetPlayersArray as $target) { $messageClass->sendSystemMessage($target['playerID'], 9, 'Stammeswunder!', sprintf(_("Der Stamm %s hat ein Stammeswunder auf deine Höhlen gewirkt."), $casterTribeData['tag'])); } return 12; }
function getCaveReport($caveID, $ownCaves, $targetCaveID, $method) { global $template; if (!$targetCaveID) { $template->throwError('Es wurde keine Höhle ausgewählt.'); return; } if ($method == 'ajax') { $shortVersion = true; $template->setFile('mapDetailAjax.tmpl'); } else { $shortVersion = false; $template->setFile('mapDetail.tmpl'); } $cave = getCaveByID($targetCaveID); $caveDetails = array(); $playerDetails = null; $showArtePossible = false; if ($cave['playerID'] != 0) { $caveDetails = getCaves($cave['playerID']); $playerDetails = Player::getPlayer($cave['playerID']); $showArtePossible = $playerDetails->tribe != GOD_ALLY ? true : false; } $cave['terrain_name'] = $GLOBALS['terrainList'][$cave['terrain']]['name']; $cave['terrain_img'] = $GLOBALS['terrainList'][$cave['terrain']]['img']; if ($GLOBALS['terrainList'][$cave['terrain']]['tribeRegion']) { $cave['terrain_description'] = $GLOBALS['terrainList'][$cave['terrain']]['description']; $cave['terrain_tribe_cave'] = $GLOBALS['terrainList'][$cave['terrain']]['tribeRegion']; $attackerTribe = Tribe::getByID($cave['lastAttackingTribeID']); $cave['tribe_cave_tag'] = $attackerTribe['tag']; } $region = getRegionByID($cave['regionID']); // Wenn die Höhle ein Artefakt enthält und man berechtigt ist -> anzeigen if ($cave['hasArtefact'] && ($showArtePossible || $_SESSION['player']->tribe == GOD_ALLY)) { $cave['hasArtefact'] = true; } else { $cave['hasArtefact'] = false; } if ($cave['hasPet'] && ($showArtePossible || $_SESSION['player']->tribe == GOD_ALLY)) { $cave['hasPet'] = true; } else { $cave['hasArtefact'] = false; } $template->addVar('cave_details', $cave); if ($cave['playerID'] != 0) { $template->addVar('player_details', $playerDetails); /**************************************************************************************************** * * Alle Höhlen des Spielers ausgeben * ****************************************************************************************************/ $caves = array(); foreach ($caveDetails as $key => $value) { $temp = array('caveName' => $value['name'], 'xCoord' => $value['xCoord'], 'yCoord' => $value['yCoord'], 'terrain' => $GLOBALS['terrainList'][$value['terrain']]['name'], 'caveSize' => floor($value[CAVE_SIZE_DB_FIELD] / 50) + 1, 'secureCave' => $value['secureCave']); if ($value['hasArtefact'] && ($playerDetails->tribe != GOD_ALLY || $_SESSION['player']->tribe == GOD_ALLY)) { $temp['artefact'] = true; } if ($value['hasPet'] && ($playerDetails->tribe != GOD_ALLY || $_SESSION['player']->tribe == GOD_ALLY)) { $temp['pet'] = true; } $caves[] = $temp; } $template->addVar('player_caves', $caves); } else { if (sizeof($ownCaves) < $_SESSION['player']->takeover_max_caves) { if ($cave['starting_position'] == 0 && $cave['takeoverable'] == 0 && $cave['takeover_level'] > 0) { $template->addVar('maybe_takeoverable', true); } else { if ($cave['takeoverable'] == 1) { $template->addVar('takeoverable', true); } } } } }
init_buildings(); init_defenseSystems(); init_resources(); init_sciences(); init_units(); ///////////////////////////// constant values ////////////////////////////// // playerID => ranking_points $constant_values = array(); echo "-----------------------------------------------------------------------\n"; echo "- RANKING LOG FILE ----------------------------------------------------\n"; echo " vom " . date("r") . "\n"; $godTribeID = Tribe::getID(GOD_ALLY); if ($godTribeID == 0) { $godTribeID = -1; } $questTribeID = Tribe::getID(QUEST_ALLY); if ($questTribeID == 0) { $questTribeID = -1; } // Ranking nach 2-Schritte-Prozess: // 1. Teilbereiche ranken // 2. Durchschnitt bilden +++NEU+++ Der Durchschnitt wird nun fuer drei Tage // aufbewahrt und daraus ein 3-Tage-Mittel bestimmt // Die Teilbereiche fuer Schritt 1 lauten: // a.) Summe der Groessen der milit. Einheiten + Verteidigungsanlagen // ausgeschieden b.) Summe der Hoehlen // c.) Summe aller vorhandenen Rohstoffe // d.) Summe aller Gebaeude in allen Hoehlen // e.) Summe aller Entdeckungen // f.) Summe aller Artefakte // ----------------------------------------------------------------------------
function tribe_getContentNoTribe($caveID, &$details) { global $template; $messageText = array(-10 => array('type' => 'error', 'message' => _('Die Stammeszugehörigkeit hat sich erst vor kurzem geändert. Warten Sie, bis die Stammeszugehörigkeit geändert werden darf.')), -9 => array('type' => 'error', 'message' => _('Du kannst keinen Stamm gründen während du in einem Stamm bist.')), -8 => array('type' => 'error', 'message' => _('Nicht zulässiges Stammeskürzel oder Passwort.')), -7 => array('type' => 'error', 'message' => _('Der Stamm hat schon die maximale Anzahl an Mitgliedern.')), -6 => array('type' => 'error', 'message' => _('Der Stamm befindet sich gerade im Krieg und darf daher im Moment keine neuen Mitglieder aufnehmen.')), -5 => array('type' => 'error', 'message' => _('Der Stamm konnte nicht angelegt werden.')), -4 => array('type' => 'error', 'message' => _('Es gibt schon einen Stamm mit diesem Kürzel.')), -3 => array('type' => 'error', 'message' => _('Du konntest dem Stamm nicht beitreten. Vermutlich bist du schon bei einem anderen Stamm Mitglied.')), -2 => array('type' => 'error', 'message' => _('Dieser Stammesname ist nicht erlaubt!')), -1 => array('type' => 'error', 'message' => _('Stammeskürzel und Passwort stimmen nicht überein.')), 1 => array('type' => 'success', 'message' => _('Du bist dem Stamm beigetreten.')), 2 => array('type' => 'success', 'message' => _('Der Stamm wurde erfolgreich angelegt.')), 3 => array('type' => 'success', 'message' => _('Der Stamm wurde erfolgreich angelegt. Jedoch konnte das alte Ranking nicht übernommen werden.'))); if (!empty($_SESSION['player']->tribeID)) { tribe_getContent($caveID, $details); return; } // open template $template->setFile('tribe.tmpl'); $template->setShowResource(false); // process form data $tribeAction = Request::getVar('action', 0); switch ($tribeAction) { case TRIBE_ACTION_JOIN: $tag = Request::getVar('inputTag', ''); $password = Request::getVar('inputPassword', ''); if (Tribe::validatePassword($password) && Tribe::validateTag($tag)) { $messageID = Tribe::processJoin($_SESSION['player'], $tag, $password); if ($messageID == 1) { $auth = new auth(); $auth->setPermission('tribe', 0, $_SESSION['player']->playerID); page_refreshUserData(); $template->addVar('status_msg', $messageText[$messageID]); tribe_getContent($caveID, $details); return; } } else { $messageID = -8; } break; case TRIBE_ACTION_CREATE: $tag = Request::getVar('inputTag', ''); $password = Request::getVar('inputPassword', ''); $restoreRang = Request::getVar('inputRestoreRank', 'no') == 'yes' ? true : false; if (Tribe::validatePassword($password) && Tribe::validateTag($tag)) { $messageID = Tribe::processCreate($_SESSION['player'], $tag, $password, $restoreRang); } else { $messageID = -8; } if ($messageID == 2) { $auth = new auth(); $auth->setPermission('tribe', 0, $_SESSION['player']->playerID); page_refreshUserData(); $template->addVar('status_msg', $messageText[$messageID]); tribe_getContent($caveID, $details); return; } break; } /**************************************************************************************************** * * Übergabe ans Template * ****************************************************************************************************/ $template->addVars(array('status_msg' => isset($messageID) ? $messageText[$messageID] : '', 'tribe_action_create' => TRIBE_ACTION_CREATE, 'tribe_action_join' => TRIBE_ACTION_JOIN)); }
$sqlSelect->closeCursor(); echo "DELETE PLAYER {$playerID}: Delete Login "; $sqlDelete = $db_login->prepare("DELETE FROM Login WHERE loginID = :playerID"); $sqlDelete->bindValue('playerID', $playerID, PDO::PARAM_INT); if (!$sqlDelete->execute()) { echo "FAILURE\n"; exit(1); } echo "SUCCESS\n"; if (!($db_game = DbConnect())) { echo "DELETE PLAYER {$playerID}: Failed to connect to game db.\n"; exit(1); } $db = $db_game; echo "DELETE PLAYER {$playerID}: Leave Player "; if (!Tribe::leaveTribe($playerID)) { echo "FAILURE\n"; } else { echo "SUCCESS\n"; } echo "DELETE PLAYER {$playerID}: Delete Player "; $sql = $db_game->prepare("DELETE FROM " . PLAYER_TABLE . " WHERE playerID = :playerID"); $sql->bindValue('playerID', $playerID, PDO::PARAM_INT); if (!$sql->execute()) { echo "FAILURE\n"; } else { echo "SUCCESS\n"; } echo "DELETE PLAYER {$playerID}: Delete Cave_takeover"; $sql = $db_game->prepare("DELETE FROM " . CAVE_TAKEOVER_TABLE . " WHERE playerID = :playerID"); $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);