function relation_processRelationUpdate($tag, $relationData, $db) { global $relationList; if (strcasecmp($tag, $relationData[tag]) == 0) { return -7; } if (!($targetTribeInfo = tribe_getTribeByTag($relationData[tag], $db))) { return -6; } $relationType = $relationData[relationID]; $relationInfo = $relationList[$relationType]; if (!($relation = relation_getRelation($tag, $relationData[tag], $db))) { return -3; } $relationTypeActual = $relation[own][relationType]; if ($relationTypeActual == $relationType) { // change to actual relation? return -13; } if (!$relation[own][changeable]) { return -4; } // check if switching to same relation as target or relation is possible if ($relation[other][relationType] != $relationType && !relation_isPossible($relationType, $relation[own][relationType])) { return -5; } // check minimum size of target tribe // BUT: relation of target tribe to us is always ok! if ($relationInfo[targetMinSize] > 0.0 && $relation[other][relationType] != relationType) { if (($from_points = tribe_getMight($tag, $db)) < 0) { $from_points = 0; } if (($target_points = tribe_getMight($relationData['tag'], $db)) < 0) { $target_points = 0; } if ($from_points * $relationInfo[targetMinSize] > $target_points) { return -12; } } // if switching to the same relation of other clan towards us, // use their treaty's end_time! if ($relationType == $relation[other][relationType] && $relationType != 0) { $end_time = $relation[other][duration]; } else { $duration = $relationList[$relationTypeActual][transitions][$relationType][time]; } if (!relation_setRelation($tag, $targetTribeInfo[tag], $relationType, $duration, $db, $end_time, $relation[own][tribe_rankingPoints], $relation[own][target_rankingPoints])) { return -3; } // insert history message if ($message = $relationList[$relationType][historyMessage]) { relation_insertIntoHistory($tag, relation_prepareHistoryMessage($tag, $targetTribeInfo[tag], $message), $db); } $relationName = $relationList[$relationType][name]; tribe_sendTribeMessage($tag, TRIBE_MESSAGE_RELATION, "Haltung gegenüber {$targetTribeInfo['tag']} " . "geändert", "Ihr Clananführer hat die Haltung Ihres " . "Clans gegenüber dem Clan " . "{$targetTribeInfo['tag']} auf {$relationName} " . "geändert."); tribe_sendTribeMessage($targetTribeInfo[tag], TRIBE_MESSAGE_RELATION, "Der Clan {$tag} ändert seine Haltung", "Der Clananführer des Clans {$tag} " . "hat die Haltung seines " . "Clans ihnen gegenüber " . "auf {$relationName} " . "geändert."); // switch other side if necessary (and not at this type already) if (!$end_time && ($oST = $relationInfo[otherSideTo]) >= 0) { if (!relation_setRelation($targetTribeInfo[tag], $tag, $oST, $duration, $db, 0, $relation[other][tribe_rankingPoints], $relation[other][target_rankingPoints])) { return -3; } // insert history if ($message = $relationList[$oST][historyMessage]) { relation_insertIntoHistory($targetTribeInfo[tag], relation_prepareHistoryMessage($tag, $targetTribeInfo[tag], $message), $db); } $relationName = $relationList[$oST][name]; tribe_sendTribeMessage($targetTribeInfo[tag], TRIBE_MESSAGE_RELATION, "Haltung gegenüber {$tag} " . "geändert", "Die Haltung Ihres " . "Clans gegenüber dem Clan " . "{$tag} wurde automatisch auf {$relationName} " . "geändert."); tribe_sendTribeMessage($tag, TRIBE_MESSAGE_RELATION, "Der Clan {$targetTribeInfo['tag']} ändert " . "seine " . "Haltung", "Der Clan {$targetTribeInfo['tag']} " . "hat die Haltung ihnen gegenüber " . "automatisch auf {$relationName} " . "geändert."); } return 3; }
function tribe_deleteTribe($tag, $db, $FORCE = 0) { global $relationList; if (!$FORCE && !relation_leaveTribeAllowed($tag, $db)) { return 0; } if (!($tribe = tribe_getTribeByTag($tag, $db))) { return 0; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // get relations if (!($tribeRelations = relation_getRelationsForTribe($tag, $db))) { return 0; } // end others relations foreach ($tribeRelations['other'] as $otherTag => $relation) { $relationType = $relationList[$relation['relationType']]; $oDST = $relationType['onDeletionSwitchTo']; if ($oDST >= 0) { // die raltion umschalten und zielrelation temporär eintragen; sie wird // am ende dieser funktion ohne weiteres umschalten geloescht. Das // temporaere umschalten ist aber noetig, um zum beispiel die // ruhmberechnung im siegfall oder aehnliche effekte, die an // relation_setRelation haengen abzuarbeiten. if (!relation_setRelation($otherTag, $tag, $oDST, 0, $db, 0, $relation['tribe_rankingPoints'], $relation['target_rankingPoints'])) { return 0; } // insert history if ($message = $relationList[$oDST]['historyMessage']) { relation_insertIntoHistory($otherTag, relation_prepareHistoryMessage($tag, $otherTag, $message), $db); } // insert tribe message $relationName = $relationList[$oDST]['name']; tribe_sendTribeMessage($otherTag, TRIBE_MESSAGE_RELATION, "Haltung gegenüber {$tag} geändert", "Die Haltung Ihres Stammes gegenüber dem Stamm {$tag} wurde " . "automatisch auf {$relationName} geändert."); } } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// if ($tribe['leaderID'] && !tribe_unmakeLeader($tribe['leaderID'], $tag, $db)) { return 0; } if (($members = tribe_getAllMembers($tag, $db)) < 0) { return 0; } foreach ($members as $playerID => $playerData) { if (!tribe_leaveTribe($playerID, $tag, $db)) { return 0; } if (!tribe_setBlockingPeriodPlayerID($playerID, $db)) { return 0; } messages_sendSystemMessage($playerID, 8, "Auflösung des Stammes", "Ihr Stamm {$tag} wurde soeben aufgelöst. " . "Sollten Sie Probleme mit dem " . "Stammesmenü haben, loggen Sie sich " . "bitte neu ein.", $db); Player::addHistoryEntry($db, $playerID, sprintf(_('verläßt den Stamm \'%s\''), $tag)); } $query = "DELETE FROM Tribe " . "WHERE tag LIKE '{$tag}'"; if (!$db->query($query)) { return 0; } $query = "DELETE FROM Relation " . "WHERE tribe LIKE '{$tag}' " . "OR tribe_target LIKE '{$tag}'"; if (!$db->query($query)) { return 0; } $query = "DELETE FROM TribeMessage " . "WHERE tag LIKE '{$tag}'"; if (!$db->query($query)) { return 0; } $query = "DELETE FROM TribeHistory " . "WHERE tribe LIKE '{$tag}'"; if (!$db->query($query)) { return 0; } $query = "DELETE FROM Election " . "WHERE tribe LIKE '{$tag}'"; if (!$db->query($query)) { return 0; } $query = "SELECT rank " . "FROM RankingTribe " . "WHERE tribe LIKE '{$tag}'"; if (!($result = $db->query($query))) { return 0; } if (!($row = $result->nextRow())) { return 0; } $rank = $row['rank']; $query = "DELETE FROM RankingTribe " . "WHERE tribe LIKE '{$tag}'"; if (!$db->query($query)) { return 0; } $query = "UPDATE RankingTribe SET rank = rank - 1 " . "WHERE rank > '{$rank}'"; if (!$db->query($query)) { return 0; } Player::addHistoryEntry($db, $tribe['leaderID'], sprintf(_('löst den Stamm \'%s\' auf'), $tag)); return 1; }
function tribe_deleteTribe($tag, $FORCE = 0) { global $db; if (!$FORCE && !relation_leaveTribeAllowed($tag)) { return 0; } if (!($tribe = tribe_getTribeByTag($tag))) { return 0; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // get relations if (!($tribeRelations = relation_getRelationsForTribe($tag))) { return 0; } // end others relations foreach ($tribeRelations['other'] as $otherTag => $relation) { $relationType = $GLOBALS['relationList'][$relation['relationType']]; $oDST = $relationType['onDeletionSwitchTo']; if ($oDST >= 0) { // die relation umschalten und zielrelation temporaer eintragen; sie wird // am ende dieser funktion ohne weiteres umschalten geloescht. Das // temporaere umschalten ist aber noetig, um zum beispiel die // ruhmberechnung im siegfall oder aehnliche effekte, die an // relation_setRelation haengen abzuarbeiten. if (!relation_setRelation($otherTag, $tag, $oDST, 0, 0, $relation['tribe_rankingPoints'], $relation['target_rankingPoints'])) { return 0; } // insert history if (isset($GLOBALS['relationList'][$oDST]['historyMessage'])) { relation_insertIntoHistory($otherTag, relation_prepareHistoryMessage($tag, $otherTag, $GLOBALS['relationList'][$oDST]['historyMessage'])); } // insert tribe message $relationName = $GLOBALS['relationList'][$oDST]['name']; tribe_sendTribeMessage($otherTag, TRIBE_MESSAGE_RELATION, "Haltung gegenüber {$tag} geändert", "Die Haltung Ihres Stammes gegenüber dem Stamm {$tag} wurde automatisch auf {$relationName} geändert."); } } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// if ($tribe['leaderID'] && !tribe_unmakeLeader($tribe['leaderID'], $tag)) { return 0; } if (($members = tribe_getAllMembers($tag)) < 0) { return 0; } foreach ($members as $playerID => $playerData) { if (!tribe_leaveTribe($playerID, $tag)) { return 0; } if (!tribe_setBlockingPeriodPlayerID($playerID)) { return 0; } $messagesClass = new Messages(); $messagesClass->sendSystemMessage($playerID, 8, "Auflösung des Stammes", "Ihr Stamm {$tag} wurde soeben aufgelöst. " . "Sollten Sie Probleme mit dem " . "Stammesmenü haben, loggen Sie sich " . "bitte neu ein."); Player::addHistoryEntry($playerID, sprintf(_("verlässt den Stamm '%s'"), $tag)); } $sql = $db->prepare("DELETE FROM " . TRIBE_TABLE . " WHERE tag LIKE :tag"); $sql->bindValue('tag', $tag, PDO::PARAM_STR); if (!$sql->execute()) { return 0; } $sql = $db->prepare("DELETE FROM " . RELATION_TABLE . "\n WHERE tribe LIKE :tag\n OR tribe_target LIKE :tag"); $sql->bindValue('tag', $tag, PDO::PARAM_STR); if (!$sql->execute()) { return 0; } $sql = $db->prepare("DELETE FROM " . TRIBE_MESSAGE_TABLE . " WHERE tag LIKE :tag"); $sql->bindValue('tag', $tag, PDO::PARAM_STR); if (!$sql->execute()) { return 0; } $sql = $db->prepare("DELETE FROM " . TRIBE_HISTORY_TABLE . " WHERE tribe LIKE :tag"); $sql->bindValue('tag', $tag, PDO::PARAM_STR); if (!$sql->execute()) { return 0; } $sql = $db->prepare("DELETE FROM " . ELECTION_TABLE . " WHERE tribe LIKE :tag"); $sql->bindValue('tag', $tag, PDO::PARAM_STR); if (!$sql->execute()) { return 0; } $sql = $db->prepare("SELECT rank FROM " . RANKING_TRIBE_TABLE . " WHERE tribe LIKE :tag"); $sql->bindValue('tag', $tag, PDO::PARAM_STR); if (!$sql->execute()) { return 0; } if (!($row = $sql->fetch())) { return 0; } $rank = $row['rank']; $sql = $db->prepare("DELETE FROM " . RANKING_TRIBE_TABLE . " WHERE tribe LIKE :tag"); $sql->bindValue('tag', $tag, PDO::PARAM_STR); if (!$sql->execute()) { return 0; } $sql = $db->prepare("UPDATE " . RANKING_TRIBE_TABLE . " SET rank = rank - 1 " . "WHERE rank > :rank"); $sql->bindValue('rank', $rank, PDO::PARAM_STR); if (!$sql->execute()) { return 0; } Player::addHistoryEntry($tribe['leaderID'], sprintf(_("löst den Stamm '%s' auf"), $tag)); return 1; }