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; } }
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']); }
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; }
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; }
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(); } }