// 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
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; }
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; }
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; }