diff --git a/src/engine/Default/alliance_share_maps_processing.php b/src/engine/Default/alliance_share_maps_processing.php index 07221e766..0f8a5ac89 100644 --- a/src/engine/Default/alliance_share_maps_processing.php +++ b/src/engine/Default/alliance_share_maps_processing.php @@ -10,7 +10,7 @@ $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?'); } @@ -18,11 +18,14 @@ // 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); diff --git a/src/engine/Default/message_view.php b/src/engine/Default/message_view.php index 5feb359a8..5cb530ace 100644 --- a/src/engine/Default/message_view.php +++ b/src/engine/Default/message_view.php @@ -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) { @@ -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 @@ -131,7 +131,7 @@ 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()); } } @@ -139,7 +139,7 @@ function displayScouts(array &$messageBox, SmrPlayer $player) : void { $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(), @@ -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; @@ -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; } diff --git a/src/tools/npc/npc.php b/src/tools/npc/npc.php index 9bb1a9e9f..7854205b4 100644 --- a/src/tools/npc/npc.php +++ b/src/tools/npc/npc.php @@ -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()); } }