include 'core/game.php'; include 'locales/' . $_SESSION[$shortTitle . 'User']['locale'] . '/gl.php'; if (isset($_POST['attackerGroupUnitIds'], $_POST['defenderGroupUnitIds'])) { foreach ($_POST as $key => $value) { if (!in_array($key, array('attackerGroupUnitIds', 'defenderGroupUnitIds', 'attackerGroups', 'defenderGroups', 'attackerFocus', 'defenderFocus'))) { $_POST[$key] = misc::clean($value, 'numeric'); } else { if (!in_array($key, array('attackerFocus', 'defenderFocus'))) { $nr = count($_POST[$key]); for ($i = 0; $i < $nr; $i++) { $_POST[$key][$i] = misc::clean($_POST[$key][$i], 'numeric'); } } else { $_POST[$key] = misc::clean($value); } } } $data = array(); $data['input']['attacker']['focus'] = $_POST['attackerFocus']; $data['input']['attacker']['faction'] = $_POST['attackerFaction']; foreach ($_POST['attackerGroupUnitIds'] as $key => $unitId) { $data['input']['attacker']['groups'][$key] = array('unitId' => $unitId, 'quantity' => $_POST['attackerGroups'][$key]); } $data['input']['defender']['focus'] = $_POST['defenderFocus']; $data['input']['defender']['faction'] = $_POST['defenderFaction']; foreach ($_POST['defenderGroupUnitIds'] as $key => $unitId) { $data['input']['defender']['groups'][$key] = array('unitId' => $unitId, 'quantity' => $_POST['defenderGroups'][$key]); } $data = node::doCombat($data); } include 'templates/' . $_SESSION[$shortTitle . 'User']['template'] . '/simulator.php';
public function checkCombat($time) { // if($this->checkingCombat){return;} // else{$this->checkingCombat = 1;} global $db, $game, $ui; $db->query('start transaction'); $this->getQueue('combat'); $ok = 1; foreach ($this->queue['combat'] as $combat) { $combat['end'] = $combat['start'] + floor($combat['duration'] * 60); if ($combat['end'] <= $time) { $otherNode = new node(); if ($combat['sender'] == $this->data['id']) { $nodes = array('attacker' => 'this', 'defender' => 'otherNode'); $status = $otherNode->get('id', $combat['recipient']); } else { $nodes = array('attacker' => 'otherNode', 'defender' => 'this'); $status = $otherNode->get('id', $combat['sender']); } if (!$combat['stage']) { if ($status == 'done') { $data = array(); $data['input']['attacker']['focus'] = $combat['focus']; $data['input']['attacker']['faction'] = ${$nodes}['attacker']->data['faction']; $otherResult = $db->query('select * from combat_units where combat="' . $combat['id'] . '"'); while ($group = db::fetch($otherResult)) { $data['input']['attacker']['groups'][] = array('unitId' => $group['id'], 'quantity' => $group['value']); } $data['input']['defender']['focus'] = ${$nodes}['defender']->data['focus']; $data['input']['defender']['faction'] = ${$nodes}['defender']->data['faction']; $otherNode->getUnits(); foreach (${$nodes}['defender']->units as $group) { $data['input']['defender']['groups'][] = array('unitId' => $group['id'], 'quantity' => $group['value']); } $data = node::doCombat($data); $captureNode = true; ${$nodes}['defender']->getResources(); foreach ($data['output']['defender']['groups'] as $key => $group) { $db->query('update units set value="' . $group['quantity'] . '" where node="' . ${$nodes}['defender']->data['id'] . '" and id="' . $group['unitId'] . '"'); if ($db->affected_rows() == -1) { $ok = 0; } $lostCount = $data['input']['defender']['groups'][$key]['quantity'] - $group['quantity']; if ($lostCount > 0) { $upkeepResource = $game['units'][${$nodes}['defender']->data['faction']][$group['unitId']]['upkeepResource']; $upkeep = $game['units'][${$nodes}['defender']->data['faction']][$group['unitId']]['upkeep']; ${$nodes}['defender']->resources[$upkeepResource]['value'] += $upkeep * $lostCount; $db->query('update resources set value="' . ${$nodes}['defender']->resources[$upkeepResource]['value'] . '" where node="' . ${$nodes}['defender']->data['id'] . '" and id="' . $upkeepResource . '"'); if ($db->affected_rows() == -1) { $ok = 0; } } if ($group['quantity']) { $captureNode = false; } } foreach ($data['output']['attacker']['groups'] as $key => $group) { $db->query('update combat_units set value="' . $group['quantity'] . '" where combat="' . $combat['id'] . '" and id="' . $group['unitId'] . '"'); if ($db->affected_rows() == -1) { $ok = 0; } } $start = strftime('%Y-%m-%d %H:%M:%S', $combat['end']); $db->query('update combat set stage=1, start="' . $start . '" where id="' . $combat['id'] . '"'); if ($db->affected_rows() == -1) { $ok = 0; } if ($captureNode) { $db->query('update nodes set user="******" where id="' . ${$nodes}['defender']->data['id'] . '"'); if ($db->affected_rows() == -1) { $ok = 0; } } //send reports; to be ported to an addon (remember to remove global "$ui") if ($data['output']['attacker']['winner']) { $attackerOutcome = $ui['won']; } else { $attackerOutcome = $ui['lost']; } if ($data['output']['defender']['winner']) { $defenderOutcome = $ui['won']; } else { $defenderOutcome = $ui['lost']; } $msgBody = '<div style="text-align: center;">'; foreach ($data['output']['attacker']['groups'] as $key => $group) { $msgBody .= '<div class="cell"><div class="unitBlock"><img class="unitBlock" src="templates/default/images/units/' . ${$nodes}['attacker']->data['faction'] . '/' . $group['unitId'] . '.png"></div><div class="unitBlock">' . $data['input']['attacker']['groups'][$key]['quantity'] . '</div><div class="unitBlock">' . $group['quantity'] . '</div></div>'; } $msgBody .= '</div><div style="text-align: center;">' . $attackerOutcome . '</div><div style="text-align: center;">-----</div><div style="text-align: center;">' . $defenderOutcome . '</div><div style="text-align: center;">'; foreach ($data['output']['defender']['groups'] as $key => $group) { if ($data['input']['defender']['groups'][$key]['quantity']) { $msgBody .= '<div class="cell"><div class="unitBlock">' . $group['quantity'] . '</div><div class="unitBlock">' . $data['input']['defender']['groups'][$key]['quantity'] . '</div><div class="unitBlock"><img class="unitBlock" src="templates/default/images/units/' . ${$nodes}['defender']->data['faction'] . '/' . $group['unitId'] . '.png"></div></div>'; } } $msgBody .= '</div>'; $msgBody = $db->real_escape_string($msgBody); $attackerUser = new user(); if ($attackerUser->get('id', ${$nodes}['attacker']->data['user']) == 'done') { $attackerUser->getPreferences('name'); if ($attackerUser->preferences['combatReports']) { $msg = new message(); $msg->data['sender'] = $attackerUser->data['name']; $msg->data['recipient'] = $attackerUser->data['name']; $msg->data['subject'] = $ui['combatReport'] . ' - ' . ${$nodes}['defender']->data['name']; $msg->data['body'] = $msgBody; $msg->data['viewed'] = 0; $msg->add(); } } $defenderUser = new user(); if ($defenderUser->get('id', ${$nodes}['defender']->data['user']) == 'done') { $defenderUser->getPreferences('name'); if ($defenderUser->preferences['combatReports']) { $msg = new message(); $msg->data['sender'] = $defenderUser->data['name']; $msg->data['recipient'] = $defenderUser->data['name']; $msg->data['subject'] = $ui['combatReport'] . ' - ' . ${$nodes}['defender']->data['name']; $msg->data['body'] = $msgBody; $msg->data['viewed'] = 0; $msg->add(); } } //\send reports } } else { ${$nodes}['attacker']->getResources(); $result = $db->query('select * from combat_units where combat="' . $combat['id'] . '"'); while ($group = db::fetch($result)) { $db->query('update units set value="' . $group['value'] . '" where node="' . $combat['sender'] . '" and id="' . $group['id'] . '"'); if ($db->affected_rows() == -1) { $ok = 0; } $upkeepResource = $game['units'][${$nodes}['attacker']->data['faction']][$group['id']]['upkeepResource']; $upkeep = $game['units'][${$nodes}['attacker']->data['faction']][$group['id']]['upkeep']; $this->resources[$upkeepResource]['value'] -= $upkeep * $group['value']; $db->query('update resources set value="' . ${$nodes}['attacker']->resources[$upkeepResource]['value'] . '" where node="' . ${$nodes}['attacker']->data['id'] . '" and id="' . $upkeepResource . '"'); if ($db->affected_rows() == -1) { $ok = 0; } } $db->query('delete from combat_units where combat="' . $combat['id'] . '"'); if ($db->affected_rows() == -1) { $ok = 0; } $db->query('delete from combat where id="' . $combat['id'] . '"'); if ($db->affected_rows() == -1) { $ok = 0; } } } } if ($ok) { $db->query('commit'); } else { $db->query('rollback'); } }