Пример #1
0
function tribe_getContent($caveID, $tag)
{
    global $db, $no_resource_flag, $config, $params;
    $no_resource_flag = 1;
    if (!($r = $db->query("SELECT t.*, p.playerID, p.name AS leaderName " . "FROM Tribe t " . "LEFT JOIN Player p " . "ON p.playerID = t.leaderID " . "WHERE t.tag LIKE '{$tag}'"))) {
        page_dberror();
    }
    if (!($row = $r->nextRow(MYSQL_ASSOC))) {
        page_dberror();
    }
    $JuniorAdmin = $targetPlayer = new Player(getPlayerByID($row['juniorLeaderID']));
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'tribeDetail.ihtml');
    $row["urltag"] = urlencode(unhtmlentities($tag));
    $row["playerList_modus"] = TRIBE_PLAYER_LIST;
    $row["playerDetail_modus"] = PLAYER_DETAIL;
    $row["tribeHistory_modus"] = TRIBE_HISTORY;
    $row["tribeRelationList_modus"] = TRIBE_RELATION_LIST;
    if (!empty($row['awards'])) {
        $tmp = explode('|', $row['awards']);
        $awards = array();
        foreach ($tmp as $tag) {
            $awards[] = array('tag' => $tag, 'award_modus' => AWARD_DETAIL);
        }
        $row['award'] = $awards;
    }
    foreach ($row as $k => $v) {
        if (!$v) {
            $row[$k] = "k.A.";
        }
    }
    $row['juniorLeaderName'] = $JuniorAdmin->name;
    $row['juniorLeaderID'] = $JuniorAdmin->playerID;
    tmpl_set($template, 'DETAILS', $row);
    return tmpl_parse($template);
}
Пример #2
0
function hero_usePotion($potionID, $value)
{
    global $db;
    $playerID = $_SESSION['player']->playerID;
    $playerData = getPlayerByID($playerID);
    $hero = getHeroByPlayer($playerID);
    $potion = $GLOBALS['potionTypeList'][$potionID];
    if (!$potion) {
        return -8;
    }
    if ($potion->needed_level > $hero['lvl']) {
        return -10;
    }
    if ($playerData[$potion->dbFieldName] < $value) {
        return -9;
    }
    // remove potions
    $sql = $db->prepare("UPDATE " . PLAYER_TABLE . "\n                       SET " . $potion->dbFieldName . " = " . $potion->dbFieldName . " - :value\n                       WHERE playerID = :playerID");
    $sql->bindValue('value', $value, PDO::PARAM_INT);
    $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
    $sql_setback = $db->prepare("UPDATE " . PLAYER_TABLE . "\n                               SET " . $potion->dbFieldName . " = " . $potion->dbFieldName . " + :value\n                               WHERE playerID = :playerID");
    $sql_setback->bindValue('value', $value, PDO::PARAM_INT);
    $sql_setback->bindValue('playerID', $playerID, PDO::PARAM_INT);
    if (!$sql->execute()) {
        return -8;
    }
    // apply potion effects
    $newHealPoints = $hero['healPoints'];
    for ($i = 0; $i < $value; $i++) {
        $newHealPoints += floor($hero['maxHealPoints'] * $potion->hp_prozentual_increase / 100) + $potion->hp_increase;
    }
    if ($hero['maxHealPoints'] < $newHealPoints) {
        $newHealPoints = $hero['maxHealPoints'];
    }
    if ($potion->tp_setBack == false) {
        $sql = $db->prepare("UPDATE " . HERO_TABLE . "\n                         SET healPoints = :newHealPoints\n                         WHERE playerID = :playerID");
        $sql->bindValue('newHealPoints', $newHealPoints, PDO::PARAM_INT);
        $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
        if (!$sql->execute()) {
            $sql_setback->execute();
            return -8;
        }
    } else {
        //remove hero effects from cave
        if (!hero_removeHeroEffectsFromCave($playerID)) {
            return -8;
        }
        //remove hero effect from hero
        if (!hero_clearHeroEffectsAndSkills($playerID)) {
            return -8;
        }
        $tpFree = $hero['maxHpLvl'] + $hero['forceLvl'] + $hero['regHpLvl'] + $hero['tpFree'];
        foreach ($GLOBALS['heroSkillTypeList'] as $skill) {
            if ($hero[$skill['dbFieldName']]) {
                $tpFree += $skill['costTP'];
            }
        }
        $healPoints = eval("return " . hero_parseFormulas($GLOBALS['heroTypesList'][$hero['heroTypeID']]['maxHP_formula']) . ";");
        $sql = $db->prepare("UPDATE " . HERO_TABLE . " SET \n                           maxHpLvl = 0, maxHealPoints = :maxHealPoints,\n                           healPoints = :healpoints,\n                           forceLvl = 0, `force` = 0,\n                           regHpLvl = 0, regHP = 0,\n                           tpFree = :tpFree, \n                           heroTypeID = 1000\n                         WHERE playerID = :playerID");
        $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
        $sql->bindValue('tpFree', $tpFree, PDO::PARAM_INT);
        $sql->bindValue('maxHealPoints', $healPoints, PDO::PARAM_INT);
        $sql->bindValue('healpoints', floor($healPoints / 2), PDO::PARAM_INT);
        if (!$sql->execute()) {
            $sql_setback->execute();
            return -8;
        }
        return 6;
    }
    return 5;
}
Пример #3
0
function getCaveReport($meineHoehlen, $caveID, $targetCaveID)
{
    global $params, $config, $terrainList;
    $cave = getCaveByID($targetCaveID);
    $caveDetails = array();
    $playerDetails = array();
    if ($cave['playerID'] != 0) {
        $caveDetails = getCaves($cave['playerID']);
        $playerDetails = getPlayerByID($cave['playerID']);
    }
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'mapdetail.ihtml');
    if ($cave['protected']) {
        tmpl_set($template, 'PROPERTY', _('Anfängerschutz aktiv'));
    }
    if (!$cave['secureCave'] && $cave['playerID']) {
        tmpl_iterate($template, 'PROPERTY');
        tmpl_set($template, 'PROPERTY', _('übernehmbar'));
    }
    $region = getRegionByID($cave['regionID']);
    tmpl_set($template, array('cavename' => $cave['name'], 'xcoord' => $cave['xCoord'], 'ycoord' => $cave['yCoord'], 'terrain' => $terrainList[$cave['terrain']]['name'], 'region' => $region['name'], 'movementlink' => sprintf("?modus=unit_movement&amp;targetXCoord=%d&amp;targetYCoord=%d&amp;targetCaveName=%s", $cave['xCoord'], $cave['yCoord'], unhtmlentities($cave['name'])), 'backlink' => sprintf("?modus=map&amp;xCoord=%d&amp;yCoord=%d", $cave['xCoord'], $cave['yCoord'])));
    if ($cave['playerID'] != 0) {
        tmpl_set($template, '/OCCUPIED', array('playerLink' => "?modus=player_detail&amp;detailID=" . $playerDetails['playerID'], 'caveOwner' => $playerDetails['name']));
        if ($playerDetails['tribe']) {
            tmpl_set($template, '/OCCUPIED/TRIBE', array('tribeLink' => "?modus=tribe_detail&amp;tribe=" . urlencode(unhtmlentities($playerDetails['tribe'])), 'ownersTribe' => $playerDetails['tribe']));
        }
        if ($cave['artefacts'] != 0 && ($playerDetails['tribe'] != GOD_ALLY || $params->SESSION->player->tribe == GOD_ALLY)) {
            tmpl_set($template, '/OCCUPIED/ARTEFACT/artefactLink', "?modus=artefact_list&amp;caveID={$caveID}");
        }
        $caves = array();
        foreach ($caveDetails as $key => $value) {
            $temp = array('caveName' => $value['name'], 'xCoord' => $value['xCoord'], 'ycoord' => $value['yCoord'], 'terrain' => $terrainList[$value['terrain']]['name'], 'caveSize' => floor($value[CAVE_SIZE_DB_FIELD] / 50) + 1, 'movementLink' => "?modus=unit_movement&amp;targetXCoord=" . $value['xCoord'] . "&amp;targetYCoord=" . $value['yCoord'] . "&amp;targetCaveName=" . unhtmlentities($value['name']));
            if ($value['artefacts'] != 0 && ($playerDetails['tribe'] != GOD_ALLY || $params->SESSION->player->tribe == GOD_ALLY)) {
                $temp['ARTEFACT'] = array('artefactLink' => "?modus=artefact_list&amp;caveID={$caveID}");
            }
            if ($value['protected'] && $value['playerID']) {
                $temp['PROPERTY'] = array('text' => _('Anfängerschutz aktiv'));
            } else {
                if (!$value['secureCave']) {
                    $temp['PROPERTY'] = array('text' => _('übernehmbar'));
                }
            }
            $caves[] = $temp;
        }
        tmpl_set($template, '/OCCUPIED/CAVES', $caves);
    } else {
        if (sizeof($meineHoehlen) < $params->SESSION->player->takeover_max_caves && $cave['takeoverable'] == 1) {
            tmpl_set($template, 'TAKEOVERABLE', array('modus' => TAKEOVER, 'caveID' => $caveID, 'targetXCoord' => $cave['xCoord'], 'targetYCoord' => $cave['yCoord']));
        }
    }
    return tmpl_parse($template);
}
Пример #4
0
function artefact_getDetail($caveID, &$myCaves)
{
    global $template;
    $messageText = array(-5 => array('type' => 'error', 'message' => _('Dieses Artefakt kann nicht noch einmal eingeweiht werden.')), -4 => array('type' => 'error', 'message' => _('Fehler: Artefakt konnte nicht auf ARTEFACT_INITIATING gestellt werden.')), -3 => array('type' => 'error', 'message' => _('Sie weihen bereits ein anderes Artefakt ein.')), -2 => array('type' => 'error', 'message' => _('Es fehlen die notwendigen Voraussetzungen.')), -1 => array('type' => 'error', 'message' => _('Fehler: Ritual nicht gefunden.')), 0 => array('type' => 'notice', 'message' => _('Über dieses Artefakt weiß man nichts!')), 1 => array('type' => 'success', 'message' => _('Die Einweihung des Artefakts wurde gestartet!')));
    // open template
    $template->setFile('artefactDetail.tmpl');
    $show_artefact = TRUE;
    $artefactID = Request::getVar('artefactID', 0);
    $artefact = artefact_getArtefactByID($artefactID);
    if (empty($artefact)) {
        $messageID = 0;
    } else {
        $description_initiated = $artefact['description_initiated'];
        unset($artefact['description_initiated']);
        // Gott oder nicht?
        if ($_SESSION['player']->tribe != GOD_ALLY) {
            // gibts nicht oder nicht in einer Höhle
            if (!$artefact['caveID']) {
                $show_artefact = FALSE;
            } else {
                $cave = getCaveByID($artefact['caveID']);
                // leere Höhle
                if (!$cave['playerID']) {
                    $show_artefact = FALSE;
                } else {
                    $owner = getPlayerByID($cave['playerID']);
                    // Besitzer ist ein Gott
                    if ($owner['tribe'] == GOD_ALLY) {
                        $show_artefact = FALSE;
                    }
                }
            }
        }
        $showRitual = 0;
        $showStatus = 0;
        $template->addVars(array('show_artefact' => $show_artefact));
        if ($show_artefact) {
            $artefact['img'] = $artefact['uninitiationImg'];
            // Bild vom uninitalisierten Artefakt per default anzeigen!
            // eigene Höhle ...
            if (isset($myCaves[$artefact['caveID']])) {
                $showStatus = 1;
                // Ritual ausführen?
                if (Request::isPost('initiate')) {
                    $messageID = artefact_beginInitiation($artefact);
                    // reload
                    $myCaves = getCaves($_SESSION['player']->playerID);
                    // wenn noch uneingeweiht und in der "richtigen" Höhle, ritual zeigen
                } else {
                    if ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_UNINITIATED) {
                        // Check, ob bereits eingeweiht wird.
                        if (sizeof(artefact_getArtefactInitiationsForCave($caveID)) == 0) {
                            $showRitual = 1;
                            // Hol das Einweihungsritual
                            $ritual = artefact_getRitualByID($artefact['initiationID']);
                            // Hol die Kosten und beurteile ob genug da ist
                            $merged_game_rules = array_merge($GLOBALS['resourceTypeList'], $GLOBALS['buildingTypeList'], $GLOBALS['unitTypeList'], $GLOBALS['scienceTypeList'], $GLOBALS['defenseSystemTypeList']);
                            $cost = array();
                            foreach ($merged_game_rules as $val) {
                                if (isset($ritual[$val->dbFieldName])) {
                                    if ($ritual[$val->dbFieldName]) {
                                        $object_context = ceil($ritual[$val->dbFieldName]) > floor($myCaves[$artefact['caveID']][$val->dbFieldName]) ? 'less-' : 'enough ';
                                        array_push($cost, array('object' => $val->name, 'amount' => $ritual[$val->dbFieldName], 'class' => $object_context));
                                    }
                                }
                            }
                            $artefact['initiation'] = array('cost' => $cost, 'name' => $ritual['name'], 'description' => $ritual['description'], 'duration' => time_formatDuration($ritual['duration']), 'initiate' => 1);
                        } else {
                            $showRitual = -1;
                        }
                    } elseif ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_INITIATING) {
                        // Arte wird gerade eingeweiht
                        $showRitual = -1;
                    }
                }
                // "geheime" Beschreibung nur zeigen, wenn eingeweiht
                if ($artefact['initiated'] == ARTEFACT_INITIATED) {
                    $artefact['description_initiated'] = $description_initiated;
                    // Besitzer des Artefaktes und initalisiert? Richtiges Artefakt Bild anzeigen
                    if (isset($myCaves[$artefact['caveID']])) {
                        $artefact['img'] = $artefact['initiationImg'];
                    }
                }
            }
            $template->addVars(array('artefact' => $artefact));
            $template->addVars(array('showRitual' => $showRitual));
            $template->addVars(array('showStatus' => $showStatus));
        } else {
            // über dieses Artefakt weiß man nichts!
            $messageID = 0;
        }
    }
    $template->addVar('status_msg', isset($messageID) ? $messageText[$messageID] : '');
}
Пример #5
0
function artefact_getDetail($caveID, &$myCaves, $artefactID)
{
    global $params, $config, $resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList;
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'artefactdetail.ihtml');
    $show_artefact = TRUE;
    $artefact = artefact_getArtefactByID($artefactID);
    $description_initiated = $artefact['description_initiated'];
    unset($artefact['description_initiated']);
    // Gott oder nicht?
    if ($params->SESSION->player->tribe != GOD_ALLY) {
        // gibts nicht oder nicht in einer Höhle
        if (!$artefact['caveID']) {
            $show_artefact = FALSE;
        } else {
            $cave = getCaveByID($artefact['caveID']);
            // leere Höhle
            if (!$cave['playerID']) {
                $show_artefact = FALSE;
            } else {
                $owner = getPlayerByID($cave['playerID']);
                // Besitzer ist ein Gott
                if ($owner['tribe'] == GOD_ALLY) {
                    $show_artefact = FALSE;
                }
            }
        }
    }
    if ($show_artefact) {
        // eigene Höhle ...
        if (array_key_exists($artefact['caveID'], $myCaves)) {
            // Ritual ausführen?
            if (isset($params->POST->initiate)) {
                $message = artefact_beginInitiation($artefact);
                tmpl_set($template, 'message', $message);
                // reload
                $myCaves = getCaves($params->SESSION->player->playerID);
            } else {
                if ($artefact['caveID'] == $caveID && $artefact['initiated'] == ARTEFACT_UNINITIATED) {
                    // Check, ob bereits eingeweiht wird.
                    if (sizeof(artefact_getArtefactInitiationsForCave($caveID)) == 0) {
                        // Hol das Einweihungsritual
                        $ritual = artefact_getRitualByID($artefact['initiationID']);
                        // Hol die Kosten und beurteile ob genug da ist
                        $merged_game_rules = array_merge($resourceTypeList, $buildingTypeList, $unitTypeList, $scienceTypeList, $defenseSystemTypeList);
                        $cost = array();
                        foreach ($merged_game_rules as $val) {
                            if ($ritual[$val->dbFieldName]) {
                                $object_context = ceil($ritual[$val->dbFieldName]) > floor($myCaves[$artefact['caveID']][$val->dbFieldName]) ? 'LESS' : 'ENOUGH';
                                array_push($cost, array('object' => $val->name, $object_context . '/amount' => $ritual[$val->dbFieldName]));
                            }
                        }
                        $artefact['INITIATION'] = array('COST' => $cost, 'name' => $ritual['name'], 'description' => $ritual['description'], 'duration' => time_formatDuration($ritual['duration']), 'HIDDEN' => array(array('name' => "artefactID", 'value' => $artefact['artefactID']), array('name' => "modus", 'value' => ARTEFACT_DETAIL), array('name' => "initiate", 'value' => 1)));
                    } else {
                        tmpl_iterate($template, 'ARTEFACT/NO_INITIATION');
                    }
                }
            }
            // "geheime" Beschreibung nur zeigen, wenn eingeweiht
            if ($artefact['initiated'] == ARTEFACT_INITIATED) {
                $artefact['description_initiated'] = $description_initiated;
            }
        }
        tmpl_set($template, 'ARTEFACT', $artefact);
    } else {
        tmpl_set($template, 'message', _('Über dieses Artefakt weiss man nichts.'));
    }
    return tmpl_parse($template);
}
Пример #6
0
/** This function returns basic hero details
 *
 *  @param caveID       the current caveID
 *  @param ownCaves  all the data of all your caves
 */
