foreach ($arrRequiredSkills as $iSkill => $iValue) { if ((double) $iValue > (double) $arrSkills[$iSkill]) { exit(json::encode(array(array('msg', 'You\'re not skilled enough yet!')))); } } $arrCosts = db_select_fields('d_r_d_costs', 'resource_id,amount', '0 < amount AND r_d_id = ' . (int) $rd['id']); foreach ($arrCosts as &$c) { $c = max(0, applyRDChange('r_d_costs', (int) $c)); unset($c); } if ($HAVOC_RESDEV) { $rd['eta'] = max(0, (int) $HAVOC_RESDEV_ETA); } else { $rd['eta'] = applyRDChange('r_d_eta', (int) $rd['eta']); } if (0 === array_sum($arrCosts) || db_transaction_update($arrCosts, 'resource_id', 'amount')) { $arrInsert = array('r_d_id' => (int) $rd['id'], 'planet_id' => PLANET_ID, 'eta' => (int) $rd['eta']); db_insert('planet_r_d', $arrInsert); // SUCCESS exit(json::encode(array(array('eval', 'document.location.reload();')))); } // FAILED exit(json::encode(array(array('msg', 'You probably don\'t have enough resources!')))); } // END if ( isset($_GET['r_d_id']) ) _header(); ?> <div class="header"><?php echo $szName; if ($HAVOC_RESDEV) {
db_update('planet_resources', 'amount = 500000', 'planet_id = 1'); // PRE echo 'Pre: '; print_r(db_select_fields('d_resources r, planet_resources p', 'resource_id,amount', 'p.resource_id = r.id AND p.planet_id = 1')); echo "\n"; /**/ exit; /**/ $arrUpdates = array(1 => 300000, 2 => 50, 3 => 50); function db_transaction_update($f_arrUpdates, $f_szIfField, $f_szUpdateField) { db_query("BEGIN;"); $szIfClause = '__N__'; $szIfClause0 = 'IF(' . $f_szIfField . '=__X__,__Y__,__N__)'; foreach ($f_arrUpdates as $x => $y) { $szIfClause = str_replace('__N__', str_replace('__X__', $x, str_replace('__Y__', $y, $szIfClause0)), $szIfClause); } $szIfClause = str_replace('__N__', '0', $szIfClause); db_query('UPDATE planet_resources SET ' . $f_szUpdateField . ' = ' . $f_szUpdateField . ' - ' . $szIfClause . ' WHERE ' . $f_szUpdateField . ' >= ' . $szIfClause . ' AND planet_id = 1;'); if (count($f_arrUpdates) === (int) db_affected_rows()) { db_query("COMMIT;"); return true; } db_query("ROLLBACK;"); return false; } var_dump(db_transaction_update($arrUpdates, 'resource_id', 'amount')); echo "\n"; // POST echo 'Post: '; print_r(db_select_fields('d_resources r, planet_resources p', 'resource_id,amount', 'p.resource_id = r.id AND p.planet_id = 1'));
function addProductions($f_szType, $f_arrUnits) { global $GAMEPREFS; $arrUnits = array(); foreach ($f_arrUnits as $iUnit => $iAmount) { if (0 < (int) trim($iAmount) && count($u = db_select('d_all_units u, planet_r_d p', 'u.id = ' . $iUnit . ' AND p.r_d_id = u.r_d_required_id AND p.eta = 0 AND p.planet_id = ' . PLANET_ID . ' AND u.T IN (\'' . str_replace(',', "','", $f_szType) . "')"))) { $arrUnit = $u[0]; $arrAmounts = array((int) $iAmount); $arrFunds = db_select_fields('planet_resources', 'resource_id,amount', 'planet_id = ' . PLANET_ID); $arrUnitCosts = db_select_fields('d_unit_costs', 'resource_id,amount', 'unit_id = ' . $iUnit . ' AND 0 < amount'); foreach ($arrUnitCosts as $iResourceId => $iCosts) { $arrAmounts[] = floor($arrFunds[$iResourceId] / $iCosts); } $iAmount = min($arrAmounts); if (0 < $iAmount) { $arrCosts = array(); foreach ($arrUnitCosts as $iResourceId => $iCosts) { $arrCosts[$iResourceId] = $iAmount * $iCosts; } if (0 === array_sum($arrCosts) || db_transaction_update($arrCosts, 'resource_id', 'amount')) { $arrInsert = array('planet_id' => PLANET_ID, 'unit_id' => $iUnit, 'eta' => (int) $GAMEPREFS['havoc_production'] ? 0 : (int) $arrUnit['build_eta'], 'amount' => $iAmount); db_insert('planet_production', $arrInsert); } } } } }