function acceptAgreement($getPage_connection2) { if ($_SESSION["action"] == "accept_agreement") { if ($_SESSION["action_id"] > 0) { $agreementInfo1 = getAgreementInfo($getPage_connection2, $_SESSION["action_id"]); if (($agreementInfo1["toNation"] == $_SESSION["nation_id"] || $agreementInfo1["fromNation"] == $_SESSION["nation_id"]) && $agreementInfo1["status"] == 0) { if ($agreementInfo1["policy"] >= 0 && $agreementInfo1["policy"] <= 10) { $tradeInfoToNation = getTradeInfo($getPage_connection2, $agreementInfo1["toNation"]); $tradeInfoFromNation = getTradeInfo($getPage_connection2, $agreementInfo1["fromNation"]); if ($tradeInfoFromNation["limit"] > count($tradeInfoFromNation["routes"]) || $tradeInfoToNation["limit"] > count($tradeInfoToNation["routes"])) { $_SESSION["warning_message"] = "Cannot complete action: no trade route available."; } else { setAgreementInfo($getPage_connection2, $agreementInfo1["id"], $agreementInfo1["policy"], $agreementInfo1["turns"], $agreementInfo1["counter"], $agreementInfo1["toNation"], $agreementInfo1["fromNation"], 1); $new_index = count($tradeInfoFromNation["routes"]); $new_routes = $tradeInfoFromNation["routes"]; $new_routes[$new_index] = $agreementInfo1["id"]; setTradeInfo($getPage_connection2, $tradeInfoFromNation["id"], $tradeInfoFromNation["nation"], $new_routes, $tradeInfoFromNation["limit"]); $new_index = count($tradeInfoToNation["routes"]); $new_routes = $tradeInfoToNation["routes"]; $new_routes[$new_index] = $agreementInfo1["id"]; setTradeInfo($getPage_connection2, $tradeInfoToNation["id"], $tradeInfoToNation["nation"], $new_routes, $tradeInfoToNation["limit"]); $_SESSION["success_message"] = "Agreement has been accepted successfully!"; } } else { $_SESSION["warning_message"] = "Cannot complete action: agreement is invalid."; } // else } else { $_SESSION["warning_message"] = "Cannot complete action: current nation is not involved in selected agreement."; } // else } else { $_SESSION["warning_message"] = "Cannot complete action: invalid agreement selected."; } // else } else { $_SESSION["warning_message"] = "Cannot complete action: invalid action."; } // else }
function processOffer($getPage_connection2, $offerInfo1) { $payup = false; if ($offerInfo1["givingItems"][0] > 0 || $offerInfo1["receivingItems"][0] > 0) { // toNation: the target nation of action // fromNation: the source nation of action $toNationInfo = getNationInfo($getPage_connection2, $offerInfo1["toNation"]); $fromNationInfo = getNationInfo($getPage_connection2, $offerInfo1["fromNation"]); $notEnough = array(0 => false, 1 => ""); for ($zz = 0; $zz < count($toNationInfo["goods"]); $zz++) { $new_to_goods = $toNationInfo["goods"][$zz]; } // for for ($zz = 0; $zz < count($toNationInfo["resources"]); $zz++) { $new_to_resources = $toNationInfo["resources"][$zz]; } // for $new_to_food = $toNationInfo["food"]; $new_to_money = $toNationInfo["money"]; for ($zz = 0; $zz < count($fromNationInfo["goods"]); $zz++) { $new_from_goods = $fromNationInfo["goods"][$zz]; } // for for ($zz = 0; $zz < count($fromNationInfo["resources"]); $zz++) { $new_from_resources = $fromNationInfo["resources"][$zz]; } // for $new_from_food = $fromNationInfo["food"]; $new_from_money = $fromNationInfo["money"]; if ($offerInfo1["givingItems"][0] > 0) { for ($z = 0; $z < count($offerInfo1["givingItems"]); $z++) { $new_bonus = 1; for ($y = 0; $y * 10 > $offerInfo1["givingQuantities"][$z]; $y++) { $new_bonus = $y + $new_bonus; } // for // set new sell strength if ($offerInfo1["givingTypes"][$z] == "goods") { $itemInfo1 = getGoodsInfo($getPage_connection2, $offerInfo1["givingItems"][$z]); $new_buyStrength = $itemInfo1["buyStrength"]; $new_sellStrength = $itemInfo1["sellStrength"] + $new_bonus; setGoodsInfo($getPage_connection2, $itemInfo1["id"], $itemInfo1["name"], $itemInfo1["productionRequired"], $itemInfo1["resourceTypesRequired"], $itemInfo1["resourceQuantitiesRequired"], $itemInfo1["improvementTypesRequired"], $itemInfo1["improvementQuantitiesRequired"], $itemInfo1["improvementLevelRequired"], $new_buyStrength, $new_sellStrength); for ($zz = 0; $zz < count($fromNationInfo["goods"]); $zz++) { if ($offerInfo1["givingQuantities"][$z] <= $fromNationInfo["goods"][$zz]) { $new_to_goods[$zz] = $toNationInfo["goods"][$zz] + $offerInfo1["givingQuantities"][$z]; $new_from_goods[$zz] = $fromNationInfo["goods"][$zz] - $offerInfo1["givingQuantities"][$z]; } else { $notEnough[0] = true; $notEnough[1] = "offer"; break; } // else } // for } else { if ($offerInfo1["givingTypes"][$z] == "resources") { $itemInfo1 = getResourceTypeInfo($getPage_connection2, $offerInfo1["givingItems"][$z]); $new_buyStrength = $itemInfo1["buyStrength"]; $new_sellStrength = $itemInfo1["sellStrength"] + $new_bonus; setResourceTypeInfo($getPage_connection2, $itemInfo1["id"], $itemInfo1["name"], $itemInfo1["incompatibleWith"], $itemInfo1["image"], $new_buyStrength, $new_sellStrength); for ($zz = 0; $zz < count($fromNationInfo["resources"]); $zz++) { if ($offerInfo1["givingQuantities"][$z] <= $fromNationInfo["resources"][$zz]) { $new_to_resources[$zz] = $toNationInfo["resources"][$zz] + $offerInfo1["givingQuantities"][$z]; $new_from_resources[$zz] = $fromNationInfo["resources"][$zz] - $offerInfo1["givingQuantities"][$z]; } else { $notEnough[0] = true; $notEnough[1] = "offer"; break; } // else } // for } else { if ($offerInfo1["givingQuantities"][$z] <= $fromNationInfo["money"]) { $new_to_money = $toNationInfo["money"] + $offerInfo1["givingQuantities"][$z]; $new_from_money = $fromNationInfo["money"] - $offerInfo1["givingQuantities"][$z]; } else { $notEnough[0] = true; $notEnough[1] = "offer"; break; } // else } } // else } // for } // if if ($offerInfo1["receivingItems"][0] > 0) { for ($z = 0; $z < count($offerInfo1["receivingItems"]); $z++) { // set new buy strength if ($offerInfo1["receivingTypes"][$z] == "goods") { $itemInfo1 = getGoodsInfo($getPage_connection2, $offerInfo1["receivingItems"][$z]); $new_buyStrength = $itemInfo1["buyStrength"] + $new_bonus; $new_sellStrength = $itemInfo1["sellStrength"]; setGoodsInfo($getPage_connection2, $itemInfo1["id"], $itemInfo1["name"], $itemInfo1["productionRequired"], $itemInfo1["resourceTypesRequired"], $itemInfo1["resourceQuantitiesRequired"], $itemInfo1["improvementTypesRequired"], $itemInfo1["improvementQuantitiesRequired"], $itemInfo1["improvementLevelRequired"], $new_buyStrength, $new_sellStrength); for ($zz = 0; $zz < count($fromNationInfo["goods"]); $zz++) { if ($offerInfo1["givingQuantities"][$z] <= $fromNationInfo["goods"][$zz]) { $new_to_goods[$zz] = $toNationInfo["goods"][$zz] - $offerInfo1["givingQuantities"][$z]; $new_from_goods[$zz] = $fromNationInfo["goods"][$zz] + $offerInfo1["givingQuantities"][$z]; } else { $notEnough[0] = true; $notEnough[1] = "demand"; break; } // else } // for } else { if ($offerInfo1["receivingTypes"][$z] == "resources") { $itemInfo1 = getResourceTypeInfo($getPage_connection2, $offerInfo1["receivingItems"][$z]); $new_buyStrength = $itemInfo1["buyStrength"] + $new_bonus; $new_sellStrength = $itemInfo1["sellStrength"]; setResourceTypeInfo($getPage_connection2, $itemInfo1["id"], $itemInfo1["name"], $itemInfo1["incompatibleWith"], $itemInfo1["image"], $new_buyStrength, $new_sellStrength); for ($zz = 0; $zz < count($fromNationInfo["resources"]); $zz++) { if ($offerInfo1["givingQuantities"][$z] <= $fromNationInfo["resources"][$zz]) { $new_to_resources[$zz] = $toNationInfo["resources"][$zz] - $offerInfo1["givingQuantities"][$z]; $new_from_resources[$zz] = $fromNationInfo["resources"][$zz] + $offerInfo1["givingQuantities"][$z]; } else { $notEnough[0] = true; $notEnough[1] = "offer"; break; } // else } // for } else { if ($offerInfo1["receivingTypes"][$z] == "food") { if ($offerInfo1["receivingQuantities"][$z] <= $toNationInfo["food"]) { $new_to_food = $toNationInfo["food"] - $offerInfo1["receivingQuantities"][$z]; $new_from_food = $fromNationInfo["food"] + $offerInfo1["receivingQuantities"][$z]; } else { $notEnough[0] = true; $notEnough[1] = "demand"; break; } // else } else { if ($offerInfo1["receivingQuantities"][$z] <= $toNationInfo["money"]) { $new_to_money = $toNationInfo["money"] - $offerInfo1["receivingQuantities"][$z]; $new_from_money = $fromNationInfo["money"] + $offerInfo1["receivingQuantities"][$z]; } else { $notEnough[0] = true; $notEnough[1] = "demand"; break; } // else } } } // else } // for } // if if ($notEnough[0] === false) { // give items setNationInfo($getPage_connection2, $toNationInfo["id"], $toNationInfo["name"], $toNationInfo["home"], $toNationInfo["formal"], $toNationInfo["flag"], $toNationInfo["production"], $new_to_money, $toNationInfo["debt"], $toNationInfo["happiness"], $new_to_food, $toNationInfo["authority"], $toNationInfo["authorityChanged"], $toNationInfo["economy"], $toNationInfo["economyChanged"], $toNationInfo["organizations"], $toNationInfo["invites"], $new_to_goods, $new_to_resources, $toNationInfo["population"], $toNationInfo["strike"]); // receive items setNationInfo($getPage_connection2, $fromNationInfo["id"], $fromNationInfo["name"], $fromNationInfo["home"], $fromNationInfo["formal"], $fromNationInfo["flag"], $fromNationInfo["production"], $new_from_money, $fromNationInfo["debt"], $fromNationInfo["happiness"], $new_from_food, $fromNationInfo["authority"], $fromNationInfo["authorityChanged"], $fromNationInfo["economy"], $fromNationInfo["economyChanged"], $fromNationInfo["organizations"], $fromNationInfo["invites"], $new_from_goods, $new_from_resources, $fromNationInfo["population"], $fromNationInfo["strike"]); // set offer status setOfferInfo($getPage_connection2, $_SESSION["action_id"], $offerInfo1["fromNation"], $offerInfo1["toNation"], $offerInfo1["givingItems"], $offerInfo1["receivingItems"], $offerInfo1["givingQuantities"], $offerInfo1["receivingQuantities"], $offerInfo1["givingTypes"], $offerInfo1["receivingTypes"], $offerInfo1["turns"], $offerInfo1["counter"], 1); } else { $payup = true; } // else } else { } // else // if trade is not completed in full, freeze the route for the nation at fault if ($payup === true) { // who's responsible? // target nation's fault if ($notEnough[1] == "demand") { for ($x = 0; $x < count($toTradeInfo["offers"]); $x++) { $new_worth = $toTradeInfo["worth"]; $new_worth[$x] = 0; setTradeInfo($getPage_connection2, $toTradeInfo["id"], $toTradeInfo["nation"], $toTradeInfo["routes"], $new_worth, $toTradeInfo["offers"], $toTradeInfo["limit"]); } // for // source nation's fault } else { for ($x = 0; $x < count($fromTradeInfo["offers"]); $x++) { $new_worth = $fromTradeInfo["worth"]; $new_worth[$x] = 0; setTradeInfo($getPage_connection2, $fromTradeInfo["id"], $fromTradeInfo["nation"], $fromTradeInfo["routes"], $new_worth, $fromTradeInfo["offers"], $fromTradeInfo["limit"]); } // for } // else } // if }
function updateNations($getPage_connection2) { // main player sequence $_SESSION["scriptOutput"] = "<br /><br />Running main sequence...<br />"; if ($stmt = $getPage_connection2->prepare("SELECT id FROM nations ORDER BY id ASC")) { $stmt->execute(); $stmt->store_result(); $stmt->bind_result($r_result); while ($stmt->fetch()) { $next_nations = $r_result; $_SESSION["scriptOutput"] .= "<br />Setup nation...<br />"; $nationInfoW = getNationInfo($getPage_connection2, $next_nations); $tradeInfoW = getTradeInfo($getPage_connection2, $next_nations); $formula = 0.0; $tax = 0.0; $new_production = 0; $new_money = $nationInfoW["money"]; $new_food = $nationInfoW["food"]; $new_happiness = 0.0; $new_goods = $nationInfoW["goods"]; $new_resources = $nationInfoW["resources"]; $new_limit = $tradeInfoW["limit"]; $new_routes = array(0 => 0); $new_worth = array(0 => 0); $old_population = $nationInfoW["population"]; $new_population = 0.0; $foreignTradePercent = 0.0; $productionPercent = 0.0; $efficiencyPercent = 0.0; $happinessPenalty = 0.0; $money_upkeep = 0.0; $food_upkeep = 0.0; $new_debt = $nationInfoW["debt"]; $money_debt = 0.0; $food_debt = 0.0; $productionPercent = $nationInfoW["economy"] * 10; $foreignTradePercent = 100 - $productionPercent; $efficiencyPercent = $nationInfoW["authority"] * 10; $happinessPenalty = $nationInfoW["authority"] * 5; $productionInfoW = getProductionInfo($getPage_connection2, $next_nations); $using_production = 0.0; $used_production = $using_production; $new_prod = $new_goods; $new_strike = $nationInfoW["strike"]; $new_tilesOwned = 0; $tradeCount = 0; $limit_allTilesOwned = 0; if ($stmt1 = $getPage_connection2->prepare("SELECT COUNT(id) FROM tilesmap WHERE owner=?")) { $stmt1->bind_param("i", $next_nations); $stmt1->execute(); $stmt1->bind_result($r_result); $stmt1->fetch(); $limit_allTilesOwned = $r_result; $stmt1->close(); } else { $endTurnFailed = "failed"; } // else $limit_allImprovements = 0; if ($stmt1 = $getPage_connection2->prepare("SELECT COUNT(id) FROM improvementsmap")) { $stmt1->execute(); $stmt1->bind_result($r_result); $stmt1->fetch(); $limit_allImprovements = $r_result; $stmt1->close(); } else { $endTurnFailed = "failed"; } // else /******************************** Base Additions (including revenue) from improvements, tiles, etc. ********************************/ // get tiles info for production/claims/bonus addition $_SESSION["scriptOutput"] .= "Get tiles info for production/claims/bonus addition...<br />"; if ($stmt1 = $getPage_connection2->prepare("SELECT id FROM tilesmap ORDER BY id ASC")) { $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($r_result); while ($stmt1->fetch()) { $next_tiles = $r_result; $tileInfoW = getTileInfoByID($getPage_connection2, $next_tiles); if ($tileInfoW["owner"] == $next_nations) { // add claim strength if claim is dominant and tile is controlled $claimsStateW = checkClaimsState($getPage_connection2, $tileInfoW, $next_nations); if ($claimsStateW == 1) { for ($e = 0; $e < count($tileInfoW["claims"]); $e++) { $claimInfoW = getClaimInfo($getPage_connection2, $tileInfoW["claims"][$e]); if ($claimInfoW["owner"] == $next_nations) { if ($claimInfoW["strength"] > 0) { $bonus_new_strength = 0; for ($c = 0; $c < count($tileInfoW["improvements"]); $c++) { $improvementInfoV = getImprovementInfo($getPage_connection2, $tileInfoW["improvements"][$c]); if ($improvementInfoV["type"] == 1) { $bonus_new_strength = 3; } // if } // for $new_strength = $bonus_new_strength + $claimInfoW["strength"] + 2; } // if setClaimInfo($getPage_connection2, $claimInfoW["id"], $new_strength, $claimInfoW["owner"]); } // if } // for } // if // trade $_SESSION["scriptOutput"] .= "Trade Count adjust...<br />"; for ($ss = 0; $ss < count($tileInfoW["improvements"]); $ss++) { $improvementInfoF = getImprovementInfo($getPage_connection2, $tileInfoW["improvements"][$ss]); if ($improvementInfoF["type"] == 1 || $improvementInfoF["type"] == 2) { for ($cc = 0; $cc < count($improvementInfoF["owners"]); $cc++) { if ($improvementInfoF["owners"] == $next_nations) { if ($improvementInfoF["type"] == 1) { $tradeCount++; } else { if ($improvementInfoF["type"] == 2) { $tradeCount = $tradeCount + 2; } } // else if } // if } // for } // if } // for // claims for happiness $_SESSION["scriptOutput"] .= "Happiness+Claims adjust...<br />"; $claimsStateW = checkClaimsState($getPage_connection2, $tileInfoW, $next_nations); // set happiness addition dependent on claim to tile // if current nation claims successfully if ($claimsStateW == 1) { $new_happiness = $new_happiness + 5; // if enemy nation claims successfully } else { if ($claimsStateW == 2) { $new_happiness = $new_happiness + 1; // if claim is contested and player is involved } else { if ($claimsStateW == 3) { $new_happiness = $new_happiness + 2; // if claim is contested and player is not involved } else { if ($claimsStateW == 4) { // default to enemy claim } else { // bad $new_happiness = $new_happiness + 1; } } } } // else // terrain production modifiers $_SESSION["scriptOutput"] .= "Terrain production modifiers...<br />"; $terrainInfoW = array("productionModifier" => 0); if ($stmt100 = $getPage_connection2->prepare("SELECT productionModifier FROM terrain WHERE id=? LIMIT 1")) { $stmt100->bind_param("i", $tileInfoW["terrain"]); $stmt100->execute(); $stmt100->bind_result($r_productionModifier); $stmt100->fetch(); $terrainInfoW["productionModifier"] = $r_productionModifier; $stmt100->close(); } else { } // else if ($terrainInfoW["productionModifier"] >= 1) { $mod = 0.01; $new_production = $new_production + $terrainInfoW["productionModifier"] * $mod * 2.0; } else { $new_production = $new_production + 2; } // else } // if } // while $stmt1->close(); } else { } // else // add to nation variables based on tile number $new_money = $new_money + 2 * $limit_allTilesOwned; // get improvements $_SESSION["scriptOutput"] .= "Get improvements info for production, money, population mods...<br />"; if ($stmt1 = $getPage_connection2->prepare("SELECT id FROM improvementsmap ORDER BY id ASC")) { $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($r_result); while ($stmt1->fetch()) { $next_improvements = $r_result; $improvementInfoW = getImprovementInfo($getPage_connection2, $next_improvements); for ($z = 0; $z < count($improvementInfoW["owners"]); $z++) { if ($improvementInfoW["owners"][$z] == $next_nations) { // capital if ($improvementInfoW["type"] == 1) { $new_money = $new_money + 60.0 * (0.25 * $improvementInfoW["level"]) / count($improvementInfoW["owners"]); $new_production = $new_production + 20.0 * (0.25 * $improvementInfoW["level"]) / count($improvementInfoW["owners"]); $tileInfoG = getTileInfo($getPage_connection2, $improvementInfoW["continent"], $improvementInfoW["xpos"], $improvementInfoW["ypos"]); $generate_population = mt_rand(200.0 * (0.25 * $improvementInfoW["level"]), 800.0 * (0.25 * $improvementInfoW["level"])); $new_tile_population = $tileInfoG["population"] + $generate_population / count($improvementInfoW["owners"]); setTileInfo($getPage_connection2, $tileInfoG["id"], $tileInfoG["continent"], $tileInfoG["xpos"], $tileInfoG["ypos"], $tileInfoG["terrain"], $tileInfoG["resources"], $tileInfoG["improvements"], $tileInfoG["owner"], $tileInfoG["claims"], $new_tile_population); // town } else { if ($improvementInfoW["type"] == 2) { $new_money = $new_money + 30.0 * (0.25 * $improvementInfoW["level"]) / count($improvementInfoW["owners"]); $tileInfoG = getTileInfo($getPage_connection2, $improvementInfoW["continent"], $improvementInfoW["xpos"], $improvementInfoW["ypos"]); $generate_population = mt_rand(200.0 * (0.25 * $improvementInfoW["level"]), 400.0 * (0.25 * $improvementInfoW["level"])); $new_tile_population = $tileInfoG["population"] + $generate_population / count($improvementInfoW["owners"]); setTileInfo($getPage_connection2, $tileInfoG["id"], $tileInfoG["continent"], $tileInfoG["xpos"], $tileInfoG["ypos"], $tileInfoG["terrain"], $tileInfoG["resources"], $tileInfoG["improvements"], $tileInfoG["owner"], $tileInfoG["claims"], $new_tile_population); // industry } else { if ($improvementInfoW["type"] == 3) { $new_production = $new_production + 20.0 * (0.25 * $improvementInfoW["level"]) / count($improvementInfoW["owners"]); // farm } else { if ($improvementInfoW["type"] == 4) { $generate_food = mt_rand(1000.0 * (0.25 * $improvementInfoW["level"]), 6000.0 * (0.25 * $improvementInfoW["level"])); $new_food = $new_food + $generate_food / count($improvementInfoW["owners"]); // depot } else { if ($improvementInfoW["type"] == 5) { // mill } else { if ($improvementInfoW["type"] == 6) { for ($d = 0; $d < count($improvementInfoW["usingResources"]); $d++) { $resourceInfoW = getResourceInfo($getPage_connection2, $improvementInfoW["usingResources"][$d]); if ($resourceInfoW["type"] == 1 && $resourceInfoW["capacity"] >= 5) { $initialExtract = 0.02 * $resourceInfoW["capacity"]; $extractAmount = $initialExtract * (0.25 * $improvementInfoW["level"]) / count($improvementInfoW["owners"]); $new_resources[0] = $new_resources[0] + $extractAmount; $new_capacity = $resourceInfoW["capacity"] - $extractAmount; setResourceInfo($getPage_connection2, $resourceInfoW["id"], $resourceInfoW["type"], $new_capacity); break; } // if } // for // reserve } else { if ($improvementInfoW["type"] == 7) { $new_happiness = $new_happiness + 0.01 / count($improvementInfoW["owners"]); // mine } else { if ($improvementInfoW["type"] == 8) { for ($d = 0; $d < count($improvementInfoW["usingResources"]); $d++) { $resourceInfoW = getResourceInfo($getPage_connection2, $improvementInfoW["usingResources"][$d]); if ($resourceInfoW["type"] == 2 && $resourceInfoW["capacity"] >= 5) { $initialExtract = 0.02 * $resourceInfoW["capacity"]; $extractAmount = $initialExtract * (0.25 * $improvementInfoW["level"]) / count($improvementInfoW["owners"]); $new_resources[1] = $new_resources[1] + $extractAmount; $new_capacity = $resourceInfoW["capacity"] - $extractAmount; setResourceInfo($getPage_connection2, $resourceInfoW["id"], $resourceInfoW["type"], $new_capacity); break; } // if } // for // well } else { if ($improvementInfoW["type"] == 9) { for ($d = 0; $d < count($improvementInfoW["usingResources"]); $d++) { $resourceInfoW = getResourceInfo($getPage_connection2, $improvementInfoW["usingResources"][$d]); if ($resourceInfoW["type"] == 3 && $resourceInfoW["capacity"] >= 5) { $initialExtract = 0.02 * $resourceInfoW["capacity"]; $extractAmount = $initialExtract * (0.25 * $improvementInfoW["level"]) / count($improvementInfoW["owners"]); $new_resources[2] = $new_resources[2] + $extractAmount; $new_capacity = $resourceInfoW["capacity"] - $extractAmount; setResourceInfo($getPage_connection2, $resourceInfoW["id"], $resourceInfoW["type"], $new_capacity); break; } // if } // for // dam } else { if ($improvementInfoW["type"] == 10) { for ($d = 0; $d < count($improvementInfoW["usingResources"]); $d++) { $resourceInfoW = getResourceInfo($getPage_connection2, $improvementInfoW["usingResources"][$d]); if ($resourceInfoW["type"] == 4 && $resourceInfoW["capacity"] >= 5) { $new_production = $new_production + 22.0 * (0.25 * $improvementInfoW["level"]) / count($improvementInfoW["owners"]); setResourceInfo($getPage_connection2, $resourceInfoW["id"], $resourceInfoW["type"], $new_capacity); break; } // if } // for } } } } } } } } } } // else if } // if } // for } // while $stmt1->close(); } else { } // else /******************************** HAPPINESS EFFECTS ********************************/ $_SESSION["scriptOutput"] .= "Change happiness...<br />"; // penalty for lack of consumer goods (basic and luxury), less penalty with more goods // luxury goods provide bigger boost $consumptionPenalty = 3.25 * $limit_allTilesOwned; $goodsPenalty = 0.0; if ($consumptionPenalty >= $new_goods[4] * 3.0E-5 * $limit_allTilesOwned + $new_goods[5] * 5.0E-5 * $limit_allTilesOwned) { $goodsPenalty = $consumptionPenalty - $new_goods[4] * 3.0E-5 * $limit_allTilesOwned + $new_goods[5] * 5.0E-5 * $limit_allTilesOwned; } else { $goodsPenalty = 0.0; } // else // happiness $new_happiness = ($new_happiness - ($happinessPenalty + $goodsPenalty) * $new_happiness / 100) / $limit_allTilesOwned; // set the rate of effect of happiness on production,taxation // Happiest if ($new_happiness >= 4) { $new_production = $new_production + $new_production * 0.25; $efficiencyPercent = $efficiencyPercent + $efficiencyPercent * 0.25; // Very Happy } else { if ($new_happiness >= 3) { $new_production = $new_production + $new_production * 0.1; $efficiencyPercent = $efficiencyPercent + $efficiencyPercent * 0.1; // Happy } else { if ($new_happiness >= 2) { $new_production = $new_production + $new_production * 0.05; $efficiencyPercent = $efficiencyPercent + $efficiencyPercent * 0.05; // Content (nothing happens) } else { if ($new_happiness >= 1) { // Unhappy } else { $new_production = $new_production - $new_production * 0.25; $efficiencyPercent = $efficiencyPercent - $efficiencyPercent * 0.25; } } } } // else /******************************** TRADE ********************************/ $_SESSION["scriptOutput"] .= "Update trade routes, worth, offers...<br />"; // cut off trade routes to the limit that exists and update trade info // this limits trade routes to currently controlled tiles $new_limit = $tradeCount; if (count($tradeInfoW["routes"]) < $new_limit) { for ($r = 0; $r < $new_limit; $r++) { $new_routes[$r] = $tradeInfoW["routes"][$r]; } // for } else { for ($r = 0; $r < count($tradeInfoW["routes"]); $r++) { $new_routes[$r] = $tradeInfoW["routes"][$r]; } // for } // else setTradeInfo($getPage_connection2, $tradeInfoW["id"], $next_nations, $new_routes, $new_limit); // do individual trades action if current nation involved if ($stmt1 = $getPage_connection2->prepare("SELECT id FROM offers ORDER BY id ASC")) { $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($r_result); while ($stmt1->fetch()) { $next_offers = $r_result; $offerInfoW = getOfferInfo($getPage_connection2, $next_offers); if ($offerInfoW["fromNation"] == $next_nations) { if ($offerInfoW["turns"] > $offerInfoW["counter"]) { if ($offerInfoW["status"] == 1) { processOffer($getPage_connection2, $offersInfoW); $new_offer = $offerInfoW["counter"] + 1; // remove if trade offer has expired if ($new_counter > $offerInfoW["turns"]) { deleteOfferInfo($getPage_connection2, $offerInfoW["id"]); } else { setOfferInfo($getPage_connection2, $offerInfoW["id"], $offerInfoW["fromNation"], $offerInfoW["toNation"], $offerInfoW["givingItems"], $offerInfoW["receivingItems"], $offerInfoW["givingQuantities"], $offerInfoW["receivingQuantities"], $offerInfoW["givingTypes"], $offerInfoW["receivingTypes"], $offerInfoW["turns"], $new_counter, $offerInfoW["status"]); } // else } // if } // if } // if } // while $stmt1->close(); } else { } // else // trade agreements $tradeBonus = 0.0; $productionBonus = 0.0; $happinessPenaltyFromTrade = 0.0; for ($v = 0; $v < count($tradeInfoW["routes"]); $v++) { $agreementInfoQ = getAgreementInfo($getPage_connection2, $tradeInfoW["routes"][$v]); if ($agreementInfoQ["fromNation"] == $next_nations) { if ($offerInfoW["status"] == 1) { // receive money/production $worth1 = 0.0; // total worth of trade $nationFrom1 = getNationInfo($getPage_connection2, $agreementInfoQ["fromNation"]); $nationTo1 = getNationInfo($getPage_connection2, $agreementInfoQ["toNation"]); // figure out wealth and production worth $totalWealth = $nationFrom1["money"] + $nationTo1["money"]; $totalProduction = $nationFrom1["production"] + $nationTo1["production"]; // high policy number = protectionism, low policy number = free trade // max 25% bonus from policy for either production or wealth $tradeBonus = $tradeBonus + $totalWealth * (0.01 + 0.025 * (10 - $agreementInfoQ["policy"])) / 2; $productionBonus = $productionBonus + $totalProduction * (0.008 + 0.025 * $agreementInfoQ["policy"]) / 2; // happiness penalty for clashing ideologies if ($agreementInfoQ["policy"] > $nationInfoW["economy"]) { if ($agreementInfoQ["policy"] - $nationInfoW["economy"] > 0 && $agreementInfoQ["policy"] - $nationInfoW["economy"] <= 1) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.005; } else { if ($agreementInfoQ["policy"] - $nationInfoW["economy"] >= 2 && $agreementInfoQ["policy"] - $nationInfoW["economy"] <= 3) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.01; } else { if ($agreementInfoQ["policy"] - $nationInfoW["economy"] >= 4 && $agreementInfoQ["policy"] - $nationInfoW["economy"] <= 5) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.02; } else { if ($agreementInfoQ["policy"] - $nationInfoW["economy"] >= 6 && $agreementInfoQ["policy"] - $nationInfoW["economy"] <= 7) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.03; } else { if ($agreementInfoQ["policy"] - $nationInfoW["economy"] >= 8 && $agreementInfoQ["policy"] - $nationInfoW["economy"] <= 9) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.04; } else { if ($agreementInfoQ["policy"] - $nationInfoW["economy"] >= 10) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.05; } } } } } } // else if } else { if ($agreementInfoQ["policy"] < $nationInfoW["economy"]) { if ($agreementInfoQ["economy"] - $nationInfoW["policy"] > 0 && $agreementInfoQ["economy"] - $nationInfoW["policy"] <= 1) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.005; } else { if ($agreementInfoQ["economy"] - $nationInfoW["policy"] >= 2 && $agreementInfoQ["economy"] - $nationInfoW["policy"] <= 3) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.01; } else { if ($agreementInfoQ["economy"] - $nationInfoW["policy"] >= 4 && $agreementInfoQ["economy"] - $nationInfoW["policy"] <= 5) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.02; } else { if ($agreementInfoQ["economy"] - $nationInfoW["policy"] >= 6 && $agreementInfoQ["economy"] - $nationInfoW["policy"] <= 7) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.03; } else { if ($agreementInfoQ["economy"] - $nationInfoW["policy"] >= 8 && $agreementInfoQ["economy"] - $nationInfoW["policy"] <= 9) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.04; } else { if ($agreementInfoQ["economy"] - $nationInfoW["policy"] >= 10) { $happinessPenaltyFromTrade = $happinessPenaltyFromTrade + 0.05; } } } } } } // else if } else { } } $new_counter = $agreementInfoQ["counter"] + 1; // remove if trade agreement has expired if ($new_counter > $agreementInfoQ["turns"]) { deleteAgreementInfo($getPage_connection2, $agreementInfoQ["id"]); } else { setAgreementInfo($getPage_connection2, $agreementInfoQ["id"], $agreementInfoQ["policy"], $agreementInfoQ["turns"], $new_counter, $agreementInfoQ["toNation"], $agreementInfoQ["fromNation"], $agreementInfoQ["status"]); } // else } // if } // if } // for $new_happiness = $new_happiness - $happinessPenaltyFromTrade; $new_production = $new_production + $productionBonus; /******************************** PRODUCTION COSTS ********************************/ $_SESSION["scriptOutput"] .= "Produce stuff...<br />"; // figure out spending percentage $using_production = $new_production * ($productionInfoW["spending"] * 0.01); // set production used to new spending amount $used_production = $using_production; // percentage of expenditure $ratios = $productionInfoW["ratios"]; for ($t = 0; $t < count($ratios); $t++) { $ratio_id = $t + 1; $goodsInfoW = getGoodsInfo($getPage_connection2, $ratio_id); if ($goodsInfoW["id"] >= 1) { $availableProduction = $used_production * ($ratios[$t] * 0.01); // problem with this while loop: it's endless while ($availableProduction > 0) { $canProduce = false; if ($goodsInfoW["productionRequired"] <= $availableProduction) { if ($goodsInfoW["foodRequired"] <= $new_food) { $checkForResourceTypes = true; if (count($goodsInfoW["resourceTypesRequired"]) <= 1) { if ($goodsInfoW["resourceTypesRequired"][0] == 0) { $checkForResourceTypes = false; } // if } // if if ($checkForResourceTypes === true) { for ($h = 0; $h < count($goodsInfoW["resourceTypesRequired"]); $h++) { // if resources are required if ($goodsInfoW["resourceTypesRequired"][$h] >= 1) { $resourceArraySlot1 = $goodsInfoW["resourceTypesRequired"][$h] - 1; if ($new_resources[$resourceArraySlot1] >= $goodsInfoW["resourceQuantitiesRequired"][$h]) { $canProduce = true; } else { $canProduce = false; break; } // else } else { $canProduce = true; } // else } // for } else { $canProduce = true; } // else } else { $canProduce = false; } // else } else { $canProduce = false; } // else if ($canProduce === true) { for ($j = 0; $j < count($goodsInfoW["improvementTypesRequired"]); $j++) { $typeCount = 0; // if improvements are required if ($goodsInfoW["improvementTypesRequired"][$j] >= 1) { if ($stmt2 = $getPage_connection2->prepare("SELECT id FROM improvementsmap ORDER BY id ASC")) { $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($r_result); while ($stmt2->fetch()) { $next_improvements2 = $r_result; $improvementInfoY = getImprovementInfo($getPage_connection2, $next_improvements2); if ($improvementInfoY["type"] == $goodsInfoW["improvementTypesRequired"][$j]) { for ($f = 0; $f < count($improvementInfoY["owners"]); $f++) { if ($improvementInfoY["owners"][$f] == $next_nations) { $typeCount++; } // if } // for } // if if ($typeCount >= $goodsInfoW["improvementQuantitiesRequired"][$j]) { $canProduce = true; break; } // if } // while $stmt2->close(); } else { } // else if ($typeCount < $goodsInfoW["improvementQuantitiesRequired"][$j]) { $canProduce = false; break; } // if } // if } // for } // if // able to produce good, proceed if ($canProduce === true) { // subtract from available production, nation's food total, nation's resources totals $availableProduction = $availableProduction - $goodsInfoW["productionRequired"]; $new_food = $new_food - $goodsInfoW["foodRequired"]; if ($checkForResourceTypes === true) { for ($k = 0; $k < count($goodsInfoW["resourceTypesRequired"]); $k++) { // if resources are required if ($goodsInfoW["resourceTypesRequired"][$k] >= 1) { $resourceArraySlot = $goodsInfoW["resourceTypesRequired"][$k] - 1; $new_resources[$resourceArraySlot] = $new_resources[$resourceArraySlot] - $goodsInfoW["resourceQuantitiesRequired"][$k]; } // if } // for } // if // add new good $new_goods[$t] = $new_goods[$t] + 1; } else { break; } // else } // while } // if } // for $new_production = $new_production - $used_production; // tax $tax = $old_population * 0.11 * ($efficiencyPercent * 0.01); // trade and production bonus formula $formula = $productionPercent * 0.01 * ($new_production * 14); $_SESSION["scriptOutput"] .= "prod: " . $new_production . "<br />"; $_SESSION["scriptOutput"] .= "formula: " . $formula . "<br />"; $_SESSION["scriptOutput"] .= "tax: " . $tax . "<br />"; $_SESSION["scriptOutput"] .= "money: " . $new_money . "<br />"; // final money calculation $new_money = $new_money + $formula + $tax; /******************************** COSTS AND UPKEEP ********************************/ $_SESSION["scriptOutput"] .= "Unit upkeep...<br />"; // unit upkeep if ($stmt1 = $getPage_connection2->prepare("SELECT id FROM unitsmap ORDER BY id ASC")) { $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($r_result); while ($stmt1->fetch()) { $next_units = $r_result; $unitInfoW = getUnitInfoByID($getPage_connection2, $next_units); if ($unitInfoW["owner"] == $next_nations) { $unitTypeInfoW = getUnitTypeInfo($getPage_connection2, $unitInfoW["type"]); $tileInfoW = getTileInfo($getPage_connection2, $unitInfoW["continent"], $unitInfoW["xpos"], $unitInfoW["ypos"]); $terrainInfoW = getTerrainInfo($getPage_connection2, $tileInfoW["terrain"]); // figure out nearest supply depot for supply line distance $best_difference = 9999; $best_continent = 0; if ($stmt2 = $getPage_connection2->prepare("SELECT id FROM improvementsmap ORDER BY id ASC")) { $stmt2->execute(); $stmt2->bind_result($r_result); while ($stmt2->fetch()) { $next_improvements1 = $r_result; $improvementInfoWA = getImprovementInfo($getPage_connection2, $next_improvements1); if ($improvementInfoWA["id"] >= 1) { for ($v = 0; $v < count($improvementInfoWA["owners"]); $v++) { if ($improvementInfoWA["owners"][$v] == $next_nations) { if ($improvementInfoWA["type"] == 5) { $current_difference = 0; if ($improvementInfoWA["continent"] == $unitInfoW["continent"]) { $best_difference = 0; $best_continent = $improvementInfoWA["continent"]; break; } else { if ($improvementInfoWA["continent"] > $unitInfoW["continent"]) { $current_difference = $improvementInfoWA["continent"] - $unitInfoW["continent"]; } else { if ($improvementInfoWA["continent"] < $unitInfoW["continent"]) { $current_difference = $unitInfoW["continent"] - $improvementInfoWA["continent"]; } } } // else if if ($current_difference < $best_difference) { $best_difference = $current_difference; $best_continent = $improvementInfoWA["continent"]; } // if } // if } // if } // for } // if } // while $stmt2->close(); } else { } // else $distance = $best_difference; $distanceModifier = 5 * $distance; if ($terrainInfoW["upkeepModifier"] >= 1) { $mod = 0.01; $food_upkeep = $food_upkeep + $unitTypeInfoW["foodRequired"] / 4 + $unitTypeInfoW["foodRequired"] / 4 * (($terrainInfoW["upkeepModifier"] + $distanceModifier) * $mod); $money_upkeep = $money_upkeep + $unitTypeInfoW["baseCost"] / 4 + $unitTypeInfoW["baseCost"] / 4 * (($terrainInfoW["upkeepModifier"] + $distanceModifier) * $mod); } else { $food_upkeep = $food_upkeep + $unitTypeInfoW["foodRequired"] / 4; $money_upkeep = $money_upkeep + $unitTypeInfoW["baseCost"] / 4; } // else } // if } // while $stmt1->close(); } else { } // else $_SESSION["scriptOutput"] .= "Improvement upkeep...<br />"; // improvement upkeep and nation's population update if ($stmt2 = $getPage_connection2->prepare("SELECT id FROM tilesmap ORDER BY id ASC")) { $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($r_result); while ($stmt2->fetch()) { $next_tiles = $r_result; $tileInfoW = getTileInfoByID($getPage_connection2, $next_tiles); $terrainInfoW = getTerrainInfo($getPage_connection2, $tileInfoW["terrain"]); for ($y = 0; $y < count($tileInfoW["improvements"]); $y++) { $improvementInfoW = getImprovementInfo($getPage_connection2, $tileInfoW["improvements"][$y]); $improvementTypeInfoW = getImprovementTypeInfo($getPage_connection2, $improvementInfoW["type"]); for ($z = 0; $z < count($improvementInfoW["owners"]); $z++) { if ($improvementInfoW["owners"][$z] == $next_nations) { // figure out distance costs if ($nationInfoW["home"] > $tileInfoW["continent"]) { $distanceModifier = $nationInfoW["home"] - $tileInfoW["continent"]; } else { $distanceModifier = $tileInfoW["continent"] - $nationInfoW["home"]; } $mod = 0.01; $money_upkeep = $money_upkeep + $improvementTypeInfoW["baseCost"] / 4 / count($improvementInfoW["owners"]) + $improvementTypeInfoW["baseCost"] / 4 / count($improvementInfoW["owners"]) * (($distanceModifier + $terrainInfoW["upkeepModifier"]) * $mod); } // if } // for } // for if ($tileInfoW["owner"] == $next_nations) { $new_population = $new_population + $tileInfoW["population"]; } // if } // while $stmt2->close(); } else { } // else /******************************** FOOD ********************************/ $_SESSION["scriptOutput"] .= "Feeding time...<br />"; $_SESSION["scriptOutput"] .= "food: " . $new_food . "<br />"; // food debt if ($new_food < $food_upkeep) { $food_debt = $food_upkeep - $new_food; $new_food = 0; } else { $new_food = $new_food - $food_upkeep; } // else // if food can feed new population, then allow for the growth if ($new_food >= $new_population) { $surplus = $new_food - $new_population; $popGrowth = 0.1 * ($surplus / $limit_allTilesOwned); $popGrowthInt = round($popGrowth, 0, PHP_ROUND_HALF_UP); $new_population = 0; // reset population to assign new value based on pop changes $next_tiles = 1; if ($stmt2 = $getPage_connection2->prepare("SELECT id FROM tilesmap ORDER BY id ASC")) { $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($r_result); while ($stmt2->fetch()) { $next_tiles = $r_result; $tileInfoD = getTileInfoByID($getPage_connection2, $next_tiles); $new_tile_population = 0; if ($tileInfoD["owner"] == $next_nations) { $new_tile_population = $tileInfoD["population"] + $popGrowthInt; setTileInfo($getPage_connection2, $tileInfoD["id"], $tileInfoD["continent"], $tileInfoD["xpos"], $tileInfoD["ypos"], $tileInfoD["terrain"], $tileInfoD["resources"], $tileInfoD["improvements"], $tileInfoD["owner"], $tileInfoD["claims"], $new_tile_population); $new_population = $new_population + $new_tile_population; } // if } // while $stmt2->close(); } else { $next_tiles = 0; } // else // if food cannot even sustain the population, it shrinks } else { if ($new_food < $new_population) { // if there is food debt, then set food debt + random number to be deficit if ($food_debt >= 1) { $rand = mt_rand(1, 50); $deficit = $food_debt + $rand; $popShrink = 0.15 * ($deficit / $limit_allTilesOwned); $popShrinkInt = round($popShrink, 0, PHP_ROUND_HALF_DOWN); $new_population = 0; // reset population to assign new value based on pop changes if ($stmt2 = $getPage_connection2->prepare("SELECT id FROM tilesmap ORDER BY id ASC")) { $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($r_result); while ($stmt2->fetch()) { $next_tiles = $r_result; $tileInfoD = getTileInfoByID($getPage_connection2, $next_tiles); $new_tile_population = 0; if ($tileInfoD["owner"] == $next_nations) { $new_tile_population = $tileInfoD["population"] - $popShrinkInt; if ($new_tile_population < 0) { $new_tile_population = 0; } // if setTileInfo($getPage_connection2, $tileInfoD["id"], $tileInfoD["continent"], $tileInfoD["xpos"], $tileInfoD["ypos"], $tileInfoD["terrain"], $tileInfoD["resources"], $tileInfoD["improvements"], $tileInfoD["owner"], $tileInfoD["claims"], $new_tile_population); $new_population = $new_population + $new_tile_population; } // if } // while $stmt2->close(); } else { } // else // otherwise just use difference between population and food and random number to be deficit } else { $rand = mt_rand(1, 100); $deficit = $new_population - $new_food + $rand; $popShrink = 0.25 * ($deficit / $limit_allTilesOwned); $popShrinkInt = round($popShrink, 0, PHP_ROUND_HALF_DOWN); $new_population = 0; // reset population to assign new value based on pop changes if ($stmt2 = $getPage_connection2->prepare("SELECT id FROM tilesmap ORDER BY id ASC")) { $stmt2->execute(); $stmt2->store_result(); $stmt2->bind_result($r_result); while ($stmt2->fetch()) { $next_tiles = $r_result; $tileInfoD = getTileInfoByID($getPage_connection2, $next_tiles); $new_tile_population = 0; if ($tileInfoD["owner"] == $next_nations) { $new_tile_population = $tileInfoD["population"] - $popShrinkInt; if ($new_tile_population < 0) { $new_tile_population = 0; } // if setTileInfo($getPage_connection2, $tileInfoD["id"], $tileInfoD["continent"], $tileInfoD["xpos"], $tileInfoD["ypos"], $tileInfoD["terrain"], $tileInfoD["resources"], $tileInfoD["improvements"], $tileInfoD["owner"], $tileInfoD["claims"], $new_tile_population); $new_population = $new_population + $new_tile_population; } // if } // while $stmt2->close(); } else { } // else } // else } } // else if /******************************** DEBT COLLECTION ********************************/ $_SESSION["scriptOutput"] .= "Money and Debts...<br />"; // pay off debt before anything else if ($new_debt > 0) { if ($new_money < $new_debt) { $money_debt = $new_debt - $new_money; // reduce the debt if nothing else $new_debt = $money_debt; $new_money = 0; } else { $new_money = $new_money - $new_debt; $new_debt = 0; } // else } // if if ($new_money < $money_upkeep) { $money_debt = $money_upkeep - $new_money; $new_debt = $money_debt; $new_money = 0; } else { $new_money = $new_money - $money_upkeep; } // else $_SESSION["scriptOutput"] .= "Debt collecting...<br />"; // money debt collecting // increase strike counter if debt is owed if ($new_debt > 0) { $new_strike = $new_strike + 1; } // if if ($new_food < 0) { $new_food = 0; } // if /******************************** SET NEW VARIABLES ********************************/ $_SESSION["scriptOutput"] .= "Update database...<br />"; setNationInfo($getPage_connection2, $next_nations, $nationInfoW["name"], $nationInfoW["home"], $nationInfoW["formal"], $nationInfoW["flag"], $new_production, $new_money, $new_debt, $new_happiness, $new_food, $nationInfoW["authority"], 0, $nationInfoW["economy"], 0, $nationInfoW["organizations"], $nationInfoW["invites"], $new_goods, $new_resources, $new_population, $new_strike); } // while $stmt->close(); } else { } // else $_SESSION["scriptOutput"] .= "That's a wrap, script complete.<br />"; }