Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Miscellaneous fixes #1129

Merged
merged 4 commits into from
Aug 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 7 additions & 4 deletions src/engine/Default/alliance_share_maps_processing.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,22 @@
$alliance_ids = array_diff($memberIDs, [$player->getAccountID()]);

// end here if we are alone in the alliance
if (empty($alliance_ids)) {
if (count($alliance_ids) == 0) {
create_error('Who exactly are you sharing maps with?');
}

$unvisitedSectors = $player->getUnvisitedSectors();

// delete all visited sectors from the table of all our alliance mates
$db = Smr\Database::getInstance();
$db->write('DELETE
$query = 'DELETE
FROM player_visited_sector
WHERE account_id IN (' . $db->escapeArray($alliance_ids) . ')
AND game_id = ' . $db->escapeNumber($player->getGameID()) . '
AND sector_id NOT IN (' . $db->escapeArray($unvisitedSectors) . ')');
AND game_id = ' . $db->escapeNumber($player->getGameID());
if (count($unvisitedSectors) > 0) {
$query .= ' AND sector_id NOT IN (' . $db->escapeArray($unvisitedSectors) . ')';
}
$db->write($query);

// free some memory
unset($unvisitedSectors);
Expand Down
15 changes: 7 additions & 8 deletions src/engine/Default/message_view.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
$template->unassign('NextPageHREF'); // always displaying all scout messages?
} else {
foreach ($dbResult->records() as $dbRecord) {
displayMessage($messageBox, $dbRecord->getInt('message_id'), $dbRecord->getInt('account_id'), $dbRecord->getInt('sender_id'), $player->getGameID(), $dbRecord->getString('message_text'), $dbRecord->getInt('send_time'), $dbRecord->getBoolean('msg_read'), $var['folder_id'], $player->getAccount());
$messageBox['Messages'][] = displayMessage($dbRecord->getInt('message_id'), $dbRecord->getInt('account_id'), $dbRecord->getInt('sender_id'), $player->getGameID(), $dbRecord->getString('message_text'), $dbRecord->getInt('send_time'), $dbRecord->getBoolean('msg_read'), $var['folder_id'], $player->getAccount());
}
}
if (!USING_AJAX) {
Expand Down Expand Up @@ -115,7 +115,7 @@ function displayScouts(array &$messageBox, SmrPlayer $player) : void {
$totalUnread = $dbRecord->getInt('total_unread');
$message = 'Your forces have spotted ' . $sender->getBBLink() . ' passing your forces ' . $dbRecord->getInt('number') . ' ' . pluralise('time', $dbRecord->getInt('number'));
$message .= ($totalUnread > 0) ? ' (' . $totalUnread . ' unread).' : '.';
displayGrouped($messageBox, $sender, $message, $dbRecord->getInt('first'), $dbRecord->getInt('last'), $totalUnread > 0, $player->getAccount());
$messageBox['Messages'][] = displayGrouped($sender, $message, $dbRecord->getInt('first'), $dbRecord->getInt('last'), $totalUnread > 0, $player->getAccount());
}

// Now display individual messages in each group
Expand All @@ -131,15 +131,15 @@ function displayScouts(array &$messageBox, SmrPlayer $player) : void {
$groupBox =& $messageBox['GroupedMessages'][$dbRecord->getInt('sender_id')];
// Limit the number of messages in each group
if (!isset($groupBox['Messages']) || count($groupBox['Messages']) < MESSAGE_SCOUT_GROUP_LIMIT) {
displayMessage($groupBox, $dbRecord->getInt('message_id'), $dbRecord->getInt('account_id'), $dbRecord->getInt('sender_id'), $player->getGameID(), $dbRecord->getString('message_text'), $dbRecord->getInt('send_time'), $dbRecord->getBoolean('msg_read'), MSG_SCOUT, $player->getAccount());
$groupBox['Messages'][] = displayMessage($dbRecord->getInt('message_id'), $dbRecord->getInt('account_id'), $dbRecord->getInt('sender_id'), $player->getGameID(), $dbRecord->getString('message_text'), $dbRecord->getInt('send_time'), $dbRecord->getBoolean('msg_read'), MSG_SCOUT, $player->getAccount());
}
}

// In the default view (groups), we're always displaying all messages
$messageBox['NumberMessages'] = $dbResult->getNumRecords();
}

function displayGrouped(array &$messageBox, SmrPlayer $sender, string $message_text, int $first, int $last, bool $star, SmrAccount $displayAccount) : void {
function displayGrouped(SmrPlayer $sender, string $message_text, int $first, int $last, bool $star, SmrAccount $displayAccount) : array {
// Define a unique array so we can delete grouped messages
$array = array(
$sender->getAccountID(),
Expand All @@ -154,10 +154,10 @@ function displayGrouped(array &$messageBox, SmrPlayer $sender, string $message_t
$message['SenderDisplayName'] = $sender->getLinkedDisplayName(false);
$message['SendTime'] = date($displayAccount->getDateTimeFormat(), $first) . " - " . date($displayAccount->getDateTimeFormat(), $last);
$message['Text'] = $message_text;
$messageBox['Messages'][] = $message;
return $message;
}

function displayMessage(array &$messageBox, int $message_id, int $receiver_id, int $sender_id, int $game_id, string $message_text, int $send_time, bool $msg_read, int $type, SmrAccount $displayAccount) : void {
function displayMessage(int $message_id, int $receiver_id, int $sender_id, int $game_id, string $message_text, int $send_time, bool $msg_read, int $type, SmrAccount $displayAccount) : array {
$message = array();
$message['ID'] = $message_id;
$message['Text'] = $message_text;
Expand Down Expand Up @@ -201,6 +201,5 @@ function displayMessage(array &$messageBox, int $message_id, int $receiver_id, i
$message['ReceiverDisplayName'] = create_link($container, $receiver->getDisplayName());
}

// Append the message to this box
$messageBox['Messages'][] = $message;
return $message;
}
33 changes: 15 additions & 18 deletions src/tools/npc/npc.php
Original file line number Diff line number Diff line change
Expand Up @@ -450,27 +450,24 @@ function canWeUNO(AbstractSmrPlayer $player, bool $oppurtunisticOnly) : Page|fal
}
$sector = $player->getSector();

// We buy armour in preference to shields as it's cheaper.
// We buy cargo holds last if we have no newbie turns because we'd rather not die
$hardwareArray = array(HARDWARE_ARMOUR, HARDWARE_SHIELDS, HARDWARE_CARGO);

$amount = 0;
if ($player->getNewbieTurns() > MIN_NEWBIE_TURNS_TO_BUY_CARGO) {
// Buy cargo holds first if we have plenty of newbie turns left.
$hardwareArray = [HARDWARE_CARGO, HARDWARE_ARMOUR, HARDWARE_SHIELDS];
} else {
// We buy armour in preference to shields as it's cheaper.
// We buy cargo holds last if we have no newbie turns because we'd rather not die
$hardwareArray = [HARDWARE_ARMOUR, HARDWARE_SHIELDS, HARDWARE_CARGO];
}

foreach ($sector->getLocations() as $location) {
if ($location->isHardwareSold()) {
$hardwareSold = $location->getHardwareSold();
if ($player->getNewbieTurns() > MIN_NEWBIE_TURNS_TO_BUY_CARGO && !$ship->hasMaxCargoHolds() && isset($hardwareSold[HARDWARE_CARGO]) && ($amount = floor(($player->getCredits() - MINUMUM_RESERVE_CREDITS) / Globals::getHardwareCost(HARDWARE_CARGO))) > 0) { // Buy cargo holds first if we have plenty of newbie turns left.
$hardwareID = HARDWARE_CARGO;
} else {
foreach ($hardwareArray as $hardwareArrayID) {
if (!$ship->hasMaxHardware($hardwareArrayID) && isset($hardwareSold[$hardwareArrayID]) && ($amount = floor(($player->getCredits() - MINUMUM_RESERVE_CREDITS) / Globals::getHardwareCost($hardwareArrayID))) > 0) {
$hardwareID = $hardwareArrayID;
break;
}
}
foreach ($hardwareArray as $hardwareID) {
if (!$location->isHardwareSold($hardwareID)) {
continue;
}
if (isset($hardwareID)) {
$amount = min($ship->getType()->getMaxHardware($hardwareID) - $ship->getHardware($hardwareID), $amount);
$amountCanBuy = IFloor(($player->getCredits() - MINUMUM_RESERVE_CREDITS) / Globals::getHardwareCost($hardwareID));
$amountNeeded = $ship->getType()->getMaxHardware($hardwareID) - $ship->getHardware($hardwareID);
$amount = min($amountCanBuy, $amountNeeded);
if ($amount > 0) {
return doUNO($hardwareID, $amount, $sector->getSectorID());
}
}
Expand Down