Пример #1
0
 private function loadUnits()
 {
     if (!is_array($this->aUnits)) {
         $db = Neuron_Core_Database::__getInstance();
         $l = $db->getDataFromQuery($db->customQuery("\n\t\t\t\tSELECT\n\t\t\t\t\t*\n\t\t\t\tFROM\n\t\t\t\t\tsquad_units su\n\t\t\t\tLEFT JOIN\n\t\t\t\t\tunits u ON u.unitId = su.u_id\n\t\t\t\tWHERE\n\t\t\t\t\tsu.s_id = '" . $this->getId() . "'\n\t\t\t"));
         // Load thze items
         $items = $db->getDataFromQuery($db->customQuery("\n\t\t\t\tSELECT\n\t\t\t\t\tsquad_equipment.*\n\t\t\t\tFROM\n\t\t\t\t\tsquad_equipment\n\t\t\t\tWHERE\n\t\t\t\t\tsquad_equipment.s_id = '" . $this->getId() . "'\n\t\t\t"));
         $critItems = array();
         foreach ($items as $v) {
             if (!isset($critItems[$v['u_id']])) {
                 $critItems[$v['u_id']] = array();
             }
             $critItems[$v['u_id']][] = Dolumar_Players_Equipment::getFromId($v['e_id']);
         }
         $o = array();
         foreach ($l as $v) {
             $i = $v['unitId'];
             $o[$i] = Dolumar_Units_Unit::getUnitFromName($v['unitName'], $this->getVillage()->getRace(), $this->getVillage());
             $isMoving = $this->isMoving();
             $o[$i]->addAmount($v['s_amount'], $isMoving ? 0 : $v['s_amount'], $v['s_amount']);
             $o[$i]->setSquad($this);
             // Set slot ID
             $o[$i]->setDefaultSlot($v['s_slotId'], $v['s_priority']);
             if (isset($critItems[$v['u_id']])) {
                 foreach ($critItems[$v['u_id']] as $v) {
                     $o[$i]->addEquipment($v);
                 }
             }
             // Don't see why this would be required, but just to be sure...
             // $o[$i]->getStats ();
         }
         $this->aUnits = $o;
     }
 }
Пример #2
0
 private function getUnitLog($row)
 {
     $objVillage = Dolumar_Players_Village::getVillage($row['l_vid']);
     $unitname = !empty($row['unitName']) ? $row['unitName'] : $row['l_subId'];
     $objUnit = Dolumar_Units_Unit::getUnitFromName($unitname, $objVillage->getRace(), $objVillage);
     if ($objUnit) {
         $unitname = $objUnit->getName();
     }
     return array('unit' => $unitname, 'amount' => $row['lt_amount']);
 }
Пример #3
0
 private function getCheckedAvailableUnits()
 {
     // Loop trough units
     $units = array();
     foreach ($this->getAvailableUnits() as $v) {
         // Get the unit
         $unit = Dolumar_Units_Unit::getUnitFromName($v, $this->getVillage()->getRace(), $this->getVillage());
         if ($unit->canTrainUnit()) {
             $units[] = $unit;
         }
     }
     return $units;
 }
Пример #4
0
 public function getGuards()
 {
     $a = array();
     $a[0] = Dolumar_Units_Unit::getUnitFromName('Guards', $this->getVillage()->getRace(), $this->getVillage());
     $a[0]->addAmount(10, 10, 10);
     return $a;
 }
