Пример #1
0
 }
 // Now we take the construction of the next unit in the list:
 $started = 0;
 $tries = 0;
 while ($started == 0 && $tries <= 10) {
     $planet['unittrain_actual']++;
     if ($planet['unittrain_actual'] > 10) {
         $planet['unittrain_actual'] = 1;
     }
     // Unit in training
     $t = $planet['unittrainid_' . $planet['unittrain_actual']];
     if ($t < 13 && $t >= 0 && $planet['unittrainnumberleft_' . $planet['unittrain_actual']] > 0) {
         $training_time = $ACTUAL_TICK;
         // If Unit
         if ($t < 7) {
             $training_time += UnitTimeTicksScheduler($t - 1, $planet['research_4'], $planet['user_race']);
         } else {
             switch ($t) {
                 // 3 minute break
                 case 10:
                     $training_time++;
                     break;
                     // 27 minutes break
                 // 27 minutes break
                 case 11:
                     $training_time += 9;
                     break;
                     // 54 minutes break
                 // 54 minutes break
                 case 12:
                     $training_time += 18;
Пример #2
0
 function check_academy_status()
 {
     // Checks if the training queues of a planet are consistent with the structures of the planet itself.
     // It's poorly written and with abuse of the continue, but that day I was so that ...
     $no_academy = false;
     $no_unit_3 = false;
     $no_unit_2 = false;
     $academy_is_working = false;
     $academy_next_tick = 0;
     $sql = 'SELECT unittrainid_1, unittrainid_2, unittrainid_3, unittrainid_4, unittrainid_5,
                    unittrainid_6, unittrainid_7, unittrainid_8, unittrainid_9, unittrainid_10,
                    unittrain_actual, unittrainid_nexttime, building_6, research_4
             FROM planets WHERE planet_id = ' . $this->move['dest'];
     if (!($planet_info = $this->db->queryrow($sql))) {
         $this->log(MV_M_DATABASE, 'Error reading academy queues info of planet <b>' . $this->move['dest'] . '</b>');
     } else {
         $academy_level = $planet_info['building_6'];
         if ($academy_level == 0) {
             $no_academy = true;
         }
         if ($academy_level < 5) {
             $no_unit_2 = true;
         }
         if ($academy_level < 9) {
             $no_unit_3 = true;
         }
         if ($planet_info['unittrain_actual'] != 0) {
             $academy_is_working = true;
         }
         if ($planet_info['unittrainid_nexttime'] != 0) {
             $academy_next_tick = $planet_info['unittrainid_nexttime'];
         }
         // Can't remember the meaning of this...
         if ($no_academy) {
             // No academy at all, so i reset all academy fields. Big overhead but little risks.
             $sql = 'UPDATE planets
                     SET unittrainid_1 = 0, unittrainnumber_1 = 0, unittrainnumberleft_1 = 0, unittrainendless_1 = 0,
                         unittrainid_2 = 0, unittrainnumber_2 = 0, unittrainnumberleft_2 = 0, unittrainendless_2 = 0,
                         unittrainid_3 = 0, unittrainnumber_3 = 0, unittrainnumberleft_3 = 0, unittrainendless_3 = 0,
                         unittrainid_4 = 0, unittrainnumber_4 = 0, unittrainnumberleft_4 = 0, unittrainendless_4 = 0,
                         unittrainid_5 = 0, unittrainnumber_5 = 0, unittrainnumberleft_5 = 0, unittrainendless_5 = 0,
                         unittrainid_6 = 0, unittrainnumber_6 = 0, unittrainnumberleft_6 = 0, unittrainendless_6 = 0,
                         unittrainid_7 = 0, unittrainnumber_7 = 0, unittrainnumberleft_7 = 0, unittrainendless_7 = 0,
                         unittrainid_8 = 0, unittrainnumber_8 = 0, unittrainnumberleft_8 = 0, unittrainendless_8 = 0,
                         unittrainid_9 = 0, unittrainnumber_9 = 0, unittrainnumberleft_9 = 0, unittrainendless_9 = 0,
                         unittrainid_10 = 0, unittrainnumber_10 = 0, unittrainnumberleft_10 = 0, unittrainendless_10 = 0,
                         unittrain_actual = 0, unittrainid_nexttime = 0, unittrain_error = 0
                     WHERE planet_id = ' . $this->move['dest'];
             if (!$this->db->query($sql)) {
                 $this->log(MV_M_DATABASE, 'Error emptying academy working queues of planet <b>' . $this->move['dest'] . '</b>');
             }
         } else {
             $sqlpart = '';
             // Ok, we have to check all the academy slots
             for ($index = 1; $index < 11; $index++) {
                 if ($planet_info['unittrainid_' . $index] == 0) {
                     continue;
                 }
                 if ($planet_info['unittrainid_' . $index] == 2 && $no_unit_2) {
                     // Gotcha! Get out from the queue!
                     $planet_info['unittrainid_' . $index] = 0;
                     $sqlpart .= 'unittrainid_' . $index . ' = 0,
                         unittrainnumber_' . $index . ' = 0,
                         unittrainnumberleft_' . $index . ' = 0,
                         unittrainendless_' . $index . ' = 0,';
                 }
                 if ($planet_info['unittrainid_' . $index] == 3 && $no_unit_3) {
                     // Gotcha! Get out from the queue!
                     $planet_info['unittrainid_' . $index] = 0;
                     $sqlpart .= 'unittrainid_' . $index . ' = 0,
                         unittrainnumber_' . $index . ' = 0,
                         unittrainnumberleft_' . $index . ' = 0,
                         unittrainendless_' . $index . ' = 0,';
                 }
             }
             // There is something to remove from the queue?
             if ($sqlpart != '') {
                 $sql = 'UPDATE planets
                         SET ' . rtrim($sqlpart, ',') . '
                         WHERE planet_id = ' . $this->move['dest'];
                 if (!$this->db->query($sql)) {
                     $this->log(MV_M_DATABASE, 'Error updating planet <b>' . $this->move['dest'] . '</b> academy queues info');
                 }
             }
             // Check the active slot. If the active slot is now empty, go check for the next working slot and make it active.
             $active_slot = $planet_info['unittrain_actual'];
             $tries = 0;
             while ($academy_is_working && $planet_info['unittrainid_' . $active_slot] == 0) {
                 $tries++;
                 if ($tries > 9) {
                     $academy_is_working = false;
                     $sql = 'UPDATE planets
                             SET unittrain_actual = 0, unittrainid_nexttime = 0,
                                 unittrain_error = 0
                             WHERE planet_id = ' . $this->move['dest'];
                     if (!$this->db->query($sql)) {
                         $this->log(MV_M_DATABASE, 'Error clearing OLD academy active slot of planet <b>' . $this->move['dest'] . '</b>');
                     }
                     continue;
                 }
                 $active_slot++;
                 if ($active_slot > 10) {
                     $active_slot = 1;
                 }
                 if ($planet_info['unittrainid_' . $active_slot] == 0) {
                     continue;
                 }
                 $academy_next_tick = $this->CURRENT_TICK + UnitTimeTicksScheduler($planet_info['unittrainid_' . $active_slot], $planet_info['research_4'], $this->dest['user_race']);
                 $sql = 'UPDATE planets
                         SET unittrain_actual = ' . $active_slot . ', unittrainid_nexttime = ' . $academy_next_tick . ',
                             unittrain_error = 0
                         WHERE planet_id = ' . $this->move['dest'];
                 if (!$this->db->query($sql)) {
                     $this->log(MV_M_DATABASE, 'Error updating NEW academy active slot of planet <b>' . $this->move['dest'] . '</b>');
                 }
             }
         }
     }
 }