И так в этом моде будем менять логику работы миссии "Переработать".
Что имеем сейчас - переработчики подлетают к обломкам, мгновенно забирают сколько могут и улетают обратно
На что меняем - переработчики подлетают к обломкам и начинают перерабатывать обломки, скорость переработки зависит от грузоподъемности переработчика. Сделал таким образом что он пополнит всю свою грузоподъемность за 1час. (если хотите и умеете можете поменять скорость или добавить к кораблю характеристику скорости переработки отдельно). Переработка происходит каждую минуту, т.е если переработчики висят у обломков целых 30мин они переработают, ресурсов на 50% своей грузоподъемности.
Display Spoiler
добавляем в базу
* не забудьте поменять префикс "uni1_" на свой если он отличается
В файле \includes\classes\missions\MissionCaseRecycling.class.php меняем
Display Spoiler
функцию
Display All
на
Функцию
меняем на
В файле \includes\pages\game\ShowFleetAjaxPage.class.php
Display Spoiler
После
Добавляем
После
Display All
добавляем
Меняем
на
В файле class.FleetFunctions.php
Display Spoiler
После
Добавляем
После
Добавляем
В файле class.FlyingFleetsTable.php
Display Spoiler
После
Добавляем
В файле ShowFleetStep3Page.class.php
Далее копируем файл RecycleCronjob.class.php из архива в папку \includes\classes\cronjob\
Потом переходим в админку на страницу "Планировщик задач" жмем создать новую задачу и заполняем поля
Задача - recycle
Класс - выбираем RecycleCronjob
и ставим везде галочку на "Все"
*если крон не запускается надо будет в базе uni1_cronjob найти наш класс и в поле nextTime добавить текущее время в UNIX формате
*убедитесь что в файле MissionCaseRecycling.class.php Cronjob::execute(9); 9 - это была ид нашей задачи, если у вас задача имеет другой ид поменяйте его в MissionCaseRecycling.class.php
*если у вас крон не запускается серверно, то могут быть незначительные ошибки в логике переработки, так что рекомендую добавить крон в серверный крон.
Можете так же добавить отображение работающих переработчиков в галактике.
*могут быть баги т.к написал мод только что и он особо не тестировался, так что ставьте на свой страх и риск
*Мод только для 1.8 версии, на других не тестировался
Буду благодарен если переведете на другие языки.
Что имеем сейчас - переработчики подлетают к обломкам, мгновенно забирают сколько могут и улетают обратно
На что меняем - переработчики подлетают к обломкам и начинают перерабатывать обломки, скорость переработки зависит от грузоподъемности переработчика. Сделал таким образом что он пополнит всю свою грузоподъемность за 1час. (если хотите и умеете можете поменять скорость или добавить к кораблю характеристику скорости переработки отдельно). Переработка происходит каждую минуту, т.е если переработчики висят у обломков целых 30мин они переработают, ресурсов на 50% своей грузоподъемности.
добавляем в базу
* не забудьте поменять префикс "uni1_" на свой если он отличается
В файле \includes\classes\missions\MissionCaseRecycling.class.php меняем
функцию
PHP Source Code: \includes\classes\missions\MissionCaseRecycling.class.php
- function TargetEvent()
- {
- global $pricelist, $resource;
- $resourceIDs = array(901, 902, 903, 921);
- $debrisIDs = array(901, 902);
- $resQuery = array();
- $collectQuery = array();
- $collectedGoods = array();
- foreach($debrisIDs as $debrisID)
- {
- $collectedGoods[$debrisID] = 0;
- $resQuery[] = 'der_'.$resource[$debrisID];
- }
- $sql = 'SELECT '.implode(',', $resQuery).', ('.implode(' + ', $resQuery).') as total
- FROM %%PLANETS%% WHERE id = :planetId';
- $targetData = Database::get()->selectSingle($sql, array(
- ':planetId' => $this->_fleet['fleet_end_id']
- ));
- if(!empty($targetData['total']))
- {
- $sql = 'SELECT * FROM %%USERS%% WHERE id = :userId;';
- $targetUser = Database::get()->selectSingle($sql, array(
- ':userId' => $this->_fleet['fleet_owner']
- ));
- $targetUserFactors = getFactors($targetUser);
- $shipStorageFactor = 1 + $targetUserFactors['ShipStorage'];
- // Get fleet capacity
- $fleetData = FleetFunctions::unserialize($this->_fleet['fleet_array']);
- $recyclerStorage = 0;
- $otherFleetStorage = 0;
- foreach ($fleetData as $shipId => $shipAmount)
- {
- if ($shipId == 209 || $shipId == 219)
- {
- $recyclerStorage += $pricelist[$shipId]['capacity'] * $shipAmount;
- }
- else
- {
- $otherFleetStorage += $pricelist[$shipId]['capacity'] * $shipAmount;
- }
- }
- $recyclerStorage *= $shipStorageFactor;
- $otherFleetStorage *= $shipStorageFactor;
- $incomingGoods = 0;
- foreach($resourceIDs as $resourceID)
- {
- $incomingGoods += $this->_fleet['fleet_resource_'.$resource[$resourceID]];
- }
- $totalStorage = $recyclerStorage + min(0, $otherFleetStorage - $incomingGoods);
- $param = array(
- ':planetId' => $this->_fleet['fleet_end_id']
- );
- // fast way
- $collectFactor = min(1, $totalStorage / $targetData['total']);
- foreach($debrisIDs as $debrisID)
- {
- $fleetColName = 'fleet_resource_'.$resource[$debrisID];
- $debrisColName = 'der_'.$resource[$debrisID];
- $collectedGoods[$debrisID] = ceil($targetData[$debrisColName] * $collectFactor);
- $collectQuery[] = $debrisColName.' = GREATEST(0, '.$debrisColName.' - :'.$resource[$debrisID].')';
- $param[':'.$resource[$debrisID]] = $collectedGoods[$debrisID];
- $this->UpdateFleet($fleetColName, $this->_fleet[$fleetColName] + $collectedGoods[$debrisID]);
- }
- $sql = 'UPDATE %%PLANETS%% SET '.implode(',', $collectQuery).' WHERE id = :planetId;';
- Database::get()->update($sql, $param);
- }
- $LNG = $this->getLanguage(NULL, $this->_fleet['fleet_owner']);
- $Message = sprintf($LNG['sys_recy_gotten'],
- pretty_number($collectedGoods[901]), $LNG['tech'][901],
- pretty_number($collectedGoods[902]), $LNG['tech'][902]
- );
- PlayerUtil::sendMessage($this->_fleet['fleet_owner'], 0, $LNG['sys_mess_tower'], 5,
- $LNG['sys_recy_report'], $Message, $this->_fleet['fleet_start_time'], NULL, 1, $this->_fleet['fleet_universe']);
- $this->setState(FLEET_RETURN);
- $this->SaveFleet();
- }
В файле \includes\pages\game\ShowFleetAjaxPage.class.php
После
После
PHP Source Code
- case 8:
- if(!isModuleAvailable(MODULE_MISSION_RECYCLE)) {
- $this->sendData(699, $LNG['sys_module_inactive']);
- }
- $sql = "SELECT (der_metal + der_crystal) as sum FROM %%PLANETS%% WHERE id = :planetID;";
- $totalDebris = $db->selectSingle($sql, array(
- ':planetID' => $planetID
- ), 'sum');
- $recElementIDs = array(219, 209);
- $fleetArray = array();
Меняем
на
В файле class.FleetFunctions.php
После
После
В файле class.FlyingFleetsTable.php
После
В файле ShowFleetStep3Page.class.php
Далее копируем файл RecycleCronjob.class.php из архива в папку \includes\classes\cronjob\
Потом переходим в админку на страницу "Планировщик задач" жмем создать новую задачу и заполняем поля
Задача - recycle
Класс - выбираем RecycleCronjob
и ставим везде галочку на "Все"
*если крон не запускается надо будет в базе uni1_cronjob найти наш класс и в поле nextTime добавить текущее время в UNIX формате
*убедитесь что в файле MissionCaseRecycling.class.php Cronjob::execute(9); 9 - это была ид нашей задачи, если у вас задача имеет другой ид поменяйте его в MissionCaseRecycling.class.php
*если у вас крон не запускается серверно, то могут быть незначительные ошибки в логике переработки, так что рекомендую добавить крон в серверный крон.
Можете так же добавить отображение работающих переработчиков в галактике.
*могут быть баги т.к написал мод только что и он особо не тестировался, так что ставьте на свой страх и риск
*Мод только для 1.8 версии, на других не тестировался
Буду благодарен если переведете на другие языки.
The post was edited 3 times, last by Kaizoku ().