function hero_getHeroDetail($caveID, &$ownCaves)
{
    global $db, $template;
    // open template
    $template->setFile('hero.tmpl');
    // get current playerID by user
    $playerID = $_SESSION['player']->playerID;
    $player = getPlayerByID($playerID);
    $newhero = false;
    $messageText = array(-24 => array('type' => 'error', 'message' => _('Es können nur Rohstoffe aus der aktuellen Höhle geopfert werden!')), -23 => array('type' => 'error', 'message' => _('Die Fähigkeit wurde schon erlernt!')), -22 => array('type' => 'error', 'message' => _('Dein Held hat den falschen Typ, um die Fähigkeit zu erlernen!')), -21 => array('type' => 'error', 'message' => _('Fehler beim Erlernen der Fähigkeit!')), -20 => array('type' => 'error', 'message' => _('Dein Held hat nicht das erforderliche Level!')), -19 => array('type' => 'error', 'message' => _('Fehler beim Eintragen des neuen Heldentyps!')), -18 => array('type' => 'error', 'message' => _('Euer Held ist tot!')), -17 => array('type' => 'error', 'message' => _('Euer Held ist gar nicht tot!')), -16 => array('type' => 'error', 'message' => _('Fehler beim Eintragen der Erfahrungspunkte nach der Opferung!')), -15 => array('type' => 'error', 'message' => _('Fehler beim Abziehen der geopferten Rohstoffe!')), -14 => array('type' => 'error', 'message' => _('Nicht genug Rohstoffe zum Opfern vorhanden!')), -13 => array('type' => 'error', 'message' => _('Fehler beim Holen der Opferwerte!')), -12 => array('type' => 'error', 'message' => _('Fehler beim Erhöhen des Levels!')), -11 => array('type' => 'error', 'message' => _('Nicht genug Talentpunkte vorhanden!')), -10 => array('type' => 'error', 'message' => _('Ihr Held ist noch nicht erfahren genug, diesen Trank zu nutzen!')), -9 => array('type' => 'error', 'message' => _('Nicht genug Tränke vorhanden!')), -8 => array('type' => 'error', 'message' => _('Fehler beim Anwenden des Trankes!')), -7 => array('type' => 'error', 'message' => _('Fehler beim Schreiben in die Datenbank.')), -6 => array('type' => 'error', 'message' => _('Der Held existiert bereits.')), -5 => array('type' => 'error', 'message' => _('Maximallevel des Skills erreicht.')), -4 => array('type' => 'notice', 'message' => _('Fehler beim Abbrechen der Wiederbelebung.')), -3 => array('type' => 'error', 'message' => _('Nicht genug Rohstoffe zum Wiederbeleben.')), -2 => array('type' => 'error', 'message' => _('Der Held wird bereits wiederbelebt.')), -1 => array('type' => 'error', 'message' => _('Dafür sind nicht genug Talentpunkte vorhanden.')), 0 => array('type' => 'error', 'message' => _('Euch steht noch kein Held zur Verfügung.')), 1 => array('type' => 'success', 'message' => _('Euer Held hat eine neue Fähigkeit erlernt.')), 2 => array('type' => 'notice', 'message' => _('Die Wiederbelebung eures Helden hat begonnen.')), 3 => array('type' => 'success', 'message' => _('Euer Held wurde erstellt.')), 4 => array('type' => 'notice', 'message' => _('Wählt mit Bedacht, dies lässt sich womöglich nicht mehr rückgängig machen.')), 5 => array('type' => 'success', 'message' => _('Der Trank hat seine Wirkung entfaltet. Die Lebenspunkte wurden erhöht.')), 6 => array('type' => 'success', 'message' => _('Der Trank des Vergessens hat Wirkung gezeigt. Der Held ist nun wieder unerfahren.')), 7 => array('type' => 'success', 'message' => _('Euer Held hat das nächste Level erreicht!')), 8 => array('type' => 'success', 'message' => _('Eurem Helden wurden expValue Erfahrungspunkte gutgeschrieben.')), 9 => array('type' => 'success', 'message' => _('Die Wiederbelebung wurde erfolgreich abgebrochen.')), 10 => array('type' => 'success', 'message' => _('Heldentyp erfolgreich gewechselt!')), 11 => array('type' => 'success', 'message' => _('Dein Held hat eine neue Fähigkeit erlernt!')));
    // create new hero
    $action = Request::getVar('action', '');
    $newHeroID = Request::getVar('id', '');
    if ($action == "createHero") {
        if (isset($GLOBALS['heroTypesList'][$newHeroID])) {
            $messageID = createNewHero($GLOBALS['heroTypesList'][$newHeroID]['heroTypeID'], $playerID, $caveID);
        }
    }
    $hero = getHeroByPlayer($playerID);
    $showTypesList = false;
    $changeType = false;
    if ($hero['heroTypeID'] == 1000) {
        $hero = null;
        $changeType = true;
        $showTypesList = true;
    }
    if ($hero != null) {
        $showLevelUp = false;
        $ritual = getRitual($hero);
        $resource['duration'] = $ritual['duration'];
        $cave = getCaveSecure($caveID, $playerID);
        foreach ($GLOBALS['resourceTypeList'] as $key) {
            $dbFieldName = $key->dbFieldName;
            if (!isset($ritual[$dbFieldName])) {
                continue;
            }
            $enough = $ritual[$dbFieldName] <= $cave[$dbFieldName];
            $tmp = array('enough' => $enough, 'value' => $ritual[$dbFieldName], 'missing' => $ritual[$dbFieldName] - $cave[$dbFieldName], 'dbFieldName' => $dbFieldName, 'name' => $key->name);
            $resource[$key->dbFieldName] = $tmp;
        }
        $action = Request::getVar('action', '');
        switch ($action) {
            case 'reincarnate':
                if ($hero['isAlive'] == 1) {
                    $messageID = -17;
                    break;
                }
                if (checkEventHeroExists($playerID)) {
                    $messageID = -2;
                } else {
                    $messageID = createRitual($caveID, $playerID, $resource, $hero, $ownCaves);
                }
                break;
            case 'cancelOrder':
                if (checkEventHeroExists($playerID)) {
                    $messageID = hero_cancelOrder();
                }
                break;
            case 'skill':
                if ($hero['isAlive'] != 1) {
                    $messageID = -18;
                    break;
                }
                if ($hero['tpFree'] >= 1) {
                    $skill = Request::getVar('skill', '');
                    switch ($skill) {
                        case 'force':
                            //typ='force';
                            if ($hero['forceLvl'] < 10) {
                                if (skillForce($playerID, $hero)) {
                                    $messageID = 1;
                                }
                                break;
                            }
                            $messageID = -5;
                            break;
                        case 'maxHP':
                            //typ='maxHP';
                            if ($hero['maxHpLvl'] < 10) {
                                if (skillMaxHp($playerID, $hero)) {
                                    $messageID = 1;
                                } else {
                                    $messageID = -5;
                                }
                                break;
                            }
                            $messageID = -5;
                            break;
                        case 'regHP':
                            //typ='regHP';
                            if ($hero['regHpLvl'] < 10) {
                                if (skillRegHp($playerID, $hero)) {
                                    $messageID = 1;
                                } else {
                                    $messageID = -5;
                                }
                                break;
                            }
                            $messageID = -5;
                            break;
                    }
                }
                break;
            case 'skill_ability':
                if ($hero['isAlive'] != 1) {
                    $messageID = -18;
                    break;
                }
                if ($hero['tpFree'] >= 1) {
                    if ($skillID = Request::getVar('skillID', '')) {
                        $messageID = hero_skillAbility($skillID, $hero);
                    }
                }
                break;
            case 'lvlUp':
                if ($hero['isAlive'] != 1) {
                    $messageID = -18;
                    break;
                }
                $messageID = hero_levelUp($hero);
                break;
            case 'immolateResources':
                $value = Request::getVar('value', array('' => ''));
                $resultArray = hero_immolateResources($value, $caveID, $ownCaves);
                $messageID = $resultArray['messageID'];
                // set exp value in message
                if ($resultArray['value'] > 0) {
                    $messageText[$messageID]['message'] = str_replace('expValue', $resultArray['value'], $messageText[$messageID]['message']);
                }
                break;
            case 'usePotion':
                if ($hero['isAlive'] != 1) {
                    $messageID = -18;
                    break;
                }
                $potionID = Request::getVar('potionID', -1);
                $value = Request::getVar('value', 0);
                if ($potionID == -1) {
                    $messageID = -8;
                    break;
                }
                if ($value < 0) {
                    $messageID = -8;
                    break;
                }
                $messageID = hero_usePotion($potionID, $value);
                if ($messageID == 6) {
                    $hero = null;
                    $showTypesList = true;
                    $changeType = true;
                }
                break;
        }
        $queue = getHeroQueue($playerID);
        $player = getPlayerByID($playerID);
        $potions = array();
        foreach ($GLOBALS['potionTypeList'] as $potionID => $potion) {
            if ($player[$potion->dbFieldName] > 0) {
                $potion->value = $player[$potion->dbFieldName];
                $potions[] = $potion;
            }
        }
    } elseif ($changeType) {
        if (Request::getVar('action', '') == 'changeType') {
            $messageID = hero_changeType(Request::getVar('typeID', -1));
            $showTypesList = false;
            $hero = getHeroByPlayer($playerID);
        }
    } else {
        $player = getPlayerByID($playerID);
        if ($player['heroism'] >= 1) {
            $messageID = 4;
            $newhero = true;
        } else {
            $messageID = 0;
        }
    }
    /****************************************************************************************************
     *
     * Übergeben ans Template
     *
     ****************************************************************************************************/
    $template->addVars(array('status_msg' => isset($messageID) ? $messageText[$messageID] : ''));
    if (isset($queue) && $queue) {
        $template->addVars(array('quene_show' => true, 'quene_finish' => time_formatDatetime($queue['end'])));
    }
    if ($hero != null) {
        $hero = getHeroByPlayer($playerID);
        if ($hero['expLeft'] <= 0) {
            $showLevelUp = true;
        }
        if ($hero['healPoints'] <= 0.2 * $hero['maxHealPoints']) {
            $hero['HPbar'] = 'error';
        } else {
            $hero['HPbar'] = 'success';
        }
        $template->addVars(array('hero' => $hero, 'showLevelUp' => isset($showLevelUp) ? $showLevelUp : '', 'delay' => time_formatDuration($ritual['duration']), 'ritual' => $ritual, 'resource' => $resource, 'resourceTypeList' => $GLOBALS['resourceTypeList']));
    }
    if ($newhero) {
        $template->addVars(array('newhero' => $newhero, 'heroTypesList' => $GLOBALS['heroTypesList']));
    }
    if ($showTypesList) {
        $template->addVars(array('changeType' => $changeType, 'heroTypesList' => $GLOBALS['heroTypesList']));
    }
    $showImmolation = false;
    if ($ownCaves[$caveID]['hero']) {
        $showImmolation = true;
    }
    $template->addVar('showImmolation', $showImmolation);
    if (isset($potions) && $potions) {
        $template->addVar('potions', $potions);
    }
    if ($GLOBALS['heroSkillTypeList']) {
        $skills = array();
        foreach ($GLOBALS['heroSkillTypeList'] as $skillID => $skill) {
            // calculate skill effect
            foreach ($skill['effects'] as $effect_dbFieldName => $effect) {
                foreach ($GLOBALS['effectTypeList'] as $eff) {
                    if ($eff->dbFieldName == $effect_dbFieldName) {
                        $name = $eff->name;
                        break;
                    }
                }
                $skill['effect_values'][] = $name . ": " . $skill['skillFactor'] * $hero['forceLvl'];
            }
            // filter skills by hero type
            foreach ($skill['requiredType'] as $rt) {
                if ($rt == $hero['id']) {
                    $skills[] = $skill;
                }
            }
        }
        // check if send button is disabled
        foreach ($skills as $skillID => $skill) {
            if ($hero[$skill['dbFieldName']] || $skill['costTP'] > $hero['tpFree'] || $skill['requiredLevel'] > $hero['lvl']) {
                $skills[$skillID]['disableButton'] = true;
            }
            if ($hero[$skill['dbFieldName']]) {
                $skills[$skillID]['showEffects'] = true;
            }
        }
        $template->addVar('skills', $skills);
    }
}
Пример #7
0
function unitAction($caveID, &$meineHoehlen)
{
    global $config, $db, $MAX_RESOURCE, $MOVEMENTCOSTCONSTANT, $MOVEMENTSPEEDCONSTANT, $params, $resourceTypeList, $unitTypeList, $FUELRESOURCEID;
    // get movements
    $ua_movements = Movement::getMovements();
    $details = $meineHoehlen[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        // was an artefact chosen?
        if ((int) $params->POST->myartefacts > 0) {
            $tempID = (int) $params->POST->myartefacts;
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($tempID == $value['artefactID']) {
                    $moveArtefact = $tempID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($params->SESSION->player->playerID);
    $params->SESSION->player = $_SESSION['player'];
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP($MOVEMENTCOSTCONSTANT . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP($MOVEMENTSPEEDCONSTANT . ';', '$details'));
    $minutesPerCave *= MOVEMENT_TIME_BASE_FACTOR / 60;
    if (isset($params->POST->moveit) && sizeof($params->POST->unit)) {
        $targetXCoord = intval($params->POST->targetXCoord);
        $targetYCoord = intval($params->POST->targetYCoord);
        $targetCaveName = $params->POST->targetCaveName;
        $targetCaveID = intval($params->POST->targetCaveID);
        $movementID = intval($params->POST->movementID);
        // check for scripters
        check_timestamp($params->POST->tstamp);
        $validCaveName = FALSE;
        // targetCaveID >>> coords
        if (isset($targetCaveID) && $targetCaveID > 0) {
            $result = getCaveByID(intval($targetCaveID));
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = TRUE;
            }
            // name >>> coords
        } else {
            if (isset($targetCaveName)) {
                $result = getCaveByName($targetCaveName);
                if (sizeof($result) != 0) {
                    $targetXCoord = $result['xCoord'];
                    $targetYCoord = $result['yCoord'];
                    $validCaveName = TRUE;
                }
            }
        }
        // get target player
        $result = getCaveByCoords(intval($targetXCoord), intval($targetYCoord));
        if (sizeof($result) != 0) {
            $targetPlayer = new Player(getPlayerByID($result['playerID']));
        }
        // Array von Nullwerten befreien
        $unit = array_filter($params->POST->unit, "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", $params->POST->rohstoff);
        // Test, ob Einheitentragekapazität ausgelastet
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                $capacity += $aUnit * $unitTypeList[$unitKey]->encumbranceList[$resKey];
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        if ($movementID == 2) {
            // move units/resources
            if (strtoupper($targetPlayer->tribe) != strtoupper($params->SESSION->player->tribe)) {
                //may tade in own tribe
                $ownTribe = $params->SESSION->player->tribe;
                $targetTribe = $targetPlayer->tribe;
                $targetIsNonPlayer = $targetPlayer->playerID == 0;
                $ownTribeAtWar = tribe_isAtWar($ownTribe, TRUE, $db);
                $targetTribeAtWar = tribe_isAtWar($targetTribe, TRUE, $db);
                $TribesMayTrade = relation_areAllies($ownTribe, $targetTribe, $db) || relation_areEnemys($ownTribe, $targetTribe, $db) || $targetIsNonPlayer;
                $denymovement_nonenemy = $ownTribeAtWar && !$TribesMayTrade;
                $denymovement_targetwar = $targetTribeAtWar && !$TribesMayTrade;
            }
        }
        if ($params->POST->movementID == 0) {
            $msg = _('Bitte Bewegungsart auswählen!');
        } else {
            if (!sizeof($unit)) {
                $msg = _('Es sind keine Einheiten ausgewählt!');
            } else {
                if (empty($targetXCoord) || empty($targetYCoord) and empty($targetCaveName)) {
                    $msg = _('Es fehlt eine Zielkoordinate oder ein Zielhöhlenname!');
                } else {
                    if (empty($targetXCoord) || empty($targetYCoord) and !empty($targetCaveName) and $validCaveName === FALSE) {
                        $msg = sprintf(_('Es gibt keine Höhle mit dem Namen "%s"!'), $targetCaveName);
                    } else {
                        if ($overloaded) {
                            $msg = _('Deine Krieger können die Menge an Ressourcen nicht tragen!!');
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord, $db)) {
                                $msg = _('Die Zielhöhle steht unter Anfängerschutz.');
                            } else {
                                if (beginner_isCaveProtectedByID($caveID, $db)) {
                                    $msg = _('Ihre Höhle steht unter Anfängerschutz. Sie können den Schutz sofort unter dem Punkt <a href="?modus=cave_detail">Bericht über diese Höhle</a> beenden');
                                } else {
                                    if ($params->POST->movementID == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord, $db)) {
                                        $msg = _('Sie können diese Höhle nicht übernehmen. Sie ist gegen Übernahmen geschützt.');
                                    } else {
                                        if ($denymovement_nonenemy) {
                                            $msg = _('Sie können im Krieg keine Einheiten zu unbeteiligten Parteien verschieben!');
                                        } else {
                                            if ($denymovement_targetwar) {
                                                $msg = _('Sie können keine Einheiten zu kriegführenden Stämmen verschieben, wenn Sie unbeteiligt sind.');
                                            } else {
                                                // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor);
                                                $distance = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord));
                                                $tmpdist = 0;
                                                $i = 0;
                                                if ($distance > 15) {
                                                    $distance = $distance - 15;
                                                    $tmpdist = 15;
                                                    if (floor($distance / 5) < 11) {
                                                        $tmpdist += $distance % 5 * (1 - 0.1 * floor($distance / 5));
                                                    }
                                                    for ($i = 1; $i <= floor($distance / 5) && $i < 11; $i++) {
                                                        $tmpdist += 5 * (1 - 0.1 * ($i - 1));
                                                    }
                                                } else {
                                                    $tmpdist = $distance;
                                                }
                                                // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                $reqFood = ceil($tmpdist * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                if ($details[$resourceTypeList[$FUELRESOURCEID]->dbFieldName] < $reqFood) {
                                                    $msg = _('Nicht genug Nahrung zum Ernähren der Krieger auf ihrem langen Marsch vorhanden!');
                                                } else {
                                                    $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                    switch ($msgID) {
                                                        case 0:
                                                            $msg = sprintf(_('Die Krieger wurden losgeschickt und haben %d Nahrung mitgenommen!'), $reqFood);
                                                            break;
                                                        case 1:
                                                            $msg = _('In diesen Koordinaten liegt keine Höhle!');
                                                            break;
                                                        case 2:
                                                            $msg = _('Für diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfügbar!');
                                                            break;
                                                        case 3:
                                                            $msg = _('Schwerer Fehler: Bitte Admin kontaktieren!');
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (!empty($params->POST->eventID)) {
            $msgID = reverseMovementEvent($caveID, $params->POST->eventID);
            switch ($msgID) {
                case 0:
                    $msg = _('Die Einheiten kehren zurück!');
                    break;
                case 1:
                    $msg = _('Fehler bei der Rückkehr!');
                    break;
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $params->SESSION->player->playerID);
    $meineHoehlen[$caveID] = $details = $temp->nextRow(MYSQL_ASSOC);
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'unitaction.ihtml');
    // messages
    if (isset($msg)) {
        tmpl_set($template, '/MESSAGE/msg', $msg);
    }
    // javascript support
    tmpl_set($template, 'currentX', $details['xCoord']);
    tmpl_set($template, 'currentY', $details['yCoord']);
    tmpl_set($template, 'dim_x', $dim_x);
    tmpl_set($template, 'dim_y', $dim_y);
    tmpl_set($template, 'speed', $minutesPerCave);
    tmpl_set($template, 'fuel_id', $FUELRESOURCEID);
    tmpl_set($template, 'fuel_name', $resourceTypeList[$FUELRESOURCEID]->name);
    tmpl_set($template, 'movementcostconstant', $foodPerCave);
    tmpl_set($template, "resourceTypes", $MAX_RESOURCE);
    tmpl_set($template, "rules_path", RULES_PATH);
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    tmpl_set($template, 'SELECTACTION', $selectable_movements);
    // resources
    $resources = array();
    for ($res = 0; $res < sizeof($resourceTypeList); $res++) {
        if (!$resourceTypeList[$res]->nodocumentation) {
            $resources[] = array('resourceID' => $resourceTypeList[$res]->resourceID, 'name' => $resourceTypeList[$res]->name, 'currentAmount' => "0" + $details[$resourceTypeList[$res]->dbFieldName], 'dbFieldName' => $resourceTypeList[$res]->dbFieldName);
        }
    }
    tmpl_set($template, 'RESOURCE', $resources);
    tmpl_set($template, 'TOTAL', $resources);
    tmpl_set($template, 'RESOURCE_LUGGAGE', $resources);
    // units table
    $unitprops = array();
    $units = array();
    for ($i = 0; $i < sizeof($unitTypeList); $i++) {
        // if no units of this type, next type
        if (!$details[$unitTypeList[$i]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        for ($j = 0; $j < count($resourceTypeList); $j++) {
            if (!$resourceTypeList[$j]->nodocumentation) {
                $encumbrance[$j] = array('resourceID' => $j, 'load' => "0" + $unitTypeList[$i]->encumbranceList[$j]);
                $temp[] = "0" + $unitTypeList[$i]->encumbranceList[$j];
            }
        }
        $unitprops[] = array('unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'resourceLoad' => implode(",", $temp), 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName]);
        $units[] = array('name' => $unitTypeList[$i]->name, 'modus' => UNIT_PROPERTIES, 'unitID' => $unitTypeList[$i]->unitID, 'foodCost' => $unitTypeList[$i]->foodCost, 'speedFactor' => $unitTypeList[$i]->wayCost, 'maxWarriorAnzahl' => $details[$unitTypeList[$i]->dbFieldName], 'warriorID' => $i, 'ENCUMBRANCE' => $encumbrance);
    }
    tmpl_set($template, 'UNITPROPS', $unitprops);
    tmpl_set($template, 'SELECTWARRIOR', $units);
    // weitergereichte Koordinaten
    if (empty($params->POST->movementID)) {
        tmpl_set($template, 'targetXCoord', $params->POST->targetXCoord);
        tmpl_set($template, 'targetYCoord', $params->POST->targetYCoord);
        tmpl_set($template, 'targetCaveName', $params->POST->targetCaveName);
    }
    // weitere Paramter
    $hidden = array(array('name' => 'modus', 'value' => UNIT_MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time()));
    tmpl_set($template, 'PARAMS', $hidden);
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    //$movements = digest_getMovements($meineHoehlen, array(), true);
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            tmpl_iterate($template, 'MOVEMENT/MOVE');
            tmpl_set($template, 'MOVEMENT/MOVE', $move);
        } else {
            tmpl_iterate($template, 'OPPMOVEMENT/MOVE');
            tmpl_set($template, 'OPPMOVEMENT/MOVE', $move);
        }
    }
    // artefakte
    if (sizeof($myartefacts) != 0) {
        tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
    }
    // Module "CaveBookmarks" Integration
    // FIXME should know whether the module is installed
    if (TRUE) {
        // show CAVEBOOKMARKS context
        tmpl_set($template, '/CAVEBOOKMARKS/iterate', '');
        // get model
        $cb_model = new CaveBookmarks_Model();
        // get bookmarks
        $bookmarks = $cb_model->getCaveBookmarks(true);
        // set bookmarks
        if (sizeof($bookmarks)) {
            tmpl_set($template, '/CAVEBOOKMARKS/CAVEBOOKMARK', $bookmarks);
            tmpl_set($template, '/CAVEBOOKMARKS/CAVEBOOKMARKJS', $bookmarks);
        }
    }
    return tmpl_parse($template);
}
Пример #8
0
function tribe_processKickMember($playerID, $tag, $db)
{
    // leader must not be kicked
    if (tribe_isLeaderOrJuniorLeader($playerID, $tag, $db)) {
        return -2;
    }
    // do not kick in wartime
    if (!relation_leaveTribeAllowed($tag, $db)) {
        return -15;
    }
    // blocked
    if (!tribe_changeTribeAllowedForPlayerID($playerID, $db)) {
        return -16;
    }
    // get player
    $player = getPlayerByID($playerID);
    // no such player
    if (!$player) {
        return -1;
    }
    // remove player
    if (!tribe_leaveTribe($playerID, $tag, $db)) {
        return -1;
    }
    Player::addHistoryEntry($db, $playerID, sprintf(_('wird aus dem Stamm \'%s\' geworfen'), $tag));
    // block player
    tribe_setBlockingPeriodPlayerID($playerID, $db);
    tribe_sendTribeMessage($tag, TRIBE_MESSAGE_MEMBER, "Spieler rausgeschmissen", "Der Spieler {$player['name']} wurde soeben vom Anführer aus dem Stamm " . "ausgeschlossen.");
    messages_sendSystemMessage($playerID, 8, "Clanausschluss.", "Sie wurden aus dem Clan {$tag} ausgeschlossen. Bitte loggen Sie sich aus " . "und melden Sie sich wieder an, damit das Stammesmenü bei Ihnen wieder " . "richtig funktioniert.", $db);
    return 1;
}
Пример #9
0
function tribe_getContent($playerID, $tribe)
{
    global $config, $params, $db, $no_resource_flag, $governmentList;
    $no_resource_flag = 1;
    // messages
    $messageText = array(-12 => _('Der Stamm befindet sich gerade im Krieg und darf daher im Moment keine neuen Mitglieder aufnehmen.'), -11 => _('Die Stammeszugehörigkeit hat sich erst vor kurzem geändert. Warten Sie, bis die Stammeszugehörigkeit geändert werden darf.'), -10 => _('Ihr Stamm befindet sich im Krieg. Sie dürfen derzeit nicht austreten.'), -9 => _('Die Nachricht konnte nicht eingetragen werden.'), -8 => _('Sie sind der Stammesanführer und konnten nicht entfernt werden.'), -7 => _('Das Passwort konnte nicht gesetzt werden!'), -6 => _('Der Stamm konnte nicht angelegt werden.'), -5 => _('Es gibt schon einen Stamm mit diesem Kürzel;'), -4 => _('Sie konnten nicht austreten. Vermutlich gehören Sie gar keinem Stamm an.'), -3 => _('Sie konnten dem Stamm nicht beitreten. Vermutlich sind Sie schon bei einem anderen Stamm Mitglied.'), -2 => _('Passwort und Stammeskürzel stimmen nicht überein.'), -1 => _('Bei der Aktion ist ein unerwarteter Datenbankfehler aufgetreten!'), 01 => _('Sie sind dem Stamm beigetreten.'), 02 => _('Sie haben den Stamm verlassen.'), 03 => _('Der Stamm wurde erfolgreich angelegt.'), 04 => _('Sie waren das letzte Mitglied, der Stamm wurde aufgelöst'), 05 => _('Die Nachricht wurde eingetragen'), 10 => _('Dieser Stammesname ist nicht erlaubt!'));
    // process form data
    if ($params->POST->tribeAction) {
        switch ($params->POST->tribeAction) {
            case TRIBE_ACTION_JOIN:
                if (tribe_validatePassword($params->POST->password) && tribe_validateTag($params->POST->tag)) {
                    $messageID = tribe_processJoin($playerID, $params->POST->tag, $params->POST->password, $db);
                }
                break;
            case TRIBE_ACTION_CREATE:
                if (tribe_validatePassword($params->POST->password) && tribe_validateTag($params->POST->tag)) {
                    $messageID = tribe_processCreate($playerID, $params->POST->tag, $params->POST->password, $db, $params->POST->restore_rank == 'yes');
                }
                break;
            case TRIBE_ACTION_LEAVE:
                $messageID = tribe_processLeave($playerID, $tribe, $db);
                break;
            case TRIBE_ACTION_MESSAGE:
                if ($params->POST->messageText && $params->POST->ingame) {
                    $messageID = tribe_processSendTribeIngameMessage($playerID, $tribe, $params->POST->messageText, $db);
                } else {
                    if ($params->POST->messageText && !$params->POST->ingame) {
                        $messageID = tribe_processSendTribeMessage($playerID, $tribe, $params->POST->messageText, $db);
                    }
                }
                break;
        }
        if ($params->POST->tribeAction == TRIBE_ACTION_JOIN || $params->POST->tribeAction == TRIBE_ACTION_LEAVE || $params->POST->tribeAction == TRIBE_ACTION_CREATE) {
            // the tribe might have changed
            page_refreshUserData();
            $tribe = $params->SESSION->player->tribe;
        }
    }
    // ----------------------------------------------------------------------------
    // ------- SECTION FOR PLAYERS WITHOUT MEMBERSHIP -----------------------------
    if (!$tribe) {
        // not a tribe member
        $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'tribe.ihtml');
        if ($messageID) {
            tmpl_set($template, "MESSAGE/message", $messageText[$messageID]);
        }
        // ------------------------------------------------------------------------
        // ----------- Join existing tribe ----------------------------------------
        tmpl_iterate($template, "FORM");
        $form = array("heading" => _('Einem Stamm beitreten'), "modus_name" => "modus", "modus_value" => TRIBE, "action_name" => "tribeAction", "action_value" => TRIBE_ACTION_JOIN, "TAG/fieldname" => "tag", "TAG/tag_regexp" => _("Buchstaben, Zahlen, Bindestriche; keine Zahlen oder Bindestrich am Anfang"), "TAG/value" => $tribe ? $tribe : $params->POST->tag, "TAG/size" => 8, "TAG/maxlength" => 8, "TAG/form_prefix" => "join_", "PASSWORD/fieldname" => "password", "PASSWORD/pw_regexp" => _("mind. 6 Buchstaben oder Zahlen"), "PASSWORD/value" => $params->POST->password, "PASSWORD/size" => 8, "PASSWORD/maxlength" => 15, "PASSWORD/form_prefix" => "join_", "BUTTON/caption" => _('Beitreten'));
        tmpl_set($template, "FORM", $form);
        // ------------------------------------------------------------------------
        // ----------- Create new tribe -------------------------------------------
        tmpl_iterate($template, "FORM");
        // only change the different values for creation
        $form["heading"] = _('Einen neuen Stamm gründen');
        $form["TAG/form_prefix"] = "create_";
        $form["PASSWORD/form_prefix"] = "create_";
        $form["action_value"] = TRIBE_ACTION_CREATE;
        $form["BUTTON/caption"] = _('Neu gründen');
        $form["RESTORERANKING/fieldName"] = "restore_rank";
        tmpl_set($template, "FORM", $form);
    } else {
        if (!($tribeData = tribe_getTribeByTag($tribe, $db))) {
            return _('Fehler');
        }
        $template = tmpl_open($params->SESSION->player->getTemplatePath() . 'tribeMember.ihtml');
        if ($messageID) {
            tmpl_set($template, "MESSAGE/message", $messageText[$messageID]);
        }
        if (tribe_isLeaderOrJuniorLeader($playerID, $tribe, $db)) {
            $adminData = array("modus_name" => "modus", "modus_value" => TRIBE_ADMIN, "TRIBEMESSAGEFORM" => array("message_name" => "messageText", "modus_name" => "modus", "modus_value" => TRIBE, "action_name" => "tribeAction", "action_value" => TRIBE_ACTION_MESSAGE));
            tmpl_set($template, "ADMIN", $adminData);
        }
        $data = array("tag" => $tribe, "name" => $tribeData['name'], "link_tribe" => "modus=" . TRIBE_DETAIL . "&tribe=" . urlencode(unhtmlentities($tribeData['tag'])), "MEMBERS/tag_name" => "tag", "MEMBERS/tag_value" => $tribe, "MEMBERS/modus_name" => "modus", "MEMBERS/modus_value" => TRIBE_PLAYER_LIST, "LEAVE/modus_name" => "modus", "LEAVE/modus_value" => TRIBE, "LEAVE/action_name" => "tribeAction", "LEAVE/action_value" => TRIBE_ACTION_LEAVE);
        if ($tribeData['leaderID']) {
            $JuniorAdmin = $targetPlayer = new Player(getPlayerByID($tribeData['juniorLeaderID']));
            $leaderData = array("LEADER/name" => $tribeData['leaderName'], "LEADER/leaderID_name" => "detailID", "LEADER/leaderID_value" => $tribeData['leaderID'], "LEADER/juniorLeaderName" => $JuniorAdmin->name, "LEADER/juniorLeaderID_name" => "detailID", "LEADER/juniorLeaderID_value" => $JuniorAdmin->playerID, "LEADER/modus_name" => "modus", "LEADER/modus_value" => PLAYER_DETAIL);
        } else {
            $leaderData = array("NOLEADER/message" => _('Ihr Stamm hat zur Zeit keinen Anführer.'));
        }
        $leaderDeterminationData = array("LEADERDETERMINATION/modus_name" => "modus", "LEADERDETERMINATION/modus_value" => TRIBE_LEADER_DETERMINATION);
        $governmentData = array("GOVERNMENT/name" => $governmentList[$governmentData['governmentID']]);
        if ($warTargets = relation_getWarTargetsAndFame($tribe, $db)) {
            tmpl_set($template, "NORMAL/WAR", array());
            foreach ($warTargets as $target) {
                $target_facts = array("target" => $target["target"], "fame_own" => $target["fame_own"], "fame_target" => $target["fame_target"], "percent_actual" => $target["percent_actual"]);
                if ($target["isForcedSurrenderTheoreticallyPossible"]) {
                    $target_facts["FORCEDSURRENDER/percent_estimated"] = $target["percent_estimated"];
                    if ($target["isForcedSurrenderPracticallyPossible"]) {
                        $target_facts["FORCEDSURRENDER/class"] = "enough";
                    } else {
                        if ($target["isForcedSurrenderPracticallyPossibleForTarget"]) {
                            $target_facts["FORCEDSURRENDER/class"] = "less";
                        } else {
                            $target_facts["FORCEDSURRENDER/class"] = "";
                        }
                    }
                }
                tmpl_iterate($template, "NORMAL/WAR/TARGET");
                tmpl_set($template, "NORMAL/WAR/TARGET", $target_facts);
            }
        }
        if ($messages = tribe_getTribeMessages($tribe, $db)) {
            foreach ($messages as $messageID => $messageData) {
                $message = array("time" => $messageData['date'], "subject" => $messageData['messageSubject'], "message" => $messageData['messageText']);
                tmpl_iterate($template, "NORMAL/TRIBEMESSAGE");
                tmpl_set($template, "NORMAL/TRIBEMESSAGE", $message);
            }
        }
        $data = array_merge($data, $leaderData, $leaderDeterminationData, $governmentData);
        tmpl_set($template, "NORMAL", $data);
    }
    return tmpl_parse($template);
}
Пример #10
0
function unit_Movement($caveID, &$ownCave)
{
    global $db, $template;
    $safeForm = true;
    // get movements
    $ua_movements = Movement::getMovements();
    $details = $ownCave[$caveID];
    /***************************************************************************/
    /**                                                                       **/
    /** CHECK ARTEFACTS                                                       **/
    /**                                                                       **/
    /***************************************************************************/
    // artefact moving: get ID if any
    //
    // $params->POST->myartefacts will be
    //   NULL, if it is not set at all
    //   -1 when choosing no artefact to move
    //   0 if there was a real choice
    // default: Move No Artefact (this var holds the artefactID to move)
    $moveArtefact = 0;
    // this array shall contain the artefacts if any
    $myartefacts = array();
    // does the cave contain an artefact at least?
    if ($details['artefacts'] > 0) {
        // get artefacts
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
        $moveArtefactID = Request::getVar('myartefacts', 0);
        // was an artefact chosen?
        if ($moveArtefactID > 0) {
            // now check, whether this artefactID belongs to this cave
            foreach ($myartefacts as $key => $value) {
                // if found, set it
                if ($moveArtefactID == $value['artefactID']) {
                    $moveArtefact = $moveArtefactID;
                    break;
                }
            }
        }
    }
    // now $moveArtefact should contain 0 for 'move no artefact'
    // or the artefactID of the artefact to be moved
    /***************************************************************************/
    /***************************************************************************/
    /***************************************************************************/
    /**
     * HERO MOVEMENT
     */
    $moveHero = 0;
    if ($details['hero'] != 0) {
        $hero = getHeroByPlayer($_SESSION['player']->playerID);
        if ($hero['isAlive'] != 1) {
            $details['hero'] = 0;
        }
    }
    if ($details['hero'] != 0 && Request::getVar('moveHero', false) == true) {
        $moveHero = $details['hero'];
    }
    /**
     * END HERO MOVEMENTS
     */
    // put user, its session and nogfx flag into session
    $_SESSION['player'] = Player::getPlayer($_SESSION['player']->playerID);
    // get Map Size
    $size = getMapSize();
    $dim_x = ($size['maxX'] - $size['minX'] + 1) / 2;
    $dim_y = ($size['maxY'] - $size['minY'] + 1) / 2;
    $foodPerCave = eval('return ' . formula_parseToPHP(GameConstants::MOVEMENT_COST . ';', '$details'));
    $minutesPerCave = eval('return ' . formula_parseToPHP(GameConstants::MOVEMENT_SPEED . ';', '$details'));
    $minutesPerCave *= MOVEMENT_TIME_BASE_FACTOR / 60;
    if (Request::getVar('moveit', false) && sizeof(Request::getVar('unit', array('' => '')))) {
        $targetXCoord = Request::getVar('targetXCoord', 0);
        $targetYCoord = Request::getVar('targetYCoord', 0);
        $targetCaveName = Request::getVar('targetCaveName', '');
        $targetCaveID = Request::getVar('targetCaveID', 0);
        $movementID = Request::getVar('movementID', 0);
        // check for scripters
        check_timestamp(Request::getVar('tstamp', 0));
        $validCaveName = false;
        // targetCaveID >>> coords
        if ($targetCaveID > 0) {
            $result = getCaveByID(intval($targetCaveID));
            if (sizeof($result) != 0) {
                $targetXCoord = $result['xCoord'];
                $targetYCoord = $result['yCoord'];
                $validCaveName = true;
            }
            // name >>> coords
        } else {
            if ($targetCaveName != "") {
                $result = getCaveByName($targetCaveName);
                if (sizeof($result) != 0) {
                    $targetXCoord = $result['xCoord'];
                    $targetYCoord = $result['yCoord'];
                    $validCaveName = true;
                }
            }
        }
        // get target player
        $result = getCaveByCoords(intval($targetXCoord), intval($targetYCoord));
        if (sizeof($result) != 0) {
            $targetPlayer = new Player(getPlayerByID($result['playerID']));
        }
        // Array von Nullwerten befreien
        $unit = array_filter(Request::getVar('unit', array('' => '')), "filterZeros");
        $unit = array_map("checkFormValues", $unit);
        $resource = array_map("checkFormValues", Request::getVar('rohstoff', array('' => '')));
        // Test, ob Einheitentragekapazität ausgelastet
        $overloaded = 0;
        foreach ($resource as $resKey => $aRes) {
            $capacity = 0;
            foreach ($unit as $unitKey => $aUnit) {
                if (isset($GLOBALS['unitTypeList'][$unitKey]->encumbranceList[$resKey])) {
                    $capacity += $aUnit * $GLOBALS['unitTypeList'][$unitKey]->encumbranceList[$resKey];
                }
            }
            if ($capacity < $aRes) {
                $overloaded = 1;
                break;
            }
        }
        $denymovement_nonenemy = false;
        $denymovement_targetwar = false;
        if ($movementID == 2) {
            // move units/resources
            if (strtoupper($targetPlayer->tribe) != strtoupper($_SESSION['player']->tribe)) {
                //may tade in own tribe
                $ownTribe = $_SESSION['player']->tribe;
                $targetTribe = $targetPlayer->tribe;
                $targetIsNonPlayer = $targetPlayer->playerID == 0;
                $ownTribeAtWar = tribe_isAtWar($ownTribe, TRUE);
                $targetTribeAtWar = tribe_isAtWar($targetTribe, TRUE);
                $TribesMayTrade = relation_areAllies($ownTribe, $targetTribe) || relation_areEnemys($ownTribe, $targetTribe) || $targetIsNonPlayer;
                $denymovement_nonenemy = $ownTribeAtWar && !$TribesMayTrade;
                $denymovement_targetwar = $targetTribeAtWar && !$TribesMayTrade;
            }
        }
        // check if army is small enough for hero
        $denymovement_hero = false;
        if ($moveHero && (Request::getVar('movementID', 0) == 3 || Request::getVar('movementID', 0) == 6)) {
            //calculate size of army
            $armySize = 0;
            foreach ($unit as $unitID => $value) {
                $armySize += $GLOBALS['unitTypeList'][$unitID]->hitPoints * $value;
            }
            if ($armySize > $hero['exp']) {
                $denymovement_hero = true;
            }
        }
        if (Request::getVar('movementID', 0) == 0) {
            $msg = array('type' => 'error', 'message' => _('Bitte Bewegungsart auswählen!'));
            $moveHero = 0;
        } else {
            if (!sizeof($unit)) {
                $msg = array('type' => 'error', 'message' => _('Es sind keine Einheiten ausgewählt!'));
                $moveHero = 0;
            } else {
                if (($targetXCoord == 0 || $targetYCoord == 0) && $targetCaveName == "") {
                    $msg = array('type' => 'error', 'message' => _('Es fehlt eine Zielkoordinate oder ein Zielhöhlenname!'));
                    $moveHero = 0;
                } else {
                    if (($targetXCoord == 0 || $targetYCoord == 0) && !($targetCaveName == "") && $validCaveName === FALSE) {
                        $msg = array('type' => 'error', 'message' => sprintf(_('Es gibt keine Höhle mit dem Namen "%s"!'), $targetCaveName));
                        $moveHero = 0;
                    } else {
                        if ($overloaded) {
                            $msg = array('type' => 'error', 'message' => _('Deine Krieger können die Menge an Ressourcen nicht tragen!!'));
                            $moveHero = 0;
                        } else {
                            if (beginner_isCaveProtectedByCoord($targetXCoord, $targetYCoord)) {
                                $msg = array('type' => 'error', 'message' => _('Die Zielhöhle steht unter Anfängerschutz.'));
                                $moveHero = 0;
                            } else {
                                if (beginner_isCaveProtectedByID($caveID)) {
                                    $msg = array('type' => 'error', 'message' => _('Ihre Höhle steht unter Anfängerschutz. Sie können den Schutz sofort unter dem Punkt <a href="?modus=cave_detail">Bericht über diese Höhle</a> beenden'));
                                    $moveHero = 0;
                                } else {
                                    if (Request::getVar('movementID', 0) == 6 && cave_isCaveSecureByCoord($targetXCoord, $targetYCoord)) {
                                        $msg = array('type' => 'error', 'message' => _('Sie können diese Höhle nicht übernehmen. Sie ist gegen übernahmen geschützt.'));
                                        $moveHero = 0;
                                    } else {
                                        if ($denymovement_nonenemy) {
                                            $msg = array('type' => 'error', 'message' => _('Sie können im Krieg keine Einheiten zu unbeteiligten Parteien verschieben!'));
                                        } else {
                                            if ($denymovement_targetwar) {
                                                $msg = array('type' => 'error', 'message' => _('Sie können keine Einheiten zu kriegführenden Stämmen verschieben, wenn Sie unbeteiligt sind.'));
                                                $moveHero = 0;
                                            } else {
                                                if ($denymovement_hero) {
                                                    $msg = array('type' => 'error', 'message' => _('Die Armee ist zu groß um vom Helden unterstützt zu werden!'));
                                                    $moveHero = 0;
                                                } else {
                                                    // Entfernung x Dauer pro Höhle x größter Geschwindigkeitsfaktor x Bewegungsfaktor
                                                    $duration = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord) * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor);
                                                    $distance = ceil(getDistanceByCoords($details['xCoord'], $details['yCoord'], $targetXCoord, $targetYCoord));
                                                    $tmpdist = 0;
                                                    $i = 0;
                                                    if ($distance > 15) {
                                                        $distance = $distance - 15;
                                                        $tmpdist = 15;
                                                        if (floor($distance / 5) < 11) {
                                                            $tmpdist += $distance % 5 * (1 - 0.1 * floor($distance / 5));
                                                        }
                                                        for ($i = 1; $i <= floor($distance / 5) && $i < 11; $i++) {
                                                            $tmpdist += 5 * (1 - 0.1 * ($i - 1));
                                                        }
                                                    } else {
                                                        $tmpdist = $distance;
                                                    }
                                                    // Dauer x Rationen x Größe einer Ration x Bewegungsfaktor
                                                    $reqFood = ceil($tmpdist * $minutesPerCave * getMaxSpeedFactor($unit) * $ua_movements[$movementID]->speedfactor * calcRequiredFood($unit) * $foodPerCave * $ua_movements[$movementID]->foodfactor);
                                                    if ($details[$GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->dbFieldName] < $reqFood) {
                                                        $msg = array('type' => 'error', 'message' => _('Nicht genug Nahrung zum Ernähren der Krieger auf ihrem langen Marsch vorhanden!'));
                                                    } else {
                                                        $msgID = setMovementEvent($caveID, $details, $targetXCoord, $targetYCoord, $unit, $resource, $movementID, $reqFood, $duration, $moveArtefact, $moveHero, $minutesPerCave * $ua_movements[$movementID]->speedfactor);
                                                        switch ($msgID) {
                                                            case 0:
                                                                $msg = array('type' => 'success', 'message' => sprintf(_('Die Krieger wurden losgeschickt und haben %d Nahrung mitgenommen!'), $reqFood));
                                                                $safeForm = false;
                                                                break;
                                                            case 1:
                                                                $msg = array('type' => 'error', 'message' => _('In diesen Koordinaten liegt keine Höhle!'));
                                                                $moveHero = 0;
                                                                break;
                                                            case 2:
                                                                $msg = array('type' => 'error', 'message' => _('Für diese Bewegung sind nicht genügend Einheiten/Rohstoffe verfügbar!'));
                                                                $moveHero = 0;
                                                                break;
                                                            case 3:
                                                                $msg = array('type' => 'error', 'message' => _('Schwerer Fehler: Bitte Admin kontaktieren!'));
                                                                $moveHero = 0;
                                                                break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } else {
        if (Request::isPost('action') && Request::getVar('action', '') == 'cancel' && ($eventID = Request::getVar('eventID', 0))) {
            $msgID = reverseMovementEvent($caveID, $eventID);
            switch ($msgID) {
                case 0:
                    $msg = array('type' => 'success', 'message' => _('Die Einheiten kehren zurück!'));
                    break;
                case 1:
                    $msg = array('type' => 'error', 'message' => _('Fehler bei der Rückkehr!'));
                    break;
            }
        } else {
            if (Request::getVar('moveit', false) && !sizeof(Request::getVar('unit', array('' => '')))) {
                $msg = array('type' => 'error', 'message' => _('Einheiten mitnehmen?'));
            }
        }
    }
    // refresh this cave
    $temp = getCaveSecure($caveID, $_SESSION['player']->playerID);
    $ownCave[$caveID] = $details = $temp;
    // make sure that bagged artefacts are not shown again
    if ($moveArtefact != 0) {
        $myartefacts = artefact_getArtefactsReadyForMovement($caveID);
    }
    // make sure that moved hero is not shown again
    if ($moveHero != 0) {
        $details['hero'] = 0;
    }
    // //////////////////////////////////////////////////////////////
    // Create the page
    // //////////////////////////////////////////////////////////////
    // open template
    $template->setFile('unitMovement.tmpl');
    $template->addVars(array('currentX' => $details['xCoord'], 'currentY' => $details['yCoord'], 'dim_x' => $dim_x, 'dim_y' => $dim_y, 'speed' => $minutesPerCave, 'fuel_id' => GameConstants::FUEL_RESOURCE_ID, 'fuel_name' => $GLOBALS['resourceTypeList'][GameConstants::FUEL_RESOURCE_ID]->name, 'movement_cost_constant' => $foodPerCave, 'resource_types' => GameConstants::MAX_RESOURCE, 'status_msg' => isset($msg) ? $msg : ''));
    // movements
    $selectable_movements = array();
    foreach ($ua_movements as $value) {
        if ($value->playerMayChoose) {
            $selectable_movements[] = get_object_vars($value);
        }
    }
    $template->addVar('selectable_movements', $selectable_movements);
    // resources
    $resources = array();
    foreach ($GLOBALS['resourceTypeList'] as $resourceID => $dummy) {
        if (!$GLOBALS['resourceTypeList'][$resourceID]->nodocumentation) {
            $resources[] = array('resource_id' => $GLOBALS['resourceTypeList'][$resourceID]->resourceID, 'name' => $GLOBALS['resourceTypeList'][$resourceID]->name, 'current_amount' => "0" + $details[$GLOBALS['resourceTypeList'][$resourceID]->dbFieldName], 'dbFieldName' => $GLOBALS['resourceTypeList'][$resourceID]->dbFieldName, 'value' => $safeForm && isset($resource[$resourceID]) && $resource[$resourceID] > 0 ? $resource[$resourceID] : '');
        }
    }
    $template->addVar('resource', $resources);
    // units table
    $unitprops = array();
    $units = array();
    foreach ($GLOBALS['unitTypeList'] as $unitID => $dummy) {
        // if no units of this type, next type
        if (!$details[$GLOBALS['unitTypeList'][$unitID]->dbFieldName]) {
            continue;
        }
        $temp = array();
        $encumbrance = array();
        foreach ($GLOBALS['resourceTypeList'] as $resourceID => $dummy) {
            if (!$GLOBALS['resourceTypeList'][$resourceID]->nodocumentation) {
                $encumbrance[$resourceID] = array('resourceID' => $resourceID, 'load' => "0" + (isset($GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID]) ? $GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID] : 0));
                $temp[] = "0" + (isset($GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID]) ? $GLOBALS['unitTypeList'][$unitID]->encumbranceList[$resourceID] : 0);
            }
        }
        $units[] = array('name' => $GLOBALS['unitTypeList'][$unitID]->name, 'unit_id' => $unitID, 'food_cost' => $GLOBALS['unitTypeList'][$unitID]->foodCost, 'resource_load' => implode(",", $temp), 'speed_factor' => $GLOBALS['unitTypeList'][$unitID]->wayCost, 'max_unit_count' => $details[$GLOBALS['unitTypeList'][$unitID]->dbFieldName], 'encumbrance' => $encumbrance, 'hitPoints' => $GLOBALS['unitTypeList'][$unitID]->hitPoints, 'value' => $safeForm && isset($unit[$unitID]) ? $unit[$unitID] : '');
    }
    $template->addVar('unit_list', $units);
    // weitergereichte Koordinaten
    if (!Request::getVar('movementID', 0) || $safeForm) {
        if (Request::getVar('targetCaveID', 0) > 0) {
            $caveData = getCaveByID(Request::getVar('targetCaveID', 0));
            $template->addVars(array('target_x_coord' => $caveData['xCoord'], 'target_y_coord' => $caveData['yCoord'], 'target_cave_name' => $caveData['name']));
        } else {
            $template->addVars(array('target_x_coord' => Request::getVar('targetXCoord', ''), 'target_y_coord' => Request::getVar('targetYCoord', ''), 'target_cave_name' => Request::getVar('targetCaveName', '')));
        }
    }
    // weitere Paramter
    $template->addVar('params', array(array('name' => 'modus', 'value' => UNIT_MOVEMENT), array('name' => 'moveit', 'value' => 'true'), array('name' => 'trigger', 'value' => 'self'), array('name' => 'tstamp', 'value' => "" . time())));
    $movements = digest_getMovements(array($caveID => $details), array(), true);
    $ownMovement = $oppMovement = array();
    foreach ($movements as $move) {
        if ($move['isOwnMovement']) {
            $ownMovement[] = $move;
        } else {
            $oppMovement[] = $move;
        }
    }
    $template->addVars(array('ownMovement' => $ownMovement, 'oppMovement' => $oppMovement));
    // artefakte
    if (sizeof($myartefacts) != 0) {
        //tmpl_set($template, '/ARTEFACTS/ARTEFACT', $myartefacts);
        $template->addVar('artefact', $myartefacts);
    }
    // hero
    if ($details['hero'] != 0) {
        $template->addVar('hero', $hero);
    }
    // Module "CaveBookmarks" Integration
    // FIXME should know whether the module is installed
    if (TRUE) {
        // get model
        $cb_model = new CaveBookmarks_Model();
        // get bookmarks
        $bookmarks = $cb_model->getCaveBookmarks(true);
        // set bookmarks
        if (sizeof($bookmarks)) {
            $template->addVar('bookmarks_cave', $bookmarks);
        }
    }
}
Пример #11
0
function takeover_transfer_cave_to($caveID, $playerID)
{
    global $db, $scienceTypeList;
    // check parameters
    $caveID = intval($caveID);
    $playerID = intval($playerID);
    // get player
    $winner = getPlayerByID($playerID);
    if (!sizeof($winner)) {
        echo "ERROR (takeover_transfer_cave_to): Could not transfer Cave {$caveID} to Player {$playerID}.\n";
        return FALSE;
    }
    // secureCaveCredits
    $hasCredits = $winner['secureCaveCredits'] > 0 ? 1 : 0;
    // transfer cave to player
    $query = "UPDATE Cave SET playerID = {$playerID}, takeoverable = 0, " . "secureCave = '{$hasCredits}' WHERE caveID = {$caveID}";
    if (!DEBUG) {
        if (!$db->query($query)) {
            echo "ERROR (takeover_transfer_cave_to): Could not update Cave {$caveID}.\n";
            return FALSE;
        }
    } else {
        echo "DEBUG:  {$query} \n";
    }
    // update secureCaveCredits
    $query = "UPDATE Player SET secureCaveCredits = GREATEST(0, secureCaveCredits - 1) " . "WHERE playerID = {$playerID}";
    if (!DEBUG) {
        if (!$db->query($query)) {
            echo "ERROR (takeover_transfer_cave_to): Could not update secureCaveCredits of Player {$playerID}.\n";
            return FALSE;
        }
    } else {
        echo "DEBUG:  {$query} \n";
    }
    // copy sciences
    if (sizeof($scienceTypeList)) {
        $set = array();
        foreach ($scienceTypeList as $science) {
            $temp = $science->dbFieldName;
            $set[] = "{$temp} = '{$winner[$temp]}'";
        }
        $set = implode(", ", $set);
        $query = "UPDATE Cave SET {$set} WHERE playerID = {$playerID}";
        if (!DEBUG) {
            if (!$db->query($query)) {
                echo "ERROR (takeover_transfer_cave_to): Could not update sciences of Player {$playerID}.\n";
                return FALSE;
            }
        } else {
            echo "DEBUG:  {$query} \n";
        }
    }
    // get the cave's data
    $cave = getCaveByID($caveID);
    takeover_send_transfer($playerID, $cave);
}
Пример #12
0
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 = array();
    $showArtePossible = false;
    if ($cave['playerID'] != 0) {
        $caveDetails = getCaves($cave['playerID']);
        $playerDetails = getPlayerByID($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'];
    $region = getRegionByID($cave['regionID']);
    if ($cave['artefacts'] != 0 && ($showArtePossible || $_SESSION['player']->tribe == GOD_ALLY)) {
        $cave['artefact'] = true;
    }
    $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['artefacts'] != 0 && ($playerDetails['tribe'] != GOD_ALLY || $_SESSION['player']->tribe == GOD_ALLY)) {
                $temp['artefact'] = true;
            }
            $caves[] = $temp;
        }
        $template->addVar('player_caves', $caves);
    } else {
        if (sizeof($ownCaves) < $_SESSION['player']->takeover_max_caves && $cave['takeoverable'] == 1) {
            $template->addVar('takeoverable', true);
        }
    }
}
Пример #13
0
function takeover_transfer_cave_to($caveID, $playerID)
{
    global $db;
    // check parameters
    $caveID = (int) $caveID;
    $playerID = (int) $playerID;
    // get player
    $winner = getPlayerByID($playerID);
    if (!sizeof($winner)) {
        echo "ERROR (takeover_transfer_cave_to): Could not transfer Cave {$caveID} to Player {$playerID}.\n";
        return FALSE;
    }
    // secureCaveCredits
    $hasCredits = $winner['secureCaveCredits'] > 0 ? 1 : 0;
    // transfer cave to player
    $sql = $db->prepare("UPDATE " . CAVE_TABLE . "\n                       SET playerID = :playerID,\n                         takeoverable = 0,\n                         secureCave = :secureCave\n                       WHERE caveID = :caveID");
    $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
    $sql->bindValue('secureCave', $hasCredits, PDO::PARAM_INT);
    $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
    if (!$sql->execute()) {
        return FALSE;
    }
    // update secureCaveCredits
    $sql = $db->prepare("UPDATE " . PLAYER_TABLE . "\n                       SET secureCaveCredits = GREATEST(0, secureCaveCredits - 1)\n                       WHERE playerID = :playerID");
    $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
    if (!$sql->execute()) {
        echo "ERROR (takeover_transfer_cave_to): Could not update secureCaveCredits of Player {$playerID}.\n";
        return FALSE;
    }
    // copy sciences
    if (sizeof($GLOBALS['scienceTypeList'])) {
        $set = array();
        foreach ($GLOBALS['scienceTypeList'] as $science) {
            $temp = $science->dbFieldName;
            $set[] = "{$temp} = '{$winner[$temp]}'";
        }
        $set = implode(", ", $set);
        $sql = $db->prepare("UPDATE " . CAVE_TABLE . "\n                         SET " . $set . "\n                         WHERE playerID = :playerID");
        $sql->bindValue('playerID', $playerID, PDO::PARAM_INT);
        if (!$sql->execute()) {
            echo "ERROR (takeover_transfer_cave_to): Could not update sciences of Player {$playerID}.\n";
            return FALSE;
        }
    }
    // get the cave's data
    $cave = getCaveByID($caveID);
    takeover_send_transfer($playerID, $cave);
}
Пример #14
0
function tribe_processKickMember($playerID, $tag)
{
    if (empty($playerID)) {
        return -38;
    }
    if (tribe_isLeader($playerID, $tag)) {
        return -39;
    }
    // do not kick in wartime
    if (!relation_leaveTribeAllowed($tag)) {
        return -40;
    }
    // blocked
    if (!tribe_changeTribeAllowedForPlayerID($playerID)) {
        return -3;
    }
    // get player
    $player = getPlayerByID($playerID);
    // no such player
    if (!$player) {
        return -41;
    }
    // remove player
    if (!tribe_leaveTribe($playerID, $tag)) {
        return -41;
    }
    Player::addHistoryEntry($playerID, sprintf(_("wird aus dem Stamm '%s' geworfen"), $tag));
    // block player
    tribe_setBlockingPeriodPlayerID($playerID);
    tribe_sendTribeMessage($tag, TRIBE_MESSAGE_MEMBER, "Spieler rausgeschmissen", "Der Spieler {$player['name']} wurde soeben vom Anführer aus dem Stamm ausgeschlossen.");
    $messagesClass = new Messages();
    $messagesClass->sendSystemMessage($playerID, 8, "Stammausschluss.", "Sie wurden aus dem Stamm {$tag} ausgeschlossen. Bitte loggen Sie sich aus und melden Sie sich wieder an, damit das Stammesmenü bei Ihnen wieder richtig funktioniert.");
    return 13;
}
Пример #15
0
function tribe_getContent($caveID, $tag)
{
    global $db, $template;
    if (!$tag) {
        $template->throwError('Es wurde kein Stamm ausgewählt.');
        return;
    }
    // open template
    $template->setFile('tribeDetail.tmpl');
    $template->setShowRresource(false);
    $sql = $db->prepare("SELECT t.*, p.playerID, p.name AS leader_name\n                       FROM " . TRIBE_TABLE . " t\n                         LEFT JOIN " . PLAYER_TABLE . " p\n                           ON p.playerID = t.leaderID\n                       WHERE t.tag LIKE :tag");
    $sql->bindValue('tag', $tag, PDO::PARAM_STR);
    if (!$sql->execute()) {
        $template->throwError('Fehler in der Datenbank.');
        return;
    }
    if (!($row = $sql->fetch(PDO::FETCH_ASSOC))) {
        $template->throwError('Es konnte kein Stamm mit dem Namen gefunden werden.');
        return;
    }
    $sql->closeCursor();
    $JuniorAdmin = $targetPlayer = new Player(getPlayerByID($row['juniorLeaderID']));
    if (!empty($row['awards'])) {
        $tmp = explode('|', $row['awards']);
        $awards = array();
        foreach ($tmp as $tag1) {
            $awards[] = array('award_tag' => $tag1, 'award_modus' => AWARD_DETAIL);
        }
        $row['award'] = $awards;
    }
    if ($row['avatar']) {
        $row['avatar'] = @unserialize($row['avatar']);
        $row['avatar_path'] = $row['avatar']['path'];
        $row['avatar_width'] = $row['avatar']['width'];
        $row['avatar_height'] = $row['avatar']['height'];
    }
    foreach ($row as $k => $v) {
        if (!$v && $k != 'avatar') {
            $row[$k] = "k.A.";
        }
    }
    $row['rank_offset'] = rankingTribe_checkOffset($tag);
    // parse tribe message
    $parser = new parser();
    $row['description'] = $parser->p($row['description']);
    // get Tribe Rank
    $sql = $db->prepare("SELECT rank FROM " . RANKING_TRIBE_TABLE . " WHERE tribe = :tag");
    $sql->bindValue('tag', $tag, PDO::PARAM_STR);
    if (!$sql->execute()) {
        $template->throwError('Fehler in der Datenbank.');
        return;
    }
    if ($ranking = $sql->fetch(PDO::FETCH_ASSOC)) {
        $row['rank'] = $ranking['rank'];
    } else {
        $row['rank'] = '';
    }
    $template->addVar('tribe_details', $row);
    // history
    $history = relation_getTribeHistory($tag);
    $template->addVar('tribe_history', $history);
    // player list
    $playerList = tribe_getPlayerList($tag, true, true);
    foreach ($playerList as $id => $playerData) {
        if (!empty($playerData['awards'])) {
            $playerData['awards'] = explode('|', $playerData['awards']);
            $awards = array();
            foreach ($playerData['awards'] as $award) {
                $awards[] = array('tag' => $award, 'award_modus' => AWARD_DETAIL);
            }
            $playerData['award'] = $awards;
        }
        foreach ($playerData as $k => $v) {
            if ($k == 'awards' || $k == 'religion') {
                continue;
            }
            if (!$v) {
                $playerData[$k] = _('k.A.');
            }
        }
        $playerList[$id] = $playerData;
    }
    $template->addVar('tribe_player_list', $playerList);
    // relations
    $relations = relation_getRelationsForTribe($tag);
    $relationsData = array();
    if (isset($relations['own'])) {
        foreach ($relations['own'] as $target => $relationData) {
            $relationsData[$target] = array('tribe' => $relationData['tribe_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['tribe'], 'relation_to' => $GLOBALS['relationList'][0]['name'], 'relation_from' => $GLOBALS['relationList'][$relationData['relationType']]['name']);
        }
    }
    $template->addVar('relations_data', $relationsData);
}