Пример #5
0
 private function loadUnits($now = NOW)
 {
     $profiler = Neuron_Profiler_Profiler::__getInstance();
     if (!isset($this->myUnits[$now])) {
         $profiler->start('Loading units');
         $profiler->start('Loading units from database');
         $db = Neuron_Core_Database::__getInstance();
         $dbi = Neuron_DB_Database::getInstance();
         $l = $db->getDataFromQuery($db->customQuery("\n\t\t\t\tSELECT\n\t\t\t\t\tu.*,\n\t\t\t\t\tunits.unitName,\n\t\t\t\t\tSUM(squad_units.s_amount) AS amountInSquads\n\t\t\t\tFROM\n\t\t\t\t\tvillages_units u\n\t\t\t\tLEFT JOIN\n\t\t\t\t\tunits ON u.unitId = units.unitId\n\t\t\t\tLEFT JOIN\n\t\t\t\t\tsquad_units ON u.unitId = squad_units.u_id AND squad_units.v_id = u.vid\n\t\t\t\tWHERE\n\t\t\t\t\tu.vid = " . $this->getId() . "\n\t\t\t\tGROUP BY uid\n\t\t\t"));
         $profiler->stop();
         $profiler->start('Loading squads in battle');
         // Load thze units in thze battle
         $bts = $db->getDataFromQuery($db->customQuery("\n\t\t\t\tSELECT\n\t\t\t\t\t*\n\t\t\t\tFROM\n\t\t\t\t\tbattle_squads\n\t\t\t\tLEFT JOIN\n\t\t\t\t\tsquad_units ON battle_squads.bs_squadId = squad_units.s_id\n\t\t\t\tWHERE\n\t\t\t\t\tbattle_squads.bs_vid = " . $this->getId() . "\n\t\t\t"));
         $squadsIB = array();
         foreach ($bts as $bt) {
             if (isset($squadsIB[$bt['u_id']])) {
                 $squadsIB[$bt['u_id']] += $bt['s_amount'];
             } else {
                 $squadsIB[$bt['u_id']] = $bt['s_amount'];
             }
         }
         $profiler->stop();
         $profiler->start('Loading supporting squads.');
         // Load thze squads that are not at home.
         $query = "\n\t\t\t\tSELECT\n\t\t\t\t\tsquad_units.u_id,\n\t\t\t\t\tsquad_units.s_amount\n\t\t\t\tFROM\n\t\t\t\t\tvillages_squads\n\t\t\t\tLEFT JOIN\n\t\t\t\t\tsquad_units ON villages_squads.s_id = squad_units.s_id\n\t\t\t\tLEFT JOIN\n\t\t\t\t\tsquad_commands ON (villages_squads.s_id = squad_commands.s_id \n\t\t\t\t\t\tAND squad_commands.s_end > FROM_UNIXTIME(" . NOW . "))\n\t\t\t\tWHERE\n\t\t\t\t\t(\n\t\t\t\t\t\tvillages_squads.v_id = {$this->getId()} AND\n\t\t\t\t\t\tvillages_squads.s_village != 0 AND\n\t\t\t\t\t\tvillages_squads.s_village != {$this->getId()}\n\t\t\t\t\t) AND squad_commands.s_action IS NULL\n\t\t\t";
         $supportingdb = $dbi->query($query);
         $supporting = array();
         foreach ($supportingdb as $v) {
             if (isset($supporting[$v['u_id']])) {
                 $supporting[$v['u_id']] += $v['s_amount'];
             } else {
                 $supporting[$v['u_id']] = $v['s_amount'];
             }
         }
         $profiler->stop();
         $profiler->start('Counting the units');
         $o = array();
         foreach ($l as $v) {
             // Calculate the amount (for training)
             if ($v['endTraining'] < $now) {
                 $amount = $v['amount'] - $v['killedAmount'];
             } else {
                 $duration = max(1, $v['endTraining'] - $v['startTraining']);
                 $procent = max(0, $now - $v['startTraining']) / $duration;
                 $amount = floor($procent * $v['amount']) - $v['killedAmount'];
             }
             $toFeed = $amount;
             // Make new class + withdraw units in combat
             if (!isset($o[$v['unitName']])) {
                 $o[$v['unitName']] = Dolumar_Units_Unit::getUnitFromName($v['unitName'], $this->getRace(), $this);
                 // Calculate the amount of "gone" troops".
                 $away = isset($supporting[$v['unitId']]) ? $supporting[$v['unitId']] : 0;
                 $toFeed -= $away;
                 if (isset($squadsIB[$v['unitId']])) {
                     $available = $amount - $squadsIB[$v['unitId']];
                 } else {
                     $available = $amount;
                 }
                 $o[$v['unitName']]->putInSquads($v['amountInSquads']);
             } else {
                 $available = $amount;
                 $inSquads = 0;
             }
             // Increase amounts
             if ($v['village'] == $this->getId()) {
                 $o[$v['unitName']]->addAmount($available, $toFeed, $amount);
             } else {
                 $o[$v['unitName']]->addAmount(0, $toFeed, $amount);
             }
             // Unit capacity counter
             if (isset($this->unitCapacityCount[$v['buildingId']])) {
                 $this->unitCapacityCount[$v['buildingId']]['current'] += $amount * $o[$v['unitName']]->getRequiredSpace();
                 $this->unitCapacityCount[$v['buildingId']]['absolute'] += ($v['amount'] - $v['killedAmount']) * $o[$v['unitName']]->getRequiredSpace();
             } else {
                 $this->unitCapacityCount[$v['buildingId']] = array('current' => $amount * $o[$v['unitName']]->getRequiredSpace(), 'absolute' => ($v['amount'] - $v['killedAmount']) * $o[$v['unitName']]->getRequiredSpace());
             }
         }
         $profiler->stop();
         $this->myUnits[$now] = $o;
         $profiler->stop();
     }
 }