[FIX]TravianZ Fix for git issue causing lag

Results 1 to 5 of 5
  1. #1
    Currently looking at PHP advocaite is offline
    MemberRank
    May 2009 Join Date
    GithubLocation
    872Posts

    [FIX]TravianZ Fix for git issue causing lag

    FIX FOR https://github.com/yi12345/TravianZ/issues/126 <-- github issue solved.
    someone change something in automation i know i fixed this before and made it only do village your hiting so i fixed automation to only update the oasis thats being hit and when hit is prosessed not every click.

    here is new automation i edit latest automation of github so yi can push with ease

    PHP Code:
    <?php
    # Developed By : Travianx team and now developed by travianZ team
    # you have no rights to change this YOU HAD NO RIGHT TO CHANGE ORIGINAL  !!
    # Fixed : Doubling Troops , Hero not dieing etc ..
    # Fix by advocaite stop oasis causeing major lag

    class Automation {

        private 
    $bountyresarray = array();
        private 
    $bountyinfoarray = array();
        private 
    $bountyproduction = array();
        private 
    $bountyocounter = array();
        private 
    $bountyunitall = array();
        private 
    $bountypop;
        private 
    $bountyOresarray = array();
        private 
    $bountyOinfoarray = array();
        private 
    $bountyOproduction = array();
        private 
    $bountyOpop 1;

            public function 
    isWinner() {
            
    $q mysql_query("SELECT vref FROM ".TB_PREFIX."fdata WHERE f99 = '100' and f99t = '40'");
            
    $isThere mysql_num_rows($q);
            if(
    $isThere 0)
            {
            
    header('Location: /winner.php');
            }else{
            
    ## there is no winner
            
    }
        }

            public function 
    procResType($ref) {
            global 
    $session;
            switch(
    $ref) {
                case 
    1$build "Woodcutter"; break;
                case 
    2$build "Clay Pit"; break;
                case 
    3$build "Iron Mine"; break;
                case 
    4$build "Cropland"; break;
                case 
    5$build "Sawmill"; break;
                case 
    6$build "Brickyard"; break;
                case 
    7$build "Iron Foundry"; break;
                case 
    8$build "Grain Mill"; break;
                case 
    9$build "Bakery"; break;
                case 
    10$build "Warehouse"; break;
                case 
    11$build "Granary"; break;
                case 
    12$build "Blacksmith"; break;
                case 
    13$build "Armoury"; break;
                case 
    14$build "Tournament Square"; break;
                case 
    15$build "Main Building"; break;
                case 
    16$build "Rally Point"; break;
                case 
    17$build "Marketplace"; break;
                case 
    18$build "Embassy"; break;
                case 
    19$build "Barracks"; break;
                case 
    20$build "Stable"; break;
                case 
    21$build "Workshop"; break;
                case 
    22$build "Academy"; break;
                case 
    23$build "Cranny"; break;
                case 
    24$build "Town Hall"; break;
                case 
    25$build "Residence"; break;
                case 
    26$build "Palace"; break;
                case 
    27$build "Treasury"; break;
                case 
    28$build "Trade Office"; break;
                case 
    29$build "Great Barracks"; break;
                case 
    30$build "Great Stable"; break;
                case 
    31$build "City Wall"; break;
                case 
    32$build "Earth Wall"; break;
                case 
    33$build "Palisade"; break;
                case 
    34$build "Stonemason's Lodge"; break;
                case 
    35$build "Brewery"; break;
                case 
    36$build "Trapper"; break;
                case 
    37$build "Hero's Mansion"; break;
                case 
    38$build "Great Warehouse"; break;
                case 
    39$build "Great Granary"; break;
                case 
    40$build "Wonder of the World"; break;
                case 
    41$build "Horse Drinking Trough"; break;
                case 
    42$build "Great Workshop"; break;
                default: 
    $build "Nothing had"; break;
            }
            return 
    addslashes($build);
        }

        function 
    recountPop($vid){
        global 
    $database;
            
    $fdata $database->getResourceLevel($vid);
            
    $popTot 0;

            for (
    $i 1$i <= 40$i++) {
                
    $lvl $fdata["f".$i];
                
    $building $fdata["f".$i."t"];
                if(
    $building){
                    
    $popTot += $this->buildingPOP($building,$lvl);
                }
            }

            
    $q "UPDATE ".TB_PREFIX."vdata set pop = $popTot where wref = $vid";
            
    mysql_query($q);

            return 
    $popTot;

        }

        function 
    recountCP($vid){
        global 
    $database;
            
    $fdata $database->getResourceLevel($vid);
            
    $popTot 0;

            for (
    $i 1$i <= 40$i++) {
                
    $lvl $fdata["f".$i];
                
    $building $fdata["f".$i."t"];
                if(
    $building){
                    
    $popTot += $this->buildingCP($building,$lvl);
                }
            }

            
    $q "UPDATE ".TB_PREFIX."vdata set cp = $popTot where wref = $vid";
            
    mysql_query($q);

            return 
    $popTot;

        }

        function 
    buildingPOP($f,$lvl){
        
    $name "bid".$f;
        global $
    $name;
            
    $popT 0;
            
    $dataarray = $$name;

            for (
    $i 0$i <= $lvl$i++) {
                
    $popT += $dataarray[$i]['pop'];
            }
        return 
    $popT;
        }

        function 
    buildingCP($f,$lvl){
        
    $name "bid".$f;
        global $
    $name;
            
    $popT 0;
            
    $dataarray = $$name;

            for (
    $i 0$i <= $lvl$i++) {
                
    $popT += $dataarray[$i]['cp'];
            }
        return 
    $popT;
        }

        public function 
    Automation() {

            
    $this->procClimbers();
            
    $this->ClearUser();
            
    $this->ClearInactive();
            
    $this->pruneResource();
            
    $this->pruneOResource();
            
    $this->checkWWAttacks();
            if(!
    file_exists("GameEngine/Prevention/culturepoints.txt") or time()-filemtime("GameEngine/Prevention/culturepoints.txt")>10) {
                
    $this->culturePoints();
            }
            if(!
    file_exists("GameEngine/Prevention/updatehero.txt") or time()-filemtime("GameEngine/Prevention/updatehero.txt")>50) {
                
    $this->updateHero();
            }
            if(!
    file_exists("GameEngine/Prevention/cleardeleting.txt") or time()-filemtime("GameEngine/Prevention/cleardeleting.txt")>10) {
                
    $this->clearDeleting();
            }
            if (! 
    file_exists("GameEngine/Prevention/build.txt") or time() - filemtime("GameEngine/Prevention/build.txt") > 10)
            {
                
    $this->buildComplete();
            }
            
    $this->MasterBuilder();
            if (! 
    file_exists("GameEngine/Prevention/demolition.txt") or time() - filemtime("GameEngine/Prevention/demolition.txt") > 10)
            {
                
    $this->demolitionComplete();
            }
            
    $this->updateStore();
            
    $this->delTradeRoute();
            
    $this->TradeRoute();
            if(!
    file_exists("GameEngine/Prevention/market.txt") or time()-filemtime("GameEngine/Prevention/market.txt")>10) {
                
    $this->marketComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/research.txt") or time()-filemtime("GameEngine/Prevention/research.txt")>10) {
                
    $this->researchComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/training.txt") or time()-filemtime("GameEngine/Prevention/training.txt")>10) {
                
    $this->trainingComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/starvation.txt") or time()-filemtime("GameEngine/Prevention/starvation.txt")>10) {
                
    $this->starvation();
            }
            if(!
    file_exists("GameEngine/Prevention/celebration.txt") or time()-filemtime("GameEngine/Prevention/celebration.txt")>10) {
                
    $this->celebrationComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/sendunits.txt") or time()-filemtime("GameEngine/Prevention/sendunits.txt")>10) {
                
    $this->sendunitsComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/loyalty.txt") or time()-filemtime("GameEngine/Prevention/loyalty.txt")>50) {
                
    $this->loyaltyRegeneration();
            }
            if(!
    file_exists("GameEngine/Prevention/sendreinfunits.txt") or time()-filemtime("GameEngine/Prevention/sendreinfunits.txt")>10) {
                
    $this->sendreinfunitsComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/returnunits.txt") or time()-filemtime("GameEngine/Prevention/returnunits.txt")>51) {
                
    $this->returnunitsComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/settlers.txt") or time()-filemtime("GameEngine/Prevention/settlers.txt")>10) {
                
    $this->sendSettlersComplete();
            }
            
    $this->updateGeneralAttack();
            
    $this->checkInvitedPlayes();
            
    $this->updateStore();
            
    $this->CheckBan();
            
    $this->regenerateOasisTroops();
            
    $this->artefactOfTheFool();
        }

        private function 
    loyaltyRegeneration() {
        if(
    file_exists("GameEngine/Prevention/loyalty.txt")) {
                
    unlink("GameEngine/Prevention/loyalty.txt");
            }
            global 
    $database;
            
    $array = array();
            
    $q "SELECT * FROM ".TB_PREFIX."vdata WHERE loyalty<>100";
            
    $array $database->query_return($q);
            if(!empty(
    $array)) {
                foreach(
    $array as $loyalty) {
                    if(
    $this->getTypeLevel(25,$loyalty['wref']) >= 1){
                        
    $value $this->getTypeLevel(25,$loyalty['wref']);
                    }elseif(
    $this->getTypeLevel(26,$loyalty['wref']) >= 1){
                        
    $value $this->getTypeLevel(26,$loyalty['wref']);
                    } else {
                        
    $value 0;
                    }
                    
    $newloyalty min(100,$loyalty['loyalty']+$value*(time()-$loyalty['lastupdate'])/(60*60));
                    
    $q "UPDATE ".TB_PREFIX."vdata SET loyalty = $newloyalty WHERE wref = '".$loyalty['wref']."'";
                    
    $database->query($q);
                }
            }
            
    $array = array();
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE loyalty<>100";
            
    $array $database->query_return($q);
            if(!empty(
    $array)) {
                foreach(
    $array as $loyalty) {
                    if(
    $this->getTypeLevel(25,$loyalty['conqured']) >= 1){
                        
    $value $this->getTypeLevel(25,$loyalty['conqured']);
                    }elseif(
    $this->getTypeLevel(26,$loyalty['conqured']) >= 1){
                        
    $value $this->getTypeLevel(26,$loyalty['conqured']);
                    } else {
                        
    $value 0;
                    }
                    
    $newloyalty min(100,$loyalty['loyalty']+$value*(time()-$loyalty['lastupdate'])/(60*60));
                    
    $q "UPDATE ".TB_PREFIX."odata SET loyalty = $newloyalty WHERE wref = '".$loyalty['wref']."'";
                    
    $database->query($q);
                }
            }
            if(
    file_exists("GameEngine/Prevention/loyalty.txt")) {
                
    unlink("GameEngine/Prevention/loyalty.txt");
            }
        }

           private function 
    getfieldDistance($coorx1$coory1$coorx2$coory2) {
       
    $max WORLD_MAX 1;
       
    $x1 intval($coorx1);
       
    $y1 intval($coory1);
       
    $x2 intval($coorx2);
       
    $y2 intval($coory2);
       
    $distanceX min(abs($x2 $x1), abs($max abs($x2 $x1)));
       
    $distanceY min(abs($y2 $y1), abs($max abs($y2 $y1)));
       
    $dist sqrt(pow($distanceX2) + pow($distanceY2));
       return 
    round($dist1);
       }

         public function 
    getTypeLevel($tid,$vid) {
            global 
    $village,$database;
            
    $keyholder = array();

                
    $resourcearray $database->getResourceLevel($vid);

            foreach(
    array_keys($resourcearray,$tid) as $key) {
                if(
    strpos($key,'t')) {
                    
    $key preg_replace("/[^0-9]/"''$key);
                    
    array_push($keyholder$key);
                }
            }
            
    $element count($keyholder);
            if(
    $element >= 2) {
                if(
    $tid <= 4) {
                    
    $temparray = array();
                    for(
    $i=0;$i<=$element-1;$i++) {
                        
    array_push($temparray,$resourcearray['f'.$keyholder[$i]]);
                    }
                    foreach (
    $temparray as $key => $val) {
                        if (
    $val == max($temparray))
                        
    $target $key;
                    }
                }
                else {
                    
    $target 0;
                    for(
    $i=1;$i<=$element-1;$i++) {
                        if(
    $resourcearray['f'.$keyholder[$i]] > $resourcearray['f'.$keyholder[$target]]) {
                            
    $target $i;
                        }
                    }
                }
            }
            else if(
    $element == 1) {
                
    $target 0;
            }
            else {
                return 
    0;
            }
            if(
    $keyholder[$target] != "") {
                return 
    $resourcearray['f'.$keyholder[$target]];
            }
            else {
                return 
    0;
            }
        }

        private function 
    clearDeleting() {
        if(
    file_exists("GameEngine/Prevention/cleardeleting.txt")) {
                
    unlink("GameEngine/Prevention/cleardeleting.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/cleardeleting.txt"'w');
            
    fclose($ourFileHandle);
            
    $needDelete $database->getNeedDelete();
            if(
    count($needDelete) > 0) {
                foreach(
    $needDelete as $need) {
                    
    $needVillage $database->getVillagesID($need['uid']);
                    foreach(
    $needVillage as $village) {
                        
    $q "DELETE FROM ".TB_PREFIX."abdata where wref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."bdata where wid = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."enforcement where from = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."fdata where vref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."market where vref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."odata where wref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."research where vref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."tdata where vref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."training where vref =".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."units where vref =".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."vdata where wref = ".$village;
                        
    $database->query($q);
                        
    $q "UPDATE ".TB_PREFIX."wdata set occupied = 0 where id = ".$village;
                        
    $database->query($q);
                        
    $getmovement $database->getMovement(3,$village,1);
                        foreach(
    $getmovement as $movedata) {
                        
    $time time();
                        
    $time2 $time $movedata['starttime'];
                        
    $database->addMovement(4,$movedata['to'],$movedata['from'],$movedata['ref'],$time,$time+$time2);
                        
    $database->setMovementProc($movedata['moveid']);
                        }
                        
    $q "DELETE FROM ".TB_PREFIX."movement where from = ".$village;
                        
    $database->query($q);
                        
    $getprisoners $database->getPrisoners($village);
                        foreach(
    $getprisoners as $pris) {
                        
    $troops 0;
                        for(
    $i=1;$i<12;$i++){
                        
    $troops += $pris['t'.$i];
                        }
                        
    $database->modifyUnit($pris['wref'],array("99o"),array($troops),array(0));
                        
    $database->deletePrisoners($pris['id']);
                        }
                        
    $getprisoners $database->getPrisoners3($village);
                        foreach(
    $getprisoners as $pris) {
                        
    $troops 0;
                        for(
    $i=1;$i<12;$i++){
                        
    $troops += $pris['t'.$i];
                        }
                        
    $database->modifyUnit($pris['wref'],array("99o"),array($troops),array(0));
                        
    $database->deletePrisoners($pris['id']);
                        }
                        
    $enforcement $database->getEnforceVillage($village,0);
                        foreach(
    $enforcement as $enforce) {
                        
    $time time();
                        
    $fromcoor $database->getCoor($enforce['vref']);
                        
    $tocoor $database->getCoor($enforce['from']);
                        
    $targettribe $database->getUserField($database->getVillageField($enforce['from'],"owner"),"tribe",0);
                        
    $time2 $this->procDistanceTime($tocoor,$fromcoor,$targettribe,0);
                        
    $start 10*($targettribe-1);
                        for(
    $i=1;$i<11;$i++){
                        
    $unit $start $i;
                        
    $post['t'.$i] = $enforce['u'.$unit];
                        }
                        
    $post['t11'] = $enforce['hero'];
                        
    $reference $database->addAttack($enforce['from'],$post['t1'],$post['t2'],$post['t3'],$post['t4'],$post['t5'],$post['t6'],$post['t7'],$post['t8'],$post['t9'],$post['t10'],$post['t11'],2,0,0,0,0);
                        
    $database->addMovement(4,$enforce['vref'],$enforce['from'],$reference,$time,$time+$time2);
                        }
                    }
                    
    $q "DELETE FROM ".TB_PREFIX."hero where uid = ".$need['uid'];
                    
    $database->query($q);
                    
    $q "DELETE FROM ".TB_PREFIX."mdata where target = ".$need['uid']." or owner = ".$need['uid'];
                    
    $database->query($q);
                    
    $q "DELETE FROM ".TB_PREFIX."ndata where uid = ".$need['uid'];
                    
    $database->query($q);
                    
    $q "DELETE FROM ".TB_PREFIX."users where id = ".$need['uid'];
                    
    $database->query($q);
                }
            }
            if(
    file_exists("GameEngine/Prevention/cleardeleting.txt")) {
                
    unlink("GameEngine/Prevention/cleardeleting.txt");
            }
        }

        private function 
    ClearUser() {
            global 
    $database;
            if(
    AUTO_DEL_INACTIVE) {
                
    $time time()+UN_ACT_TIME;
                
    $q "DELETE from ".TB_PREFIX."users where timestamp >= $time and act != ''";
                
    $database->query($q);
            }
        }

        private function 
    ClearInactive() {
            global 
    $database;
            if(
    TRACK_USR) {
                
    $timeout time()-USER_TIMEOUT*60;
                  
    $q "DELETE FROM ".TB_PREFIX."active WHERE timestamp < $timeout";
                 
    $database->query($q);
            }
        }
        private function 
    pruneOResource() {
            global 
    $database;
            if(!
    ALLOW_BURST) {
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE maxstore < 800 OR maxcrop < 800";
            
    $array $database->query_return($q);
            foreach(
    $array as $getoasis) {
            if(
    $getoasis['maxstore'] < 800){
            
    $maxstore 800;
            }else{
            
    $maxstore $getoasis['maxstore'];
            }
            if(
    $getoasis['maxcrop'] < 800){
            
    $maxcrop 800;
            }else{
            
    $maxcrop $getoasis['maxcrop'];
            }
            
    $q "UPDATE " TB_PREFIX "odata set maxstore = $maxstore, maxcrop = $maxcrop where wref = ".$getoasis['wref']."";
            
    $database->query($q);
            }
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE wood > maxstore OR clay > maxstore OR iron > maxstore OR crop > maxcrop";
            
    $array $database->query_return($q);
            foreach(
    $array as $getoasis) {
            if(
    $getoasis['wood'] > $getoasis['maxstore']){
            
    $wood $getoasis['maxstore'];
            }else{
            
    $wood $getoasis['wood'];
            }
            if(
    $getoasis['clay'] > $getoasis['maxstore']){
            
    $clay $getoasis['maxstore'];
            }else{
            
    $clay $getoasis['clay'];
            }
            if(
    $getoasis['iron'] > $getoasis['maxstore']){
            
    $iron $getoasis['maxstore'];
            }else{
            
    $iron $getoasis['iron'];
            }
            if(
    $getoasis['crop'] > $getoasis['maxstore']){
            
    $crop $getoasis['maxstore'];
            }else{
            
    $crop $getoasis['crop'];
            }
            
    $q "UPDATE " TB_PREFIX "odata set wood = $wood, clay = $clay, iron = $iron, crop = $crop where wref = ".$getoasis['wref']."";
            
    $database->query($q);
            }
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE wood < 0 OR clay < 0 OR iron < 0 OR crop < 0";
            
    $array $database->query_return($q);
            foreach(
    $array as $getoasis) {
            if(
    $getoasis['wood'] < 0){
            
    $wood 0;
            }else{
            
    $wood $getoasis['wood'];
            }
            if(
    $getoasis['clay'] < 0){
            
    $clay 0;
            }else{
            
    $clay $getoasis['clay'];
            }
            if(
    $getoasis['iron'] < 0){
            
    $iron 0;
            }else{
            
    $iron $getoasis['iron'];
            }
            if(
    $getoasis['crop'] < 0){
            
    $crop 0;
            }else{
            
    $crop $getoasis['crop'];
            }
            
    $q "UPDATE " TB_PREFIX "odata set wood = $wood, clay = $clay, iron = $iron, crop = $crop where wref = ".$getoasis['wref']."";
            
    $database->query($q);
            }
            }
        }
        private function 
    pruneResource() {
            global 
    $database;
            if(!
    ALLOW_BURST) {
            
    $q "SELECT * FROM ".TB_PREFIX."vdata WHERE maxstore < 800 OR maxcrop < 800";
            
    $array $database->query_return($q);
            foreach(
    $array as $getvillage) {
            if(
    $getvillage['maxstore'] < 800){
            
    $maxstore 800;
            }else{
            
    $maxstore $getvillage['maxstore'];
            }
            if(
    $getvillage['maxcrop'] < 800){
            
    $maxcrop 800;
            }else{
            
    $maxcrop $getvillage['maxcrop'];
            }
            
    $q "UPDATE " TB_PREFIX "vdata set maxstore = $maxstore, maxcrop = $maxcrop where wref = ".$getvillage['wref']."";
            
    $database->query($q);
            }
            
    $q "SELECT * FROM ".TB_PREFIX."vdata WHERE wood > maxstore OR clay > maxstore OR iron > maxstore OR crop > maxcrop";
            
    $array $database->query_return($q);
            foreach(
    $array as $getvillage) {
            if(
    $getvillage['wood'] > $getvillage['maxstore']){
            
    $wood $getvillage['maxstore'];
            }else{
            
    $wood $getvillage['wood'];
            }
            if(
    $getvillage['clay'] > $getvillage['maxstore']){
            
    $clay $getvillage['maxstore'];
            }else{
            
    $clay $getvillage['clay'];
            }
            if(
    $getvillage['iron'] > $getvillage['maxstore']){
            
    $iron $getvillage['maxstore'];
            }else{
            
    $iron $getvillage['iron'];
            }
            if(
    $getvillage['crop'] > $getvillage['maxstore']){
            
    $crop $getvillage['maxstore'];
            }else{
            
    $crop $getvillage['crop'];
            }
            
    $q "UPDATE " TB_PREFIX "vdata set wood = $wood, clay = $clay, iron = $iron, crop = $crop where wref = ".$getvillage['wref']."";
            
    $database->query($q);
            }
            
    $q "SELECT * FROM ".TB_PREFIX."vdata WHERE wood < 0 OR clay < 0 OR iron < 0 OR crop < 0";
            
    $array $database->query_return($q);
            foreach(
    $array as $getvillage) {
            if(
    $getvillage['wood'] < 0){
            
    $wood 0;
            }else{
            
    $wood $getvillage['wood'];
            }
            if(
    $getvillage['clay'] < 0){
            
    $clay 0;
            }else{
            
    $clay $getvillage['clay'];
            }
            if(
    $getvillage['iron'] < 0){
            
    $iron 0;
            }else{
            
    $iron $getvillage['iron'];
            }
            if(
    $getvillage['crop'] < 0){
            
    $crop 0;
            }else{
            
    $crop $getvillage['crop'];
            }
            
    $q "UPDATE " TB_PREFIX "vdata set wood = $wood, clay = $clay, iron = $iron, crop = $crop where wref = ".$getvillage['wref']."";
            
    $database->query($q);
            }
            }
        }

        private function 
    culturePoints() {
        if(
    file_exists("GameEngine/Prevention/culturepoints.txt")) {
                
    unlink("GameEngine/Prevention/culturepoints.txt");
            }
            global 
    $database,$session;
            
    $time time()-600// 10minutes
            
    $array = array();
            
    $q "SELECT id, lastupdate FROM ".TB_PREFIX."users WHERE lastupdate < $time";
            
    $array $database->query_return($q);

            foreach(
    $array as $indi) {
                if(
    $indi['lastupdate'] <= $time && $indi['lastupdate'] > 0){
                    
    $cp $database->getVSumField($indi['id'], 'cp') * (time()-$indi['lastupdate'])/86400// 24 hours

                    
    $newupdate time();
                    
    $q "UPDATE ".TB_PREFIX."users set cp = cp + $cp, lastupdate = $newupdate where id = '".$indi['id']."'";
                    
    $database->query($q);
                }
            }
            if(
    file_exists("GameEngine/Prevention/culturepoints.txt")) {
                
    unlink("GameEngine/Prevention/culturepoints.txt");
            }
    }

        private function 
    buildComplete() {
        if(
    file_exists("GameEngine/Prevention/build.txt")) {
                
    unlink("GameEngine/Prevention/build.txt");
            }
            global 
    $database,$bid18,$bid10,$bid11,$bid38,$bid39;
            
    $time time();
            
    $array = array();
            
    $q "SELECT * FROM ".TB_PREFIX."bdata where timestamp < $time and master = 0";
            
    $array $database->query_return($q);
            foreach(
    $array as $indi) {
                
    $q "UPDATE ".TB_PREFIX."fdata set f".$indi['field']." = ".$indi['level'].", f".$indi['field']."t = ".$indi['type']." where vref = ".$indi['wid'];
                if(
    $database->query($q)) {
                    
    $level $database->getFieldLevel($indi['wid'],$indi['field']);
                    
    $pop $this->getPop($indi['type'],($level-1));
                    
    $database->modifyPop($indi['wid'],$pop[0],0);
                    
    $database->addCP($indi['wid'],$pop[1]);
                    if(
    $indi['type'] == 18) {
                        
    $owner $database->getVillageField($indi['wid'],"owner");
                        
    $max $bid18[$level]['attri'];
                        
    $q "UPDATE ".TB_PREFIX."alidata set max = $max where leader = $owner";
                        
    $database->query($q);
                    }

                        if(
    $indi['type'] == 10) {
                          
    $max=$database->getVillageField($indi['wid'],"maxstore");
                          if(
    $level=='1' && $max==STORAGE_BASE){ $max=STORAGE_BASE; }
                        if(
    $level!=1){
                        
    $max-=$bid10[$level-1]['attri']*STORAGE_MULTIPLIER;
                        
    $max+=$bid10[$level]['attri']*STORAGE_MULTIPLIER;
                        }else{
                        
    $max=$bid10[$level]['attri']*STORAGE_MULTIPLIER;
                        }
                          
    $database->setVillageField($indi['wid'],"maxstore",$max);
                        }

                        if(
    $indi['type'] == 11) {
                          
    $max=$database->getVillageField($indi['wid'],"maxcrop");
                          if(
    $level=='1' && $max==STORAGE_BASE){ $max=STORAGE_BASE; }
                        if(
    $level!=1){
                        
    $max-=$bid11[$level-1]['attri']*STORAGE_MULTIPLIER;
                        
    $max+=$bid11[$level]['attri']*STORAGE_MULTIPLIER;
                        }else{
                        
    $max=$bid11[$level]['attri']*STORAGE_MULTIPLIER;
                        }
                          
    $database->setVillageField($indi['wid'],"maxcrop",$max);
                        }

                        if(
    $indi['type'] == 38) {
                        
    $max=$database->getVillageField($indi['wid'],"maxstore");
                        if(
    $level=='1' && $max==STORAGE_BASE){ $max=STORAGE_BASE; }
                        if(
    $level!=1){
                        
    $max-=$bid38[$level-1]['attri']*STORAGE_MULTIPLIER;
                        
    $max+=$bid38[$level]['attri']*STORAGE_MULTIPLIER;
                        }else{
                        
    $max=$bid38[$level]['attri']*STORAGE_MULTIPLIER;
                        }
                        
    $database->setVillageField($indi['wid'],"maxstore",$max);
                        }

                        if(
    $indi['type'] == 39) {
                        
    $max=$database->getVillageField($indi['wid'],"maxcrop");
                        if(
    $level=='1' && $max==STORAGE_BASE){ $max=STORAGE_BASE; }
                        if(
    $level!=1){
                        
    $max-=$bid39[$level-1]['attri']*STORAGE_MULTIPLIER;
                        
    $max+=$bid39[$level]['attri']*STORAGE_MULTIPLIER;
                        }else{
                        
    $max=$bid39[$level]['attri']*STORAGE_MULTIPLIER;
                        }
                        
    $database->setVillageField($indi['wid'],"maxcrop",$max);
                        }

                        
    // by SlimShady95 aka Manuel Mannhardt < manuel_mannhardt@web.de >
                        
    if($indi['type'] == 40 and ($indi['level'] % == or $indi['level'] > 95) and $indi['level'] != 100){
                        
    $this->startNatarAttack($indi['level'], $indi['wid']);
                        }
                    if(
    $database->getUserField($database->getVillageField($indi['wid'],"owner"),"tribe",0) != 1){
                    
    $q4 "UPDATE ".TB_PREFIX."bdata set loopcon = 0 where loopcon = 1 and master = 0 and wid = ".$indi['wid'];
                    
    $database->query($q4);
                    }else{
                    if(
    $indi['field'] > 18){
                    
    $q4 "UPDATE ".TB_PREFIX."bdata set loopcon = 0 where loopcon = 1 and master = 0 and wid = ".$indi['wid']." and field > 18";
                    
    $database->query($q4);
                    }else{
                    
    $q4 "UPDATE ".TB_PREFIX."bdata set loopcon = 0 where loopcon = 1 and master = 0 and wid = ".$indi['wid']." and field < 19";
                    
    $database->query($q4);
                    }
                    }
                    
    $q "DELETE FROM ".TB_PREFIX."bdata where id = ".$indi['id'];
                    
    $database->query($q);
                }
                    
    $crop $database->getCropProdstarv($indi['wid']);
                    
    $unitarrays $this->getAllUnits($indi['wid']);
                    
    $village $database->getVillage($indi['wid']);
                    
    $upkeep $village['pop'] + $this->getUpkeep($unitarrays0);
                    if (
    $crop $upkeep){
                        
    // add starv data
                        
    $database->setVillageField($indi['wid'], 'starv'$upkeep);
                        
    $database->setVillageField($indi['wid'], 'starvupdate'$time);
                    }
            }
            if(
    file_exists("GameEngine/Prevention/build.txt")) {
                
    unlink("GameEngine/Prevention/build.txt");
            }
        }

        
    // by SlimShady95 aka Manuel Mannhardt < manuel_mannhardt@web.de >
        
    private function startNatarAttack($level$vid) {
            global 
    $database;

            
    // bad, but should work :D
            // I took the data from my first ww (first .org world)
            // todo: get the algo from the real travian with the 100 biggest
            // offs and so on
            
    $troops = array(
                
    => array(
                    array(
    341228144156355390),
                    array(
    35077331710)
                ),

                
    10 => array(
                    array(
    4314368852654621130),
                    array(
    650175772817)
                ),

                
    15 => array(
                    array(
    4645426756595272150),
                    array(
    9903051344025)
                ),

                
    20 => array(
                    array(
    6207588176257225220),
                    array(
    14404562015636)
                ),

                
    25 => array(
                    array(
    6004597774007277230),
                    array(
    15204992205837)
                ),

                
    30 => array(
                    array(
    7073718187308713270),
                    array(
    18306072686945)
                ),

                
    35 => array(
                    array(
    7090732087628856280),
                    array(
    18606202787045)
                ),

                
    40 => array(
                    array(
    7852696796068667250),
                    array(
    14604311906037)
                ),

                
    45 => array(
                    array(
    848088831049010719350),
                    array(
    22307503318354)
                ),

                
    50 => array(
                  array(
    852290381055110883350),
                  array(
    22407573358354)
                ),

                
    55 => array(
                    array(
    893186901099210624320),
                    array(
    21907073128454)
                ),

                
    60 => array(
                    array(
    12138130131504015642510),
                    array(
    3180107947711876)
                ),

                
    65 => array(
                    array(
    13397146191662217521580),
                    array(
    3450118252212783)
                ),

                
    70 => array(
                    array(
    16323176652024021201700),
                    array(
    42401447640157102)
                ),

                
    75 => array(
                    array(
    20739227962574627288910),
                    array(
    52901816803194127)
                ),

                
    80 => array(
                    array(
    21857241802714728914970),
                    array(
    55101898839202132)
                ),

                
    85 => array(
                    array(
    224762500727928298761000),
                    array(
    56001933855205134)
                ),

                
    90 => array(
                    array(
    313453505338963418431410),
                    array(
    771026681180281184)
                ),

                
    95 => array(
                    array(
    317203563539443425061440),
                    array(
    771026711181281184)
                ),

                
    96 => array(
                    array(
    328853700740897441301500),
                    array(
    795027571219289190)
                ),

                
    97 => array(
                    array(
    329403709940968442351500),
                    array(
    794027551219289190)
                ),

                
    98 => array(
                    array(
    335213769141686449531520),
                    array(
    812028161246296194)
                ),

                
    99 => array(
                    array(
    362514086145089487141650),
                    array(
    872030251338317208)
                )
            );

            
    // select the troops^^
            
    if (isset($troops[$level]))
            {
                
    $units $troops[$level];
            }
            else
            {
                return 
    false;
            }

            
    // get the capital village from the natars
            
    $query mysql_query('SELECT `wref` FROM `' TB_PREFIX 'vdata` WHERE `owner` = 3 and `capital` = 1 LIMIT 1') or die(mysql_error());
            
    $row mysql_fetch_assoc($query);

            
    // start the attacks
            
    $endtime time() + round((60 60 24) / INCREASE_SPEED);

            
    // -.-
            
    mysql_query('INSERT INTO `' TB_PREFIX 'ww_attacks` (`vid`, `attack_time`) VALUES (' $vid ', ' $endtime ')');
            
    mysql_query('INSERT INTO `' TB_PREFIX 'ww_attacks` (`vid`, `attack_time`) VALUES (' $vid ', ' . ($endtime 1) . ')');

            
    // wave 1
            
    $ref $database->addAttack($row['wref'], 0$units[0][0], $units[0][1], 0$units[0][2], $units[0][3], $units[0][4], $units[0][5], 000300002020020202020);
            
    $database->addMovement(3$row['wref'], $vid$reftime(), $endtime);

            
    // wave 2
            
    $ref2 $database->addAttack($row['wref'], 0$units[1][0], $units[1][1], 0$units[1][2], $units[1][3], $units[1][4], $units[1][5], 0003400002020020202020, array('vid' => $vid'endtime' => ($endtime 1)));
            
    $database->addMovement(3$row['wref'], $vid$ref2time(), $endtime 1);
        }

        private function 
    checkWWAttacks() {
            
    $query mysql_query('SELECT * FROM `' TB_PREFIX 'ww_attacks` WHERE `attack_time` <= ' time());
            while (
    $row mysql_fetch_assoc($query))
            {
                
    // fix for destroyed wws
                
    $query2 mysql_query('UPDATE `' TB_PREFIX 'fdata` SET `f99t` = 40 WHERE `vref` = ' $row['vid']);

                
    // delete the attack
                
    $query3 mysql_query('DELETE FROM `' TB_PREFIX 'ww_attacks` WHERE `vid` = ' $row['vid'] . ' AND `attack_time` = ' $row['attack_time']);
            }
        }

        private function 
    getPop($tid,$level) {
            
    $name "bid".$tid;
            global $
    $name,$village;
            
    $dataarray = $$name;
            
    $pop $dataarray[($level+1)]['pop'];
            
    $cp $dataarray[($level+1)]['cp'];
            return array(
    $pop,$cp);
        }

        private function 
    delTradeRoute() {
            global 
    $database;
            
    $time time();
            
    $q "DELETE from ".TB_PREFIX."route where timeleft < $time";
            
    $database->query($q);
        }

        private function 
    TradeRoute() {
            global 
    $database;
                
    $time time();
                
    $q "SELECT * FROM ".TB_PREFIX."route where timestamp < $time";
                
    $dataarray $database->query_return($q);
                foreach(
    $dataarray as $data) {
                
    $targettribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $this->sendResource2($data['wood'],$data['clay'],$data['iron'],$data['crop'],$data['from'],$data['wid'],$targettribe,$data['deliveries']);
                
    $database->editTradeRoute($data['id'],"timestamp",86400,1);
                }
        }

        private function 
    marketComplete() {
        if(
    file_exists("GameEngine/Prevention/market.txt")) {
                
    unlink("GameEngine/Prevention/market.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/market.txt"'w');
            
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."send where ".TB_PREFIX."movement.ref = ".TB_PREFIX."send.id and ".TB_PREFIX."movement.proc = 0 and sort_type = 0 and endtime < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {

                if(
    $data['wood'] >= $data['clay'] && $data['wood'] >= $data['iron'] && $data['wood'] >= $data['crop']){ $sort_type "10"; }
                elseif(
    $data['clay'] >= $data['wood'] && $data['clay'] >= $data['iron'] && $data['clay'] >= $data['crop']){ $sort_type "11"; }
                elseif(
    $data['iron'] >= $data['wood'] && $data['iron'] >= $data['clay'] && $data['iron'] >= $data['crop']){ $sort_type "12"; }
                elseif(
    $data['crop'] >= $data['wood'] && $data['crop'] >= $data['clay'] && $data['crop'] >= $data['iron']){ $sort_type "13"; }

                
    $to $database->getMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,$sort_type,''.addslashes($from['name']).' send resources to '.addslashes($to['name']).'',''.$from['owner'].','.$from['wref'].','.$data['wood'].','.$data['clay'].','.$data['iron'].','.$data['crop'].'',$data['endtime']);
                if(
    $from['owner'] != $to['owner']) {
                    
    $database->addNotice($from['owner'],$to['wref'],$ownally,$sort_type,''.addslashes($from['name']).' send resources to '.addslashes($to['name']).'',''.$from['owner'].','.$from['wref'].','.$data['wood'].','.$data['clay'].','.$data['iron'].','.$data['crop'].'',$data['endtime']);
                }
                
    $database->modifyResource($data['to'],$data['wood'],$data['clay'],$data['iron'],$data['crop'],1);
                
    $tocoor $database->getCoor($data['from']);
                
    $fromcoor $database->getCoor($data['to']);
                
    $targettribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $endtime $this->procDistanceTime($tocoor,$fromcoor,$targettribe,0) + $data['endtime'];
                
    $database->addMovement(2,$data['to'],$data['from'],$data['merchant'],time(),$endtime,$data['send'],$data['wood'],$data['clay'],$data['iron'],$data['crop']);
                
    $database->setMovementProc($data['moveid']);
            }
            
    $q1 "SELECT * FROM ".TB_PREFIX."movement where proc = 0 and sort_type = 2 and endtime < $time";
            
    $dataarray1 $database->query_return($q1);
            foreach(
    $dataarray1 as $data1) {
                
    $database->setMovementProc($data1['moveid']);
                if(
    $data1['send'] > 1){
                
    $targettribe1 $database->getUserField($database->getVillageField($data1['to'],"owner"),"tribe",0);
                
    $send $data1['send']-1;
                
    $this->sendResource2($data1['wood'],$data1['clay'],$data1['iron'],$data1['crop'],$data1['to'],$data1['from'],$targettribe1,$send);
                }
            }
            if(
    file_exists("GameEngine/Prevention/market.txt")) {
                
    unlink("GameEngine/Prevention/market.txt");
            }
        }

        private function 
    sendResource2($wtrans,$ctrans,$itrans,$crtrans,$from,$to,$tribe,$send) {
            global 
    $bid17,$bid28,$database,$generator,$logging;
            
    $availableWood $database->getWoodAvailable($from);
            
    $availableClay $database->getClayAvailable($from);
            
    $availableIron $database->getIronAvailable($from);
            
    $availableCrop $database->getCropAvailable($from);
            if(
    $availableWood >= $wtrans AND $availableClay >= $ctrans AND $availableIron >= $itrans AND $availableCrop >= $crtrans){
            
    $merchant2 = ($this->getTypeLevel(17,$from) > 0)? $this->getTypeLevel(17,$from) : 0;
            
    $used2 $database->totalMerchantUsed($from);
            
    $merchantAvail2 $merchant2 $used2;
            
    $maxcarry2 = ($tribe == 1)? 500 : (($tribe == 2)? 1000 750);
            
    $maxcarry2 *= TRADER_CAPACITY;
            if(
    $this->getTypeLevel(28,$from) != 0) {
                
    $maxcarry2 *= $bid28[$this->getTypeLevel(28,$from)]['attri'] / 100;
            }
            
    $resource = array($wtrans,$ctrans,$itrans,$crtrans);
            
    $reqMerc ceil((array_sum($resource)-0.1)/$maxcarry2);
            if(
    $merchantAvail2 != && $reqMerc <= $merchantAvail2) {
                        
    $coor $database->getCoor($to);
                        
    $coor2 $database->getCoor($from);
                    if(
    $database->getVillageState($to)) {
                        
    $timetaken $generator->procDistanceTime($coor,$coor2,$tribe,0);
                        
    $res $resource[0]+$resource[1]+$resource[2]+$resource[3];
                        if(
    $res!=0){
                        
    $reference $database->sendResource($resource[0],$resource[1],$resource[2],$resource[3],$reqMerc,0);
                        
    $database->modifyResource($from,$resource[0],$resource[1],$resource[2],$resource[3],0);
                        
    $database->addMovement(0,$from,$to,$reference,time(),time()+$timetaken,$send);
                        }
                    }
            }
            
    header("Location: build.php?gid=17");
        } else {}
        }

        private function 
    sendunitsComplete() {
        if(
    file_exists("GameEngine/Prevention/sendunits.txt")) {
                    
    unlink("GameEngine/Prevention/sendunits.txt");
                }
            global 
    $bid23,$bid34,$database,$battle,$village,$technology,$logging,$generator;
             
    $ourFileHandle fopen("GameEngine/Prevention/sendunits.txt"'w');
                
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."attacks where ".TB_PREFIX."movement.ref = ".TB_PREFIX."attacks.id and ".TB_PREFIX."movement.proc = '0' and ".TB_PREFIX."movement.sort_type = '3' and ".TB_PREFIX."attacks.attack_type != '2' and endtime < $time ORDER BY endtime ASC";
            
    $dataarray $database->query_return($q);
            
    $totalattackdead 0;
            foreach(
    $dataarray as $data) {
                
    //set base things
                //$battle->resolveConflict($data);
                
    $tocoor $database->getCoor($data['from']);
                
    $fromcoor $database->getCoor($data['to']);
                
    $isoasis $database->isVillageOases($data['to']);
                
    $AttackArrivalTime $data['endtime'];
                
    $AttackerWref $data['from'];
                
    $DefenderWref =    $data['to'];
                if (
    $isoasis == 0){
                
    $Attacker['id'] = $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
                
    $Defender['id'] = $database->getUserField($database->getVillageField($data['to'],"owner"),"id",0);
                
    $AttackerID $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
                
    $DefenderID $database->getUserField($database->getVillageField($data['to'],"owner"),"id",0);
                
    $owntribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $targettribe $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);
                
    $ownally $database->getUserField($database->getVillageField($data['from'],"owner"),"alliance",0);
                
    $targetally $database->getUserField($database->getVillageField($data['to'],"owner"),"alliance",0);
                
    $to $database->getMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $toF $database->getVillage($data['to']);
                
    $fromF $database->getVillage($data['from']);

                            
    $DefenderUnit = array();
                            
    $DefenderUnit $database->getUnit($data['to']);
                            
    $evasion $database->getVillageField($data['to'],"evasion");
                            
    $maxevasion $database->getUserField($DefenderID,"maxevasion",0);
                            
    $gold $database->getUserField($DefenderID,"gold",0);
                            
    $playerunit = ($targettribe-1)*10;
                            
    $cannotsend 0;
                            
    $movements $database->getMovement("34",$data['to'],1);
                            for(
    $y=0;$y count($movements);$y++){
                            
    $returntime $units[$y]['endtime']-time();
                            if(
    $units[$y]['sort_type'] == && $units[$y]['from'] != && $returntime <= 10){
                            
    $cannotsend 1;
                            }
                            }
                            if(
    $evasion == && $maxevasion && $gold && $cannotsend == 0){
                            
    $totaltroops 0;
                            for(
    $i=1;$i<=10;$i++){
                            
    $playerunit += $i;
                            
    $data['u'.$i] = $DefenderUnit['u'.$playerunit];
                            
    $database->modifyUnit($data['to'],array($playerunit),array($DefenderUnit['u'.$playerunit]),array(0));
                            
    $playerunit -= $i;
                            
    $totaltroops += $data['u'.$i];
                            }
                            
    $data['u11'] = $DefenderUnit['hero'];
                            
    $totaltroops += $data['u11'];
                            if(
    $totaltroops 0){
                            
    $database->modifyUnit($data['to'],array("hero"),array($DefenderUnit['hero']),array(0));
                            
    $attackid $database->addAttack($data['to'],$data['u1'],$data['u2'],$data['u3'],$data['u4'],$data['u5'],$data['u6'],$data['u7'],$data['u8'],$data['u9'],$data['u10'],$data['u11'],4,0,0,0,0,0,0,0,0,0,0,0);
                            
    $database->addMovement(4,0,$data['to'],$attackid,time(),time()+(180/EVASION_SPEED));
                            
    $newgold $gold-2;
                            
    $newmaxevasion $maxevasion-1;
                            
    $database->updateUserField($DefenderID"gold"$newgold1);
                            
    $database->updateUserField($DefenderID"maxevasion"$newmaxevasion1);
                            }
                            }
                            
    //get defence units
                            
    $Defender = array();    $rom $ger $gal $nat $natar 0;
                            
    $Defender $database->getUnit($data['to']);
                            
    $enforcementarray $database->getEnforceVillage($data['to'],0);
                            if(
    count($enforcementarray) > 0) {
                                foreach(
    $enforcementarray as $enforce) {
                                    for(
    $i=1;$i<=50;$i++) {
                                        
    $Defender['u'.$i] += $enforce['u'.$i];
                                    }
                                }
                            }
                                for(
    $i=1;$i<=50;$i++){
                                    if(!isset(
    $Defender['u'.$i])){
                                        
    $Defender['u'.$i] = '0';
                                    } else {
                                     if(
    $Defender['u'.$i]=='' or $Defender['u'.$i]<='0'){
                                        
    $Defender['u'.$i] = '0';
                                     } else {
                                                    if(
    $i<=10){ $rom='1'; }
                                                else if(
    $i<=20){ $ger='1'; }
                                                else if(
    $i<=30){ $gal='1'; }
                                                else if(
    $i<=40){ $nat='1'; }
                                                else if(
    $i<=50){ $natar='1'; }
                                    }
                                    }
                                }
                                    if(!isset(
    $Defender['hero'])){
                                        
    $Defender['hero'] = '0';
                                    } else {
                                     if(
    $Defender['hero']=='' or $Defender['hero']<='0'){
                                        
    $Defender['hero'] = '0';
                                     }
                                    }
                                        
    //get attack units
                                                
    $Attacker = array();
                                                
    $start = ($owntribe-1)*10+1;
                                                
    $end = ($owntribe*10);
                                                
    $u = (($owntribe-1)*10);
                                                
    $catp =  0;
                                                
    $catapult = array(8,18,28,48);
                                                
    $ram = array(7,17,27,47);
                                                
    $chief = array(9,19,29,49);
                                                
    $spys = array(4,14,23,44);
                                            for(
    $i=$start;$i<=$end;$i++) {
                                                
    $y $i-$u;
                                                
    $Attacker['u'.$i] = $dataarray[0]['t'.$y];
                                                    
    //there are catas
                                                    
    if(in_array($i,$catapult)) {
                                                    
    $catp += $Attacker['u'.$i];
                                                    
    $catp_pic $i;
                                                    }
                                                    if(
    in_array($i,$ram)) {
                                                    
    $rams += $Attacker['u'.$i];
                                                    
    $ram_pic $i;
                                                    }
                                                    if(
    in_array($i,$chief)) {
                                                    
    $chiefs += $Attacker['u'.$i];
                                                    
    $chief_pic $i;
                                                    }
                                                    if(
    in_array($i,$spys)) {
                                                    
    $chiefs += $Attacker['u'.$i];
                                                    
    $spy_pic $i;
                                                    }
                                                    }
                                                     
    $Attacker['uhero'] = $dataarray[0]['t11'];
                                                    
    $hero_pic "hero";
                                        
    //need to set these variables.
                                        
    $def_wall $database->getFieldLevel($data['to'],40);
                                        
    $att_tribe $owntribe;
                                        
    $def_tribe $targettribe;
                                        
    $residence "0";
                                        
    $attpop $fromF['pop'];
                                        
    $defpop $toF['pop'];
                                        for (
    $i=19$i<40$i++){
                                            if (
    $database->getFieldLevel($data['to'],"".$i."t")=='25' OR $database->getFieldLevel($data['to'],"".$i."t")=='26'){
                                                
    $residence $database->getFieldLevel($data['to'],$i);
                                                
    $i=40;
                                            }
                                        }

                                        
    //type of attack
                                        
    if($dataarray[0]['attack_type'] == 1){
                                            
    $type 1;
                                            
    $scout 1;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 2){
                                            
    $type 2;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 3){
                                            
    $type 3;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 4){
                                            
    $type 4;
                                        }

                                        
    $att_ab $database->getABTech($data['from']); // Blacksmith level
                                        
    $att_ab1 $att_ab['b1'];
                                        
    $att_ab2 $att_ab['b2'];
                                        
    $att_ab3 $att_ab['b3'];
                                        
    $att_ab4 $att_ab['b4'];
                                        
    $att_ab5 $att_ab['b5'];
                                        
    $att_ab6 $att_ab['b6'];
                                        
    $att_ab7 $att_ab['b7'];
                                        
    $att_ab8 $att_ab['b8'];
                                        
    $def_ab $database->getABTech($data['to']); // Armory level
                                        
    $att_ab1 $att_ab['a1'];
                                        
    $att_ab2 $att_ab['a2'];
                                        
    $att_ab3 $att_ab['a3'];
                                        
    $att_ab4 $att_ab['a4'];
                                        
    $att_ab5 $att_ab['a5'];
                                        
    $att_ab6 $att_ab['a6'];
                                        
    $att_ab7 $att_ab['a7'];
                                        
    $att_ab8 $att_ab['a8'];

                            
    //rams attack
                             
    if($rams and $type=='3'){
                            
    $basearraywall $database->getMInfo($data['to']);
                            if(
    $database->getFieldLevel($basearraywall['wref'],40)>'0'){
                                for (
    $w=1$w<2$w++){
                            if (
    $database->getFieldLevel($basearraywall['wref'],40)!='0'){

                            
    $walllevel $database->getFieldLevel($basearraywall['wref'],40);
                            
    $wallgid $database->getFieldLevel($basearraywall['wref'],"40t");
                            
    $wallid 40;
                            
    $w='4';
                                                } else {
    $w $w--; }
                                }
                            }else{
                            
    $empty 1;
                            }
                            }

                                        
    $tblevel '1';
                                        
    $stonemason "1";


                
    /*--------------------------------
                // End Battle part
                --------------------------------*/
                
    }else{
                
    $Attacker['id'] = $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
                
    $Defender['id'] = $database->getUserField($database->getOasisField($data['to'],"owner"),"id",0);
                
    $AttackerID $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
                
    $DefenderID $database->getUserField($database->getOasisField($data['to'],"owner"),"id",0);
                
    $owntribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $targettribe =  $database->getUserField($database->getOasisField($data['to'],"owner"),"tribe",0);;
                
    $ownally $database->getUserField($database->getVillageField($data['from'],"owner"),"alliance",0);
                
    $targetally $database->getUserField($database->getOasisField($data['to'],"owner"),"alliance",0);
                
    $to $database->getOMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $toF $database->getOasisV($data['to']);
                
    $fromF $database->getVillage($data['from']);


                            
    //get defence units
                            
    $Defender = array();    $rom $ger $gal $nat $natar 0;
                            
    $Defender $database->getUnit($data['to']);
                            
    $enforcementarray $database->getEnforceVillage($data['to'],0);

                            if(
    count($enforcementarray) > 0) {
                                foreach(
    $enforcementarray as $enforce) {
                                    for(
    $i=1;$i<=50;$i++) {
                                        
    $Defender['u'.$i] += $enforce['u'.$i];
                                    }
                                        
    $Defender['hero'] += $enforce['hero'];
                                }
                            }
                                for(
    $i=1;$i<=50;$i++){
                                    if(!isset(
    $Defender['u'.$i])){
                                        
    $Defender['u'.$i] = '0';
                                    } else {
                                     if(
    $Defender['u'.$i]=='' or $Defender['u'.$i]<='0'){
                                        
    $Defender['u'.$i] = '0';
                                     } else {
                                                    if(
    $i<=10){ $rom='1'; }
                                                else if(
    $i<=20){ $ger='1'; }
                                                else if(
    $i<=30){ $gal='1'; }
                                                else if(
    $i<=40){ $nat='1'; }
                                                else if(
    $i<=50){ $natar='1'; }
                                    }
                                    }
                                }
                                    if(!isset(
    $Defender['hero'])){
                                        
    $Defender['hero'] = '0';
                                    } else {
                                     if(
    $Defender['hero']=='' or $Defender['hero']<'0'){
                                        
    $Defender['hero'] = '0';
                                     }
                                    }
                                        
    //get attack units
                                                
    $Attacker = array();
                                                
    $start = ($owntribe-1)*10+1;
                                                
    $end = ($owntribe*10);
                                                
    $u = (($owntribe-1)*10);
                                                
    $catp =  0;
                                                
    $catapult = array(8,18,28,38,48);
                                                
    $ram = array(7,17,27,37,47);
                                                
    $chief = array(9,19,29,39,49);
                                                
    $spys = array(4,14,23,44);
                                            for(
    $i=$start;$i<=$end;$i++) {
                                                
    $y $i-$u;
                                                
    $Attacker['u'.$i] = $dataarray[0]['t'.$y];
                                                    
    //there are catas
                                                    
    if(in_array($i,$catapult)) {
                                                    
    $catp += $Attacker['u'.$i];
                                                    
    $catp_pic $i;
                                                    }
                                                    if(
    in_array($i,$ram)) {
                                                    
    $rams += $Attacker['u'.$i];
                                                    
    $ram_pic $i;
                                                    }
                                                    if(
    in_array($i,$chief)) {
                                                    
    $chiefs += $Attacker['u'.$i];
                                                    
    $chief_pic $i;
                                                    }
                                                    if(
    in_array($i,$spys)) {
                                                    
    $chiefs += $Attacker['u'.$i];
                                                    
    $spy_pic $i;
                                                    }
                                                    }
                                                   
    $Attacker['uhero'] = $dataarray[0]['t11'];
                                                    
    $hero_pic "hero";
                                        
    //need to set these variables.
                                        
    $def_wall 1;
                                        
    $att_tribe $owntribe;
                                        
    $def_tribe $targettribe;
                                        
    $residence "0";
                                        
    $attpop $fromF['pop'];
                                        
    $defpop 100;


                                        
    //type of attack
                                        
    if($dataarray[0]['attack_type'] == 1){
                                            
    $type 1;
                                            
    $scout 1;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 2){
                                            
    $type 2;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 3){
                                            
    $type 3;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 4){
                                            
    $type 4;
                                        }

                                        
    $def_ab = Array (
                                            
    "b1" => 0// Blacksmith level
                                            
    "b2" => 0// Blacksmith level
                                            
    "b3" => 0// Blacksmith level
                                            
    "b4" => 0// Blacksmith level
                                            
    "b5" => 0// Blacksmith level
                                            
    "b6" => 0// Blacksmith level
                                            
    "b7" => 0// Blacksmith level
                                            
    "b8" => 0); // Blacksmith level

                                        
    $att_ab = Array (
                                            
    "a1" => 0// armoury level
                                            
    "a2" => 0// armoury level
                                            
    "a3" => 0// armoury level
                                            
    "a4" => 0// armoury level
                                            
    "a5" => 0// armoury level
                                            
    "a6" => 0// armoury level
                                            
    "a7" => 0// armoury level
                                            
    "a8" => 0); // armoury level

                                            
    $empty='1';
                                            
    $tblevel '0';
                                            
    $stonemason "1";

            }

            if(
    PEACE == || $targettribe == || $targettribe == 5){
            if(
    $targettribe == 1){
            
    $def_spy $Defender['u4'];
            }elseif(
    $targettribe == 2){
            
    $def_spy $Defender['u14'];
            }elseif(
    $targettribe == 3){
            
    $def_spy $Defender['u23'];
            }elseif(
    $targettribe == 5){
            
    $def_spy $Defender['u54'];
            }
            if(!
    $scout or $def_spy 0){
                    
    $traps $Defender['u99']-$Defender['u99o'];
                    for(
    $i=1;$i<=11;$i++){
                    
    $traps1 $traps;
                    if(
    $data['t'.$i] < $traps1){
                    
    $traps1 $data['t'.$i];
                    }
                    ${
    traped.$i}=$traps1;
                    
    $traps -= $traps1;
                    
    $database->modifyUnit($data['to'],array("99o"),array($traps1),array(1));
                    }
                    for(
    $i=$start;$i<=$end;$i++) {
                    
    $j $i-$start+1;
                    
    $Attacker['u'.$i] -= ${traped.$j};
                    }
                    
    $Attacker['uhero'] -= $traped11;
                    
    $totaltraped_att $traped1+$traped2+$traped3+$traped4+$traped5+$traped6+$traped7+$traped8+$traped9+$traped10+$traped11;
                    if(
    $totaltraped_att 0){
                    
    $prisoners2 $database->getPrisoners2($data['to'],$data['from']);
                    if(empty(
    $prisoners2)){
                    
    $database->addPrisoners($data['to'],$data['from'],$traped1,$traped2,$traped3,$traped4,$traped5,$traped6,$traped7,$traped8,$traped9,$traped10,$traped11);
                    }else{
                    
    $database->updatePrisoners($data['to'],$data['from'],$traped1,$traped2,$traped3,$traped4,$traped5,$traped6,$traped7,$traped8,$traped9,$traped10,$traped11);
                    }
                    }
            }
                
    $battlepart $battle->calculateBattle($Attacker,$Defender,$def_wall,$att_tribe,$def_tribe,$residence,$attpop,$defpop,$type,$def_ab1,$def_ab2,$def_ab3,$def_ab4,$def_ab5,$def_ab6,$def_ab7,$def_ab8,$att_ab1,$att_ab2,$att_ab3,$att_ab4,$att_ab5,$att_ab6,$att_ab7,$att_ab8,$tblevel,$stonemason,$walllevel,$AttackerID,$DefenderID,$AttackerWref,$DefenderWref);

                
    //units attack string for battleraport
                
    $unitssend_att ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].'';
                
    $herosend_att $data['t11'];
                if (
    $herosend_att>0){
                    
    $unitssend_att_check=$unitssend_att.','.$data['t11'];
                }else{
                    
    $unitssend_att_check=$unitssend_att;
                }
                
    //units defence string for battleraport
                            
    $enforcementarray2 $database->getEnforceVillage($data['to'],0);
                            if(
    count($enforcementarray2) > 0) {
                                foreach(
    $enforcementarray2 as $enforce2) {
                                        
    $Defender['hero'] += $enforce2['hero'];
                                }
                            }
                    
    $unitssend_def[1] = ''.$Defender['u1'].','.$Defender['u2'].','.$Defender['u3'].','.$Defender['u4'].','.$Defender['u5'].','.$Defender['u6'].','.$Defender['u7'].','.$Defender['u8'].','.$Defender['u9'].','.$Defender['u10'].'';
                    
    $unitssend_def[2] = ''.$Defender['u11'].','.$Defender['u12'].','.$Defender['u13'].','.$Defender['u14'].','.$Defender['u15'].','.$Defender['u16'].','.$Defender['u17'].','.$Defender['u18'].','.$Defender['u19'].','.$Defender['u20'].'';
                    
    $unitssend_def[3] = ''.$Defender['u21'].','.$Defender['u22'].','.$Defender['u23'].','.$Defender['u24'].','.$Defender['u25'].','.$Defender['u26'].','.$Defender['u27'].','.$Defender['u28'].','.$Defender['u29'].','.$Defender['u30'].'';
                    
    $unitssend_def[4] = ''.$Defender['u31'].','.$Defender['u32'].','.$Defender['u33'].','.$Defender['u34'].','.$Defender['u35'].','.$Defender['u36'].','.$Defender['u37'].','.$Defender['u38'].','.$Defender['u39'].','.$Defender['u40'].'';
                    
    $unitssend_def[5] = ''.$Defender['u41'].','.$Defender['u42'].','.$Defender['u43'].','.$Defender['u44'].','.$Defender['u45'].','.$Defender['u46'].','.$Defender['u47'].','.$Defender['u48'].','.$Defender['u49'].','.$Defender['u50'].'';
                    
    $herosend_def $Defender['hero'];
                    
    $totalsend_alldef[1] = $Defender['u1']+$Defender['u2']+$Defender['u3']+$Defender['u4']+$Defender['u5']+$Defender['u6']+$Defender['u7']+$Defender['u8']+$Defender['u9']+$Defender['u10'];
                    
    $totalsend_alldef[2] = $Defender['u11']+$Defender['u12']+$Defender['u13']+$Defender['u14']+$Defender['u15']+$Defender['u16']+$Defender['u17']+$Defender['u18']+$Defender['u19']+$Defender['u20'];
                    
    $totalsend_alldef[3] = $Defender['u21']+$Defender['u22']+$Defender['u23']+$Defender['u24']+$Defender['u25']+$Defender['u26']+$Defender['u27']+$Defender['u28']+$Defender['u29']+$Defender['u30'];
                    
    $totalsend_alldef[4] = $Defender['u31']+$Defender['u32']+$Defender['u33']+$Defender['u34']+$Defender['u35']+$Defender['u36']+$Defender['u37']+$Defender['u38']+$Defender['u39']+$Defender['u40'];
                    
    $totalsend_alldef[5] = $Defender['u41']+$Defender['u42']+$Defender['u43']+$Defender['u44']+$Defender['u45']+$Defender['u46']+$Defender['u47']+$Defender['u48']+$Defender['u49']+$Defender['u50'];

                    
    $totalsend_alldef =  $totalsend_alldef[1]+$totalsend_alldef[2]+$totalsend_alldef[3]+$totalsend_alldef[4]+$totalsend_alldef[5]+$herosend_def;

                    
    $unitssend_deff[1] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitssend_deff[2] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitssend_deff[3] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitssend_deff[4] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitssend_deff[5] = '?,?,?,?,?,?,?,?,?,?,';
                    
    //how many troops died? for battleraport

                    #################################################
                    ################FIXED BY SONGER################
                    #################################################

                    
    for($i=1;$i<=11;$i++){
                    if(
    $battlepart['casualties_attacker'][$i] <= 0) { ${dead.$i} = 0; }elseif($battlepart['casualties_attacker'][$i] > $data['t'.$i]){
                    ${
    dead.$i}=$data['t'.$i];
                    }else { ${
    dead.$i} = $battlepart['casualties_attacker'][$i]; }
                    }

                    
    #################################################

                    
    $heroAttackDead=$dead11;
                        
    //kill own defence
                        
    $q "SELECT * FROM ".TB_PREFIX."units WHERE vref='".$data['to']."'";
                        
    $unitlist $database->query_return($q);
                        
    $start = ($targettribe-1)*10+1;
                        
    $end = ($targettribe*10);

                            if(
    $targettribe == 1){ $u ""$rom='1'; } else if($targettribe == 2){ $u "1"$ger='1'; } else if($targettribe == 3){$u "2"$gal='1'; }else if($targettribe == 4){ $u "3"$nat='1'; } else { $u "4"$natar='1'; }     //FIX
                                
    for($i=$start;$i<=$end;$i++) { if($i==$end){ $u=$targettribe; }
                                    if(
    $unitlist){
                                        
    $dead[$i]+=round($battlepart[2]*$unitlist[0]['u'.$i]);
                                        
    $database->modifyUnit($data['to'],array($i),array(round($battlepart[2]*$unitlist[0]['u'.$i])),array(0));
                                    }
                                }
                                    
    $dead['hero']='0';
                                    if(
    $unitlist){
                                        
    $dead['hero']+=$battlepart['deadherodef'];
                                        
    $database->modifyUnit($data['to'],array("hero"),array($battlepart['deadherodef']),array(0));
                                    }
                
    //kill other defence in village
                
    if(count($database->getEnforceVillage($data['to'],0)) > 0) {
                    foreach(
    $database->getEnforceVillage($data['to'],0) as $enforce) {
                        
    $life='';    $notlife=''$wrong='0';
                        if(
    $enforce['from'] != 0){
                        
    $tribe $database->getUserField($database->getVillageField($enforce['from'],"owner"),"tribe",0);
                        }else{
                        
    $tribe 4;
                        }
                        
    $start = ($tribe-1)*10+1;
                        
    $totalreinfunits 0;
                            for(
    $i=1;$i<=50;$i++) {
                                
    $totalreinfunits += $enforce['u'.$i];
                            }
                        if(
    $totalreinfunits 0){
                        if(
    $tribe == 1){ $rom='1'; } else if($tribe == 2){ $ger='1'; }else if($tribe == 3){ $gal='1'; }else if($tribe == 4){ $nat='1'; } else { $natar='1'; }
                            for(
    $i=$start;$i<=($start+9);$i++) {
                                if(
    $enforce['u'.$i]>'0'){
                                    
    $database->modifyEnforce($enforce['id'],$i,round($battlepart[2]*$enforce['u'.$i]),0);
                                    
    $dead[$i]+=round($battlepart[2]*$enforce['u'.$i]);
                                    
    $checkpoint=round($battlepart[2]*$enforce['u'.$i]);
                                        if(
    $checkpoint!=$enforce['u'.$i]){
                                        
    $wrong='1';
                                        }
                                } else {
                                    
    $dead[$i]='0';
                                }
                            }
                        }
                                if(
    $enforce['hero']>'0'){
                                    
    $database->modifyEnforce($enforce['id'],"hero",$battlepart['deadheroref'][$enforce['id']],0);
                                    
    $dead['hero']+=$battlepart['deadheroref'][$enforce['id']];
                                        if(
    $dead['hero']!=$enforce['hero']){
                                        
    $wrong='1';
                                        }
                                }
                            
    $notlife''.$dead[$start].','.$dead[$start+1].','.$dead[$start+2].','.$dead[$start+3].','.$dead[$start+4].','.$dead[$start+5].','.$dead[$start+6].','.$dead[$start+7].','.$dead[$start+8].','.$dead[$start+9].'';
                            
    $notlife1 $dead[$start]+$dead[$start+1]+$dead[$start+2]+$dead[$start+3]+$dead[$start+4]+$dead[$start+5]+$dead[$start+6]+$dead[$start+7]+$dead[$start+8]+$dead[$start+9];
                            
    $life''.$enforce['u'.$start.''].','.$enforce['u'.($start+1).''].','.$enforce['u'.($start+2).''].','.$enforce['u'.($start+3).''].','.$enforce['u'.($start+4).''].','.$enforce['u'.($start+5).''].','.$enforce['u'.($start+6).''].','.$enforce['u'.($start+7).''].','.$enforce['u'.($start+8).''].','.$enforce['u'.($start+9).''].'';
                            
    $life1 $enforce['u'.$start.'']+$enforce['u'.($start+1).'']+$enforce['u'.($start+2).'']+$enforce['u'.($start+3).'']+$enforce['u'.($start+4).'']+$enforce['u'.($start+5).'']+$enforce['u'.($start+6).'']+$enforce['u'.($start+7).'']+$enforce['u'.($start+8).'']+$enforce['u'.($start+9).''];
                            
    $lifehero $enforce['hero'];
                            
    $notlifehero $dead['hero'];
                            
    $totallife $enforce['hero']+$life1;
                            
    $totalnotlife $dead['hero']+$notlife1;
                            
    $totalsend_att $data['t1']+$data['t2']+$data['t3']+$data['t4']+$data['t5']+$data['t6']+$data['t7']+$data['t8']+$data['t9']+$data['t10']+$data['t11'];
                            
    $totaldead_att $dead1+$dead2+$dead3+$dead4+$dead5+$dead6+$dead7+$dead8+$dead9+$dead10+$dead11;
                            
    //NEED TO SEND A RAPPORTAGE!!!
                            
    $data2 ''.$database->getVillageField($enforce['from'],"owner").','.$to['wref'].','.addslashes($to['name']).','.$tribe.','.$life.','.$notlife.','.$lifehero.','.$notlifehero.'';
                            if(
    $scout){
                            if(
    $totaldead_att 0){
                            if(
    $totaldead_att == $totalsend_att){
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,15,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }else{
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,16,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }
                            }
                            }else{
                            if(
    $totalnotlife == 0){
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,15,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }else if(
    $totallife $totalnotlife){
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,16,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }else{
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,17,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }
                            
    //delete reinf sting when its killed all.
                            
    if($wrong=='0'){ $database->deleteReinf($enforce['id']); }
                            }
                    }
                }
                
    $totalsend_att $data['t1']+$data['t2']+$data['t3']+$data['t4']+$data['t5']+$data['t6']+$data['t7']+$data['t8']+$data['t9']+$data['t10']+$data['t11'];

                    
    $unitsdead_def[1] = ''.$dead['1'].','.$dead['2'].','.$dead['3'].','.$dead['4'].','.$dead['5'].','.$dead['6'].','.$dead['7'].','.$dead['8'].','.$dead['9'].','.$dead['10'].'';
                    
    $unitsdead_def[2] = ''.$dead['11'].','.$dead['12'].','.$dead['13'].','.$dead['14'].','.$dead['15'].','.$dead['16'].','.$dead['17'].','.$dead['18'].','.$dead['19'].','.$dead['20'].'';
                    
    $unitsdead_def[3] = ''.$dead['21'].','.$dead['22'].','.$dead['23'].','.$dead['24'].','.$dead['25'].','.$dead['26'].','.$dead['27'].','.$dead['28'].','.$dead['29'].','.$dead['30'].'';
                    
    $unitsdead_def[4] = ''.$dead['31'].','.$dead['32'].','.$dead['33'].','.$dead['34'].','.$dead['35'].','.$dead['36'].','.$dead['37'].','.$dead['38'].','.$dead['39'].','.$dead['40'].'';
                    
    $unitsdead_def[5] = ''.$dead['41'].','.$dead['42'].','.$dead['43'].','.$dead['44'].','.$dead['45'].','.$dead['46'].','.$dead['47'].','.$dead['48'].','.$dead['49'].','.$dead['50'].'';
                    
    $unitsdead_deff[1] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitsdead_deff[2] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitsdead_deff[3] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitsdead_deff[4] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitsdead_deff[5] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $deadhero $dead['hero'];

                    
    $totaldead_alldef[1] = $dead['1']+$dead['2']+$dead['3']+$dead['4']+$dead['5']+$dead['6']+$dead['7']+$dead['8']+$dead['9']+$dead['10'];
                    
    $totaldead_alldef[2] = $dead['11']+$dead['12']+$dead['13']+$dead['14']+$dead['15']+$dead['16']+$dead['17']+$dead['18']+$dead['19']+$dead['20'];
                    
    $totaldead_alldef[3] = $dead['21']+$dead['22']+$dead['23']+$dead['24']+$dead['25']+$dead['26']+$dead['27']+$dead['28']+$dead['29']+$dead['30'];
                    
    $totaldead_alldef[4] = $dead['31']+$dead['32']+$dead['33']+$dead['34']+$dead['35']+$dead['36']+$dead['37']+$dead['38']+$dead['39']+$dead['40'];
                    
    $totaldead_alldef[5] = $dead['41']+$dead['42']+$dead['43']+$dead['44']+$dead['45']+$dead['46']+$dead['47']+$dead['48']+$dead['49']+$dead['50'];

                    
    $totaldead_alldef =  $totaldead_alldef[1]+$totaldead_alldef[2]+$totaldead_alldef[3]+$totaldead_alldef[4]+$totaldead_alldef[5]+$deadhero;
                    
    $totalattackdead += $totaldead_alldef;


                
    // Set units returning from attack
                
    $database->modifyAttack($data['ref'],1,$dead1);
                
    $database->modifyAttack($data['ref'],2,$dead2);
                
    $database->modifyAttack($data['ref'],3,$dead3);
                
    $database->modifyAttack($data['ref'],4,$dead4);
                
    $database->modifyAttack($data['ref'],5,$dead5);
                
    $database->modifyAttack($data['ref'],6,$dead6);
                
    $database->modifyAttack($data['ref'],7,$dead7);
                
    $database->modifyAttack($data['ref'],8,$dead8);
                
    $database->modifyAttack($data['ref'],9,$dead9);
                
    $database->modifyAttack($data['ref'],10,$dead10);
                
    $database->modifyAttack($data['ref'],11,$dead11);
                
    $unitsdead_att ''.$dead1.','.$dead2.','.$dead3.','.$dead4.','.$dead5.','.$dead6.','.$dead7.','.$dead8.','.$dead9.','.$dead10.'';

                
    $database->modifyAttack($data['ref'],1,$traped1);
                
    $database->modifyAttack($data['ref'],2,$traped2);
                
    $database->modifyAttack($data['ref'],3,$traped3);
                
    $database->modifyAttack($data['ref'],4,$traped4);
                
    $database->modifyAttack($data['ref'],5,$traped5);
                
    $database->modifyAttack($data['ref'],6,$traped6);
                
    $database->modifyAttack($data['ref'],7,$traped7);
                
    $database->modifyAttack($data['ref'],8,$traped8);
                
    $database->modifyAttack($data['ref'],9,$traped9);
                
    $database->modifyAttack($data['ref'],10,$traped10);
                
    $database->modifyAttack($data['ref'],11,$traped11);
                
    $unitstraped_att ''.$traped1.','.$traped2.','.$traped3.','.$traped4.','.$traped5.','.$traped6.','.$traped7.','.$traped8.','.$traped9.','.$traped10.','.$traped11.'';
                if (
    $herosend_att>0){
                    
    $unitsdead_att_check $unitsdead_att.','.$dead11;
                }else{
                    
    $unitsdead_att_check $unitsdead_att;
                }
                
    //$unitsdead_def = ''.$dead11.','.$dead12.','.$dead13.','.$dead14.','.$dead15.','.$dead16.','.$dead17.','.$dead18.','.$dead19.','.$dead20.'';


                //top 10 attack and defence update
                
    $totaldead_att $dead1+$dead2+$dead3+$dead4+$dead5+$dead6+$dead7+$dead8+$dead9+$dead10+$dead11;
                
    $totalattackdead += $totaldead_att;
                
    $troopsdead1 $dead1;
                
    $troopsdead2 $dead2;
                
    $troopsdead3 $dead3;
                
    $troopsdead4 $dead4;
                
    $troopsdead5 $dead5;
                
    $troopsdead6 $dead6;
                
    $troopsdead7 $dead7;
                
    $troopsdead8 $dead8;
                
    $troopsdead9 $dead9+1;
                
    $troopsdead10 $dead10;
                
    $troopsdead11 $dead11;
                for(
    $i=1;$i<=50;$i++) {
                
    $totaldead_def += $dead[''.$i.''];
                }
                
    $totaldead_def += $dead['hero'];
                if (
    $Attacker['uhero'] != 0){
                 
    $heroxp $totaldead_def;
                 
    $database->modifyHeroXp("experience",$heroxp,$from['owner']);
                }
                
    $Defender1 $database->getUnit($to['wref']);
                    if(
    $Defender1['hero'] > 0){
                    
    $defheroxp $totaldead_att;
                    
    $database->modifyHeroXp("experience",$defheroxp,$toF['owner']);
                    }
                
    $enforcementarray1 $database->getEnforceVillage($to['wref'],0);
                if(
    count($enforcementarray1) > 0) {
                foreach(
    $enforcementarray1 as $enforce1) {
                                if(
    $enforce1['hero'] > 0){
                                
    $enforceowner $database->getVillageField($enforce1['from'],"owner");
                                
    $reinfheroxp $totaldead_att;
                                
    $database->modifyHeroXp("experience",$reinfheroxp,$enforceowner);
                                }
                }
                            }
                
    $database->modifyPoints($toF['owner'],'dpall',$totaldead_att );
                
    $database->modifyPoints($from['owner'],'apall',$totaldead_def);
                
    $database->modifyPoints($toF['owner'],'dp',$totaldead_att );
                
    $database->modifyPoints($from['owner'],'ap',$totaldead_def);
                
    $database->modifyPointsAlly($targetally,'Adp',$totaldead_att );
                
    $database->modifyPointsAlly($ownally,'Aap',$totaldead_def);
                
    $database->modifyPointsAlly($targetally,'dp',$totaldead_att );
                
    $database->modifyPointsAlly($ownally,'ap',$totaldead_def);



                if (
    $isoasis == 0){
                
    // get toatal cranny value:
                
    $buildarray $database->getResourceLevel($data['to']);
                
    $cranny 0;
                for(
    $i=19;$i<39;$i++){
                    if(
    $buildarray['f'.$i.'t']==23){
                    
    $cranny += $bid23[$buildarray['f'.$i.'']]['attri'];
                    }
                }

                
    //cranny efficiency
                
    $atk_bonus = ($owntribe == 2)? (4/5) : 1;
                
    $def_bonus = ($targettribe == 3)? 1;
                
    $to_owner $database->getVillageField($data['to'],"owner");
                
    $artefact_2 count($database->getOwnUniqueArtefactInfo2($to_owner,7,3,0));
                
    $artefact1_2 count($database->getOwnUniqueArtefactInfo2($data['to'],7,1,1));
                
    $artefact2_2 count($database->getOwnUniqueArtefactInfo2($to_owner,7,2,0));
                if(
    $artefact_2 0){
                
    $artefact_bouns 6;
                }else if(
    $artefact1_2 0){
                
    $artefact_bouns 3;
                }else if(
    $artefact2_2 0){
                
    $artefact_bouns 2;
                }else{
                
    $artefact_bouns 1;
                }
                
    $foolartefact $database->getFoolArtefactInfo(7,$vid,$session->uid);
                if(
    count($foolartefact) > 0){
                foreach(
    $foolartefact as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $cranny_eff *= $arte['effect2'];
                }else{
                
    $cranny_eff /= $arte['effect2'];
                
    $cranny_eff round($cranny_eff);
                }
                }
                }
                
    $cranny_eff = ($cranny $atk_bonus)*$def_bonus*$artefact_bouns;

                
    // work out available resources.
                
    $this->updateRes($data['to'],$to['owner']);
                
    $this->pruneResource();

                
    $totclay $database->getVillageField($data['to'],'clay');
                
    $totiron $database->getVillageField($data['to'],'iron');
                
    $totwood $database->getVillageField($data['to'],'wood');
                
    $totcrop $database->getVillageField($data['to'],'crop');
                }else{
                
    $cranny_eff 0;

                
    // work out available resources.
                
    $this->updateORes($data['to']);
                
    $this->pruneOResource();

                
    $totclay $database->getOasisField($data['to'],'clay');
                
    $totiron $database->getOasisField($data['to'],'iron');
                
    $totwood $database->getOasisField($data['to'],'wood');
                
    $totcrop $database->getOasisField($data['to'],'crop');
                }
                
    $avclay floor($totclay $cranny_eff);
                
    $aviron floor($totiron $cranny_eff);
                
    $avwood floor($totwood $cranny_eff);
                
    $avcrop floor($totcrop $cranny_eff);

                
    $avclay = ($avclay 0)? $avclay;
                
    $aviron = ($aviron 0)? $aviron;
                
    $avwood = ($avwood 0)? $avwood;
                
    $avcrop = ($avcrop 0)? $avcrop;


                
    $avtotal = array($avwood$avclay$aviron,  $avcrop);

                
    $av $avtotal;

                
    // resources (wood,clay,iron,crop)
                
    $steal = array(0,0,0,0);

                
    //bounty variables
                
    $btotal $battlepart['bounty'];
                
    $bmod 0;


                for(
    $i 0$i<5$i++)
                {
                    for(
    $j=0;$j<4;$j++)
                    {
                        if(isset(
    $avtotal[$j]))
                        {
                            if(
    $avtotal[$j]<1)
                                unset(
    $avtotal[$j]);
                        }
                    }
                    if(!
    $avtotal)
                    {
                        
    // echo 'array empty'; *no resources left to take.
                        
    break;
                    }
                    if(
    $btotal <&& $bmod <1)
                        break;
                    if(
    $btotal<1)
                    {
                        while(
    $bmod)
                        {
                            
    //random select
                            
    $rs array_rand($avtotal);
                            if(isset(
    $avtotal[$rs]))
                            {
                                
    $avtotal[$rs] -= 1;
                                
    $steal[$rs] += 1;
                                
    $bmod -= 1;
                            }
                        }
                    }

                    
    // handle unballanced amounts.
                    
    $btotal +=$bmod;
                    
    $bmod $btotal%count($avtotal);
                    
    $btotal -=$bmod;
                    
    $bsplit $btotal/count($avtotal);

                    
    $max_steal = (min($avtotal) < $bsplit)? min($avtotal): $bsplit;

                    for(
    $j=0;$j<4;$j++)
                    {
                        if(isset(
    $avtotal[$j]))
                        {
                            
    $avtotal[$j] -= $max_steal;
                            
    $steal[$j] += $max_steal;
                            
    $btotal -= $max_steal;
                        }
                    }
                }

                if (
    $isoasis == 0) {
                    
    $database->modifyResource($data["to"], $steal[0], $steal[1], $steal[2], $steal[3], false);
                    
    $this->pruneResource();
                } else {
                    
    $database->modifyOasisResource($data["to"], $steal[0], $steal[1], $steal[2], $steal[3], false);
                    
    $this->pruneOResource();
                }

                
    //work out time of return
                
    $start = ($owntribe-1)*10+1;
                
    $end = ($owntribe*10);

                
    $unitspeeds = array(6,5,7,16,14,10,4,3,4,5,
                                    
    7,7,6,9,10,9,4,3,4,5,
                                    
    7,6,17,19,16,13,4,3,4,5,
                                    
    7,7,6,9,10,9,4,3,4,5,
                                    
    7,7,6,9,10,9,4,3,4,5);

                
    $speeds = array();

                
    //find slowest unit.
                
    for($i=1;$i<=10;$i++)
                {
                    if (
    $data['t'.$i] > $battlepart['casualties_attacker'][$i]) {
                    if(
    $unitarray) { reset($unitarray); }
                    
    $unitarray $GLOBALS["u".(($owntribe-1)*10+$i)];
                    
    $speeds[] = $unitarray['speed'];
                     }
                }
                if (
    $herosend_att>0){
                    
    $qh "SELECT * FROM ".TB_PREFIX."hero WHERE uid = ".$from['owner']."";
                    
    $resulth mysql_query($qh);
                    
    $hero_f=mysql_fetch_array($resulth);
                    
    $hero_unit=$hero_f['unit'];
                    
    $speeds[] = $GLOBALS['u'.$hero_unit]['speed'];
                }

    // Data for when troops return.

                    //catapulten kijken :D
                
    $info_cat $info_chief $info_ram ",";

                if (
    $type=='3'){
                    if (
    $rams!='0'){
                        if (isset(
    $empty)){
                            
    $info_ram "".$ram_pic.",There is no wall to destroy.";
                        } else

                          if (
    $battlepart[8]>$battlepart[7]){
                                
    $info_ram "".$ram_pic.",Wall destroyed.";
                                
    $database->setVillageLevel($data['to'],"f".$wallid."",'0');
                                
    $database->setVillageLevel($data['to'],"f".$wallid."t",'0');
                                
    $pop=$this->recountPop($data['to']);

                        }elseif (
    $battlepart[8]==0){

                            
    $info_ram "".$ram_pic.",Wall was not damaged.";
                        }else{

                            
    $demolish=$battlepart[8]/$battlepart[7];
                            
    $totallvl round(sqrt(pow(($walllevel+0.5),2)-($battlepart[8]*8)));
                        if(
    $walllevel == $totallvl){
                        
    $info_ram "".$ram_pic.",Wall was not damaged.";
                        }else{
                        
    $info_ram "".$ram_pic.",Wall damaged from level <b>".$walllevel."</b> to level <b>".$totallvl."</b>.";
                                
    $database->setVillageLevel($data['to'],"f".$wallid."",$totallvl);
                        }

                        }
                    }
                }
               if (
    $type=='3')
    {
        if (
    $catp!='0')
        {
            
    $pop=$this->recountPop($data['to']);
            if(
    $pop<=0)
            {
                
    $info_cat ",".$catp_pic.", Village already destroyed.";
            }
            else
            {
                
    $basearray $data['to'];

                if (
    $data['ctar2']==0)
                {
                    
    $bdo2=mysql_query("select * from " TB_PREFIX "fdata where vref = $basearray");
                    
    $bdo=mysql_fetch_array($bdo2);

                    
    $rand=$data['ctar1'];

                    if (
    $rand != 0)
                    {
                        
    $_rand=array();
                        
    $__rand=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i.'t']==$rand && $bdo['f'.$i]>&& $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $j++;
                                
    $_rand[$j]=$bdo['f'.$i];
                                
    $__rand[$j]=$i;
                            }
                        }
                        if (
    count($_rand)>0)
                        {
                            if (
    max($_rand)<=0$rand=0;
                            else
                            {
                                
    $rand=rand(1$j);
                                
    $rand=$__rand[$rand];
                            }
                        }
                        else
                        {
                            
    $rand=0;
                        }
                    }

                    if (
    $rand == 0)
                    {
                        
    $list=array();
                        
    $j=1;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i] > && $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $list[$j]=$i;
                                
    $j++;
                            }
                        }
                        
    $rand=rand(1$j);
                        
    $rand=$list[$rand];
                    }

                    
    $tblevel $bdo['f'.$rand];
                    
    $tbgid $bdo['f'.$rand.'t'];
                    
    $tbid $rand;
                    if(
    $stonemason==0){
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200))) + 0.5);
                    }else{
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200) / ($bid34[$stonemason]['attri']/100))) + 0.5);
                    }
                    if (
    $battlepart[4]>$needed_cata)
                    {
                        
    $info_cat "".$catp_pic.", ".$this->procResType($tbgid)." destroyed.";
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",'0');
                        if(
    $tbid>=19) { $database->setVillageLevel($data['to'],"f".$tbid."t",'0'); }
                        
    $buildarray $GLOBALS["bid".$tbgid];
                        if (
    $tbgid==10 || $tbgid==38) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxstore=$t_sql['maxstore']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxstore<800$tmaxstore=800;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."'*32 WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        if (
    $tbgid==11 || $tbgid==39) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxcrop=$t_sql['maxcrop']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxcrop<800$tmaxcrop=800;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."'*32 WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        
    $pop=$this->recountPop($data['to']);
                        
    $capital $database->getVillage($data['to']);
                        if(
    $pop=='0' && $capital['capital']=='0')
                        {
                        
    $village_destroyed 1;
                        }
                    }
                    elseif (
    $battlepart[4]==0)
                    {
                        
    $info_cat "".$catp_pic.",".$this->procResType($tbgid)." was not damaged.";
                    }
                    else
                    {
                        
    $demolish=$battlepart[4]/$needed_cata;
                        
    $totallvl round(sqrt(pow(($tblevel+0.5),2)-($battlepart[4]*8)));
                        if (
    $tblevel==$totallvl)
                            
    $info_cata=" was not damaged.";
                        else
                        {
                            
    $info_cata=" damaged from level <b>".$tblevel."</b> to level <b>".$totallvl."</b>.";
                            
    $buildarray $GLOBALS["bid".$tbgid];
                            if (
    $tbgid==10 || $tbgid==38) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxstore=$t_sql['maxstore']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxstore<800$tmaxstore=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            if (
    $tbgid==11 || $tbgid==39) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxcrop=$t_sql['maxcrop']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxcrop<800$tmaxcrop=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            
    $pop=$this->recountPop($data['to']);
                        }
                        
    $info_cat "".$catp_pic.",".$this->procResType($tbgid).$info_cata;
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",$totallvl);
                    }
                }
                else
                {
                    
    $bdo2=mysql_query("select * from " TB_PREFIX "fdata where vref = $basearray");
                    
    $bdo=mysql_fetch_array($bdo2);
                    
    $rand=$data['ctar1'];
                    if (
    $rand != 0)
                    {
                        
    $_rand=array();
                        
    $__rand=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i.'t']==$rand && $bdo['f'.$i]>&& $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $j++;
                                
    $_rand[$j]=$bdo['f'.$i];
                                
    $__rand[$j]=$i;
                            }
                        }
                        if (
    count($_rand)>0)
                        {
                            if (
    max($_rand)<=0$rand=0;
                            else
                            {
                                
    $rand=rand(1$j);
                                
    $rand=$__rand[$rand];
                            }
                        }
                        else
                        {
                            
    $rand=0;
                        }
                    }

                    if (
    $rand == 0)
                    {
                        
    $list=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i] > && $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $j++;
                                
    $list[$j]=$i;
                            }
                        }
                        
    $rand=rand(1$j);
                        
    $rand=$list[$rand];
                    }

                    
    $tblevel $bdo['f'.$rand];
                    
    $tbgid $bdo['f'.$rand.'t'];
                    
    $tbid $rand;
                    if(
    $stonemason==0){
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200))) + 0.5);
                    }else{
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200) / ($bid34[$stonemason]['attri']/100))) + 0.5);
                    }
                    if ((
    $battlepart[4]/2)>$needed_cata)
                    {
                        
    $info_cat "".$catp_pic.", ".$this->procResType($tbgid)." destroyed.";
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",'0');
                        if(
    $tbid>=19) { $database->setVillageLevel($data['to'],"f".$tbid."t",'0'); }
                        
    $buildarray $GLOBALS["bid".$tbgid];
                        if (
    $tbgid==10 || $tbgid==38) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxstore=$t_sql['maxstore']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxstore<800$tmaxstore=800*32;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        if (
    $tbgid==11 || $tbgid==39) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxcrop=$t_sql['maxcrop']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxcrop<800$tmaxcrop=800*32;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        
    $pop=$this->recountPop($data['to']);
                        if(
    $pop=='0')
                        {
                            
    $varray $database->getProfileVillages($to['owner']);
                            if(
    count($varray)!='1' AND $to['capital']!='1'){
                            
    $village_destroyed 1;
                            }
                        }
                    }
                    elseif (
    $battlepart[4]==0)
                    {
                        
    $info_cat "".$catp_pic.",".$this->procResType($tbgid)." was not damaged.";
                    }
                    else
                    {
                        
    $demolish=($battlepart[4]/2)/$needed_cata;
                        
    $totallvl round(sqrt(pow(($tblevel+0.5),2)-(($battlepart[4]/2)*8)));
                        if (
    $tblevel==$totallvl)
                            
    $info_cata=" was not damaged.";
                        else
                        {
                            
    $info_cata=" damaged from level <b>".$tblevel."</b> to level <b>".$totallvl."</b>.";
                            
    $buildarray $GLOBALS["bid".$tbgid];
                            if (
    $tbgid==10 || $tbgid==38) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxstore=$t_sql['maxstore']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxstore<800$tmaxstore=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            if (
    $tbgid==11 || $tbgid==39) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxcrop=$t_sql['maxcrop']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxcrop<800$tmaxcrop=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            
    $pop=$this->recountPop($data['to']);
                        }
                        
    $info_cat "".$catp_pic.",".$this->procResType($tbgid).$info_cata;
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",$totallvl);
                    }
                    
    $bdo2=mysql_query("select * from " TB_PREFIX "fdata where vref = $basearray");
                    
    $bdo=mysql_fetch_array($bdo2);
                    
    $rand=$data['ctar2'];
                    if (
    $rand != 99)
                    {
                        
    $_rand=array();
                        
    $__rand=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i.'t']==$rand && $bdo['f'.$i]>&& $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $j++;
                                
    $_rand[$j]=$bdo['f'.$i];
                                
    $__rand[$j]=$i;
                            }
                        }
                        if (
    count($_rand)>0)
                        {
                            if (
    max($_rand)<=0$rand=99;
                            else
                            {
                                
    $rand=rand(1$j);
                                
    $rand=$__rand[$rand];
                            }
                        }
                        else
                        {
                            
    $rand=99;
                        }
                    }

                    if (
    $rand == 99)
                    {
                        
    $list=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i] > 0)
                            {
                                
    $j++;
                                
    $list[$j]=$i;
                            }
                        }
                        
    $rand=rand(1$j);
                        
    $rand=$list[$rand];
                    }

                    
    $tblevel $bdo['f'.$rand];
                    
    $tbgid $bdo['f'.$rand.'t'];
                    
    $tbid $rand;
                    if(
    $stonemason==0){
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200))) + 0.5);
                    }else{
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200) / ($bid34[$stonemason]['attri']/100))) + 0.5);
                    }
                    if ((
    $battlepart[4]/2)>$needed_cata)
                    {
                        
    $info_cat .= "<br><tbody class=\"goods\"><tr><th>Information</th><td colspan=\"11\">
                        <img class=\"unit u"
    .$catp_pic."\" src=\"img/x.gif\" alt=\"Catapult\" title=\"Catapult\" /> ".$this->procResType($tbgid)." destroyed.</td></tr></tbody>";
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",'0');
                        if(
    $tbid>=19) { $database->setVillageLevel($data['to'],"f".$tbid."t",'0'); }
                        
    $buildarray $GLOBALS["bid".$tbgid];
                        if (
    $tbgid==10 || $tbgid==38) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxstore=$t_sql['maxstore']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxstore<800$tmaxstore=800;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        if (
    $tbgid==11 || $tbgid==39) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxcrop=$t_sql['maxcrop']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxcrop<800$tmaxcrop=800;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        
    $pop=$this->recountPop($data['to']);
                        if(
    $pop=='0')
                        {
                            
    $varray $database->getProfileVillages($to['owner']);
                            if(
    count($varray)!='1' AND $to['capital']!='1'){
                            
    $village_destroyed 1;
                            }
                        }
                    }
                    elseif (
    $battlepart[4]==0)
                    {
                        
    $info_cat .= "<br><tbody class=\"goods\"><tr><th>Information</th><td colspan=\"11\">
                        <img class=\"unit u"
    .$catp_pic."\" src=\"img/x.gif\" alt=\"Catapult\" title=\"Catapult\" /> ".$this->procResType($tbgid)." was not damaged.</td></tr></tbody>";
                    }
                    else
                    {
                        
    $demolish=($battlepart[4]/2)/$needed_cata;
                        
    $totallvl round(sqrt(pow(($tblevel+0.5),2)-(($battlepart[4]/2)*8)));
                        if (
    $tblevel==$totallvl)
                            
    $info_cata=" was not damaged.";
                        else
                        {
                            
    $info_cata=" damaged from level <b>".$tblevel."</b> to level <b>".$totallvl."</b>.";
                            
    $buildarray $GLOBALS["bid".$tbgid];
                            if (
    $tbgid==10 || $tbgid==38) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxstore=$t_sql['maxstore']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxstore<800$tmaxstore=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            if (
    $tbgid==11 || $tbgid==39) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxcrop=$t_sql['maxcrop']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxcrop<800$tmaxcrop=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            
    $pop=$this->recountPop($data['to']);
                        }

                        
    $info_cat .= "<br><tbody class=\"goods\"><tr><th>Information</th><td colspan=\"11\">
                        <img class=\"unit u"
    .$catp_pic."\" src=\"img/x.gif\" alt=\"Catapult\" title=\"Catapult\" /> ".$this->procResType($tbgid).$info_cata."</td></tr></tbody>";
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",$totallvl);

                    }
                }
            }
        }
    }

            
    //chiefing village
            //there are senators
            
    if(($data['t9']-$dead9)>0){

                
    $palacelevel $database->getResourceLevel($from['wref']);
                for(
    $i=1;$i<=40;$i++) {
                if(
    $palacelevel['f'.$i.'t'] == 26){
                
    $plevel $i;
                }else if(
    $palacelevel['f'.$i.'t'] == 25){
                
    $plevel $i;
                }
                }
                if(
    $palacelevel['f'.$plevel.'t'] == 26){
                if(
    $palacelevel['f'.$plevel] < 10){
                   
    $canconquer 0;
                }
                elseif(
    $palacelevel['f'.$plevel] < 15){
                   
    $canconquer 1;
                }
                elseif(
    $palacelevel['f'.$plevel] < 20){
                   
    $canconquer 2;
                }
                else{
                   
    $canconquer 3;
                }
                }else if(
    $palacelevel['f'.$plevel.'t'] == 25){
                if(
    $palacelevel['f'.$plevel] < 10){
                   
    $canconquer 0;
                }
                elseif(
    $palacelevel['f'.$plevel] < 20){
                   
    $canconquer 1;
                }
                else{
                   
    $canconquer 2;
                }
                }

                
    $exp1 $database->getVillageField($from['wref'],'exp1');
                
    $exp2 $database->getVillageField($from['wref'],'exp2');
                
    $exp3 $database->getVillageField($from['wref'],'exp3');
                if(
    $exp1 == 0){
                   
    $villexp 0;
                }
                elseif(
    $exp2 == 0){
                   
    $villexp 1;
                }
                elseif(
    $exp3 == 0){
                   
    $villexp 2;
                }
                else{
                   
    $villexp 3;
                }
                
    $varray $database->getProfileVillages($to['owner']);
                
    $varray1 count($database->getProfileVillages($from['owner']));
                
    $mode CP;
                
    $cp_mode $GLOBALS['cp'.$mode];
                
    $need_cps $cp_mode[$varray1+1];
                
    $user_cps $database->getUserField($from['owner'],"cp",0);
                
    //kijken of laatste dorp is, of hoofddorp
                
    if($user_cps >= $need_cps){
                if(
    count($varray)!='1' AND $to['capital']!='1' AND $villexp $canconquer){
                if(
    $to['owner']!=OR $to['name']!='WW Buildingplan'){
                    
    //if there is no Palace/Residence
                    
    for ($i=18$i<39$i++){
                        if (
    $database->getFieldLevel($data['to'],"".$i."t")==25 or $database->getFieldLevel($data['to'],"".$i."t")==26){
                            
    $nochiefing='1';
                                
    $info_chief "".$chief_pic.",The Palace/Residence isn\'t destroyed!";
                        }
                    }
                    if(!isset(
    $nochiefing)){
                        
    //$info_chief = "".$chief_pic.",You don't have enought CP to chief a village.";
                        
    if($this->getTypeLevel(35,$data['from']) == 0){
                        for (
    $i=0$i<($data['t9']-$dead9); $i++){
                        if(
    $owntribe == 1){
                        
    $rand+=rand(20,30);
                        }else{
                        
    $rand+=rand(20,25);
                        }
                        }
                        }else{
                        for (
    $i=0$i<($data['t9']-$dead9); $i++){
                        
    $rand+=rand(5,15);
                        }
                        }
                        
    //loyalty is more than 0
                        
    if(($toF['loyalty']-$rand)>0){
                            
    $info_chief "".$chief_pic.",The loyalty was lowered from <b>".floor($toF['loyalty'])."</b> to <b>".floor($toF['loyalty']-$rand)."</b>.";
                            
    $database->setVillageField($data['to'],loyalty,($toF['loyalty']-$rand));
                        } else {
                        
    //you took over the village
                            
    $villname addslashes($database->getVillageField($data['to'],"name"));
                            
    $artifact $database->getOwnArtefactInfo($data['to']);
                            
    $info_chief "".$chief_pic.",Inhabitants of ".$villname." village decided to join your empire.";
                            if (
    $artifact['vref'] == $data['to']){
                             
    $database->claimArtefact($data['to'],$data['to'],$database->getVillageField($data['from'],"owner"));
                            }
                            
    $database->setVillageField($data['to'],loyalty,0);
                            
    $database->setVillageField($data['to'],owner,$database->getVillageField($data['from'],"owner"));
                            
    //delete upgrades in armory and blacksmith
                            
    $q "DELETE FROM ".TB_PREFIX."abdata WHERE vref = ".$data['to']."";
                            
    $database->query($q);
                            
    $database->addABTech($data['to']);
                            
    //delete researches in academy
                            
    $q "DELETE FROM ".TB_PREFIX."tdata WHERE vref = ".$data['to']."";
                            
    $database->query($q);
                            
    $database->addTech($data['to']);
                            
    //delete reinforcement
                            
    $q "DELETE FROM ".TB_PREFIX."enforcement WHERE from = ".$data['to']."";
                            
    $database->query($q);
                            
    // check buildings
                            
    $pop1 $database->getVillageField($data['from'],"pop");
                            
    $pop2 $database->getVillageField($data['to'],"pop");
                            if(
    $pop1 $pop2){
                            
    $buildlevel $database->getResourceLevel($data['to']);
                            for (
    $i=1$i<=39$i++){
                            if(
    $buildlevel['f'.$i]!=0){
                            if(
    $buildlevel['f'.$i."t"]!=35 && $buildlevel['f'.$i."t"]!=36 && $buildlevel['f'.$i."t"]!=41){
                            
    $leveldown $buildlevel['f'.$i]-1;
                            
    $database->setVillageLevel($data['to'],"f".$i,$leveldown);
                            }else{
                            
    $database->setVillageLevel($data['to'],"f".$i,0);
                            
    $database->setVillageLevel($data['to'],"f".$i."t",0);
                            }
                            }
                            }
                            if(
    $buildlevel['f99']!=0){
                            
    $leveldown $buildlevel['f99']-1;
                            
    $database->setVillageLevel($data['to'],"f99",$leveldown);
                            }
                            }
                            
    //destroy wall
                            
    $database->setVillageLevel($data['to'],"f40",0);
                            
    $database->setVillageLevel($data['to'],"f40t",0);
                            
    $database->clearExpansionSlot($data['to']);


                            
    $exp1 $database->getVillageField($data['from'],'exp1');
                            
    $exp2 $database->getVillageField($data['from'],'exp2');
                            
    $exp3 $database->getVillageField($data['from'],'exp3');

                            if(
    $exp1 == 0){
                                
    $exp 'exp1';
                                
    $value $data['to'];
                            }
                            elseif(
    $exp2 == 0){
                                
    $exp 'exp2';
                                
    $value $data['to'];
                            }
                            else{
                                
    $exp 'exp3';
                                
    $value $data['to'];
                            }
                            
    $database->setVillageField($data['from'],$exp,$value);
                            
    $chiefing_village 1;

                        }
                    }
                } else {
                    
    $info_chief "".$chief_pic.",You cant take over this village.";
                }
                } else {
                    
    $info_chief "".$chief_pic.",You cant take over this village.";
                }
                } else {
                    
    $info_chief "".$chief_pic.",Not enough culture points.";
                }
                unset(
    $plevel);
            }

    if(
    $data['t11'] > 0){
                if (
    $isoasis != 0) {
                    if (
    $database->canConquerOasis($data['from'],$data['to'])) {
                    if(
    $unitssend_def[1] == '0,0,0,0,0,0,0,0,0,0' and $unitssend_def[2] == '0,0,0,0,0,0,0,0,0,0' and $unitssend_def[3] == '0,0,0,0,0,0,0,0,0,0' and $unitssend_def[4] == '0,0,0,0,0,0,0,0,0,0' and $unitssend_def[5] == '0,0,0,0,0,0,0,0,0,0'){
                        
    $database->conquerOasis($data['from'],$data['to']);
                        
    $info_chief $hero_pic.",Your hero has conquered this oasis";
                    }
                    } else {
                        
    $OasisInfo $database->getOasisInfo($data['to']);
                        if (
    $OasisInfo['conqured'] != 0) {
                            
    $Oloyaltybefore =  $OasisInfo['loyalty'];
                            
    $database->modifyOasisLoyalty($data['to']);
                            
    $OasisInfo $database->getOasisInfo($data['to']);
                            
    $Oloyaltynow =  $OasisInfo['loyalty'];
                            
    $info_chief $hero_pic.",Your hero has reduced oasis loyalty to ".$Oloyaltynow." from ".$Oloyaltybefore." and gained ".$heroxp." XP";
                        } else {
                            if (
    $heroxp == 0) {
                                
    $info_chief $hero_pic.",Your hero had nothing to kill therfore gains no XP at all";
                            } else {
                                
    $info_chief $hero_pic.",Your hero gained ".$heroxp." XP";
                            }
                        }
                    }
                } else {
                    
    $artifact $database->getOwnArtefactInfo($data['to']);
                    if (
    $artifact['vref'] == $data['to']) {
                        if (
    $database->canClaimArtifact($data['from'],$artifact['vref'],$artifact['size'],$artifact['type'])) {
                            
    $database->claimArtefact($data['from'],$data['to'],$database->getVillageField($data['from'],"owner"));
                            
    $info_chief $hero_pic.",Your hero is carrying home a artefact and gained ".$heroxp." XP from the battle";
                        } else {
                            
    $info_chief $hero_pic.",Your hero could not claim the artefact and gained ".$heroxp." XP from the battle";

                        }
                    }
                }
            }

                    if(
    $scout){
                    if (
    $data['spy'] == 1){
                    
    $info_spy "".$spy_pic.",<div class=\"res\"><img class=\"r1\" src=\"img/x.gif\" alt=\"Lumber\" title=\"Lumber\" />".round($totwood)." |
                     <img class=\"r2\" src=\"img/x.gif\" alt=\"Clay\" title=\"Clay\" />"
    .round($totclay)." |
                     <img class=\"r3\" src=\"img/x.gif\" alt=\"Iron\" title=\"Iron\" />"
    .round($totiron)." |
                     <img class=\"r4\" src=\"img/x.gif\" alt=\"Crop\" title=\"Crop\" />"
    .round($totcrop)."</div>
                     <div class=\"carry\"><img class=\"car\" src=\"img/x.gif\" alt=\"carry\" title=\"carry\" />Total Resources : "
    .round($totwood+$totclay+$totiron+$totcrop)."</div>
        "
    ;
                    }else if(
    $data['spy'] == 2){
                        if (
    $isoasis == 0){
                    
    $resarray $database->getResourceLevel($data['to']);


                    
    $crannylevel =0;
                    
    $rplevel 0;
                    
    $walllevel 0;
                    for(
    $j=19;$j<=40;$j++) {
                    if(
    $resarray['f'.$j.'t'] == 25 || $resarray['f'.$j.'t'] == 26 ) {

                    
    $rplevel $database->getFieldLevel($data['to'],$j);

                    }
                    }
                    for(
    $j=19;$j<=40;$j++) {
                    if(
    $resarray['f'.$j.'t'] == 31 || $resarray['f'.$j.'t'] == 32 || $resarray['f'.$j.'t'] == 33) {

                    
    $walllevel $database->getFieldLevel($data['to'],$j);

                    }
                    }
                    for(
    $j=19;$j<=40;$j++) {
                    if(
    $resarray['f'.$j.'t'] == 23) {

                    
    $crannylevel $database->getFieldLevel($data['to'],$j);

                    }
                    }
                        }else {
                            
    $crannylevel =0;
                            
    $walllevel =0;
                            
    $rplevel =0;
                        }
    $palaceimg "<img src=\"".GP_LOCATE."img/g/g26.gif\" height=\"20\" width=\"15\" alt=\"Palace\" title=\"Palace\" />";
    $crannyimg "<img src=\"".GP_LOCATE."img/g/g23.gif\" height=\"20\" width=\"15\" alt=\"Cranny\" title=\"Cranny\" />";
                    
    $info_spy "".$spy_pic.",".$palaceimg." Residance/Palace Level : ".$rplevel."
                    <br>"
    .$crannyimg." Cranny level: ".$crannylevel."<br><br>Wall Level : ".$walllevel."";

                    }

                    
    $data2 ''.$from['owner'].','.$from['wref'].','.$owntribe.','.$unitssend_att.','.$unitsdead_att.',0,0,0,0,0,'.$to['owner'].','.$to['wref'].','.addslashes($to['name']).','.$targettribe.',,,'.$rom.','.$unitssend_def[1].','.$unitsdead_def[1].','.$ger.','.$unitssend_def[2].','.$unitsdead_def[2].','.$gal.','.$unitssend_def[3].','.$unitsdead_def[3].','.$nat.','.$unitssend_def[4].','.$unitsdead_def[4].','.$natar.','.$unitssend_def[5].','.$unitsdead_def[5].','.$info_ram.','.$info_cat.','.$info_chief.','.$info_spy.',,'.$data['t11'].','.$dead11.','.$herosend_def.','.$deadhero.','.$unitstraped_att;
                }
                else{
                    
    $data2 ''.$from['owner'].','.$from['wref'].','.$owntribe.','.$unitssend_att.','.$unitsdead_att.','.$steal[0].','.$steal[1].','.$steal[2].','.$steal[3].','.$battlepart['bounty'].','.$to['owner'].','.$to['wref'].','.addslashes($to['name']).','.$targettribe.',,,'.$rom.','.$unitssend_def[1].','.$unitsdead_def[1].','.$ger.','.$unitssend_def[2].','.$unitsdead_def[2].','.$gal.','.$unitssend_def[3].','.$unitsdead_def[3].','.$nat.','.$unitssend_def[4].','.$unitsdead_def[4].','.$natar.','.$unitssend_def[5].','.$unitsdead_def[5].','.$info_ram.','.$info_cat.','.$info_chief.','.$info_spy.',,'.$data['t11'].','.$dead11.','.$herosend_def.','.$deadhero.','.$unitstraped_att;
                }





                
    // When all troops die, sends no info.
                
    $data_fail ''.$from['owner'].','.$from['wref'].','.$owntribe.','.$unitssend_att.','.$unitsdead_att.','.$steal[0].','.$steal[1].','.$steal[2].','.$steal[3].','.$battlepart['bounty'].','.$to['owner'].','.$to['wref'].','.addslashes($to['name']).','.$targettribe.',,,'.$rom.','.$unitssend_deff[1].','.$unitsdead_deff[1].','.$ger.','.$unitssend_deff[2].','.$unitsdead_deff[2].','.$gal.','.$unitssend_deff[3].','.$unitsdead_deff[3].','.$nat.','.$unitssend_deff[4].','.$unitsdead_deff[4].','.$natar.','.$unitssend_deff[5].','.$unitsdead_deff[5].',,,'.$data['t11'].','.$dead11.','.$unitstraped_att.',,';

                
    //Undetected and detected in here.
                
    if($scout){
                    for(
    $i=1;$i<=10;$i++)
                    {
                        if(
    $battlepart['casualties_attacker'][$i]){
                        if(
    $from['owner'] == 3){
                            
    $database->addNotice($to['owner'],$to['wref'],$targetally,0,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                            break;
                        }else if(
    $unitsdead_att == $unitssend_att){
                            
    $database->addNotice($to['owner'],$to['wref'],$targetally,20,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                            break;
                            }else{
                            
    $database->addNotice($to['owner'],$to['wref'],$targetally,21,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                            break;
                            }
                        }
                    }
                }
                else {
                if(
    $type == && $totalsend_att - ($totaldead_att+$totaltraped_att) > 0){
                
    $prisoners $database->getPrisoners($to['wref']);
                if(
    count($prisoners) > 0){
                
    $anothertroops 0;
                foreach(
    $prisoners as $prisoner){
                
    $p_owner $database->getVillageField($prisoner['from'],"owner");
                if(
    $p_owner == $from['owner']){
                
    $database->modifyAttack2($data['ref'],1,$prisoner['t1']);
                
    $database->modifyAttack2($data['ref'],2,$prisoner['t2']);
                
    $database->modifyAttack2($data['ref'],3,$prisoner['t3']);
                
    $database->modifyAttack2($data['ref'],4,$prisoner['t4']);
                
    $database->modifyAttack2($data['ref'],5,$prisoner['t5']);
                
    $database->modifyAttack2($data['ref'],6,$prisoner['t6']);
                
    $database->modifyAttack2($data['ref'],7,$prisoner['t7']);
                
    $database->modifyAttack2($data['ref'],8,$prisoner['t8']);
                
    $database->modifyAttack2($data['ref'],9,$prisoner['t9']);
                
    $database->modifyAttack2($data['ref'],10,$prisoner['t10']);
                
    $database->modifyAttack2($data['ref'],11,$prisoner['t11']);
                
    $mytroops $prisoner['t1']+$prisoner['t2']+$prisoner['t3']+$prisoner['t4']+$prisoner['t5']+$prisoner['t6']+$prisoner['t7']+$prisoner['t8']+$prisoner['t9']+$prisoner['t10']+$prisoner['t11'];
                
    $newtraps round($mytroops/3);
                
    $database->modifyUnit($data['to'],array("99"),array($newtraps),array(0));
                
    $database->modifyUnit($data['to'],array("99o"),array($mytroops),array(0));
                }else{
                
    $p_alliance $database->getUserField($p_owner,"alliance",0);
                
    $friendarray $database->getAllianceAlly($p_alliance,1);
                
    $neutralarray $database->getAllianceAlly($p_alliance,2);
                
    $friend = (($friendarray[0]['alli1']>and $friendarray[0]['alli2']>and $p_alliance>0) and ($friendarray[0]['alli1']==$ownally or $friendarray[0]['alli2']==$ownally) and ($ownally != $p_alliance and $ownally and $p_alliance)) ? '1':'0';
                
    $neutral = (($neutralarray[0]['alli1']>and $neutralarray[0]['alli2']>and $p_alliance>0) and ($neutralarray[0]['alli1']==$ownally or $neutralarray[0]['alli2']==$ownally) and ($ownally != $p_alliance and $ownally and $p_alliance)) ? '1':'0';
                if(
    $p_alliance == $ownally or $friend == or $neutral == 1){
                
    $p_tribe $database->getUserField($p_owner,"tribe",0);
                
                
    $p_eigen $database->getCoor($prisoner['wref']);
                
    $p_from = array('x'=>$p_eigen['x'], 'y'=>$p_eigen['y']);
                
    $p_ander $database->getCoor($prisoner['from']);
                
    $p_to = array('x'=>$p_ander['x'], 'y'=>$p_ander['y']);
                
    $p_tribe $database->getUserField($p_owner,"tribe",0);
                
                
    $p_speeds = array();
        
                
    //find slowest unit.            
                
    for($i=1;$i<=10;$i++){
                    if (
    $prisoner['t'.$i]){
                        if(
    $prisoner['t'.$i] != '' && $prisoner['t'.$i] > 0){
                            if(
    $p_unitarray) { reset($p_unitarray); }
                            
    $p_unitarray $GLOBALS["u".(($p_tribe-1)*10+$i)];
                            
    $p_speeds[] = $p_unitarray['speed'];
                        }
                    }
                }
                
                if (
    $prisoner['t11']>0){
                    
    $p_qh "SELECT * FROM ".TB_PREFIX."hero WHERE uid = ".$p_owner."";
                    
    $p_resulth mysql_query($p_qh);
                    
    $p_hero_f=mysql_fetch_array($p_resulth);
                    
    $p_hero_unit=$p_hero_f['unit'];
                    
    $p_speeds[] = $GLOBALS['u'.$p_hero_unit]['speed'];
                }
                
                
    $p_artefact count($database->getOwnUniqueArtefactInfo2($p_owner,2,3,0));
                
    $p_artefact1 count($database->getOwnUniqueArtefactInfo2($prisoner['from'],2,1,1));
                
    $p_artefact2 count($database->getOwnUniqueArtefactInfo2($p_owner,2,2,0));
                if(
    $p_artefact 0){
                
    $p_fastertroops 3;
                }else if(
    $p_artefact1 0){
                
    $p_fastertroops 2;
                }else if(
    $p_artefact2 0){
                
    $p_fastertroops 1.5;
                }else{
                
    $p_fastertroops 1;
                }
                
    $p_time round($this->procDistanceTime($p_to,$p_from,min($p_speeds),1)/$p_fastertroops);
                
    $foolartefact1 $database->getFoolArtefactInfo(2,$prisoner['from'],$p_owner);
                if(
    count($foolartefact1) > 0){
                foreach(
    $foolartefact1 as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $p_time *= $arte['effect2'];
                }else{
                
    $p_time /= $arte['effect2'];
                
    $p_time round($p_time);
                }
                }
                }
                
    $p_reference $database->addAttack($prisoner['from'],$prisoner['t1'],$prisoner['t2'],$prisoner['t3'],$prisoner['t4'],$prisoner['t5'],$prisoner['t6'],$prisoner['t7'],$prisoner['t8'],$prisoner['t9'],$prisoner['t10'],$prisoner['t11'],3,0,0,0,0,0,0,0,0,0,0,0);
                
    $database->addMovement(4,$prisoner['wref'],$prisoner['from'],$p_reference,time(),($p_time+time()));
                
    $anothertroops += $prisoner['t1']+$prisoner['t2']+$prisoner['t3']+$prisoner['t4']+$prisoner['t5']+$prisoner['t6']+$prisoner['t7']+$prisoner['t8']+$prisoner['t9']+$prisoner['t10']+$prisoner['t11'];
                
    $newtraps = (round($anothertroops/3))*2;
                
    $database->modifyUnit($data['to'],array("99"),array($newtraps),array(0));
                
    $database->modifyUnit($data['to'],array("99o"),array($anothertroops),array(0));
                }
                }
                
    $database->deletePrisoners($prisoner['id']);
                }
                
    $trapper_pic "<img src=\"".GP_LOCATE."img/u/98.gif\" alt=\"Trap\" title=\"Trap\" />";
                
    $p_username $database->getUserField($from['owner'],"username",0);
                if(
    $mytroops && $anothertroops 0){
                
    $info_trap "".$trapper_pic." ".$p_username." released <b>".$mytroops."</b> from his troops and <b>".$anothertroops."</b> friendly troops.";
                }elseif(
    $mytroops 0){
                
    $info_trap "".$trapper_pic." ".$p_username." released <b>".$mytroops."</b> from his troops.";
                }elseif(
    $anothertroops 0){
                
    $info_trap "".$trapper_pic." ".$p_username." released <b>".$anothertroops."</b> friendly troops.";
                }
                }
                }
                
    $data2 $data2.','.addslashes($info_trap).',,';
                if(
    $totalsend_alldef == 0){
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,7,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                }else if(
    $totaldead_alldef == 0){
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,4,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                }else if(
    $totalsend_alldef $totaldead_alldef){
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,5,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                }else if(
    $totalsend_alldef == $totaldead_alldef){
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,6,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                }
                }
                
    //to here
                // If the dead units not equal the ammount sent they will return and report
                
    if($totalsend_att - ($totaldead_att+$totaltraped_att) > 0)
                {
                
    $artefact count($database->getOwnUniqueArtefactInfo2($from['owner'],2,3,0));
                
    $artefact1 count($database->getOwnUniqueArtefactInfo2($from['wref'],2,1,1));
                
    $artefact2 count($database->getOwnUniqueArtefactInfo2($from['owner'],2,2,0));
                if(
    $artefact 0){
                
    $fastertroops 3;
                }else if(
    $artefact1 0){
                
    $fastertroops 2;
                }else if(
    $artefact2 0){
                
    $fastertroops 1.5;
                }else{
                
    $fastertroops 1;
                }
                
    $endtime round($this->procDistanceTime($from,$to,min($speeds),1)/$fastertroops);
                
    $foolartefact2 $database->getFoolArtefactInfo(2,$from['wref'],$from['owner']);
                if(
    count($foolartefact2) > 0){
                foreach(
    $foolartefact2 as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $endtime *= $arte['effect2'];
                }else{
                
    $endtime /= $arte['effect2'];
                
    $endtime round($endtime);
                }
                }
                }
                
    $endtime += time();
                    if(
    $type == 1) {
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,18,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                    }else {
                        if (
    $totaldead_att == && $totaltraped_att == 0){
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,1,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                        }else{
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,2,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                        }
                    }

                    
    $database->setMovementProc($data['moveid']);
                    if(
    $chiefing_village != && $village_destroyed != 1){
                    
    $database->addMovement(4,$to['wref'],$from['wref'],$data['ref'],time(),$endtime);
                    
    // send the bounty on type 6.
                    
    if($type !== 1)
                    {
                        
    $reference $database->sendResource($steal[0],$steal[1],$steal[2],$steal[3],0,0);
                        
    $database->addMovement(6,$to['wref'],$from['wref'],$reference,time(),$endtime,1,0,0,0,0,$data['ref']);
                        
    $totalstolengain=$steal[0]+$steal[1]+$steal[2]+$steal[3];
                        
    $totalstolentaken=($totalstolentaken-($steal[0]+$steal[1]+$steal[2]+$steal[3]));
                        
    $database->modifyPoints($from['owner'],'RR',$totalstolengain);
                        
    $database->modifyPoints($to['owner'],'RR',$totalstolentaken);
                        
    $database->modifyPointsAlly($targetally,'RR',$totalstolentaken );
                        
    $database->modifyPointsAlly($ownally,'RR',$totalstolengain);
                    }
                    }else if(
    $chiefing_village == 1){
                    
    $database->addEnforce2($data,$owntribe,$troopsdead1,$troopsdead2,$troopsdead3,$troopsdead4,$troopsdead5,$troopsdead6,$troopsdead7,$troopsdead8,$troopsdead9,$troopsdead10,$troopsdead11);
                    }
                }
                else 
    //else they die and don't return or report.
                
    {
                    
    $database->setMovementProc($data['moveid']);
                    if(
    $type == 1){
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,19,addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
                    }else{
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,3,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
                        }
                }
                if(
    $type == or $type == 4){
                
    $database->addGeneralAttack($totalattackdead);
                }
                            if(
    $village_destroyed == 1){
                            
    $varray $database->getProfileVillages($to['owner']);
                            if(
    count($varray)!='1' AND $to['capital']!='1'){
                                    
    $database->clearExpansionSlot($data['to']);
                                    
    $q "DELETE FROM ".TB_PREFIX."abdata where wref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."bdata where wid = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."enforcement where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."fdata where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."market where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."odata where wref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."research where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."tdata where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."training where vref =".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."units where vref =".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."vdata where wref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "UPDATE ".TB_PREFIX."wdata set occupied = 0 where id = ".$data['to'];
                                    
    $database->query($q);
                                    
    $getmovement $database->getMovement(3,$data['to'],1);
                                    foreach(
    $getmovement as $movedata) {
                                    
    $time time();
                                    
    $time2 $time $movedata['starttime'];
                                    
    $database->addMovement(4,$movedata['to'],$movedata['from'],$movedata['ref'],$time,$time+$time2);
                                    
    $database->setMovementProc($movedata['moveid']);
                                    }
                                    
    $q "DELETE FROM ".TB_PREFIX."movement where from = ".$data['to'];
                                    
    $database->query($q);
                                    
    $getprisoners $database->getPrisoners($data['to']);
                                    foreach(
    $getprisoners as $pris) {
                                    
    $troops 0;
                                    for(
    $i=1;$i<12;$i++){
                                    
    $troops += $pris['t'.$i];
                                    }
                                    
    $database->modifyUnit($pris['wref'],array("99o"),array($troops),array(0));
                                    
    $database->deletePrisoners($pris['id']);
                                    }
                                    
    $getprisoners $database->getPrisoners3($data['to']);
                                    foreach(
    $getprisoners as $pris) {
                                    
    $troops 0;
                                    for(
    $i=1;$i<12;$i++){
                                    
    $troops += $pris['t'.$i];
                                    }
                                    
    $database->modifyUnit($pris['wref'],array("99o"),array($troops),array(0));
                                    
    $database->deletePrisoners($pris['id']);
                                    }
                                    
    $enforcement $database->getEnforceVillage($data['to'],0);
                                    foreach(
    $enforcement as $enforce) {
                                    
    $time time();
                                    
    $fromcoor $database->getCoor($enforce['vref']);
                                    
    $tocoor $database->getCoor($enforce['from']);
                                    
    $targettribe $database->getUserField($database->getVillageField($enforce['from'],"owner"),"tribe",0);
                                    
    $time2 $this->procDistanceTime($tocoor,$fromcoor,$targettribe,0);
                                    
    $start 10*($targettribe-1);
                                    for(
    $i=1;$i<11;$i++){
                                    
    $unit $start $i;
                                    
    $post['t'.$i] = $enforce['u'.$unit];
                                    }
                                    
    $post['t11'] = $enforce['hero'];
                                    
    $reference $database->addAttack($enforce['from'],$post['t1'],$post['t2'],$post['t3'],$post['t4'],$post['t5'],$post['t6'],$post['t7'],$post['t8'],$post['t9'],$post['t10'],$post['t11'],2,0,0,0,0);
                                    
    $database->addMovement(4,$enforce['vref'],$enforce['from'],$reference,$time,$time+$time2);
                                    }
                            }
                            }
                }else{
                
    //units attack string for battleraport
                
    $unitssend_att1 ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].'';
                
    $herosend_att $data['t11'];
                
    $unitssend_att$unitssend_att1.','.$herosend_att;

                
    $speeds = array();

                
    //find slowest unit.
                
    for($i=1;$i<=10;$i++)
                {
                    if (
    $data['t'.$i] > 0) {
                    if(
    $unitarray) { reset($unitarray); }
                    
    $unitarray $GLOBALS["u".(($owntribe-1)*10+$i)];
                    
    $speeds[] = $unitarray['speed'];
                     }
                }
                if (
    $herosend_att>0){
                    
    $qh "SELECT * FROM ".TB_PREFIX."hero WHERE uid = ".$from['owner']."";
                    
    $resulth mysql_query($qh);
                    
    $hero_f=mysql_fetch_array($resulth);
                    
    $hero_unit=$hero_f['unit'];
                    
    $speeds[] = $GLOBALS['u'.$hero_unit]['speed'];
                }
                
    $artefact count($database->getOwnUniqueArtefactInfo2($from['owner'],2,3,0));
                
    $artefact1 count($database->getOwnUniqueArtefactInfo2($from['vref'],2,1,1));
                
    $artefact2 count($database->getOwnUniqueArtefactInfo2($from['owner'],2,2,0));
                if(
    $artefact 0){
                
    $fastertroops 3;
                }else if(
    $artefact1 0){
                
    $fastertroops 2;
                }else if(
    $artefact2 0){
                
    $fastertroops 1.5;
                }else{
                
    $fastertroops 1;
                }
                
    $endtime round($this->procDistanceTime($from,$to,min($speeds),1)/$fastertroops);
                
    $foolartefact3 $database->getFoolArtefactInfo(2,$from['wref'],$from['owner']);
                if(
    count($foolartefact3) > 0){
                foreach(
    $foolartefact3 as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $endtime *= $arte['effect2'];
                }else{
                
    $endtime /= $arte['effect2'];
                
    $endtime round($endtime);
                }
                }
                }
                
    $endtime += time();
                    
    $database->setMovementProc($data['moveid']);
                    
    $database->addMovement(4,$to['wref'],$from['wref'],$data['ref'],time(),$endtime);
                    
    $peace PEACE;
                            
    $data2 ''.$from['owner'].','.$from['wref'].','.$to['owner'].','.$owntribe.','.$unitssend_att.','.$peace.'';
                            
    $database->addNotice($from['owner'],$to['wref'],$ownally,22,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,time());
                            
    $database->addNotice($to['owner'],$to['wref'],$targetally,22,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,time());
                }
                    
    $crop $database->getCropProdstarv($to['wref']);
                    
    $unitarrays $this->getAllUnits($to['wref']);
                    
    $getvillage $database->getVillage($to['wref']);
                    
    $village_upkeep $getvillage['pop'] + $this->getUpkeep($unitarrays0);
                    if (
    $crop $village_upkeep){
                        
    // add starv data
                        
    $database->setVillageField($to['wref'], 'starv'$village_upkeep);
                        
    $database->setVillageField($to['wref'], 'starvupdate'time());
                    }
                    unset(
    $crop,$unitarrays,$getvillage,$village_upkeep);

                    
    #################################################
                    ################FIXED BY SONGER################
                    #################################################

                    ################################################################################
                    ##############ISUE: Lag, fixed3####################################################
                    #### PHP.NET manual: unset() destroy more than one variable unset($foo1, $foo2, $foo3);######
                    ################################################################################

                
    unset(
                
    $Attacker
                
    ,$Defender
                
    ,$enforce
                
    ,$unitssend_att
                
    ,$unitssend_def
                
    ,$battlepart
                
    ,$unitsdead_def
                
    ,$dead
                
    ,$steal
                
    ,$from
                
    ,$data
                
    ,$data2
                
    ,$to
                
    ,$artifact
                
    ,$artifactBig
                
    ,$canclaim
                
    ,$data_fail
                
    ,$owntribe
                
    ,$unitsdead_att
                
    ,$herosend_def
                
    ,$deadhero
                
    ,$heroxp
                
    ,$AttackerID
                
    ,$DefenderID
                
    ,$totalsend_att
                
    ,$totalsend_alldef
                
    ,$totaldead_att
                
    ,$totaltraped_att
                
    ,$totaldead_def
                
    ,$unitsdead_att_check
                
    ,$totalattackdead
                
    ,$Defender1
                
    ,$enforce1
                
    ,$defheroowner
                
    ,$enforceowner
                
    ,$defheroxp
                
    ,$reinfheroxp
                
    ,$AttackerWref
                
    ,$DefenderWref
                
    ,$troopsdead1
                
    ,$troopsdead2
                
    ,$troopsdead3
                
    ,$troopsdead4
                
    ,$troopsdead5
                
    ,$troopsdead6
                
    ,$troopsdead7
                
    ,$troopsdead8
                
    ,$troopsdead9
                
    ,$troopsdead10
                
    ,$troopsdead11
                
    ,$DefenderUnit);

                    
    #################################################

               
    }
                if(
    file_exists("GameEngine/Prevention/sendunits.txt")) {
                    
    unlink("GameEngine/Prevention/sendunits.txt");
                }
        }

        private function 
    sendTroopsBack($post) {
            global 
    $form$database$village$generator$session$technology;

            
    $enforce=$database->getEnforceArray($post['ckey'],0);
                
    $to $database->getVillage($enforce['from']);
                
    $Gtribe "";
                if (
    $database->getUserField($to['owner'],'tribe',0) == '2'){ $Gtribe "1"; } else if ($database->getUserField($to['owner'],'tribe',0) == '3'){ $Gtribe "2"; } else if ($database->getUserField($to['owner'],'tribe',0) == '4'){ $Gtribe "3"; }else if ($database->getUserField($to['owner'],'tribe',0) == '5'){ $Gtribe "4"; }

                        for(
    $i=1$i<10$i++){
                            if(isset(
    $post['t'.$i])){
                                if(
    $i!=10){
                                    if (
    $post['t'.$i] > $enforce['u'.$Gtribe.$i])
                                    {
                                        
    $form->addError("error","You can't send more units than you have");
                                        break;
                                    }

                                    if(
    $post['t'.$i]<0)
                                    {
                                        
    $form->addError("error","You can't send negative units.");
                                        break;
                                    }
                                }
                            } else {
                            
    $post['t'.$i.'']='0';
                            }
                        }
                            if(isset(
    $post['t11'])){
                                    if (
    $post['t11'] > $enforce['hero'])
                                    {
                                        
    $form->addError("error","You can't send more units than you have");
                                        break;
                                    }

                                    if(
    $post['t11']<0)
                                    {
                                        
    $form->addError("error","You can't send negative units.");
                                        break;
                                    }
                            } else {
                            
    $post['t11']='0';
                            }

                    if(
    $form->returnErrors() > 0) {
                        
    $_SESSION['errorarray'] = $form->getErrors();
                        
    $_SESSION['valuearray'] = $_POST;
                        
    header("Location: a2b.php");
                    } else {

                        
    //change units
                        
    $start = ($database->getUserField($to['owner'],'tribe',0)-1)*10+1;
                        
    $end = ($database->getUserField($to['owner'],'tribe',0)*10);

                        
    $j='1';
                        for(
    $i=$start;$i<=$end;$i++){
                            
    $database->modifyEnforce($post['ckey'],$i,$post['t'.$j.''],0); $j++;
                        }

                            
    //get cord
                            
    $from $database->getVillage($enforce['from']);
                            
    $fromcoor $database->getCoor($enforce['from']);
                            
    $tocoor $database->getCoor($enforce['vref']);
                            
    $fromCor = array('x'=>$tocoor['x'], 'y'=>$tocoor['y']);
                            
    $toCor = array('x'=>$fromcoor['x'], 'y'=>$fromcoor['y']);

                    
    $speeds = array();

                    
    //find slowest unit.
                    
    for($i=1;$i<=10;$i++){
                        if (isset(
    $post['t'.$i])){
                            if( 
    $post['t'.$i] != '' && $post['t'.$i] > 0){
                            if(
    $unitarray) { reset($unitarray); }
                            
    $unitarray $GLOBALS["u".(($session->tribe-1)*10+$i)];
                            
    $speeds[] = $unitarray['speed'];
                        } else {
                            
    $post['t'.$i.'']='0';
                            }
                        } else {
                            
    $post['t'.$i.'']='0';
                        }
                    }
                        if (isset(
    $post['t11'])){
                            if( 
    $post['t11'] != '' && $post['t11'] > 0){
                            
    $qh "SELECT * FROM ".TB_PREFIX."hero WHERE uid = ".$from['owner']."";
                            
    $resulth mysql_query($qh);
                            
    $hero_f=mysql_fetch_array($resulth);
                            
    $hero_unit=$hero_f['unit'];
                            
    $speeds[] = $GLOBALS['u'.$hero_unit]['speed'];
                        } else {
                            
    $post['t11']='0';
                            }
                        } else {
                            
    $post['t11']='0';
                        }
                
    $artefact count($database->getOwnUniqueArtefactInfo2($from['owner'],2,3,0));
                
    $artefact1 count($database->getOwnUniqueArtefactInfo2($from['vref'],2,1,1));
                
    $artefact2 count($database->getOwnUniqueArtefactInfo2($from['owner'],2,2,0));
                if(
    $artefact 0){
                
    $fastertroops 3;
                }else if(
    $artefact1 0){
                
    $fastertroops 2;
                }else if(
    $artefact2 0){
                
    $fastertroops 1.5;
                }else{
                
    $fastertroops 1;
                }
                    
    $time round($generator->procDistanceTime($fromCor,$toCor,min($speeds),1)/$fastertroops);
                    
    $foolartefact4 $database->getFoolArtefactInfo(2,$from['wref'],$from['owner']);
                    if(
    count($foolartefact4) > 0){
                    foreach(
    $foolartefact4 as $arte){
                    if(
    $arte['bad_effect'] == 1){
                    
    $time *= $arte['effect2'];
                    }else{
                    
    $time /= $arte['effect2'];
                    
    $time round($endtime);
                    }
                    }
                    }
                    
    $reference $database->addAttack($enforce['from'],$post['t1'],$post['t2'],$post['t3'],$post['t4'],$post['t5'],$post['t6'],$post['t7'],$post['t8'],$post['t9'],$post['t10'],$post['t11'],2,0,0,0,0);
                    
    $database->addMovement(4,$village->wid,$enforce['from'],$reference,time(),($time+time()));
                    
    $technology->checkReinf($post['ckey']);

                            
    header("Location: build.php?id=39");

                    }
        }

        private function 
    sendreinfunitsComplete() {
        if(
    file_exists("GameEngine/Prevention/sendreinfunits.txt")) {
                    
    unlink("GameEngine/Prevention/sendreinfunits.txt");
                }
            global 
    $bid23,$database,$battle;
            
    $time time();
                
    $ourFileHandle fopen("GameEngine/Prevention/sendreinfunits.txt"'w');
                
    fclose($ourFileHandle);
            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."attacks where ".TB_PREFIX."movement.ref = ".TB_PREFIX."attacks.id and ".TB_PREFIX."movement.proc = '0' and ".TB_PREFIX."movement.sort_type = '3' and ".TB_PREFIX."attacks.attack_type = '2' and endtime < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {
            if(
    $data['from']==0){
            
    $to $database->getMInfo($data['to']);
            
    $database->addEnforce($data);
            
    $reinf $database->getEnforce($data['to'],$data['from']);
            
    $database->modifyEnforce($reinf['id'],31,1,1);
            
    $data_fail '0,0,4,1,0,0,0,0,0,0,0,0,0,0';
            
    $database->addNotice($to['owner'],$to['wref'],$targetally,8,'village of the elders reinforcement '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
            
    $database->setMovementProc($data['moveid']);
            }else{
                
    //set base things
                
    $owntribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $targettribe $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);
                
    $to $database->getMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $toF $database->getVillage($data['to']);
                
    $fromF $database->getVillage($data['from']);

                            
    //check to see if we're only sending a hero between own villages and there's a Mansion at target village
                
    if($data['t11'] != 0) {
                    if(
    $database->getVillageField($data['from'],"owner") == $database->getVillageField($data['to'],"owner")) {
                        for(
    $i=1;$i<=10;$i++) { if($data['t'.$i]>0) { $NonHeroPresent 1; break; } }
                        if(
    $NonHeroPresent == && $this->getTypeLevel(37,$data['to']) > 0) {
                            
    //don't reinforce, addunit instead
                            
    $database->modifyUnit($data['to'],array("hero"),array(1),array(1));
                            
    $heroid $database->getHero($database->getVillageField($data['from'],"owner"),1);
                            
    $database->modifyHero("wref",$data['to'],$heroid,0);
                            
    $HeroTransfer 1;
                        }
                    }
                } if(!
    $HeroTransfer)
               {
      
    //check if there is defence from town in to town
                    
    $check=$database->getEnforce($data['to'],$data['from']);
                    if (!isset(
    $check['id'])){
                        
    //no:
                        
    $database->addEnforce($data);
                    } else{
                     
    //yes
                         
    $start = ($owntribe-1)*10+1;
                         
    $end = ($owntribe*10);
                     
    //add unit.
                         
    $j='1';
                         for(
    $i=$start;$i<=$end;$i++){
                            
    $database->modifyEnforce($check['id'],$i,$data['t'.$j.''],1); $j++;
                        }
                    }
                }
                
    //send rapport
                
    $unitssend_att ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].','.$data['t11'].'';
                
    $data_fail ''.$from['wref'].','.$from['owner'].','.$owntribe.','.$unitssend_att.'';
                
    $database->addNotice($from['owner'],$from['wref'],$ownally,8,''.addslashes($from['name']).' reinforcement '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
                if(
    $from['owner'] != $to['owner']) {
                    
    $database->addNotice($to['owner'],$to['wref'],$targetally,8,''.addslashes($from['name']).' reinforcement '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
                }
                
    //update status
                
    $database->setMovementProc($data['moveid']);
                }
            }
            if(
    file_exists("GameEngine/Prevention/sendreinfunits.txt")) {
                    
    unlink("GameEngine/Prevention/sendreinfunits.txt");
                }
        }

        private function 
    returnunitsComplete() {
        if(
    file_exists("GameEngine/Prevention/returnunits.txt")) {
                
    unlink("GameEngine/Prevention/returnunits.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/returnunits.txt"'w');
            
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."attacks where ".TB_PREFIX."movement.ref = ".TB_PREFIX."attacks.id and ".TB_PREFIX."movement.proc = '0' and ".TB_PREFIX."movement.sort_type = '4' and endtime < $time";
            
    $dataarray $database->query_return($q);

            foreach(
    $dataarray as $data) {

            
    $tribe $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);

            if(
    $tribe == 1){ $u ""; } elseif($tribe == 2){ $u "1"; } elseif($tribe == 3){ $u "2"; } elseif($tribe == 4){ $u "3"; } else{ $u "4"; }
            
    $database->modifyUnit(
                    
    $data['to'],
                    array(
    $u."1",$u."2",$u."3",$u."4",$u."5",$u."6",$u."7",$u."8",$u."9",$tribe."0","hero"),
                    array(
    $data['t1'],$data['t2'],$data['t3'],$data['t4'],$data['t5'],$data['t6'],$data['t7'],$data['t8'],$data['t9'],$data['t10'],$data['t11']),
                    array(
    1,1,1,1,1,1,1,1,1,1,1)
            );
            
    $database->setMovementProc($data['moveid']);
            }

            
    // Recieve the bounty on type 6.

            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."send where ".TB_PREFIX."movement.ref = ".TB_PREFIX."send.id and ".TB_PREFIX."movement.proc = 0 and sort_type = 6 and endtime < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {

                if(
    $data['wood'] >= $data['clay'] && $data['wood'] >= $data['iron'] && $data['wood'] >= $data['crop']){ $sort_type "10"; }
                elseif(
    $data['clay'] >= $data['wood'] && $data['clay'] >= $data['iron'] && $data['clay'] >= $data['crop']){ $sort_type "11"; }
                elseif(
    $data['iron'] >= $data['wood'] && $data['iron'] >= $data['clay'] && $data['iron'] >= $data['crop']){ $sort_type "12"; }
                elseif(
    $data['crop'] >= $data['wood'] && $data['crop'] >= $data['clay'] && $data['crop'] >= $data['iron']){ $sort_type "13"; }

                
    $to $database->getMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $database->modifyResource($data['to'],$data['wood'],$data['clay'],$data['iron'],$data['crop'],1);
                
    //$database->updateVillage($data['to']);
                
    $database->setMovementProc($data['moveid']);
            }
            
    $this->pruneResource();

            
    // Settlers

            
    $q "SELECT * FROM ".TB_PREFIX."movement where ref = 0 and proc = '0' and sort_type = '4' and endtime < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {

            
    $tribe $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);

            
    $database->modifyUnit($data['to'],array($tribe."0"),array(3),array(1));
            
    $database->setMovementProc($data['moveid']);
            }

            if(
    file_exists("GameEngine/Prevention/returnunits.txt")) {
                
    unlink("GameEngine/Prevention/returnunits.txt");
            }
        }

        private function 
    sendSettlersComplete() {
        if(
    file_exists("GameEngine/Prevention/settlers.txt")) {
                    
    unlink("GameEngine/Prevention/settlers.txt");
                }
            global 
    $database$building;
            
    $ourFileHandle fopen("GameEngine/Prevention/settlers.txt"'w');
            
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."movement where proc = 0 and sort_type = 5 and endtime < $time";
            
    $dataarray $database->query_return($q);
                foreach(
    $dataarray as $data) {
                        
    $to $database->getMInfo($data['from']);
                        
    $user =    $database->getUserField($to['owner'],'username',0);
                        
    $taken $database->getVillageState($data['to']);
                        if(
    $taken != 1){
                            
    $database->setFieldTaken($data['to']);
                            
    $database->addVillage($data['to'],$to['owner'],$user,'0');
                            
    $database->addResourceFields($data['to'],$database->getVillageType($data['to']));
                            
    $database->addUnits($data['to']);
                            
    $database->addTech($data['to']);
                            
    $database->addABTech($data['to']);
                            
    $database->setMovementProc($data['moveid']);

                            
    $exp1 $database->getVillageField($data['from'],'exp1');
                            
    $exp2 $database->getVillageField($data['from'],'exp2');
                            
    $exp3 $database->getVillageField($data['from'],'exp3');

                            if(
    $exp1 == 0){
                                
    $exp 'exp1';
                                
    $value $data['to'];
                            }
                            elseif(
    $exp2 == 0){
                                
    $exp 'exp2';
                                
    $value $data['to'];
                            }
                            else{
                                
    $exp 'exp3';
                                
    $value $data['to'];
                            }
                            
    $database->setVillageField($data['from'],$exp,$value);
                        }
                        else{
                            
    // here must come movement from returning settlers
                            
    $database->addMovement(4,$data['to'],$data['from'],$data['ref'],$time,$time+($time-$data['starttime']));
                            
    $database->setMovementProc($data['moveid']);
                        }
                }
                if(
    file_exists("GameEngine/Prevention/settlers.txt")) {
                    
    unlink("GameEngine/Prevention/settlers.txt");
                }
        }

        private function 
    researchComplete() {
        if(
    file_exists("GameEngine/Prevention/research.txt")) {
                
    unlink("GameEngine/Prevention/research.txt");
            }
            global 
    $database;
             
    $ourFileHandle fopen("GameEngine/Prevention/research.txt"'w');
            
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."research where timestamp < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {
                
    $sort_type substr($data['tech'],0,1);
                switch(
    $sort_type) {
                    case 
    "t":
                    
    $q "UPDATE ".TB_PREFIX."tdata set ".$data['tech']." = 1 where vref = ".$data['vref'];
                    break;
                    case 
    "a":
                    case 
    "b":
                    
    $q "UPDATE ".TB_PREFIX."abdata set ".$data['tech']." = ".$data['tech']." + 1 where vref = ".$data['vref'];
                    break;
                }
                
    $database->query($q);
                
    $q "DELETE FROM ".TB_PREFIX."research where id = ".$data['id'];
                
    $database->query($q);
            }
            if(
    file_exists("GameEngine/Prevention/research.txt")) {
                
    unlink("GameEngine/Prevention/research.txt");
            }
        }

        private function 
    updateRes($bountywid,$uid) {
            global 
    $session;


            
    $this->bountyLoadTown($bountywid);
            
    $this->bountycalculateProduction($bountywid,$uid);
            
    $this->bountyprocessProduction($bountywid);
        }

        private function 
    updateORes($bountywid) {
            global 
    $session;
            
    $this->bountyLoadOTown($bountywid);
            
    $this->bountycalculateOProduction($bountywid);
            
    $this->bountyprocessOProduction($bountywid);
        }
        private function 
    bountyLoadOTown($bountywid) {
            global 
    $database,$session,$logging,$technology;
            
    $this->bountyinfoarray $database->getOasisV($bountywid);
            
    $this->bountyresarray $database->getResourceLevel($bountywid);
            
    $this->bountypop 2;

        }
        private function 
    bountyLoadTown($bountywid) {
            global 
    $database,$session,$logging,$technology;
            
    $this->bountyinfoarray $database->getVillage($bountywid);
            
    $this->bountyresarray $database->getResourceLevel($bountywid);
            
    $this->bountyoasisowned $database->getOasis($bountywid);
            
    $this->bountyocounter $this->bountysortOasis();
            
    $this->bountypop $this->bountyinfoarray['pop'];

        }

        private function 
    bountysortOasis() {
            
    $crop $clay $wood $iron 0;
            foreach (
    $this->bountyoasisowned as $oasis) {
            switch(
    $oasis['type']) {
                    case 
    1:
                    case 
    2:
                    
    $wood += 1;
                    break;
                    case 
    3:
                    
    $wood += 1;
                    
    $crop += 1;
                    break;
                    case 
    4:
                    case 
    5:
                    
    $clay += 1;
                    break;
                    case 
    6:
                    
    $clay += 1;
                    
    $crop += 1;
                    break;
                    case 
    7:
                    case 
    8:
                    
    $iron += 1;
                    break;
                    case 
    9:
                    
    $iron += 1;
                    
    $crop += 1;
                    break;
                    case 
    10:
                    case 
    11:
                    
    $crop += 1;
                    break;
                    case 
    12:
                    
    $crop += 2;
                    break;
                }
            }
            return array(
    $wood,$clay,$iron,$crop);
        }

        function 
    getAllUnits($base) {
            global 
    $database;
            
    $ownunit $database->getUnit($base);
            
    $enforcementarray $database->getEnforceVillage($base,0);
            if(
    count($enforcementarray) > 0) {
                foreach(
    $enforcementarray as $enforce) {
                    for(
    $i=1;$i<=50;$i++) {
                        
    $ownunit['u'.$i] += $enforce['u'.$i];
                    }
                }
            }
            
    $movement $database->getVillageMovement($base);
            if(!empty(
    $movement)) {
                for(
    $i=1;$i<=50;$i++) {
                    
    $ownunit['u'.$i] += $movement['u'.$i];
                }
            }
            
    $prisoners $database->getPrisoners($base);
            if(!empty(
    $prisoners)) {
            foreach(
    $prisoners as $prisoner){
                
    $owner $database->getVillageField($base,"owner");
                
    $ownertribe $database->getUserField($owner,"tribe",0);
                
    $start = ($ownertribe-1)*10+1;
                
    $end = ($ownertribe*10);
                for(
    $i=$start;$i<=$end;$i++) {
                
    $j $i-$start+1;
                
    $ownunit['u'.$i] += $prisoner['t'.$j];
                }
                
    $ownunit['hero'] += $prisoner['t11'];
            }
            }
            return 
    $ownunit;
        }

        public function 
    getUpkeep($array,$type,$vid=0,$prisoners=0) {
            global 
    $database,$session,$village;
            if(
    $vid==0) { $vid=$village->wid; }
            
    $buildarray = array();
            if(
    $vid!=0){ $buildarray $database->getResourceLevel($vid); }
            
    $upkeep 0;
            switch(
    $type) {
                case 
    0:
                
    $start 1;
                
    $end 50;
                break;
                case 
    1:
                
    $start 1;
                
    $end 10;
                break;
                case 
    2:
                
    $start 11;
                
    $end 20;
                break;
                case 
    3:
                
    $start 21;
                
    $end 30;
                break;
                case 
    4:
                
    $start 31;
                
    $end 40;
                break;
                case 
    5:
                
    $start 41;
                
    $end 50;
                break;
            }
            for(
    $i=$start;$i<=$end;$i++) {
                
    $k $i-$start+1;
                
    $unit "u".$i;
                
    $unit2 "t".$k;
                global $
    $unit;
                
    $dataarray = $$unit;
                for(
    $j=19;$j<=38;$j++) {
                if(
    $buildarray['f'.$j.'t'] == 41) {
                
    $horsedrinking $j;
                }
                }
                if(
    $prisoners == 0){
                if(isset(
    $horsedrinking)){
                if((
    $i==&& $buildarray['f'.$horsedrinking] >= 10)
                || (
    $i==&& $buildarray['f'.$horsedrinking] >= 15)
                || (
    $i==&& $buildarray['f'.$horsedrinking] == 20)) {
                
    $upkeep += ($dataarray['pop']-1) * $array[$unit];
                } else {
                
    $upkeep += $dataarray['pop'] * $array[$unit];
                }}else{
                
    $upkeep += $dataarray['pop'] * $array[$unit];
                }
                }else{
                if(isset(
    $horsedrinking)){
                if((
    $i==&& $buildarray['f'.$horsedrinking] >= 10)
                || (
    $i==&& $buildarray['f'.$horsedrinking] >= 15)
                || (
    $i==&& $buildarray['f'.$horsedrinking] == 20)) {
                
    $upkeep += ($dataarray['pop']-1) * $array[$unit2];
                } else {
                
    $upkeep += $dataarray['pop'] * $array[$unit2];
                }}else{
                
    $upkeep += $dataarray['pop'] * $array[$unit2];
                }
                }
            }
             
    //   $unit = "hero";
             //   global $$unit;
             //   $dataarray = $$unit;
             
    if($prisoners == 0){
                
    $upkeep += $array['hero'] * 6;
             }else{
                
    $upkeep += $array['t11'] * 6;
             }
                
    $artefact count($database->getOwnUniqueArtefactInfo2($session->uid,4,3,0));
                
    $artefact1 count($database->getOwnUniqueArtefactInfo2($vid,4,1,1));
                
    $artefact2 count($database->getOwnUniqueArtefactInfo2($session->uid,4,2,0));
                if(
    $artefact 0){
                
    $upkeep /= 2;
                
    $upkeep round($upkeep);
                }else if(
    $artefact1 0){
                
    $upkeep /= 2;
                
    $upkeep round($upkeep);
                }else if(
    $artefact2 0){
                
    $upkeep /= 4;
                
    $upkeep round($upkeep);
                
    $upkeep *= 3;
                }
                
    $foolartefact $database->getFoolArtefactInfo(4,$vid,$session->uid);
                if(
    count($foolartefact) > 0){
                foreach(
    $foolartefact as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $upkeep *= $arte['effect2'];
                }else{
                
    $upkeep /= $arte['effect2'];
                
    $upkeep round($upkeep);
                }
                }
                }
            return 
    $upkeep;
        }

        private function 
    bountycalculateOProduction($bountywid) {
            global 
    $technology,$database;
            
    $this->oasisResoucesProduce($bountywid); 
            
    $this->bountyOproduction['wood'] = $this->bountyGetOWoodProd();
            
    $this->bountyOproduction['clay'] = $this->bountyGetOClayProd();
            
    $this->bountyOproduction['iron'] = $this->bountyGetOIronProd();
            
    $this->bountyOproduction['crop'] = $this->bountyGetOCropProd();
        }
        private function 
    bountycalculateProduction($bountywid,$uid) {
            global 
    $technology,$database;
            
    $normalA $database->getOwnArtefactInfoByType($bountywid,4);
            
    $largeA $database->getOwnUniqueArtefactInfo($uid,4,2);
            
    $uniqueA $database->getOwnUniqueArtefactInfo($uid,4,3);
            
    $upkeep $this->getUpkeep($this->getAllUnits($bountywid),0);
            
    $this->bountyproduction['wood'] = $this->bountyGetWoodProd();
            
    $this->bountyproduction['clay'] = $this->bountyGetClayProd();
            
    $this->bountyproduction['iron'] = $this->bountyGetIronProd();
            if (
    $uniqueA['size']==&& $uniqueA['owner']==$uid){
            
    $this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-(($upkeep)-round($upkeep*0.50));

            }else if (
    $normalA['type']==&& $normalA['size']==&& $normalA['owner']==$uid){
            
    $this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-(($upkeep)-round($upkeep*0.25));

            }else if (
    $largeA['size']==&& $largeA['owner']==$uid){
             
    $this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-(($upkeep)-round($upkeep*0.25));

            }else{
            
    $this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-$upkeep;
        }
            }

        private function 
    bountyprocessProduction($bountywid) {
            global 
    $database;
            
    $timepast time() - $this->bountyinfoarray['lastupdate'];
            
    $nwood = ($this->bountyproduction['wood'] / 3600) * $timepast;
            
    $nclay = ($this->bountyproduction['clay'] / 3600) * $timepast;
            
    $niron = ($this->bountyproduction['iron'] / 3600) * $timepast;
            
    $ncrop = ($this->bountyproduction['crop'] / 3600) * $timepast;
            
    $database->modifyResource($bountywid,$nwood,$nclay,$niron,$ncrop,1);
            
    $database->updateVillage($bountywid);
        }
            private function 
    bountyprocessOProduction($bountywid) {
            global 
    $database;
            
    $timepast time() - $this->bountyinfoarray['lastupdated'];
            
    $nwood = ($this->bountyproduction['wood'] / 3600) * $timepast;
            
    $nclay = ($this->bountyproduction['clay'] / 3600) * $timepast;
            
    $niron = ($this->bountyproduction['iron'] / 3600) * $timepast;
            
    $ncrop = ($this->bountyproduction['crop'] / 3600) * $timepast;
            
    $database->modifyOasisResource($bountywid,$nwood,$nclay,$niron,$ncrop,1);
            
    $database->updateOasis($bountywid);
        }

        private function 
    bountyGetWoodProd() {
            global 
    $bid1,$bid5,$session;
            
    $wood $sawmill 0;
            
    $woodholder = array();
            for(
    $i=1;$i<=38;$i++) {
                if(
    $this->bountyresarray['f'.$i.'t'] == 1) {
                    
    array_push($woodholder,'f'.$i);
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 5) {
                    
    $sawmill $this->bountyresarray['f'.$i];
                }
            }
            for(
    $i=0;$i<=count($woodholder)-1;$i++) { $wood+= $bid1[$this->bountyresarray[$woodholder[$i]]]['prod']; }
            if(
    $sawmill >= 1) {
                
    $wood += $wood /100 $bid5[$sawmill]['attri'];
            }
            if(
    $this->bountyocounter[0] != 0) {
                
    $wood += $wood*0.25*$this->bountyocounter[0];
            }
            
    $wood *= SPEED;
            return 
    round($wood);
        }
        private function 
    bountyGetOWoodProd() {
            global 
    $session;
            
    $wood 0;
            
    $wood += 40;
            
    $wood *= SPEED;
            return 
    round($wood);
        }
        private function 
    bountyGetOClayProd() {
            global 
    $session;
            
    $clay 0;
            
    $clay += 40;
            
    $clay *= SPEED;
            return 
    round($clay);
        }private function 
    bountyGetOIronProd() {
            global 
    $session;
            
    $iron 0;
            
    $iron += 40;
            
    $iron *= SPEED;
            return 
    round($iron);
        }

        private function 
    bountyGetOCropProd() {
            global 
    $session;
            
    $crop 0;
            
    $clay += 40;
            
    $crop *= SPEED;
            return 
    round($crop);
        }
        private function 
    bountyGetClayProd() {
            global 
    $bid2,$bid6,$session;
            
    $clay $brick 0;
            
    $clayholder = array();
            for(
    $i=1;$i<=38;$i++) {
                if(
    $this->bountyresarray['f'.$i.'t'] == 2) {
                    
    array_push($clayholder,'f'.$i);
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 6) {
                    
    $brick $this->bountyresarray['f'.$i];
                }
            }
            for(
    $i=0;$i<=count($clayholder)-1;$i++) { $clay+= $bid2[$this->bountyresarray[$clayholder[$i]]]['prod']; }
            if(
    $brick >= 1) {
                
    $clay += $clay /100 $bid6[$brick]['attri'];
            }
            if(
    $this->bountyocounter[1] != 0) {
                
    $clay += $clay*0.25*$this->bountyocounter[1];
            }
            
    $clay *= SPEED;
            return 
    round($clay);
        }

        private function 
    bountyGetIronProd() {
            global 
    $bid3,$bid7,$session;
            
    $iron $foundry 0;
            
    $ironholder = array();
            for(
    $i=1;$i<=38;$i++) {
                if(
    $this->bountyresarray['f'.$i.'t'] == 3) {
                    
    array_push($ironholder,'f'.$i);
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 7) {
                    
    $foundry $this->bountyresarray['f'.$i];
                }
            }
            for(
    $i=0;$i<=count($ironholder)-1;$i++) { $iron+= $bid3[$this->bountyresarray[$ironholder[$i]]]['prod']; }
            if(
    $foundry >= 1) {
                
    $iron += $iron /100 $bid7[$foundry]['attri'];
            }
            if(
    $this->bountyocounter[2] != 0) {
                
    $iron += $iron*0.25*$this->bountyocounter[2];
            }
            
    $iron *= SPEED;
            return 
    round($iron);
        }

        private function 
    bountyGetCropProd() {
            global 
    $bid4,$bid8,$bid9,$session;
            
    $crop $grainmill $bakery 0;
            
    $cropholder = array();
            for(
    $i=1;$i<=38;$i++) {
                if(
    $this->bountyresarray['f'.$i.'t'] == 4) {
                    
    array_push($cropholder,'f'.$i);
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 8) {
                    
    $grainmill $this->bountyresarray['f'.$i];
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 9) {
                    
    $bakery $this->bountyresarray['f'.$i];
                }
            }
            for(
    $i=0;$i<=count($cropholder)-1;$i++) { $crop+= $bid4[$this->bountyresarray[$cropholder[$i]]]['prod']; }
            if(
    $grainmill >= 1) {
                
    $crop += $crop /100 $bid8[$grainmill]['attri'];
            }
            if(
    $bakery >= 1) {
                
    $crop += $crop /100 $bid9[$bakery]['attri'];
            }
            if(
    $this->bountyocounter[3] != 0) {
                
    $crop += $crop*0.25*$this->bountyocounter[3];
            }
            
    $crop *= SPEED;
            return 
    round($crop);
        }

        private function 
    trainingComplete() {
        if(
    file_exists("GameEngine/Prevention/training.txt")) {
                
    unlink("GameEngine/Prevention/training.txt");
            }
            global 
    $database;
            
    $time time();
            
    $ourFileHandle fopen("GameEngine/Prevention/training.txt"'w');
            
    fclose($ourFileHandle);
            
    $trainlist $database->getTrainingList();
            if(
    count($trainlist) > 0){
                foreach(
    $trainlist as $train){
                        
    $timepast $train['timestamp2'] - $time;
                        
    $pop $train['pop'];
                        if(
    $timepast <= && $train['amt'] > 0) {
                        
    $timepast2 $time $train['timestamp2'];
                        
    $trained 1;
                        while(
    $timepast2 >= $train['eachtime']){
                        
    $timepast2 -= $train['eachtime'];
                        
    $trained += 1;
                        }
                        if(
    $trained $train['amt']){
                        
    $trained $train['amt'];
                        }
                        if(
    $train['unit']>60 && $train['unit']!=99){
                        
    $database->modifyUnit($train['vref'],array($train['unit']-60),array($trained),array(1));
                        }else{
                        
    $database->modifyUnit($train['vref'],array($train['unit']),array($trained),array(1));
                        }
                        
    $database->updateTraining($train['id'],$trained,$trained*$train['eachtime']);
                        }
                        if(
    $train['amt'] == 0){
                        
    $database->trainUnit($train['id'],0,0,0,0,1,1);
                        }
                    
    $crop $database->getCropProdstarv($train['vref']);
                    
    $unitarrays $this->getAllUnits($train['vref']);
                    
    $village $database->getVillage($train['vref']);
                    
    $upkeep $village['pop'] + $this->getUpkeep($unitarrays0);
                    if (
    $crop $upkeep){
                        
    // add starv data
                        
    $database->setVillageField($train['vref'], 'starv'$upkeep);
                        
    $database->setVillageField($train['vref'], 'starvupdate'$time);
                    }
                }
            }
            if(
    file_exists("GameEngine/Prevention/training.txt")) {
                
    unlink("GameEngine/Prevention/training.txt");
            }
        }

        public function 
    procDistanceTime($coor,$thiscoor,$ref,$mode) {
            global 
    $bid14,$database,$generator;
            
    $resarray $database->getResourceLevel($generator->getBaseID($coor['x'],$coor['y']));
            
    $xdistance ABS($thiscoor['x'] - $coor['x']);
            if(
    $xdistance WORLD_MAX) {
                
    $xdistance = (2*WORLD_MAX+1) - $xdistance;
            }
            
    $ydistance ABS($thiscoor['y'] - $coor['y']);
            if(
    $ydistance WORLD_MAX) {
                
    $ydistance = (2*WORLD_MAX+1) - $ydistance;
            }
            
    $distance SQRT(POW($xdistance,2)+POW($ydistance,2));
             if(!
    $mode) {
                if(
    $ref == 1) {
                    
    $speed 16;
                }
                else if(
    $ref == 2) {
                    
    $speed 12;
                }
                else if(
    $ref == 3) {
                    
    $speed 24;
                }
                else if(
    $ref == 300) {
                    
    $speed 5;
                }
                else {
                    
    $speed 1;
                }
            }
            else {
                
    $speed $ref;
                if(
    $this->getsort_typeLevel(14,$resarray) != && $distance >= TS_THRESHOLD) {
                    
    $speed $speed * ($bid14[$this->getsort_typeLevel(14,$resarray)]['attri']/100) ;
                }
            }


            if(
    $speed!=0){
            return 
    round(($distance/$speed) * 3600 INCREASE_SPEED);
            }else{
            return 
    round($distance 3600 INCREASE_SPEED);
            }

        }

        private function 
    getsort_typeLevel($tid,$resarray) {


            global 
    $village;
            
    $keyholder = array();
            foreach(
    array_keys($resarray,$tid) as $key) {
                if(
    strpos($key,'t')) {
                    
    $key preg_replace("/[^0-9]/"''$key);
                    
    array_push($keyholder$key);
                }
            }
            
    $element count($keyholder);
            if(
    $element >= 2) {
                if(
    $tid <= 4) {
                    
    $temparray = array();
                    for(
    $i=0;$i<=$element-1;$i++) {
                        
    array_push($temparray,$resarray['f'.$keyholder[$i]]);
                    }
                    foreach (
    $temparray as $key => $val) {
                        if (
    $val == max($temparray))
                        
    $target $key;
                    }
                }
                else {
                    
    /*for($i=0;$i<=$element-1;$i++) {
                        //if($resarray['f'.$keyholder[$i]] != $this->getsort_typeMaxLevel($tid)) {
                        //    $target = $i;
                        //}
                    }
                    */
                
    }
            }
            else if(
    $element == 1) {
                
    $target 0;
            }
            else {
                return 
    0;
            }
            if(
    $keyholder[$target] != "") {
                return 
    $resarray['f'.$keyholder[$target]];
            }
            else {
                return 
    0;
            }
        }

        private function 
    celebrationComplete() {
        if(
    file_exists("GameEngine/Prevention/celebration.txt")) {
                
    unlink("GameEngine/Prevention/celebration.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/celebration.txt"'w');
            
    fclose($ourFileHandle);

            
    $varray $database->getCel();
                foreach(
    $varray as $vil){
                    
    $id $vil['wref'];
                    
    $type $vil['type'];
                    
    $user $vil['owner'];
                    if(
    $type == 1){$cp 500;}else if($type == 2){$cp 2000;}
                    
    $database->clearCel($id);
                    
    $database->setCelCp($user,$cp);
                }
            if(
    file_exists("GameEngine/Prevention/celebration.txt")) {
                
    unlink("GameEngine/Prevention/celebration.txt");
            }
        }

        private function 
    demolitionComplete() {
        if(
    file_exists("GameEngine/Prevention/demolition.txt")) {
                
    unlink("GameEngine/Prevention/demolition.txt");
            }
            global 
    $building,$database;
            
    $ourFileHandle fopen("GameEngine/Prevention/demolition.txt"'w');
            
    fclose($ourFileHandle);

            
    $varray $database->getDemolition();
            foreach(
    $varray as $vil) {
                if (
    $vil['timetofinish'] <= time()) {
                    
    $type $database->getFieldType($vil['vref'],$vil['buildnumber']);
                    
    $level $database->getFieldLevel($vil['vref'],$vil['buildnumber']);
                    
    $buildarray $GLOBALS["bid".$type];
                    if (
    $type==10 || $type==38) {
                        
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`=`maxstore`-".$buildarray[$level]['attri']." WHERE wref=".$vil['vref'];
                        
    $database->query($q);
                        
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`=800 WHERE `maxstore`<= 800 AND wref=".$vil['vref'];
                        
    $database->query($q);
                    }
                    if (
    $type==11 || $type==39) {
                        
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`=`maxcrop`-".$buildarray[$level]['attri']." WHERE wref=".$vil['vref'];
                        
    $database->query($q);
                        
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`=800 WHERE `maxcrop`<=800 AND wref=".$vil['vref'];
                        
    $database->query($q);
                    }
                    if (
    $level==1) { $clear=",f".$vil['buildnumber']."t=0"; } else { $clear=""; }
                    
    $q "UPDATE ".TB_PREFIX."fdata SET f".$vil['buildnumber']."=".($level-1).$clear." WHERE vref=".$vil['vref'];
                    
    $database->query($q);
                    
    $pop=$this->getPop($type,$level-1);
                    
    $database->modifyPop($vil['vref'],$pop[0],1);
                    
    $database->delDemolition($vil['vref']);
                }
            }
            if(
    file_exists("GameEngine/Prevention/demolition.txt")) {
                
    unlink("GameEngine/Prevention/demolition.txt");
            }
        }

        private function 
    updateHero() {
     if(
    file_exists("GameEngine/Prevention/updatehero.txt")) {
                
    unlink("GameEngine/Prevention/updatehero.txt");
            }
            global 
    $database,$hero_levels;
            
    $harray $database->getHero();
            if(!empty(
    $harray)){
                foreach(
    $harray as $hdata){
                    if((
    time()-$hdata['lastupdate'])>=1){
                        if(
    $hdata['health']<100 and $hdata['health']>0){
                        
    $reg $hdata['health']+$hdata['regeneration']*5*ceil(SPEED/10)/86400*(time()-$hdata['lastupdate']);
                        if(
    $reg <= 100){
                            
    $database->modifyHero("health",$reg,$hdata['heroid']);
                        }else{
                            
    $database->modifyHero("health",100,$hdata['heroid']);
                            }
                        
    $database->modifyHero("lastupdate",time(),$hdata['heroid']);
                        }
                    }
                        if(
    $hdata['experience'] > $hero_levels[$hdata['level']+1] && $hdata['level'] < 100){
                        
    mysql_query("UPDATE " TB_PREFIX ."hero SET level = level + 1 WHERE heroid = '".$hdata['heroid']."'");
                        
    mysql_query("UPDATE " TB_PREFIX ."hero SET points = points + 5 WHERE heroid = '".$hdata['heroid']."'");
                        }
                        
    $villunits $database->getUnit($hdata['wref']);
                        if(
    $villunits['hero'] == && $hdata['trainingtime'] < time() && $hdata['inrevive'] == 1){
                        
    mysql_query("UPDATE " TB_PREFIX "units SET hero = 1 WHERE vref = ".$hdata['wref']."");
                        
    mysql_query("UPDATE ".TB_PREFIX."hero SET `dead` = '0', `inrevive` = '0', `health` = '100' WHERE `uid` = '".$hdata['uid']."'");
                        }
                        if(
    $villunits['hero'] == && $hdata['trainingtime'] < time() && $hdata['intraining'] == 1){
                        
    mysql_query("UPDATE " TB_PREFIX "units SET hero = 1 WHERE vref = ".$hdata['wref']."");
                        
    mysql_query("UPDATE ".TB_PREFIX."hero SET `intraining` = '0' WHERE `uid` = '".$hdata['uid']."'");
                        }
                }
            }
            if(
    file_exists("GameEngine/Prevention/updatehero.txt")) {
                
    unlink("GameEngine/Prevention/updatehero.txt");
            }


    }

     
    // by SlimShady95, aka Manuel Mannhardt < manuel_mannhardt@web.de > UPDATED FROM songeriux < haroldas.snei@gmail.com >
        
    private function updateStore() {
            global 
    $bid10$bid38$bid11$bid39;

            
    $result mysql_query('SELECT * FROM `' TB_PREFIX 'fdata`');
            while (
    $row mysql_fetch_assoc($result))
            {
                
    $ress $crop 0;
                for (
    $i 19$i 40; ++$i)
                {
                    if (
    $row['f' $i 't'] == 10)
                    {
                        
    $ress += $bid10[$row['f' $i]]['attri'] * STORAGE_MULTIPLIER;
                    }

                    if (
    $row['f' $i 't'] == 38)
                    {
                        
    $ress += $bid38[$row['f' $i]]['attri'] * STORAGE_MULTIPLIER;
                    }



                    if (
    $row['f' $i 't'] == 11)
                    {
                        
    $crop += $bid11[$row['f' $i]]['attri'] * STORAGE_MULTIPLIER;
                    }

                    if (
    $row['f' $i 't'] == 39)
                    {
                        
    $crop += $bid39[$row['f' $i]]['attri'] * STORAGE_MULTIPLIER;
                    }
                }

                if (
    $ress == 0)
                {
                    
    $ress 800 STORAGE_MULTIPLIER;
                }

                if (
    $crop == 0)
                {
                    
    $crop 800 STORAGE_MULTIPLIER;
                }

                
    mysql_query('UPDATE `' TB_PREFIX 'vdata` SET `maxstore` = ' $ress ', `maxcrop` = ' $crop ' WHERE `wref` = ' $row['vref']) or die(mysql_error());
            }
        }

        private function 
    oasisResoucesProduce($wref) {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE wood < 800 OR clay < 800 OR iron < 800 OR crop < 800 AND wref = ".$wref." ";
            
    $array $database->query_return($q);
            foreach(
    $array as $getoasis) {
            
    $oasiswood = (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
            
    $oasisclay = (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
            
    $oasisiron = (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
            
    $oasiscrop = (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
            
    $database->modifyOasisResource($getoasis['wref'],$oasiswood,$oasisclay,$oasisiron,$oasiscrop,1);
            
    $database->updateOasis($getoasis['wref']);
            }
        }

        private function 
    checkInvitedPlayes() {
            global 
    $database;
            
    $q "SELECT * FROM ".TB_PREFIX."users WHERE invited != 0";
            
    $array $database->query_return($q);
            foreach(
    $array as $user) {
            
    $numusers mysql_query("SELECT * FROM ".TB_PREFIX."users WHERE id = ".$user['invited']);
            if(
    mysql_num_rows($numusers) > 0){
            
    $varray count($database->getProfileVillages($user['id']));
            if(
    $varray 1){
            
    $usergold $database->getUserField($user['invited'],"gold",0);
            
    $gold $usergold+50;
            
    $database->updateUserField($user['invited'],"gold",$gold,1);
            
    $database->updateUserField($user['id'],"invited",0,1);
            }
            }
            }
        }

        private function 
    updateGeneralAttack() {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."general WHERE shown = 1";
            
    $array $database->query_return($q);
            foreach(
    $array as $general) {
            if(
    time() - (86400*8) > $general['time']){
                
    mysql_query("UPDATE ".TB_PREFIX."general SET shown = 0 WHERE id = ".$general['id']."");
            }
            }
        }

        private function 
    MasterBuilder() {
            global 
    $database;
            
    $q "SELECT * FROM ".TB_PREFIX."bdata WHERE master = 1";
            
    $array $database->query_return($q);
            foreach(
    $array as $master) {
            
    $villwood $database->getVillageField($master['wid'],'wood');
            
    $villclay $database->getVillageField($master['wid'],'clay');
            
    $villiron $database->getVillageField($master['wid'],'iron');
            
    $villcrop $database->getVillageField($master['wid'],'crop');
            
    $type $master['type'];
            
    $level $master['level'];
            
    $buildarray $GLOBALS["bid".$type];
            
    $buildwood $buildarray[$level]['wood'];
            
    $buildclay $buildarray[$level]['clay'];
            
    $buildiron $buildarray[$level]['iron'];
            
    $buildcrop $buildarray[$level]['crop'];
            
    $ww count($database->getBuildingByType($master['wid'],40));
            if(
    $master['field'] < 19){
            
    $bdata count($database->getDorf1Building($master['wid']));
            
    $bbdata count($database->getDorf2Building($master['wid']));
            
    $bdata1 $database->getDorf1Building($master['wid']);
            }else{
            
    $bdata count($database->getDorf2Building($master['wid']));
            
    $bbdata count($database->getDorf1Building($master['wid']));
            
    $bdata1 $database->getDorf2Building($master['wid']);
            }
            
    $owner $database->getVillageField($master['wid'],'owner');
            if(
    $database->getUserField($owner,'plus',0) > time() or $ww 0){
            if(
    $bbdata 2){
            
    $inbuild 2;
            }else{
            
    $inbuild 1;
            }
            }else{
            
    $inbuild 1;
            }
            
    $usergold $database->getUserField($owner,'gold',0);
            if(
    $bdata $inbuild && $buildwood $villwood && $buildclay $villclay && $buildiron $villiron && $buildcrop $villcrop && $usergold 0){
            
    $time $master['timestamp']+time();
            if(!empty(
    $bdata1)){
            foreach(
    $bdata1 as $master1) {
            
    $time += ($master1['timestamp']-time());
            }
            }
            if(
    $bdata == 0){
            
    $database->updateBuildingWithMaster($master['id'],$time,0);
            }else{
            
    $database->updateBuildingWithMaster($master['id'],$time,1);
            }
            
    $gold $usergold-1;
            
    $database->updateUserField($owner,'gold',$gold,1);
            
    $database->modifyResource($master['wid'],$buildwood,$buildclay,$buildiron,$buildcrop,0);
            }
            }
        }

        private function 
    starvation() {
        if(
    file_exists("GameEngine/Prevention/starvation.txt")) {
                
    unlink("GameEngine/Prevention/starvation.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/starvation.txt"'w');
            
    fclose($ourFileHandle);
            
    $starvupkeep = array(

                
    '1'=>1,
                
    '2'=>1,
                
    '3'=>1,
                
    '4'=>2,
                
    '5'=>3,
                
    '6'=>4,
                
    '7'=>3,
                
    '8'=>6,
                
    '9'=>5,
                
    '10'=>1,
                
    '11'=>1,
                
    '12'=>1,
                
    '13'=>1,
                
    '14'=>1,
                
    '15'=>2,
                
    '16'=>3,
                
    '17'=>6,
                
    '18'=>4,
                
    '19'=>1,
                
    '20'=>1,
                
    '21'=>1,
                
    '22'=>1,
                
    '23'=>2,
                
    '24'=>2,
                
    '25'=>2,
                
    '26'=>3,
                
    '27'=>3,
                
    '28'=>6,
                
    '29'=>4,
                
    '30'=>1,
                
    '31'=>1,
                
    '32'=>1,
                
    '33'=>1,
                
    '34'=>2,
                
    '35'=>2,
                
    '36'=>3,
                
    '37'=>3,
                
    '38'=>3,
                
    '39'=>3,
                
    '40'=>5,
                
    '41'=>1,
                
    '42'=>1,
                
    '43'=>1,
                
    '44'=>1,
                
    '45'=>2,
                
    '46'=>3,
                
    '47'=>6,
                
    '48'=>5,
                
    '49'=>1,
                
    '50'=>1,
                
    'hero'=>6
            
    );

            
    $time time();

            
    // load villages with minus prod
            
    $starvarray = array();
            
    $starvarray $database->getStarvation();
            foreach (
    $starvarray as $starv){
            
    $unitarrays $this->getAllUnits($starv['wref']);
            
    $upkeep $starv['pop'] + $this->getUpkeep($unitarrays0);
                if ((
    $starv['starvupdate']+600) < $time){
                    
    // get enforce
                    
    $enforcearray $database->getEnforceVillage($starv['wref'],0);
                    
    $maxcount 0;
                    if(
    count($enforcearray)==0){
                        
    // get units
                        
    $unitarray $database->getUnit($starv['wref']);
                        for(
    $i $i <= 50 $i++){
                            
    $units $unitarray['u'.$i];
                            if(
    $unitarray['u'.$i] > $maxcount){
                                
    $maxcount $unitarray['u'.$i];
                                
    $maxtype $i;
                            }
                            
    $totalunits += $unitarray['u'.$i];
                        }
                        if(
    $totalunits == 0){
                        
    $maxcount $unitarray['hero'];
                        
    $maxtype "hero";
                        }
                    }else{
                        foreach (
    $enforcearray as $enforce){
                            for(
    $i $i <= 50 $i++){
                                
    $units $enforce['u'.$i];
                                if(
    $enforce['u'.$i] > $maxcount){
                                    
    $maxcount $enforce['u'.$i];
                                    
    $maxtype $i;
                                    
    $enf $enforce['id'];
                                }
                                
    $totalunits += $enforce['u'.$i];
                                }
                        if(
    $totalunits == 0){
                        
    $maxcount $enforce['hero'];
                        
    $maxtype "hero";
                        }
                        }
                        }

                    
    // counting

                    
    $timedif $time-$starv['starvupdate'];

                    
    $starvsec = ($starv['starv']/3600);

                    
    $difcrop = ($timedif*$starvsec);
                    
    $newcrop 0;
                    
    $oldcrop $database->getVillageField($starv['wref'], 'crop');
                    if (
    $oldcrop 100){
                        
    $difcrop $difcrop-$oldcrop;
                        if(
    $difcrop 0){
                            
    $difcrop 0;
                            
    $newcrop $oldcrop-$difcrop;
                            
    $database->setVillageField($starv['wref'], 'crop'$newcrop);
                        }
                    }
                    if(
    $difcrop 0){
                        
    $killunits floor($difcrop/18000);
                        if(
    $killunits 0){
                        if (isset(
    $enf)){
                            if(
    $killunits $maxcount){
                                
    $database->modifyEnforce($enf$maxtype$killunits0);
                                
    $database->setVillageField($starv['wref'], 'starv'$upkeep);
                                
    $database->setVillageField($starv['wref'], 'starvupdate'$time);
                            }else{
                                
    $database->deleteReinf($enf);
                                
    $database->setVillageField($starv['wref'], 'starv'$upkeep);
                                
    $database->setVillageField($starv['wref'], 'starvupdate'$time);
                            }
                        }else{
                            if(
    $killunits $maxcount){
                                
    $database->modifyUnit($starv['wref'], array($maxtype), array($killunits), array(0));
                                
    $database->setVillageField($starv['wref'], 'starv'$upkeep);
                                
    $database->setVillageField($starv['wref'], 'starvupdate'$time);
                            }elseif(
    $killunits $maxcount){
                                
    $killunits $maxcount;
                                
    $database->modifyUnit($starv['wref'], array($maxtype), array($killunits), array(0));
                                
    $database->setVillageField($starv['wref'], 'starv'$upkeep);
                                
    $database->setVillageField($starv['wref'], 'starvupdate'$time);
                            }
                        }
                        }
                    }
                }
                    
    $crop $database->getCropProdstarv($starv['wref']);
                    if (
    $crop $upkeep){
                        
    $database->setVillageField($starv['wref'], 'starv'0);
                        
    $database->setVillageField($starv['wref'], 'starvupdate'0);
                    }

                unset (
    $starv,$unitarrays,$enforcearray,$enforce,$starvarray);
            }

            if(
    file_exists("GameEngine/Prevention/starvation.txt")) {
                
    unlink("GameEngine/Prevention/starvation.txt");
            }
        }

        private function 
    procClimbers() {
            if(
    file_exists("GameEngine/Prevention/climbers.txt")) {
                
    unlink("GameEngine/Prevention/climbers.txt");
            }
                global 
    $database$ranking;
                        
    $users "SELECT * FROM " TB_PREFIX "users WHERE access < " . (INCLUDE_ADMIN "10" "8") . "";
                        
    $array $database->query_return($users);
                        
    $ranking->procRankArray();
                        if(
    mysql_num_rows(mysql_query($users)) > 0){
                        
    $q "SELECT * FROM ".TB_PREFIX."medal order by week DESC LIMIT 0, 1";
                        
    $result mysql_query($q);
                        if(
    mysql_num_rows($result)) {
                            
    $row=mysql_fetch_assoc($result);
                            
    $week=($row['week']+1);
                        } else {
                            
    $week='1';
                        }
                        foreach(
    $array as $session){
                        
    $oldrank $ranking->getUserRank($session['id']);
                        if(
    $session['oldrank'] == 0){
                        
    $database->updateoldrank($session['id'], $oldrank);
                        }else{
                        if(
    $week 1){
                        if(
    $session['oldrank'] > $oldrank) {
                            
    $totalpoints $session['oldrank'] - $oldrank;
                            
    $database->addclimberrankpop($session['id'], $totalpoints);
                            
    $database->updateoldrank($session['id'], $oldrank);
                        } else
                            if(
    $session['oldrank'] < $oldrank) {
                                
    $totalpoints $oldrank $session['oldrank'];
                                
    $database->removeclimberrankpop($session['id'], $totalpoints);
                                
    $database->updateoldrank($session['id'], $oldrank);
                            }
                        }else{
                            
    $totalpoints mysql_num_rows(mysql_query($users)) - $oldrank;
                            
    $database->setclimberrankpop($session['id'], $totalpoints+1);
                            
    $database->updateoldrank($session['id'], $oldrank);
                        }
                        }
                        }
                        }
                        
    $alliance $database->getARanking();
                        
    $ranking->procARankArray();
                        if(
    count($ranking->getRank()) > 0){
                        foreach(
    $alliance as $ally){
                        
    $memberlist $database->getAllMember($ally['id']);
                        
    $oldrank 0;
                        foreach(
    $memberlist as $member) {
                            
    $oldrank += $database->getVSumField($member['id'],"pop");
                        }
                        if(
    $ally['oldrank'] == 0){
                        
    $database->updateoldrankAlly($ally['id'], $oldrank);
                        }
                            if(
    $ally['oldrank'] < $oldrank) {
                                
    $totalpoints $oldrank $ally['oldrank'];
                                
    $database->addclimberrankpopAlly($ally['id'], $totalpoints);
                                
    $database->updateoldrankAlly($ally['id'], $oldrank);
                            } else
                                if(
    $ally['oldrank'] > $oldrank) {
                                    
    $totalpoints $ally['oldrank'] - $oldrank;
                                    
    $database->removeclimberrankpopAlly($ally['id'], $totalpoints);
                                    
    $database->updateoldrankAlly($ally['id'], $oldrank);
                                }
                        }
                        }
            if(
    file_exists("GameEngine/Prevention/climbers.txt")) {
                
    unlink("GameEngine/Prevention/climbers.txt");
            }
        }
                
        private function 
    checkBan() {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."banlist WHERE active = 1 and end < $time";
            
    $array $database->query_return($q);
            foreach(
    $array as $banlist) {
                
    mysql_query("UPDATE ".TB_PREFIX."banlist SET active = 0 WHERE id = ".$banlist['id']."");
                
    mysql_query("UPDATE ".TB_PREFIX."users SET access = 2 WHERE id = ".$banlist['uid']."");
            }
        }

        private function 
    regenerateOasisTroops() {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM " TB_PREFIX "odata where conqured = 0 and $time - lastupdated > 3600";
            
    $array $database->query_return($q);
            foreach(
    $array as $oasis) {
                
    $database->populateOasisUnits($oasis['wref'],$oasis['high']);
                
    $database->updateOasis($oasis['wref']);
            }
        }
        
        private function 
    artefactOfTheFool() {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM " TB_PREFIX "artefacts where type = 8 and active = 1 and $time - lastupdate >= 86400";
            
    $array $database->query_return($q);
            foreach(
    $array as $artefact) {
            
    $kind rand(1,7);
            while(
    $kind == 6){
            
    $kind rand(1,7);
            }
            if(
    $artefact['size'] != 3){
            
    $bad_effect rand(0,1);
            }else{
            
    $bad_effect 0;
            }
            switch(
    $kind) {
                    case 
    1:
                    
    $effect rand(1,5);
                    break;
                    case 
    2:
                    
    $effect rand(1,3);
                    break;
                    case 
    3:
                    
    $effect rand(3,10);
                    break;
                    case 
    4:
                    
    $effect rand(2,4);
                    break;
                    case 
    5:
                    
    $effect rand(2,4);
                    break;
                    case 
    7:
                    
    $effect rand(1,6);
                    break;
                }
            
    mysql_query("UPDATE ".TB_PREFIX."artefacts SET kind = $kind, bad_effect = $bad_effect, effect2 = $effect, lastupdate = $time WHERE id = ".$artefact['id']."");
            }
        }
    }
    $automation = new Automation;
    ?>


  2. #2
    Account Upgraded | Title Enabled! yi12345 is offline
    MemberRank
    Aug 2011 Join Date
    519Posts

    Re: [FIX]TravianZ Fix for git issue causing lag

    Quote Originally Posted by advocaite View Post
    FIX FOR https://github.com/yi12345/TravianZ/issues/126 <-- github issue solved.
    someone change something in automation i know i fixed this before and made it only do village your hiting so i fixed automation to only update the oasis thats being hit and when hit is prosessed not every click.

    here is new automation i edit latest automation of github so yi can push with ease

    PHP Code:
    <?php
    # Developed By : Travianx team and now developed by travianZ team
    # you have no rights to change this YOU HAD NO RIGHT TO CHANGE ORIGINAL  !!
    # Fixed : Doubling Troops , Hero not dieing etc ..
    # Fix by advocaite stop oasis causeing major lag

    class Automation {

        private 
    $bountyresarray = array();
        private 
    $bountyinfoarray = array();
        private 
    $bountyproduction = array();
        private 
    $bountyocounter = array();
        private 
    $bountyunitall = array();
        private 
    $bountypop;
        private 
    $bountyOresarray = array();
        private 
    $bountyOinfoarray = array();
        private 
    $bountyOproduction = array();
        private 
    $bountyOpop 1;

            public function 
    isWinner() {
            
    $q mysql_query("SELECT vref FROM ".TB_PREFIX."fdata WHERE f99 = '100' and f99t = '40'");
            
    $isThere mysql_num_rows($q);
            if(
    $isThere 0)
            {
            
    header('Location: /winner.php');
            }else{
            
    ## there is no winner
            
    }
        }

            public function 
    procResType($ref) {
            global 
    $session;
            switch(
    $ref) {
                case 
    1$build "Woodcutter"; break;
                case 
    2$build "Clay Pit"; break;
                case 
    3$build "Iron Mine"; break;
                case 
    4$build "Cropland"; break;
                case 
    5$build "Sawmill"; break;
                case 
    6$build "Brickyard"; break;
                case 
    7$build "Iron Foundry"; break;
                case 
    8$build "Grain Mill"; break;
                case 
    9$build "Bakery"; break;
                case 
    10$build "Warehouse"; break;
                case 
    11$build "Granary"; break;
                case 
    12$build "Blacksmith"; break;
                case 
    13$build "Armoury"; break;
                case 
    14$build "Tournament Square"; break;
                case 
    15$build "Main Building"; break;
                case 
    16$build "Rally Point"; break;
                case 
    17$build "Marketplace"; break;
                case 
    18$build "Embassy"; break;
                case 
    19$build "Barracks"; break;
                case 
    20$build "Stable"; break;
                case 
    21$build "Workshop"; break;
                case 
    22$build "Academy"; break;
                case 
    23$build "Cranny"; break;
                case 
    24$build "Town Hall"; break;
                case 
    25$build "Residence"; break;
                case 
    26$build "Palace"; break;
                case 
    27$build "Treasury"; break;
                case 
    28$build "Trade Office"; break;
                case 
    29$build "Great Barracks"; break;
                case 
    30$build "Great Stable"; break;
                case 
    31$build "City Wall"; break;
                case 
    32$build "Earth Wall"; break;
                case 
    33$build "Palisade"; break;
                case 
    34$build "Stonemason's Lodge"; break;
                case 
    35$build "Brewery"; break;
                case 
    36$build "Trapper"; break;
                case 
    37$build "Hero's Mansion"; break;
                case 
    38$build "Great Warehouse"; break;
                case 
    39$build "Great Granary"; break;
                case 
    40$build "Wonder of the World"; break;
                case 
    41$build "Horse Drinking Trough"; break;
                case 
    42$build "Great Workshop"; break;
                default: 
    $build "Nothing had"; break;
            }
            return 
    addslashes($build);
        }

        function 
    recountPop($vid){
        global 
    $database;
            
    $fdata $database->getResourceLevel($vid);
            
    $popTot 0;

            for (
    $i 1$i <= 40$i++) {
                
    $lvl $fdata["f".$i];
                
    $building $fdata["f".$i."t"];
                if(
    $building){
                    
    $popTot += $this->buildingPOP($building,$lvl);
                }
            }

            
    $q "UPDATE ".TB_PREFIX."vdata set pop = $popTot where wref = $vid";
            
    mysql_query($q);

            return 
    $popTot;

        }

        function 
    recountCP($vid){
        global 
    $database;
            
    $fdata $database->getResourceLevel($vid);
            
    $popTot 0;

            for (
    $i 1$i <= 40$i++) {
                
    $lvl $fdata["f".$i];
                
    $building $fdata["f".$i."t"];
                if(
    $building){
                    
    $popTot += $this->buildingCP($building,$lvl);
                }
            }

            
    $q "UPDATE ".TB_PREFIX."vdata set cp = $popTot where wref = $vid";
            
    mysql_query($q);

            return 
    $popTot;

        }

        function 
    buildingPOP($f,$lvl){
        
    $name "bid".$f;
        global $
    $name;
            
    $popT 0;
            
    $dataarray = $$name;

            for (
    $i 0$i <= $lvl$i++) {
                
    $popT += $dataarray[$i]['pop'];
            }
        return 
    $popT;
        }

        function 
    buildingCP($f,$lvl){
        
    $name "bid".$f;
        global $
    $name;
            
    $popT 0;
            
    $dataarray = $$name;

            for (
    $i 0$i <= $lvl$i++) {
                
    $popT += $dataarray[$i]['cp'];
            }
        return 
    $popT;
        }

        public function 
    Automation() {

            
    $this->procClimbers();
            
    $this->ClearUser();
            
    $this->ClearInactive();
            
    $this->pruneResource();
            
    $this->pruneOResource();
            
    $this->checkWWAttacks();
            if(!
    file_exists("GameEngine/Prevention/culturepoints.txt") or time()-filemtime("GameEngine/Prevention/culturepoints.txt")>10) {
                
    $this->culturePoints();
            }
            if(!
    file_exists("GameEngine/Prevention/updatehero.txt") or time()-filemtime("GameEngine/Prevention/updatehero.txt")>50) {
                
    $this->updateHero();
            }
            if(!
    file_exists("GameEngine/Prevention/cleardeleting.txt") or time()-filemtime("GameEngine/Prevention/cleardeleting.txt")>10) {
                
    $this->clearDeleting();
            }
            if (! 
    file_exists("GameEngine/Prevention/build.txt") or time() - filemtime("GameEngine/Prevention/build.txt") > 10)
            {
                
    $this->buildComplete();
            }
            
    $this->MasterBuilder();
            if (! 
    file_exists("GameEngine/Prevention/demolition.txt") or time() - filemtime("GameEngine/Prevention/demolition.txt") > 10)
            {
                
    $this->demolitionComplete();
            }
            
    $this->updateStore();
            
    $this->delTradeRoute();
            
    $this->TradeRoute();
            if(!
    file_exists("GameEngine/Prevention/market.txt") or time()-filemtime("GameEngine/Prevention/market.txt")>10) {
                
    $this->marketComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/research.txt") or time()-filemtime("GameEngine/Prevention/research.txt")>10) {
                
    $this->researchComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/training.txt") or time()-filemtime("GameEngine/Prevention/training.txt")>10) {
                
    $this->trainingComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/starvation.txt") or time()-filemtime("GameEngine/Prevention/starvation.txt")>10) {
                
    $this->starvation();
            }
            if(!
    file_exists("GameEngine/Prevention/celebration.txt") or time()-filemtime("GameEngine/Prevention/celebration.txt")>10) {
                
    $this->celebrationComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/sendunits.txt") or time()-filemtime("GameEngine/Prevention/sendunits.txt")>10) {
                
    $this->sendunitsComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/loyalty.txt") or time()-filemtime("GameEngine/Prevention/loyalty.txt")>50) {
                
    $this->loyaltyRegeneration();
            }
            if(!
    file_exists("GameEngine/Prevention/sendreinfunits.txt") or time()-filemtime("GameEngine/Prevention/sendreinfunits.txt")>10) {
                
    $this->sendreinfunitsComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/returnunits.txt") or time()-filemtime("GameEngine/Prevention/returnunits.txt")>51) {
                
    $this->returnunitsComplete();
            }
            if(!
    file_exists("GameEngine/Prevention/settlers.txt") or time()-filemtime("GameEngine/Prevention/settlers.txt")>10) {
                
    $this->sendSettlersComplete();
            }
            
    $this->updateGeneralAttack();
            
    $this->checkInvitedPlayes();
            
    $this->updateStore();
            
    $this->CheckBan();
            
    $this->regenerateOasisTroops();
            
    $this->artefactOfTheFool();
        }

        private function 
    loyaltyRegeneration() {
        if(
    file_exists("GameEngine/Prevention/loyalty.txt")) {
                
    unlink("GameEngine/Prevention/loyalty.txt");
            }
            global 
    $database;
            
    $array = array();
            
    $q "SELECT * FROM ".TB_PREFIX."vdata WHERE loyalty<>100";
            
    $array $database->query_return($q);
            if(!empty(
    $array)) {
                foreach(
    $array as $loyalty) {
                    if(
    $this->getTypeLevel(25,$loyalty['wref']) >= 1){
                        
    $value $this->getTypeLevel(25,$loyalty['wref']);
                    }elseif(
    $this->getTypeLevel(26,$loyalty['wref']) >= 1){
                        
    $value $this->getTypeLevel(26,$loyalty['wref']);
                    } else {
                        
    $value 0;
                    }
                    
    $newloyalty min(100,$loyalty['loyalty']+$value*(time()-$loyalty['lastupdate'])/(60*60));
                    
    $q "UPDATE ".TB_PREFIX."vdata SET loyalty = $newloyalty WHERE wref = '".$loyalty['wref']."'";
                    
    $database->query($q);
                }
            }
            
    $array = array();
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE loyalty<>100";
            
    $array $database->query_return($q);
            if(!empty(
    $array)) {
                foreach(
    $array as $loyalty) {
                    if(
    $this->getTypeLevel(25,$loyalty['conqured']) >= 1){
                        
    $value $this->getTypeLevel(25,$loyalty['conqured']);
                    }elseif(
    $this->getTypeLevel(26,$loyalty['conqured']) >= 1){
                        
    $value $this->getTypeLevel(26,$loyalty['conqured']);
                    } else {
                        
    $value 0;
                    }
                    
    $newloyalty min(100,$loyalty['loyalty']+$value*(time()-$loyalty['lastupdate'])/(60*60));
                    
    $q "UPDATE ".TB_PREFIX."odata SET loyalty = $newloyalty WHERE wref = '".$loyalty['wref']."'";
                    
    $database->query($q);
                }
            }
            if(
    file_exists("GameEngine/Prevention/loyalty.txt")) {
                
    unlink("GameEngine/Prevention/loyalty.txt");
            }
        }

           private function 
    getfieldDistance($coorx1$coory1$coorx2$coory2) {
       
    $max WORLD_MAX 1;
       
    $x1 intval($coorx1);
       
    $y1 intval($coory1);
       
    $x2 intval($coorx2);
       
    $y2 intval($coory2);
       
    $distanceX min(abs($x2 $x1), abs($max abs($x2 $x1)));
       
    $distanceY min(abs($y2 $y1), abs($max abs($y2 $y1)));
       
    $dist sqrt(pow($distanceX2) + pow($distanceY2));
       return 
    round($dist1);
       }

         public function 
    getTypeLevel($tid,$vid) {
            global 
    $village,$database;
            
    $keyholder = array();

                
    $resourcearray $database->getResourceLevel($vid);

            foreach(
    array_keys($resourcearray,$tid) as $key) {
                if(
    strpos($key,'t')) {
                    
    $key preg_replace("/[^0-9]/"''$key);
                    
    array_push($keyholder$key);
                }
            }
            
    $element count($keyholder);
            if(
    $element >= 2) {
                if(
    $tid <= 4) {
                    
    $temparray = array();
                    for(
    $i=0;$i<=$element-1;$i++) {
                        
    array_push($temparray,$resourcearray['f'.$keyholder[$i]]);
                    }
                    foreach (
    $temparray as $key => $val) {
                        if (
    $val == max($temparray))
                        
    $target $key;
                    }
                }
                else {
                    
    $target 0;
                    for(
    $i=1;$i<=$element-1;$i++) {
                        if(
    $resourcearray['f'.$keyholder[$i]] > $resourcearray['f'.$keyholder[$target]]) {
                            
    $target $i;
                        }
                    }
                }
            }
            else if(
    $element == 1) {
                
    $target 0;
            }
            else {
                return 
    0;
            }
            if(
    $keyholder[$target] != "") {
                return 
    $resourcearray['f'.$keyholder[$target]];
            }
            else {
                return 
    0;
            }
        }

        private function 
    clearDeleting() {
        if(
    file_exists("GameEngine/Prevention/cleardeleting.txt")) {
                
    unlink("GameEngine/Prevention/cleardeleting.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/cleardeleting.txt"'w');
            
    fclose($ourFileHandle);
            
    $needDelete $database->getNeedDelete();
            if(
    count($needDelete) > 0) {
                foreach(
    $needDelete as $need) {
                    
    $needVillage $database->getVillagesID($need['uid']);
                    foreach(
    $needVillage as $village) {
                        
    $q "DELETE FROM ".TB_PREFIX."abdata where wref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."bdata where wid = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."enforcement where from = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."fdata where vref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."market where vref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."odata where wref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."research where vref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."tdata where vref = ".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."training where vref =".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."units where vref =".$village;
                        
    $database->query($q);
                        
    $q "DELETE FROM ".TB_PREFIX."vdata where wref = ".$village;
                        
    $database->query($q);
                        
    $q "UPDATE ".TB_PREFIX."wdata set occupied = 0 where id = ".$village;
                        
    $database->query($q);
                        
    $getmovement $database->getMovement(3,$village,1);
                        foreach(
    $getmovement as $movedata) {
                        
    $time time();
                        
    $time2 $time $movedata['starttime'];
                        
    $database->addMovement(4,$movedata['to'],$movedata['from'],$movedata['ref'],$time,$time+$time2);
                        
    $database->setMovementProc($movedata['moveid']);
                        }
                        
    $q "DELETE FROM ".TB_PREFIX."movement where from = ".$village;
                        
    $database->query($q);
                        
    $getprisoners $database->getPrisoners($village);
                        foreach(
    $getprisoners as $pris) {
                        
    $troops 0;
                        for(
    $i=1;$i<12;$i++){
                        
    $troops += $pris['t'.$i];
                        }
                        
    $database->modifyUnit($pris['wref'],array("99o"),array($troops),array(0));
                        
    $database->deletePrisoners($pris['id']);
                        }
                        
    $getprisoners $database->getPrisoners3($village);
                        foreach(
    $getprisoners as $pris) {
                        
    $troops 0;
                        for(
    $i=1;$i<12;$i++){
                        
    $troops += $pris['t'.$i];
                        }
                        
    $database->modifyUnit($pris['wref'],array("99o"),array($troops),array(0));
                        
    $database->deletePrisoners($pris['id']);
                        }
                        
    $enforcement $database->getEnforceVillage($village,0);
                        foreach(
    $enforcement as $enforce) {
                        
    $time time();
                        
    $fromcoor $database->getCoor($enforce['vref']);
                        
    $tocoor $database->getCoor($enforce['from']);
                        
    $targettribe $database->getUserField($database->getVillageField($enforce['from'],"owner"),"tribe",0);
                        
    $time2 $this->procDistanceTime($tocoor,$fromcoor,$targettribe,0);
                        
    $start 10*($targettribe-1);
                        for(
    $i=1;$i<11;$i++){
                        
    $unit $start $i;
                        
    $post['t'.$i] = $enforce['u'.$unit];
                        }
                        
    $post['t11'] = $enforce['hero'];
                        
    $reference $database->addAttack($enforce['from'],$post['t1'],$post['t2'],$post['t3'],$post['t4'],$post['t5'],$post['t6'],$post['t7'],$post['t8'],$post['t9'],$post['t10'],$post['t11'],2,0,0,0,0);
                        
    $database->addMovement(4,$enforce['vref'],$enforce['from'],$reference,$time,$time+$time2);
                        }
                    }
                    
    $q "DELETE FROM ".TB_PREFIX."hero where uid = ".$need['uid'];
                    
    $database->query($q);
                    
    $q "DELETE FROM ".TB_PREFIX."mdata where target = ".$need['uid']." or owner = ".$need['uid'];
                    
    $database->query($q);
                    
    $q "DELETE FROM ".TB_PREFIX."ndata where uid = ".$need['uid'];
                    
    $database->query($q);
                    
    $q "DELETE FROM ".TB_PREFIX."users where id = ".$need['uid'];
                    
    $database->query($q);
                }
            }
            if(
    file_exists("GameEngine/Prevention/cleardeleting.txt")) {
                
    unlink("GameEngine/Prevention/cleardeleting.txt");
            }
        }

        private function 
    ClearUser() {
            global 
    $database;
            if(
    AUTO_DEL_INACTIVE) {
                
    $time time()+UN_ACT_TIME;
                
    $q "DELETE from ".TB_PREFIX."users where timestamp >= $time and act != ''";
                
    $database->query($q);
            }
        }

        private function 
    ClearInactive() {
            global 
    $database;
            if(
    TRACK_USR) {
                
    $timeout time()-USER_TIMEOUT*60;
                  
    $q "DELETE FROM ".TB_PREFIX."active WHERE timestamp < $timeout";
                 
    $database->query($q);
            }
        }
        private function 
    pruneOResource() {
            global 
    $database;
            if(!
    ALLOW_BURST) {
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE maxstore < 800 OR maxcrop < 800";
            
    $array $database->query_return($q);
            foreach(
    $array as $getoasis) {
            if(
    $getoasis['maxstore'] < 800){
            
    $maxstore 800;
            }else{
            
    $maxstore $getoasis['maxstore'];
            }
            if(
    $getoasis['maxcrop'] < 800){
            
    $maxcrop 800;
            }else{
            
    $maxcrop $getoasis['maxcrop'];
            }
            
    $q "UPDATE " TB_PREFIX "odata set maxstore = $maxstore, maxcrop = $maxcrop where wref = ".$getoasis['wref']."";
            
    $database->query($q);
            }
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE wood > maxstore OR clay > maxstore OR iron > maxstore OR crop > maxcrop";
            
    $array $database->query_return($q);
            foreach(
    $array as $getoasis) {
            if(
    $getoasis['wood'] > $getoasis['maxstore']){
            
    $wood $getoasis['maxstore'];
            }else{
            
    $wood $getoasis['wood'];
            }
            if(
    $getoasis['clay'] > $getoasis['maxstore']){
            
    $clay $getoasis['maxstore'];
            }else{
            
    $clay $getoasis['clay'];
            }
            if(
    $getoasis['iron'] > $getoasis['maxstore']){
            
    $iron $getoasis['maxstore'];
            }else{
            
    $iron $getoasis['iron'];
            }
            if(
    $getoasis['crop'] > $getoasis['maxstore']){
            
    $crop $getoasis['maxstore'];
            }else{
            
    $crop $getoasis['crop'];
            }
            
    $q "UPDATE " TB_PREFIX "odata set wood = $wood, clay = $clay, iron = $iron, crop = $crop where wref = ".$getoasis['wref']."";
            
    $database->query($q);
            }
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE wood < 0 OR clay < 0 OR iron < 0 OR crop < 0";
            
    $array $database->query_return($q);
            foreach(
    $array as $getoasis) {
            if(
    $getoasis['wood'] < 0){
            
    $wood 0;
            }else{
            
    $wood $getoasis['wood'];
            }
            if(
    $getoasis['clay'] < 0){
            
    $clay 0;
            }else{
            
    $clay $getoasis['clay'];
            }
            if(
    $getoasis['iron'] < 0){
            
    $iron 0;
            }else{
            
    $iron $getoasis['iron'];
            }
            if(
    $getoasis['crop'] < 0){
            
    $crop 0;
            }else{
            
    $crop $getoasis['crop'];
            }
            
    $q "UPDATE " TB_PREFIX "odata set wood = $wood, clay = $clay, iron = $iron, crop = $crop where wref = ".$getoasis['wref']."";
            
    $database->query($q);
            }
            }
        }
        private function 
    pruneResource() {
            global 
    $database;
            if(!
    ALLOW_BURST) {
            
    $q "SELECT * FROM ".TB_PREFIX."vdata WHERE maxstore < 800 OR maxcrop < 800";
            
    $array $database->query_return($q);
            foreach(
    $array as $getvillage) {
            if(
    $getvillage['maxstore'] < 800){
            
    $maxstore 800;
            }else{
            
    $maxstore $getvillage['maxstore'];
            }
            if(
    $getvillage['maxcrop'] < 800){
            
    $maxcrop 800;
            }else{
            
    $maxcrop $getvillage['maxcrop'];
            }
            
    $q "UPDATE " TB_PREFIX "vdata set maxstore = $maxstore, maxcrop = $maxcrop where wref = ".$getvillage['wref']."";
            
    $database->query($q);
            }
            
    $q "SELECT * FROM ".TB_PREFIX."vdata WHERE wood > maxstore OR clay > maxstore OR iron > maxstore OR crop > maxcrop";
            
    $array $database->query_return($q);
            foreach(
    $array as $getvillage) {
            if(
    $getvillage['wood'] > $getvillage['maxstore']){
            
    $wood $getvillage['maxstore'];
            }else{
            
    $wood $getvillage['wood'];
            }
            if(
    $getvillage['clay'] > $getvillage['maxstore']){
            
    $clay $getvillage['maxstore'];
            }else{
            
    $clay $getvillage['clay'];
            }
            if(
    $getvillage['iron'] > $getvillage['maxstore']){
            
    $iron $getvillage['maxstore'];
            }else{
            
    $iron $getvillage['iron'];
            }
            if(
    $getvillage['crop'] > $getvillage['maxstore']){
            
    $crop $getvillage['maxstore'];
            }else{
            
    $crop $getvillage['crop'];
            }
            
    $q "UPDATE " TB_PREFIX "vdata set wood = $wood, clay = $clay, iron = $iron, crop = $crop where wref = ".$getvillage['wref']."";
            
    $database->query($q);
            }
            
    $q "SELECT * FROM ".TB_PREFIX."vdata WHERE wood < 0 OR clay < 0 OR iron < 0 OR crop < 0";
            
    $array $database->query_return($q);
            foreach(
    $array as $getvillage) {
            if(
    $getvillage['wood'] < 0){
            
    $wood 0;
            }else{
            
    $wood $getvillage['wood'];
            }
            if(
    $getvillage['clay'] < 0){
            
    $clay 0;
            }else{
            
    $clay $getvillage['clay'];
            }
            if(
    $getvillage['iron'] < 0){
            
    $iron 0;
            }else{
            
    $iron $getvillage['iron'];
            }
            if(
    $getvillage['crop'] < 0){
            
    $crop 0;
            }else{
            
    $crop $getvillage['crop'];
            }
            
    $q "UPDATE " TB_PREFIX "vdata set wood = $wood, clay = $clay, iron = $iron, crop = $crop where wref = ".$getvillage['wref']."";
            
    $database->query($q);
            }
            }
        }

        private function 
    culturePoints() {
        if(
    file_exists("GameEngine/Prevention/culturepoints.txt")) {
                
    unlink("GameEngine/Prevention/culturepoints.txt");
            }
            global 
    $database,$session;
            
    $time time()-600// 10minutes
            
    $array = array();
            
    $q "SELECT id, lastupdate FROM ".TB_PREFIX."users WHERE lastupdate < $time";
            
    $array $database->query_return($q);

            foreach(
    $array as $indi) {
                if(
    $indi['lastupdate'] <= $time && $indi['lastupdate'] > 0){
                    
    $cp $database->getVSumField($indi['id'], 'cp') * (time()-$indi['lastupdate'])/86400// 24 hours

                    
    $newupdate time();
                    
    $q "UPDATE ".TB_PREFIX."users set cp = cp + $cp, lastupdate = $newupdate where id = '".$indi['id']."'";
                    
    $database->query($q);
                }
            }
            if(
    file_exists("GameEngine/Prevention/culturepoints.txt")) {
                
    unlink("GameEngine/Prevention/culturepoints.txt");
            }
    }

        private function 
    buildComplete() {
        if(
    file_exists("GameEngine/Prevention/build.txt")) {
                
    unlink("GameEngine/Prevention/build.txt");
            }
            global 
    $database,$bid18,$bid10,$bid11,$bid38,$bid39;
            
    $time time();
            
    $array = array();
            
    $q "SELECT * FROM ".TB_PREFIX."bdata where timestamp < $time and master = 0";
            
    $array $database->query_return($q);
            foreach(
    $array as $indi) {
                
    $q "UPDATE ".TB_PREFIX."fdata set f".$indi['field']." = ".$indi['level'].", f".$indi['field']."t = ".$indi['type']." where vref = ".$indi['wid'];
                if(
    $database->query($q)) {
                    
    $level $database->getFieldLevel($indi['wid'],$indi['field']);
                    
    $pop $this->getPop($indi['type'],($level-1));
                    
    $database->modifyPop($indi['wid'],$pop[0],0);
                    
    $database->addCP($indi['wid'],$pop[1]);
                    if(
    $indi['type'] == 18) {
                        
    $owner $database->getVillageField($indi['wid'],"owner");
                        
    $max $bid18[$level]['attri'];
                        
    $q "UPDATE ".TB_PREFIX."alidata set max = $max where leader = $owner";
                        
    $database->query($q);
                    }

                        if(
    $indi['type'] == 10) {
                          
    $max=$database->getVillageField($indi['wid'],"maxstore");
                          if(
    $level=='1' && $max==STORAGE_BASE){ $max=STORAGE_BASE; }
                        if(
    $level!=1){
                        
    $max-=$bid10[$level-1]['attri']*STORAGE_MULTIPLIER;
                        
    $max+=$bid10[$level]['attri']*STORAGE_MULTIPLIER;
                        }else{
                        
    $max=$bid10[$level]['attri']*STORAGE_MULTIPLIER;
                        }
                          
    $database->setVillageField($indi['wid'],"maxstore",$max);
                        }

                        if(
    $indi['type'] == 11) {
                          
    $max=$database->getVillageField($indi['wid'],"maxcrop");
                          if(
    $level=='1' && $max==STORAGE_BASE){ $max=STORAGE_BASE; }
                        if(
    $level!=1){
                        
    $max-=$bid11[$level-1]['attri']*STORAGE_MULTIPLIER;
                        
    $max+=$bid11[$level]['attri']*STORAGE_MULTIPLIER;
                        }else{
                        
    $max=$bid11[$level]['attri']*STORAGE_MULTIPLIER;
                        }
                          
    $database->setVillageField($indi['wid'],"maxcrop",$max);
                        }

                        if(
    $indi['type'] == 38) {
                        
    $max=$database->getVillageField($indi['wid'],"maxstore");
                        if(
    $level=='1' && $max==STORAGE_BASE){ $max=STORAGE_BASE; }
                        if(
    $level!=1){
                        
    $max-=$bid38[$level-1]['attri']*STORAGE_MULTIPLIER;
                        
    $max+=$bid38[$level]['attri']*STORAGE_MULTIPLIER;
                        }else{
                        
    $max=$bid38[$level]['attri']*STORAGE_MULTIPLIER;
                        }
                        
    $database->setVillageField($indi['wid'],"maxstore",$max);
                        }

                        if(
    $indi['type'] == 39) {
                        
    $max=$database->getVillageField($indi['wid'],"maxcrop");
                        if(
    $level=='1' && $max==STORAGE_BASE){ $max=STORAGE_BASE; }
                        if(
    $level!=1){
                        
    $max-=$bid39[$level-1]['attri']*STORAGE_MULTIPLIER;
                        
    $max+=$bid39[$level]['attri']*STORAGE_MULTIPLIER;
                        }else{
                        
    $max=$bid39[$level]['attri']*STORAGE_MULTIPLIER;
                        }
                        
    $database->setVillageField($indi['wid'],"maxcrop",$max);
                        }

                        
    // by SlimShady95 aka Manuel Mannhardt < manuel_mannhardt@web.de >
                        
    if($indi['type'] == 40 and ($indi['level'] % == or $indi['level'] > 95) and $indi['level'] != 100){
                        
    $this->startNatarAttack($indi['level'], $indi['wid']);
                        }
                    if(
    $database->getUserField($database->getVillageField($indi['wid'],"owner"),"tribe",0) != 1){
                    
    $q4 "UPDATE ".TB_PREFIX."bdata set loopcon = 0 where loopcon = 1 and master = 0 and wid = ".$indi['wid'];
                    
    $database->query($q4);
                    }else{
                    if(
    $indi['field'] > 18){
                    
    $q4 "UPDATE ".TB_PREFIX."bdata set loopcon = 0 where loopcon = 1 and master = 0 and wid = ".$indi['wid']." and field > 18";
                    
    $database->query($q4);
                    }else{
                    
    $q4 "UPDATE ".TB_PREFIX."bdata set loopcon = 0 where loopcon = 1 and master = 0 and wid = ".$indi['wid']." and field < 19";
                    
    $database->query($q4);
                    }
                    }
                    
    $q "DELETE FROM ".TB_PREFIX."bdata where id = ".$indi['id'];
                    
    $database->query($q);
                }
                    
    $crop $database->getCropProdstarv($indi['wid']);
                    
    $unitarrays $this->getAllUnits($indi['wid']);
                    
    $village $database->getVillage($indi['wid']);
                    
    $upkeep $village['pop'] + $this->getUpkeep($unitarrays0);
                    if (
    $crop $upkeep){
                        
    // add starv data
                        
    $database->setVillageField($indi['wid'], 'starv'$upkeep);
                        
    $database->setVillageField($indi['wid'], 'starvupdate'$time);
                    }
            }
            if(
    file_exists("GameEngine/Prevention/build.txt")) {
                
    unlink("GameEngine/Prevention/build.txt");
            }
        }

        
    // by SlimShady95 aka Manuel Mannhardt < manuel_mannhardt@web.de >
        
    private function startNatarAttack($level$vid) {
            global 
    $database;

            
    // bad, but should work :D
            // I took the data from my first ww (first .org world)
            // todo: get the algo from the real travian with the 100 biggest
            // offs and so on
            
    $troops = array(
                
    => array(
                    array(
    341228144156355390),
                    array(
    35077331710)
                ),

                
    10 => array(
                    array(
    4314368852654621130),
                    array(
    650175772817)
                ),

                
    15 => array(
                    array(
    4645426756595272150),
                    array(
    9903051344025)
                ),

                
    20 => array(
                    array(
    6207588176257225220),
                    array(
    14404562015636)
                ),

                
    25 => array(
                    array(
    6004597774007277230),
                    array(
    15204992205837)
                ),

                
    30 => array(
                    array(
    7073718187308713270),
                    array(
    18306072686945)
                ),

                
    35 => array(
                    array(
    7090732087628856280),
                    array(
    18606202787045)
                ),

                
    40 => array(
                    array(
    7852696796068667250),
                    array(
    14604311906037)
                ),

                
    45 => array(
                    array(
    848088831049010719350),
                    array(
    22307503318354)
                ),

                
    50 => array(
                  array(
    852290381055110883350),
                  array(
    22407573358354)
                ),

                
    55 => array(
                    array(
    893186901099210624320),
                    array(
    21907073128454)
                ),

                
    60 => array(
                    array(
    12138130131504015642510),
                    array(
    3180107947711876)
                ),

                
    65 => array(
                    array(
    13397146191662217521580),
                    array(
    3450118252212783)
                ),

                
    70 => array(
                    array(
    16323176652024021201700),
                    array(
    42401447640157102)
                ),

                
    75 => array(
                    array(
    20739227962574627288910),
                    array(
    52901816803194127)
                ),

                
    80 => array(
                    array(
    21857241802714728914970),
                    array(
    55101898839202132)
                ),

                
    85 => array(
                    array(
    224762500727928298761000),
                    array(
    56001933855205134)
                ),

                
    90 => array(
                    array(
    313453505338963418431410),
                    array(
    771026681180281184)
                ),

                
    95 => array(
                    array(
    317203563539443425061440),
                    array(
    771026711181281184)
                ),

                
    96 => array(
                    array(
    328853700740897441301500),
                    array(
    795027571219289190)
                ),

                
    97 => array(
                    array(
    329403709940968442351500),
                    array(
    794027551219289190)
                ),

                
    98 => array(
                    array(
    335213769141686449531520),
                    array(
    812028161246296194)
                ),

                
    99 => array(
                    array(
    362514086145089487141650),
                    array(
    872030251338317208)
                )
            );

            
    // select the troops^^
            
    if (isset($troops[$level]))
            {
                
    $units $troops[$level];
            }
            else
            {
                return 
    false;
            }

            
    // get the capital village from the natars
            
    $query mysql_query('SELECT `wref` FROM `' TB_PREFIX 'vdata` WHERE `owner` = 3 and `capital` = 1 LIMIT 1') or die(mysql_error());
            
    $row mysql_fetch_assoc($query);

            
    // start the attacks
            
    $endtime time() + round((60 60 24) / INCREASE_SPEED);

            
    // -.-
            
    mysql_query('INSERT INTO `' TB_PREFIX 'ww_attacks` (`vid`, `attack_time`) VALUES (' $vid ', ' $endtime ')');
            
    mysql_query('INSERT INTO `' TB_PREFIX 'ww_attacks` (`vid`, `attack_time`) VALUES (' $vid ', ' . ($endtime 1) . ')');

            
    // wave 1
            
    $ref $database->addAttack($row['wref'], 0$units[0][0], $units[0][1], 0$units[0][2], $units[0][3], $units[0][4], $units[0][5], 000300002020020202020);
            
    $database->addMovement(3$row['wref'], $vid$reftime(), $endtime);

            
    // wave 2
            
    $ref2 $database->addAttack($row['wref'], 0$units[1][0], $units[1][1], 0$units[1][2], $units[1][3], $units[1][4], $units[1][5], 0003400002020020202020, array('vid' => $vid'endtime' => ($endtime 1)));
            
    $database->addMovement(3$row['wref'], $vid$ref2time(), $endtime 1);
        }

        private function 
    checkWWAttacks() {
            
    $query mysql_query('SELECT * FROM `' TB_PREFIX 'ww_attacks` WHERE `attack_time` <= ' time());
            while (
    $row mysql_fetch_assoc($query))
            {
                
    // fix for destroyed wws
                
    $query2 mysql_query('UPDATE `' TB_PREFIX 'fdata` SET `f99t` = 40 WHERE `vref` = ' $row['vid']);

                
    // delete the attack
                
    $query3 mysql_query('DELETE FROM `' TB_PREFIX 'ww_attacks` WHERE `vid` = ' $row['vid'] . ' AND `attack_time` = ' $row['attack_time']);
            }
        }

        private function 
    getPop($tid,$level) {
            
    $name "bid".$tid;
            global $
    $name,$village;
            
    $dataarray = $$name;
            
    $pop $dataarray[($level+1)]['pop'];
            
    $cp $dataarray[($level+1)]['cp'];
            return array(
    $pop,$cp);
        }

        private function 
    delTradeRoute() {
            global 
    $database;
            
    $time time();
            
    $q "DELETE from ".TB_PREFIX."route where timeleft < $time";
            
    $database->query($q);
        }

        private function 
    TradeRoute() {
            global 
    $database;
                
    $time time();
                
    $q "SELECT * FROM ".TB_PREFIX."route where timestamp < $time";
                
    $dataarray $database->query_return($q);
                foreach(
    $dataarray as $data) {
                
    $targettribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $this->sendResource2($data['wood'],$data['clay'],$data['iron'],$data['crop'],$data['from'],$data['wid'],$targettribe,$data['deliveries']);
                
    $database->editTradeRoute($data['id'],"timestamp",86400,1);
                }
        }

        private function 
    marketComplete() {
        if(
    file_exists("GameEngine/Prevention/market.txt")) {
                
    unlink("GameEngine/Prevention/market.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/market.txt"'w');
            
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."send where ".TB_PREFIX."movement.ref = ".TB_PREFIX."send.id and ".TB_PREFIX."movement.proc = 0 and sort_type = 0 and endtime < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {

                if(
    $data['wood'] >= $data['clay'] && $data['wood'] >= $data['iron'] && $data['wood'] >= $data['crop']){ $sort_type "10"; }
                elseif(
    $data['clay'] >= $data['wood'] && $data['clay'] >= $data['iron'] && $data['clay'] >= $data['crop']){ $sort_type "11"; }
                elseif(
    $data['iron'] >= $data['wood'] && $data['iron'] >= $data['clay'] && $data['iron'] >= $data['crop']){ $sort_type "12"; }
                elseif(
    $data['crop'] >= $data['wood'] && $data['crop'] >= $data['clay'] && $data['crop'] >= $data['iron']){ $sort_type "13"; }

                
    $to $database->getMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,$sort_type,''.addslashes($from['name']).' send resources to '.addslashes($to['name']).'',''.$from['owner'].','.$from['wref'].','.$data['wood'].','.$data['clay'].','.$data['iron'].','.$data['crop'].'',$data['endtime']);
                if(
    $from['owner'] != $to['owner']) {
                    
    $database->addNotice($from['owner'],$to['wref'],$ownally,$sort_type,''.addslashes($from['name']).' send resources to '.addslashes($to['name']).'',''.$from['owner'].','.$from['wref'].','.$data['wood'].','.$data['clay'].','.$data['iron'].','.$data['crop'].'',$data['endtime']);
                }
                
    $database->modifyResource($data['to'],$data['wood'],$data['clay'],$data['iron'],$data['crop'],1);
                
    $tocoor $database->getCoor($data['from']);
                
    $fromcoor $database->getCoor($data['to']);
                
    $targettribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $endtime $this->procDistanceTime($tocoor,$fromcoor,$targettribe,0) + $data['endtime'];
                
    $database->addMovement(2,$data['to'],$data['from'],$data['merchant'],time(),$endtime,$data['send'],$data['wood'],$data['clay'],$data['iron'],$data['crop']);
                
    $database->setMovementProc($data['moveid']);
            }
            
    $q1 "SELECT * FROM ".TB_PREFIX."movement where proc = 0 and sort_type = 2 and endtime < $time";
            
    $dataarray1 $database->query_return($q1);
            foreach(
    $dataarray1 as $data1) {
                
    $database->setMovementProc($data1['moveid']);
                if(
    $data1['send'] > 1){
                
    $targettribe1 $database->getUserField($database->getVillageField($data1['to'],"owner"),"tribe",0);
                
    $send $data1['send']-1;
                
    $this->sendResource2($data1['wood'],$data1['clay'],$data1['iron'],$data1['crop'],$data1['to'],$data1['from'],$targettribe1,$send);
                }
            }
            if(
    file_exists("GameEngine/Prevention/market.txt")) {
                
    unlink("GameEngine/Prevention/market.txt");
            }
        }

        private function 
    sendResource2($wtrans,$ctrans,$itrans,$crtrans,$from,$to,$tribe,$send) {
            global 
    $bid17,$bid28,$database,$generator,$logging;
            
    $availableWood $database->getWoodAvailable($from);
            
    $availableClay $database->getClayAvailable($from);
            
    $availableIron $database->getIronAvailable($from);
            
    $availableCrop $database->getCropAvailable($from);
            if(
    $availableWood >= $wtrans AND $availableClay >= $ctrans AND $availableIron >= $itrans AND $availableCrop >= $crtrans){
            
    $merchant2 = ($this->getTypeLevel(17,$from) > 0)? $this->getTypeLevel(17,$from) : 0;
            
    $used2 $database->totalMerchantUsed($from);
            
    $merchantAvail2 $merchant2 $used2;
            
    $maxcarry2 = ($tribe == 1)? 500 : (($tribe == 2)? 1000 750);
            
    $maxcarry2 *= TRADER_CAPACITY;
            if(
    $this->getTypeLevel(28,$from) != 0) {
                
    $maxcarry2 *= $bid28[$this->getTypeLevel(28,$from)]['attri'] / 100;
            }
            
    $resource = array($wtrans,$ctrans,$itrans,$crtrans);
            
    $reqMerc ceil((array_sum($resource)-0.1)/$maxcarry2);
            if(
    $merchantAvail2 != && $reqMerc <= $merchantAvail2) {
                        
    $coor $database->getCoor($to);
                        
    $coor2 $database->getCoor($from);
                    if(
    $database->getVillageState($to)) {
                        
    $timetaken $generator->procDistanceTime($coor,$coor2,$tribe,0);
                        
    $res $resource[0]+$resource[1]+$resource[2]+$resource[3];
                        if(
    $res!=0){
                        
    $reference $database->sendResource($resource[0],$resource[1],$resource[2],$resource[3],$reqMerc,0);
                        
    $database->modifyResource($from,$resource[0],$resource[1],$resource[2],$resource[3],0);
                        
    $database->addMovement(0,$from,$to,$reference,time(),time()+$timetaken,$send);
                        }
                    }
            }
            
    header("Location: build.php?gid=17");
        } else {}
        }

        private function 
    sendunitsComplete() {
        if(
    file_exists("GameEngine/Prevention/sendunits.txt")) {
                    
    unlink("GameEngine/Prevention/sendunits.txt");
                }
            global 
    $bid23,$bid34,$database,$battle,$village,$technology,$logging,$generator;
             
    $ourFileHandle fopen("GameEngine/Prevention/sendunits.txt"'w');
                
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."attacks where ".TB_PREFIX."movement.ref = ".TB_PREFIX."attacks.id and ".TB_PREFIX."movement.proc = '0' and ".TB_PREFIX."movement.sort_type = '3' and ".TB_PREFIX."attacks.attack_type != '2' and endtime < $time ORDER BY endtime ASC";
            
    $dataarray $database->query_return($q);
            
    $totalattackdead 0;
            foreach(
    $dataarray as $data) {
                
    //set base things
                //$battle->resolveConflict($data);
                
    $tocoor $database->getCoor($data['from']);
                
    $fromcoor $database->getCoor($data['to']);
                
    $isoasis $database->isVillageOases($data['to']);
                
    $AttackArrivalTime $data['endtime'];
                
    $AttackerWref $data['from'];
                
    $DefenderWref =    $data['to'];
                if (
    $isoasis == 0){
                
    $Attacker['id'] = $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
                
    $Defender['id'] = $database->getUserField($database->getVillageField($data['to'],"owner"),"id",0);
                
    $AttackerID $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
                
    $DefenderID $database->getUserField($database->getVillageField($data['to'],"owner"),"id",0);
                
    $owntribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $targettribe $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);
                
    $ownally $database->getUserField($database->getVillageField($data['from'],"owner"),"alliance",0);
                
    $targetally $database->getUserField($database->getVillageField($data['to'],"owner"),"alliance",0);
                
    $to $database->getMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $toF $database->getVillage($data['to']);
                
    $fromF $database->getVillage($data['from']);

                            
    $DefenderUnit = array();
                            
    $DefenderUnit $database->getUnit($data['to']);
                            
    $evasion $database->getVillageField($data['to'],"evasion");
                            
    $maxevasion $database->getUserField($DefenderID,"maxevasion",0);
                            
    $gold $database->getUserField($DefenderID,"gold",0);
                            
    $playerunit = ($targettribe-1)*10;
                            
    $cannotsend 0;
                            
    $movements $database->getMovement("34",$data['to'],1);
                            for(
    $y=0;$y count($movements);$y++){
                            
    $returntime $units[$y]['endtime']-time();
                            if(
    $units[$y]['sort_type'] == && $units[$y]['from'] != && $returntime <= 10){
                            
    $cannotsend 1;
                            }
                            }
                            if(
    $evasion == && $maxevasion && $gold && $cannotsend == 0){
                            
    $totaltroops 0;
                            for(
    $i=1;$i<=10;$i++){
                            
    $playerunit += $i;
                            
    $data['u'.$i] = $DefenderUnit['u'.$playerunit];
                            
    $database->modifyUnit($data['to'],array($playerunit),array($DefenderUnit['u'.$playerunit]),array(0));
                            
    $playerunit -= $i;
                            
    $totaltroops += $data['u'.$i];
                            }
                            
    $data['u11'] = $DefenderUnit['hero'];
                            
    $totaltroops += $data['u11'];
                            if(
    $totaltroops 0){
                            
    $database->modifyUnit($data['to'],array("hero"),array($DefenderUnit['hero']),array(0));
                            
    $attackid $database->addAttack($data['to'],$data['u1'],$data['u2'],$data['u3'],$data['u4'],$data['u5'],$data['u6'],$data['u7'],$data['u8'],$data['u9'],$data['u10'],$data['u11'],4,0,0,0,0,0,0,0,0,0,0,0);
                            
    $database->addMovement(4,0,$data['to'],$attackid,time(),time()+(180/EVASION_SPEED));
                            
    $newgold $gold-2;
                            
    $newmaxevasion $maxevasion-1;
                            
    $database->updateUserField($DefenderID"gold"$newgold1);
                            
    $database->updateUserField($DefenderID"maxevasion"$newmaxevasion1);
                            }
                            }
                            
    //get defence units
                            
    $Defender = array();    $rom $ger $gal $nat $natar 0;
                            
    $Defender $database->getUnit($data['to']);
                            
    $enforcementarray $database->getEnforceVillage($data['to'],0);
                            if(
    count($enforcementarray) > 0) {
                                foreach(
    $enforcementarray as $enforce) {
                                    for(
    $i=1;$i<=50;$i++) {
                                        
    $Defender['u'.$i] += $enforce['u'.$i];
                                    }
                                }
                            }
                                for(
    $i=1;$i<=50;$i++){
                                    if(!isset(
    $Defender['u'.$i])){
                                        
    $Defender['u'.$i] = '0';
                                    } else {
                                     if(
    $Defender['u'.$i]=='' or $Defender['u'.$i]<='0'){
                                        
    $Defender['u'.$i] = '0';
                                     } else {
                                                    if(
    $i<=10){ $rom='1'; }
                                                else if(
    $i<=20){ $ger='1'; }
                                                else if(
    $i<=30){ $gal='1'; }
                                                else if(
    $i<=40){ $nat='1'; }
                                                else if(
    $i<=50){ $natar='1'; }
                                    }
                                    }
                                }
                                    if(!isset(
    $Defender['hero'])){
                                        
    $Defender['hero'] = '0';
                                    } else {
                                     if(
    $Defender['hero']=='' or $Defender['hero']<='0'){
                                        
    $Defender['hero'] = '0';
                                     }
                                    }
                                        
    //get attack units
                                                
    $Attacker = array();
                                                
    $start = ($owntribe-1)*10+1;
                                                
    $end = ($owntribe*10);
                                                
    $u = (($owntribe-1)*10);
                                                
    $catp =  0;
                                                
    $catapult = array(8,18,28,48);
                                                
    $ram = array(7,17,27,47);
                                                
    $chief = array(9,19,29,49);
                                                
    $spys = array(4,14,23,44);
                                            for(
    $i=$start;$i<=$end;$i++) {
                                                
    $y $i-$u;
                                                
    $Attacker['u'.$i] = $dataarray[0]['t'.$y];
                                                    
    //there are catas
                                                    
    if(in_array($i,$catapult)) {
                                                    
    $catp += $Attacker['u'.$i];
                                                    
    $catp_pic $i;
                                                    }
                                                    if(
    in_array($i,$ram)) {
                                                    
    $rams += $Attacker['u'.$i];
                                                    
    $ram_pic $i;
                                                    }
                                                    if(
    in_array($i,$chief)) {
                                                    
    $chiefs += $Attacker['u'.$i];
                                                    
    $chief_pic $i;
                                                    }
                                                    if(
    in_array($i,$spys)) {
                                                    
    $chiefs += $Attacker['u'.$i];
                                                    
    $spy_pic $i;
                                                    }
                                                    }
                                                     
    $Attacker['uhero'] = $dataarray[0]['t11'];
                                                    
    $hero_pic "hero";
                                        
    //need to set these variables.
                                        
    $def_wall $database->getFieldLevel($data['to'],40);
                                        
    $att_tribe $owntribe;
                                        
    $def_tribe $targettribe;
                                        
    $residence "0";
                                        
    $attpop $fromF['pop'];
                                        
    $defpop $toF['pop'];
                                        for (
    $i=19$i<40$i++){
                                            if (
    $database->getFieldLevel($data['to'],"".$i."t")=='25' OR $database->getFieldLevel($data['to'],"".$i."t")=='26'){
                                                
    $residence $database->getFieldLevel($data['to'],$i);
                                                
    $i=40;
                                            }
                                        }

                                        
    //type of attack
                                        
    if($dataarray[0]['attack_type'] == 1){
                                            
    $type 1;
                                            
    $scout 1;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 2){
                                            
    $type 2;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 3){
                                            
    $type 3;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 4){
                                            
    $type 4;
                                        }

                                        
    $att_ab $database->getABTech($data['from']); // Blacksmith level
                                        
    $att_ab1 $att_ab['b1'];
                                        
    $att_ab2 $att_ab['b2'];
                                        
    $att_ab3 $att_ab['b3'];
                                        
    $att_ab4 $att_ab['b4'];
                                        
    $att_ab5 $att_ab['b5'];
                                        
    $att_ab6 $att_ab['b6'];
                                        
    $att_ab7 $att_ab['b7'];
                                        
    $att_ab8 $att_ab['b8'];
                                        
    $def_ab $database->getABTech($data['to']); // Armory level
                                        
    $att_ab1 $att_ab['a1'];
                                        
    $att_ab2 $att_ab['a2'];
                                        
    $att_ab3 $att_ab['a3'];
                                        
    $att_ab4 $att_ab['a4'];
                                        
    $att_ab5 $att_ab['a5'];
                                        
    $att_ab6 $att_ab['a6'];
                                        
    $att_ab7 $att_ab['a7'];
                                        
    $att_ab8 $att_ab['a8'];

                            
    //rams attack
                             
    if($rams and $type=='3'){
                            
    $basearraywall $database->getMInfo($data['to']);
                            if(
    $database->getFieldLevel($basearraywall['wref'],40)>'0'){
                                for (
    $w=1$w<2$w++){
                            if (
    $database->getFieldLevel($basearraywall['wref'],40)!='0'){

                            
    $walllevel $database->getFieldLevel($basearraywall['wref'],40);
                            
    $wallgid $database->getFieldLevel($basearraywall['wref'],"40t");
                            
    $wallid 40;
                            
    $w='4';
                                                } else {
    $w $w--; }
                                }
                            }else{
                            
    $empty 1;
                            }
                            }

                                        
    $tblevel '1';
                                        
    $stonemason "1";


                
    /*--------------------------------
                // End Battle part
                --------------------------------*/
                
    }else{
                
    $Attacker['id'] = $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
                
    $Defender['id'] = $database->getUserField($database->getOasisField($data['to'],"owner"),"id",0);
                
    $AttackerID $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
                
    $DefenderID $database->getUserField($database->getOasisField($data['to'],"owner"),"id",0);
                
    $owntribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $targettribe =  $database->getUserField($database->getOasisField($data['to'],"owner"),"tribe",0);;
                
    $ownally $database->getUserField($database->getVillageField($data['from'],"owner"),"alliance",0);
                
    $targetally $database->getUserField($database->getOasisField($data['to'],"owner"),"alliance",0);
                
    $to $database->getOMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $toF $database->getOasisV($data['to']);
                
    $fromF $database->getVillage($data['from']);


                            
    //get defence units
                            
    $Defender = array();    $rom $ger $gal $nat $natar 0;
                            
    $Defender $database->getUnit($data['to']);
                            
    $enforcementarray $database->getEnforceVillage($data['to'],0);

                            if(
    count($enforcementarray) > 0) {
                                foreach(
    $enforcementarray as $enforce) {
                                    for(
    $i=1;$i<=50;$i++) {
                                        
    $Defender['u'.$i] += $enforce['u'.$i];
                                    }
                                        
    $Defender['hero'] += $enforce['hero'];
                                }
                            }
                                for(
    $i=1;$i<=50;$i++){
                                    if(!isset(
    $Defender['u'.$i])){
                                        
    $Defender['u'.$i] = '0';
                                    } else {
                                     if(
    $Defender['u'.$i]=='' or $Defender['u'.$i]<='0'){
                                        
    $Defender['u'.$i] = '0';
                                     } else {
                                                    if(
    $i<=10){ $rom='1'; }
                                                else if(
    $i<=20){ $ger='1'; }
                                                else if(
    $i<=30){ $gal='1'; }
                                                else if(
    $i<=40){ $nat='1'; }
                                                else if(
    $i<=50){ $natar='1'; }
                                    }
                                    }
                                }
                                    if(!isset(
    $Defender['hero'])){
                                        
    $Defender['hero'] = '0';
                                    } else {
                                     if(
    $Defender['hero']=='' or $Defender['hero']<'0'){
                                        
    $Defender['hero'] = '0';
                                     }
                                    }
                                        
    //get attack units
                                                
    $Attacker = array();
                                                
    $start = ($owntribe-1)*10+1;
                                                
    $end = ($owntribe*10);
                                                
    $u = (($owntribe-1)*10);
                                                
    $catp =  0;
                                                
    $catapult = array(8,18,28,38,48);
                                                
    $ram = array(7,17,27,37,47);
                                                
    $chief = array(9,19,29,39,49);
                                                
    $spys = array(4,14,23,44);
                                            for(
    $i=$start;$i<=$end;$i++) {
                                                
    $y $i-$u;
                                                
    $Attacker['u'.$i] = $dataarray[0]['t'.$y];
                                                    
    //there are catas
                                                    
    if(in_array($i,$catapult)) {
                                                    
    $catp += $Attacker['u'.$i];
                                                    
    $catp_pic $i;
                                                    }
                                                    if(
    in_array($i,$ram)) {
                                                    
    $rams += $Attacker['u'.$i];
                                                    
    $ram_pic $i;
                                                    }
                                                    if(
    in_array($i,$chief)) {
                                                    
    $chiefs += $Attacker['u'.$i];
                                                    
    $chief_pic $i;
                                                    }
                                                    if(
    in_array($i,$spys)) {
                                                    
    $chiefs += $Attacker['u'.$i];
                                                    
    $spy_pic $i;
                                                    }
                                                    }
                                                   
    $Attacker['uhero'] = $dataarray[0]['t11'];
                                                    
    $hero_pic "hero";
                                        
    //need to set these variables.
                                        
    $def_wall 1;
                                        
    $att_tribe $owntribe;
                                        
    $def_tribe $targettribe;
                                        
    $residence "0";
                                        
    $attpop $fromF['pop'];
                                        
    $defpop 100;


                                        
    //type of attack
                                        
    if($dataarray[0]['attack_type'] == 1){
                                            
    $type 1;
                                            
    $scout 1;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 2){
                                            
    $type 2;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 3){
                                            
    $type 3;
                                        }
                                        if(
    $dataarray[0]['attack_type'] == 4){
                                            
    $type 4;
                                        }

                                        
    $def_ab = Array (
                                            
    "b1" => 0// Blacksmith level
                                            
    "b2" => 0// Blacksmith level
                                            
    "b3" => 0// Blacksmith level
                                            
    "b4" => 0// Blacksmith level
                                            
    "b5" => 0// Blacksmith level
                                            
    "b6" => 0// Blacksmith level
                                            
    "b7" => 0// Blacksmith level
                                            
    "b8" => 0); // Blacksmith level

                                        
    $att_ab = Array (
                                            
    "a1" => 0// armoury level
                                            
    "a2" => 0// armoury level
                                            
    "a3" => 0// armoury level
                                            
    "a4" => 0// armoury level
                                            
    "a5" => 0// armoury level
                                            
    "a6" => 0// armoury level
                                            
    "a7" => 0// armoury level
                                            
    "a8" => 0); // armoury level

                                            
    $empty='1';
                                            
    $tblevel '0';
                                            
    $stonemason "1";

            }

            if(
    PEACE == || $targettribe == || $targettribe == 5){
            if(
    $targettribe == 1){
            
    $def_spy $Defender['u4'];
            }elseif(
    $targettribe == 2){
            
    $def_spy $Defender['u14'];
            }elseif(
    $targettribe == 3){
            
    $def_spy $Defender['u23'];
            }elseif(
    $targettribe == 5){
            
    $def_spy $Defender['u54'];
            }
            if(!
    $scout or $def_spy 0){
                    
    $traps $Defender['u99']-$Defender['u99o'];
                    for(
    $i=1;$i<=11;$i++){
                    
    $traps1 $traps;
                    if(
    $data['t'.$i] < $traps1){
                    
    $traps1 $data['t'.$i];
                    }
                    ${
    traped.$i}=$traps1;
                    
    $traps -= $traps1;
                    
    $database->modifyUnit($data['to'],array("99o"),array($traps1),array(1));
                    }
                    for(
    $i=$start;$i<=$end;$i++) {
                    
    $j $i-$start+1;
                    
    $Attacker['u'.$i] -= ${traped.$j};
                    }
                    
    $Attacker['uhero'] -= $traped11;
                    
    $totaltraped_att $traped1+$traped2+$traped3+$traped4+$traped5+$traped6+$traped7+$traped8+$traped9+$traped10+$traped11;
                    if(
    $totaltraped_att 0){
                    
    $prisoners2 $database->getPrisoners2($data['to'],$data['from']);
                    if(empty(
    $prisoners2)){
                    
    $database->addPrisoners($data['to'],$data['from'],$traped1,$traped2,$traped3,$traped4,$traped5,$traped6,$traped7,$traped8,$traped9,$traped10,$traped11);
                    }else{
                    
    $database->updatePrisoners($data['to'],$data['from'],$traped1,$traped2,$traped3,$traped4,$traped5,$traped6,$traped7,$traped8,$traped9,$traped10,$traped11);
                    }
                    }
            }
                
    $battlepart $battle->calculateBattle($Attacker,$Defender,$def_wall,$att_tribe,$def_tribe,$residence,$attpop,$defpop,$type,$def_ab1,$def_ab2,$def_ab3,$def_ab4,$def_ab5,$def_ab6,$def_ab7,$def_ab8,$att_ab1,$att_ab2,$att_ab3,$att_ab4,$att_ab5,$att_ab6,$att_ab7,$att_ab8,$tblevel,$stonemason,$walllevel,$AttackerID,$DefenderID,$AttackerWref,$DefenderWref);

                
    //units attack string for battleraport
                
    $unitssend_att ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].'';
                
    $herosend_att $data['t11'];
                if (
    $herosend_att>0){
                    
    $unitssend_att_check=$unitssend_att.','.$data['t11'];
                }else{
                    
    $unitssend_att_check=$unitssend_att;
                }
                
    //units defence string for battleraport
                            
    $enforcementarray2 $database->getEnforceVillage($data['to'],0);
                            if(
    count($enforcementarray2) > 0) {
                                foreach(
    $enforcementarray2 as $enforce2) {
                                        
    $Defender['hero'] += $enforce2['hero'];
                                }
                            }
                    
    $unitssend_def[1] = ''.$Defender['u1'].','.$Defender['u2'].','.$Defender['u3'].','.$Defender['u4'].','.$Defender['u5'].','.$Defender['u6'].','.$Defender['u7'].','.$Defender['u8'].','.$Defender['u9'].','.$Defender['u10'].'';
                    
    $unitssend_def[2] = ''.$Defender['u11'].','.$Defender['u12'].','.$Defender['u13'].','.$Defender['u14'].','.$Defender['u15'].','.$Defender['u16'].','.$Defender['u17'].','.$Defender['u18'].','.$Defender['u19'].','.$Defender['u20'].'';
                    
    $unitssend_def[3] = ''.$Defender['u21'].','.$Defender['u22'].','.$Defender['u23'].','.$Defender['u24'].','.$Defender['u25'].','.$Defender['u26'].','.$Defender['u27'].','.$Defender['u28'].','.$Defender['u29'].','.$Defender['u30'].'';
                    
    $unitssend_def[4] = ''.$Defender['u31'].','.$Defender['u32'].','.$Defender['u33'].','.$Defender['u34'].','.$Defender['u35'].','.$Defender['u36'].','.$Defender['u37'].','.$Defender['u38'].','.$Defender['u39'].','.$Defender['u40'].'';
                    
    $unitssend_def[5] = ''.$Defender['u41'].','.$Defender['u42'].','.$Defender['u43'].','.$Defender['u44'].','.$Defender['u45'].','.$Defender['u46'].','.$Defender['u47'].','.$Defender['u48'].','.$Defender['u49'].','.$Defender['u50'].'';
                    
    $herosend_def $Defender['hero'];
                    
    $totalsend_alldef[1] = $Defender['u1']+$Defender['u2']+$Defender['u3']+$Defender['u4']+$Defender['u5']+$Defender['u6']+$Defender['u7']+$Defender['u8']+$Defender['u9']+$Defender['u10'];
                    
    $totalsend_alldef[2] = $Defender['u11']+$Defender['u12']+$Defender['u13']+$Defender['u14']+$Defender['u15']+$Defender['u16']+$Defender['u17']+$Defender['u18']+$Defender['u19']+$Defender['u20'];
                    
    $totalsend_alldef[3] = $Defender['u21']+$Defender['u22']+$Defender['u23']+$Defender['u24']+$Defender['u25']+$Defender['u26']+$Defender['u27']+$Defender['u28']+$Defender['u29']+$Defender['u30'];
                    
    $totalsend_alldef[4] = $Defender['u31']+$Defender['u32']+$Defender['u33']+$Defender['u34']+$Defender['u35']+$Defender['u36']+$Defender['u37']+$Defender['u38']+$Defender['u39']+$Defender['u40'];
                    
    $totalsend_alldef[5] = $Defender['u41']+$Defender['u42']+$Defender['u43']+$Defender['u44']+$Defender['u45']+$Defender['u46']+$Defender['u47']+$Defender['u48']+$Defender['u49']+$Defender['u50'];

                    
    $totalsend_alldef =  $totalsend_alldef[1]+$totalsend_alldef[2]+$totalsend_alldef[3]+$totalsend_alldef[4]+$totalsend_alldef[5]+$herosend_def;

                    
    $unitssend_deff[1] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitssend_deff[2] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitssend_deff[3] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitssend_deff[4] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitssend_deff[5] = '?,?,?,?,?,?,?,?,?,?,';
                    
    //how many troops died? for battleraport

                    #################################################
                    ################FIXED BY SONGER################
                    #################################################

                    
    for($i=1;$i<=11;$i++){
                    if(
    $battlepart['casualties_attacker'][$i] <= 0) { ${dead.$i} = 0; }elseif($battlepart['casualties_attacker'][$i] > $data['t'.$i]){
                    ${
    dead.$i}=$data['t'.$i];
                    }else { ${
    dead.$i} = $battlepart['casualties_attacker'][$i]; }
                    }

                    
    #################################################

                    
    $heroAttackDead=$dead11;
                        
    //kill own defence
                        
    $q "SELECT * FROM ".TB_PREFIX."units WHERE vref='".$data['to']."'";
                        
    $unitlist $database->query_return($q);
                        
    $start = ($targettribe-1)*10+1;
                        
    $end = ($targettribe*10);

                            if(
    $targettribe == 1){ $u ""$rom='1'; } else if($targettribe == 2){ $u "1"$ger='1'; } else if($targettribe == 3){$u "2"$gal='1'; }else if($targettribe == 4){ $u "3"$nat='1'; } else { $u "4"$natar='1'; }     //FIX
                                
    for($i=$start;$i<=$end;$i++) { if($i==$end){ $u=$targettribe; }
                                    if(
    $unitlist){
                                        
    $dead[$i]+=round($battlepart[2]*$unitlist[0]['u'.$i]);
                                        
    $database->modifyUnit($data['to'],array($i),array(round($battlepart[2]*$unitlist[0]['u'.$i])),array(0));
                                    }
                                }
                                    
    $dead['hero']='0';
                                    if(
    $unitlist){
                                        
    $dead['hero']+=$battlepart['deadherodef'];
                                        
    $database->modifyUnit($data['to'],array("hero"),array($battlepart['deadherodef']),array(0));
                                    }
                
    //kill other defence in village
                
    if(count($database->getEnforceVillage($data['to'],0)) > 0) {
                    foreach(
    $database->getEnforceVillage($data['to'],0) as $enforce) {
                        
    $life='';    $notlife=''$wrong='0';
                        if(
    $enforce['from'] != 0){
                        
    $tribe $database->getUserField($database->getVillageField($enforce['from'],"owner"),"tribe",0);
                        }else{
                        
    $tribe 4;
                        }
                        
    $start = ($tribe-1)*10+1;
                        
    $totalreinfunits 0;
                            for(
    $i=1;$i<=50;$i++) {
                                
    $totalreinfunits += $enforce['u'.$i];
                            }
                        if(
    $totalreinfunits 0){
                        if(
    $tribe == 1){ $rom='1'; } else if($tribe == 2){ $ger='1'; }else if($tribe == 3){ $gal='1'; }else if($tribe == 4){ $nat='1'; } else { $natar='1'; }
                            for(
    $i=$start;$i<=($start+9);$i++) {
                                if(
    $enforce['u'.$i]>'0'){
                                    
    $database->modifyEnforce($enforce['id'],$i,round($battlepart[2]*$enforce['u'.$i]),0);
                                    
    $dead[$i]+=round($battlepart[2]*$enforce['u'.$i]);
                                    
    $checkpoint=round($battlepart[2]*$enforce['u'.$i]);
                                        if(
    $checkpoint!=$enforce['u'.$i]){
                                        
    $wrong='1';
                                        }
                                } else {
                                    
    $dead[$i]='0';
                                }
                            }
                        }
                                if(
    $enforce['hero']>'0'){
                                    
    $database->modifyEnforce($enforce['id'],"hero",$battlepart['deadheroref'][$enforce['id']],0);
                                    
    $dead['hero']+=$battlepart['deadheroref'][$enforce['id']];
                                        if(
    $dead['hero']!=$enforce['hero']){
                                        
    $wrong='1';
                                        }
                                }
                            
    $notlife''.$dead[$start].','.$dead[$start+1].','.$dead[$start+2].','.$dead[$start+3].','.$dead[$start+4].','.$dead[$start+5].','.$dead[$start+6].','.$dead[$start+7].','.$dead[$start+8].','.$dead[$start+9].'';
                            
    $notlife1 $dead[$start]+$dead[$start+1]+$dead[$start+2]+$dead[$start+3]+$dead[$start+4]+$dead[$start+5]+$dead[$start+6]+$dead[$start+7]+$dead[$start+8]+$dead[$start+9];
                            
    $life''.$enforce['u'.$start.''].','.$enforce['u'.($start+1).''].','.$enforce['u'.($start+2).''].','.$enforce['u'.($start+3).''].','.$enforce['u'.($start+4).''].','.$enforce['u'.($start+5).''].','.$enforce['u'.($start+6).''].','.$enforce['u'.($start+7).''].','.$enforce['u'.($start+8).''].','.$enforce['u'.($start+9).''].'';
                            
    $life1 $enforce['u'.$start.'']+$enforce['u'.($start+1).'']+$enforce['u'.($start+2).'']+$enforce['u'.($start+3).'']+$enforce['u'.($start+4).'']+$enforce['u'.($start+5).'']+$enforce['u'.($start+6).'']+$enforce['u'.($start+7).'']+$enforce['u'.($start+8).'']+$enforce['u'.($start+9).''];
                            
    $lifehero $enforce['hero'];
                            
    $notlifehero $dead['hero'];
                            
    $totallife $enforce['hero']+$life1;
                            
    $totalnotlife $dead['hero']+$notlife1;
                            
    $totalsend_att $data['t1']+$data['t2']+$data['t3']+$data['t4']+$data['t5']+$data['t6']+$data['t7']+$data['t8']+$data['t9']+$data['t10']+$data['t11'];
                            
    $totaldead_att $dead1+$dead2+$dead3+$dead4+$dead5+$dead6+$dead7+$dead8+$dead9+$dead10+$dead11;
                            
    //NEED TO SEND A RAPPORTAGE!!!
                            
    $data2 ''.$database->getVillageField($enforce['from'],"owner").','.$to['wref'].','.addslashes($to['name']).','.$tribe.','.$life.','.$notlife.','.$lifehero.','.$notlifehero.'';
                            if(
    $scout){
                            if(
    $totaldead_att 0){
                            if(
    $totaldead_att == $totalsend_att){
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,15,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }else{
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,16,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }
                            }
                            }else{
                            if(
    $totalnotlife == 0){
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,15,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }else if(
    $totallife $totalnotlife){
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,16,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }else{
                            
    $database->addNotice($database->getVillageField($enforce['from'],"owner"),$from['wref'],$ownally,17,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
                            }
                            
    //delete reinf sting when its killed all.
                            
    if($wrong=='0'){ $database->deleteReinf($enforce['id']); }
                            }
                    }
                }
                
    $totalsend_att $data['t1']+$data['t2']+$data['t3']+$data['t4']+$data['t5']+$data['t6']+$data['t7']+$data['t8']+$data['t9']+$data['t10']+$data['t11'];

                    
    $unitsdead_def[1] = ''.$dead['1'].','.$dead['2'].','.$dead['3'].','.$dead['4'].','.$dead['5'].','.$dead['6'].','.$dead['7'].','.$dead['8'].','.$dead['9'].','.$dead['10'].'';
                    
    $unitsdead_def[2] = ''.$dead['11'].','.$dead['12'].','.$dead['13'].','.$dead['14'].','.$dead['15'].','.$dead['16'].','.$dead['17'].','.$dead['18'].','.$dead['19'].','.$dead['20'].'';
                    
    $unitsdead_def[3] = ''.$dead['21'].','.$dead['22'].','.$dead['23'].','.$dead['24'].','.$dead['25'].','.$dead['26'].','.$dead['27'].','.$dead['28'].','.$dead['29'].','.$dead['30'].'';
                    
    $unitsdead_def[4] = ''.$dead['31'].','.$dead['32'].','.$dead['33'].','.$dead['34'].','.$dead['35'].','.$dead['36'].','.$dead['37'].','.$dead['38'].','.$dead['39'].','.$dead['40'].'';
                    
    $unitsdead_def[5] = ''.$dead['41'].','.$dead['42'].','.$dead['43'].','.$dead['44'].','.$dead['45'].','.$dead['46'].','.$dead['47'].','.$dead['48'].','.$dead['49'].','.$dead['50'].'';
                    
    $unitsdead_deff[1] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitsdead_deff[2] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitsdead_deff[3] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitsdead_deff[4] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $unitsdead_deff[5] = '?,?,?,?,?,?,?,?,?,?,';
                    
    $deadhero $dead['hero'];

                    
    $totaldead_alldef[1] = $dead['1']+$dead['2']+$dead['3']+$dead['4']+$dead['5']+$dead['6']+$dead['7']+$dead['8']+$dead['9']+$dead['10'];
                    
    $totaldead_alldef[2] = $dead['11']+$dead['12']+$dead['13']+$dead['14']+$dead['15']+$dead['16']+$dead['17']+$dead['18']+$dead['19']+$dead['20'];
                    
    $totaldead_alldef[3] = $dead['21']+$dead['22']+$dead['23']+$dead['24']+$dead['25']+$dead['26']+$dead['27']+$dead['28']+$dead['29']+$dead['30'];
                    
    $totaldead_alldef[4] = $dead['31']+$dead['32']+$dead['33']+$dead['34']+$dead['35']+$dead['36']+$dead['37']+$dead['38']+$dead['39']+$dead['40'];
                    
    $totaldead_alldef[5] = $dead['41']+$dead['42']+$dead['43']+$dead['44']+$dead['45']+$dead['46']+$dead['47']+$dead['48']+$dead['49']+$dead['50'];

                    
    $totaldead_alldef =  $totaldead_alldef[1]+$totaldead_alldef[2]+$totaldead_alldef[3]+$totaldead_alldef[4]+$totaldead_alldef[5]+$deadhero;
                    
    $totalattackdead += $totaldead_alldef;


                
    // Set units returning from attack
                
    $database->modifyAttack($data['ref'],1,$dead1);
                
    $database->modifyAttack($data['ref'],2,$dead2);
                
    $database->modifyAttack($data['ref'],3,$dead3);
                
    $database->modifyAttack($data['ref'],4,$dead4);
                
    $database->modifyAttack($data['ref'],5,$dead5);
                
    $database->modifyAttack($data['ref'],6,$dead6);
                
    $database->modifyAttack($data['ref'],7,$dead7);
                
    $database->modifyAttack($data['ref'],8,$dead8);
                
    $database->modifyAttack($data['ref'],9,$dead9);
                
    $database->modifyAttack($data['ref'],10,$dead10);
                
    $database->modifyAttack($data['ref'],11,$dead11);
                
    $unitsdead_att ''.$dead1.','.$dead2.','.$dead3.','.$dead4.','.$dead5.','.$dead6.','.$dead7.','.$dead8.','.$dead9.','.$dead10.'';

                
    $database->modifyAttack($data['ref'],1,$traped1);
                
    $database->modifyAttack($data['ref'],2,$traped2);
                
    $database->modifyAttack($data['ref'],3,$traped3);
                
    $database->modifyAttack($data['ref'],4,$traped4);
                
    $database->modifyAttack($data['ref'],5,$traped5);
                
    $database->modifyAttack($data['ref'],6,$traped6);
                
    $database->modifyAttack($data['ref'],7,$traped7);
                
    $database->modifyAttack($data['ref'],8,$traped8);
                
    $database->modifyAttack($data['ref'],9,$traped9);
                
    $database->modifyAttack($data['ref'],10,$traped10);
                
    $database->modifyAttack($data['ref'],11,$traped11);
                
    $unitstraped_att ''.$traped1.','.$traped2.','.$traped3.','.$traped4.','.$traped5.','.$traped6.','.$traped7.','.$traped8.','.$traped9.','.$traped10.','.$traped11.'';
                if (
    $herosend_att>0){
                    
    $unitsdead_att_check $unitsdead_att.','.$dead11;
                }else{
                    
    $unitsdead_att_check $unitsdead_att;
                }
                
    //$unitsdead_def = ''.$dead11.','.$dead12.','.$dead13.','.$dead14.','.$dead15.','.$dead16.','.$dead17.','.$dead18.','.$dead19.','.$dead20.'';


                //top 10 attack and defence update
                
    $totaldead_att $dead1+$dead2+$dead3+$dead4+$dead5+$dead6+$dead7+$dead8+$dead9+$dead10+$dead11;
                
    $totalattackdead += $totaldead_att;
                
    $troopsdead1 $dead1;
                
    $troopsdead2 $dead2;
                
    $troopsdead3 $dead3;
                
    $troopsdead4 $dead4;
                
    $troopsdead5 $dead5;
                
    $troopsdead6 $dead6;
                
    $troopsdead7 $dead7;
                
    $troopsdead8 $dead8;
                
    $troopsdead9 $dead9+1;
                
    $troopsdead10 $dead10;
                
    $troopsdead11 $dead11;
                for(
    $i=1;$i<=50;$i++) {
                
    $totaldead_def += $dead[''.$i.''];
                }
                
    $totaldead_def += $dead['hero'];
                if (
    $Attacker['uhero'] != 0){
                 
    $heroxp $totaldead_def;
                 
    $database->modifyHeroXp("experience",$heroxp,$from['owner']);
                }
                
    $Defender1 $database->getUnit($to['wref']);
                    if(
    $Defender1['hero'] > 0){
                    
    $defheroxp $totaldead_att;
                    
    $database->modifyHeroXp("experience",$defheroxp,$toF['owner']);
                    }
                
    $enforcementarray1 $database->getEnforceVillage($to['wref'],0);
                if(
    count($enforcementarray1) > 0) {
                foreach(
    $enforcementarray1 as $enforce1) {
                                if(
    $enforce1['hero'] > 0){
                                
    $enforceowner $database->getVillageField($enforce1['from'],"owner");
                                
    $reinfheroxp $totaldead_att;
                                
    $database->modifyHeroXp("experience",$reinfheroxp,$enforceowner);
                                }
                }
                            }
                
    $database->modifyPoints($toF['owner'],'dpall',$totaldead_att );
                
    $database->modifyPoints($from['owner'],'apall',$totaldead_def);
                
    $database->modifyPoints($toF['owner'],'dp',$totaldead_att );
                
    $database->modifyPoints($from['owner'],'ap',$totaldead_def);
                
    $database->modifyPointsAlly($targetally,'Adp',$totaldead_att );
                
    $database->modifyPointsAlly($ownally,'Aap',$totaldead_def);
                
    $database->modifyPointsAlly($targetally,'dp',$totaldead_att );
                
    $database->modifyPointsAlly($ownally,'ap',$totaldead_def);



                if (
    $isoasis == 0){
                
    // get toatal cranny value:
                
    $buildarray $database->getResourceLevel($data['to']);
                
    $cranny 0;
                for(
    $i=19;$i<39;$i++){
                    if(
    $buildarray['f'.$i.'t']==23){
                    
    $cranny += $bid23[$buildarray['f'.$i.'']]['attri'];
                    }
                }

                
    //cranny efficiency
                
    $atk_bonus = ($owntribe == 2)? (4/5) : 1;
                
    $def_bonus = ($targettribe == 3)? 1;
                
    $to_owner $database->getVillageField($data['to'],"owner");
                
    $artefact_2 count($database->getOwnUniqueArtefactInfo2($to_owner,7,3,0));
                
    $artefact1_2 count($database->getOwnUniqueArtefactInfo2($data['to'],7,1,1));
                
    $artefact2_2 count($database->getOwnUniqueArtefactInfo2($to_owner,7,2,0));
                if(
    $artefact_2 0){
                
    $artefact_bouns 6;
                }else if(
    $artefact1_2 0){
                
    $artefact_bouns 3;
                }else if(
    $artefact2_2 0){
                
    $artefact_bouns 2;
                }else{
                
    $artefact_bouns 1;
                }
                
    $foolartefact $database->getFoolArtefactInfo(7,$vid,$session->uid);
                if(
    count($foolartefact) > 0){
                foreach(
    $foolartefact as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $cranny_eff *= $arte['effect2'];
                }else{
                
    $cranny_eff /= $arte['effect2'];
                
    $cranny_eff round($cranny_eff);
                }
                }
                }
                
    $cranny_eff = ($cranny $atk_bonus)*$def_bonus*$artefact_bouns;

                
    // work out available resources.
                
    $this->updateRes($data['to'],$to['owner']);
                
    $this->pruneResource();

                
    $totclay $database->getVillageField($data['to'],'clay');
                
    $totiron $database->getVillageField($data['to'],'iron');
                
    $totwood $database->getVillageField($data['to'],'wood');
                
    $totcrop $database->getVillageField($data['to'],'crop');
                }else{
                
    $cranny_eff 0;

                
    // work out available resources.
                
    $this->updateORes($data['to']);
                
    $this->pruneOResource();

                
    $totclay $database->getOasisField($data['to'],'clay');
                
    $totiron $database->getOasisField($data['to'],'iron');
                
    $totwood $database->getOasisField($data['to'],'wood');
                
    $totcrop $database->getOasisField($data['to'],'crop');
                }
                
    $avclay floor($totclay $cranny_eff);
                
    $aviron floor($totiron $cranny_eff);
                
    $avwood floor($totwood $cranny_eff);
                
    $avcrop floor($totcrop $cranny_eff);

                
    $avclay = ($avclay 0)? $avclay;
                
    $aviron = ($aviron 0)? $aviron;
                
    $avwood = ($avwood 0)? $avwood;
                
    $avcrop = ($avcrop 0)? $avcrop;


                
    $avtotal = array($avwood$avclay$aviron,  $avcrop);

                
    $av $avtotal;

                
    // resources (wood,clay,iron,crop)
                
    $steal = array(0,0,0,0);

                
    //bounty variables
                
    $btotal $battlepart['bounty'];
                
    $bmod 0;


                for(
    $i 0$i<5$i++)
                {
                    for(
    $j=0;$j<4;$j++)
                    {
                        if(isset(
    $avtotal[$j]))
                        {
                            if(
    $avtotal[$j]<1)
                                unset(
    $avtotal[$j]);
                        }
                    }
                    if(!
    $avtotal)
                    {
                        
    // echo 'array empty'; *no resources left to take.
                        
    break;
                    }
                    if(
    $btotal <&& $bmod <1)
                        break;
                    if(
    $btotal<1)
                    {
                        while(
    $bmod)
                        {
                            
    //random select
                            
    $rs array_rand($avtotal);
                            if(isset(
    $avtotal[$rs]))
                            {
                                
    $avtotal[$rs] -= 1;
                                
    $steal[$rs] += 1;
                                
    $bmod -= 1;
                            }
                        }
                    }

                    
    // handle unballanced amounts.
                    
    $btotal +=$bmod;
                    
    $bmod $btotal%count($avtotal);
                    
    $btotal -=$bmod;
                    
    $bsplit $btotal/count($avtotal);

                    
    $max_steal = (min($avtotal) < $bsplit)? min($avtotal): $bsplit;

                    for(
    $j=0;$j<4;$j++)
                    {
                        if(isset(
    $avtotal[$j]))
                        {
                            
    $avtotal[$j] -= $max_steal;
                            
    $steal[$j] += $max_steal;
                            
    $btotal -= $max_steal;
                        }
                    }
                }

                if (
    $isoasis == 0) {
                    
    $database->modifyResource($data["to"], $steal[0], $steal[1], $steal[2], $steal[3], false);
                    
    $this->pruneResource();
                } else {
                    
    $database->modifyOasisResource($data["to"], $steal[0], $steal[1], $steal[2], $steal[3], false);
                    
    $this->pruneOResource();
                }

                
    //work out time of return
                
    $start = ($owntribe-1)*10+1;
                
    $end = ($owntribe*10);

                
    $unitspeeds = array(6,5,7,16,14,10,4,3,4,5,
                                    
    7,7,6,9,10,9,4,3,4,5,
                                    
    7,6,17,19,16,13,4,3,4,5,
                                    
    7,7,6,9,10,9,4,3,4,5,
                                    
    7,7,6,9,10,9,4,3,4,5);

                
    $speeds = array();

                
    //find slowest unit.
                
    for($i=1;$i<=10;$i++)
                {
                    if (
    $data['t'.$i] > $battlepart['casualties_attacker'][$i]) {
                    if(
    $unitarray) { reset($unitarray); }
                    
    $unitarray $GLOBALS["u".(($owntribe-1)*10+$i)];
                    
    $speeds[] = $unitarray['speed'];
                     }
                }
                if (
    $herosend_att>0){
                    
    $qh "SELECT * FROM ".TB_PREFIX."hero WHERE uid = ".$from['owner']."";
                    
    $resulth mysql_query($qh);
                    
    $hero_f=mysql_fetch_array($resulth);
                    
    $hero_unit=$hero_f['unit'];
                    
    $speeds[] = $GLOBALS['u'.$hero_unit]['speed'];
                }

    // Data for when troops return.

                    //catapulten kijken :D
                
    $info_cat $info_chief $info_ram ",";

                if (
    $type=='3'){
                    if (
    $rams!='0'){
                        if (isset(
    $empty)){
                            
    $info_ram "".$ram_pic.",There is no wall to destroy.";
                        } else

                          if (
    $battlepart[8]>$battlepart[7]){
                                
    $info_ram "".$ram_pic.",Wall destroyed.";
                                
    $database->setVillageLevel($data['to'],"f".$wallid."",'0');
                                
    $database->setVillageLevel($data['to'],"f".$wallid."t",'0');
                                
    $pop=$this->recountPop($data['to']);

                        }elseif (
    $battlepart[8]==0){

                            
    $info_ram "".$ram_pic.",Wall was not damaged.";
                        }else{

                            
    $demolish=$battlepart[8]/$battlepart[7];
                            
    $totallvl round(sqrt(pow(($walllevel+0.5),2)-($battlepart[8]*8)));
                        if(
    $walllevel == $totallvl){
                        
    $info_ram "".$ram_pic.",Wall was not damaged.";
                        }else{
                        
    $info_ram "".$ram_pic.",Wall damaged from level <b>".$walllevel."</b> to level <b>".$totallvl."</b>.";
                                
    $database->setVillageLevel($data['to'],"f".$wallid."",$totallvl);
                        }

                        }
                    }
                }
               if (
    $type=='3')
    {
        if (
    $catp!='0')
        {
            
    $pop=$this->recountPop($data['to']);
            if(
    $pop<=0)
            {
                
    $info_cat ",".$catp_pic.", Village already destroyed.";
            }
            else
            {
                
    $basearray $data['to'];

                if (
    $data['ctar2']==0)
                {
                    
    $bdo2=mysql_query("select * from " TB_PREFIX "fdata where vref = $basearray");
                    
    $bdo=mysql_fetch_array($bdo2);

                    
    $rand=$data['ctar1'];

                    if (
    $rand != 0)
                    {
                        
    $_rand=array();
                        
    $__rand=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i.'t']==$rand && $bdo['f'.$i]>&& $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $j++;
                                
    $_rand[$j]=$bdo['f'.$i];
                                
    $__rand[$j]=$i;
                            }
                        }
                        if (
    count($_rand)>0)
                        {
                            if (
    max($_rand)<=0$rand=0;
                            else
                            {
                                
    $rand=rand(1$j);
                                
    $rand=$__rand[$rand];
                            }
                        }
                        else
                        {
                            
    $rand=0;
                        }
                    }

                    if (
    $rand == 0)
                    {
                        
    $list=array();
                        
    $j=1;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i] > && $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $list[$j]=$i;
                                
    $j++;
                            }
                        }
                        
    $rand=rand(1$j);
                        
    $rand=$list[$rand];
                    }

                    
    $tblevel $bdo['f'.$rand];
                    
    $tbgid $bdo['f'.$rand.'t'];
                    
    $tbid $rand;
                    if(
    $stonemason==0){
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200))) + 0.5);
                    }else{
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200) / ($bid34[$stonemason]['attri']/100))) + 0.5);
                    }
                    if (
    $battlepart[4]>$needed_cata)
                    {
                        
    $info_cat "".$catp_pic.", ".$this->procResType($tbgid)." destroyed.";
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",'0');
                        if(
    $tbid>=19) { $database->setVillageLevel($data['to'],"f".$tbid."t",'0'); }
                        
    $buildarray $GLOBALS["bid".$tbgid];
                        if (
    $tbgid==10 || $tbgid==38) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxstore=$t_sql['maxstore']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxstore<800$tmaxstore=800;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."'*32 WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        if (
    $tbgid==11 || $tbgid==39) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxcrop=$t_sql['maxcrop']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxcrop<800$tmaxcrop=800;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."'*32 WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        
    $pop=$this->recountPop($data['to']);
                        
    $capital $database->getVillage($data['to']);
                        if(
    $pop=='0' && $capital['capital']=='0')
                        {
                        
    $village_destroyed 1;
                        }
                    }
                    elseif (
    $battlepart[4]==0)
                    {
                        
    $info_cat "".$catp_pic.",".$this->procResType($tbgid)." was not damaged.";
                    }
                    else
                    {
                        
    $demolish=$battlepart[4]/$needed_cata;
                        
    $totallvl round(sqrt(pow(($tblevel+0.5),2)-($battlepart[4]*8)));
                        if (
    $tblevel==$totallvl)
                            
    $info_cata=" was not damaged.";
                        else
                        {
                            
    $info_cata=" damaged from level <b>".$tblevel."</b> to level <b>".$totallvl."</b>.";
                            
    $buildarray $GLOBALS["bid".$tbgid];
                            if (
    $tbgid==10 || $tbgid==38) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxstore=$t_sql['maxstore']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxstore<800$tmaxstore=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            if (
    $tbgid==11 || $tbgid==39) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxcrop=$t_sql['maxcrop']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxcrop<800$tmaxcrop=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            
    $pop=$this->recountPop($data['to']);
                        }
                        
    $info_cat "".$catp_pic.",".$this->procResType($tbgid).$info_cata;
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",$totallvl);
                    }
                }
                else
                {
                    
    $bdo2=mysql_query("select * from " TB_PREFIX "fdata where vref = $basearray");
                    
    $bdo=mysql_fetch_array($bdo2);
                    
    $rand=$data['ctar1'];
                    if (
    $rand != 0)
                    {
                        
    $_rand=array();
                        
    $__rand=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i.'t']==$rand && $bdo['f'.$i]>&& $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $j++;
                                
    $_rand[$j]=$bdo['f'.$i];
                                
    $__rand[$j]=$i;
                            }
                        }
                        if (
    count($_rand)>0)
                        {
                            if (
    max($_rand)<=0$rand=0;
                            else
                            {
                                
    $rand=rand(1$j);
                                
    $rand=$__rand[$rand];
                            }
                        }
                        else
                        {
                            
    $rand=0;
                        }
                    }

                    if (
    $rand == 0)
                    {
                        
    $list=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i] > && $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $j++;
                                
    $list[$j]=$i;
                            }
                        }
                        
    $rand=rand(1$j);
                        
    $rand=$list[$rand];
                    }

                    
    $tblevel $bdo['f'.$rand];
                    
    $tbgid $bdo['f'.$rand.'t'];
                    
    $tbid $rand;
                    if(
    $stonemason==0){
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200))) + 0.5);
                    }else{
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200) / ($bid34[$stonemason]['attri']/100))) + 0.5);
                    }
                    if ((
    $battlepart[4]/2)>$needed_cata)
                    {
                        
    $info_cat "".$catp_pic.", ".$this->procResType($tbgid)." destroyed.";
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",'0');
                        if(
    $tbid>=19) { $database->setVillageLevel($data['to'],"f".$tbid."t",'0'); }
                        
    $buildarray $GLOBALS["bid".$tbgid];
                        if (
    $tbgid==10 || $tbgid==38) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxstore=$t_sql['maxstore']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxstore<800$tmaxstore=800*32;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        if (
    $tbgid==11 || $tbgid==39) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxcrop=$t_sql['maxcrop']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxcrop<800$tmaxcrop=800*32;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        
    $pop=$this->recountPop($data['to']);
                        if(
    $pop=='0')
                        {
                            
    $varray $database->getProfileVillages($to['owner']);
                            if(
    count($varray)!='1' AND $to['capital']!='1'){
                            
    $village_destroyed 1;
                            }
                        }
                    }
                    elseif (
    $battlepart[4]==0)
                    {
                        
    $info_cat "".$catp_pic.",".$this->procResType($tbgid)." was not damaged.";
                    }
                    else
                    {
                        
    $demolish=($battlepart[4]/2)/$needed_cata;
                        
    $totallvl round(sqrt(pow(($tblevel+0.5),2)-(($battlepart[4]/2)*8)));
                        if (
    $tblevel==$totallvl)
                            
    $info_cata=" was not damaged.";
                        else
                        {
                            
    $info_cata=" damaged from level <b>".$tblevel."</b> to level <b>".$totallvl."</b>.";
                            
    $buildarray $GLOBALS["bid".$tbgid];
                            if (
    $tbgid==10 || $tbgid==38) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxstore=$t_sql['maxstore']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxstore<800$tmaxstore=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            if (
    $tbgid==11 || $tbgid==39) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxcrop=$t_sql['maxcrop']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxcrop<800$tmaxcrop=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            
    $pop=$this->recountPop($data['to']);
                        }
                        
    $info_cat "".$catp_pic.",".$this->procResType($tbgid).$info_cata;
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",$totallvl);
                    }
                    
    $bdo2=mysql_query("select * from " TB_PREFIX "fdata where vref = $basearray");
                    
    $bdo=mysql_fetch_array($bdo2);
                    
    $rand=$data['ctar2'];
                    if (
    $rand != 99)
                    {
                        
    $_rand=array();
                        
    $__rand=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i.'t']==$rand && $bdo['f'.$i]>&& $rand != 31 && $rand != 32 && $rand != 33)
                            {
                                
    $j++;
                                
    $_rand[$j]=$bdo['f'.$i];
                                
    $__rand[$j]=$i;
                            }
                        }
                        if (
    count($_rand)>0)
                        {
                            if (
    max($_rand)<=0$rand=99;
                            else
                            {
                                
    $rand=rand(1$j);
                                
    $rand=$__rand[$rand];
                            }
                        }
                        else
                        {
                            
    $rand=99;
                        }
                    }

                    if (
    $rand == 99)
                    {
                        
    $list=array();
                        
    $j=0;
                        for (
    $i=1;$i<=41;$i++)
                        {
                            if (
    $i==41$i=99;
                            if (
    $bdo['f'.$i] > 0)
                            {
                                
    $j++;
                                
    $list[$j]=$i;
                            }
                        }
                        
    $rand=rand(1$j);
                        
    $rand=$list[$rand];
                    }

                    
    $tblevel $bdo['f'.$rand];
                    
    $tbgid $bdo['f'.$rand.'t'];
                    
    $tbid $rand;
                    if(
    $stonemason==0){
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200))) + 0.5);
                    }else{
                    
    $needed_cata round((($battlepart[5] * (pow($tblevel,2) + $tblevel 1)) / (* (round(200 pow(1.0205,$battlepart[6]))/200) / ($bid34[$stonemason]['attri']/100))) + 0.5);
                    }
                    if ((
    $battlepart[4]/2)>$needed_cata)
                    {
                        
    $info_cat .= "<br><tbody class=\"goods\"><tr><th>Information</th><td colspan=\"11\">
                        <img class=\"unit u"
    .$catp_pic."\" src=\"img/x.gif\" alt=\"Catapult\" title=\"Catapult\" /> ".$this->procResType($tbgid)." destroyed.</td></tr></tbody>";
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",'0');
                        if(
    $tbid>=19) { $database->setVillageLevel($data['to'],"f".$tbid."t",'0'); }
                        
    $buildarray $GLOBALS["bid".$tbgid];
                        if (
    $tbgid==10 || $tbgid==38) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxstore=$t_sql['maxstore']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxstore<800$tmaxstore=800;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        if (
    $tbgid==11 || $tbgid==39) {
                            
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                            
    $t_sql=mysql_fetch_array($tsql);
                            
    $tmaxcrop=$t_sql['maxcrop']-$buildarray[$tblevel]['attri'];
                            if (
    $tmaxcrop<800$tmaxcrop=800;
                            
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                            
    $database->query($q);
                        }
                        
    $pop=$this->recountPop($data['to']);
                        if(
    $pop=='0')
                        {
                            
    $varray $database->getProfileVillages($to['owner']);
                            if(
    count($varray)!='1' AND $to['capital']!='1'){
                            
    $village_destroyed 1;
                            }
                        }
                    }
                    elseif (
    $battlepart[4]==0)
                    {
                        
    $info_cat .= "<br><tbody class=\"goods\"><tr><th>Information</th><td colspan=\"11\">
                        <img class=\"unit u"
    .$catp_pic."\" src=\"img/x.gif\" alt=\"Catapult\" title=\"Catapult\" /> ".$this->procResType($tbgid)." was not damaged.</td></tr></tbody>";
                    }
                    else
                    {
                        
    $demolish=($battlepart[4]/2)/$needed_cata;
                        
    $totallvl round(sqrt(pow(($tblevel+0.5),2)-(($battlepart[4]/2)*8)));
                        if (
    $tblevel==$totallvl)
                            
    $info_cata=" was not damaged.";
                        else
                        {
                            
    $info_cata=" damaged from level <b>".$tblevel."</b> to level <b>".$totallvl."</b>.";
                            
    $buildarray $GLOBALS["bid".$tbgid];
                            if (
    $tbgid==10 || $tbgid==38) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxstore=$t_sql['maxstore']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxstore<800$tmaxstore=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`='".$tmaxstore."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            if (
    $tbgid==11 || $tbgid==39) {
                                
    $tsql=mysql_query("select `maxstore`,`maxcrop` from ".TB_PREFIX."vdata where wref=".$data['to']."");
                                
    $t_sql=mysql_fetch_array($tsql);
                                
    $tmaxcrop=$t_sql['maxcrop']+$buildarray[$totallvl]['attri']-$buildarray[$tblevel]['attri'];
                                if (
    $tmaxcrop<800$tmaxcrop=800;
                                
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`='".$tmaxcrop."' WHERE wref=".$data['to'];
                                
    $database->query($q);
                            }
                            
    $pop=$this->recountPop($data['to']);
                        }

                        
    $info_cat .= "<br><tbody class=\"goods\"><tr><th>Information</th><td colspan=\"11\">
                        <img class=\"unit u"
    .$catp_pic."\" src=\"img/x.gif\" alt=\"Catapult\" title=\"Catapult\" /> ".$this->procResType($tbgid).$info_cata."</td></tr></tbody>";
                        
    $database->setVillageLevel($data['to'],"f".$tbid."",$totallvl);

                    }
                }
            }
        }
    }

            
    //chiefing village
            //there are senators
            
    if(($data['t9']-$dead9)>0){

                
    $palacelevel $database->getResourceLevel($from['wref']);
                for(
    $i=1;$i<=40;$i++) {
                if(
    $palacelevel['f'.$i.'t'] == 26){
                
    $plevel $i;
                }else if(
    $palacelevel['f'.$i.'t'] == 25){
                
    $plevel $i;
                }
                }
                if(
    $palacelevel['f'.$plevel.'t'] == 26){
                if(
    $palacelevel['f'.$plevel] < 10){
                   
    $canconquer 0;
                }
                elseif(
    $palacelevel['f'.$plevel] < 15){
                   
    $canconquer 1;
                }
                elseif(
    $palacelevel['f'.$plevel] < 20){
                   
    $canconquer 2;
                }
                else{
                   
    $canconquer 3;
                }
                }else if(
    $palacelevel['f'.$plevel.'t'] == 25){
                if(
    $palacelevel['f'.$plevel] < 10){
                   
    $canconquer 0;
                }
                elseif(
    $palacelevel['f'.$plevel] < 20){
                   
    $canconquer 1;
                }
                else{
                   
    $canconquer 2;
                }
                }

                
    $exp1 $database->getVillageField($from['wref'],'exp1');
                
    $exp2 $database->getVillageField($from['wref'],'exp2');
                
    $exp3 $database->getVillageField($from['wref'],'exp3');
                if(
    $exp1 == 0){
                   
    $villexp 0;
                }
                elseif(
    $exp2 == 0){
                   
    $villexp 1;
                }
                elseif(
    $exp3 == 0){
                   
    $villexp 2;
                }
                else{
                   
    $villexp 3;
                }
                
    $varray $database->getProfileVillages($to['owner']);
                
    $varray1 count($database->getProfileVillages($from['owner']));
                
    $mode CP;
                
    $cp_mode $GLOBALS['cp'.$mode];
                
    $need_cps $cp_mode[$varray1+1];
                
    $user_cps $database->getUserField($from['owner'],"cp",0);
                
    //kijken of laatste dorp is, of hoofddorp
                
    if($user_cps >= $need_cps){
                if(
    count($varray)!='1' AND $to['capital']!='1' AND $villexp $canconquer){
                if(
    $to['owner']!=OR $to['name']!='WW Buildingplan'){
                    
    //if there is no Palace/Residence
                    
    for ($i=18$i<39$i++){
                        if (
    $database->getFieldLevel($data['to'],"".$i."t")==25 or $database->getFieldLevel($data['to'],"".$i."t")==26){
                            
    $nochiefing='1';
                                
    $info_chief "".$chief_pic.",The Palace/Residence isn\'t destroyed!";
                        }
                    }
                    if(!isset(
    $nochiefing)){
                        
    //$info_chief = "".$chief_pic.",You don't have enought CP to chief a village.";
                        
    if($this->getTypeLevel(35,$data['from']) == 0){
                        for (
    $i=0$i<($data['t9']-$dead9); $i++){
                        if(
    $owntribe == 1){
                        
    $rand+=rand(20,30);
                        }else{
                        
    $rand+=rand(20,25);
                        }
                        }
                        }else{
                        for (
    $i=0$i<($data['t9']-$dead9); $i++){
                        
    $rand+=rand(5,15);
                        }
                        }
                        
    //loyalty is more than 0
                        
    if(($toF['loyalty']-$rand)>0){
                            
    $info_chief "".$chief_pic.",The loyalty was lowered from <b>".floor($toF['loyalty'])."</b> to <b>".floor($toF['loyalty']-$rand)."</b>.";
                            
    $database->setVillageField($data['to'],loyalty,($toF['loyalty']-$rand));
                        } else {
                        
    //you took over the village
                            
    $villname addslashes($database->getVillageField($data['to'],"name"));
                            
    $artifact $database->getOwnArtefactInfo($data['to']);
                            
    $info_chief "".$chief_pic.",Inhabitants of ".$villname." village decided to join your empire.";
                            if (
    $artifact['vref'] == $data['to']){
                             
    $database->claimArtefact($data['to'],$data['to'],$database->getVillageField($data['from'],"owner"));
                            }
                            
    $database->setVillageField($data['to'],loyalty,0);
                            
    $database->setVillageField($data['to'],owner,$database->getVillageField($data['from'],"owner"));
                            
    //delete upgrades in armory and blacksmith
                            
    $q "DELETE FROM ".TB_PREFIX."abdata WHERE vref = ".$data['to']."";
                            
    $database->query($q);
                            
    $database->addABTech($data['to']);
                            
    //delete researches in academy
                            
    $q "DELETE FROM ".TB_PREFIX."tdata WHERE vref = ".$data['to']."";
                            
    $database->query($q);
                            
    $database->addTech($data['to']);
                            
    //delete reinforcement
                            
    $q "DELETE FROM ".TB_PREFIX."enforcement WHERE from = ".$data['to']."";
                            
    $database->query($q);
                            
    // check buildings
                            
    $pop1 $database->getVillageField($data['from'],"pop");
                            
    $pop2 $database->getVillageField($data['to'],"pop");
                            if(
    $pop1 $pop2){
                            
    $buildlevel $database->getResourceLevel($data['to']);
                            for (
    $i=1$i<=39$i++){
                            if(
    $buildlevel['f'.$i]!=0){
                            if(
    $buildlevel['f'.$i."t"]!=35 && $buildlevel['f'.$i."t"]!=36 && $buildlevel['f'.$i."t"]!=41){
                            
    $leveldown $buildlevel['f'.$i]-1;
                            
    $database->setVillageLevel($data['to'],"f".$i,$leveldown);
                            }else{
                            
    $database->setVillageLevel($data['to'],"f".$i,0);
                            
    $database->setVillageLevel($data['to'],"f".$i."t",0);
                            }
                            }
                            }
                            if(
    $buildlevel['f99']!=0){
                            
    $leveldown $buildlevel['f99']-1;
                            
    $database->setVillageLevel($data['to'],"f99",$leveldown);
                            }
                            }
                            
    //destroy wall
                            
    $database->setVillageLevel($data['to'],"f40",0);
                            
    $database->setVillageLevel($data['to'],"f40t",0);
                            
    $database->clearExpansionSlot($data['to']);


                            
    $exp1 $database->getVillageField($data['from'],'exp1');
                            
    $exp2 $database->getVillageField($data['from'],'exp2');
                            
    $exp3 $database->getVillageField($data['from'],'exp3');

                            if(
    $exp1 == 0){
                                
    $exp 'exp1';
                                
    $value $data['to'];
                            }
                            elseif(
    $exp2 == 0){
                                
    $exp 'exp2';
                                
    $value $data['to'];
                            }
                            else{
                                
    $exp 'exp3';
                                
    $value $data['to'];
                            }
                            
    $database->setVillageField($data['from'],$exp,$value);
                            
    $chiefing_village 1;

                        }
                    }
                } else {
                    
    $info_chief "".$chief_pic.",You cant take over this village.";
                }
                } else {
                    
    $info_chief "".$chief_pic.",You cant take over this village.";
                }
                } else {
                    
    $info_chief "".$chief_pic.",Not enough culture points.";
                }
                unset(
    $plevel);
            }

    if(
    $data['t11'] > 0){
                if (
    $isoasis != 0) {
                    if (
    $database->canConquerOasis($data['from'],$data['to'])) {
                    if(
    $unitssend_def[1] == '0,0,0,0,0,0,0,0,0,0' and $unitssend_def[2] == '0,0,0,0,0,0,0,0,0,0' and $unitssend_def[3] == '0,0,0,0,0,0,0,0,0,0' and $unitssend_def[4] == '0,0,0,0,0,0,0,0,0,0' and $unitssend_def[5] == '0,0,0,0,0,0,0,0,0,0'){
                        
    $database->conquerOasis($data['from'],$data['to']);
                        
    $info_chief $hero_pic.",Your hero has conquered this oasis";
                    }
                    } else {
                        
    $OasisInfo $database->getOasisInfo($data['to']);
                        if (
    $OasisInfo['conqured'] != 0) {
                            
    $Oloyaltybefore =  $OasisInfo['loyalty'];
                            
    $database->modifyOasisLoyalty($data['to']);
                            
    $OasisInfo $database->getOasisInfo($data['to']);
                            
    $Oloyaltynow =  $OasisInfo['loyalty'];
                            
    $info_chief $hero_pic.",Your hero has reduced oasis loyalty to ".$Oloyaltynow." from ".$Oloyaltybefore." and gained ".$heroxp." XP";
                        } else {
                            if (
    $heroxp == 0) {
                                
    $info_chief $hero_pic.",Your hero had nothing to kill therfore gains no XP at all";
                            } else {
                                
    $info_chief $hero_pic.",Your hero gained ".$heroxp." XP";
                            }
                        }
                    }
                } else {
                    
    $artifact $database->getOwnArtefactInfo($data['to']);
                    if (
    $artifact['vref'] == $data['to']) {
                        if (
    $database->canClaimArtifact($data['from'],$artifact['vref'],$artifact['size'],$artifact['type'])) {
                            
    $database->claimArtefact($data['from'],$data['to'],$database->getVillageField($data['from'],"owner"));
                            
    $info_chief $hero_pic.",Your hero is carrying home a artefact and gained ".$heroxp." XP from the battle";
                        } else {
                            
    $info_chief $hero_pic.",Your hero could not claim the artefact and gained ".$heroxp." XP from the battle";

                        }
                    }
                }
            }

                    if(
    $scout){
                    if (
    $data['spy'] == 1){
                    
    $info_spy "".$spy_pic.",<div class=\"res\"><img class=\"r1\" src=\"img/x.gif\" alt=\"Lumber\" title=\"Lumber\" />".round($totwood)." |
                     <img class=\"r2\" src=\"img/x.gif\" alt=\"Clay\" title=\"Clay\" />"
    .round($totclay)." |
                     <img class=\"r3\" src=\"img/x.gif\" alt=\"Iron\" title=\"Iron\" />"
    .round($totiron)." |
                     <img class=\"r4\" src=\"img/x.gif\" alt=\"Crop\" title=\"Crop\" />"
    .round($totcrop)."</div>
                     <div class=\"carry\"><img class=\"car\" src=\"img/x.gif\" alt=\"carry\" title=\"carry\" />Total Resources : "
    .round($totwood+$totclay+$totiron+$totcrop)."</div>
        "
    ;
                    }else if(
    $data['spy'] == 2){
                        if (
    $isoasis == 0){
                    
    $resarray $database->getResourceLevel($data['to']);


                    
    $crannylevel =0;
                    
    $rplevel 0;
                    
    $walllevel 0;
                    for(
    $j=19;$j<=40;$j++) {
                    if(
    $resarray['f'.$j.'t'] == 25 || $resarray['f'.$j.'t'] == 26 ) {

                    
    $rplevel $database->getFieldLevel($data['to'],$j);

                    }
                    }
                    for(
    $j=19;$j<=40;$j++) {
                    if(
    $resarray['f'.$j.'t'] == 31 || $resarray['f'.$j.'t'] == 32 || $resarray['f'.$j.'t'] == 33) {

                    
    $walllevel $database->getFieldLevel($data['to'],$j);

                    }
                    }
                    for(
    $j=19;$j<=40;$j++) {
                    if(
    $resarray['f'.$j.'t'] == 23) {

                    
    $crannylevel $database->getFieldLevel($data['to'],$j);

                    }
                    }
                        }else {
                            
    $crannylevel =0;
                            
    $walllevel =0;
                            
    $rplevel =0;
                        }
    $palaceimg "<img src=\"".GP_LOCATE."img/g/g26.gif\" height=\"20\" width=\"15\" alt=\"Palace\" title=\"Palace\" />";
    $crannyimg "<img src=\"".GP_LOCATE."img/g/g23.gif\" height=\"20\" width=\"15\" alt=\"Cranny\" title=\"Cranny\" />";
                    
    $info_spy "".$spy_pic.",".$palaceimg." Residance/Palace Level : ".$rplevel."
                    <br>"
    .$crannyimg." Cranny level: ".$crannylevel."<br><br>Wall Level : ".$walllevel."";

                    }

                    
    $data2 ''.$from['owner'].','.$from['wref'].','.$owntribe.','.$unitssend_att.','.$unitsdead_att.',0,0,0,0,0,'.$to['owner'].','.$to['wref'].','.addslashes($to['name']).','.$targettribe.',,,'.$rom.','.$unitssend_def[1].','.$unitsdead_def[1].','.$ger.','.$unitssend_def[2].','.$unitsdead_def[2].','.$gal.','.$unitssend_def[3].','.$unitsdead_def[3].','.$nat.','.$unitssend_def[4].','.$unitsdead_def[4].','.$natar.','.$unitssend_def[5].','.$unitsdead_def[5].','.$info_ram.','.$info_cat.','.$info_chief.','.$info_spy.',,'.$data['t11'].','.$dead11.','.$herosend_def.','.$deadhero.','.$unitstraped_att;
                }
                else{
                    
    $data2 ''.$from['owner'].','.$from['wref'].','.$owntribe.','.$unitssend_att.','.$unitsdead_att.','.$steal[0].','.$steal[1].','.$steal[2].','.$steal[3].','.$battlepart['bounty'].','.$to['owner'].','.$to['wref'].','.addslashes($to['name']).','.$targettribe.',,,'.$rom.','.$unitssend_def[1].','.$unitsdead_def[1].','.$ger.','.$unitssend_def[2].','.$unitsdead_def[2].','.$gal.','.$unitssend_def[3].','.$unitsdead_def[3].','.$nat.','.$unitssend_def[4].','.$unitsdead_def[4].','.$natar.','.$unitssend_def[5].','.$unitsdead_def[5].','.$info_ram.','.$info_cat.','.$info_chief.','.$info_spy.',,'.$data['t11'].','.$dead11.','.$herosend_def.','.$deadhero.','.$unitstraped_att;
                }





                
    // When all troops die, sends no info.
                
    $data_fail ''.$from['owner'].','.$from['wref'].','.$owntribe.','.$unitssend_att.','.$unitsdead_att.','.$steal[0].','.$steal[1].','.$steal[2].','.$steal[3].','.$battlepart['bounty'].','.$to['owner'].','.$to['wref'].','.addslashes($to['name']).','.$targettribe.',,,'.$rom.','.$unitssend_deff[1].','.$unitsdead_deff[1].','.$ger.','.$unitssend_deff[2].','.$unitsdead_deff[2].','.$gal.','.$unitssend_deff[3].','.$unitsdead_deff[3].','.$nat.','.$unitssend_deff[4].','.$unitsdead_deff[4].','.$natar.','.$unitssend_deff[5].','.$unitsdead_deff[5].',,,'.$data['t11'].','.$dead11.','.$unitstraped_att.',,';

                
    //Undetected and detected in here.
                
    if($scout){
                    for(
    $i=1;$i<=10;$i++)
                    {
                        if(
    $battlepart['casualties_attacker'][$i]){
                        if(
    $from['owner'] == 3){
                            
    $database->addNotice($to['owner'],$to['wref'],$targetally,0,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                            break;
                        }else if(
    $unitsdead_att == $unitssend_att){
                            
    $database->addNotice($to['owner'],$to['wref'],$targetally,20,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                            break;
                            }else{
                            
    $database->addNotice($to['owner'],$to['wref'],$targetally,21,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                            break;
                            }
                        }
                    }
                }
                else {
                if(
    $type == && $totalsend_att - ($totaldead_att+$totaltraped_att) > 0){
                
    $prisoners $database->getPrisoners($to['wref']);
                if(
    count($prisoners) > 0){
                
    $anothertroops 0;
                foreach(
    $prisoners as $prisoner){
                
    $p_owner $database->getVillageField($prisoner['from'],"owner");
                if(
    $p_owner == $from['owner']){
                
    $database->modifyAttack2($data['ref'],1,$prisoner['t1']);
                
    $database->modifyAttack2($data['ref'],2,$prisoner['t2']);
                
    $database->modifyAttack2($data['ref'],3,$prisoner['t3']);
                
    $database->modifyAttack2($data['ref'],4,$prisoner['t4']);
                
    $database->modifyAttack2($data['ref'],5,$prisoner['t5']);
                
    $database->modifyAttack2($data['ref'],6,$prisoner['t6']);
                
    $database->modifyAttack2($data['ref'],7,$prisoner['t7']);
                
    $database->modifyAttack2($data['ref'],8,$prisoner['t8']);
                
    $database->modifyAttack2($data['ref'],9,$prisoner['t9']);
                
    $database->modifyAttack2($data['ref'],10,$prisoner['t10']);
                
    $database->modifyAttack2($data['ref'],11,$prisoner['t11']);
                
    $mytroops $prisoner['t1']+$prisoner['t2']+$prisoner['t3']+$prisoner['t4']+$prisoner['t5']+$prisoner['t6']+$prisoner['t7']+$prisoner['t8']+$prisoner['t9']+$prisoner['t10']+$prisoner['t11'];
                
    $newtraps round($mytroops/3);
                
    $database->modifyUnit($data['to'],array("99"),array($newtraps),array(0));
                
    $database->modifyUnit($data['to'],array("99o"),array($mytroops),array(0));
                }else{
                
    $p_alliance $database->getUserField($p_owner,"alliance",0);
                
    $friendarray $database->getAllianceAlly($p_alliance,1);
                
    $neutralarray $database->getAllianceAlly($p_alliance,2);
                
    $friend = (($friendarray[0]['alli1']>and $friendarray[0]['alli2']>and $p_alliance>0) and ($friendarray[0]['alli1']==$ownally or $friendarray[0]['alli2']==$ownally) and ($ownally != $p_alliance and $ownally and $p_alliance)) ? '1':'0';
                
    $neutral = (($neutralarray[0]['alli1']>and $neutralarray[0]['alli2']>and $p_alliance>0) and ($neutralarray[0]['alli1']==$ownally or $neutralarray[0]['alli2']==$ownally) and ($ownally != $p_alliance and $ownally and $p_alliance)) ? '1':'0';
                if(
    $p_alliance == $ownally or $friend == or $neutral == 1){
                
    $p_tribe $database->getUserField($p_owner,"tribe",0);
                
                
    $p_eigen $database->getCoor($prisoner['wref']);
                
    $p_from = array('x'=>$p_eigen['x'], 'y'=>$p_eigen['y']);
                
    $p_ander $database->getCoor($prisoner['from']);
                
    $p_to = array('x'=>$p_ander['x'], 'y'=>$p_ander['y']);
                
    $p_tribe $database->getUserField($p_owner,"tribe",0);
                
                
    $p_speeds = array();
        
                
    //find slowest unit.            
                
    for($i=1;$i<=10;$i++){
                    if (
    $prisoner['t'.$i]){
                        if(
    $prisoner['t'.$i] != '' && $prisoner['t'.$i] > 0){
                            if(
    $p_unitarray) { reset($p_unitarray); }
                            
    $p_unitarray $GLOBALS["u".(($p_tribe-1)*10+$i)];
                            
    $p_speeds[] = $p_unitarray['speed'];
                        }
                    }
                }
                
                if (
    $prisoner['t11']>0){
                    
    $p_qh "SELECT * FROM ".TB_PREFIX."hero WHERE uid = ".$p_owner."";
                    
    $p_resulth mysql_query($p_qh);
                    
    $p_hero_f=mysql_fetch_array($p_resulth);
                    
    $p_hero_unit=$p_hero_f['unit'];
                    
    $p_speeds[] = $GLOBALS['u'.$p_hero_unit]['speed'];
                }
                
                
    $p_artefact count($database->getOwnUniqueArtefactInfo2($p_owner,2,3,0));
                
    $p_artefact1 count($database->getOwnUniqueArtefactInfo2($prisoner['from'],2,1,1));
                
    $p_artefact2 count($database->getOwnUniqueArtefactInfo2($p_owner,2,2,0));
                if(
    $p_artefact 0){
                
    $p_fastertroops 3;
                }else if(
    $p_artefact1 0){
                
    $p_fastertroops 2;
                }else if(
    $p_artefact2 0){
                
    $p_fastertroops 1.5;
                }else{
                
    $p_fastertroops 1;
                }
                
    $p_time round($this->procDistanceTime($p_to,$p_from,min($p_speeds),1)/$p_fastertroops);
                
    $foolartefact1 $database->getFoolArtefactInfo(2,$prisoner['from'],$p_owner);
                if(
    count($foolartefact1) > 0){
                foreach(
    $foolartefact1 as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $p_time *= $arte['effect2'];
                }else{
                
    $p_time /= $arte['effect2'];
                
    $p_time round($p_time);
                }
                }
                }
                
    $p_reference $database->addAttack($prisoner['from'],$prisoner['t1'],$prisoner['t2'],$prisoner['t3'],$prisoner['t4'],$prisoner['t5'],$prisoner['t6'],$prisoner['t7'],$prisoner['t8'],$prisoner['t9'],$prisoner['t10'],$prisoner['t11'],3,0,0,0,0,0,0,0,0,0,0,0);
                
    $database->addMovement(4,$prisoner['wref'],$prisoner['from'],$p_reference,time(),($p_time+time()));
                
    $anothertroops += $prisoner['t1']+$prisoner['t2']+$prisoner['t3']+$prisoner['t4']+$prisoner['t5']+$prisoner['t6']+$prisoner['t7']+$prisoner['t8']+$prisoner['t9']+$prisoner['t10']+$prisoner['t11'];
                
    $newtraps = (round($anothertroops/3))*2;
                
    $database->modifyUnit($data['to'],array("99"),array($newtraps),array(0));
                
    $database->modifyUnit($data['to'],array("99o"),array($anothertroops),array(0));
                }
                }
                
    $database->deletePrisoners($prisoner['id']);
                }
                
    $trapper_pic "<img src=\"".GP_LOCATE."img/u/98.gif\" alt=\"Trap\" title=\"Trap\" />";
                
    $p_username $database->getUserField($from['owner'],"username",0);
                if(
    $mytroops && $anothertroops 0){
                
    $info_trap "".$trapper_pic." ".$p_username." released <b>".$mytroops."</b> from his troops and <b>".$anothertroops."</b> friendly troops.";
                }elseif(
    $mytroops 0){
                
    $info_trap "".$trapper_pic." ".$p_username." released <b>".$mytroops."</b> from his troops.";
                }elseif(
    $anothertroops 0){
                
    $info_trap "".$trapper_pic." ".$p_username." released <b>".$anothertroops."</b> friendly troops.";
                }
                }
                }
                
    $data2 $data2.','.addslashes($info_trap).',,';
                if(
    $totalsend_alldef == 0){
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,7,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                }else if(
    $totaldead_alldef == 0){
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,4,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                }else if(
    $totalsend_alldef $totaldead_alldef){
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,5,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                }else if(
    $totalsend_alldef == $totaldead_alldef){
                
    $database->addNotice($to['owner'],$to['wref'],$targetally,6,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                }
                }
                
    //to here
                // If the dead units not equal the ammount sent they will return and report
                
    if($totalsend_att - ($totaldead_att+$totaltraped_att) > 0)
                {
                
    $artefact count($database->getOwnUniqueArtefactInfo2($from['owner'],2,3,0));
                
    $artefact1 count($database->getOwnUniqueArtefactInfo2($from['wref'],2,1,1));
                
    $artefact2 count($database->getOwnUniqueArtefactInfo2($from['owner'],2,2,0));
                if(
    $artefact 0){
                
    $fastertroops 3;
                }else if(
    $artefact1 0){
                
    $fastertroops 2;
                }else if(
    $artefact2 0){
                
    $fastertroops 1.5;
                }else{
                
    $fastertroops 1;
                }
                
    $endtime round($this->procDistanceTime($from,$to,min($speeds),1)/$fastertroops);
                
    $foolartefact2 $database->getFoolArtefactInfo(2,$from['wref'],$from['owner']);
                if(
    count($foolartefact2) > 0){
                foreach(
    $foolartefact2 as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $endtime *= $arte['effect2'];
                }else{
                
    $endtime /= $arte['effect2'];
                
    $endtime round($endtime);
                }
                }
                }
                
    $endtime += time();
                    if(
    $type == 1) {
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,18,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                    }else {
                        if (
    $totaldead_att == && $totaltraped_att == 0){
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,1,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                        }else{
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,2,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
                        }
                    }

                    
    $database->setMovementProc($data['moveid']);
                    if(
    $chiefing_village != && $village_destroyed != 1){
                    
    $database->addMovement(4,$to['wref'],$from['wref'],$data['ref'],time(),$endtime);
                    
    // send the bounty on type 6.
                    
    if($type !== 1)
                    {
                        
    $reference $database->sendResource($steal[0],$steal[1],$steal[2],$steal[3],0,0);
                        
    $database->addMovement(6,$to['wref'],$from['wref'],$reference,time(),$endtime,1,0,0,0,0,$data['ref']);
                        
    $totalstolengain=$steal[0]+$steal[1]+$steal[2]+$steal[3];
                        
    $totalstolentaken=($totalstolentaken-($steal[0]+$steal[1]+$steal[2]+$steal[3]));
                        
    $database->modifyPoints($from['owner'],'RR',$totalstolengain);
                        
    $database->modifyPoints($to['owner'],'RR',$totalstolentaken);
                        
    $database->modifyPointsAlly($targetally,'RR',$totalstolentaken );
                        
    $database->modifyPointsAlly($ownally,'RR',$totalstolengain);
                    }
                    }else if(
    $chiefing_village == 1){
                    
    $database->addEnforce2($data,$owntribe,$troopsdead1,$troopsdead2,$troopsdead3,$troopsdead4,$troopsdead5,$troopsdead6,$troopsdead7,$troopsdead8,$troopsdead9,$troopsdead10,$troopsdead11);
                    }
                }
                else 
    //else they die and don't return or report.
                
    {
                    
    $database->setMovementProc($data['moveid']);
                    if(
    $type == 1){
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,19,addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
                    }else{
                        
    $database->addNotice($from['owner'],$to['wref'],$ownally,3,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
                        }
                }
                if(
    $type == or $type == 4){
                
    $database->addGeneralAttack($totalattackdead);
                }
                            if(
    $village_destroyed == 1){
                            
    $varray $database->getProfileVillages($to['owner']);
                            if(
    count($varray)!='1' AND $to['capital']!='1'){
                                    
    $database->clearExpansionSlot($data['to']);
                                    
    $q "DELETE FROM ".TB_PREFIX."abdata where wref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."bdata where wid = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."enforcement where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."fdata where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."market where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."odata where wref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."research where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."tdata where vref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."training where vref =".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."units where vref =".$data['to'];
                                    
    $database->query($q);
                                    
    $q "DELETE FROM ".TB_PREFIX."vdata where wref = ".$data['to'];
                                    
    $database->query($q);
                                    
    $q "UPDATE ".TB_PREFIX."wdata set occupied = 0 where id = ".$data['to'];
                                    
    $database->query($q);
                                    
    $getmovement $database->getMovement(3,$data['to'],1);
                                    foreach(
    $getmovement as $movedata) {
                                    
    $time time();
                                    
    $time2 $time $movedata['starttime'];
                                    
    $database->addMovement(4,$movedata['to'],$movedata['from'],$movedata['ref'],$time,$time+$time2);
                                    
    $database->setMovementProc($movedata['moveid']);
                                    }
                                    
    $q "DELETE FROM ".TB_PREFIX."movement where from = ".$data['to'];
                                    
    $database->query($q);
                                    
    $getprisoners $database->getPrisoners($data['to']);
                                    foreach(
    $getprisoners as $pris) {
                                    
    $troops 0;
                                    for(
    $i=1;$i<12;$i++){
                                    
    $troops += $pris['t'.$i];
                                    }
                                    
    $database->modifyUnit($pris['wref'],array("99o"),array($troops),array(0));
                                    
    $database->deletePrisoners($pris['id']);
                                    }
                                    
    $getprisoners $database->getPrisoners3($data['to']);
                                    foreach(
    $getprisoners as $pris) {
                                    
    $troops 0;
                                    for(
    $i=1;$i<12;$i++){
                                    
    $troops += $pris['t'.$i];
                                    }
                                    
    $database->modifyUnit($pris['wref'],array("99o"),array($troops),array(0));
                                    
    $database->deletePrisoners($pris['id']);
                                    }
                                    
    $enforcement $database->getEnforceVillage($data['to'],0);
                                    foreach(
    $enforcement as $enforce) {
                                    
    $time time();
                                    
    $fromcoor $database->getCoor($enforce['vref']);
                                    
    $tocoor $database->getCoor($enforce['from']);
                                    
    $targettribe $database->getUserField($database->getVillageField($enforce['from'],"owner"),"tribe",0);
                                    
    $time2 $this->procDistanceTime($tocoor,$fromcoor,$targettribe,0);
                                    
    $start 10*($targettribe-1);
                                    for(
    $i=1;$i<11;$i++){
                                    
    $unit $start $i;
                                    
    $post['t'.$i] = $enforce['u'.$unit];
                                    }
                                    
    $post['t11'] = $enforce['hero'];
                                    
    $reference $database->addAttack($enforce['from'],$post['t1'],$post['t2'],$post['t3'],$post['t4'],$post['t5'],$post['t6'],$post['t7'],$post['t8'],$post['t9'],$post['t10'],$post['t11'],2,0,0,0,0);
                                    
    $database->addMovement(4,$enforce['vref'],$enforce['from'],$reference,$time,$time+$time2);
                                    }
                            }
                            }
                }else{
                
    //units attack string for battleraport
                
    $unitssend_att1 ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].'';
                
    $herosend_att $data['t11'];
                
    $unitssend_att$unitssend_att1.','.$herosend_att;

                
    $speeds = array();

                
    //find slowest unit.
                
    for($i=1;$i<=10;$i++)
                {
                    if (
    $data['t'.$i] > 0) {
                    if(
    $unitarray) { reset($unitarray); }
                    
    $unitarray $GLOBALS["u".(($owntribe-1)*10+$i)];
                    
    $speeds[] = $unitarray['speed'];
                     }
                }
                if (
    $herosend_att>0){
                    
    $qh "SELECT * FROM ".TB_PREFIX."hero WHERE uid = ".$from['owner']."";
                    
    $resulth mysql_query($qh);
                    
    $hero_f=mysql_fetch_array($resulth);
                    
    $hero_unit=$hero_f['unit'];
                    
    $speeds[] = $GLOBALS['u'.$hero_unit]['speed'];
                }
                
    $artefact count($database->getOwnUniqueArtefactInfo2($from['owner'],2,3,0));
                
    $artefact1 count($database->getOwnUniqueArtefactInfo2($from['vref'],2,1,1));
                
    $artefact2 count($database->getOwnUniqueArtefactInfo2($from['owner'],2,2,0));
                if(
    $artefact 0){
                
    $fastertroops 3;
                }else if(
    $artefact1 0){
                
    $fastertroops 2;
                }else if(
    $artefact2 0){
                
    $fastertroops 1.5;
                }else{
                
    $fastertroops 1;
                }
                
    $endtime round($this->procDistanceTime($from,$to,min($speeds),1)/$fastertroops);
                
    $foolartefact3 $database->getFoolArtefactInfo(2,$from['wref'],$from['owner']);
                if(
    count($foolartefact3) > 0){
                foreach(
    $foolartefact3 as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $endtime *= $arte['effect2'];
                }else{
                
    $endtime /= $arte['effect2'];
                
    $endtime round($endtime);
                }
                }
                }
                
    $endtime += time();
                    
    $database->setMovementProc($data['moveid']);
                    
    $database->addMovement(4,$to['wref'],$from['wref'],$data['ref'],time(),$endtime);
                    
    $peace PEACE;
                            
    $data2 ''.$from['owner'].','.$from['wref'].','.$to['owner'].','.$owntribe.','.$unitssend_att.','.$peace.'';
                            
    $database->addNotice($from['owner'],$to['wref'],$ownally,22,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,time());
                            
    $database->addNotice($to['owner'],$to['wref'],$targetally,22,''.addslashes($from['name']).' attacks '.addslashes($to['name']).'',$data2,time());
                }
                    
    $crop $database->getCropProdstarv($to['wref']);
                    
    $unitarrays $this->getAllUnits($to['wref']);
                    
    $getvillage $database->getVillage($to['wref']);
                    
    $village_upkeep $getvillage['pop'] + $this->getUpkeep($unitarrays0);
                    if (
    $crop $village_upkeep){
                        
    // add starv data
                        
    $database->setVillageField($to['wref'], 'starv'$village_upkeep);
                        
    $database->setVillageField($to['wref'], 'starvupdate'time());
                    }
                    unset(
    $crop,$unitarrays,$getvillage,$village_upkeep);

                    
    #################################################
                    ################FIXED BY SONGER################
                    #################################################

                    ################################################################################
                    ##############ISUE: Lag, fixed3####################################################
                    #### PHP.NET manual: unset() destroy more than one variable unset($foo1, $foo2, $foo3);######
                    ################################################################################

                
    unset(
                
    $Attacker
                
    ,$Defender
                
    ,$enforce
                
    ,$unitssend_att
                
    ,$unitssend_def
                
    ,$battlepart
                
    ,$unitsdead_def
                
    ,$dead
                
    ,$steal
                
    ,$from
                
    ,$data
                
    ,$data2
                
    ,$to
                
    ,$artifact
                
    ,$artifactBig
                
    ,$canclaim
                
    ,$data_fail
                
    ,$owntribe
                
    ,$unitsdead_att
                
    ,$herosend_def
                
    ,$deadhero
                
    ,$heroxp
                
    ,$AttackerID
                
    ,$DefenderID
                
    ,$totalsend_att
                
    ,$totalsend_alldef
                
    ,$totaldead_att
                
    ,$totaltraped_att
                
    ,$totaldead_def
                
    ,$unitsdead_att_check
                
    ,$totalattackdead
                
    ,$Defender1
                
    ,$enforce1
                
    ,$defheroowner
                
    ,$enforceowner
                
    ,$defheroxp
                
    ,$reinfheroxp
                
    ,$AttackerWref
                
    ,$DefenderWref
                
    ,$troopsdead1
                
    ,$troopsdead2
                
    ,$troopsdead3
                
    ,$troopsdead4
                
    ,$troopsdead5
                
    ,$troopsdead6
                
    ,$troopsdead7
                
    ,$troopsdead8
                
    ,$troopsdead9
                
    ,$troopsdead10
                
    ,$troopsdead11
                
    ,$DefenderUnit);

                    
    #################################################

               
    }
                if(
    file_exists("GameEngine/Prevention/sendunits.txt")) {
                    
    unlink("GameEngine/Prevention/sendunits.txt");
                }
        }

        private function 
    sendTroopsBack($post) {
            global 
    $form$database$village$generator$session$technology;

            
    $enforce=$database->getEnforceArray($post['ckey'],0);
                
    $to $database->getVillage($enforce['from']);
                
    $Gtribe "";
                if (
    $database->getUserField($to['owner'],'tribe',0) == '2'){ $Gtribe "1"; } else if ($database->getUserField($to['owner'],'tribe',0) == '3'){ $Gtribe "2"; } else if ($database->getUserField($to['owner'],'tribe',0) == '4'){ $Gtribe "3"; }else if ($database->getUserField($to['owner'],'tribe',0) == '5'){ $Gtribe "4"; }

                        for(
    $i=1$i<10$i++){
                            if(isset(
    $post['t'.$i])){
                                if(
    $i!=10){
                                    if (
    $post['t'.$i] > $enforce['u'.$Gtribe.$i])
                                    {
                                        
    $form->addError("error","You can't send more units than you have");
                                        break;
                                    }

                                    if(
    $post['t'.$i]<0)
                                    {
                                        
    $form->addError("error","You can't send negative units.");
                                        break;
                                    }
                                }
                            } else {
                            
    $post['t'.$i.'']='0';
                            }
                        }
                            if(isset(
    $post['t11'])){
                                    if (
    $post['t11'] > $enforce['hero'])
                                    {
                                        
    $form->addError("error","You can't send more units than you have");
                                        break;
                                    }

                                    if(
    $post['t11']<0)
                                    {
                                        
    $form->addError("error","You can't send negative units.");
                                        break;
                                    }
                            } else {
                            
    $post['t11']='0';
                            }

                    if(
    $form->returnErrors() > 0) {
                        
    $_SESSION['errorarray'] = $form->getErrors();
                        
    $_SESSION['valuearray'] = $_POST;
                        
    header("Location: a2b.php");
                    } else {

                        
    //change units
                        
    $start = ($database->getUserField($to['owner'],'tribe',0)-1)*10+1;
                        
    $end = ($database->getUserField($to['owner'],'tribe',0)*10);

                        
    $j='1';
                        for(
    $i=$start;$i<=$end;$i++){
                            
    $database->modifyEnforce($post['ckey'],$i,$post['t'.$j.''],0); $j++;
                        }

                            
    //get cord
                            
    $from $database->getVillage($enforce['from']);
                            
    $fromcoor $database->getCoor($enforce['from']);
                            
    $tocoor $database->getCoor($enforce['vref']);
                            
    $fromCor = array('x'=>$tocoor['x'], 'y'=>$tocoor['y']);
                            
    $toCor = array('x'=>$fromcoor['x'], 'y'=>$fromcoor['y']);

                    
    $speeds = array();

                    
    //find slowest unit.
                    
    for($i=1;$i<=10;$i++){
                        if (isset(
    $post['t'.$i])){
                            if( 
    $post['t'.$i] != '' && $post['t'.$i] > 0){
                            if(
    $unitarray) { reset($unitarray); }
                            
    $unitarray $GLOBALS["u".(($session->tribe-1)*10+$i)];
                            
    $speeds[] = $unitarray['speed'];
                        } else {
                            
    $post['t'.$i.'']='0';
                            }
                        } else {
                            
    $post['t'.$i.'']='0';
                        }
                    }
                        if (isset(
    $post['t11'])){
                            if( 
    $post['t11'] != '' && $post['t11'] > 0){
                            
    $qh "SELECT * FROM ".TB_PREFIX."hero WHERE uid = ".$from['owner']."";
                            
    $resulth mysql_query($qh);
                            
    $hero_f=mysql_fetch_array($resulth);
                            
    $hero_unit=$hero_f['unit'];
                            
    $speeds[] = $GLOBALS['u'.$hero_unit]['speed'];
                        } else {
                            
    $post['t11']='0';
                            }
                        } else {
                            
    $post['t11']='0';
                        }
                
    $artefact count($database->getOwnUniqueArtefactInfo2($from['owner'],2,3,0));
                
    $artefact1 count($database->getOwnUniqueArtefactInfo2($from['vref'],2,1,1));
                
    $artefact2 count($database->getOwnUniqueArtefactInfo2($from['owner'],2,2,0));
                if(
    $artefact 0){
                
    $fastertroops 3;
                }else if(
    $artefact1 0){
                
    $fastertroops 2;
                }else if(
    $artefact2 0){
                
    $fastertroops 1.5;
                }else{
                
    $fastertroops 1;
                }
                    
    $time round($generator->procDistanceTime($fromCor,$toCor,min($speeds),1)/$fastertroops);
                    
    $foolartefact4 $database->getFoolArtefactInfo(2,$from['wref'],$from['owner']);
                    if(
    count($foolartefact4) > 0){
                    foreach(
    $foolartefact4 as $arte){
                    if(
    $arte['bad_effect'] == 1){
                    
    $time *= $arte['effect2'];
                    }else{
                    
    $time /= $arte['effect2'];
                    
    $time round($endtime);
                    }
                    }
                    }
                    
    $reference $database->addAttack($enforce['from'],$post['t1'],$post['t2'],$post['t3'],$post['t4'],$post['t5'],$post['t6'],$post['t7'],$post['t8'],$post['t9'],$post['t10'],$post['t11'],2,0,0,0,0);
                    
    $database->addMovement(4,$village->wid,$enforce['from'],$reference,time(),($time+time()));
                    
    $technology->checkReinf($post['ckey']);

                            
    header("Location: build.php?id=39");

                    }
        }

        private function 
    sendreinfunitsComplete() {
        if(
    file_exists("GameEngine/Prevention/sendreinfunits.txt")) {
                    
    unlink("GameEngine/Prevention/sendreinfunits.txt");
                }
            global 
    $bid23,$database,$battle;
            
    $time time();
                
    $ourFileHandle fopen("GameEngine/Prevention/sendreinfunits.txt"'w');
                
    fclose($ourFileHandle);
            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."attacks where ".TB_PREFIX."movement.ref = ".TB_PREFIX."attacks.id and ".TB_PREFIX."movement.proc = '0' and ".TB_PREFIX."movement.sort_type = '3' and ".TB_PREFIX."attacks.attack_type = '2' and endtime < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {
            if(
    $data['from']==0){
            
    $to $database->getMInfo($data['to']);
            
    $database->addEnforce($data);
            
    $reinf $database->getEnforce($data['to'],$data['from']);
            
    $database->modifyEnforce($reinf['id'],31,1,1);
            
    $data_fail '0,0,4,1,0,0,0,0,0,0,0,0,0,0';
            
    $database->addNotice($to['owner'],$to['wref'],$targetally,8,'village of the elders reinforcement '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
            
    $database->setMovementProc($data['moveid']);
            }else{
                
    //set base things
                
    $owntribe $database->getUserField($database->getVillageField($data['from'],"owner"),"tribe",0);
                
    $targettribe $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);
                
    $to $database->getMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $toF $database->getVillage($data['to']);
                
    $fromF $database->getVillage($data['from']);

                            
    //check to see if we're only sending a hero between own villages and there's a Mansion at target village
                
    if($data['t11'] != 0) {
                    if(
    $database->getVillageField($data['from'],"owner") == $database->getVillageField($data['to'],"owner")) {
                        for(
    $i=1;$i<=10;$i++) { if($data['t'.$i]>0) { $NonHeroPresent 1; break; } }
                        if(
    $NonHeroPresent == && $this->getTypeLevel(37,$data['to']) > 0) {
                            
    //don't reinforce, addunit instead
                            
    $database->modifyUnit($data['to'],array("hero"),array(1),array(1));
                            
    $heroid $database->getHero($database->getVillageField($data['from'],"owner"),1);
                            
    $database->modifyHero("wref",$data['to'],$heroid,0);
                            
    $HeroTransfer 1;
                        }
                    }
                } if(!
    $HeroTransfer)
               {
      
    //check if there is defence from town in to town
                    
    $check=$database->getEnforce($data['to'],$data['from']);
                    if (!isset(
    $check['id'])){
                        
    //no:
                        
    $database->addEnforce($data);
                    } else{
                     
    //yes
                         
    $start = ($owntribe-1)*10+1;
                         
    $end = ($owntribe*10);
                     
    //add unit.
                         
    $j='1';
                         for(
    $i=$start;$i<=$end;$i++){
                            
    $database->modifyEnforce($check['id'],$i,$data['t'.$j.''],1); $j++;
                        }
                    }
                }
                
    //send rapport
                
    $unitssend_att ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].','.$data['t11'].'';
                
    $data_fail ''.$from['wref'].','.$from['owner'].','.$owntribe.','.$unitssend_att.'';
                
    $database->addNotice($from['owner'],$from['wref'],$ownally,8,''.addslashes($from['name']).' reinforcement '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
                if(
    $from['owner'] != $to['owner']) {
                    
    $database->addNotice($to['owner'],$to['wref'],$targetally,8,''.addslashes($from['name']).' reinforcement '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
                }
                
    //update status
                
    $database->setMovementProc($data['moveid']);
                }
            }
            if(
    file_exists("GameEngine/Prevention/sendreinfunits.txt")) {
                    
    unlink("GameEngine/Prevention/sendreinfunits.txt");
                }
        }

        private function 
    returnunitsComplete() {
        if(
    file_exists("GameEngine/Prevention/returnunits.txt")) {
                
    unlink("GameEngine/Prevention/returnunits.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/returnunits.txt"'w');
            
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."attacks where ".TB_PREFIX."movement.ref = ".TB_PREFIX."attacks.id and ".TB_PREFIX."movement.proc = '0' and ".TB_PREFIX."movement.sort_type = '4' and endtime < $time";
            
    $dataarray $database->query_return($q);

            foreach(
    $dataarray as $data) {

            
    $tribe $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);

            if(
    $tribe == 1){ $u ""; } elseif($tribe == 2){ $u "1"; } elseif($tribe == 3){ $u "2"; } elseif($tribe == 4){ $u "3"; } else{ $u "4"; }
            
    $database->modifyUnit(
                    
    $data['to'],
                    array(
    $u."1",$u."2",$u."3",$u."4",$u."5",$u."6",$u."7",$u."8",$u."9",$tribe."0","hero"),
                    array(
    $data['t1'],$data['t2'],$data['t3'],$data['t4'],$data['t5'],$data['t6'],$data['t7'],$data['t8'],$data['t9'],$data['t10'],$data['t11']),
                    array(
    1,1,1,1,1,1,1,1,1,1,1)
            );
            
    $database->setMovementProc($data['moveid']);
            }

            
    // Recieve the bounty on type 6.

            
    $q "SELECT * FROM ".TB_PREFIX."movement, ".TB_PREFIX."send where ".TB_PREFIX."movement.ref = ".TB_PREFIX."send.id and ".TB_PREFIX."movement.proc = 0 and sort_type = 6 and endtime < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {

                if(
    $data['wood'] >= $data['clay'] && $data['wood'] >= $data['iron'] && $data['wood'] >= $data['crop']){ $sort_type "10"; }
                elseif(
    $data['clay'] >= $data['wood'] && $data['clay'] >= $data['iron'] && $data['clay'] >= $data['crop']){ $sort_type "11"; }
                elseif(
    $data['iron'] >= $data['wood'] && $data['iron'] >= $data['clay'] && $data['iron'] >= $data['crop']){ $sort_type "12"; }
                elseif(
    $data['crop'] >= $data['wood'] && $data['crop'] >= $data['clay'] && $data['crop'] >= $data['iron']){ $sort_type "13"; }

                
    $to $database->getMInfo($data['to']);
                
    $from $database->getMInfo($data['from']);
                
    $database->modifyResource($data['to'],$data['wood'],$data['clay'],$data['iron'],$data['crop'],1);
                
    //$database->updateVillage($data['to']);
                
    $database->setMovementProc($data['moveid']);
            }
            
    $this->pruneResource();

            
    // Settlers

            
    $q "SELECT * FROM ".TB_PREFIX."movement where ref = 0 and proc = '0' and sort_type = '4' and endtime < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {

            
    $tribe $database->getUserField($database->getVillageField($data['to'],"owner"),"tribe",0);

            
    $database->modifyUnit($data['to'],array($tribe."0"),array(3),array(1));
            
    $database->setMovementProc($data['moveid']);
            }

            if(
    file_exists("GameEngine/Prevention/returnunits.txt")) {
                
    unlink("GameEngine/Prevention/returnunits.txt");
            }
        }

        private function 
    sendSettlersComplete() {
        if(
    file_exists("GameEngine/Prevention/settlers.txt")) {
                    
    unlink("GameEngine/Prevention/settlers.txt");
                }
            global 
    $database$building;
            
    $ourFileHandle fopen("GameEngine/Prevention/settlers.txt"'w');
            
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."movement where proc = 0 and sort_type = 5 and endtime < $time";
            
    $dataarray $database->query_return($q);
                foreach(
    $dataarray as $data) {
                        
    $to $database->getMInfo($data['from']);
                        
    $user =    $database->getUserField($to['owner'],'username',0);
                        
    $taken $database->getVillageState($data['to']);
                        if(
    $taken != 1){
                            
    $database->setFieldTaken($data['to']);
                            
    $database->addVillage($data['to'],$to['owner'],$user,'0');
                            
    $database->addResourceFields($data['to'],$database->getVillageType($data['to']));
                            
    $database->addUnits($data['to']);
                            
    $database->addTech($data['to']);
                            
    $database->addABTech($data['to']);
                            
    $database->setMovementProc($data['moveid']);

                            
    $exp1 $database->getVillageField($data['from'],'exp1');
                            
    $exp2 $database->getVillageField($data['from'],'exp2');
                            
    $exp3 $database->getVillageField($data['from'],'exp3');

                            if(
    $exp1 == 0){
                                
    $exp 'exp1';
                                
    $value $data['to'];
                            }
                            elseif(
    $exp2 == 0){
                                
    $exp 'exp2';
                                
    $value $data['to'];
                            }
                            else{
                                
    $exp 'exp3';
                                
    $value $data['to'];
                            }
                            
    $database->setVillageField($data['from'],$exp,$value);
                        }
                        else{
                            
    // here must come movement from returning settlers
                            
    $database->addMovement(4,$data['to'],$data['from'],$data['ref'],$time,$time+($time-$data['starttime']));
                            
    $database->setMovementProc($data['moveid']);
                        }
                }
                if(
    file_exists("GameEngine/Prevention/settlers.txt")) {
                    
    unlink("GameEngine/Prevention/settlers.txt");
                }
        }

        private function 
    researchComplete() {
        if(
    file_exists("GameEngine/Prevention/research.txt")) {
                
    unlink("GameEngine/Prevention/research.txt");
            }
            global 
    $database;
             
    $ourFileHandle fopen("GameEngine/Prevention/research.txt"'w');
            
    fclose($ourFileHandle);
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."research where timestamp < $time";
            
    $dataarray $database->query_return($q);
            foreach(
    $dataarray as $data) {
                
    $sort_type substr($data['tech'],0,1);
                switch(
    $sort_type) {
                    case 
    "t":
                    
    $q "UPDATE ".TB_PREFIX."tdata set ".$data['tech']." = 1 where vref = ".$data['vref'];
                    break;
                    case 
    "a":
                    case 
    "b":
                    
    $q "UPDATE ".TB_PREFIX."abdata set ".$data['tech']." = ".$data['tech']." + 1 where vref = ".$data['vref'];
                    break;
                }
                
    $database->query($q);
                
    $q "DELETE FROM ".TB_PREFIX."research where id = ".$data['id'];
                
    $database->query($q);
            }
            if(
    file_exists("GameEngine/Prevention/research.txt")) {
                
    unlink("GameEngine/Prevention/research.txt");
            }
        }

        private function 
    updateRes($bountywid,$uid) {
            global 
    $session;


            
    $this->bountyLoadTown($bountywid);
            
    $this->bountycalculateProduction($bountywid,$uid);
            
    $this->bountyprocessProduction($bountywid);
        }

        private function 
    updateORes($bountywid) {
            global 
    $session;
            
    $this->bountyLoadOTown($bountywid);
            
    $this->bountycalculateOProduction($bountywid);
            
    $this->bountyprocessOProduction($bountywid);
        }
        private function 
    bountyLoadOTown($bountywid) {
            global 
    $database,$session,$logging,$technology;
            
    $this->bountyinfoarray $database->getOasisV($bountywid);
            
    $this->bountyresarray $database->getResourceLevel($bountywid);
            
    $this->bountypop 2;

        }
        private function 
    bountyLoadTown($bountywid) {
            global 
    $database,$session,$logging,$technology;
            
    $this->bountyinfoarray $database->getVillage($bountywid);
            
    $this->bountyresarray $database->getResourceLevel($bountywid);
            
    $this->bountyoasisowned $database->getOasis($bountywid);
            
    $this->bountyocounter $this->bountysortOasis();
            
    $this->bountypop $this->bountyinfoarray['pop'];

        }

        private function 
    bountysortOasis() {
            
    $crop $clay $wood $iron 0;
            foreach (
    $this->bountyoasisowned as $oasis) {
            switch(
    $oasis['type']) {
                    case 
    1:
                    case 
    2:
                    
    $wood += 1;
                    break;
                    case 
    3:
                    
    $wood += 1;
                    
    $crop += 1;
                    break;
                    case 
    4:
                    case 
    5:
                    
    $clay += 1;
                    break;
                    case 
    6:
                    
    $clay += 1;
                    
    $crop += 1;
                    break;
                    case 
    7:
                    case 
    8:
                    
    $iron += 1;
                    break;
                    case 
    9:
                    
    $iron += 1;
                    
    $crop += 1;
                    break;
                    case 
    10:
                    case 
    11:
                    
    $crop += 1;
                    break;
                    case 
    12:
                    
    $crop += 2;
                    break;
                }
            }
            return array(
    $wood,$clay,$iron,$crop);
        }

        function 
    getAllUnits($base) {
            global 
    $database;
            
    $ownunit $database->getUnit($base);
            
    $enforcementarray $database->getEnforceVillage($base,0);
            if(
    count($enforcementarray) > 0) {
                foreach(
    $enforcementarray as $enforce) {
                    for(
    $i=1;$i<=50;$i++) {
                        
    $ownunit['u'.$i] += $enforce['u'.$i];
                    }
                }
            }
            
    $movement $database->getVillageMovement($base);
            if(!empty(
    $movement)) {
                for(
    $i=1;$i<=50;$i++) {
                    
    $ownunit['u'.$i] += $movement['u'.$i];
                }
            }
            
    $prisoners $database->getPrisoners($base);
            if(!empty(
    $prisoners)) {
            foreach(
    $prisoners as $prisoner){
                
    $owner $database->getVillageField($base,"owner");
                
    $ownertribe $database->getUserField($owner,"tribe",0);
                
    $start = ($ownertribe-1)*10+1;
                
    $end = ($ownertribe*10);
                for(
    $i=$start;$i<=$end;$i++) {
                
    $j $i-$start+1;
                
    $ownunit['u'.$i] += $prisoner['t'.$j];
                }
                
    $ownunit['hero'] += $prisoner['t11'];
            }
            }
            return 
    $ownunit;
        }

        public function 
    getUpkeep($array,$type,$vid=0,$prisoners=0) {
            global 
    $database,$session,$village;
            if(
    $vid==0) { $vid=$village->wid; }
            
    $buildarray = array();
            if(
    $vid!=0){ $buildarray $database->getResourceLevel($vid); }
            
    $upkeep 0;
            switch(
    $type) {
                case 
    0:
                
    $start 1;
                
    $end 50;
                break;
                case 
    1:
                
    $start 1;
                
    $end 10;
                break;
                case 
    2:
                
    $start 11;
                
    $end 20;
                break;
                case 
    3:
                
    $start 21;
                
    $end 30;
                break;
                case 
    4:
                
    $start 31;
                
    $end 40;
                break;
                case 
    5:
                
    $start 41;
                
    $end 50;
                break;
            }
            for(
    $i=$start;$i<=$end;$i++) {
                
    $k $i-$start+1;
                
    $unit "u".$i;
                
    $unit2 "t".$k;
                global $
    $unit;
                
    $dataarray = $$unit;
                for(
    $j=19;$j<=38;$j++) {
                if(
    $buildarray['f'.$j.'t'] == 41) {
                
    $horsedrinking $j;
                }
                }
                if(
    $prisoners == 0){
                if(isset(
    $horsedrinking)){
                if((
    $i==&& $buildarray['f'.$horsedrinking] >= 10)
                || (
    $i==&& $buildarray['f'.$horsedrinking] >= 15)
                || (
    $i==&& $buildarray['f'.$horsedrinking] == 20)) {
                
    $upkeep += ($dataarray['pop']-1) * $array[$unit];
                } else {
                
    $upkeep += $dataarray['pop'] * $array[$unit];
                }}else{
                
    $upkeep += $dataarray['pop'] * $array[$unit];
                }
                }else{
                if(isset(
    $horsedrinking)){
                if((
    $i==&& $buildarray['f'.$horsedrinking] >= 10)
                || (
    $i==&& $buildarray['f'.$horsedrinking] >= 15)
                || (
    $i==&& $buildarray['f'.$horsedrinking] == 20)) {
                
    $upkeep += ($dataarray['pop']-1) * $array[$unit2];
                } else {
                
    $upkeep += $dataarray['pop'] * $array[$unit2];
                }}else{
                
    $upkeep += $dataarray['pop'] * $array[$unit2];
                }
                }
            }
             
    //   $unit = "hero";
             //   global $$unit;
             //   $dataarray = $$unit;
             
    if($prisoners == 0){
                
    $upkeep += $array['hero'] * 6;
             }else{
                
    $upkeep += $array['t11'] * 6;
             }
                
    $artefact count($database->getOwnUniqueArtefactInfo2($session->uid,4,3,0));
                
    $artefact1 count($database->getOwnUniqueArtefactInfo2($vid,4,1,1));
                
    $artefact2 count($database->getOwnUniqueArtefactInfo2($session->uid,4,2,0));
                if(
    $artefact 0){
                
    $upkeep /= 2;
                
    $upkeep round($upkeep);
                }else if(
    $artefact1 0){
                
    $upkeep /= 2;
                
    $upkeep round($upkeep);
                }else if(
    $artefact2 0){
                
    $upkeep /= 4;
                
    $upkeep round($upkeep);
                
    $upkeep *= 3;
                }
                
    $foolartefact $database->getFoolArtefactInfo(4,$vid,$session->uid);
                if(
    count($foolartefact) > 0){
                foreach(
    $foolartefact as $arte){
                if(
    $arte['bad_effect'] == 1){
                
    $upkeep *= $arte['effect2'];
                }else{
                
    $upkeep /= $arte['effect2'];
                
    $upkeep round($upkeep);
                }
                }
                }
            return 
    $upkeep;
        }

        private function 
    bountycalculateOProduction($bountywid) {
            global 
    $technology,$database;
            
    $this->oasisResoucesProduce($bountywid); 
            
    $this->bountyOproduction['wood'] = $this->bountyGetOWoodProd();
            
    $this->bountyOproduction['clay'] = $this->bountyGetOClayProd();
            
    $this->bountyOproduction['iron'] = $this->bountyGetOIronProd();
            
    $this->bountyOproduction['crop'] = $this->bountyGetOCropProd();
        }
        private function 
    bountycalculateProduction($bountywid,$uid) {
            global 
    $technology,$database;
            
    $normalA $database->getOwnArtefactInfoByType($bountywid,4);
            
    $largeA $database->getOwnUniqueArtefactInfo($uid,4,2);
            
    $uniqueA $database->getOwnUniqueArtefactInfo($uid,4,3);
            
    $upkeep $this->getUpkeep($this->getAllUnits($bountywid),0);
            
    $this->bountyproduction['wood'] = $this->bountyGetWoodProd();
            
    $this->bountyproduction['clay'] = $this->bountyGetClayProd();
            
    $this->bountyproduction['iron'] = $this->bountyGetIronProd();
            if (
    $uniqueA['size']==&& $uniqueA['owner']==$uid){
            
    $this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-(($upkeep)-round($upkeep*0.50));

            }else if (
    $normalA['type']==&& $normalA['size']==&& $normalA['owner']==$uid){
            
    $this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-(($upkeep)-round($upkeep*0.25));

            }else if (
    $largeA['size']==&& $largeA['owner']==$uid){
             
    $this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-(($upkeep)-round($upkeep*0.25));

            }else{
            
    $this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-$upkeep;
        }
            }

        private function 
    bountyprocessProduction($bountywid) {
            global 
    $database;
            
    $timepast time() - $this->bountyinfoarray['lastupdate'];
            
    $nwood = ($this->bountyproduction['wood'] / 3600) * $timepast;
            
    $nclay = ($this->bountyproduction['clay'] / 3600) * $timepast;
            
    $niron = ($this->bountyproduction['iron'] / 3600) * $timepast;
            
    $ncrop = ($this->bountyproduction['crop'] / 3600) * $timepast;
            
    $database->modifyResource($bountywid,$nwood,$nclay,$niron,$ncrop,1);
            
    $database->updateVillage($bountywid);
        }
            private function 
    bountyprocessOProduction($bountywid) {
            global 
    $database;
            
    $timepast time() - $this->bountyinfoarray['lastupdated'];
            
    $nwood = ($this->bountyproduction['wood'] / 3600) * $timepast;
            
    $nclay = ($this->bountyproduction['clay'] / 3600) * $timepast;
            
    $niron = ($this->bountyproduction['iron'] / 3600) * $timepast;
            
    $ncrop = ($this->bountyproduction['crop'] / 3600) * $timepast;
            
    $database->modifyOasisResource($bountywid,$nwood,$nclay,$niron,$ncrop,1);
            
    $database->updateOasis($bountywid);
        }

        private function 
    bountyGetWoodProd() {
            global 
    $bid1,$bid5,$session;
            
    $wood $sawmill 0;
            
    $woodholder = array();
            for(
    $i=1;$i<=38;$i++) {
                if(
    $this->bountyresarray['f'.$i.'t'] == 1) {
                    
    array_push($woodholder,'f'.$i);
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 5) {
                    
    $sawmill $this->bountyresarray['f'.$i];
                }
            }
            for(
    $i=0;$i<=count($woodholder)-1;$i++) { $wood+= $bid1[$this->bountyresarray[$woodholder[$i]]]['prod']; }
            if(
    $sawmill >= 1) {
                
    $wood += $wood /100 $bid5[$sawmill]['attri'];
            }
            if(
    $this->bountyocounter[0] != 0) {
                
    $wood += $wood*0.25*$this->bountyocounter[0];
            }
            
    $wood *= SPEED;
            return 
    round($wood);
        }
        private function 
    bountyGetOWoodProd() {
            global 
    $session;
            
    $wood 0;
            
    $wood += 40;
            
    $wood *= SPEED;
            return 
    round($wood);
        }
        private function 
    bountyGetOClayProd() {
            global 
    $session;
            
    $clay 0;
            
    $clay += 40;
            
    $clay *= SPEED;
            return 
    round($clay);
        }private function 
    bountyGetOIronProd() {
            global 
    $session;
            
    $iron 0;
            
    $iron += 40;
            
    $iron *= SPEED;
            return 
    round($iron);
        }

        private function 
    bountyGetOCropProd() {
            global 
    $session;
            
    $crop 0;
            
    $clay += 40;
            
    $crop *= SPEED;
            return 
    round($crop);
        }
        private function 
    bountyGetClayProd() {
            global 
    $bid2,$bid6,$session;
            
    $clay $brick 0;
            
    $clayholder = array();
            for(
    $i=1;$i<=38;$i++) {
                if(
    $this->bountyresarray['f'.$i.'t'] == 2) {
                    
    array_push($clayholder,'f'.$i);
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 6) {
                    
    $brick $this->bountyresarray['f'.$i];
                }
            }
            for(
    $i=0;$i<=count($clayholder)-1;$i++) { $clay+= $bid2[$this->bountyresarray[$clayholder[$i]]]['prod']; }
            if(
    $brick >= 1) {
                
    $clay += $clay /100 $bid6[$brick]['attri'];
            }
            if(
    $this->bountyocounter[1] != 0) {
                
    $clay += $clay*0.25*$this->bountyocounter[1];
            }
            
    $clay *= SPEED;
            return 
    round($clay);
        }

        private function 
    bountyGetIronProd() {
            global 
    $bid3,$bid7,$session;
            
    $iron $foundry 0;
            
    $ironholder = array();
            for(
    $i=1;$i<=38;$i++) {
                if(
    $this->bountyresarray['f'.$i.'t'] == 3) {
                    
    array_push($ironholder,'f'.$i);
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 7) {
                    
    $foundry $this->bountyresarray['f'.$i];
                }
            }
            for(
    $i=0;$i<=count($ironholder)-1;$i++) { $iron+= $bid3[$this->bountyresarray[$ironholder[$i]]]['prod']; }
            if(
    $foundry >= 1) {
                
    $iron += $iron /100 $bid7[$foundry]['attri'];
            }
            if(
    $this->bountyocounter[2] != 0) {
                
    $iron += $iron*0.25*$this->bountyocounter[2];
            }
            
    $iron *= SPEED;
            return 
    round($iron);
        }

        private function 
    bountyGetCropProd() {
            global 
    $bid4,$bid8,$bid9,$session;
            
    $crop $grainmill $bakery 0;
            
    $cropholder = array();
            for(
    $i=1;$i<=38;$i++) {
                if(
    $this->bountyresarray['f'.$i.'t'] == 4) {
                    
    array_push($cropholder,'f'.$i);
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 8) {
                    
    $grainmill $this->bountyresarray['f'.$i];
                }
                if(
    $this->bountyresarray['f'.$i.'t'] == 9) {
                    
    $bakery $this->bountyresarray['f'.$i];
                }
            }
            for(
    $i=0;$i<=count($cropholder)-1;$i++) { $crop+= $bid4[$this->bountyresarray[$cropholder[$i]]]['prod']; }
            if(
    $grainmill >= 1) {
                
    $crop += $crop /100 $bid8[$grainmill]['attri'];
            }
            if(
    $bakery >= 1) {
                
    $crop += $crop /100 $bid9[$bakery]['attri'];
            }
            if(
    $this->bountyocounter[3] != 0) {
                
    $crop += $crop*0.25*$this->bountyocounter[3];
            }
            
    $crop *= SPEED;
            return 
    round($crop);
        }

        private function 
    trainingComplete() {
        if(
    file_exists("GameEngine/Prevention/training.txt")) {
                
    unlink("GameEngine/Prevention/training.txt");
            }
            global 
    $database;
            
    $time time();
            
    $ourFileHandle fopen("GameEngine/Prevention/training.txt"'w');
            
    fclose($ourFileHandle);
            
    $trainlist $database->getTrainingList();
            if(
    count($trainlist) > 0){
                foreach(
    $trainlist as $train){
                        
    $timepast $train['timestamp2'] - $time;
                        
    $pop $train['pop'];
                        if(
    $timepast <= && $train['amt'] > 0) {
                        
    $timepast2 $time $train['timestamp2'];
                        
    $trained 1;
                        while(
    $timepast2 >= $train['eachtime']){
                        
    $timepast2 -= $train['eachtime'];
                        
    $trained += 1;
                        }
                        if(
    $trained $train['amt']){
                        
    $trained $train['amt'];
                        }
                        if(
    $train['unit']>60 && $train['unit']!=99){
                        
    $database->modifyUnit($train['vref'],array($train['unit']-60),array($trained),array(1));
                        }else{
                        
    $database->modifyUnit($train['vref'],array($train['unit']),array($trained),array(1));
                        }
                        
    $database->updateTraining($train['id'],$trained,$trained*$train['eachtime']);
                        }
                        if(
    $train['amt'] == 0){
                        
    $database->trainUnit($train['id'],0,0,0,0,1,1);
                        }
                    
    $crop $database->getCropProdstarv($train['vref']);
                    
    $unitarrays $this->getAllUnits($train['vref']);
                    
    $village $database->getVillage($train['vref']);
                    
    $upkeep $village['pop'] + $this->getUpkeep($unitarrays0);
                    if (
    $crop $upkeep){
                        
    // add starv data
                        
    $database->setVillageField($train['vref'], 'starv'$upkeep);
                        
    $database->setVillageField($train['vref'], 'starvupdate'$time);
                    }
                }
            }
            if(
    file_exists("GameEngine/Prevention/training.txt")) {
                
    unlink("GameEngine/Prevention/training.txt");
            }
        }

        public function 
    procDistanceTime($coor,$thiscoor,$ref,$mode) {
            global 
    $bid14,$database,$generator;
            
    $resarray $database->getResourceLevel($generator->getBaseID($coor['x'],$coor['y']));
            
    $xdistance ABS($thiscoor['x'] - $coor['x']);
            if(
    $xdistance WORLD_MAX) {
                
    $xdistance = (2*WORLD_MAX+1) - $xdistance;
            }
            
    $ydistance ABS($thiscoor['y'] - $coor['y']);
            if(
    $ydistance WORLD_MAX) {
                
    $ydistance = (2*WORLD_MAX+1) - $ydistance;
            }
            
    $distance SQRT(POW($xdistance,2)+POW($ydistance,2));
             if(!
    $mode) {
                if(
    $ref == 1) {
                    
    $speed 16;
                }
                else if(
    $ref == 2) {
                    
    $speed 12;
                }
                else if(
    $ref == 3) {
                    
    $speed 24;
                }
                else if(
    $ref == 300) {
                    
    $speed 5;
                }
                else {
                    
    $speed 1;
                }
            }
            else {
                
    $speed $ref;
                if(
    $this->getsort_typeLevel(14,$resarray) != && $distance >= TS_THRESHOLD) {
                    
    $speed $speed * ($bid14[$this->getsort_typeLevel(14,$resarray)]['attri']/100) ;
                }
            }


            if(
    $speed!=0){
            return 
    round(($distance/$speed) * 3600 INCREASE_SPEED);
            }else{
            return 
    round($distance 3600 INCREASE_SPEED);
            }

        }

        private function 
    getsort_typeLevel($tid,$resarray) {


            global 
    $village;
            
    $keyholder = array();
            foreach(
    array_keys($resarray,$tid) as $key) {
                if(
    strpos($key,'t')) {
                    
    $key preg_replace("/[^0-9]/"''$key);
                    
    array_push($keyholder$key);
                }
            }
            
    $element count($keyholder);
            if(
    $element >= 2) {
                if(
    $tid <= 4) {
                    
    $temparray = array();
                    for(
    $i=0;$i<=$element-1;$i++) {
                        
    array_push($temparray,$resarray['f'.$keyholder[$i]]);
                    }
                    foreach (
    $temparray as $key => $val) {
                        if (
    $val == max($temparray))
                        
    $target $key;
                    }
                }
                else {
                    
    /*for($i=0;$i<=$element-1;$i++) {
                        //if($resarray['f'.$keyholder[$i]] != $this->getsort_typeMaxLevel($tid)) {
                        //    $target = $i;
                        //}
                    }
                    */
                
    }
            }
            else if(
    $element == 1) {
                
    $target 0;
            }
            else {
                return 
    0;
            }
            if(
    $keyholder[$target] != "") {
                return 
    $resarray['f'.$keyholder[$target]];
            }
            else {
                return 
    0;
            }
        }

        private function 
    celebrationComplete() {
        if(
    file_exists("GameEngine/Prevention/celebration.txt")) {
                
    unlink("GameEngine/Prevention/celebration.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/celebration.txt"'w');
            
    fclose($ourFileHandle);

            
    $varray $database->getCel();
                foreach(
    $varray as $vil){
                    
    $id $vil['wref'];
                    
    $type $vil['type'];
                    
    $user $vil['owner'];
                    if(
    $type == 1){$cp 500;}else if($type == 2){$cp 2000;}
                    
    $database->clearCel($id);
                    
    $database->setCelCp($user,$cp);
                }
            if(
    file_exists("GameEngine/Prevention/celebration.txt")) {
                
    unlink("GameEngine/Prevention/celebration.txt");
            }
        }

        private function 
    demolitionComplete() {
        if(
    file_exists("GameEngine/Prevention/demolition.txt")) {
                
    unlink("GameEngine/Prevention/demolition.txt");
            }
            global 
    $building,$database;
            
    $ourFileHandle fopen("GameEngine/Prevention/demolition.txt"'w');
            
    fclose($ourFileHandle);

            
    $varray $database->getDemolition();
            foreach(
    $varray as $vil) {
                if (
    $vil['timetofinish'] <= time()) {
                    
    $type $database->getFieldType($vil['vref'],$vil['buildnumber']);
                    
    $level $database->getFieldLevel($vil['vref'],$vil['buildnumber']);
                    
    $buildarray $GLOBALS["bid".$type];
                    if (
    $type==10 || $type==38) {
                        
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`=`maxstore`-".$buildarray[$level]['attri']." WHERE wref=".$vil['vref'];
                        
    $database->query($q);
                        
    $q "UPDATE ".TB_PREFIX."vdata SET `maxstore`=800 WHERE `maxstore`<= 800 AND wref=".$vil['vref'];
                        
    $database->query($q);
                    }
                    if (
    $type==11 || $type==39) {
                        
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`=`maxcrop`-".$buildarray[$level]['attri']." WHERE wref=".$vil['vref'];
                        
    $database->query($q);
                        
    $q "UPDATE ".TB_PREFIX."vdata SET `maxcrop`=800 WHERE `maxcrop`<=800 AND wref=".$vil['vref'];
                        
    $database->query($q);
                    }
                    if (
    $level==1) { $clear=",f".$vil['buildnumber']."t=0"; } else { $clear=""; }
                    
    $q "UPDATE ".TB_PREFIX."fdata SET f".$vil['buildnumber']."=".($level-1).$clear." WHERE vref=".$vil['vref'];
                    
    $database->query($q);
                    
    $pop=$this->getPop($type,$level-1);
                    
    $database->modifyPop($vil['vref'],$pop[0],1);
                    
    $database->delDemolition($vil['vref']);
                }
            }
            if(
    file_exists("GameEngine/Prevention/demolition.txt")) {
                
    unlink("GameEngine/Prevention/demolition.txt");
            }
        }

        private function 
    updateHero() {
     if(
    file_exists("GameEngine/Prevention/updatehero.txt")) {
                
    unlink("GameEngine/Prevention/updatehero.txt");
            }
            global 
    $database,$hero_levels;
            
    $harray $database->getHero();
            if(!empty(
    $harray)){
                foreach(
    $harray as $hdata){
                    if((
    time()-$hdata['lastupdate'])>=1){
                        if(
    $hdata['health']<100 and $hdata['health']>0){
                        
    $reg $hdata['health']+$hdata['regeneration']*5*ceil(SPEED/10)/86400*(time()-$hdata['lastupdate']);
                        if(
    $reg <= 100){
                            
    $database->modifyHero("health",$reg,$hdata['heroid']);
                        }else{
                            
    $database->modifyHero("health",100,$hdata['heroid']);
                            }
                        
    $database->modifyHero("lastupdate",time(),$hdata['heroid']);
                        }
                    }
                        if(
    $hdata['experience'] > $hero_levels[$hdata['level']+1] && $hdata['level'] < 100){
                        
    mysql_query("UPDATE " TB_PREFIX ."hero SET level = level + 1 WHERE heroid = '".$hdata['heroid']."'");
                        
    mysql_query("UPDATE " TB_PREFIX ."hero SET points = points + 5 WHERE heroid = '".$hdata['heroid']."'");
                        }
                        
    $villunits $database->getUnit($hdata['wref']);
                        if(
    $villunits['hero'] == && $hdata['trainingtime'] < time() && $hdata['inrevive'] == 1){
                        
    mysql_query("UPDATE " TB_PREFIX "units SET hero = 1 WHERE vref = ".$hdata['wref']."");
                        
    mysql_query("UPDATE ".TB_PREFIX."hero SET `dead` = '0', `inrevive` = '0', `health` = '100' WHERE `uid` = '".$hdata['uid']."'");
                        }
                        if(
    $villunits['hero'] == && $hdata['trainingtime'] < time() && $hdata['intraining'] == 1){
                        
    mysql_query("UPDATE " TB_PREFIX "units SET hero = 1 WHERE vref = ".$hdata['wref']."");
                        
    mysql_query("UPDATE ".TB_PREFIX."hero SET `intraining` = '0' WHERE `uid` = '".$hdata['uid']."'");
                        }
                }
            }
            if(
    file_exists("GameEngine/Prevention/updatehero.txt")) {
                
    unlink("GameEngine/Prevention/updatehero.txt");
            }


    }

     
    // by SlimShady95, aka Manuel Mannhardt < manuel_mannhardt@web.de > UPDATED FROM songeriux < haroldas.snei@gmail.com >
        
    private function updateStore() {
            global 
    $bid10$bid38$bid11$bid39;

            
    $result mysql_query('SELECT * FROM `' TB_PREFIX 'fdata`');
            while (
    $row mysql_fetch_assoc($result))
            {
                
    $ress $crop 0;
                for (
    $i 19$i 40; ++$i)
                {
                    if (
    $row['f' $i 't'] == 10)
                    {
                        
    $ress += $bid10[$row['f' $i]]['attri'] * STORAGE_MULTIPLIER;
                    }

                    if (
    $row['f' $i 't'] == 38)
                    {
                        
    $ress += $bid38[$row['f' $i]]['attri'] * STORAGE_MULTIPLIER;
                    }



                    if (
    $row['f' $i 't'] == 11)
                    {
                        
    $crop += $bid11[$row['f' $i]]['attri'] * STORAGE_MULTIPLIER;
                    }

                    if (
    $row['f' $i 't'] == 39)
                    {
                        
    $crop += $bid39[$row['f' $i]]['attri'] * STORAGE_MULTIPLIER;
                    }
                }

                if (
    $ress == 0)
                {
                    
    $ress 800 STORAGE_MULTIPLIER;
                }

                if (
    $crop == 0)
                {
                    
    $crop 800 STORAGE_MULTIPLIER;
                }

                
    mysql_query('UPDATE `' TB_PREFIX 'vdata` SET `maxstore` = ' $ress ', `maxcrop` = ' $crop ' WHERE `wref` = ' $row['vref']) or die(mysql_error());
            }
        }

        private function 
    oasisResoucesProduce($wref) {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."odata WHERE wood < 800 OR clay < 800 OR iron < 800 OR crop < 800 AND wref = ".$wref." ";
            
    $array $database->query_return($q);
            foreach(
    $array as $getoasis) {
            
    $oasiswood = (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
            
    $oasisclay = (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
            
    $oasisiron = (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
            
    $oasiscrop = (8*SPEED/3600)*(time()-$getoasis['lastupdated']);
            
    $database->modifyOasisResource($getoasis['wref'],$oasiswood,$oasisclay,$oasisiron,$oasiscrop,1);
            
    $database->updateOasis($getoasis['wref']);
            }
        }

        private function 
    checkInvitedPlayes() {
            global 
    $database;
            
    $q "SELECT * FROM ".TB_PREFIX."users WHERE invited != 0";
            
    $array $database->query_return($q);
            foreach(
    $array as $user) {
            
    $numusers mysql_query("SELECT * FROM ".TB_PREFIX."users WHERE id = ".$user['invited']);
            if(
    mysql_num_rows($numusers) > 0){
            
    $varray count($database->getProfileVillages($user['id']));
            if(
    $varray 1){
            
    $usergold $database->getUserField($user['invited'],"gold",0);
            
    $gold $usergold+50;
            
    $database->updateUserField($user['invited'],"gold",$gold,1);
            
    $database->updateUserField($user['id'],"invited",0,1);
            }
            }
            }
        }

        private function 
    updateGeneralAttack() {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."general WHERE shown = 1";
            
    $array $database->query_return($q);
            foreach(
    $array as $general) {
            if(
    time() - (86400*8) > $general['time']){
                
    mysql_query("UPDATE ".TB_PREFIX."general SET shown = 0 WHERE id = ".$general['id']."");
            }
            }
        }

        private function 
    MasterBuilder() {
            global 
    $database;
            
    $q "SELECT * FROM ".TB_PREFIX."bdata WHERE master = 1";
            
    $array $database->query_return($q);
            foreach(
    $array as $master) {
            
    $villwood $database->getVillageField($master['wid'],'wood');
            
    $villclay $database->getVillageField($master['wid'],'clay');
            
    $villiron $database->getVillageField($master['wid'],'iron');
            
    $villcrop $database->getVillageField($master['wid'],'crop');
            
    $type $master['type'];
            
    $level $master['level'];
            
    $buildarray $GLOBALS["bid".$type];
            
    $buildwood $buildarray[$level]['wood'];
            
    $buildclay $buildarray[$level]['clay'];
            
    $buildiron $buildarray[$level]['iron'];
            
    $buildcrop $buildarray[$level]['crop'];
            
    $ww count($database->getBuildingByType($master['wid'],40));
            if(
    $master['field'] < 19){
            
    $bdata count($database->getDorf1Building($master['wid']));
            
    $bbdata count($database->getDorf2Building($master['wid']));
            
    $bdata1 $database->getDorf1Building($master['wid']);
            }else{
            
    $bdata count($database->getDorf2Building($master['wid']));
            
    $bbdata count($database->getDorf1Building($master['wid']));
            
    $bdata1 $database->getDorf2Building($master['wid']);
            }
            
    $owner $database->getVillageField($master['wid'],'owner');
            if(
    $database->getUserField($owner,'plus',0) > time() or $ww 0){
            if(
    $bbdata 2){
            
    $inbuild 2;
            }else{
            
    $inbuild 1;
            }
            }else{
            
    $inbuild 1;
            }
            
    $usergold $database->getUserField($owner,'gold',0);
            if(
    $bdata $inbuild && $buildwood $villwood && $buildclay $villclay && $buildiron $villiron && $buildcrop $villcrop && $usergold 0){
            
    $time $master['timestamp']+time();
            if(!empty(
    $bdata1)){
            foreach(
    $bdata1 as $master1) {
            
    $time += ($master1['timestamp']-time());
            }
            }
            if(
    $bdata == 0){
            
    $database->updateBuildingWithMaster($master['id'],$time,0);
            }else{
            
    $database->updateBuildingWithMaster($master['id'],$time,1);
            }
            
    $gold $usergold-1;
            
    $database->updateUserField($owner,'gold',$gold,1);
            
    $database->modifyResource($master['wid'],$buildwood,$buildclay,$buildiron,$buildcrop,0);
            }
            }
        }

        private function 
    starvation() {
        if(
    file_exists("GameEngine/Prevention/starvation.txt")) {
                
    unlink("GameEngine/Prevention/starvation.txt");
            }
            global 
    $database;
            
    $ourFileHandle fopen("GameEngine/Prevention/starvation.txt"'w');
            
    fclose($ourFileHandle);
            
    $starvupkeep = array(

                
    '1'=>1,
                
    '2'=>1,
                
    '3'=>1,
                
    '4'=>2,
                
    '5'=>3,
                
    '6'=>4,
                
    '7'=>3,
                
    '8'=>6,
                
    '9'=>5,
                
    '10'=>1,
                
    '11'=>1,
                
    '12'=>1,
                
    '13'=>1,
                
    '14'=>1,
                
    '15'=>2,
                
    '16'=>3,
                
    '17'=>6,
                
    '18'=>4,
                
    '19'=>1,
                
    '20'=>1,
                
    '21'=>1,
                
    '22'=>1,
                
    '23'=>2,
                
    '24'=>2,
                
    '25'=>2,
                
    '26'=>3,
                
    '27'=>3,
                
    '28'=>6,
                
    '29'=>4,
                
    '30'=>1,
                
    '31'=>1,
                
    '32'=>1,
                
    '33'=>1,
                
    '34'=>2,
                
    '35'=>2,
                
    '36'=>3,
                
    '37'=>3,
                
    '38'=>3,
                
    '39'=>3,
                
    '40'=>5,
                
    '41'=>1,
                
    '42'=>1,
                
    '43'=>1,
                
    '44'=>1,
                
    '45'=>2,
                
    '46'=>3,
                
    '47'=>6,
                
    '48'=>5,
                
    '49'=>1,
                
    '50'=>1,
                
    'hero'=>6
            
    );

            
    $time time();

            
    // load villages with minus prod
            
    $starvarray = array();
            
    $starvarray $database->getStarvation();
            foreach (
    $starvarray as $starv){
            
    $unitarrays $this->getAllUnits($starv['wref']);
            
    $upkeep $starv['pop'] + $this->getUpkeep($unitarrays0);
                if ((
    $starv['starvupdate']+600) < $time){
                    
    // get enforce
                    
    $enforcearray $database->getEnforceVillage($starv['wref'],0);
                    
    $maxcount 0;
                    if(
    count($enforcearray)==0){
                        
    // get units
                        
    $unitarray $database->getUnit($starv['wref']);
                        for(
    $i $i <= 50 $i++){
                            
    $units $unitarray['u'.$i];
                            if(
    $unitarray['u'.$i] > $maxcount){
                                
    $maxcount $unitarray['u'.$i];
                                
    $maxtype $i;
                            }
                            
    $totalunits += $unitarray['u'.$i];
                        }
                        if(
    $totalunits == 0){
                        
    $maxcount $unitarray['hero'];
                        
    $maxtype "hero";
                        }
                    }else{
                        foreach (
    $enforcearray as $enforce){
                            for(
    $i $i <= 50 $i++){
                                
    $units $enforce['u'.$i];
                                if(
    $enforce['u'.$i] > $maxcount){
                                    
    $maxcount $enforce['u'.$i];
                                    
    $maxtype $i;
                                    
    $enf $enforce['id'];
                                }
                                
    $totalunits += $enforce['u'.$i];
                                }
                        if(
    $totalunits == 0){
                        
    $maxcount $enforce['hero'];
                        
    $maxtype "hero";
                        }
                        }
                        }

                    
    // counting

                    
    $timedif $time-$starv['starvupdate'];

                    
    $starvsec = ($starv['starv']/3600);

                    
    $difcrop = ($timedif*$starvsec);
                    
    $newcrop 0;
                    
    $oldcrop $database->getVillageField($starv['wref'], 'crop');
                    if (
    $oldcrop 100){
                        
    $difcrop $difcrop-$oldcrop;
                        if(
    $difcrop 0){
                            
    $difcrop 0;
                            
    $newcrop $oldcrop-$difcrop;
                            
    $database->setVillageField($starv['wref'], 'crop'$newcrop);
                        }
                    }
                    if(
    $difcrop 0){
                        
    $killunits floor($difcrop/18000);
                        if(
    $killunits 0){
                        if (isset(
    $enf)){
                            if(
    $killunits $maxcount){
                                
    $database->modifyEnforce($enf$maxtype$killunits0);
                                
    $database->setVillageField($starv['wref'], 'starv'$upkeep);
                                
    $database->setVillageField($starv['wref'], 'starvupdate'$time);
                            }else{
                                
    $database->deleteReinf($enf);
                                
    $database->setVillageField($starv['wref'], 'starv'$upkeep);
                                
    $database->setVillageField($starv['wref'], 'starvupdate'$time);
                            }
                        }else{
                            if(
    $killunits $maxcount){
                                
    $database->modifyUnit($starv['wref'], array($maxtype), array($killunits), array(0));
                                
    $database->setVillageField($starv['wref'], 'starv'$upkeep);
                                
    $database->setVillageField($starv['wref'], 'starvupdate'$time);
                            }elseif(
    $killunits $maxcount){
                                
    $killunits $maxcount;
                                
    $database->modifyUnit($starv['wref'], array($maxtype), array($killunits), array(0));
                                
    $database->setVillageField($starv['wref'], 'starv'$upkeep);
                                
    $database->setVillageField($starv['wref'], 'starvupdate'$time);
                            }
                        }
                        }
                    }
                }
                    
    $crop $database->getCropProdstarv($starv['wref']);
                    if (
    $crop $upkeep){
                        
    $database->setVillageField($starv['wref'], 'starv'0);
                        
    $database->setVillageField($starv['wref'], 'starvupdate'0);
                    }

                unset (
    $starv,$unitarrays,$enforcearray,$enforce,$starvarray);
            }

            if(
    file_exists("GameEngine/Prevention/starvation.txt")) {
                
    unlink("GameEngine/Prevention/starvation.txt");
            }
        }

        private function 
    procClimbers() {
            if(
    file_exists("GameEngine/Prevention/climbers.txt")) {
                
    unlink("GameEngine/Prevention/climbers.txt");
            }
                global 
    $database$ranking;
                        
    $users "SELECT * FROM " TB_PREFIX "users WHERE access < " . (INCLUDE_ADMIN "10" "8") . "";
                        
    $array $database->query_return($users);
                        
    $ranking->procRankArray();
                        if(
    mysql_num_rows(mysql_query($users)) > 0){
                        
    $q "SELECT * FROM ".TB_PREFIX."medal order by week DESC LIMIT 0, 1";
                        
    $result mysql_query($q);
                        if(
    mysql_num_rows($result)) {
                            
    $row=mysql_fetch_assoc($result);
                            
    $week=($row['week']+1);
                        } else {
                            
    $week='1';
                        }
                        foreach(
    $array as $session){
                        
    $oldrank $ranking->getUserRank($session['id']);
                        if(
    $session['oldrank'] == 0){
                        
    $database->updateoldrank($session['id'], $oldrank);
                        }else{
                        if(
    $week 1){
                        if(
    $session['oldrank'] > $oldrank) {
                            
    $totalpoints $session['oldrank'] - $oldrank;
                            
    $database->addclimberrankpop($session['id'], $totalpoints);
                            
    $database->updateoldrank($session['id'], $oldrank);
                        } else
                            if(
    $session['oldrank'] < $oldrank) {
                                
    $totalpoints $oldrank $session['oldrank'];
                                
    $database->removeclimberrankpop($session['id'], $totalpoints);
                                
    $database->updateoldrank($session['id'], $oldrank);
                            }
                        }else{
                            
    $totalpoints mysql_num_rows(mysql_query($users)) - $oldrank;
                            
    $database->setclimberrankpop($session['id'], $totalpoints+1);
                            
    $database->updateoldrank($session['id'], $oldrank);
                        }
                        }
                        }
                        }
                        
    $alliance $database->getARanking();
                        
    $ranking->procARankArray();
                        if(
    count($ranking->getRank()) > 0){
                        foreach(
    $alliance as $ally){
                        
    $memberlist $database->getAllMember($ally['id']);
                        
    $oldrank 0;
                        foreach(
    $memberlist as $member) {
                            
    $oldrank += $database->getVSumField($member['id'],"pop");
                        }
                        if(
    $ally['oldrank'] == 0){
                        
    $database->updateoldrankAlly($ally['id'], $oldrank);
                        }
                            if(
    $ally['oldrank'] < $oldrank) {
                                
    $totalpoints $oldrank $ally['oldrank'];
                                
    $database->addclimberrankpopAlly($ally['id'], $totalpoints);
                                
    $database->updateoldrankAlly($ally['id'], $oldrank);
                            } else
                                if(
    $ally['oldrank'] > $oldrank) {
                                    
    $totalpoints $ally['oldrank'] - $oldrank;
                                    
    $database->removeclimberrankpopAlly($ally['id'], $totalpoints);
                                    
    $database->updateoldrankAlly($ally['id'], $oldrank);
                                }
                        }
                        }
            if(
    file_exists("GameEngine/Prevention/climbers.txt")) {
                
    unlink("GameEngine/Prevention/climbers.txt");
            }
        }
                
        private function 
    checkBan() {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM ".TB_PREFIX."banlist WHERE active = 1 and end < $time";
            
    $array $database->query_return($q);
            foreach(
    $array as $banlist) {
                
    mysql_query("UPDATE ".TB_PREFIX."banlist SET active = 0 WHERE id = ".$banlist['id']."");
                
    mysql_query("UPDATE ".TB_PREFIX."users SET access = 2 WHERE id = ".$banlist['uid']."");
            }
        }

        private function 
    regenerateOasisTroops() {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM " TB_PREFIX "odata where conqured = 0 and $time - lastupdated > 3600";
            
    $array $database->query_return($q);
            foreach(
    $array as $oasis) {
                
    $database->populateOasisUnits($oasis['wref'],$oasis['high']);
                
    $database->updateOasis($oasis['wref']);
            }
        }
        
        private function 
    artefactOfTheFool() {
            global 
    $database;
            
    $time time();
            
    $q "SELECT * FROM " TB_PREFIX "artefacts where type = 8 and active = 1 and $time - lastupdate >= 86400";
            
    $array $database->query_return($q);
            foreach(
    $array as $artefact) {
            
    $kind rand(1,7);
            while(
    $kind == 6){
            
    $kind rand(1,7);
            }
            if(
    $artefact['size'] != 3){
            
    $bad_effect rand(0,1);
            }else{
            
    $bad_effect 0;
            }
            switch(
    $kind) {
                    case 
    1:
                    
    $effect rand(1,5);
                    break;
                    case 
    2:
                    
    $effect rand(1,3);
                    break;
                    case 
    3:
                    
    $effect rand(3,10);
                    break;
                    case 
    4:
                    
    $effect rand(2,4);
                    break;
                    case 
    5:
                    
    $effect rand(2,4);
                    break;
                    case 
    7:
                    
    $effect rand(1,6);
                    break;
                }
            
    mysql_query("UPDATE ".TB_PREFIX."artefacts SET kind = $kind, bad_effect = $bad_effect, effect2 = $effect, lastupdate = $time WHERE id = ".$artefact['id']."");
            }
        }
    }
    $automation = new Automation;
    ?>
    i don't think that is the problem, because all oasis start with 800 from every resouce and it update only for oasis that have less than 800 from something.
    if it will be only after attack the resources almost will not up full (maybe on 1000000 speed).
    i think the problem is the climbers function, you can delete it and add after 10 minutes as example (i tryed to make it automaticly but is still was slow, i succeeded to improve the speed only by remove it).

  3. #3
    Enthusiast denixue is offline
    MemberRank
    Jul 2012 Join Date
    26Posts

    Re: [FIX]TravianZ Fix for git issue causing lag

    yea the problem is in climbers function..
    just look ally top10(climbers grow up on every click...) will be fixed.. soon

  4. #4
    Proficient Member fullhdpixel is offline
    MemberRank
    Jul 2012 Join Date
    155Posts

    Re: [FIX]TravianZ Fix for git issue causing lag

    good work!

  5. #5
    Enthusiast Mikele is offline
    MemberRank
    Nov 2011 Join Date
    49Posts

    Re: [FIX]TravianZ Fix for git issue causing lag

    hello advocaite,
    travianz runs better now, definitely.
    i played for a while.. really good job advo.. thx a lot

    but i´ve a little prob: i can´t conquere oases... even before your modification.
    Automation.php always sends:"Your hero had nothing to kill therefore gains no XP at all"
    PHP Code:
    if ($heroxp == 0
    is true, ok, but why is the previous condition without function:"Your hero has conquered this oasis"?

    greets
    mikele



Advertisement