Exemplo n.º 1
0
// 4. check for relations
// ----------------------------------------------------------------------------
echo "-- Checking Tribes --\n";
$tribes = tribe_getAllTribes($db);
if ($tribes < 0) {
    echo "Error retrieving all tribes.\n";
    return -1;
}
$deleted_tribes = array();
$validated_tribes = array();
$invalidated_tribes = array();
foreach ($tribes as $tag => $data) {
    if (in_array($tag, $untouchableTribes)) {
        continue;
    }
    if (($member_count = tribe_getNumberOfMembers($tag, $db)) < 0) {
        echo "Error counting members of tribe {$row['tag']}.\n";
        return -1;
    }
    //Gültige Stämme prüfen auf Membermangel
    if ($data['valid'] && $member_count < TRIBE_MINIMUM_SIZE) {
        if (tribe_SetTribeInvalid($tag, $db)) {
            array_push($invalidated_tribes, $tag);
        } else {
            echo "Error: Couldn´t set invalid for tribe {$tag}!\n";
        }
    }
    //Ungültige Stämme prüfen auf Membermangel
    if (!$data['valid'] && $member_count >= TRIBE_MINIMUM_SIZE) {
        $data['valid'] = TRUE;
        // damit der Stamm nicht gelöscht wird
Exemplo n.º 2
0
function tribe_processLeave($playerID, $tag, $db, $FORCE = 0)
{
    if (!$FORCE && !relation_leaveTribeAllowed($tag, $db)) {
        return -10;
    }
    if (!$FORCE && !tribe_changeTribeAllowedForPlayerID($playerID, $db)) {
        return -11;
    }
    if (tribe_isLeaderOrJuniorLeader($playerID, $tag, $db)) {
        if (tribe_isLeader($playerID, $tag, $db)) {
            if (!$FORCE && !tribe_unmakeLeader($playerID, $tag, $db)) {
                return -8;
            }
        } else {
            if (!$FORCE && !tribe_unmakeJuniorLeader($playerID, $tag, $db)) {
                return -8;
            }
        }
    }
    if (!($player = getPlayerByID($playerID))) {
        return -4;
    }
    if (!tribe_leaveTribe($playerID, $tag, $db)) {
        return -4;
    }
    Player::addHistoryEntry($db, $playerID, sprintf(_('verläßt den Stamm \'%s\''), $tag));
    tribe_setBlockingPeriodPlayerID($playerID, $db);
    tribe_sendTribeMessage($tag, TRIBE_MESSAGE_MEMBER, "Spieleraustritt", "Der Spieler {$player['name']} ist soeben aus dem " . "Stamm ausgetreten.");
    if (tribe_getNumberOfMembers($tag, $db) == 0) {
        // tribe has to be deleted
        tribe_deleteTribe($tag, $db, $FORCE);
        return 4;
    }
    return 2;
}
Exemplo n.º 3
0
function wonder_processTribeWonder($caveID, $wonderID, $casterTribe, $targetTribe)
{
    global $db;
    // check if wonder exists and is TribeWonder
    if (isset($GLOBALS['wonderTypeList'][$wonderID]) || !$wonder->isTribeWonder) {
        $wonder = $GLOBALS['wonderTypeList'][$wonderID];
    } else {
        return -33;
    }
    // check if tribes exist
    $targetTribeData = tribe_getTribeByTag($targetTribe);
    $casterTribeData = tribe_getTribeByTag($casterTribe);
    if (!$targetTribeData || !$casterTribeData) {
        return -15;
    }
    // check if tribe is valid
    if (!$targetTribeData['valid']) {
        return -34;
    }
    // check if caster tribe ist valid
    if (!$casterTribeData['valid']) {
        return -35;
    }
    $targetTribeRelations = relation_getRelationsForTribe($targetTribe);
    $casterTribeRelations = relation_getRelationsForTribe($casterTribe);
    $wonderPossible = false;
    foreach ($wonder->targetsPossible as $targetsPossible) {
        // check target
        if ($targetsPossible['target'] == 'own' && strtoupper($casterTribe) != strtoupper($targetTribe)) {
            continue;
        }
        if ($targetsPossible['target'] == 'other' && strtoupper($casterTribe) == strtoupper($targetTribe)) {
            continue;
        }
        // check relation
        $check = wonder_checkRelations($targetsPossible['relation'], $targetTribe, $casterTribe, $casterTribeRelations, $targetTribeRelations);
        if ($check == true) {
            $wonderPossible = true;
            break;
        }
    }
    if ($wonderPossible == false) {
        return -37;
    }
    // take wonder Costs from TribeStorage
    $memberNumber = tribe_getNumberOfMembers($casterTribe);
    if (!processProductionCost($wonder, 0, NULL, $memberNumber, true)) {
        return -33;
    }
    // does the wonder fail?
    if ((double) rand() / (double) getRandMax() > $wonder->chance) {
        return 11;
        // wonder did fail
    }
    // schedule the wonder's impacts
    // create a random factor between -0.3 and +0.3
    $delayRandFactor = rand(0, getrandmax()) / getrandmax() * 0.6 - 0.3;
    // now calculate the delayDelta depending on the first impact's delay
    $delayDelta = $wonder->impactList[0]['delay'] * $delayRandFactor;
    // get targets
    $targets = tribe_getTribeWonderTargets($targetTribe);
    if (!$targets || sizeof($targets) == 0) {
        return -33;
    }
    $now = time();
    // loop over targets
    foreach ($targets as $target) {
        // loop over impacts
        foreach ($wonder->impactList as $impactID => $impact) {
            $delay = (int) (($delayDelta + $impact['delay']) * WONDER_TIME_BASE_FACTOR);
            $sql = $db->prepare("INSERT INTO " . EVENT_WONDER_TABLE . " (casterID, sourceID, targetID, \n                       wonderID, impactID, start, end) \n                       VALUES (:playerID, :caveID, :targetID, :wonderID, :impactID, :start, :end)");
            $sql->bindValue('playerID', 0, PDO::PARAM_INT);
            // playerID 0, for not receiving lots of wonder-end-messages
            $sql->bindValue('caveID', $caveID, PDO::PARAM_INT);
            $sql->bindValue('targetID', $target['caveID'], PDO::PARAM_INT);
            $sql->bindValue('wonderID', $wonderID, PDO::PARAM_INT);
            $sql->bindValue('impactID', $impactID, PDO::PARAM_INT);
            $sql->bindValue('start', time_toDatetime($now), PDO::PARAM_STR);
            $sql->bindValue('end', time_toDatetime($now + $delay), PDO::PARAM_STR);
            $sql->execute();
        }
        // end foreach impactList
    }
    // end foreach target
    // send caster messages
    $messageClass = new Messages();
    $sourceMessage = 'Sie haben auf den Stamm "' . $targetTribe . '" ein Stammeswunder ' . $wonder->name . ' erwirkt.';
    $messageClass->sendSystemMessage($_SESSION['player']->playerID, 9, 'Stammeswunder erwirkt auf "' . $targetTribe . '"', $sourceMessage);
    // send target messages
    $targetPlayersArray = array();
    foreach ($targets as $target) {
        if (!isset($targetPlayersArray[$target['playerID']])) {
            $targetPlayersArray[$target['playerID']] = $target;
        }
    }
    foreach ($targetPlayersArray as $target) {
        $targetMessage = 'Der Stamm "' . $casterTribe . '" hat ein Stammeswunder auf deine Höhlen gewirkt';
        $messageClass->sendSystemMessage($target['playerID'], 9, 'Stammeswunder!', $targetMessage);
    }
    return 12;
}
Exemplo n.º 4
0
function tribe_processLeave($playerID, $tag, $db, $FORCE = 0)
{
    if (!$FORCE && !relation_leaveTribeAllowed($tag, $db)) {
        return -10;
    }
    if (!$FORCE && !tribe_changeTribeAllowedForPlayerID($playerID, $db)) {
        return -11;
    }
    if (tribe_isLeader($playerID, $tag, $db)) {
        if (!$FORCE && !tribe_unmakeLeader($playerID, $tag, $db)) {
            return -8;
        }
    }
    if (!($player = getPlayerFromID($playerID))) {
        return -4;
    }
    if (!tribe_leaveTribe($playerID, $tag, $db)) {
        return -4;
    }
    tribe_setBlockingPeriodPlayerID($playerID, $db);
    tribe_sendTribeMessage($tag, TRIBE_MESSAGE_MEMBER, "Spieleraustritt", "Der Spieler {$player['name']} ist soeben aus dem " . "Clan ausgetreten.");
    if (tribe_getNumberOfMembers($tag, $db) == 0) {
        // tribe has to be deleted
        tribe_deleteTribe($tag, $db, $FORCE);
        return 4;
    }
    return 2;
}