From 25dc1d675d236d4fb9c4476b040420214dde4a7c Mon Sep 17 00:00:00 2001 From: Catalin Novgorodschi <1140613+Shadowss@users.noreply.github.com> Date: Sun, 10 May 2026 07:14:14 +0300 Subject: [PATCH] Update Artifacts.php --- GameEngine/Artifacts.php | 1015 ++++++++++++++++---------------------- 1 file changed, 437 insertions(+), 578 deletions(-) diff --git a/GameEngine/Artifacts.php b/GameEngine/Artifacts.php index 9b2a71fc..c005d218 100644 --- a/GameEngine/Artifacts.php +++ b/GameEngine/Artifacts.php @@ -1,668 +1,527 @@ -getSpeedFactor(); - } - - /* - |-------------------------------------------------------------------------- - | NATARS CAPITAL LOCATIONS - |-------------------------------------------------------------------------- - */ - - const NATARS_CAPITAL_COORDINATES = [ - [WORLD_MAX, WORLD_MAX], - [WORLD_MAX, 0], - [WORLD_MAX, -WORLD_MAX], - [0, -WORLD_MAX], - [-WORLD_MAX, -WORLD_MAX], - [-WORLD_MAX, 0], - [-WORLD_MAX, WORLD_MAX], - [0, WORLD_MAX], - [WORLD_MAX / 10, WORLD_MAX / 20], - [WORLD_MAX / 10, -WORLD_MAX / 10], - [-WORLD_MAX / 20, -WORLD_MAX / 10], - [-WORLD_MAX / 10, 0], - [-WORLD_MAX / 20, WORLD_MAX / 10] - ]; - - /* - |-------------------------------------------------------------------------- - | ARTIFACT DEFINITIONS - |-------------------------------------------------------------------------- - */ - - const NATARS_ARTIFACTS = [ - ARCHITECTS_DESC => [ - ["type" => 1, "size" => 1, "name" => ARCHITECTS_SMALL, "vname" => ARCHITECTS_SMALLVILLAGE, "effect" => "(4x)", "quantity" => 6, "img" => 2], - ["type" => 1, "size" => 2, "name" => ARCHITECTS_LARGE, "vname" => ARCHITECTS_LARGEVILLAGE, "effect" => "(3x)", "quantity" => 4, "img" => 2], - ["type" => 1, "size" => 3, "name" => ARCHITECTS_UNIQUE, "vname" => ARCHITECTS_UNIQUEVILLAGE, "effect" => "(5x)", "quantity" => 1, "img" => 2], - ], - - HASTE_DESC => [ - ["type" => 2, "size" => 1, "name" => HASTE_SMALL, "vname" => HASTE_SMALLVILLAGE, "effect" => "(2x)", "quantity" => 6, "img" => 4], - ["type" => 2, "size" => 2, "name" => HASTE_LARGE, "vname" => HASTE_LARGEVILLAGE, "effect" => "(1.5x)", "quantity" => 4, "img" => 4], - ["type" => 2, "size" => 3, "name" => HASTE_UNIQUE, "vname" => HASTE_UNIQUEVILLAGE, "effect" => "(3x)", "quantity" => 1, "img" => 4], - ], - - EYESIGHT_DESC => [ - ["type" => 3, "size" => 1, "name" => EYESIGHT_SMALL, "vname" => EYESIGHT_SMALLVILLAGE, "effect" => "(5x)", "quantity" => 6, "img" => 5], - ["type" => 3, "size" => 2, "name" => EYESIGHT_LARGE, "vname" => EYESIGHT_LARGEVILLAGE, "effect" => "(3x)", "quantity" => 4, "img" => 5], - ["type" => 3, "size" => 3, "name" => EYESIGHT_UNIQUE, "vname" => EYESIGHT_UNIQUEVILLAGE, "effect" => "(10x)", "quantity" => 1, "img" => 5], - ], - - DIET_DESC => [ - ["type" => 4, "size" => 1, "name" => DIET_SMALL, "vname" => DIET_SMALLVILLAGE, "effect" => "(50%)", "quantity" => 6, "img" => 6], - ["type" => 4, "size" => 2, "name" => DIET_LARGE, "vname" => DIET_LARGEVILLAGE, "effect" => "(25%)", "quantity" => 4, "img" => 6], - ["type" => 4, "size" => 3, "name" => DIET_UNIQUE, "vname" => DIET_UNIQUEVILLAGE, "effect" => "(50%)", "quantity" => 1, "img" => 6], - ], - - ACADEMIC_DESC => [ - ["type" => 5, "size" => 1, "name" => ACADEMIC_SMALL, "vname" => ACADEMIC_SMALLVILLAGE, "effect" => "(50%)", "quantity" => 6, "img" => 8], - ["type" => 5, "size" => 2, "name" => ACADEMIC_LARGE, "vname" => ACADEMIC_LARGEVILLAGE, "effect" => "(25%)", "quantity" => 4, "img" => 8], - ["type" => 5, "size" => 3, "name" => ACADEMIC_UNIQUE, "vname" => ACADEMIC_UNIQUEVILLAGE, "effect" => "(50%)", "quantity" => 1, "img" => 8], - ], - - STORAGE_DESC => [ - ["type" => 6, "size" => 1, "name" => STORAGE_SMALL, "vname" => STORAGE_SMALLVILLAGE, "effect" => "(50%)", "quantity" => 6, "img" => 9], - ["type" => 6, "size" => 2, "name" => STORAGE_LARGE, "vname" => STORAGE_LARGEVILLAGE, "effect" => "(25%)", "quantity" => 4, "img" => 9], - ], - - CONFUSION_DESC => [ - ["type" => 7, "size" => 1, "name" => CONFUSION_SMALL, "vname" => CONFUSION_SMALLVILLAGE, "effect" => "(200)", "quantity" => 6, "img" => 10], - ["type" => 7, "size" => 2, "name" => CONFUSION_LARGE, "vname" => CONFUSION_LARGEVILLAGE, "effect" => "(100)", "quantity" => 4, "img" => 10], - ["type" => 7, "size" => 3, "name" => CONFUSION_UNIQUE, "vname" => CONFUSION_UNIQUEVILLAGE, "effect" => "(500)", "quantity" => 1, "img" => 10], - ], - - FOOL_DESC => [ - ["type" => 8, "size" => 1, "name" => FOOL_SMALL, "vname" => FOOL_SMALLVILLAGE, "effect" => "", "quantity" => 10, "img" => "fool"], - 2 => ["type" => 8, "size" => 3, "name" => FOOL_UNIQUE, "vname" => FOOL_UNIQUEVILLAGE, "effect" => "", "quantity" => 1, "img" => "fool"] - ] - ]; - - /* - |-------------------------------------------------------------------------- - | WW BUILDING PLANS - |-------------------------------------------------------------------------- - */ - - const NATARS_WW_BUILDING_PLANS = [ - PLAN_DESC => [ - ["type" => 11, "size" => 1, "name" => PLAN, "vname" => PLANVILLAGE, "effect" => "", "quantity" => 13, "img" => 1] - ] - ]; - - /* - |-------------------------------------------------------------------------- - | BUILDINGS SETUP - |-------------------------------------------------------------------------- - */ - - const NATARS_ARTIFACTS_BUILDINGS = [ - "f22t" => 27, "f22" => 20, - "f28t" => 25, "f28" => 10, - "f39t" => 16, "f39" => 1, - - "f19t" => 23, "f19" => 10, - "f20t" => 23, "f20" => 10, - "f21t" => 23, "f21" => 10, - "f23t" => 23, "f23" => 10, - "f24t" => 23, "f24" => 10, - "f25t" => 23, "f25" => 10, - "f26t" => 23, "f26" => 10, - "f27t" => 23, "f27" => 10, - "f29t" => 23, "f29" => 10, - "f30t" => 23, "f30" => 10, - "f31t" => 23, "f31" => 10, - "f32t" => 23, "f32" => 10, - "f33t" => 23, "f33" => 10, - "f34t" => 23, "f34" => 10, - "f35t" => 23, "f35" => 10, - "f36t" => 23, "f36" => 10, - "f37t" => 23, "f37" => 10, - "f38t" => 23, "f38" => 10, - ]; - - const NATARS_WW_VILLAGES_BUILDINGS = [ - "f99t" => 40, "f99" => 0, - "f22t" => 15, "f22" => 10, - "f34t" => 17, "f34" => 1, - - "f20t" => 10, "f20" => 20, - "f19t" => 10, "f19" => 10, - "f23t" => 11, "f23" => 20, - "f27t" => 11, "f27" => 10, - + + NATARS_TRIBE = 5, + + /** + * @var string Default Natars' email + */ + + NATARS_EMAIL = TRIBE5."@noreply.com", + + /** + * @var string Default Natars' description + */ + + NATARS_DESC = "************************** + [#natars] + **************************", + + /** + * @var array Possible Natars' capital locations + */ + + NATARS_CAPITAL_COORDINATES = [[WORLD_MAX, WORLD_MAX], + [WORLD_MAX, 0], + [WORLD_MAX, -WORLD_MAX], + [0, -WORLD_MAX], + [-WORLD_MAX, -WORLD_MAX], + [-WORLD_MAX, 0], + [-WORLD_MAX, WORLD_MAX], + [0, WORLD_MAX], + [WORLD_MAX / 10, WORLD_MAX / 20], + [WORLD_MAX / 10, -WORLD_MAX / 10], + [-WORLD_MAX / 20, -WORLD_MAX / 10], + [-WORLD_MAX / 10, 0], + [-WORLD_MAX / 20, WORLD_MAX / 10]], + + /** + * @var array Normal Natars' artifacts + */ + + NATARS_ARTIFACTS = [ARCHITECTS_DESC => [["type" => 1, "size" => 1, "name" => ARCHITECTS_SMALL, "vname" => ARCHITECTS_SMALLVILLAGE, "effect" => "(4x)", "quantity" => 6, "img" => 2], + ["type" => 1, "size" => 2, "name" => ARCHITECTS_LARGE, "vname" => ARCHITECTS_LARGEVILLAGE, "effect" => "(3x)", "quantity" => 4, "img" => 2], + ["type" => 1, "size" => 3, "name" => ARCHITECTS_UNIQUE,"vname" => ARCHITECTS_UNIQUEVILLAGE, "effect" => "(5x)", "quantity" => 1, "img" => 2]], + + HASTE_DESC => [["type" => 2, "size" => 1, "name" => HASTE_SMALL, "vname" => HASTE_SMALLVILLAGE, "effect" => "(2x)", "quantity" => 6, "img" => 4], + ["type" => 2, "size" => 2, "name" => HASTE_LARGE, "vname" => HASTE_LARGEVILLAGE, "effect" => "(1.5x)", "quantity" => 4, "img" => 4], + ["type" => 2, "size" => 3, "name" => HASTE_UNIQUE, "vname" => HASTE_UNIQUEVILLAGE, "effect" => "(3x)", "quantity" => 1, "img" => 4]], + + EYESIGHT_DESC => [["type" => 3, "size" => 1, "name" => EYESIGHT_SMALL, "vname" => EYESIGHT_SMALLVILLAGE, "effect" => "(5x)", "quantity" => 6, "img" => 5], + ["type" => 3, "size" => 2, "name" => EYESIGHT_LARGE, "vname" => EYESIGHT_LARGEVILLAGE, "effect" => "(3x)", "quantity" => 4, "img" => 5], + ["type" => 3, "size" => 3, "name" => EYESIGHT_UNIQUE, "vname" => EYESIGHT_UNIQUEVILLAGE, "effect" => "(10x)", "quantity" => 1, "img" => 5]], + + DIET_DESC => [["type" => 4, "size" => 1, "name" => DIET_SMALL, "vname" => DIET_SMALLVILLAGE, "effect" => "(50%)", "quantity" => 6, "img" => 6], + ["type" => 4, "size" => 2, "name" => DIET_LARGE, "vname" => DIET_LARGEVILLAGE, "effect" => "(25%)", "quantity" => 4, "img" => 6], + ["type" => 4, "size" => 3, "name" => DIET_UNIQUE, "vname" => DIET_UNIQUEVILLAGE, "effect" => "(50%)", "quantity" => 1, "img" => 6]], + + ACADEMIC_DESC => [["type" => 5, "size" => 1, "name" => ACADEMIC_SMALL, "vname" => ACADEMIC_SMALLVILLAGE, "effect" => "(50%)", "quantity" => 6, "img" => 8], + ["type" => 5, "size" => 2, "name" => ACADEMIC_LARGE, "vname" => ACADEMIC_LARGEVILLAGE, "effect" => "(25%)", "quantity" => 4, "img" => 8], + ["type" => 5, "size" => 3, "name" => ACADEMIC_UNIQUE, "vname" => ACADEMIC_UNIQUEVILLAGE, "effect" => "(50%)", "quantity" => 1, "img" => 8]], + + STORAGE_DESC => [["type" => 6, "size" => 1, "name" => STORAGE_SMALL, "vname" => STORAGE_SMALLVILLAGE, "effect" => "(50%)", "quantity" => 6, "img" => 9], + ["type" => 6, "size" => 2, "name" => STORAGE_LARGE, "vname" => STORAGE_LARGEVILLAGE, "effect" => "(25%)", "quantity" => 4, "img" => 9]], + + CONFUSION_DESC => [["type" => 7, "size" => 1, "name" => CONFUSION_SMALL, "vname" => CONFUSION_SMALLVILLAGE, "effect" => "(200)", "quantity" => 6, "img" => 10], + ["type" => 7, "size" => 2, "name" => CONFUSION_LARGE, "vname" => CONFUSION_LARGEVILLAGE, "effect" => "(100)", "quantity" => 4, "img" => 10], + ["type" => 7, "size" => 3, "name" => CONFUSION_UNIQUE, "vname" => CONFUSION_UNIQUEVILLAGE, "effect" => "(500)", "quantity" => 1, "img" => 10]], + + FOOL_DESC => [["type" => 8, "size" => 1, "name" => FOOL_SMALL, "vname" => FOOL_SMALLVILLAGE, "effect" => "", "quantity" => 10, "img" => "fool"], + 2 => ["type" => 8, "size" => 3, "name" => FOOL_UNIQUE, "vname" => FOOL_UNIQUEVILLAGE, "effect" => "", "quantity" => 1, "img" => "fool"]]], + + /** + * @var array WW building plans Natars' artifacts + */ + + NATARS_WW_BUILDING_PLANS = [PLAN_DESC => [["type" => 11, "size" => 1, "name" => PLAN, "vname" => PLANVILLAGE, "effect" => "", "quantity" => 13, "img" => 1]]], + + /** + * @var array Natars' normal artifacts buildings + */ + + NATARS_ARTIFACTS_BUILDINGS = [ + //Treasury of the 20th level, Residence of the 10th level, Rally Point of the 1th level + "f22t" => 27, "f22" => 20, "f28t" => 25, "f28" => 10, "f39t" => 16, "f39" => 1, + //18 Cranny of the 10th level + "f19t" => 23, "f19" => 10, "f20t" => 23, "f20" => 10, "f21t" => 23, "f21" => 10, + "f23t" => 23, "f23" => 10, "f24t" => 23, "f24" => 10, "f25t" => 23, "f25" => 10, + "f26t" => 23, "f26" => 10, "f27t" => 23, "f27" => 10, "f29t" => 23, "f29" => 10, + "f30t" => 23, "f30" => 10, "f31t" => 23, "f31" => 10, "f32t" => 23, "f32" => 10, + "f33t" => 23, "f33" => 10, "f34t" => 23, "f34" => 10, "f35t" => 23, "f35" => 10, + "f36t" => 23, "f36" => 10, "f37t" => 23, "f37" => 10, "f38t" => 23, "f38" => 10], + + + /** + * @var array Natars' WW villages buildings + */ + + NATARS_WW_VILLAGES_BUILDINGS = [ + //WW of the 0th level, Main Building of the 10th level, Marketplace of the 1th level + "f99t" => 40, "f99" => 0, "f22t" => 15, "f22" => 10, "f34t" => 17, "f34" => 1, + //Warehouse of the 20th & 10th level, Granary of the 20th & 10th level + "f20t" => 10, "f20" => 20, "f19t" => 10, "f19" => 10, "f23t" => 11, "f23" => 20, "f27t" => 11, "f27" => 10, + //All Woodcutter of the 5th level "f1" => 5, "f3" => 5, "f14" => 5, "f17" => 5, + //All Clay Pit of the 5th level "f5" => 5, "f6" => 5, "f16" => 5, "f18" => 5, + //All Iron Mine of the 5th level "f4" => 5, "f7" => 5, "f10" => 5, "f11" => 5, - "f2" => 6, "f8" => 6, "f9" => 6, "f12" => 6, "f13" => 6, "f15" => 6, - ]; + //All Cropland of the 6th level + "f2" => 6, "f8" => 6, "f9" => 6, "f12" => 6, "f13" => 6, "f15" => 6], + + /** + * @var int The base amount of Natars' spying units, used when Natars account is created + */ + + NATARS_BASE_SPY = 1500, - const NATARS_BASE_SPY = 1500; - const NATARS_BASE_WW_VILLAGES = 13; - - /* - |-------------------------------------------------------------------------- - | TROOP GENERATORS - |-------------------------------------------------------------------------- - */ - - public $natarsArtifactsUnits; - public $natarsWWVillagesUnits; - - public function __construct() - { - /** - * Units for artifact villages - */ - $this->natarsArtifactsUnits = function ($multiplier) { - return [ - 41 => rand(1000 * $multiplier, 2000 * $multiplier) * NATARS_UNITS, - 42 => rand(1500 * $multiplier, 2000 * $multiplier) * NATARS_UNITS, - 43 => rand(2300 * $multiplier, 2800 * $multiplier) * NATARS_UNITS, - 44 => rand(25 * $multiplier, 75 * $multiplier) * NATARS_UNITS, - 45 => rand(1200 * $multiplier, 1900 * $multiplier) * NATARS_UNITS, - 46 => rand(1500 * $multiplier, 2000 * $multiplier) * NATARS_UNITS, - 47 => rand(500 * $multiplier, 900 * $multiplier) * NATARS_UNITS, - 48 => rand(100 * $multiplier, 300 * $multiplier) * NATARS_UNITS, - 49 => rand(1 * $multiplier, 5 * $multiplier) * NATARS_UNITS, - 50 => rand(1 * $multiplier, 5 * $multiplier) * NATARS_UNITS, - ]; + /** + * @var int the base amount of Natars' WW villages + */ + + NATARS_BASE_WW_VILLAGES = 13; + + public + + /** + * @var funct Natars' troops for normal artifact + */ + + $natarsArtifactsUnits, + + /** + * @var funct WW villages Natars' troops + */ + + $natarsWWVillagesUnits; + + public function __construct(){ + + $this->natarsArtifactsUnits = function($multiplier){ + return [41 => rand(1000 * $multiplier, 2000 * $multiplier) * NATARS_UNITS, + 42 => rand(1500 * $multiplier, 2000 * $multiplier) * NATARS_UNITS, + 43 => rand(2300 * $multiplier, 2800 * $multiplier) * NATARS_UNITS, + 44 => rand(25 * $multiplier, 75 * $multiplier) * NATARS_UNITS, + 45 => rand(1200 * $multiplier, 1900 * $multiplier) * NATARS_UNITS, + 46 => rand(1500 * $multiplier, 2000 * $multiplier) * NATARS_UNITS, + 47 => rand(500 * $multiplier, 900 * $multiplier) * NATARS_UNITS, + 48 => rand(100 * $multiplier, 300 * $multiplier) * NATARS_UNITS, + 49 => rand(1 * $multiplier, 5 * $multiplier) * NATARS_UNITS, + 50 => rand(1 * $multiplier, 5 * $multiplier) * NATARS_UNITS]; }; - - /** - * Units for WW villages - */ - $this->natarsWWVillagesUnits = function () { - return [ - 41 => rand(500, 12000) * NATARS_UNITS, - 42 => rand(1000, 14000) * NATARS_UNITS, - 43 => rand(2000, 16000) * NATARS_UNITS, - 44 => rand(100, 500) * NATARS_UNITS, - 45 => rand(480, 17000) * NATARS_UNITS, - 46 => rand(600, 18000) * NATARS_UNITS, - 47 => rand(2000, 16000) * NATARS_UNITS, - 48 => rand(400, 2000) * NATARS_UNITS, - 49 => rand(40, 200) * NATARS_UNITS, - 50 => rand(50, 250) * NATARS_UNITS, - ]; + + $this->natarsWWVillagesUnits = function(){ + return [41 => rand(500, 12000) * NATARS_UNITS, + 42 => rand(1000 , 14000) * NATARS_UNITS, + 43 => rand(2000, 16000) * NATARS_UNITS, + 44 => rand(100, 500) * NATARS_UNITS, + 45 => rand(480, 17000) * NATARS_UNITS, + 46 => rand(600, 18000) * NATARS_UNITS, + 47 => rand(2000, 16000) * NATARS_UNITS, + 48 => rand(400, 2000) * NATARS_UNITS, + 49 => rand(40, 200) * NATARS_UNITS, + 50 => rand(50, 250) * NATARS_UNITS]; }; + } - - /* - |-------------------------------------------------------------------------- - | NATARS CREATION - |-------------------------------------------------------------------------- - */ - - public function createNatars() - { + + /** + * Called when Natars account needs to be created, creates his account and capital village + * + */ + + public function createNatars(){ global $database; - + + //Register the Natars account, the Natars' password is the same as the MH's one $password = $database->getUserField(5, 'password', 0); - - $database->register( - TRIBE5, - $password, - self::NATARS_EMAIL, - self::NATARS_TRIBE, - null, - self::NATARS_UID, - self::NATARS_DESC - ); - + $database->register(TRIBE5, $password, self::NATARS_EMAIL, self::NATARS_TRIBE, null, self::NATARS_UID, self::NATARS_DESC); + + //Convert from coordinates to village IDs $possibleWids = $database->getVilWrefs(self::NATARS_CAPITAL_COORDINATES); + + //Check if the villages aren't already taken $wid = $database->getFreeVillage($possibleWids); - $wid = $database->generateVillages( - [ - [ - 'wid' => $wid, - 'mode' => 2, - 'type' => 3, - 'kid' => 0, - 'capital' => 1, - 'pop' => 834, - 'name' => null, - 'natar' => 0 - ] - ], - self::NATARS_UID, - TRIBE5 - ); + //Generate the Natars' capital + $wid = $database->generateVillages([['wid' => $wid, 'mode' => 2, 'type' => 3, 'kid' => 0, 'capital' => 1, 'pop' => 834, 'name' => null, 'natar' => 0]], self::NATARS_UID, TRIBE5); + //Scouts all players $this->scoutAllPlayers($wid); + + //Add artifacts $this->addArtifactVillages(self::NATARS_ARTIFACTS); } - - /* - |-------------------------------------------------------------------------- - | SCOUT SYSTEM - |-------------------------------------------------------------------------- - */ - - public function scoutAllPlayers($wid) - { + + /** + * Called when Natars account has been created + * + * @param int $wid The village ID of the Natars' capital + */ + + public function scoutAllPlayers($wid){ global $database; - + $array = $database->getProfileVillages(0, 1); - $refs = []; $vils = []; - - foreach ($array as $vill) { - $refs[] = $database->addAttack( - $wid, - 0, - 0, - 0, - self::NATARS_BASE_SPY * NATARS_UNITS, - 0, 0, 0, 0, 0, 0, 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 20, - 0, 0, 0, 0 - ); - + + foreach($array as $vill){ + $refs[] = $database->addAttack($wid, 0, 0, 0, self::NATARS_BASE_SPY * NATARS_UNITS, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 0); $vils[] = $vill['wref']; } - - $type = $from = $to = $ref = $time = $endtime = []; - $counter = 0; - + + $type = []; + $from = []; + $to = []; + $ref = []; + $time = []; $timeValue = time(); + $endtime = []; $endtimeValue = $timeValue + round(10000 / SPEED); - + $counter = 0; + foreach ($refs as $index => $refID) { - $type[] = 3; $from[] = $wid; $to[] = $vils[$index]; $ref[] = $refID; $time[] = $timeValue; $endtime[] = $endtimeValue; - + + // limit the insert, so it can push through any reasonable network limits imposed if (++$counter > 25) { $database->addMovement($type, $from, $to, $ref, $time, $endtime); - - $type = $from = $to = $ref = $time = $endtime = []; + + $type = []; + $from = []; + $to = []; + $ref = []; + $time = []; + $endtime = []; $counter = 0; } } - - if ($counter > 0) { - $database->addMovement($type, $from, $to, $ref, $time, $endtime); - } + + if ($counter > 0) $database->addMovement($type, $from, $to, $ref, $time, $endtime); } - - /* - |-------------------------------------------------------------------------- - | ARTIFACT VILLAGES - |-------------------------------------------------------------------------- - */ - - public function addArtifactVillages($artifactArrays, $uid = self::NATARS_UID, $addTroops = true) - { + + /** + * Creates villages and puts the desired artifacts in it + * + * @param array $artifactArrays The array containing the artifacts to insert + * @param int $uid The owner's user ID (Natars) + * @param bool $addTroops Add troops to the village if true, and vice versa if false + */ + + public function addArtifactVillages($artifactArrays, $uid = self::NATARS_UID, $addTroops = true) { global $database; + //Variables initialization + $artifactNumber = 0; $artifactVillages = $artifactTroops = $artifactBuildings = $artifactsToAdd = $wids = []; - - foreach ($artifactArrays as $desc => $artifactType) { - foreach ($artifactType as $artifact) { - for ($i = 0; $i < $artifact['quantity']; $i++) { - - $artifactVillages[] = [ - 'wid' => 0, - 'mode' => $artifact['size'] + 1, - 'type' => 3, - 'kid' => rand(1, 4), - 'capital' => 0, - 'pop' => 163, - 'name' => $artifact['vname'], - 'natar' => 0 - ]; - - $multiplier = ($artifact['size'] == 3) ? 4 : $artifact['size']; + + //Create the artifact villages array + foreach($artifactArrays as $desc => $artifactType){ + foreach($artifactType as $artifact){ + for($i = 0; $i < $artifact['quantity']; $i++){ + //Generate the villages array + $artifactVillages[] = ['wid' => 0, 'mode' => $artifact['size'] + 1, 'type' => 3, 'kid' => rand(1, 4), 'capital' => 0, 'pop' => 163, 'name' => $artifact['vname'], 'natar' => 0]; + + //Set the unit arrays (1, 2 or 4) + $multiplier = $artifact['size'] == 3 ? 4 : $artifact['size']; $unitArrays = ($this->natarsArtifactsUnits)($multiplier); - - if ($addTroops) { - $artifactTroops[1][] = array_values($unitArrays); - } - + + //Generate the unit arrays + if($addTroops) $artifactTroops[1][] = array_values($unitArrays); $artifactBuildings[1][] = array_values(self::NATARS_ARTIFACTS_BUILDINGS); - - $artifactsToAdd[] = [ - 'owner' => $uid, - 'type' => $artifact['type'], - 'size' => $artifact['size'], - 'name' => $artifact['name'], - 'desc' => $desc, - 'effect' => $artifact['effect'], - 'img' => "type" . $artifact['img'] . ".gif" - ]; - } + + //Generate the artifacts array + $artifactsToAdd[] = ['owner' => $uid, 'type' => $artifact['type'], 'size' => $artifact['size'], + 'name' => $artifact['name'], 'desc' => $desc, 'effect' => $artifact['effect'], + 'img' => "type".$artifact['img'].".gif"]; + } } - } - - if ($addTroops) { - $artifactTroops[0] = array_keys($unitArrays); - } - + } + + //Set the unit types by using the last $unitArrays + if($addTroops) $artifactTroops[0] = array_keys($unitArrays); $artifactBuildings[0] = array_keys(self::NATARS_ARTIFACTS_BUILDINGS); - - $wids = $database->generateVillages( - $artifactVillages, - $uid, - TRIBE5, - $addTroops ? $artifactTroops : null, - $artifactBuildings - ); - + + //Generate the wids + $wids = array_merge($wids, (array)$database->generateVillages($artifactVillages, $uid, TRIBE5, $addTroops ? $artifactTroops : null, $artifactBuildings)); + + //Create the artifacts for the generated wids $database->addArtefacts($wids, $artifactsToAdd); } - - /* - |-------------------------------------------------------------------------- - | WW VILLAGES - |-------------------------------------------------------------------------- - */ - - public function createWWVillages($numberOfVillages = self::NATARS_BASE_WW_VILLAGES, $uid = self::NATARS_UID, $addTroops = true) - { + + /** + * Called when WW villages need to be created + * + * @param int $numberOfVillages The number of villages that have to be added + * @param int $uid The player ID + * @param bool $addTroops Add troops to the village if true, and vice versa if false + */ + + public function createWWVillages($numberOfVillages = self::NATARS_BASE_WW_VILLAGES, $uid = self::NATARS_UID, $addTroops = true){ global $database; - - $villageArrays = $troopArrays = $buildingArrays = []; - - for ($i = 1; $i <= $numberOfVillages; $i++) { - - $villageArrays[] = [ - 'wid' => 0, - 'mode' => 5, - 'type' => 3, - 'kid' => ($i == $numberOfVillages ? rand(1, 4) : ($i % 4) + 1), - 'capital' => 0, - 'pop' => 233, - 'name' => WWVILLAGE, - 'natar' => 1 - ]; - - if ($addTroops) { - $troopArrays[1][] = array_values(($this->natarsWWVillagesUnits)()); - } - + + $villageArrays = $troopArrays = $buildingArrays = $wids = []; + for($i = 1; $i <= $numberOfVillages; $i++){ + $villageArrays[] = ['wid' => 0, 'mode' => 5, 'type' => 3, 'kid' => ($i == $numberOfVillages ? rand(1, 4) : ($i % 4) + 1), 'capital' => 0, 'pop' => 233, 'name' => WWVILLAGE, 'natar' => 1]; + if($addTroops) $troopArrays[1][] = array_values(($this->natarsWWVillagesUnits)()); $buildingArrays[1][] = array_values(self::NATARS_WW_VILLAGES_BUILDINGS); } - if ($addTroops) { - $troopArrays[0] = array_keys(($this->natarsWWVillagesUnits)()); - } - + if($addTroops) $troopArrays[0] = array_keys(($this->natarsWWVillagesUnits)()); $buildingArrays[0] = array_keys(self::NATARS_WW_VILLAGES_BUILDINGS); - - $database->generateVillages( - $villageArrays, - $uid, - null, - $addTroops ? $troopArrays : null, - $buildingArrays - ); + + $wids = $database->generateVillages($villageArrays, $uid, null, $addTroops ? $troopArrays : null, $buildingArrays); } - - /* - |-------------------------------------------------------------------------- - | WW BUILDING PLANS - |-------------------------------------------------------------------------- - */ - - public function createWWBuildingPlans() - { + + /** + * Called when WW building plans need to be created + * + */ + + public function createWWBuildingPlans(){ + + //Add the artifacts and villages $this->addArtifactVillages(self::NATARS_WW_BUILDING_PLANS); } - - /* - |-------------------------------------------------------------------------- - | ARTIFACT ACTIVATION SYSTEM - |-------------------------------------------------------------------------- - */ - - public function activateArtifacts() - { + + /** + * Automatically activate all artifacts that need to be activated + * + */ + + public function activateArtifacts(){ global $database; - + + //Get all inactive artifacts that have to be activated --> (24 hours / Speed of the server) $time = time(); - - $artifacts = $database->getInactiveArtifacts( - round($time - $this->getActivationTime()) - ); - - if (empty($artifacts)) return; - - $cache = []; - - foreach ($artifacts as $artifact) { - $cache[$artifact['owner']][] = $artifact; - } - - foreach ($cache as $owner => $inactiveArtifacts) { - - $ownArtifacts = $database->getOwnArtifactsSum($owner, true); - - foreach ($inactiveArtifacts as $artifact) { - - if ($ownArtifacts['totals'] < 3) { - - if ($artifact['size'] == 1) { - + $artifacts = $database->getInactiveArtifacts(round($time - (86400 / (SPEED == 2 ? 1.5 : (SPEED == 3 ? 2 : SPEED))))); + + if(!empty($artifacts)){ + + //Cache inactive artifacts by owner + $inactiveArtifactsCache = []; + foreach($artifacts as $artifact) $inactiveArtifactsCache[$artifact['owner']][] = $artifact; + + foreach($inactiveArtifactsCache as $owner => $inactiveArtifacts){ + + //Initialize the array + $activeArtifacts = []; + + //Get cached active artifacts + $ownArtifacts = $database->getOwnArtifactsSum($owner, true); + + //Activate activable artifacts + foreach($inactiveArtifacts as $artifact){ + if($ownArtifacts['totals'] < 3){ + if($artifact['size'] == 1){ //Village effect + $database->activateArtifact($artifact['id']); + $ownArtifacts['totals']++; + $ownArtifacts['small']++; + }elseif($artifact['size'] == 2 && !$ownArtifacts['unique'] && !$ownArtifacts['great']){ //Account effect + $database->activateArtifact($artifact['id']); + $ownArtifacts['totals']++; + $ownArtifacts['great']++; + }elseif($artifact['size'] == 3 && !$ownArtifacts['unique'] && !$ownArtifacts['great']){ //Unique effect + $database->activateArtifact($artifact['id']); + $ownArtifacts['totals']++; + $ownArtifacts['unique']++; + } + }elseif($ownArtifacts['small'] == 3 && $artifact['size'] > 1){ + //If we've 3 village effect artifacts activated and at least one account/unique effect not activated + //then we need to deactivate the most recent village effect artifact and activate the oldest account + //or unique effect artifact + + //Deactivate the most recent village effect artifact + $database->activateArtifact($database->getNewestArtifactBySize($owner, 1)['id'], 0); + + //Activate the great/unique artifact $database->activateArtifact($artifact['id']); + + $ownArtifacts['small']--; $ownArtifacts['totals']++; - $ownArtifacts['small']++; - - } elseif ($artifact['size'] == 2 && !$ownArtifacts['unique'] && !$ownArtifacts['great']) { - - $database->activateArtifact($artifact['id']); - $ownArtifacts['totals']++; - $ownArtifacts['great']++; - - } elseif ($artifact['size'] == 3 && !$ownArtifacts['unique'] && !$ownArtifacts['great']) { - - $database->activateArtifact($artifact['id']); - $ownArtifacts['totals']++; - $ownArtifacts['unique']++; + if($artifact['size'] == 2) $ownArtifacts['great']++; + else $ownArtifacts['unique']++; } - - } elseif ($ownArtifacts['small'] == 3 && $artifact['size'] > 1) { - - $database->activateArtifact( - $database->getNewestArtifactBySize($owner, 1)['id'], - 0 - ); - - $database->activateArtifact($artifact['id']); - - $ownArtifacts['small']--; - $ownArtifacts['totals']++; - - if ($artifact['size'] == 2) $ownArtifacts['great']++; - else $ownArtifacts['unique']++; } } } } - - /* - |-------------------------------------------------------------------------- - | RETURN ARTIFACT - |-------------------------------------------------------------------------- - */ - - public function returnArtifactToNatars($artifactArray) - { + /** + * Return the selected artifact, to the Natars account, by creating a new village and + * by moving the artifact into it + * + * @param array $artifact The artifact array + */ + + public function returnArtifactToNatars($artifactArray){ global $database; - - $artifactArrays = array_merge( - self::NATARS_ARTIFACTS, - self::NATARS_WW_BUILDING_PLANS - ); - - $villageArrays = [[ - 'wid' => 0, - 'mode' => $artifactArray['size'] + 1, - 'type' => 3, - 'kid' => rand(1, 4), - 'capital' => 0, - 'pop' => 163, + + //Set the village arrays + $artifactArrays = array_merge(self::NATARS_ARTIFACTS, self::NATARS_WW_BUILDING_PLANS); + $villageArrays = [['wid' => 0, 'mode' => $artifactArray['size'] + 1, 'type' => 3, + 'kid' => rand(1, 4), 'capital' => 0, 'pop' => 163, 'name' => $artifactArrays[$artifactArray['desc']][$artifactArray['size'] - 1]['vname'], - 'natar' => 0 - ]]; - - $multiplier = ($artifactArray['size'] == 3) ? 4 : $artifactArray['size']; + 'natar' => 0]]; + + //Set the unit arrays + $multiplier = $artifactArray['size'] == 3 ? 4 : $artifactArray['size']; $unitsArray = ($this->natarsArtifactsUnits)($multiplier); - + + //Set the unit types $artifactTroops[1][] = array_values($unitsArray); $artifactTroops[0] = array_keys($unitsArray); - + + //Set the buildings array $artifactBuildings[1][] = array_values(self::NATARS_ARTIFACTS_BUILDINGS); $artifactBuildings[0] = array_keys(self::NATARS_ARTIFACTS_BUILDINGS); - $wid = $database->generateVillages( - $villageArrays, - self::NATARS_UID, - TRIBE5, - $artifactTroops, - $artifactBuildings - ); - - $database->updateArtifactDetails( - $artifactArray['id'], - [ - 'vref' => $wid, - 'owner' => self::NATARS_UID, - 'active' => 0, - 'del' => 0 - ] - ); + //Generate the village + $wid = $database->generateVillages($villageArrays, self::NATARS_UID, TRIBE5, $artifactTroops, $artifactBuildings); + + //Update the artifact with the new village id and owner + $database->updateArtifactDetails($artifactArray['id'], ['vref' => $wid, 'owner' => self::NATARS_UID, 'active' => 0, 'del' => 0]); } - - /* - |-------------------------------------------------------------------------- - | ARTIFACT INFO DISPLAY - |-------------------------------------------------------------------------- - */ - - public static function getArtifactInfo($artifact) - { - $instance = new self(); - $activationTime = $instance->getActivationTime(); - + + /** + * Gets the artifact informations in plain text + * + * @param int $artifact The artifact + * @return array Returns the information of the artifacts + */ + + public static function getArtifactInfo($artifact){ + + $activationTime = 86400 / (SPEED == 2 ? 1.5 : (SPEED == 3 ? 2 : SPEED)); $time = time(); - $nextEffect = "-"; - if (is_array($artifact)) { + if ( is_array($artifact) ) { + if($artifact['size'] == 1 && $artifact['type'] != 11){ + $requiredLevel = 10; + $effectInfluence = VILLAGE; + }else{ + $requiredLevel = $artifact['type'] != 11 ? 20 : 10; + $effectInfluence = ACCOUNT; + } - if ($artifact['size'] == 1 && $artifact['type'] != 11) { - $requiredLevel = 10; - $effectInfluence = VILLAGE; - } else { - $requiredLevel = ($artifact['type'] != 11) ? 20 : 10; - $effectInfluence = ACCOUNT; - } + if($artifact['owner'] == 3) $active = "-"; + elseif(!$artifact['active'] && $artifact['conquered'] < $time - $activationTime) $active = "Can't be activated"; + elseif (!$artifact['active']) $active = date("d.m.Y H:i:s", $artifact['conquered'] + $activationTime); + else + { + $active = "".ACTIVE.""; + $nextEffect = date("d.m.Y H:i:s", $artifact['lastupdate'] + (86400 / (SPEED == 2 ? 1.5 : (SPEED == 3 ? 2 : SPEED)))); + } - if ($artifact['owner'] == 3) { - $active = "-"; - } elseif (!$artifact['active'] && $artifact['conquered'] < $time - $activationTime) { - $active = "Can't be activated"; - } elseif (!$artifact['active']) { - $active = date("d.m.Y H:i:s", $artifact['conquered'] + $activationTime); - } else { - $active = "" . ACTIVE . ""; - $nextEffect = date("d.m.Y H:i:s", $artifact['lastupdate'] + $activationTime); - } - - $kind = ($artifact['type'] == 8) ? $artifact['kind'] : $artifact['type']; - $effect = ($artifact['type'] == 8) ? $artifact['effect2'] : $artifact['effect']; - - $artifactBadEffect = ($artifact['type'] == 8 && $artifact['bad_effect'] == 1); - - switch ($kind) { - case 1: $betterorbadder = $artifactBadEffect ? BUILDING_WEAKER : BUILDING_STRONGER; break; - case 2: $betterorbadder = $artifactBadEffect ? TROOPS_SLOWEST : TROOPS_FASTER; break; - case 3: $betterorbadder = $artifactBadEffect ? SPIES_DECRESE : SPIES_INCREASE; break; - case 4: $betterorbadder = $artifactBadEffect ? CONSUME_HIGH : CONSUME_LESS; break; - case 5: $betterorbadder = $artifactBadEffect ? TROOPS_MAKE_SLOWEST : TROOPS_MAKE_FASTER; break; - case 6: $betterorbadder = YOU_CONSTRUCT; break; - case 7: $betterorbadder = $artifactBadEffect ? CRANNY_DECRESE : CRANNY_INCREASED; break; - case 8: $betterorbadder = $artifactBadEffect ? SPIES_INCREASE : SPIES_DECRESE; break; - } - - $bonus = isset($betterorbadder) - ? $betterorbadder . " (" . str_replace(["(", ")"], "", $effect) . ")" - : (($kind == 11 && $artifact['active']) ? "" . WW_BUILDING_PLAN . "" : "Not yet active"); + //// Added by brainiac - thank you + if ($artifact['type'] == 8) + { + $kind = $artifact['kind']; + $effect = $artifact['effect2']; + }else{ + $kind = $artifact['type']; + $effect = $artifact['effect']; + } + $artifactBadEffect = $artifact['type'] == 8 && $artifact['bad_effect'] == 1; + switch($kind){ + case 1: + $betterorbadder = $artifactBadEffect ? BUILDING_WEAKER : BUILDING_STRONGER; + break; + case 2: + $betterorbadder = $artifactBadEffect ? TROOPS_SLOWEST : TROOPS_FASTER; + break; + case 3: + $betterorbadder = $artifactBadEffect ? SPIES_DECRESE : SPIES_INCREASE; + break; + case 4: + $betterorbadder = $artifactBadEffect ? CONSUME_HIGH : CONSUME_LESS; + break; + case 5: + $betterorbadder = $artifactBadEffect ? TROOPS_MAKE_SLOWEST : TROOPS_MAKE_FASTER; + break; + case 6: + $betterorbadder = $artifactBadEffect ? YOU_CONSTRUCT : YOU_CONSTRUCT; + break; + case 7: + $betterorbadder = $artifactBadEffect ? CRANNY_DECRESE : CRANNY_INCREASED; + break; + case 8: + $betterorbadder = $artifactBadEffect ? SPIES_INCREASE : SPIES_DECRESE; + break; + } + $bonus = isset($betterorbadder) ? $betterorbadder." (".str_replace(["(", ")"], "" , $effect).")" : (($kind == 11 && $artifact['active']) ? "".WW_BUILDING_PLAN."" : "Not yet active"); } else { - $requiredLevel = $active = $bonus = $effectInfluence = $nextEffect = 0; + $requiredLevel = 0; + $active = 0; + $bonus = 0; + $effectInfluence = 0; + $nextEffect = 0; } - - return [ - "requiredLevel" => $requiredLevel, - "active" => $active, - "bonus" => $bonus, - "effectInfluence" => $effectInfluence, - "nextEffect" => $nextEffect - ]; + + return ["requiredLevel" => $requiredLevel, "active" => $active, + "bonus" => $bonus, "effectInfluence" => $effectInfluence, + "nextEffect" => $nextEffect]; } } + ?> \ No newline at end of file