function unloadUnit($getPage_connection2)
{
    $validMove = false;
    if ($_SESSION["action_id"] >= 1) {
        $unitInfoW = getUnitInfoByID($getPage_connection2, $_SESSION["action_id"]);
        // is it a valid entity?
        if ($unitInfoW["continent"] == $_SESSION["continent_id"] && $unitInfoW["xpos"] == $_SESSION["xpos"] && $unitInfoW["ypos"] == $_SESSION["ypos"]) {
            // is it owned by current player?
            if ($unitInfoW["owner"] == $_SESSION["nation_id"]) {
                $unitTypeInfoW = getUnitTypeInfo($getPage_connection2, $unitInfoW["type"]);
                if ($unitInfoW["transport"] >= 1) {
                    $transportInfoW = getTransportInfo($getPage_connection2, $unitInfoW["transport"]);
                    if ($transportInfoW["id"] >= 1) {
                        if (count($transportInfoW["list"]) >= 1) {
                            $unitID = $transportInfoW["list"][1];
                            $unitInfoWA = getUnitInfoByID($getPage_connection2, $unitID);
                            $unitTypeInfoWA = getUnitTypeInfo($getPage_connection2, $unitInfoWA["type"]);
                            // does unit have movement left?
                            if ($unitInfoWA["used"] < $unitTypeInfoWA["movement"]) {
                                $tileInfoW = getTileInfo($getPage_connection2, $_SESSION["new_continent"], $_SESSION["new_xpos"], $_SESSION["new_ypos"]);
                                $terrainInfoW = getTerrainInfo($getPage_connection2, $tileInfoW["terrain"]);
                                if ($terrainInfoW["movementRestriction"] >= 1 && $unitInfoWA["used"] < $terrainInfoW["movementRestriction"] || $terrainInfoW["movementRestriction"] == 0) {
                                    // land
                                    if ($unitTypeInfoWA["water"] == 0) {
                                        if ($tileInfoW["terrain"] != 2 && $tileInfoW["terrain"] >= 1) {
                                            if ($_SESSION["new_continent"] == $_SESSION["continent_id"] && ($_SESSION["new_xpos"] >= $_SESSION["xpos"] - 1 && $_SESSION["new_xpos"] <= $_SESSION["xpos"] + 1) && ($_SESSION["new_ypos"] >= $_SESSION["ypos"] - 1 && $_SESSION["new_ypos"] <= $_SESSION["ypos"] + 1)) {
                                                $validMove = true;
                                            }
                                            // if
                                        }
                                        // if
                                        // water
                                    } else {
                                        if ($tileInfoW["terrain"] == 2 && $tileInfoW["terrain"] >= 1) {
                                            if ($_SESSION["new_continent"] >= $_SESSION["continent_id"] - 1 && $_SESSION["new_continent"] <= $_SESSION["continent_id"] + 1 && ($_SESSION["new_xpos"] >= $_SESSION["xpos"] - 1 && $_SESSION["new_xpos"] <= $_SESSION["xpos"] + 1) && ($_SESSION["new_ypos"] >= $_SESSION["ypos"] - 1 && $_SESSION["new_ypos"] <= $_SESSION["ypos"] + 1)) {
                                                $validMove = true;
                                            }
                                            // if
                                        }
                                        // if
                                    }
                                    // else
                                    // move is valid, move on to processing
                                    if ($validMove === true) {
                                        $unitInfoC = getUnitInfo($getPage_connection2, $_SESSION["new_continent"], $_SESSION["new_xpos"], $_SESSION["new_ypos"]);
                                        $unitTypeInfoC = getUnitTypeInfo($getPage_connection2, $unitInfoC["type"]);
                                        // if enemy unit is found on destination tile, there is conflict!
                                        if ($unitInfoC["id"] >= 1 && $unitInfoC["owner"] != $_SESSION["nation_id"]) {
                                            // land units can only attack other land units, water units can attack both, with the exception of artillery which can attack water units as well
                                            if ($unitTypeInfoWA["water"] == 0 && $unitTypeInfoC["water"] != 1 || $unitTypeInfoWA["water"] == 0 && $unitTypeInfoC["water"] == 1 && $unitInfoWA["type"] == 4 || $unitTypeInfoWA["water"] == 1) {
                                                combat($getPage_connection2, $_SESSION["new_continent"], $_SESSION["new_xpos"], $_SESSION["new_ypos"], $unitInfoWA, $unitInfoC, 1);
                                            } else {
                                                $_SESSION["warning_message"] = "Cannot complete action: unit cannot attack specified unit.";
                                            }
                                            // else
                                            // if friendly unit is found on destination tile, current unit does not move
                                        } else {
                                            if ($unitInfoC["id"] >= 1 && $unitInfoC["owner"] == $_SESSION["nation_id"]) {
                                                $_SESSION["warning_message"] = "Cannot complete action: unit cannot move into another friendly unit's territory.";
                                                // else move as normal
                                            } else {
                                                $new_used = $unitInfoWA["used"] + 1;
                                                $_SESSION["success_message"] = "Player's unit " . $unitInfoWA["name"] . " has been moved successfully!";
                                                // set new transport list
                                                $new_transport_list = array(0 => 0);
                                                $counterB = 0;
                                                for ($b = 0; $b < count($transportInfoW); $b++) {
                                                    if ($b != 1) {
                                                        $new_transport_list[$counterB] = $transportInfoW["list"][$b];
                                                        $counterB++;
                                                    }
                                                    // if
                                                }
                                                // for
                                                setTransportInfo($getPage_connection2, $unitInfoW["transport"], $new_transport_list);
                                                setUnitInfo($getPage_connection2, $unitInfoWA["id"], $_SESSION["new_continent"], $_SESSION["new_xpos"], $_SESSION["new_ypos"], $unitInfoWA["health"], $new_used, $unitInfoWA["name"], $unitInfoWA["type"], $unitInfoWA["owner"], $unitInfoWA["level"], $unitInfoWA["transport"], $unitInfoW["created"], $unitInfoW["exp"]);
                                            }
                                        }
                                        // else
                                    } else {
                                        $_SESSION["warning_message"] = "Cannot complete action: unit cannot move to specified tile.";
                                    }
                                    // else
                                } else {
                                    $_SESSION["warning_message"] = "Cannot complete action: unit does not have the required movement available for terrain type.";
                                }
                                // else
                            } else {
                                $_SESSION["warning_message"] = "Cannot complete action: unit does not have enough movement.";
                            }
                            // else
                        } else {
                            $_SESSION["warning_message"] = "Cannot complete action: transport is not available.";
                        }
                        // else
                    } else {
                        $_SESSION["warning_message"] = "Cannot complete action: transport is not available.";
                    }
                    // else
                } else {
                    $_SESSION["warning_message"] = "Cannot complete action: transport is not available.";
                }
                // else
            } else {
                $_SESSION["warning_message"] = "Cannot complete action: unit is not owned by current player.";
            }
            // else
        } else {
            $_SESSION["warning_message"] = "Cannot complete action: unit is not valid.";
        }
        // else
    } else {
        $_SESSION["warning_message"] = "Cannot complete action: unit is not valid.";
    }
    // else
}
Example #2
0
function combat($getPage_connection2, $continent, $xpos, $ypos, $attacker, $defender, $amphibian)
{
    if ($continent >= 1 && $xpos >= 1 && $ypos >= 1 && $attacker["id"] >= 1 && $defender["id"] >= 1 && $amphibian >= 0) {
        $tileInfoB = getTileInfo($getPage_connection2, $continent, $xpos, $ypos);
        $terrainInfoB = getTerrainInfo($getPage_connection2, $tileInfoB["terrain"]);
        $unitTypeInfoAttacker = getUnitTypeInfo($getPage_connection2, $attacker["type"]);
        $unitTypeInfoDefender = getUnitTypeInfo($getPage_connection2, $defender["type"]);
        $attackerA = 0.0;
        $attackerD = 0.0;
        $defenderA = 0.0;
        $defenderD = 0.0;
        $attackerReconLevel = array(0 => 0);
        $defenderReconLevel = array(0 => 0);
        $attackerReconExp = array(0 => 0);
        $defenderReconExp = array(0 => 0);
        $attackerReconBonus = 0;
        $defenderReconBonus = 0;
        $attackerArtilleryLevel = array(0 => 0);
        $defenderArtilleryLevel = array(0 => 0);
        $attackerArtilleryPower = array(0 => 0);
        $defenderArtilleryPower = array(0 => 0);
        $attackerArtilleryBonus = 0;
        $defenderArtilleryBonus = 0;
        // Experience Bonus from Recon
        $counter = 0;
        // goes through -2 to +2 x and y positions looking for attacker recon to aid attacker
        for ($x = -2; $x < 3; $x++) {
            for ($y = -2; $y < 3; $y++) {
                $unitInfoZ = getUnitInfo($getPage_connection2, $attacker["continent"], $attacker["xpos"] + $x, $attacker["ypos"] + $y);
                if ($unitInfoZ["id"] >= 1) {
                    if ($unitInfoZ["type"] == 5) {
                        $unitTypeInfoZ = getUnitTypeInfo($getPage_connection2, $unitInfoZ["type"]);
                        $attackerReconLevel[$counter] = $unitInfoZ["level"];
                        $attackerReconExp[$counter] = 2;
                        $counter++;
                    }
                    // if
                }
                // if
            }
            // for
        }
        // for
        $counter = 0;
        // goes through -2 to +2 x and y positions looking for defender recon to aid defender
        for ($x = -2; $x < 3; $x++) {
            for ($y = -2; $y < 3; $y++) {
                $unitInfoZ = getUnitInfo($getPage_connection2, $defender["continent"], $defender["xpos"] + $x, $defender["ypos"] + $y);
                if ($unitInfoZ["id"] >= 1) {
                    if ($unitInfoZ["type"] == 5) {
                        $unitTypeInfoZ = getUnitTypeInfo($getPage_connection2, $unitInfoZ["type"]);
                        $defenderReconLevel[$counter] = $unitInfoZ["level"];
                        $defenderReconExp[$counter] = 2;
                        $counter++;
                    }
                    // if
                }
                // if
            }
            // for
        }
        // for
        if ($attackerReconLevel[0] >= 1) {
            // add recon bonus
            for ($e = 0; $e < count($attackerReconLevel); $e++) {
                $attackerReconBonus += $attackerReconLevel[$e] * 0.25 + $attackerReconExp[$e];
            }
            // for
        }
        // if
        if ($defenderReconLevel[0] >= 1) {
            for ($e = 0; $e < count($defenderReconLevel); $e++) {
                $defenderReconBonus += $defenderReconLevel[$e] * 0.25 + $defenderReconExp[$e];
            }
            // for
        }
        // if
        $attackerExp = $attacker["exp"] + $attackerReconBonus;
        $defenderExp = $defender["exp"] + $defenderReconBonus;
        // Power Bonus from Artillery
        $counter = 0;
        // goes through -2 to +2 x and y positions looking for attacker artillery to aid attacker
        for ($x = -2; $x < 3; $x++) {
            for ($y = -2; $y < 3; $y++) {
                $unitInfoZ = getUnitInfo($getPage_connection2, $attacker["continent"], $attacker["xpos"] + $x, $attacker["ypos"] + $y);
                if ($unitInfoZ["id"] >= 1) {
                    if ($unitInfoZ["type"] == 4) {
                        $unitTypeInfoZ = getUnitTypeInfo($getPage_connection2, $unitInfoZ["type"]);
                        $attackerArtilleryLevel[$counter] = $unitInfoZ["level"];
                        //$attackerArtilleryPower[$counter] = $unitTypeInfoZ["attack"];
                        $attackerArtilleryPower[$counter] = 2;
                        $counter++;
                    }
                    // if
                }
                // if
            }
            // for
        }
        // for
        $counter = 0;
        // goes through -2 to +2 x and y positions looking for defender artillery to aid defender
        for ($x = -2; $x < 3; $x++) {
            for ($y = -2; $y < 3; $y++) {
                $unitInfoZ = getUnitInfo($getPage_connection2, $defender["continent"], $defender["xpos"] + $x, $defender["ypos"] + $y);
                if ($unitInfoZ["id"] >= 1) {
                    if ($unitInfoZ["type"] == 4) {
                        $unitTypeInfoZ = getUnitTypeInfo($getPage_connection2, $unitInfoZ["type"]);
                        $defenderArtilleryLevel[$counter] = $unitInfoZ["level"];
                        //$defenderArtilleryPower[$counter] = $unitTypeInfoZ["attack"];
                        $defenderArtilleryPower[$counter] = 2;
                        $counter++;
                    }
                    // if
                }
                // if
            }
            // for
        }
        // for
        if ($attackerArtilleryLevel[0] >= 1) {
            // add artillery bonus
            for ($e = 0; $e < count($attackerArtilleryLevel); $e++) {
                $attackerArtilleryBonus += $attackerArtilleryLevel[$e] * 0.25 + $attackerArtilleryPower[$e];
            }
            // for
        }
        // if
        if ($defenderArtilleryLevel[0] >= 1) {
            for ($e = 0; $e < count($defenderArtilleryLevel); $e++) {
                $defenderArtilleryBonus += $defenderArtilleryLevel[$e] * 0.25 + $defenderArtilleryPower[$e];
            }
            // for
        }
        // if
        $attackerA += $attackerArtilleryBonus;
        $attackerD += $attackerArtilleryBonus;
        $defenderA += $defenderArtilleryBonus;
        $defenderD += $defenderArtilleryBonus;
        $attackerA += $unitTypeInfoAttacker["attack"] + ($attacker["level"] * 0.25 + $attackerExp * 0.05);
        $attackerD += $unitTypeInfoAttacker["defense"] + ($attacker["level"] * 0.25 + $attackerExp * 0.05);
        $defenderA += $unitTypeInfoDefender["attack"] + ($defender["level"] * 0.25 + $defenderExp * 0.05);
        $defenderD += $unitTypeInfoDefender["defense"] + ($defender["level"] * 0.25 + $defenderExp * 0.05);
        $magnitude = 0;
        $formula = 0;
        // 1=winning,2=tie,3=losing
        $defenderModifier = 0.01 * $terrainInfoB["attackModifier"] * $defenderD;
        // add terrain modifier for defense bonus
        if ($amphibian == 1) {
            $defenderModifier = 0.25 * $defenderD;
            // add another +25% for amphibian assaults
        }
        // if
        // figure out which formula to use
        if ($attackerA > $defenderD + $defenderModifier) {
            // figure out category of combat
            if ($attackerA - ($defenderD + $defenderModifier) >= 4) {
                $magnitude = 5;
            } else {
                if ($attackerA - ($defenderD + $defenderModifier) >= 3) {
                    $magnitude = 4;
                } else {
                    if ($attackerA - ($defenderD + $defenderModifier) >= 2) {
                        $magnitude = 3;
                    } else {
                        if ($attackerA - ($defenderD + $defenderModifier) >= 1) {
                            $magnitude = 2;
                        } else {
                            $magnitude = 1;
                        }
                    }
                }
            }
            // else
            $formula = 1;
        } else {
            if ($attackerA == $defenderD + $defenderModifier) {
                $formula = 2;
            } else {
                // figure out category of combat
                if ($defenderD + $defenderModifier - $attackerA >= 4) {
                    $magnitude = 5;
                } else {
                    if ($defenderD + $defenderModifier - $attackerA >= 3) {
                        $magnitude = 4;
                    } else {
                        if ($defenderD + $defenderModifier - $attackerA >= 2) {
                            $magnitude = 3;
                        } else {
                            if ($defenderD + $defenderModifier - $attackerA >= 1) {
                                $magnitude = 2;
                            } else {
                                $magnitude = 1;
                            }
                        }
                    }
                }
                // else
                $formula = 3;
            }
        }
        // else
        $rand_attackerDamage = mt_rand(1, 100);
        $health_percent_attacker = 0;
        $health_percent_defender = 0;
        $new_defender_health = $defender["health"];
        $new_attacker_health = $attacker["health"];
        if ($formula == 1) {
            if ($magnitude == 5) {
                // 10% chance of receiving damage
                if ($rand_attackerDamage <= 10) {
                    // attacker is damaged
                    // health - 0-20% of health
                    $health_percent_attacker = $attacker["health"] * (1 - mt_rand(8, 10) * 0.1);
                    $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                }
                // if
                // defender is damaged
                // health - 80-100% of health
                $health_percent_defender = $defender["health"] * (1 - mt_rand(0, 2) * 0.1);
                $new_defender_health = $attacker["health"] - $health_percent_defender;
            } else {
                if ($magnitude == 4) {
                    // 15% chance of receiving damage
                    if ($rand_attackerDamage <= 15) {
                        // attacker is damaged
                        // health - 20-40% of health
                        $health_percent_attacker = $attacker["health"] * (1 - mt_rand(6, 8) * 0.1);
                        $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                    }
                    // if
                    // defender is damaged
                    // health - 60-80% of health
                    $health_percent_defender = $defender["health"] * (1 - mt_rand(2, 4) * 0.1);
                    $new_defender_health = $attacker["health"] - $health_percent_defender;
                } else {
                    if ($magnitude == 3) {
                        // 20% chance of receiving damage
                        if ($rand_attackerDamage <= 20) {
                            // attacker is damaged
                            // health - 40-60% of health
                            $health_percent_attacker = $attacker["health"] * (1 - mt_rand(4, 6) * 0.1);
                            $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                        }
                        // if
                        // defender is damaged
                        // health - 40-60% of health
                        $health_percent_defender = $defender["health"] * (1 - mt_rand(4, 6) * 0.1);
                        $new_defender_health = $attacker["health"] - $health_percent_defender;
                    } else {
                        if ($magnitude == 2) {
                            // 25% chance of receiving damage
                            if ($rand_attackerDamage <= 25) {
                                // attacker is damaged
                                // health - 60-80% of health
                                $health_percent_attacker = $attacker["health"] * (1 - mt_rand(2, 4) * 0.1);
                                $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                            }
                            // if
                            // defender is damaged
                            // health - 20-40% of health
                            $health_percent_defender = $defender["health"] * (1 - mt_rand(6, 8) * 0.1);
                            $new_defender_health = $attacker["health"] - $health_percent_defender;
                        } else {
                            if ($magnitude == 1) {
                                // 30% chance of receiving damage
                                if ($rand_attackerDamage <= 30) {
                                    // attacker is damaged
                                    // health - 80-100% of health
                                    $health_percent_attacker = $attacker["health"] * (1 - mt_rand(0, 2) * 0.1);
                                    $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                                }
                                // if
                                // defender is damaged
                                // health - 0-20% of health
                                $health_percent_defender = $defender["health"] * (1 - mt_rand(8, 10) * 0.1);
                                $new_defender_health = $attacker["health"] - $health_percent_defender;
                            }
                        }
                    }
                }
            }
            // else if
            // set health
            setUnitInfo($getPage_connection2, $defender["id"], $defender["continent"], $defender["xpos"], $defender["ypos"], $new_defender_health, $defender["used"], $defender["name"], $defender["type"], $defender["owner"], $defender["level"], $defender["transport"], $defender["created"], $defender["exp"]);
            setUnitInfo($getPage_connection2, $attacker["id"], $attacker["continent"], $attacker["xpos"], $attacker["ypos"], $new_attacker_health, $attacker["used"], $attacker["name"], $attacker["type"], $attacker["owner"], $attacker["level"], $attacker["transport"], $attacker["created"], $attacker["exp"]);
        } else {
            if ($formula == 2) {
                // 50% chance of receiving or dealing damage
                if ($rand_attackerDamage <= 50) {
                    // attacker is damaged
                    // health - 10-100% of health
                    $health_percent_attacker = $attacker["health"] * (1 - mt_rand(1, 10) * 0.1);
                    $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                } else {
                    // defender is damaged
                    // health - 10-100% of health
                    $health_percent_defender = $defender["health"] * (1 - mt_rand(1, 10) * 0.1);
                    $new_defender_health = $attacker["health"] - $health_percent_defender;
                }
                // else
                // set health
                setUnitInfo($getPage_connection2, $defender["id"], $defender["continent"], $defender["xpos"], $defender["ypos"], $new_defender_health, $defender["used"], $defender["name"], $defender["type"], $defender["owner"], $defender["level"], $defender["transport"], $defender["created"], $defender["exp"]);
                setUnitInfo($getPage_connection2, $attacker["id"], $attacker["continent"], $attacker["xpos"], $attacker["ypos"], $new_attacker_health, $attacker["used"], $attacker["name"], $attacker["type"], $attacker["owner"], $attacker["level"], $attacker["transport"], $attacker["created"], $attacker["exp"]);
            } else {
                if ($formula == 3) {
                    $rand_defenderDamage = mt_rand(1, 100);
                    if ($magnitude == 5) {
                        // 10% chance of receiving damage
                        if ($rand_defenderDamage <= 10) {
                            // defender is damaged
                            // health - 0-20% of health
                            $health_percent_defender = $defender["health"] * (1 - mt_rand(8, 10) * 0.1);
                            $new_defender_health = $attacker["health"] - $health_percent_defender;
                        }
                        // if
                        // attacker is damaged
                        // health - 80-100% of health
                        $health_percent_attacker = $attacker["health"] * (1 - mt_rand(0, 2) * 0.1);
                        $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                    } else {
                        if ($magnitude == 4) {
                            // 15% chance of receiving damage
                            if ($rand_defenderDamage <= 15) {
                                // defender is damaged
                                // health - 20-40% of health
                                $health_percent_defender = $defender["health"] * (1 - mt_rand(6, 8) * 0.1);
                                $new_defender_health = $attacker["health"] - $health_percent_defender;
                            }
                            // if
                            // attacker is damaged
                            // health - 60-80% of health
                            $health_percent_attacker = $attacker["health"] * (1 - mt_rand(2, 4) * 0.1);
                            $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                        } else {
                            if ($magnitude == 3) {
                                // 20% chance of receiving damage
                                if ($rand_defenderDamage <= 20) {
                                    // defender is damaged
                                    // health - 40-60% of health
                                    $health_percent_defender = $defender["health"] * (1 - mt_rand(4, 6) * 0.1);
                                    $new_defender_health = $attacker["health"] - $health_percent_defender;
                                }
                                // if
                                // attacker is damaged
                                // health - 40-60% of health
                                $health_percent_attacker = $attacker["health"] * (1 - mt_rand(4, 6) * 0.1);
                                $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                            } else {
                                if ($magnitude == 2) {
                                    // 25% chance of receiving damage
                                    if ($rand_defenderDamage <= 25) {
                                        // defender is damaged
                                        // health - 60-80% of health
                                        $health_percent_defender = $defender["health"] * (1 - mt_rand(2, 4) * 0.1);
                                        $new_defender_health = $attacker["health"] - $health_percent_defender;
                                    }
                                    // if
                                    // attacker is damaged
                                    // health - 20-40% of health
                                    $health_percent_attacker = $attacker["health"] * (1 - mt_rand(6, 8) * 0.1);
                                    $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                                } else {
                                    if ($magnitude == 1) {
                                        // 30% chance of receiving damage
                                        if ($rand_defenderDamage <= 30) {
                                            // defender is damaged
                                            // health - 80-100% of health
                                            $health_percent_defender = $defender["health"] * (1 - mt_rand(0, 2) * 0.1);
                                            $new_defender_health = $attacker["health"] - $health_percent_defender;
                                        }
                                        // if
                                        // attacker is damaged
                                        // health - 0-20% of health
                                        $health_percent_attacker = $attacker["health"] * (1 - mt_rand(8, 10) * 0.1);
                                        $new_attacker_health = $attacker["health"] - $health_percent_attacker;
                                    }
                                }
                            }
                        }
                    }
                    // else if
                    // set health
                    setUnitInfo($getPage_connection2, $defender["id"], $defender["continent"], $defender["xpos"], $defender["ypos"], $new_defender_health, $defender["used"], $defender["name"], $defender["type"], $defender["owner"], $defender["level"], $defender["transport"], $defender["created"], $defender["exp"]);
                    setUnitInfo($getPage_connection2, $attacker["id"], $attacker["continent"], $attacker["xpos"], $attacker["ypos"], $new_attacker_health, $attacker["used"], $attacker["name"], $attacker["type"], $attacker["owner"], $attacker["level"], $attacker["transport"], $attacker["created"], $attacker["exp"]);
                } else {
                }
            }
        }
        // else
        $newDefender = getUnitInfoByID($getPage_connection2, $defender["id"]);
        $newAttacker = getUnitInfoByID($getPage_connection2, $attacker["id"]);
        $defeat = "";
        $attackerWins = false;
        $new_used = $newAttacker["used"] + 1;
        // if either party is killed, remove them from map
        if ($newDefender["health"] <= 0 || $newAttacker["health"] <= 0) {
            // defender dies
            if ($newDefender["health"] <= 0) {
                $defeat = "Unit " . $newDefender["name"] . " has been killed in combat!";
                $attackerWins = true;
                if ($newDefender["transport"] >= 1) {
                    $transportInfo = getTransportInfo($getPage_connection2, $newDefender["transport"]);
                    for ($a = 0; $a < count($transportInfo); $a++) {
                        deleteUnitInfo($getPage_connection2, $transportInfo["list"][$a]);
                    }
                    // for
                }
                // if
                deleteUnitInfo($getPage_connection2, $newDefender["id"]);
                // add experience
                $new_exp = 1 + $newAttacker["exp"];
                setUnitInfo($getPage_connection2, $newAttacker["id"], $newAttacker["continent"], $newAttacker["xpos"], $newAttacker["ypos"], $new_attacker_health, $newAttacker["used"], $newAttacker["name"], $newAttacker["type"], $newAttacker["owner"], $newAttacker["level"], $newAttacker["transport"], $newAttacker["created"], $new_exp);
                // if amphibian combat
                if ($amphibian == 1) {
                    $unitInfoTransport = getUnitInfo($getPage_connection2, $_SESSION["action_id"]);
                    $transportInfoTransport = getTransportInfo($getPage_connection2, $unitInfoTransport["transport"]);
                    // set new transport list
                    $new_transport_list = array(0 => 0);
                    $counterB = 0;
                    for ($b = 0; $b < count($transportInfoTransport); $b++) {
                        if ($b != 1) {
                            $new_transport_list[$counterB] = $transportInfoTransport["list"][$b];
                            $counterB++;
                        }
                        // if
                    }
                    // for
                    setTransportInfo($getPage_connection2, $unitInfoTransport["transport"], $new_transport_list);
                }
                // if
                setUnitInfo($getPage_connection2, $_SESSION["action_id"], $_SESSION["new_continent"], $_SESSION["new_xpos"], $_SESSION["new_ypos"], $newAttacker["health"], $new_used, $newAttacker["name"], $newAttacker["type"], $newAttacker["owner"], $newAttacker["level"], $newAttacker["transport"], $newAttacker["created"], $newAttacker["exp"]);
            }
            // if
            // attacker dies
            if ($newAttacker["health"] <= 0) {
                $defeat = "Unit " . $newAttacker["name"] . " has been killed in combat!";
                $attackerWins = false;
                if ($newAttacker["transport"] >= 1) {
                    $transportInfo = getTransportInfo($getPage_connection2, $newAttacker["transport"]);
                    for ($a = 0; $a < count($transportInfo); $a++) {
                        deleteUnitInfo($getPage_connection2, $transportInfo["list"][$a]);
                    }
                    // for
                }
                // if
                deleteUnitInfo($getPage_connection2, $newAttacker["id"]);
                // add experience
                $new_exp = 1 + $newDefender["exp"];
                setUnitInfo($getPage_connection2, $newDefender["id"], $newDefender["continent"], $newDefender["xpos"], $newDefender["ypos"], $new_attacker_health, $newDefender["used"], $newDefender["name"], $newDefender["type"], $newDefender["owner"], $newDefender["level"], $newDefender["transport"], $newDefender["created"], $new_exp);
            }
            // if
            // otherwise bounce!
        }
        // if
        $attackerNationInfo = getNationInfo($getPage_connection2, $newAttacker["owner"]);
        $defenderNationInfo = getNationInfo($getPage_connection2, $newDefender["owner"]);
        $br1 = "<br />";
        $enteredInto = "Unit " . $newAttacker["name"] . " of " . $attackerNationInfo["name"] . " has entered into combat with unit " . $newDefender["name"] . " of " . $defenderNationInfo["name"] . " !";
        $suffering = "Unit " . $newAttacker["name"] . " has suffered " . $health_percent_attacker . " damage.  Unit " . $newDefender["name"] . " has suffered " . $health_percent_defender . " damage!";
        $_SESSION["success_message"] = $enteredInto . $br1 . $suffering . $br1 . $defeat;
        $log_message = $enteredInto . "  " . $suffering . "  " . $defeat;
        $new_date = date("Y-m-d H:i:s");
        addCombatLogInfo($getPage_connection2, $new_date, $log_message, $attackerNationInfo["id"], $defenderNationInfo["id"]);
    }
    // if
}
Example #3
0
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 />";
}