[MOD] Change recycle mission logic for 1.8 ver.

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • [MOD] Change recycle mission logic for 1.8 ver.

      И так в этом моде будем менять логику работы миссии "Переработать".

      Что имеем сейчас - переработчики подлетают к обломкам, мгновенно забирают сколько могут и улетают обратно

      На что меняем - переработчики подлетают к обломкам и начинают перерабатывать обломки, скорость переработки зависит от грузоподъемности переработчика. Сделал таким образом что он пополнит всю свою грузоподъемность за 1час. (если хотите и умеете можете поменять скорость или добавить к кораблю характеристику скорости переработки отдельно). Переработка происходит каждую минуту, т.е если переработчики висят у обломков целых 30мин они переработают, ресурсов на 50% своей грузоподъемности.

      Display Spoiler


      добавляем в базу
      * не забудьте поменять префикс "uni1_" на свой если он отличается

      SQL-Query

      1. ALTER TABLE `uni1_fleets` ADD `fleet_rec_time` int(11) DEFAULT NULL
      В файле \includes\classes\missions\MissionCaseRecycling.class.php меняем
      Display Spoiler


      функцию

      PHP Source Code: \includes\classes\missions\MissionCaseRecycling.class.php

      1. function TargetEvent()
      2. {
      3. global $pricelist, $resource;
      4. $resourceIDs = array(901, 902, 903, 921);
      5. $debrisIDs = array(901, 902);
      6. $resQuery = array();
      7. $collectQuery = array();
      8. $collectedGoods = array();
      9. foreach($debrisIDs as $debrisID)
      10. {
      11. $collectedGoods[$debrisID] = 0;
      12. $resQuery[] = 'der_'.$resource[$debrisID];
      13. }
      14. $sql = 'SELECT '.implode(',', $resQuery).', ('.implode(' + ', $resQuery).') as total
      15. FROM %%PLANETS%% WHERE id = :planetId';
      16. $targetData = Database::get()->selectSingle($sql, array(
      17. ':planetId' => $this->_fleet['fleet_end_id']
      18. ));
      19. if(!empty($targetData['total']))
      20. {
      21. $sql = 'SELECT * FROM %%USERS%% WHERE id = :userId;';
      22. $targetUser = Database::get()->selectSingle($sql, array(
      23. ':userId' => $this->_fleet['fleet_owner']
      24. ));
      25. $targetUserFactors = getFactors($targetUser);
      26. $shipStorageFactor = 1 + $targetUserFactors['ShipStorage'];
      27. // Get fleet capacity
      28. $fleetData = FleetFunctions::unserialize($this->_fleet['fleet_array']);
      29. $recyclerStorage = 0;
      30. $otherFleetStorage = 0;
      31. foreach ($fleetData as $shipId => $shipAmount)
      32. {
      33. if ($shipId == 209 || $shipId == 219)
      34. {
      35. $recyclerStorage += $pricelist[$shipId]['capacity'] * $shipAmount;
      36. }
      37. else
      38. {
      39. $otherFleetStorage += $pricelist[$shipId]['capacity'] * $shipAmount;
      40. }
      41. }
      42. $recyclerStorage *= $shipStorageFactor;
      43. $otherFleetStorage *= $shipStorageFactor;
      44. $incomingGoods = 0;
      45. foreach($resourceIDs as $resourceID)
      46. {
      47. $incomingGoods += $this->_fleet['fleet_resource_'.$resource[$resourceID]];
      48. }
      49. $totalStorage = $recyclerStorage + min(0, $otherFleetStorage - $incomingGoods);
      50. $param = array(
      51. ':planetId' => $this->_fleet['fleet_end_id']
      52. );
      53. // fast way
      54. $collectFactor = min(1, $totalStorage / $targetData['total']);
      55. foreach($debrisIDs as $debrisID)
      56. {
      57. $fleetColName = 'fleet_resource_'.$resource[$debrisID];
      58. $debrisColName = 'der_'.$resource[$debrisID];
      59. $collectedGoods[$debrisID] = ceil($targetData[$debrisColName] * $collectFactor);
      60. $collectQuery[] = $debrisColName.' = GREATEST(0, '.$debrisColName.' - :'.$resource[$debrisID].')';
      61. $param[':'.$resource[$debrisID]] = $collectedGoods[$debrisID];
      62. $this->UpdateFleet($fleetColName, $this->_fleet[$fleetColName] + $collectedGoods[$debrisID]);
      63. }
      64. $sql = 'UPDATE %%PLANETS%% SET '.implode(',', $collectQuery).' WHERE id = :planetId;';
      65. Database::get()->update($sql, $param);
      66. }
      67. $LNG = $this->getLanguage(NULL, $this->_fleet['fleet_owner']);
      68. $Message = sprintf($LNG['sys_recy_gotten'],
      69. pretty_number($collectedGoods[901]), $LNG['tech'][901],
      70. pretty_number($collectedGoods[902]), $LNG['tech'][902]
      71. );
      72. PlayerUtil::sendMessage($this->_fleet['fleet_owner'], 0, $LNG['sys_mess_tower'], 5,
      73. $LNG['sys_recy_report'], $Message, $this->_fleet['fleet_start_time'], NULL, 1, $this->_fleet['fleet_universe']);
      74. $this->setState(FLEET_RETURN);
      75. $this->SaveFleet();
      76. }
      Display All
      на

      PHP Source Code: \includes\classes\missions\MissionCaseRecycling.class.php

      1. function TargetEvent()
      2. {
      3. $this->setState(FLEET_HOLD);
      4. $this->SaveFleet();
      5. }
      Функцию

      PHP Source Code: \includes\classes\missions\MissionCaseRecycling.class.php

      1. function EndStayEvent()
      2. {
      3. return;
      4. }
      меняем на


      PHP Source Code: \includes\classes\missions\MissionCaseRecycling.class.php

      1. function EndStayEvent()
      2. {
      3. require_once 'includes/classes/Cronjob.class.php';
      4. Cronjob::execute(9);
      5. $this->setState(FLEET_RETURN);
      6. $this->SaveFleet();
      7. }




      В файле \includes\pages\game\ShowFleetAjaxPage.class.php
      Display Spoiler


      После

      PHP Source Code

      1. if ($maxSlots <= $activeSlots) {
      2. $this->sendData(612, $LNG['fa_no_more_slots']);
      3. }
      4. $fleetArray = array();
      Добавляем

      PHP Source Code

      1. $StayDuration = 0;
      После

      PHP Source Code

      1. case 8:
      2. if(!isModuleAvailable(MODULE_MISSION_RECYCLE)) {
      3. $this->sendData(699, $LNG['sys_module_inactive']);
      4. }
      5. $sql = "SELECT (der_metal + der_crystal) as sum FROM %%PLANETS%% WHERE id = :planetID;";
      6. $totalDebris = $db->selectSingle($sql, array(
      7. ':planetID' => $planetID
      8. ), 'sum');
      9. $recElementIDs = array(219, 209);
      10. $fleetArray = array();
      Display All
      добавляем

      Source Code

      1. $StayDuration = round(1 * 3600, 0);
      Меняем

      PHP Source Code

      1. $fleetStayTime = $fleetStartTime;
      на

      PHP Source Code

      1. $fleetStayTime = $fleetStartTime + $StayDuration;


      В файле class.FleetFunctions.php

      Display Spoiler


      После

      PHP Source Code

      1. elseif(in_array(5, $Missions))
      2. {
      3. $stayBlock = array(1 => 1, 2 => 2, 4 => 4, 8 => 8, 12 => 12, 16 => 16, 32 => 32);
      4. }
      Добавляем


      PHP Source Code

      1. elseif(in_array(8, $Missions))
      2. {
      3. $stayBlock = array(1 => 1);
      4. }
      После


      PHP Source Code

      1. if($fleetResult['fleet_mission'] == 5 && $fleetResult['fleet_mess'] == FLEET_HOLD) {
      2. $fleetEndTime = ($fleetResult['fleet_start_time'] - $fleetResult['start_time']) + TIMESTAMP;
      3. }
      Добавляем

      PHP Source Code

      1. elseif($fleetResult['fleet_mission'] == 8 && $fleetResult['fleet_mess'] == FLEET_HOLD) {
      2. $fleetEndTime = ($fleetResult['fleet_start_time'] - $fleetResult['start_time']) + TIMESTAMP;
      3. }


      В файле class.FlyingFleetsTable.php

      Display Spoiler


      После

      PHP Source Code

      1. $MissionsOK = 5;
      2. if ($fleetRow['fleet_end_stay'] > TIMESTAMP && $fleetRow['fleet_mission'] == $MissionsOK )
      3. $FleetData[$fleetRow['fleet_end_stay'].$fleetRow['fleet_id']] = $this->BuildFleetEventTable($fleetRow, 2);
      Добавляем

      PHP Source Code

      1. if ($fleetRow['fleet_end_stay'] > TIMESTAMP && $fleetRow['fleet_mission'] == 8 )
      2. $FleetData[$fleetRow['fleet_end_stay'].$fleetRow['fleet_id']] = $this->BuildFleetEventTable($fleetRow, 2);


      В файле ShowFleetStep3Page.class.php
      Display Spoiler


      Меняем

      PHP Source Code

      1. if($targetMission == 5 || $targetMission == 11 || $targetMission == 15)
      На

      PHP Source Code

      1. if($targetMission == 5 || $targetMission == 11 || $targetMission == 15 || $targetMission == 8)


      Далее копируем файл RecycleCronjob.class.php из архива в папку \includes\classes\cronjob\

      Потом переходим в админку на страницу "Планировщик задач" жмем создать новую задачу и заполняем поля
      Задача - recycle
      Класс - выбираем RecycleCronjob

      и ставим везде галочку на "Все"

      *если крон не запускается надо будет в базе uni1_cronjob найти наш класс и в поле nextTime добавить текущее время в UNIX формате
      *убедитесь что в файле
      MissionCaseRecycling.class.php Cronjob::execute(9); 9 - это была ид нашей задачи, если у вас задача имеет другой ид поменяйте его в MissionCaseRecycling.class.php
      *если у вас крон не запускается серверно, то могут быть незначительные ошибки в логике переработки, так что рекомендую добавить крон в серверный крон.



      Можете так же добавить отображение работающих переработчиков в галактике.

      *могут быть баги т.к написал мод только что и он особо не тестировался, так что ставьте на свой страх и риск

      *Мод только для 1.8 версии, на других не тестировался


      Буду благодарен если переведете на другие языки.
      Files
      • recycleCron.zip

        (1.74 kB, downloaded 413 times, last: )

      The post was edited 3 times, last by Kaizoku ().

    • Молодца мою идею даже расширил теперь мне проще будет доработать свою . в моей можно при сборе обломков напасть так же задержка но у тебя классно сделано то что привязка сразу от грузоподъемности
    • Проверили работает на ветках 1.9 и 2.0 вроде сбоев нет отрабатывает пока корректно .. дальше будет видать флот в гале выставляется по условиям в tpl я так же добавил возможность атаки на корах стоящих переработчиков .. буду так же проверять... если не будет ошибки дописанный код выложу
    • поправил и удалил - с крона нафик все....он не нужен в кроне ... идет нагрузка на систему больше ... достаточно обработки php и условий что бы данная система работала более гибко
    • мод могу скинуть но вам придется много что в других местах менять.. так как я переписываю изначальный код два мунс и отошел уже далеко с ходу не встанет мое решение хотя оно короткое..