mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-06-28 08:34:33 +00:00
5796 lines
277 KiB
PHP
Executable File
5796 lines
277 KiB
PHP
Executable File
<?php
|
|
|
|
#################################################################################
|
|
## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ##
|
|
## --------------------------------------------------------------------------- ##
|
|
## Project: TravianZ ##
|
|
## Version: 22.06.2015 ##
|
|
## Filename Automation.php ##
|
|
## Developed by: Mr.php , Advocaite , brainiacX , yi12345 , Shadow , ronix ##
|
|
## Fixed by: Shadow - STARVATION , HERO FIXED COMPL. ##
|
|
## Fixed by: InCube - double troops ##
|
|
## License: TravianZ Project ##
|
|
## Copyright: TravianZ (c) 2010-2015. All rights reserved. ##
|
|
## URLs: http://travian.shadowss.ro ##
|
|
## Source code: https://github.com/Shadowss/TravianZ ##
|
|
## ##
|
|
#################################################################################
|
|
|
|
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 __construct() {
|
|
|
|
$this->procNewClimbers();
|
|
$this->ClearUser();
|
|
$this->ClearInactive();
|
|
$this->oasisResourcesProduce();
|
|
$this->pruneResource();
|
|
$this->pruneOResource();
|
|
$this->checkWWAttacks();
|
|
if(!file_exists("GameEngine/Prevention/culturepoints.txt") or time()-filemtime("GameEngine/Prevention/culturepoints.txt")>50) {
|
|
$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")>50) {
|
|
$this->clearDeleting();
|
|
}
|
|
if (! file_exists("GameEngine/Prevention/build.txt") or time() - filemtime("GameEngine/Prevention/build.txt")>50)
|
|
{
|
|
$this->buildComplete();
|
|
}
|
|
$this->MasterBuilder();
|
|
if (! file_exists("GameEngine/Prevention/demolition.txt") or time() - filemtime("GameEngine/Prevention/demolition.txt")>50)
|
|
{
|
|
$this->demolitionComplete();
|
|
}
|
|
// TODO: check if commenting-out this next line affected anything (it shouldn't) and should improve performance
|
|
//$this->updateStore();
|
|
$this->delTradeRoute();
|
|
$this->TradeRoute();
|
|
if(!file_exists("GameEngine/Prevention/market.txt") or time()-filemtime("GameEngine/Prevention/market.txt")>50) {
|
|
$this->marketComplete();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/research.txt") or time()-filemtime("GameEngine/Prevention/research.txt")>50) {
|
|
$this->researchComplete();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/training.txt") or time()-filemtime("GameEngine/Prevention/training.txt")>50) {
|
|
$this->trainingComplete();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/starvation.txt") or time()-filemtime("GameEngine/Prevention/starvation.txt")>50) {
|
|
$this->starvation();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/celebration.txt") or time()-filemtime("GameEngine/Prevention/celebration.txt")>50) {
|
|
$this->celebrationComplete();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/sendunits.txt") or time()-filemtime("GameEngine/Prevention/sendunits.txt")>50) {
|
|
$this->sendunitsComplete();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/loyalty.txt") or time()-filemtime("GameEngine/Prevention/loyalty.txt")>60) {
|
|
$this->loyaltyRegeneration();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/sendreinfunits.txt") or time()-filemtime("GameEngine/Prevention/sendreinfunits.txt")>50) {
|
|
$this->sendreinfunitsComplete();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/returnunits.txt") or time()-filemtime("GameEngine/Prevention/returnunits.txt")>50) {
|
|
$this->returnunitsComplete();
|
|
}
|
|
if(!file_exists("GameEngine/Prevention/settlers.txt") or time()-filemtime("GameEngine/Prevention/settlers.txt")>50) {
|
|
$this->sendSettlersComplete();
|
|
}
|
|
$this->updateGeneralAttack();
|
|
$this->checkInvitedPlayes();
|
|
$this->updateStore();
|
|
$this->CheckBan();
|
|
$this->regenerateOasisTroops();
|
|
$this->medals();
|
|
$this->artefactOfTheFool();
|
|
}
|
|
|
|
public function isWinner() {
|
|
// check whether someone already built a level 100 Wonder of the World
|
|
$q = mysqli_fetch_array(mysqli_query($GLOBALS['link'],"SELECT Count(*) as Total FROM ".TB_PREFIX."fdata WHERE f99 = 100 and f99t = 40"), MYSQLI_ASSOC);
|
|
if($q['Total'] > 0)
|
|
{
|
|
header('Location: winner.php');
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function procResType($ref,$mode=0,$isoasis=0) {
|
|
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;
|
|
}
|
|
if ($build=="") {
|
|
if ($mode) { //true to destroy village
|
|
$build="The village has been";
|
|
}else{ //capital or only 1 village left.. not destroy
|
|
$build="Village can't be";
|
|
}
|
|
}
|
|
if ($isoasis!=0) $build = "Oasis had";
|
|
return addslashes($build);
|
|
}
|
|
|
|
function recountPop($vid, $use_cache = true){
|
|
global $database;
|
|
$vid = (int) $vid;
|
|
$fdata = $database->getResourceLevel($vid, $use_cache);
|
|
$popTot = 0;
|
|
|
|
for ($i = 1; $i <= 40; $i++) {
|
|
$lvl = $fdata["f".$i];
|
|
$building = $fdata["f".$i."t"];
|
|
if($building){
|
|
$popTot += $this->buildingPOP($building,$lvl);
|
|
}
|
|
}
|
|
$this->recountCP($vid);
|
|
$q = "UPDATE ".TB_PREFIX."vdata set pop = $popTot where wref = $vid";
|
|
mysqli_query($GLOBALS['link'],$q);
|
|
$owner = $database->getVillageField($vid,"owner");
|
|
$this->procClimbers($owner);
|
|
|
|
return $popTot;
|
|
|
|
}
|
|
|
|
function recountCP($vid){
|
|
global $database;
|
|
$vid = (int) $vid;
|
|
$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";
|
|
mysqli_query($GLOBALS['link'],$q);
|
|
|
|
return $popTot;
|
|
|
|
}
|
|
|
|
function buildingPOP($f,$lvl){
|
|
$name = "bid".$f;
|
|
global $$name;
|
|
$popT = 0;
|
|
$dataarray = $$name;
|
|
|
|
for ($i = 0; $i <= $lvl; $i++) {
|
|
$popT += ((isset($dataarray[$i]) && isset($dataarray[$i]['pop'])) ? $dataarray[$i]['pop'] : 0);
|
|
}
|
|
return $popT;
|
|
}
|
|
|
|
function buildingCP($f,$lvl){
|
|
$name = "bid".$f;
|
|
global $$name;
|
|
$popT = 0;
|
|
$dataarray = $$name;
|
|
|
|
for ($i = 0; $i <= $lvl; $i++) {
|
|
$popT += ((isset($dataarray[$i]) && isset($dataarray[$i]['cp'])) ? $dataarray[$i]['cp'] : 0);
|
|
}
|
|
return $popT;
|
|
}
|
|
|
|
private function loyaltyRegeneration() {
|
|
global $autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/loyalty.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/loyalty.txt");
|
|
}
|
|
//fix by ronix
|
|
//create new file to check filetime
|
|
//not every click regenerate but 1 minute or after
|
|
|
|
$ourFileHandle = fopen($autoprefix."GameEngine/Prevention/loyalty.txt", 'w');
|
|
fclose($ourFileHandle);
|
|
global $database;
|
|
$array = array();
|
|
$q = "SELECT wref, loyalty, lastupdate2 FROM ".TB_PREFIX."vdata WHERE loyalty < 100";
|
|
$array = $database->query_return($q);
|
|
if(!empty($array)) {
|
|
foreach($array as $loyalty) {
|
|
if (($t25_level = $this->getTypeLevel(25, $loyalty['wref'])) >= 1) {
|
|
$value = $t25_level;
|
|
}elseif(($t26_level = $this->getTypeLevel(26,$loyalty['wref'])) >= 1){
|
|
$value = $t26_level;
|
|
} else {
|
|
$value = 0;
|
|
}
|
|
$newloyalty = min(100,$loyalty['loyalty']+$value*(time()-$loyalty['lastupdate2'])/(60*60));
|
|
$q = "UPDATE ".TB_PREFIX."vdata SET loyalty = $newloyalty, lastupdate2=".time()." WHERE wref = '".$loyalty['wref']."'";
|
|
$database->query($q);
|
|
}
|
|
}
|
|
$array = array();
|
|
$q = "SELECT conqured, loyalty, lastupdated, wref FROM ".TB_PREFIX."odata WHERE loyalty < 100";
|
|
$array = $database->query_return($q);
|
|
if(!empty($array)) {
|
|
foreach($array as $loyalty) {
|
|
if(($t25_level = $this->getTypeLevel(25,$loyalty['conqured'])) >= 1){
|
|
$value = $t25_level;
|
|
}elseif(($t26_level = $this->getTypeLevel(26,$loyalty['conqured'])) >= 1){
|
|
$value = $t26_level;
|
|
} else {
|
|
$value = 0;
|
|
}
|
|
$newloyalty = min(100,$loyalty['loyalty']+$value*(time()-$loyalty['lastupdated'])/(60*60));
|
|
$q = "UPDATE ".TB_PREFIX."odata SET loyalty = $newloyalty, lastupdated=".time()." WHERE wref = '".$loyalty['wref']."'";
|
|
$database->query($q);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function getfieldDistance($coorx1, $coory1, $coorx2, $coory2) {
|
|
$max = 2 * 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($distanceX, 2) + pow($distanceY, 2));
|
|
return round($dist, 1);
|
|
}
|
|
|
|
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() {
|
|
global $autoprefix;
|
|
if(file_exists($autoprefix."GameEngine/Prevention/cleardeleting.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/cleardeleting.txt");
|
|
}
|
|
global $database;
|
|
$ourFileHandle = fopen($autoprefix."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) {
|
|
$village = (int) $village;
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."abdata where vref = ".$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 = "UPDATE ".TB_PREFIX."odata SET conqured = 0, loyalty = 100, owner = 2, name = 'Unoccupied Oasis' 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."farmlist where wref =".$village;
|
|
$database->query($q);
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."raidlist where towref = ".$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 = microtime(true);
|
|
$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 proc = 0 AND ((`to` = $village AND sort_type=4) OR (`from` = $village AND sort_type=3))";
|
|
$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 = microtime(true);
|
|
$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."enforcement where id = ".(int) $enforce['id'];
|
|
$database->query($q);
|
|
}
|
|
}
|
|
|
|
for($i=0;$i<20;$i++){
|
|
$q = "SELECT id FROM ".TB_PREFIX."users where friend".$i." = ".(int) $need['uid']." or friend".$i."wait = ".(int) $need['uid']."";
|
|
$array = $database->query_return($q);
|
|
foreach($array as $friend){
|
|
$database->deleteFriend($friend['id'],"friend".$i);
|
|
$database->deleteFriend($friend['id'],"friend".$i."wait");
|
|
}
|
|
}
|
|
|
|
$database->updateUserField($need['uid'], 'alliance', 0, 1);
|
|
|
|
if($database->isAllianceOwner($need['uid'])){
|
|
$alliance = $database->getUserAllianceID($need['uid']);
|
|
$newowner = $database->getAllMember2($alliance);
|
|
$newleader = $newowner['id'];
|
|
$q = "UPDATE " . TB_PREFIX . "alidata set leader = ".(int) $newleader." where id = ".(int) $alliance."";
|
|
$database->query($q);
|
|
$database->updateAlliPermissions($newleader, $alliance, "Leader", 1, 1, 1, 1, 1, 1, 1);
|
|
Automation::updateMax($newleader);
|
|
}
|
|
|
|
if (isset($alliance)) {
|
|
$database->deleteAlliance($alliance);
|
|
}
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."hero where uid = ".(int) $need['uid'];
|
|
$database->query($q);
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."mdata where target = ".(int) $need['uid']." or owner = ".(int) $need['uid'];
|
|
$database->query($q);
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."ndata where uid = ".(int) $need['uid'];
|
|
$database->query($q);
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."users where id = ".(int) $need['uid'];
|
|
$database->query($q);
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."deleting where uid = ".(int) $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 = "INSERT INTO ".TB_PREFIX."deleting SELECT id, UNIX_TIMESTAMP() FROM ".TB_PREFIX."users WHERE timestamp < $time AND tribe IN(1,2,3)";
|
|
$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) {
|
|
$database->query("UPDATE
|
|
".TB_PREFIX."odata
|
|
SET
|
|
wood = IF(wood < 0, 0, wood),
|
|
clay = IF(clay < 0, 0, clay),
|
|
iron = IF(iron < 0, 0, iron),
|
|
crop = IF(crop < 0, 0, crop),
|
|
maxstore = IF(maxstore < ".STORAGE_BASE.", ".STORAGE_BASE.", maxstore),
|
|
maxcrop = IF(maxcrop < ".STORAGE_BASE.", ".STORAGE_BASE.", maxcrop)
|
|
WHERE
|
|
maxstore < ".STORAGE_BASE." OR
|
|
maxcrop < ".STORAGE_BASE." OR
|
|
wood < 0 OR
|
|
clay < 0 OR
|
|
iron < 0 OR
|
|
crop < 0");
|
|
}
|
|
}
|
|
private function pruneResource() {
|
|
global $database;
|
|
if(!ALLOW_BURST) {
|
|
$database->query("UPDATE
|
|
".TB_PREFIX."vdata
|
|
SET
|
|
wood = IF(wood < 0, 0, wood),
|
|
clay = IF(clay < 0, 0, clay),
|
|
iron = IF(iron < 0, 0, iron),
|
|
crop = IF(crop < 0, 0, crop),
|
|
maxstore = IF(maxstore < ".STORAGE_BASE.", ".STORAGE_BASE.", maxstore),
|
|
maxcrop = IF(maxcrop < ".STORAGE_BASE.", ".STORAGE_BASE.", maxcrop)
|
|
WHERE
|
|
maxstore < ".STORAGE_BASE." OR
|
|
maxcrop < ".STORAGE_BASE." OR
|
|
wood < 0 OR
|
|
clay < 0 OR
|
|
iron < 0 OR
|
|
crop < 0");
|
|
|
|
$database->query("UPDATE
|
|
".TB_PREFIX."vdata
|
|
SET
|
|
wood = IF(wood > maxstore, maxstore, wood),
|
|
clay = IF(clay > maxstore, maxstore, clay),
|
|
iron = IF(iron > maxstore, maxstore, iron),
|
|
crop = IF(crop > maxcrop, maxcrop, crop)
|
|
WHERE
|
|
wood > maxstore OR
|
|
clay > maxstore OR
|
|
iron > maxstore OR
|
|
crop > maxcrop");
|
|
}
|
|
}
|
|
|
|
private function culturePoints() {
|
|
if(file_exists("GameEngine/Prevention/culturepoints.txt")) {
|
|
unlink("GameEngine/Prevention/culturepoints.txt");
|
|
}
|
|
global $database,$session;
|
|
//fix by ronix
|
|
if (SPEED >10)
|
|
$speed=10;
|
|
else
|
|
$speed=SPEED;
|
|
$dur_day=86400/$speed; //24 hours/speed
|
|
if ($dur_day<3600) $dur_day=3600;
|
|
$time = time()-600; // recount every 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'])/$dur_day;
|
|
|
|
$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() {
|
|
global $database,$bid18,$bid10,$bid11,$bid38,$bid39;
|
|
|
|
if(file_exists("GameEngine/Prevention/build.txt")) {
|
|
unlink("GameEngine/Prevention/build.txt");
|
|
}
|
|
|
|
$time = time();
|
|
// IDs of villages that were affected by this building completion update,
|
|
// used to calculate statistical data at the end
|
|
$villagesAffected = [];
|
|
// holds additional conditions when updating loopcon records in the bdata table
|
|
$loopconUpdates = [];
|
|
// this will hold IDs of bdata table records to delete
|
|
$dbIdsToDelete = [];
|
|
|
|
// get all pending builds that should be complete by now
|
|
$res = $database->query_return(
|
|
"SELECT
|
|
id, wid, field, level, type, timestamp
|
|
FROM
|
|
".TB_PREFIX."bdata
|
|
WHERE
|
|
timestamp < $time and master = 0"
|
|
);
|
|
|
|
// complete each of them
|
|
foreach($res as $indi) {
|
|
// store village ID for later for statistical updates
|
|
$villageData = $database->getVillageFields($indi['wid'],'owner, maxcrop, maxstore, starv, pop');
|
|
$villageOwner = $villageData['owner'];
|
|
$villagesAffected[] = (int) $indi['wid'];
|
|
$level = $database->getFieldLevel($indi['wid'],$indi['field']);
|
|
$fieldsToSet = [];
|
|
|
|
if (($level + 1) == $indi['level']){
|
|
$q = "UPDATE ".TB_PREFIX."fdata set f".$indi['field']." = ".$indi['level'].", f".$indi['field']."t = ".$indi['type']." where vref = ".(int) $indi['wid'];
|
|
} else {
|
|
$indi['level'] = ($level + 1);
|
|
$q = "UPDATE ".TB_PREFIX."fdata set f".$indi['field']." = ".$indi['level'].", f".$indi['field']."t = ".$indi['type']." where vref = ".(int) $indi['wid'];
|
|
}
|
|
|
|
if($database->query($q)) {
|
|
// this will be the level we brought the building to now
|
|
$level = $indi['level'];
|
|
|
|
// TODO: magic numbers into constants (for building types below)
|
|
|
|
// update capacity if we updated a warehouse or a granary
|
|
if (in_array($indi['type'], [10, 11, 38, 39])) {
|
|
$fieldDbName = (in_array($indi['type'], [10, 38]) ? 'maxstore' : 'maxcrop');
|
|
$max = $villageData[$fieldDbName];
|
|
|
|
if($level == 1 && $max == STORAGE_BASE) {
|
|
$max=STORAGE_BASE;
|
|
}
|
|
|
|
if ($level != 1) {
|
|
$max -= ${'bid'.$indi['type']}[$level-1]['attri'] * STORAGE_MULTIPLIER;
|
|
$max += ${'bid'.$indi['type']}[$level]['attri'] * STORAGE_MULTIPLIER;
|
|
} else {
|
|
$max = ${'bid'.$indi['type']}[$level]['attri'] * STORAGE_MULTIPLIER;
|
|
}
|
|
|
|
$fieldsToSet[$fieldDbName] = $max;
|
|
}
|
|
|
|
// if we updated Embassy, update maximum members that the alliance can take
|
|
if($indi['type'] == 18){
|
|
Automation::updateMax($villageOwner);
|
|
}
|
|
|
|
// by SlimShady95 aka Manuel Mannhardt < manuel_mannhardt@web.de >
|
|
if ($indi['type'] == 40 && ($indi['level'] % 5 == 0 || $indi['level'] > 95) && $indi['level'] != 100) {
|
|
$this->startNatarAttack($indi['level'], $indi['wid'], $indi['timestamp']);
|
|
}
|
|
|
|
//now can't be more than one winner if ww to level 100 is build by 2 users or more on same time
|
|
if ($indi['type'] == 40 && $indi['level'] == 100) {
|
|
mysqli_query($GLOBALS['link'],"TRUNCATE ".TB_PREFIX."bdata");
|
|
}
|
|
|
|
// TODO: find out what exactly these conditions are for
|
|
// no special military conditioning for Teutons and Gauls
|
|
if ($database->getUserField($villageOwner, "tribe", 0) != 1) {
|
|
$loopconUpdates[$indi['wid']] = '';
|
|
} else {
|
|
// special condition for Roman military buildings
|
|
if ($indi['field'] > 18) {
|
|
$loopconUpdates[$indi['wid']] = ' AND field > 18';
|
|
} else {
|
|
$loopconUpdates[$indi['wid']] = ' AND field < 19';
|
|
}
|
|
}
|
|
|
|
$dbIdsToDelete[] = (int) $indi['id'];
|
|
}
|
|
|
|
$crop = $database->getCropProdstarv($indi['wid']);
|
|
$unitarrays = $this->getAllUnits($indi['wid']);
|
|
$upkeep = $villageData['pop'] + $this->getUpkeep($unitarrays, 0);
|
|
$starv = $villageData["starv"];
|
|
if ($crop < $upkeep) {
|
|
// add starv data
|
|
$fieldsToSet['starv'] = $upkeep;
|
|
if($starv==0){
|
|
$fieldsToSet['starvupdate'] = $time;
|
|
}
|
|
}
|
|
|
|
// update the requested fields, all at once
|
|
$database->setVillageFields($indi['wid'], array_keys($fieldsToSet), array_values($fieldsToSet));
|
|
}
|
|
|
|
// update statistical data for affected villages
|
|
foreach ($villagesAffected as $affected_id) {
|
|
$this->recountPop( $affected_id );
|
|
}
|
|
|
|
// update data that can be done in one swoop instead of using multiple update queries
|
|
// no special checks for Romans
|
|
foreach ($loopconUpdates as $villageId => $updateCondition) {
|
|
$database->query(
|
|
"UPDATE
|
|
".TB_PREFIX."bdata
|
|
SET
|
|
loopcon = 0
|
|
WHERE
|
|
loopcon = 1 AND
|
|
master = 0 AND
|
|
wid = ".$villageId.$updateCondition);
|
|
}
|
|
|
|
// delete all processed entries
|
|
$database->query("DELETE FROM ".TB_PREFIX."bdata WHERE id IN(".implode(',', $dbIdsToDelete).")");
|
|
|
|
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, $time) {
|
|
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(
|
|
5 => array(
|
|
array(3412, 2814, 4156, 3553, 9, 0),
|
|
array(35, 0, 77, 33, 17, 10)
|
|
),
|
|
|
|
10 => array(
|
|
array(4314, 3688, 5265, 4621, 13, 0),
|
|
array(65, 0, 175, 77, 28, 17)
|
|
),
|
|
|
|
15 => array(
|
|
array(4645, 4267, 5659, 5272, 15, 0),
|
|
array(99, 0, 305, 134, 40, 25)
|
|
),
|
|
|
|
20 => array(
|
|
array(6207, 5881, 7625, 7225, 22, 0),
|
|
array(144, 0, 456, 201, 56, 36)
|
|
),
|
|
|
|
25 => array(
|
|
array(6004, 5977, 7400, 7277, 23, 0),
|
|
array(152, 0, 499, 220, 58, 37)
|
|
),
|
|
|
|
30 => array(
|
|
array(7073, 7181, 8730, 8713, 27, 0),
|
|
array(183, 0, 607, 268, 69, 45)
|
|
),
|
|
|
|
35 => array(
|
|
array(7090, 7320, 8762, 8856, 28, 0),
|
|
array(186, 0, 620, 278, 70, 45)
|
|
),
|
|
|
|
40 => array(
|
|
array(7852, 6967, 9606, 8667, 25, 0),
|
|
array(146, 0, 431, 190, 60, 37)
|
|
),
|
|
|
|
45 => array(
|
|
array(8480, 8883, 10490, 10719, 35, 0),
|
|
array(223, 0, 750, 331, 83, 54)
|
|
),
|
|
|
|
50 => array(
|
|
array(8522, 9038, 10551, 10883, 35, 0),
|
|
array(224, 0, 757, 335, 83, 54)
|
|
),
|
|
|
|
55 => array(
|
|
array(8931, 8690, 10992, 10624, 32, 0),
|
|
array(219, 0, 707, 312, 84, 54)
|
|
),
|
|
|
|
60 => array(
|
|
array(12138, 13013, 15040, 15642, 51, 0),
|
|
array(318, 0, 1079, 477, 118, 76)
|
|
),
|
|
|
|
65 => array(
|
|
array(13397, 14619, 16622, 17521, 58, 0),
|
|
array(345, 0, 1182, 522, 127, 83)
|
|
),
|
|
|
|
70 => array(
|
|
array(16323, 17665, 20240, 21201, 70, 0),
|
|
array(424, 0, 1447, 640, 157, 102)
|
|
),
|
|
|
|
75 => array(
|
|
array(20739, 22796, 25746, 27288, 91, 0),
|
|
array(529, 0, 1816, 803, 194, 127)
|
|
),
|
|
|
|
80 => array(
|
|
array(21857, 24180, 27147, 28914, 97, 0),
|
|
array(551, 0, 1898, 839, 202, 132)
|
|
),
|
|
|
|
85 => array(
|
|
array(22476, 25007, 27928, 29876, 100, 0),
|
|
array(560, 0, 1933, 855, 205, 134)
|
|
),
|
|
|
|
90 => array(
|
|
array(31345, 35053, 38963, 41843, 141, 0),
|
|
array(771, 0, 2668, 1180, 281, 184)
|
|
),
|
|
|
|
95 => array(
|
|
array(31720, 35635, 39443, 42506, 144, 0),
|
|
array(771, 0, 2671, 1181, 281, 184)
|
|
),
|
|
|
|
96 => array(
|
|
array(32885, 37007, 40897, 44130, 150, 0),
|
|
array(795, 0, 2757, 1219, 289, 190)
|
|
),
|
|
|
|
97 => array(
|
|
array(32940, 37099, 40968, 44235, 150, 0),
|
|
array(794, 0, 2755, 1219, 289, 190)
|
|
),
|
|
|
|
98 => array(
|
|
array(33521, 37691, 41686, 44953, 152, 0),
|
|
array(812, 0, 2816, 1246, 296, 194)
|
|
),
|
|
|
|
99 => array(
|
|
array(36251, 40861, 45089, 48714, 165, 0),
|
|
array(872, 0, 3025, 1338, 317, 208)
|
|
)
|
|
);
|
|
|
|
// select the troops^^
|
|
if (isset($troops[$level]))
|
|
{
|
|
$units = $troops[$level];
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// get the capital village from the natars
|
|
$query = mysqli_query($GLOBALS['link'],'SELECT `wref` FROM `' . TB_PREFIX . 'vdata` WHERE `owner` = 3 and `capital` = 1 LIMIT 1') or die(mysqli_error($database->dblink));
|
|
$row = mysqli_fetch_assoc($query);
|
|
|
|
// start the attacks
|
|
$endtime = $time + round((60 * 60 * 24) / INCREASE_SPEED);
|
|
|
|
// -.-
|
|
$vid = (int) $vid;
|
|
mysqli_query($GLOBALS['link'],'INSERT INTO `' . TB_PREFIX . 'ww_attacks` (`vid`, `attack_time`) VALUES (' . $vid . ', ' . $endtime . ')');
|
|
mysqli_query($GLOBALS['link'],'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], 0, 0, 0, 3, 0, 0, 0, 0, 20, 20, 0, 20, 20, 20, 20);
|
|
$database->addMovement(3, $row['wref'], $vid, $ref, $time, $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], 0, 0, 0, 3, 40, 0, 0, 0, 20, 20, 0, 20, 20, 20, 20, array('vid' => $vid, 'endtime' => ($endtime + 1)));
|
|
$database->addMovement(3, $row['wref'], $vid, $ref2, $time, $endtime + 1);
|
|
}
|
|
|
|
private function checkWWAttacks() {
|
|
$query = mysqli_query($GLOBALS['link'],'SELECT vid, attack_time FROM `' . TB_PREFIX . 'ww_attacks` WHERE `attack_time` <= ' . time());
|
|
while ($row = mysqli_fetch_assoc($query))
|
|
{
|
|
// delete the attack
|
|
$query3 = mysqli_query($GLOBALS['link'],'DELETE FROM `' . TB_PREFIX . 'ww_attacks` WHERE `vid` = ' . (int) $row['vid'] . ' AND `attack_time` = ' . (int) $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`, wood, clay, iron, crop, wid, deliveries, id 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() {
|
|
global $database, $autoprefix;
|
|
if(file_exists($autoprefix."GameEngine/Prevention/market.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/market.txt");
|
|
}
|
|
$ourFileHandle = fopen($autoprefix."GameEngine/Prevention/market.txt", 'w');
|
|
fclose($ourFileHandle);
|
|
$time = microtime(true);
|
|
$q = "SELECT s.wood, s.clay, s.iron, s.crop, `to`, `from`, endtime, merchant, send, moveid FROM ".TB_PREFIX."movement m, ".TB_PREFIX."send s WHERE m.ref = s.id AND m.proc = 0 AND sort_type = 0 AND endtime < $time";
|
|
$dataarray = $database->query_return($q);
|
|
|
|
foreach($dataarray as $data) {
|
|
$userData_from = $database->getUserFields($database->getVillageField($data['from'],"owner"),"alliance, tribe",0);
|
|
$userData_to = $database->getUserFields($database->getVillageField($data['to'],"owner"),"alliance, tribe",0);
|
|
|
|
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']);
|
|
|
|
$ownally = $userData_from['alliance'];
|
|
$targetally = $userData_to['alliance'];
|
|
|
|
$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 = $userData_to["tribe"];
|
|
$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 send, moveid, `to`, wood, clay, iron, crop, `from` 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->getUserFields($database->getVillageField($data1['to'],"owner"),"alliance, tribe",0)['tribe'];
|
|
$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, false);
|
|
$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 != 0 && $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,microtime(true),microtime(true)+$timetaken,$send);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private function resolveCatapultsDestruction(&$bdo, &$battlepart, &$info_cat, &$data, $catapultTarget, $twoRowsCatapultSetup, $isSecondRow, $catp_pic, $can_destroy, $isoasis, &$village_destroyed) {
|
|
global $database;
|
|
|
|
// currently targeted building/field level
|
|
$tblevel = (int) $bdo['f'.$catapultTarget];
|
|
// currently targetet building/field GID (ID of the building/field type - woodcutter, cropland, embassy...)
|
|
$tbgid = (int) $bdo['f'.$catapultTarget.'t'];
|
|
// currently targeted building/field ID in the database (fdata, the fID field, e.g. f1, f2, f3...)
|
|
$tbid = (int) $catapultTarget;
|
|
|
|
// building/field destroyed
|
|
if ($battlepart[4]>$battlepart[3])
|
|
{
|
|
// prepare data to be updated
|
|
$fieldsToSet = ["f".$tbid];
|
|
$fieldValuesToSet = [0];
|
|
|
|
// update $bdo, so we don't have to reselect later
|
|
$bdo['f'.$catapultTarget] = 0;
|
|
|
|
if ($tbid >= 19 && $tbid != 99) {
|
|
$fieldsToSet[] = "f".$tbid."t";
|
|
$fieldValuesToSet[] = 0;
|
|
$bdo['f'.$catapultTarget."t"] = 0;
|
|
}
|
|
|
|
// update all that needs updating
|
|
$database->setVillageLevel($data['to'], $fieldsToSet, $fieldValuesToSet);
|
|
|
|
$buildarray = $GLOBALS["bid".$tbgid];
|
|
|
|
// (great) warehouse level was changed
|
|
if ($tbgid==10 || $tbgid==38) {
|
|
$database->setMaxStoreForVillage($data['to'], $buildarray[$tblevel]['attri']);
|
|
}
|
|
|
|
// (great) granary level was changed
|
|
if ($tbgid==11 || $tbgid==39) {
|
|
$database->setMaxCropForVillage($data['to'], $buildarray[$tblevel]['attri']);
|
|
}
|
|
|
|
// embassy level was changed
|
|
if ($tbgid==18){
|
|
$info_cat .= $database->checkEmbassiesAfterBattle($data['to'], false);
|
|
}
|
|
|
|
// oasis cannot be destroyed
|
|
if ($isoasis == 0) {
|
|
$pop=$this->recountPop($data['to'], false);
|
|
if($pop==0 && $can_destroy==1){
|
|
$village_destroyed = 1;
|
|
// this will ensure the right $info_cat text
|
|
$tbgid = 0;
|
|
}
|
|
}
|
|
|
|
if ($isSecondRow) {
|
|
$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,$can_destroy,$isoasis)." destroyed.</td></tr></tbody>";
|
|
} else {
|
|
$info_cat = "" . $catp_pic . ", " . $this->procResType( $tbgid, $can_destroy, $isoasis ) . " destroyed.";
|
|
}
|
|
}
|
|
// building/field not damaged
|
|
elseif ($battlepart[4]==0)
|
|
{
|
|
if ($isSecondRow) {
|
|
$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,$can_destroy,$isoasis)." was not damaged.</td></tr></tbody>";
|
|
} else {
|
|
$info_cat = "" . $catp_pic . "," . $this->procResType( $tbgid, $can_destroy, $isoasis ) . " was not damaged.";
|
|
}
|
|
}
|
|
else
|
|
// building/field was damaged, let's calculate the actual damage
|
|
{
|
|
//TODO: MUST TO BE FIX This part goes also below 0 if u have a lot of catapults
|
|
// TODO: this whole math seems incorrect, it needs a revision, and potentially a rewrite
|
|
$totallvl = round( sqrt( pow( ( $tblevel + 0.5 ), 2 ) - ( ( !$twoRowsCatapultSetup ? (int) $battlepart[4] : (int) $battlepart[4] / 2 ) * 8 ) ) );
|
|
|
|
// sometimes this goes above the actual level, so in that case we just reverse everything
|
|
// and take the buiding down so many levels
|
|
if ($totallvl > $tblevel) {
|
|
$totallvl = $tblevel - ($totallvl - $tblevel);
|
|
}
|
|
|
|
// don't allow this to go below 0
|
|
if ($totallvl < 0) {
|
|
$totallvl = 0;
|
|
}
|
|
|
|
// no damage to the building/field
|
|
if ( $tblevel == $totallvl ) {
|
|
$info_cata = " was not damaged.";
|
|
} else // building/field damaged, damage calculations to follow
|
|
{
|
|
// update $bdo, so we don't have to reselect later
|
|
$bdo[ 'f' . $catapultTarget ] = $totallvl;
|
|
|
|
if ($tblevel == 1 && $totallvl == 0) {
|
|
// building was actually destroyed - recalculate population and remove village itself, if needed
|
|
$info_cata = " destroyed.";
|
|
} else {
|
|
// building was damaged to a lower level
|
|
$info_cata = " damaged from level <b>" . $tblevel . "</b> to level <b>" . $totallvl . "</b>.";
|
|
}
|
|
|
|
$buildarray = $GLOBALS[ "bid" . $tbgid ];
|
|
|
|
// (great) warehouse level was changed
|
|
if ( $tbgid == 10 || $tbgid == 38 ) {
|
|
$database->setMaxStoreForVillage( $data['to'], $buildarray[ $tblevel ]['attri'] );
|
|
}
|
|
|
|
// (great) granary level was changed
|
|
if ( $tbgid == 11 || $tbgid == 39 ) {
|
|
$database->setMaxCropForVillage( $data['to'], $buildarray[ $tblevel ]['attri'] );
|
|
}
|
|
|
|
// embassy level was changed
|
|
if ( $tbgid == 18 ) {
|
|
$info_cat .= $database->checkEmbassiesAfterBattle( $data['to'], false );
|
|
}
|
|
}
|
|
|
|
$fieldsToSet = ["f" . $tbid];
|
|
$fieldValuesToSet = [$totallvl];
|
|
|
|
if ($totallvl == 0) {
|
|
$fieldsToSet[] = "f" . $tbid . "t";
|
|
$fieldValuesToSet[] = 0;
|
|
$bdo['f'.$catapultTarget."t"] = 0;
|
|
}
|
|
|
|
$database->setVillageLevel( $data['to'], $fieldsToSet, $fieldValuesToSet );
|
|
|
|
// recalculate population and check if the village shouldn't be destroyed at this point
|
|
$pop = $this->recountPop( $data['to'], false );
|
|
if ($isoasis == 0) {
|
|
if($pop==0 && $can_destroy==1){
|
|
$village_destroyed = 1;
|
|
// this will ensure the right $info_cat text
|
|
$tbgid = 0;
|
|
}
|
|
}
|
|
|
|
if ($isSecondRow) {
|
|
$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,$can_destroy,$isoasis).$info_cata."</td></tr></tbody>";
|
|
} else {
|
|
$info_cat = "" . $catp_pic . "," . $this->procResType( $tbgid, $can_destroy, $isoasis ) . $info_cata;
|
|
}
|
|
}
|
|
}
|
|
|
|
private function sendunitsComplete() {
|
|
global $bid23,$bid34,$database,$battle,$village,$technology,$logging,$generator,$session,$units,$autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/sendunits.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/sendunits.txt");
|
|
}
|
|
|
|
$reload=false;
|
|
$ourFileHandle = fopen("GameEngine/Prevention/sendunits.txt", 'w');
|
|
fclose($ourFileHandle);
|
|
$time = time();
|
|
$q = "
|
|
SELECT
|
|
`from`, `to`, endtime, ref, ctar1, ctar2, spy, moveid, attack_type,
|
|
t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, (SELECT oasistype FROM ".TB_PREFIX."wdata WHERE id = `to`) as oasistype
|
|
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;
|
|
$data_num = 0;
|
|
|
|
if ($dataarray && count($dataarray)) {
|
|
foreach($dataarray as $data) {
|
|
//set base things
|
|
$isoasis = $data['oasistype'];
|
|
$AttackArrivalTime = $data['endtime'];
|
|
$AttackerWref = $data['from'];
|
|
$DefenderWref = $data['to'];
|
|
$NatarCapital=false;
|
|
|
|
$Attacker['id'] = $database->getUserArray($database->getVillageField($data['from'],"owner"), 1)["id"];
|
|
$AttackerID = $Attacker['id'];
|
|
$owntribe = $database->getUserArray($database->getVillageField($data['from'],"owner"), 1)["tribe"];
|
|
$ownally = $database->getUserArray($database->getVillageField($data['from'],"owner"), 1)["alliance"];
|
|
$from = $database->getMInfo($data['from']);
|
|
$fromF = $database->getVillage($data['from']);
|
|
|
|
if ($isoasis == 0){ //village
|
|
$DefenderUserData = $database->getUserArray($database->getVillageField($data['to'],"owner"), 1);
|
|
$Defender['id'] = $DefenderUserData["id"];
|
|
$DefenderID = $Defender['id'];
|
|
if ($session->uid==$AttackerID || $session->uid==$DefenderID) $reload=true;
|
|
$targettribe = $DefenderUserData["tribe"];
|
|
$targetally = $DefenderUserData["alliance"];
|
|
$to = $database->getMInfo($data['to']);
|
|
$toF = $database->getVillage($data['to']);
|
|
$conqureby=0;
|
|
$NatarCapital=($toF['owner']==3 && $toF['capital']==1)? true:false;
|
|
if(!isset($to['name']) || $to['name']=='') $to['name']="??";
|
|
|
|
$DefenderUnit = array();
|
|
$DefenderUnit = $database->getUnit($data['to']);
|
|
$evasion = $toF["evasion"];
|
|
$maxevasion = $DefenderUserData["maxevasion"];
|
|
$gold = $DefenderUserData["gold"];
|
|
$playerunit = (( $targettribe - 1 ) * 10);
|
|
$cannotsend = 0;
|
|
$movements = $database->getMovement("34",$data['to'],1);
|
|
for($y=0;$y < count($movements);$y++){
|
|
if (property_exists($units, $y)) {
|
|
$returntime = $units->$y['endtime']-time();
|
|
if($units->$y['sort_type'] == 4 && $units->$y['from'] != 0 && $returntime <= 10){
|
|
$cannotsend = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if($evasion == 1 && $maxevasion > 0 && $gold > 1 && $cannotsend == 0 && $dataarray[$data_num]['attack_type'] > 2){
|
|
$evaded = true;
|
|
$totaltroops = 0;
|
|
$evasionUnitModifications_units = [];
|
|
$evasionUnitModifications_amounts = [];
|
|
$evasionUnitModifications_modes = [];
|
|
for($i=1;$i<=10;$i++){
|
|
$playerunit += $i;
|
|
$data['u'.$i] = $DefenderUnit['u'.$playerunit];
|
|
$evasionUnitModifications_units[] = $playerunit;
|
|
$evasionUnitModifications_amounts[] = $DefenderUnit['u'.$playerunit];
|
|
$evasionUnitModifications_modes[] = 0;
|
|
$playerunit -= $i;
|
|
$totaltroops += $data['u'.$i];
|
|
}
|
|
|
|
$data['u11'] = $DefenderUnit['hero'];
|
|
$totaltroops += $data['u11'];
|
|
if($totaltroops > 0){
|
|
$evasionUnitModifications_units[] = 'hero';
|
|
$evasionUnitModifications_amounts[] = $DefenderUnit['hero'];
|
|
$evasionUnitModifications_modes[] = 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,microtime(true),microtime(true)+(180/EVASION_SPEED));
|
|
$newgold = $gold-2;
|
|
$newmaxevasion = $maxevasion-1;
|
|
$database->updateUserField($DefenderID, ["gold", "maxevasion"], [$newgold, $newmaxevasion], 1);
|
|
}
|
|
|
|
// modify units in DB
|
|
$database->modifyUnit($data['to'], $evasionUnitModifications_units, $evasionUnitModifications_amounts, $evasionUnitModifications_modes);
|
|
}
|
|
//get defence units
|
|
$enforDefender = array();
|
|
$rom = $ger = $gal = $nat = $natar = 0;
|
|
$Defender = $database->getUnit($data['to'], false);
|
|
$enforcementarray = $database->getEnforceVillage($data['to'], 0, false);
|
|
if(count($enforcementarray) > 0) {
|
|
|
|
foreach($enforcementarray as $enforce) {
|
|
for($i=1;$i<=50;$i++) {
|
|
if (!isset($enforDefender['u'.$i])) {
|
|
$enforDefender['u'.$i] = 0;
|
|
}
|
|
$enforDefender['u'.$i] += $enforce['u'.$i];
|
|
}
|
|
|
|
if (!isset($enforDefender['hero'])) {
|
|
$enforDefender['hero'] = 0;
|
|
}
|
|
$enforDefender['hero'] += $enforce['hero'];
|
|
}
|
|
}
|
|
for($i=1;$i<=50;$i++){
|
|
$def_ab[$i]=0;
|
|
if(!isset($Defender['u'.$i])){
|
|
$Defender['u'.$i] = 0;
|
|
} else {
|
|
if($Defender['u'.$i]=='' || $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);
|
|
$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[$data_num]['t'.$y];
|
|
//there are catas
|
|
if(in_array($i,$catapult)) {
|
|
$catp_pic = $i;
|
|
}
|
|
if(in_array($i,$ram)) {
|
|
$ram_pic = $i;
|
|
}
|
|
if(in_array($i,$chief)) {
|
|
$chief_pic = $i;
|
|
}
|
|
if(in_array($i,$spys)) {
|
|
$spy_pic = $i;
|
|
}
|
|
}
|
|
$Attacker['uhero'] = $dataarray[$data_num]['t11'];
|
|
$hero_pic = "hero";
|
|
//need to set these variables.
|
|
$def_wall = $database->getFieldLevel($data['to'], 40, false);
|
|
$att_tribe = $owntribe;
|
|
$def_tribe = $targettribe;
|
|
$residence = "0";
|
|
$attpop = $fromF['pop'];
|
|
$defpop = $toF['pop'];
|
|
$def_ab=array();
|
|
//get level of palace or residence
|
|
$residence = $database->getFieldLevelInVillage($data['to'], '25, 26', false);
|
|
|
|
//type of attack
|
|
if($dataarray[$data_num]['attack_type'] == 1){
|
|
$type = 1;
|
|
$scout = 1;
|
|
}
|
|
if($dataarray[$data_num]['attack_type'] == 2){
|
|
$type = 2;
|
|
}
|
|
if($dataarray[$data_num]['attack_type'] == 3){
|
|
$type = 3;
|
|
}
|
|
if($dataarray[$data_num]['attack_type'] == 4){
|
|
$type = 4;
|
|
}
|
|
$ud=($def_tribe-1)*10;
|
|
$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'];
|
|
$armory = $database->getABTech($data['to']); // Armory level
|
|
$def_ab[$ud+1] = $armory['a1'];
|
|
$def_ab[$ud+2] = $armory['a2'];
|
|
$def_ab[$ud+3] = $armory['a3'];
|
|
$def_ab[$ud+4] = $armory['a4'];
|
|
$def_ab[$ud+5] = $armory['a5'];
|
|
$def_ab[$ud+6] = $armory['a6'];
|
|
$def_ab[$ud+7] = $armory['a7'];
|
|
$def_ab[$ud+8] = $armory['a8'];
|
|
|
|
//rams attack
|
|
//TODO: where did dead7 & traped7 come from??/
|
|
if (($data['t7']/*-$dead7-$traped7*/)>0 and $type=='3') {
|
|
$basearraywall = $to;
|
|
if (($walllevel = $database->getFieldLevel($basearraywall['wref'],40, false)) > 0){
|
|
$wallgid = $database->getFieldLevel($basearraywall['wref'],"40t");
|
|
$wallid = 40;
|
|
$w='4';
|
|
}else{
|
|
$empty = 1;
|
|
}
|
|
}
|
|
|
|
$tblevel = 1;
|
|
$stonemason = 1;
|
|
|
|
/*--------------------------------
|
|
// End village Battle part
|
|
--------------------------------*/
|
|
}else{
|
|
$DefenderUserData = $database->getUserArray($database->getOasisField($data['to'],"owner"), 1);
|
|
$Defender['id'] = $DefenderUserData["id"];
|
|
$DefenderID = $Defender['id'];
|
|
if ($session->uid==$AttackerID || $session->uid==$DefenderID) $reload=true;
|
|
$targettribe = $DefenderUserData["tribe"];
|
|
$targetally = $DefenderUserData["alliance"];
|
|
$to = $database->getOMInfo($data['to']);
|
|
$toF = $database->getOasisV($data['to']);
|
|
$conqureby=$toF['conqured'];
|
|
//get defence units
|
|
$enforDefender = array();
|
|
$rom = $ger = $gal = $nat = $natar = 0;
|
|
$Defender = $database->getUnit($data['to'], false);
|
|
$enforcementarray = $database->getEnforceVillage($data['to'],0, false);
|
|
|
|
if(count($enforcementarray) > 0) {
|
|
foreach($enforcementarray as $enforce) {
|
|
for($i=1;$i<=50;$i++) {
|
|
$enforDefender['u'.$i] += $enforce['u'.$i];
|
|
}
|
|
$enforDefender['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);
|
|
$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[$data_num]['t'.$y];
|
|
//there are catas
|
|
if(in_array($i,$catapult)) {
|
|
$catp_pic = $i;
|
|
}
|
|
if(in_array($i,$ram)) {
|
|
$ram_pic = $i;
|
|
}
|
|
if(in_array($i,$chief)) {
|
|
$chief_pic = $i;
|
|
}
|
|
if(in_array($i,$spys)) {
|
|
$spy_pic = $i;
|
|
}
|
|
}
|
|
$Attacker['uhero'] = $dataarray[$data_num]['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[$data_num]['attack_type'] == 1){
|
|
$type = 1;
|
|
$scout = 1;
|
|
}
|
|
if($dataarray[$data_num]['attack_type'] == 2){
|
|
$type = 2;
|
|
}
|
|
if($dataarray[$data_num]['attack_type'] == 3){
|
|
$type = 3;
|
|
}
|
|
if($dataarray[$data_num]['attack_type'] == 4){
|
|
$type = 4;
|
|
}
|
|
|
|
$att_ab1=$att_ab2=$att_ab3=$att_ab4=$att_ab5=$att_ab6=$att_ab7=$att_ab8=0;
|
|
$def_ab[31]=$def_ab[32]=$def_ab[33]=$def_ab[34]=$def_ab[35]=$def_ab[36]=$def_ab[37]=$def_ab[38]=0;
|
|
|
|
$empty=1;
|
|
$tblevel = 0;
|
|
$stonemason = 0;
|
|
}
|
|
|
|
$varray = $database->getProfileVillages($to['owner'], false);
|
|
|
|
if ($to['owner'] == $from['owner']) {
|
|
$varray1 = $varray;
|
|
} else {
|
|
$varray1 = $database->getProfileVillages($from['owner'], false);
|
|
}
|
|
|
|
//fix by ronix
|
|
for ($i=1;$i<=50;$i++) {
|
|
if (!isset($enforDefender['u'.$i])) {
|
|
$enforDefender['u'.$i] = 0;
|
|
}
|
|
|
|
$enforDefender['u'.$i] += (isset($Defender['u'.$i]) ? $Defender['u'.$i] : 0);
|
|
}
|
|
|
|
$defspy=($enforDefender['u4']>0 || $enforDefender['u14']>0 || $enforDefender['u23']>0 || $enforDefender['u44']>0)? true:false;
|
|
|
|
if(PEACE == 0 || $targettribe == 4 || $targettribe == 5){
|
|
if($targettribe == 1){
|
|
$def_spy = $enforDefender['u4'];
|
|
}elseif($targettribe == 2){
|
|
$def_spy = $enforDefender['u14'];
|
|
}elseif($targettribe == 3){
|
|
$def_spy = $enforDefender['u23'];
|
|
}elseif($targettribe == 5){
|
|
$def_spy = $enforDefender['u54'];
|
|
}
|
|
|
|
//impossible to attack or scout NATAR Capital Village
|
|
if ($NatarCapital) {
|
|
for($i=1;$i<=11;$i++){
|
|
${'traped'.$i}=$data['t'.$i];
|
|
}
|
|
}elseif(empty($scout) || (isset($def_spy) && $def_spy >0)){
|
|
$traps = $Defender['u99']-$Defender['u99o'];
|
|
if ($traps<1) $traps=0;
|
|
for($i=1;$i<=11;$i++){
|
|
$traps1 = $traps;
|
|
if($data['t'.$i] < $traps1){
|
|
$traps1 = $data['t'.$i];
|
|
}
|
|
${'traped'.$i}=$traps1;
|
|
$traps -= $traps1;
|
|
}
|
|
}
|
|
if(empty($scout) || (isset($def_spy) && $def_spy >0) || (isset($NatarCapital) && $NatarCapital)){
|
|
for ($i = 1; $i <= 11; $i++) {
|
|
if (!isset(${'traped'.$i})) {
|
|
${'traped'.$i} = 0;
|
|
}
|
|
}
|
|
$totaltraped_att = $traped1+$traped2+$traped3+$traped4+$traped5+$traped6+$traped7+$traped8+$traped9+$traped10+$traped11;
|
|
$database->modifyUnit($data['to'],array("99o"),array($totaltraped_att),array(1));
|
|
for($i=$start;$i<=$end;$i++) {
|
|
$j = $i-$start+1;
|
|
$Attacker['u'.$i] -= ${'traped'.$j};
|
|
}
|
|
$Attacker['uhero'] -= $traped11;
|
|
if($totaltraped_att > 0){
|
|
$prisoners2 = $database->getPrisoners2($data['to'],$data['from'], false);
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
//to battle.php
|
|
//fix by ronix
|
|
//MUST TO BE FIX : You need to filter these values
|
|
//filter_input_array($battlepart = $battle->calculateBattle($Attacker,$Defender,$def_wall,$att_tribe,$def_tribe,$residence,$attpop,$defpop,$type,$def_ab,$att_ab1,$att_ab2,$att_ab3,$att_ab4,$att_ab5,$att_ab6,$att_ab7,$att_ab8,$tblevel,$stonemason,$walllevel,0,0,0,$AttackerID,$DefenderID,$AttackerWref,$DefenderWref,$conqureby));
|
|
if (!isset($walllevel)) {
|
|
$walllevel = 0;
|
|
}
|
|
|
|
$battlepart = $battle->calculateBattle($Attacker,$Defender,$def_wall,$att_tribe,$def_tribe,$residence,$attpop,$defpop,$type,$def_ab,$att_ab1,$att_ab2,$att_ab3,$att_ab4,$att_ab5,$att_ab6,$att_ab7,$att_ab8,$tblevel,$stonemason,$walllevel,0,0,0,$AttackerID,$DefenderID,$AttackerWref,$DefenderWref,$conqureby, $enforcementarray);
|
|
|
|
//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
|
|
$DefenderHero=array();
|
|
$d=0;
|
|
if (isset($Defender['hero'])) {
|
|
if ($Defender['hero']>0) {
|
|
$d=1;
|
|
$DefenderHero[$d]=$DefenderID;
|
|
}
|
|
}
|
|
|
|
// our reinforcements count could have changed at this point, thus the re-select
|
|
$enforcementarray2 = $database->getEnforceVillage($data['to'],0, false);
|
|
if(count($enforcementarray2) > 0) {
|
|
foreach($enforcementarray2 as $enforce2) {
|
|
$Defender['hero'] += $enforce2['hero'];
|
|
if ($enforce2['hero']>0) {
|
|
$d++;
|
|
$DefenderHero[$d] = $database->getVillageField($enforce2['from'],"owner");
|
|
}
|
|
for ($i=1;$i<=50;$i++) {
|
|
$Defender['u'.$i]+= $enforce2['u'.$i];
|
|
}
|
|
}
|
|
}
|
|
|
|
$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++){
|
|
//MUST TO BE FIX : This is only for defender and still not properly coded
|
|
if (isset($battlepart['casualties_attacker']) && isset($battlepart['casualties_attacker'][$i]) && $battlepart['casualties_attacker'][$i] <= 0) {
|
|
${'dead'.$i} = 0;
|
|
} else if (isset($data['t'.$i]) && isset($battlepart['casualties_attacker']) && isset($battlepart['casualties_attacker'][$i]) && $battlepart['casualties_attacker'][$i] > $data['t'.$i]) {
|
|
${'dead'.$i}=$data['t'.$i];
|
|
} else {
|
|
${'dead'.$i} = (isset($battlepart['casualties_attacker']) && isset($battlepart['casualties_attacker'][$i]) ? $battlepart['casualties_attacker'][$i] : 0);
|
|
}
|
|
}
|
|
//if the defender does not have spies, the attacker will not die spies. FIXED BY Armando
|
|
if(!empty($scout) && $scout){
|
|
$spy_def_Detect=0;
|
|
for($i=1;$i<=(50);$i++) {
|
|
if($i == 4 || $i == 14 || $i == 23 || $i == 34 || $i == 44){
|
|
if($Defender['u'.$i]>0) {
|
|
$spy_def_Detect=$i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if($spy_def_Detect==0) {
|
|
$dead3=0;
|
|
$dead4=0;
|
|
$battlepart['casualties_attacker'][3]=0;
|
|
$battlepart['casualties_attacker'][4]=0;
|
|
}
|
|
}
|
|
|
|
#################################################
|
|
|
|
$dead=array();
|
|
$owndead=array();
|
|
$alldead=array();
|
|
$heroAttackDead=$dead11;
|
|
//kill own defence
|
|
$unitlist = $database->getUnit($data['to'], false);
|
|
$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
|
|
|
|
$unitModifications_units = [];
|
|
$unitModifications_amounts = [];
|
|
$unitModifications_modes = [];
|
|
for ($i = $start; $i <= $end; $i++) {
|
|
if($i == $end) {
|
|
$u = $targettribe;
|
|
}
|
|
|
|
if($unitlist){
|
|
$owndead[$i] = round($battlepart[2] * $unitlist['u'.$i]);
|
|
$unitModifications_units[] = $i;
|
|
$unitModifications_amounts[] = $owndead[$i];
|
|
$unitModifications_modes[] = 0;
|
|
}
|
|
}
|
|
|
|
$owndead['hero'] = 0;
|
|
|
|
if($unitlist){
|
|
$owndead['hero'] = (isset($battlepart['deadherodef']) ? $battlepart['deadherodef'] : '');
|
|
|
|
$unitModifications_units[] = 'hero';
|
|
$unitModifications_amounts[] = $owndead['hero'];
|
|
$unitModifications_modes[] = 0;
|
|
}
|
|
|
|
// modify units in DB
|
|
$database->modifyUnit($data['to'], $unitModifications_units, $unitModifications_amounts, $unitModifications_modes);
|
|
|
|
//kill other defence in village
|
|
// ... once again, units could have changed, so we need to reselect
|
|
$enforcementarray3 = $database->getEnforceVillage($data['to'],0, false);
|
|
foreach ($enforcementarray3 as $enforce) {
|
|
$life=''; $notlife=''; $wrong='0';
|
|
if($enforce['from'] != 0){
|
|
$tribe = $database->getUserArray($database->getVillageField($enforce['from'],"owner"), 1)["tribe"];
|
|
}else{
|
|
$tribe = 4;
|
|
}
|
|
$start = ($tribe-1)*10+1;
|
|
$end = ($tribe*10);
|
|
unset($dead);
|
|
|
|
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';
|
|
}
|
|
|
|
$enforceModificationsById = [];
|
|
for ($i = $start; $i <= $end; $i++){ //($i=$start;$i<=($start+9);$i++) {
|
|
if($enforce['u'.$i]>'0'){
|
|
if (!isset($enforceModificationsById[$enforce['id']])) {
|
|
$enforceModificationsById[$enforce['id']] = [
|
|
'units' => [],
|
|
'amounts' => [],
|
|
'modes' => []
|
|
];
|
|
}
|
|
$enforceModificationsById[$enforce['id']]['units'][] = $i;
|
|
$enforceModificationsById[$enforce['id']]['amounts'][] = (isset($battlepart[2]) ? round($battlepart[2]*$enforce['u'.$i]) : 0);
|
|
$enforceModificationsById[$enforce['id']]['modes'][] = 0;
|
|
$dead[$i] = (isset($battlepart[2]) ? round($battlepart[2]*$enforce['u'.$i]) : 0);
|
|
$checkpoint = (isset($battlepart[2]) ? round($battlepart[2]*$enforce['u'.$i]) : 0);
|
|
if (!isset($alldead[$i])) {
|
|
$alldead[$i] = 0;
|
|
}
|
|
$alldead[$i]+=$dead[$i];
|
|
if (!isset($enforce['u'.$i])) {
|
|
$enforce['u'.$i] = 0;
|
|
}
|
|
|
|
if($checkpoint!=$enforce['u'.$i]){
|
|
$wrong='1';
|
|
}
|
|
} else {
|
|
$dead[$i]='0';
|
|
}
|
|
}
|
|
|
|
if($enforce['hero'] > 0) {
|
|
$enforceModificationsById[$enforce['id']]['units'][] = 'hero';
|
|
$enforceModificationsById[$enforce['id']]['amounts'][] = $battlepart['deadheroref'][$enforce['id']];
|
|
$enforceModificationsById[$enforce['id']]['modes'][] = 0;
|
|
|
|
$dead['hero']=$battlepart['deadheroref'][$enforce['id']];
|
|
$alldead['hero']+=$dead['hero'];
|
|
if($dead['hero']!=$enforce['hero']){
|
|
$wrong='1';
|
|
}
|
|
}
|
|
|
|
// modify enforce in DB
|
|
foreach ($enforceModificationsById as $enforceId => $enforceArray) {
|
|
$database->modifyEnforce( $enforceId, $enforceArray['units'], $enforceArray['amounts'], $enforceArray['modes']);
|
|
}
|
|
|
|
$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 = (isset($enforce['hero']) ? $enforce['hero'] : 0);
|
|
$notlifehero = (isset($dead['hero']) ? $dead['hero'] : 0);
|
|
$totallife = (isset($enforce['hero']) ? $enforce['hero'] : 0)+$life1;
|
|
$totalnotlife = (isset($dead['hero']) ? $dead['hero'] : 0)+$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.','.$enforce['from'].'';
|
|
if(empty($scout)) {
|
|
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'];
|
|
for ($i=1;$i<=50;$i++) {
|
|
if (!isset($alldead[$i])) {
|
|
$alldead[$i] = 0;
|
|
}
|
|
$alldead[$i] += (isset($owndead[$i]) ? $owndead[$i] : 0);
|
|
}
|
|
$unitsdead_def[1] = ''.$alldead['1'].','.$alldead['2'].','.$alldead['3'].','.$alldead['4'].','.$alldead['5'].','.$alldead['6'].','.$alldead['7'].','.$alldead['8'].','.$alldead['9'].','.$alldead['10'].'';
|
|
$unitsdead_def[2] = ''.$alldead['11'].','.$alldead['12'].','.$alldead['13'].','.$alldead['14'].','.$alldead['15'].','.$alldead['16'].','.$alldead['17'].','.$alldead['18'].','.$alldead['19'].','.$alldead['20'].'';
|
|
$unitsdead_def[3] = ''.$alldead['21'].','.$alldead['22'].','.$alldead['23'].','.$alldead['24'].','.$alldead['25'].','.$alldead['26'].','.$alldead['27'].','.$alldead['28'].','.$alldead['29'].','.$alldead['30'].'';
|
|
$unitsdead_def[4] = ''.$alldead['31'].','.$alldead['32'].','.$alldead['33'].','.$alldead['34'].','.$alldead['35'].','.$alldead['36'].','.$alldead['37'].','.$alldead['38'].','.$alldead['39'].','.$alldead['40'].'';
|
|
$unitsdead_def[5] = ''.$alldead['41'].','.$alldead['42'].','.$alldead['43'].','.$alldead['44'].','.$alldead['45'].','.$alldead['46'].','.$alldead['47'].','.$alldead['48'].','.$alldead['49'].','.$alldead['50'].'';
|
|
$unitsdead_deff[1] = '?,?,?,?,?,?,?,?,?,?,';
|
|
$unitsdead_deff[2] = '?,?,?,?,?,?,?,?,?,?,';
|
|
$unitsdead_deff[3] = '?,?,?,?,?,?,?,?,?,?,';
|
|
$unitsdead_deff[4] = '?,?,?,?,?,?,?,?,?,?,';
|
|
$unitsdead_deff[5] = '?,?,?,?,?,?,?,?,?,?,';
|
|
|
|
if (empty($alldead['hero'])) {
|
|
$alldead['hero'] = 0;
|
|
}
|
|
|
|
if (empty($owndead['hero'])) {
|
|
$owndead['hero'] = 0;
|
|
}
|
|
|
|
$deadhero = $alldead['hero']+$owndead['hero'];
|
|
|
|
$totaldead_alldef_tmp[1] = $alldead['1']+$alldead['2']+$alldead['3']+$alldead['4']+$alldead['5']+$alldead['6']+$alldead['7']+$alldead['8']+$alldead['9']+$alldead['10'];
|
|
$totaldead_alldef_tmp[2] = $alldead['11']+$alldead['12']+$alldead['13']+$alldead['14']+$alldead['15']+$alldead['16']+$alldead['17']+$alldead['18']+$alldead['19']+$alldead['20'];
|
|
$totaldead_alldef_tmp[3] = $alldead['21']+$alldead['22']+$alldead['23']+$alldead['24']+$alldead['25']+$alldead['26']+$alldead['27']+$alldead['28']+$alldead['29']+$alldead['30'];
|
|
$totaldead_alldef_tmp[4] = $alldead['31']+$alldead['32']+$alldead['33']+$alldead['34']+$alldead['35']+$alldead['36']+$alldead['37']+$alldead['38']+$alldead['39']+$alldead['40'];
|
|
$totaldead_alldef_tmp[5] = $alldead['41']+$alldead['42']+$alldead['43']+$alldead['44']+$alldead['45']+$alldead['46']+$alldead['47']+$alldead['48']+$alldead['49']+$alldead['50'];
|
|
|
|
$totaldead_alldef = $totaldead_alldef_tmp[1]+$totaldead_alldef_tmp[2]+$totaldead_alldef_tmp[3]+$totaldead_alldef_tmp[4]+$totaldead_alldef_tmp[5]+$deadhero;
|
|
if (!isset($totalattackdead)) {
|
|
$totalattackdead = 0;
|
|
}
|
|
$totalattackdead += $totaldead_alldef;
|
|
|
|
// Set units returning from attack
|
|
|
|
$p_units = [];
|
|
for ($i=1; $i <= 11; $i++) {
|
|
if (!isset(${'dead'.$i})) {
|
|
${'dead'.$i} = 0;
|
|
}
|
|
|
|
if (!isset(${'traped'.$i})) {
|
|
${'traped'.$i} = 0;
|
|
}
|
|
|
|
$p_units[] = "t".$i." = t".$i." - ".(${'dead'.$i} + ${'traped'.$i});
|
|
}
|
|
|
|
$database->modifyAttack3($data['ref'],implode(', ', $p_units));
|
|
|
|
$unitsdead_att = ''.$dead1.','.$dead2.','.$dead3.','.$dead4.','.$dead5.','.$dead6.','.$dead7.','.$dead8.','.$dead9.','.$dead10.'';
|
|
$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++) {
|
|
if(!empty($unitarray)) { reset($unitarray); }
|
|
$unitarray = $GLOBALS["u".$i];
|
|
|
|
if (!isset($totaldead_def)) {
|
|
$totaldead_def = 0;
|
|
}
|
|
$totaldead_def += $alldead[''.$i.''];
|
|
|
|
if (!isset($totalpoint_att)) {
|
|
$totalpoint_att = 0;
|
|
}
|
|
$totalpoint_att += ($alldead[''.$i.'']*$unitarray['pop']);
|
|
}
|
|
$totalpoint_att += ((isset($alldead['hero']) ? $alldead['hero'] : 0)*6);
|
|
|
|
if ($Attacker['uhero'] != 0){
|
|
$heroxp = $totalpoint_att;
|
|
$database->modifyHeroXp("experience",$heroxp,$from['owner']);
|
|
}
|
|
|
|
for($i=1;$i<=10;$i++){
|
|
if($unitarray) { reset($unitarray); }
|
|
$unitarray = $GLOBALS["u".(($att_tribe-1)*10+$i)];
|
|
if (!isset($totalpoint_def)) {
|
|
$totalpoint_def = 0;
|
|
}
|
|
$totalpoint_def += (${'dead'.$i}*$unitarray['pop']);
|
|
}
|
|
|
|
if (!isset($totalpoint_def)) {
|
|
$totalpoint_def = 0;
|
|
}
|
|
$totalpoint_def += $dead11*6;
|
|
if($Defender['hero'] > 0){
|
|
//counting heroxp
|
|
$defheroxp=intval($totalpoint_def/count($DefenderHero));
|
|
for ($i=1;$i<=count($DefenderHero);$i++){
|
|
$reinfheroxp = $defheroxp;
|
|
$database->modifyHeroXp("experience",$reinfheroxp,$DefenderHero[$i]);
|
|
}
|
|
}
|
|
|
|
$database->modifyPoints(
|
|
$toF['owner'],
|
|
['dpall', 'dp'],
|
|
[$totalpoint_def, $totalpoint_def]
|
|
);
|
|
|
|
$database->modifyPoints(
|
|
$from['owner'],
|
|
['apall', 'ap'],
|
|
[$totalpoint_att, $totalpoint_att]
|
|
);
|
|
|
|
$database->modifyPointsAlly(
|
|
$targetally,
|
|
['Adp', 'dp'],
|
|
[$totalpoint_def, $totalpoint_def]
|
|
);
|
|
|
|
$database->modifyPointsAlly(
|
|
$ownally,
|
|
['Aap', 'ap'],
|
|
[$totalpoint_att, $totalpoint_att]
|
|
);
|
|
|
|
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_CAPACITY;
|
|
}
|
|
}
|
|
|
|
//cranny efficiency
|
|
$atk_bonus = ($owntribe == 2)? (4/5) : 1;
|
|
$def_bonus = ($targettribe == 3)? 2 : 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,(isset($vid) ? $vid : 0),$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();
|
|
|
|
$villageData = $database->getVillageFields($data['to'],'clay, iron, wood, crop');
|
|
$totclay = $villageData['clay'];
|
|
$totiron = $villageData['iron'];
|
|
$totwood = $villageData['wood'];
|
|
$totcrop = $villageData['crop'];
|
|
}else{
|
|
$cranny_eff = 0;
|
|
|
|
// work out available resources.
|
|
$this->updateORes($data['to']);
|
|
$this->pruneOResource();
|
|
|
|
if ($conqureby >0) { //10% from owner proc village owner - fix by ronix
|
|
$villageData = $database->getVillageFields($conqureby,'clay, iron, wood, crop');
|
|
$totclay = intval($villageData['clay']/10);
|
|
$totiron = intval($villageData['iron']/10);
|
|
$totwood = intval($villageData['wood']/10);
|
|
$totcrop = intval($villageData['crop']/10);
|
|
}else{
|
|
$oasisData = $database->getOasisFields($data['to'],'clay, iron, wood, crop');
|
|
$totclay = $oasisData['clay'];
|
|
$totiron = $oasisData['iron'];
|
|
$totwood = $oasisData['wood'];
|
|
$totcrop = $oasisData['crop'];
|
|
}
|
|
}
|
|
|
|
$avclay = floor($totclay - $cranny_eff);
|
|
$aviron = floor($totiron - $cranny_eff);
|
|
$avwood = floor($totwood - $cranny_eff);
|
|
$avcrop = floor($totcrop - $cranny_eff);
|
|
|
|
$avclay = ($avclay < 0)? 0 : $avclay;
|
|
$aviron = ($aviron < 0)? 0 : $aviron;
|
|
$avwood = ($avwood < 0)? 0 : $avwood;
|
|
$avcrop = ($avcrop < 0)? 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 <1 && $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;
|
|
}
|
|
}
|
|
}
|
|
|
|
//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){
|
|
$hero_unit = $database->getHeroField($from['owner'], 'unit', false);
|
|
$speeds[] = $GLOBALS['u'.$hero_unit]['speed'];
|
|
}
|
|
|
|
// Data for when troops return.
|
|
|
|
//catapults look :D
|
|
$info_cat = $info_chief = $info_ram = $info_hero = ",";
|
|
//check to see if can destroy village
|
|
if(count($varray)!='1' AND $to['capital']!='1'){
|
|
$can_destroy=1;
|
|
}else{
|
|
$can_destroy=0;
|
|
}
|
|
if ($isoasis == 1) $can_destroy=0;
|
|
|
|
if ($type=='3')
|
|
{
|
|
if (($data['t7']-$traped7)>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, "f".$wallid."t"],
|
|
[0, 0]
|
|
);
|
|
$pop=$this->recountPop($data['to']);
|
|
|
|
}elseif ($battlepart[8]==0){
|
|
|
|
$info_ram = "".$ram_pic.",Wall was not damaged.";
|
|
}else{
|
|
$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 (($data['t8']-$traped8)>0)
|
|
{
|
|
$pop=$this->recountPop($data['to']);
|
|
if ($isoasis != 0) {
|
|
$pop=10; //oasis cannot be destroy bt cata/ram
|
|
}
|
|
|
|
// village has been destroyed
|
|
if ($pop<=0) {
|
|
if ($can_destroy==1) {
|
|
$info_cat = "".$catp_pic.", Village already destroyed.";
|
|
} else {
|
|
$info_cat = "".$catp_pic.", Village can\'t be destroyed.";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// village stands, let's do the damage
|
|
$basearray = $data['to'];
|
|
$bdo = $database->getResourceLevel($basearray, false);
|
|
$catapultTarget = $data['ctar1'];
|
|
$catapultTarget2 = (isset($data['ctar2']) ? $data['ctar2'] : 0);
|
|
|
|
$catapults1TargetRandom = ($catapultTarget == 0);
|
|
$catapults2WillNotShoot = ($catapultTarget2 == 0);
|
|
$catapults2TargetRandom = ($catapults2WillNotShoot || $catapultTarget2 == 99);
|
|
|
|
// we're manually targetting 1st and/or 2nd row of catapults
|
|
if (!$catapults1TargetRandom || !$catapults2TargetRandom)
|
|
{
|
|
$_catapultsTarget1Levels=array();
|
|
$__catapultsTarget1AltTargets=array();
|
|
|
|
$_catapultsTarget2Levels=array();
|
|
$__catapultsTarget2AltTargets=array();
|
|
|
|
// calculate targets for 1st and 2nd rows of catapults
|
|
$j=0;
|
|
for ($i=1;$i<=41;$i++)
|
|
{
|
|
if ($i==41) $i=99;
|
|
|
|
// 1st row of catapults pre-selected target calculations, if needed
|
|
if (!$catapults1TargetRandom && $bdo['f'.$i.'t'] == $catapultTarget && $bdo['f'.$i] > 0 && $catapultTarget != 31 && $catapultTarget != 32 && $catapultTarget != 33)
|
|
{
|
|
$j++;
|
|
$_catapultsTarget1Levels[$j]=$bdo['f'.$i];
|
|
$__catapultsTarget1AltTargets[$j]=$i;
|
|
}
|
|
|
|
// 2nd row of catapults pre-selected target calculations, if needed
|
|
if (!$catapults2TargetRandom && !$catapults2WillNotShoot && $bdo['f'.$i.'t'] == $catapultTarget2 && $bdo['f'.$i] > 0 && $catapultTarget2 != 31 && $catapultTarget2 != 32 && $catapultTarget2 != 33)
|
|
{
|
|
$_catapultsTarget2Levels[$j]=$bdo['f'.$i];
|
|
$__catapultsTarget2AltTargets[$j]=$i;
|
|
}
|
|
}
|
|
|
|
// if we couldn't find a suitable target for 1st row of catapults,
|
|
// select a random target instead
|
|
if (!$catapults1TargetRandom) {
|
|
if ( count( $_catapultsTarget1Levels ) > 0 ) {
|
|
if ( max( $_catapultsTarget1Levels ) <= 0 ) {
|
|
$catapultTarget = 0;
|
|
} else {
|
|
$catapultTarget = $__catapultsTarget1AltTargets[ rand( 1, $j ) ];
|
|
}
|
|
} else {
|
|
$catapultTarget = 0;
|
|
$catapults1TargetRandom = true;
|
|
}
|
|
}
|
|
|
|
// if we couldn't find a suitable target for 2nd row of catapults,
|
|
// select a random target instead
|
|
if (!$catapults2TargetRandom ) {
|
|
if ( count( $_catapultsTarget2Levels ) > 0 ) {
|
|
if ( max( $_catapultsTarget2Levels ) <= 0 ) {
|
|
$catapultTarget2 = 99;
|
|
} else {
|
|
$catapultTarget2 = $__catapultsTarget2AltTargets[ rand( 1, $j ) ];
|
|
}
|
|
} else {
|
|
$catapultTarget2 = 99;
|
|
$catapults2TargetRandom = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 1st row of catapults set to target randomly
|
|
if ($catapults1TargetRandom)
|
|
{
|
|
$list=array();
|
|
$j = 1;
|
|
for ($i=1;$i<=41;$i++)
|
|
{
|
|
if ($i==41) $i=99;
|
|
if ($bdo['f'.$i] > 0 && $catapultTarget != 31 && $catapultTarget != 32 && $catapultTarget != 33)
|
|
{
|
|
$list[$j]=$i;
|
|
$j++;
|
|
}
|
|
}
|
|
$catapultTarget = $list[ rand(1, $j - 1) ];
|
|
}
|
|
|
|
// 2nd row of catapults set to target randomly
|
|
if ($catapults2TargetRandom && !$catapults2WillNotShoot)
|
|
{
|
|
$list=array();
|
|
$j=1;
|
|
for ($i=1;$i<=41;$i++)
|
|
{
|
|
if ($i==41) $i=99;
|
|
if ($bdo['f'.$i] > 0)
|
|
{
|
|
$j++;
|
|
$list[$j]=$i;
|
|
}
|
|
}
|
|
$catapultTarget2 = $list[ rand(1, $j - 1) ];
|
|
}
|
|
|
|
/**
|
|
* resolve 1st row of catapults
|
|
*/
|
|
$village_destroyed = 0;
|
|
$this->resolveCatapultsDestruction($bdo, $battlepart, $info_cat, $data, $catapultTarget, !$catapults2WillNotShoot, false, $catp_pic, $can_destroy, $isoasis, $village_destroyed);
|
|
|
|
/**
|
|
* resolve 2nd row of catapults
|
|
*/
|
|
if (!$catapults2WillNotShoot) {
|
|
$this->resolveCatapultsDestruction($bdo, $battlepart, $info_cat, $data, $catapultTarget2, true, true, $catp_pic, $can_destroy, $isoasis, $village_destroyed);
|
|
}
|
|
|
|
// clear resource levels cache, since we might have destroyed buildings/fields by now
|
|
call_user_func(get_class($database).'::clearResourseLevelsCache');
|
|
}
|
|
}
|
|
} elseif (($data['t7']-$traped7)>0) {
|
|
$info_ram = "".$ram_pic.",Hint: The ram does not work during a raid.";
|
|
}
|
|
|
|
//chiefing village
|
|
//there are senators
|
|
if(($data['t9']-$dead9-$traped9)>0){
|
|
if ($type=='3') {
|
|
|
|
$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;
|
|
}
|
|
}
|
|
|
|
$expArray = $database->getVillageFields($from['wref'], 'exp1, exp2, exp3');
|
|
$exp1 = $expArray['exp1'];
|
|
$exp2 = $expArray['exp2'];
|
|
$exp3 = $expArray['exp3'];
|
|
|
|
if($exp1 == 0){
|
|
$villexp = 0;
|
|
}
|
|
elseif($exp2 == 0){
|
|
$villexp = 1;
|
|
}
|
|
elseif($exp3 == 0){
|
|
$villexp = 2;
|
|
}
|
|
else{
|
|
$villexp = 3;
|
|
}
|
|
$mode = CP;
|
|
$cp_mode = $GLOBALS['cp'.$mode];
|
|
$need_cps = $cp_mode[count($varray1)+1];
|
|
|
|
$user_cps = $database->getUserArray($from['owner'], 1)['cp'];
|
|
|
|
//check for last village or capital
|
|
if($user_cps >= $need_cps){
|
|
if(count($varray)!='1' AND $to['capital']!='1' AND $villexp < $canconquer){
|
|
if($to['owner']!=3 OR $to['name']!='WW Buildingplan'){
|
|
// check for standing Palace or Residence
|
|
// note: at this point, we can use cache, since we've cleared it above
|
|
if ($database->getFieldLevelInVillage($data['to'], '25, 26')) {
|
|
$nochiefing = 1;
|
|
$info_chief = "".$chief_pic.",The Palace/Residence isn\'t destroyed!";
|
|
}
|
|
|
|
// we can conquer this village
|
|
if(!isset($nochiefing)){
|
|
//$info_chief = "".$chief_pic.",You don't have enought CP to chief a village.";
|
|
// note: at this point, we can use cache, since we've cleared it above
|
|
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 if (!$village_destroyed) {
|
|
// 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->setVillageFields(
|
|
$data['to'],
|
|
['loyalty', 'owner'],
|
|
[0, $database->getVillageField($data['from'],"owner")]
|
|
);
|
|
|
|
//delete upgrades in armory and blacksmith
|
|
$q = "DELETE FROM ".TB_PREFIX."abdata WHERE vref = ".(int) $data['to'];
|
|
$database->query($q);
|
|
$database->addABTech($data['to']);
|
|
|
|
//delete researches in academy
|
|
$q = "DELETE FROM ".TB_PREFIX."tdata WHERE vref = ".(int) $data['to'];
|
|
$database->query($q);
|
|
$database->addTech($data['to']);
|
|
|
|
//delete reinforcement
|
|
$q = "DELETE FROM ".TB_PREFIX."enforcement WHERE `from` = ".(int) $data['to'];
|
|
$database->query($q);
|
|
|
|
//no units can stay in the village itself
|
|
$units2reset = [];
|
|
for ($u = 1; $u <= 50; $u++) {
|
|
$units2reset[] = 'u'.$u.' = 0';
|
|
}
|
|
$units2reset[] = 'u99 = 0';
|
|
$units2reset[] = 'u99o = 0';
|
|
$units2reset[] = 'hero = 0';
|
|
$q = "UPDATE ".TB_PREFIX."units SET ".implode(',', $units2reset)." WHERE vref = ".(int) $data['to'];
|
|
$database->query($q);
|
|
|
|
// check buildings
|
|
$newLevels_fieldNames = [];
|
|
$newLevels_fieldValues = [];
|
|
|
|
$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;
|
|
$newLevels_fieldNames[] = "f".$i;
|
|
$newLevels_fieldValues[] = $leveldown;
|
|
}else{
|
|
$newLevels_fieldNames[] = "f".$i;
|
|
$newLevels_fieldValues[] = 0;
|
|
|
|
$newLevels_fieldNames[] = "f".$i."t";
|
|
$newLevels_fieldValues[] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($buildlevel['f99']!=0) {
|
|
$leveldown = $buildlevel['f99']-1;
|
|
$newLevels_fieldNames[] = "f99";
|
|
$newLevels_fieldValues[] = $leveldown;
|
|
}
|
|
}
|
|
|
|
//destroy wall
|
|
$newLevels_fieldNames[] = "f40";
|
|
$newLevels_fieldValues[] = 0;
|
|
|
|
$newLevels_fieldNames[] = "f40t";
|
|
$newLevels_fieldValues[] = 0;
|
|
|
|
$expArray = $database->getVillageFields($data['from'], 'exp1, exp2, exp3');
|
|
$exp1 = $expArray['exp1'];
|
|
$exp2 = $expArray['exp2'];
|
|
$exp3 = $expArray['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);
|
|
|
|
//remove oasis related to village
|
|
$units->returnTroops($data['to'],1);
|
|
$chiefing_village = 1;
|
|
|
|
// update data in the database
|
|
$database->clearExpansionSlot($data['to']);
|
|
$database->setVillageLevel($data['to'], $newLevels_fieldNames, $newLevels_fieldValues);
|
|
}
|
|
}
|
|
} 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);
|
|
}else{
|
|
$info_chief = "".$chief_pic.",Could not reduce cultural points during raid";
|
|
}
|
|
}
|
|
|
|
if(($data['t11']-$dead11-$traped11)> 0){ //hero
|
|
if ($heroxp == 0) {
|
|
$xp="";
|
|
$info_hero = $hero_pic.",Your hero had nothing to kill therefore gains no XP at all";
|
|
} else {
|
|
$xp=" and gained ".$heroxp." XP from the battle";
|
|
$info_hero = $hero_pic.",Your hero gained ".$heroxp." XP";
|
|
}
|
|
|
|
if ($isoasis != 0) { //oasis fix by ronix
|
|
if ($to['owner']!=$from['owner']) {
|
|
$troopcount = $database->countOasisTroops($data['to'], false);
|
|
$canqured=$database->canConquerOasis($data['from'],$data['to'], false);
|
|
if ($canqured==1 && $troopcount==0) {
|
|
$database->conquerOasis($data['from'],$data['to']);
|
|
$info_hero = $hero_pic.",Your hero has conquered this oasis".$xp;
|
|
|
|
}else{
|
|
if ($canqured==3 && $troopcount==0) {
|
|
if ($type=='3') {
|
|
$Oloyaltybefore = intval($to['loyalty']);
|
|
//$database->modifyOasisLoyalty($data['to']);
|
|
//$OasisInfo = $database->getOasisInfo($data['to']);
|
|
$Oloyaltynow = intval($database->modifyOasisLoyalty($data['to']));//intval($OasisInfo['loyalty']);
|
|
$info_hero = $hero_pic.",Your hero has reduced oasis loyalty to ".$Oloyaltynow." from ".$Oloyaltybefore.$xp;
|
|
}else{
|
|
$info_hero = $hero_pic.",Could not reduce loyalty during raid".$xp;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
global $form;
|
|
if ($heroxp == 0) {
|
|
$xp=" no XP from the battle";
|
|
} else {
|
|
$xp=" gained ".$heroxp." XP from the battle";
|
|
}
|
|
$artifact = $database->getOwnArtefactInfo($data['to']);
|
|
if (!empty($artifact)) {
|
|
if ($type=='3') {
|
|
if ($database->canClaimArtifact($data['from'],$artifact['vref'],$artifact['size'],$artifact['type'])) {
|
|
$database->claimArtefact($data['from'],$data['to'],$database->getVillageField($data['from'],"owner"));
|
|
$info_hero = $hero_pic.",Your hero is carrying home an artefact".$xp;
|
|
} else {
|
|
$info_hero = $hero_pic.",".$form->getError("error").$xp;
|
|
}
|
|
}else{
|
|
$info_hero = $hero_pic.",Your hero could not claim the artefact during raid".$xp;
|
|
}
|
|
}
|
|
}
|
|
}elseif($data['t11']>0) {
|
|
if ($heroxp == 0) {
|
|
$xp="";
|
|
} else {
|
|
$xp=" but gained ".$heroxp." XP from the battle";
|
|
}
|
|
if ($traped11>0) {
|
|
$info_hero = $hero_pic.",Your hero was trapped".$xp;
|
|
}else $info_hero = $hero_pic.",Your hero died".$xp;
|
|
}
|
|
if ($DefenderID==0) {
|
|
$natar=0;
|
|
}
|
|
if(!empty($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){
|
|
$crannylevel = $database->getFieldLevelInVillage($data['to'], 23);
|
|
$walllevel = $database->getFieldLevelInVillage($data['to'], '31, 32, 33');
|
|
$rplevel = $database->getFieldLevelInVillage($data['to'], '25, 26');
|
|
} 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\" />";
|
|
$wallimg = "<img src=\"".GP_LOCATE."img/g/g3".$targettribe."Icon.gif\" height=\"20\" width=\"15\" alt=\"Wall\" title=\"Wall\" />";
|
|
$info_spy = "".$spy_pic.",".$palaceimg." Residance/Palace Level : ".$rplevel."
|
|
|
|
<br>".$crannyimg." Cranny level: ".$crannylevel."<br>".$wallimg." 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{
|
|
if(isset($village_destroyed) && $village_destroyed == 1 && $can_destroy==1){
|
|
//check if village pop=0 and no info destroy
|
|
if (strpos($info_cat,"The village has")==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\" /> The village has been destroyed.</td></tr></tbody>";
|
|
}
|
|
}
|
|
$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.','.(isset($info_spy) ? $info_spy : '').',,'.$data['t11'].','.$dead11.','.$herosend_def.','.$deadhero.','.$unitstraped_att;
|
|
}
|
|
|
|
// When all troops die, sends no info...send info
|
|
$info_troop= "None of your soldiers have returned";
|
|
$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.',,'.$info_ram.','.$info_cat.','.$info_chief.','.$info_troop.','.$info_hero;
|
|
|
|
//Undetected and detected in here.
|
|
if(!empty($scout)){
|
|
|
|
for($i=1;$i<=10;$i++){
|
|
if($battlepart['casualties_attacker'][$i]){
|
|
if($from['owner'] == 3){
|
|
$database->addNotice($to['owner'],$to['wref'],$targetally,20,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
|
|
break;
|
|
}else if($unitsdead_att == $unitssend_att && $defspy){ //fix by ronix
|
|
$database->addNotice($to['owner'],$to['wref'],$targetally,20,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
|
|
break;
|
|
}else if($defspy){ //fix by ronix
|
|
$database->addNotice($to['owner'],$to['wref'],$targetally,21,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if($type == 3 && $totalsend_att - ($totaldead_att+$totaltraped_att) > 0){
|
|
$prisoners = $database->getPrisoners($to['wref'], 0, false);
|
|
if(count($prisoners) > 0){
|
|
|
|
$anothertroops = 0;
|
|
$mytroops=0;
|
|
$prisoners2delete = [];
|
|
$movementType = [];
|
|
$movementFrom = [];
|
|
$movementTo = [];
|
|
$movementRef = [];
|
|
$movementTime = [];
|
|
$movementEndtime = [];
|
|
$utime = microtime(true);
|
|
|
|
foreach($prisoners as $prisoner) {
|
|
$p_owner = $database->getVillageField($prisoner['from'],"owner");
|
|
|
|
if ($p_owner == $from['owner']) {
|
|
$database->modifyAttack2(
|
|
$data['ref'],
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
|
|
[$prisoner['t1'], $prisoner['t2'], $prisoner['t3'], $prisoner['t4'], $prisoner['t5'], $prisoner['t6'], $prisoner['t7'], $prisoner['t8'], $prisoner['t9'], $prisoner['t10'], $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'];
|
|
$prisoners2delete[] = $prisoner['id'];
|
|
} 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']>0 and $friendarray[0]['alli2']>0 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']>0 and $neutralarray[0]['alli2']>0 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 == 1 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_hero_unit = $database->getHeroField($p_owner, 'unit', false)['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);
|
|
$movementType[] = 4;
|
|
$movementFrom[] = $prisoner['wref'];
|
|
$movementTo[] = $prisoner['from'];
|
|
$movementRef[] = $p_reference;
|
|
$movementTime[] = $utime;
|
|
$movementEndtime[] = $p_time + $utime;
|
|
$anothertroops += $prisoner['t1']+$prisoner['t2']+$prisoner['t3']+$prisoner['t4']+$prisoner['t5']+$prisoner['t6']+$prisoner['t7']+$prisoner['t8']+$prisoner['t9']+$prisoner['t10']+$prisoner['t11'];
|
|
$prisoners2delete[] = $prisoner['id'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if (count($movementType)) {
|
|
$database->addMovement( $movementType, $movementFrom, $movementTo, $movementRef, $movementTime, $movementEndtime );
|
|
}
|
|
|
|
$database->deletePrisoners($prisoners2delete);
|
|
|
|
$newtraps = round(($mytroops+$anothertroops)/3);
|
|
$database->modifyUnit(
|
|
$data['to'],
|
|
['99', '99o'],
|
|
[$newtraps, $mytroops+$anothertroops],
|
|
[0, 0]
|
|
);
|
|
$trapper_pic = "<img src=\"".GP_LOCATE."img/u/98.gif\" alt=\"Trap\" title=\"Trap\" />";
|
|
$p_username = $database->getUserField($from['owner'],"username",0);
|
|
|
|
if($mytroops > 0 && $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.";
|
|
}
|
|
}
|
|
}
|
|
|
|
if($totalsend_att - ($totaldead_att + (isset($totaltraped_att) ? $totaltraped_att : 0)) > 0){
|
|
$info_troop= "";
|
|
}
|
|
|
|
$data2 = $data2.','.(isset($info_trap) ? addslashes($info_trap) : '').',,'.$info_troop.','.$info_hero;
|
|
|
|
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 + (isset($totaltraped_att) ? $totaltraped_att : 0)) > 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 += $AttackArrivalTime;
|
|
if($type == 1) {
|
|
if($from['owner'] == 3) { //fix natar report by ronix
|
|
$database->addNotice($to['owner'],$to['wref'],$targetally,20,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
|
|
}elseif ($totaldead_att == 0 && $totaltraped_att == 0){
|
|
$database->addNotice($from['owner'],$to['wref'],$ownally,18,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
|
|
}else{
|
|
$database->addNotice($from['owner'],$to['wref'],$ownally,21,''.addslashes($from['name']).' scouts '.addslashes($to['name']).'',$data2,$AttackArrivalTime);
|
|
}
|
|
}else {
|
|
if ((empty($totaldead_att) || $totaldead_att == 0) && (empty($totaltraped_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 (!isset($chiefing_village)) {
|
|
$chiefing_village = 0;
|
|
}
|
|
|
|
if($chiefing_village != 1){
|
|
$database->addMovement(4,$DefenderWref,$AttackerWref,$data['ref'],$AttackArrivalTime,$endtime);
|
|
|
|
// send the bounty on type 6.
|
|
if($type !== 1){
|
|
|
|
$reference = $database->sendResource($steal[0],$steal[1],$steal[2],$steal[3],0,0);
|
|
if ($isoasis == 0){
|
|
$database->modifyResource($DefenderWref,$steal[0],$steal[1],$steal[2],$steal[3],0);
|
|
}else{
|
|
$database->modifyOasisResource($DefenderWref,$steal[0],$steal[1],$steal[2],$steal[3],0);
|
|
}
|
|
$database->addMovement(6,$DefenderWref,$AttackerWref,$reference,$AttackArrivalTime,$endtime,1,0,0,0,0,$data['ref']);
|
|
$totalstolengain=$steal[0]+$steal[1]+$steal[2]+$steal[3];
|
|
$totalstolentaken=((isset($totalstolentaken) ? $totalstolentaken : 0)-($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{ //fix by ronix if only 1 chief left to conqured - don't add with zero enforces
|
|
if($totalsend_att - ($totaldead_att + (isset($totaltraped_att) ? $totaltraped_att : 0)) > 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 == 3 or $type == 4){
|
|
$database->addGeneralAttack($totalattackdead);
|
|
}
|
|
|
|
if (!isset($village_destroyed)) {
|
|
$village_destroyed = 0;
|
|
}
|
|
|
|
if ($village_destroyed == 1) {
|
|
if($can_destroy==1){
|
|
$this->DelVillage($data['to']);
|
|
}
|
|
}
|
|
}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){
|
|
$hero_unit = $database->getHeroField($from['owner'], 'unit', false)['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 += $AttackArrivalTime;
|
|
//$endtime += microtime(true);
|
|
$database->setMovementProc($data['moveid']);
|
|
$database->addMovement(4,$to['wref'],$from['wref'],$data['ref'],$AttackArrivalTime,$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());
|
|
}
|
|
|
|
//check if not natar tribe
|
|
$getvillage = $database->getVillage($to['wref']);
|
|
if ($getvillage['owner']!=3) {
|
|
$crop = $database->getCropProdstarv($to['wref'], false);
|
|
$unitarrays = $this->getAllUnits($to['wref'], false);
|
|
$village_upkeep = $getvillage['pop'] + $this->getUpkeep($unitarrays, 0);
|
|
$starv = $getvillage['starv'];
|
|
|
|
if ($crop < $village_upkeep){
|
|
// add starv data
|
|
$database->setVillageField($to['wref'], 'starv', $village_upkeep);
|
|
if($starv==0)
|
|
$database->setVillageField($to['wref'], 'starvupdate', time());
|
|
}
|
|
unset($crop,$unitarrays,$getvillage,$village_upkeep);
|
|
}
|
|
|
|
// if evasion was active, return units back to base
|
|
if (isset($evaded)) {
|
|
foreach ($evasionUnitModifications_modes as $index => $mode) {
|
|
$evasionUnitModifications_modes[$index] = 1;
|
|
}
|
|
|
|
$database->modifyUnit($data['to'], $evasionUnitModifications_units, $evasionUnitModifications_amounts, $evasionUnitModifications_modes);
|
|
}
|
|
|
|
#################################################
|
|
################FIXED BY SONGER################
|
|
#################################################
|
|
|
|
################################################################################
|
|
##############ISUE: Lag, fixed3####################################################
|
|
#### PHP.NET manual: unset() destroy more than one variable unset($foo1, $foo2, $foo3);######
|
|
################################################################################
|
|
$data_num++;
|
|
|
|
unset(
|
|
$Attacker
|
|
,$Defender
|
|
,$enforce
|
|
,$unitssend_att
|
|
,$unitssend_def
|
|
,$battlepart
|
|
,$unitlist
|
|
,$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
|
|
,$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");
|
|
}
|
|
if ($reload) header("Location: ".$_SERVER['PHP_SELF']);
|
|
}
|
|
|
|
function DelVillage($wref, $mode=0){
|
|
global $database, $units;
|
|
$database->clearExpansionSlot($wref);
|
|
$wref = (int) $wref;
|
|
$q = "DELETE FROM ".TB_PREFIX."abdata where vref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."bdata where wid = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."market where vref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."odata where wref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."research where vref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."tdata where vref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."fdata where vref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."training where vref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."units where vref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."farmlist where wref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."raidlist where towref = $wref";
|
|
$database->query($q);
|
|
$q = "DELETE FROM ".TB_PREFIX."movement where proc = 0 AND ((`to` = $wref AND sort_type=4) OR (`from` = $wref AND sort_type=3))";
|
|
$database->query($q);
|
|
|
|
$getmovement = $database->getMovement(3,$wref,1);
|
|
|
|
$moveIDs = [];
|
|
$time = microtime(true);
|
|
$types = [];
|
|
$froms = [];
|
|
$tos = [];
|
|
$refs = [];
|
|
$times = [];
|
|
$endtimes = [];
|
|
|
|
foreach($getmovement as $movedata) {
|
|
$time2 = $time - $movedata['starttime'];
|
|
$moveIDs[] = $movedata['moveid'];
|
|
$types[] = 4;
|
|
$froms[] = $movedata['to'];
|
|
$tos[] = $movedata['from'];
|
|
$refs[] = $movedata['ref'];
|
|
$times[] = $time;
|
|
$endtimes[] = $time+$time2;
|
|
}
|
|
|
|
$database->setMovementProc(implode(', ', $moveIDs));
|
|
$database->addMovement($types, $froms, $tos, $refs, $times, $endtimes);
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."enforcement WHERE `from` = $wref";
|
|
$database->query($q);
|
|
|
|
//check return enforcement from del village
|
|
$units->returnTroops($wref);
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."vdata WHERE `wref` = $wref";
|
|
$database->query($q);
|
|
|
|
if (mysqli_affected_rows($database->dblink)>0) {
|
|
$q = "UPDATE ".TB_PREFIX."wdata set occupied = 0 where id = $wref";
|
|
$database->query($q);
|
|
|
|
$getprisoners = $database->getPrisoners($wref);
|
|
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($wref);
|
|
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']);
|
|
}
|
|
}
|
|
}
|
|
|
|
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");
|
|
|
|
}
|
|
|
|
if($post['t11']<0)
|
|
{
|
|
$form->addError("error","You can't send negative units.");
|
|
|
|
}
|
|
} else {
|
|
$post['t11']='0';
|
|
}
|
|
|
|
if($form->returnErrors() > 0) {
|
|
$_SESSION['errorarray'] = $form->getErrors();
|
|
$_SESSION['valuearray'] = $_POST;
|
|
header("Location: a2b.php");
|
|
exit;
|
|
} else {
|
|
|
|
//change units
|
|
$start = ($database->getUserField($to['owner'],'tribe',0)-1)*10+1;
|
|
$end = ($database->getUserField($to['owner'],'tribe',0)*10);
|
|
|
|
$j='1';
|
|
$units = [];
|
|
$amounts = [];
|
|
$modes = [];
|
|
|
|
for($i=$start;$i<=$end;$i++){
|
|
$units[] = $i;
|
|
$amounts[] = $post['t'.$j.''];
|
|
$modes[] = 0;
|
|
$j++;
|
|
}
|
|
$database->modifyEnforce($post['ckey'], $units, $amounts, $modes);
|
|
|
|
//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 unit FROM ".TB_PREFIX."hero WHERE uid = ".(int) $from['owner']." AND dead = 0";
|
|
$resulth = mysqli_query($GLOBALS['link'],$qh);
|
|
$hero_f=mysqli_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,$AttackArrivalTime,($time+$AttackArrivalTime));
|
|
$technology->checkReinf($post['ckey']);
|
|
|
|
header("Location: build.php?id=39");
|
|
exit;
|
|
|
|
}
|
|
}
|
|
|
|
private function sendreinfunitsComplete() {
|
|
global $bid23,$database,$battle,$session,$autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/sendreinfunits.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/sendreinfunits.txt");
|
|
}
|
|
$reload=false;
|
|
$time = time();
|
|
$ourFileHandle = fopen($autoprefix."GameEngine/Prevention/sendreinfunits.txt", 'w');
|
|
fclose($ourFileHandle);
|
|
$q = "
|
|
SELECT
|
|
`to`, `from`, moveid,
|
|
t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11
|
|
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);
|
|
|
|
if ($dataarray && count($dataarray)) {
|
|
|
|
$movementProcIDs = [];
|
|
|
|
foreach($dataarray as $data) {
|
|
$isoasis = $database->isVillageOases($data['to']);
|
|
if($isoasis == 0){
|
|
$to = $database->getMInfo($data['to']);
|
|
$toF = $database->getVillage($data['to']);
|
|
$DefenderID = $to['owner'];
|
|
$targettribe = $database->getUserField($DefenderID,"tribe",0);
|
|
$conqureby=0;
|
|
}else{
|
|
$to = $database->getOMInfo($data['to']);
|
|
$toF = $database->getOasisV($data['to']);
|
|
$DefenderID = $to['owner'];
|
|
$targettribe = $database->getUserField($DefenderID,"tribe",0);
|
|
$conqureby=$toF['conqured'];
|
|
}
|
|
|
|
if($data['from']==0){
|
|
$DefenderID = $database->getVillageField($data['to'],"owner");
|
|
if (isset($AttackerID) && $session->uid==$AttackerID || $session->uid==$DefenderID) $reload=true;
|
|
$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'],(isset($targetally) ? $targetally : 0),8,'village of the elders reinforcement '.addslashes($to['name']).'',$data_fail,$AttackArrivalTime);
|
|
$movementProcIDs[] = $data['moveid'];
|
|
if ($session->uid==$DefenderID) $reload=true;
|
|
}else{
|
|
//set base things
|
|
$from = $database->getMInfo($data['from']);
|
|
$fromF = $database->getVillage($data['from']);
|
|
$AttackerID = $from['owner'];
|
|
$owntribe = $database->getUserField($AttackerID,"tribe",0);
|
|
|
|
|
|
if ($session->uid==$AttackerID || $session->uid==$DefenderID) $reload=true;
|
|
|
|
//check to see if we're sending a hero between own villages and there's a Mansion at target village
|
|
$HeroTransfer=0;
|
|
$troopsPresent=0;
|
|
if($data['t11'] != 0) {
|
|
if($AttackerID == $DefenderID) {
|
|
// only add hero if we're sending him alone
|
|
if (
|
|
($this->getTypeLevel(37,$data['to']) > 0) &&
|
|
($data['t1'] == 0) &&
|
|
($data['t2'] == 0) &&
|
|
($data['t3'] == 0) &&
|
|
($data['t4'] == 0) &&
|
|
($data['t5'] == 0) &&
|
|
($data['t6'] == 0) &&
|
|
($data['t7'] == 0) &&
|
|
($data['t8'] == 0) &&
|
|
($data['t9'] == 0) &&
|
|
($data['t10'] == 0)
|
|
) {
|
|
//don't reinforce, addunit instead
|
|
$database->modifyUnit($data['to'],array("hero"),array(1),array(1));
|
|
$heroid = $database->getHeroField($DefenderID, 'heroid');
|
|
$database->modifyHero("wref",$data['to'],$heroid,0);
|
|
$HeroTransfer = 1;
|
|
}
|
|
}
|
|
}
|
|
for($i=1;$i<=10;$i++) {
|
|
if($data['t'.$i]>0) {
|
|
$troopsPresent = 1; break;
|
|
}
|
|
}
|
|
|
|
if($data['t11'] != 0 || $troopsPresent) {
|
|
$temphero=$data['t11'];
|
|
if ($HeroTransfer) $data['t11']=0;
|
|
//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++){
|
|
$t_units.="u".$i."=u".$i." + ".$data['t'.$j].(($j > 9) ? '' : ', ');$j++;
|
|
}
|
|
$q = "UPDATE ".TB_PREFIX."enforcement set $t_units where id =".(int) $check['id'];
|
|
$database->query($q);
|
|
$database->modifyEnforce($check['id'],'hero',$data['t11'],1);
|
|
}
|
|
$data['t11']=$temphero;
|
|
}
|
|
//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.'';
|
|
|
|
|
|
if($isoasis == 0){
|
|
$to_name=$to['name'];
|
|
}else{
|
|
$to_name="Oasis ".$database->getVillageField($to['conqured'],"name");
|
|
}
|
|
$database->addNotice($from['owner'],$from['wref'],(isset($ownally) ? $ownally : 0),8,''.addslashes($from['name']).' reinforcement '.addslashes($to_name).'',$data_fail,(isset($AttackArrivalTime) ? $AttackArrivalTime : time()));
|
|
if($from['owner'] != $to['owner']) {
|
|
$database->addNotice($to['owner'],$to['wref'],(isset($targetally) ? $targetally : 0),8,''.addslashes($from['name']).' reinforcement '.addslashes($to_name).'',$data_fail,(isset($AttackArrivalTime) ? $AttackArrivalTime : time()));
|
|
}
|
|
//update status
|
|
$movementProcIDs[] = $data['moveid'];
|
|
}
|
|
|
|
$crop = $database->getCropProdstarv($data['to']);
|
|
$unitarrays = $this->getAllUnits($data['to']);
|
|
$village = $database->getVillage($data['to']);
|
|
$upkeep = $village['pop'] + $this->getUpkeep($unitarrays, 0);
|
|
$starv = $database->getVillageField($data['to'],"starv");
|
|
if ($crop < $upkeep){
|
|
// add starv data
|
|
$database->setVillageField($data['to'], 'starv', $upkeep);
|
|
if($starv==0){
|
|
$database->setVillageField($data['to'], 'starvupdate', $time);
|
|
}
|
|
}
|
|
|
|
//check empty reinforcement in rally point
|
|
$e_units='';
|
|
for ($i=1;$i<=50;$i++) {
|
|
$e_units.='u'.$i.'=0 AND ';
|
|
}
|
|
$e_units.='hero=0';
|
|
$q="DELETE FROM ".TB_PREFIX."enforcement WHERE ".$e_units." AND (vref=".(int) $data['to']." OR `from`=".(int) $data['to'].")";
|
|
$database->query($q);
|
|
}
|
|
|
|
$database->setMovementProc(implode(', ', $movementProcIDs));
|
|
}
|
|
|
|
if(file_exists("GameEngine/Prevention/sendreinfunits.txt")) {
|
|
unlink("GameEngine/Prevention/sendreinfunits.txt");
|
|
}
|
|
if($reload) header("Location: ".$_SERVER['PHP_SELF']);
|
|
}
|
|
|
|
private function returnunitsComplete() {
|
|
global $database, $autoprefix;
|
|
if(file_exists($autoprefix."GameEngine/Prevention/returnunits.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/returnunits.txt");
|
|
}
|
|
$ourFileHandle = fopen($autoprefix."GameEngine/Prevention/returnunits.txt", 'w');
|
|
fclose($ourFileHandle);
|
|
$reload=false;
|
|
$time = time();
|
|
$q = "
|
|
SELECT
|
|
`to`, `from`, moveid, starttime, endtime,
|
|
t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11
|
|
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);
|
|
|
|
// because of a yet-to-be-discovered but, movements sometimes get inserted into the database twice,
|
|
// so we need to de-duplicate them here by checking for the same wave properties sent out at the
|
|
// same time (i.e. with exactly the same timestamp)
|
|
$wavesData = [];
|
|
|
|
if ($dataarray && count($dataarray)) {
|
|
|
|
$movementProcIDs = [];
|
|
foreach($dataarray as $data) {
|
|
if (!isset($wavesData[$data['from'].$data['to'].$data['starttime'].$data['endtime']])) {
|
|
$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)
|
|
);
|
|
$movementProcIDs[] = $data['moveid'];
|
|
$crop = $database->getCropProdstarv($data['to']);
|
|
$unitarrays = $this->getAllUnits($data['to']);
|
|
$village = $database->getVillage($data['to']);
|
|
$upkeep = $village['pop'] + $this->getUpkeep($unitarrays, 0);
|
|
$starv = $database->getVillageField($data['to'],"starv");
|
|
if ($crop < $upkeep){
|
|
// add starv data
|
|
$database->setVillageField($data['to'], 'starv', $upkeep);
|
|
if($starv==0){
|
|
$database->setVillageField($data['to'], 'starvupdate', $time);
|
|
}
|
|
}
|
|
|
|
// make sure we don't process duplicate movements until the big bad bug which inserts them into DB is fixed
|
|
$wavesData[$data['from'].$data['to'].$data['starttime'].$data['endtime']] = true;
|
|
} else {
|
|
// duplicate record, just mark it as processed
|
|
$movementProcIDs[] = $data['moveid'];
|
|
}
|
|
}
|
|
|
|
$database->setMovementProc(implode(', ', $movementProcIDs));
|
|
}
|
|
|
|
// Recieve the bounty on type 6.
|
|
|
|
$q = "SELECT s.wood, s.clay, s.iron, s.crop, `to`, `from`, endtime, merchant, send, moveid FROM ".TB_PREFIX."movement m, ".TB_PREFIX."send s WHERE m.ref = s.id AND m.proc = 0 AND sort_type = 6 AND endtime < $time";
|
|
|
|
$dataarray = $database->query_return($q);
|
|
$movementProcIDs = [];
|
|
|
|
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']);
|
|
$movementProcIDs[] = $data['moveid'];
|
|
$crop = $database->getCropProdstarv($data['to']);
|
|
$unitarrays = $this->getAllUnits($data['to']);
|
|
$village = $database->getVillage($data['to']);
|
|
$upkeep = $village['pop'] + $this->getUpkeep($unitarrays, 0);
|
|
$starv = $database->getVillageField($data['to'],"starv");
|
|
if ($crop < $upkeep){
|
|
// add starv data
|
|
$database->setVillageField($data['to'], 'starv', $upkeep);
|
|
if($starv==0){
|
|
$database->setVillageField($data['to'], 'starvupdate', $time);
|
|
}
|
|
}
|
|
}
|
|
|
|
$database->setMovementProc(implode(', ', $movementProcIDs));
|
|
$this->pruneResource();
|
|
|
|
// Settlers
|
|
|
|
$q = "SELECT `to`, moveid FROM ".TB_PREFIX."movement where ref = 0 and proc = '0' and sort_type = '4' and endtime < $time";
|
|
|
|
$dataarray = $database->query_return($q);
|
|
$movementProcIDs = [];
|
|
|
|
if ($dataarray && count($dataarray)) {
|
|
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));
|
|
$movementProcIDs[] = $data['moveid'];
|
|
}
|
|
|
|
$database->setMovementProc(implode(', ', $movementProcIDs));
|
|
}
|
|
|
|
if(file_exists("GameEngine/Prevention/returnunits.txt")) {
|
|
unlink("GameEngine/Prevention/returnunits.txt");
|
|
}
|
|
}
|
|
|
|
private function sendSettlersComplete() {
|
|
global $database, $building, $session, $autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/settlers.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/settlers.txt");
|
|
}
|
|
$ourFileHandle = fopen($autoprefix."GameEngine/Prevention/settlers.txt", 'w');
|
|
fclose($ourFileHandle);
|
|
$time = microtime(true);
|
|
$q = "SELECT `to`, `from`, moveid, starttime, ref FROM ".TB_PREFIX."movement where proc = 0 and sort_type = 5 and endtime < $time";
|
|
|
|
$dataarray = $database->query_return($q);
|
|
$movementProcIDs = [];
|
|
$fieldIDs = [];
|
|
$addUnitsWrefs = [];
|
|
$addTechWrefs = [];
|
|
$addABTechWrefs = [];
|
|
$time = microtime(true);
|
|
$types = [];
|
|
$froms = [];
|
|
$tos = [];
|
|
$refs = [];
|
|
$times = [];
|
|
$endtimes = [];
|
|
|
|
foreach($dataarray as $data) {
|
|
$ownerID = $database->getUserField($database->getVillageField($data['from'],"owner"),"id",0);
|
|
if ($session->uid==$ownerID) $reload=true;
|
|
$to = $database->getMInfo($data['from']);
|
|
$user = addslashes($database->getUserField($to['owner'],'username',0));
|
|
$taken = $database->getVillageState($data['to']);
|
|
if($taken != 1){
|
|
$fieldIDs[] = $data['to'];
|
|
$database->addVillage($data['to'],$to['owner'],$user,'0');
|
|
$database->addResourceFields($data['to'],$database->getVillageType($data['to']));
|
|
$addUnitsWrefs[] = $data['to'];
|
|
$addTechWrefs[] = $data['to'];
|
|
$addABTechWrefs[] = $data['to'];
|
|
$movementProcIDs[] = $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
|
|
$types[] = 4;
|
|
$froms[] = $data['to'];
|
|
$tos[] = $data['from'];
|
|
$refs[] = $data['ref'];
|
|
$times[] = $time;
|
|
$endtimes[] = $time+($time-$data['starttime']);
|
|
$movementProcIDs[] = $data['moveid'];
|
|
}
|
|
}
|
|
|
|
$database->addMovement($types, $froms, $tos, $refs, $times, $endtimes);
|
|
$database->setMovementProc(implode(', ', $movementProcIDs));
|
|
$database->setFieldTaken($fieldIDs);
|
|
$database->addUnits($addUnitsWrefs);
|
|
$database->addTech($addTechWrefs);
|
|
$database->addABTech($addABTechWrefs);
|
|
|
|
if(file_exists("GameEngine/Prevention/settlers.txt")) {
|
|
unlink("GameEngine/Prevention/settlers.txt");
|
|
}
|
|
//if ($reload) header("Location: ".$_SERVER['PHP_SELF']);
|
|
}
|
|
|
|
private function researchComplete() {
|
|
global $database, $autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/research.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/research.txt");
|
|
}
|
|
|
|
$ourFileHandle = fopen($autoprefix."GameEngine/Prevention/research.txt", 'w');
|
|
fclose($ourFileHandle);
|
|
|
|
$time = time();
|
|
$deleteIDs = [];
|
|
$tdata = [];
|
|
$abdata = [];
|
|
|
|
$q = "SELECT tech, vref, id 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":
|
|
if (!isset($tdata[$data['vref']])) {
|
|
$tdata[$data['vref']] = [];
|
|
}
|
|
|
|
$tdata[$data['vref']][] = $data['tech'].' = 1';
|
|
break;
|
|
case "a":
|
|
case "b":
|
|
if (!isset($abdata[$data['vref']])) {
|
|
$abdata[$data['vref']] = [];
|
|
}
|
|
|
|
$abdata[$data['vref']][] = $data['tech']." = ".$data['tech']." + 1";
|
|
break;
|
|
}
|
|
$deleteIDs[] = (int) $data['id'];
|
|
}
|
|
|
|
// execute queries with consolidated research data
|
|
if (count($tdata)) {
|
|
foreach ( $tdata as $vid => $preparedData ) {
|
|
$q = "UPDATE ".TB_PREFIX."tdata SET ".implode(', ', $preparedData)." WHERE vref = ".$vid;
|
|
$database->query($q);
|
|
}
|
|
}
|
|
|
|
if (count($abdata)) {
|
|
foreach ( $abdata as $vid => $preparedData ) {
|
|
$q = "UPDATE ".TB_PREFIX."abdata SET ".implode(', ', $preparedData)." WHERE vref = ".$vid;
|
|
$database->query($q);
|
|
}
|
|
}
|
|
|
|
$q = "DELETE FROM ".TB_PREFIX."research where id IN(".implode(', ', $deleteIDs).")";
|
|
$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, $use_cache = true) {
|
|
global $database;
|
|
|
|
$ownunit = $database->getUnit($base, $use_cache);
|
|
$enforcementarray = $database->getEnforceVillage($base, 0, $use_cache);
|
|
|
|
if(count($enforcementarray) > 0) {
|
|
foreach($enforcementarray as $enforce) {
|
|
for($i=1;$i<=50;$i++) {
|
|
$ownunit['u'.$i] += $enforce['u'.$i];
|
|
}
|
|
}
|
|
}
|
|
|
|
$enforceoasis=$database->getOasisEnforce($base, 0, $use_cache);
|
|
if(count($enforceoasis) > 0) {
|
|
foreach($enforceoasis as $enforce) {
|
|
for($i=1;$i<=50;$i++) {
|
|
$ownunit['u'.$i] += $enforce['u'.$i];
|
|
}
|
|
}
|
|
}
|
|
|
|
$enforceoasis1=$database->getOasisEnforce($base, 1, $use_cache);
|
|
if(count($enforceoasis1) > 0) {
|
|
foreach($enforceoasis1 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++) {
|
|
if (!isset($ownunit['u'.$i])) {
|
|
$ownunit['u'.$i] = 0;
|
|
}
|
|
|
|
$ownunit['u'.$i] += (isset($movement['u'.$i]) ? $movement['u'.$i] : 0);
|
|
}
|
|
}
|
|
|
|
$prisoners = $database->getPrisoners($base, 1, $use_cache);
|
|
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==4 && $buildarray['f'.$horsedrinking] >= 10)
|
|
|| ($i==5 && $buildarray['f'.$horsedrinking] >= 15)
|
|
|| ($i==6 && $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==4 && $buildarray['f'.$horsedrinking] >= 10)
|
|
|| ($i==5 && $buildarray['f'.$horsedrinking] >= 15)
|
|
|| ($i==6 && $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;
|
|
}
|
|
$who=$database->getVillageField($vid,"owner");
|
|
$artefact = count($database->getOwnUniqueArtefactInfo2($who,4,3,0));
|
|
$artefact1 = count($database->getOwnUniqueArtefactInfo2($vid,4,1,1));
|
|
$artefact2 = count($database->getOwnUniqueArtefactInfo2($who,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,$who);
|
|
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->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']==3 && $uniqueA['owner']==$uid){
|
|
$this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-(($upkeep)-round($upkeep*0.50));
|
|
|
|
}else if ($normalA['type']==4 && $normalA['size']==1 && $normalA['owner']==$uid){
|
|
$this->bountyproduction['crop'] = $this->bountyGetCropProd()-$this->bountypop-(($upkeep)-round($upkeep*0.25));
|
|
|
|
}else if ($largeA['size']==2 && $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 * (isset($bid8[$grainmill]['attri']) ? $bid8[$grainmill]['attri'] : 0);
|
|
}
|
|
if($bakery >= 1) {
|
|
$crop += $crop /100 * (isset($bid9[$bakery]['attri']) ? $bid9[$bakery]['attri'] : 0);
|
|
}
|
|
if($this->bountyocounter[3] != 0) {
|
|
$crop += $crop*0.25*$this->bountyocounter[3];
|
|
}
|
|
if(!empty($bountyresarray['vref']) && is_numeric($bountyresarray['vref'])){
|
|
$who=$database->getVillageField($bountyresarray['vref'],"owner");
|
|
$croptrue=$database->getUserField($who,"b4",0);
|
|
if($croptrue > time()) {
|
|
$crop*=1.25;
|
|
}
|
|
}
|
|
$crop *= SPEED;
|
|
return round($crop);
|
|
}
|
|
|
|
private function trainingComplete() {
|
|
global $database, $autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/training.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/training.txt");
|
|
}
|
|
|
|
$time = time();
|
|
$ourFileHandle = fopen($autoprefix."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 <= 0 && $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'], false);
|
|
$unitarrays = $this->getAllUnits($train['vref'], false);
|
|
$village = $database->getVillage($train['vref'], false);
|
|
$upkeep = $village['pop'] + $this->getUpkeep($unitarrays, 0);
|
|
$starv = $database->getVillageField($train['vref'],"starv");
|
|
if ($crop < $upkeep){
|
|
// add starv data
|
|
$database->setVillageField($train['vref'], 'starv', $upkeep);
|
|
if($starv==0){
|
|
$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) != 0 && $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() {
|
|
global $database, $autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/celebration.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/celebration.txt");
|
|
}
|
|
|
|
$ourFileHandle = fopen($autoprefix."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() {
|
|
global $building,$database,$village,$autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/demolition.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/demolition.txt");
|
|
}
|
|
|
|
$ourFileHandle = fopen($autoprefix."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) {
|
|
$database->query("
|
|
UPDATE ".TB_PREFIX."vdata
|
|
SET
|
|
`maxstore` = IF(`maxstore` - ".$buildarray[$level]['attri']." <= ".STORAGE_BASE.", ".STORAGE_BASE.", `maxstore` - ".$buildarray[$level]['attri']."),
|
|
WHERE
|
|
wref=".(int) $vil['vref']);
|
|
}
|
|
|
|
if ($type==11 || $type==39) {
|
|
$database->query("
|
|
UPDATE ".TB_PREFIX."vdata
|
|
SET
|
|
`maxcrop` = IF(`maxcrop` - ".$buildarray[$level]['attri']." <= ".STORAGE_BASE.", ".STORAGE_BASE.", `maxcrop` - ".$buildarray[$level]['attri']."),
|
|
WHERE
|
|
wref=".(int) $vil['vref']);
|
|
}
|
|
|
|
if ($level==1) { $clear=",f".$vil['buildnumber']."t=0"; } else { $clear=""; }
|
|
|
|
if ($village->natar==1 && $type==40) $clear=""; //fix by ronix
|
|
|
|
$q = "UPDATE ".TB_PREFIX."fdata SET f".$vil['buildnumber']."=".($level-1).$clear." WHERE vref=".(int) $vil['vref'];
|
|
$database->query($q);
|
|
|
|
$pop = $this->getPop($type,$level-1);
|
|
$database->modifyPop($vil['vref'],$pop[0],1);
|
|
$this->procClimbers($database->getVillageField($vil['vref'],'owner'));
|
|
$database->delDemolition($vil['vref'], true);
|
|
|
|
if ($type==18){
|
|
Automation::updateMax($database->getVillageField($vil['vref'],'owner'));
|
|
}
|
|
}
|
|
}
|
|
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)){
|
|
// first of all, prepare all unit data at once for these heroes
|
|
$heroVillageIDs = [];
|
|
foreach($harray as $hdata) {
|
|
$heroVillageIDs[] = $hdata['wref'];
|
|
}
|
|
|
|
// load data for those prepared IDs
|
|
$unitData = $database->getUnit($heroVillageIDs);
|
|
|
|
// now do the math
|
|
$columns = [];
|
|
$columnValues = [];
|
|
$modes = [];
|
|
$lastUpdateTime = time();
|
|
$newHealth = -1;
|
|
|
|
foreach($harray as $hdata){
|
|
if((time()-$hdata['lastupdate'])>=1){
|
|
if($hdata['health']<100 and $hdata['health']>0){
|
|
if(SPEED <= 10){
|
|
$speed = SPEED;
|
|
}else if(SPEED <= 100){
|
|
$speed = ceil(SPEED/10);
|
|
}else{
|
|
$speed = ceil(SPEED/100);
|
|
}
|
|
|
|
$reg = $hdata['health']+$hdata['regeneration']*5*$speed/86400*(time()-$hdata['lastupdate']);
|
|
|
|
if($reg <= 100){
|
|
$newHealth = $reg;
|
|
}else{
|
|
$newHealth = 100;
|
|
}
|
|
}
|
|
}
|
|
|
|
$herolevel = $hdata['level'];
|
|
$newLevel = -1;
|
|
$scorePoints = false;
|
|
for ($i = $herolevel+1; $i < 100; $i++){
|
|
if($hdata['experience'] >= $hero_levels[$i]){
|
|
$newLevel = $i;
|
|
if ($i < 99) {
|
|
$scorePoints = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// upgrade hero to a new level, if needed
|
|
if ($newLevel > -1) {
|
|
$columns[] = 'level';
|
|
$columnValues[] = $newLevel;
|
|
$modes[] = null;
|
|
}
|
|
|
|
// add 5 points, if we're below level 100
|
|
if ($scorePoints) {
|
|
$columns[] = 'points';
|
|
$columnValues[] = 5;
|
|
$modes[] = 1;
|
|
}
|
|
|
|
$villunits = $unitData[$hdata['wref']];
|
|
if($villunits['hero'] == 0 && $hdata['trainingtime'] < time() && $hdata['inrevive'] == 1){
|
|
mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX . "units SET hero = 1 WHERE vref = ".(int) $hdata['wref']."");
|
|
|
|
$columns[] = 'dead';
|
|
$columnValues[] = 0;
|
|
$modes[] = null;
|
|
|
|
$columns[] = 'inrevive';
|
|
$columnValues[] = 0;
|
|
$modes[] = null;
|
|
|
|
$columns[] = 'inrevive';
|
|
$columnValues[] = 0;
|
|
$modes[] = null;
|
|
|
|
$newHealth = 100;
|
|
$lastUpdateTime = (int) $hdata['trainingtime'];
|
|
}
|
|
|
|
if($villunits['hero'] == 0 && $hdata['trainingtime'] < time() && $hdata['intraining'] == 1){
|
|
mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX . "units SET hero = 1 WHERE vref = ".(int) $hdata['wref']);
|
|
|
|
$columns[] = 'intraining';
|
|
$columnValues[] = 0;
|
|
$modes[] = null;
|
|
|
|
$lastUpdateTime = (int) $hdata['trainingtime'];
|
|
}
|
|
|
|
// update health, if needed
|
|
if ($newHealth > -1) {
|
|
$columns[] = 'health';
|
|
$columnValues[] = $newHealth;
|
|
$modes[] = null;
|
|
}
|
|
|
|
// last update timestamp
|
|
$columns[] = 'lastupdate';
|
|
$columnValues[] = $lastUpdateTime;
|
|
$modes[] = null;
|
|
|
|
$database->modifyHero($columns, $columnValues, $hdata['heroid']);
|
|
}
|
|
}
|
|
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 = mysqli_query($GLOBALS['link'],'SELECT * FROM `' . TB_PREFIX . 'fdata`');
|
|
|
|
mysqli_begin_transaction($GLOBALS['link']);
|
|
while ($row = mysqli_fetch_assoc($result))
|
|
{
|
|
$ress = $crop = 0;
|
|
for ($i = 19; $i < 40; ++$i)
|
|
{
|
|
if ($row['f' . $i . 't'] == 10)
|
|
{
|
|
$ress += ((isset($bid10[$row['f' . $i]]) && isset($bid10[$row['f' . $i]]['attri'])) ? $bid10[$row['f' . $i]]['attri'] * STORAGE_MULTIPLIER : 0);
|
|
}
|
|
|
|
if ($row['f' . $i . 't'] == 38)
|
|
{
|
|
$ress += ((isset($bid38[$row['f' . $i]]) && isset($bid38[$row['f' . $i]]['attri'])) ? $bid38[$row['f' . $i]]['attri'] * STORAGE_MULTIPLIER : 0);
|
|
}
|
|
|
|
|
|
|
|
if ($row['f' . $i . 't'] == 11)
|
|
{
|
|
$crop += ((isset($bid11[$row['f' . $i]]) && isset($bid11[$row['f' . $i]]['attri'])) ? $bid11[$row['f' . $i]]['attri'] * STORAGE_MULTIPLIER : 0);
|
|
}
|
|
|
|
if ($row['f' . $i . 't'] == 39)
|
|
{
|
|
$crop += ((isset($bid39[$row['f' . $i]]) && isset($bid39[$row['f' . $i]]['attri'])) ? $bid39[$row['f' . $i]]['attri'] * STORAGE_MULTIPLIER : 0);
|
|
}
|
|
}
|
|
|
|
// no need for update, since we didn't find any warehouses or granaries
|
|
// and maximums would have been set to correct values inside prune* functions already
|
|
if ($ress == 0 && $crop == 0) {
|
|
continue;
|
|
}
|
|
|
|
// maxstore nor maxcrop can go below the minimum threshold
|
|
if ($ress < STORAGE_BASE) {
|
|
$ress = STORAGE_BASE;
|
|
}
|
|
|
|
if ($crop < STORAGE_BASE) {
|
|
$crop = STORAGE_BASE;
|
|
}
|
|
|
|
mysqli_query($GLOBALS['link'],'UPDATE `' . TB_PREFIX . 'vdata` SET `maxstore` = ' . (int) $ress . ', `maxcrop` = ' . (int) $crop . ' WHERE `wref` = ' . (int) $row['vref']);
|
|
}
|
|
mysqli_commit($GLOBALS['link']);
|
|
}
|
|
|
|
private function oasisResourcesProduce() {
|
|
global $database;
|
|
|
|
$speedMultiplier = (8 * (SPEED/3600));
|
|
$database->query("
|
|
UPDATE " . TB_PREFIX . "odata
|
|
SET
|
|
lastupdated = UNIX_TIMESTAMP(),
|
|
wood = IF(wood + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)) > maxstore, maxstore, wood + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated))),
|
|
clay = IF(clay + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)) > maxstore, maxstore, clay + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated))),
|
|
iron = IF(iron + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)) > maxstore, maxstore, iron + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated))),
|
|
crop = IF(crop + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)) > maxcrop, maxcrop, crop + ($speedMultiplier * (UNIX_TIMESTAMP() - lastupdated)))
|
|
WHERE
|
|
wood < 800 OR
|
|
clay < 800 OR
|
|
iron < 800 OR
|
|
crop < 800");
|
|
}
|
|
|
|
private function checkInvitedPlayes() {
|
|
global $database;
|
|
$q = "SELECT id, invited FROM ".TB_PREFIX."users WHERE invited > 0";
|
|
$array = $database->query_return($q);
|
|
|
|
// preload villages data
|
|
$userIDs = [];
|
|
foreach($array as $user) {
|
|
$userIDs[] = $user['id'];
|
|
}
|
|
$database->getProfileVillages($userIDs);
|
|
|
|
// continue...
|
|
foreach($array as $user) {
|
|
$numusers = mysqli_fetch_array(mysqli_query($GLOBALS['link'],"SELECT Count(*) as Total FROM ".TB_PREFIX."users WHERE id = ".(int) $user['invited']), MYSQLI_ASSOC);
|
|
if($numusers['Total'] > 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;
|
|
|
|
mysqli_query($database->dblink, "
|
|
UPDATE ".TB_PREFIX."general
|
|
SET
|
|
shown = 0
|
|
WHERE
|
|
shown = 1 AND
|
|
`time` < (UNIX_TIMESTAMP() - (86400 * 8))");
|
|
}
|
|
|
|
private function MasterBuilder() {
|
|
global $database;
|
|
$q = "SELECT id, wid, type, level, field, timestamp FROM ".TB_PREFIX."bdata WHERE master = 1";
|
|
$array = $database->query_return($q);
|
|
|
|
foreach($array as $master) {
|
|
$owner = $database->getVillageField($master['wid'],'owner');
|
|
$tribe = $database->getUserField($owner,'tribe',0);
|
|
$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($tribe == 1){
|
|
|
|
if($master['field'] < 19){
|
|
$dorf1Buildings = $database->getDorf1Building($master['wid']);
|
|
$bdata = count($dorf1Buildings);
|
|
$bbdata = count($database->getDorf2Building($master['wid']));
|
|
$bdata1 = $dorf1Buildings;
|
|
}else{
|
|
$dorf2Buildings = $database->getDorf2Building($master['wid']);
|
|
$bdata = count($database->getDorf2Building($master['wid']));
|
|
$bbdata = count($database->getDorf1Building($master['wid']));
|
|
$bdata1 = $database->getDorf2Building($master['wid']);
|
|
}
|
|
|
|
}else{
|
|
$dorf1Buildings = $database->getDorf1Building($master['wid']);
|
|
$bdata = $bbdata = count($dorf1Buildings) + count($database->getDorf2Building($master['wid']));
|
|
$bdata1 = $dorf1Buildings;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************
|
|
Function for starvation - by brainiacX and Shadow
|
|
Rework by ronix
|
|
References:
|
|
************************************************/
|
|
|
|
private function starvation() {
|
|
global $database, $village, $autoprefix;
|
|
|
|
if(file_exists($autoprefix."GameEngine/Prevention/starvation.txt")) {
|
|
unlink($autoprefix."GameEngine/Prevention/starvation.txt");
|
|
}
|
|
|
|
$ourFileHandle = fopen($autoprefix."GameEngine/Prevention/starvation.txt", 'w');
|
|
fclose($ourFileHandle);
|
|
$time = time();
|
|
|
|
//update starvation
|
|
$getvillage = $database->getVillage($village->wid);
|
|
$starv = $getvillage['starv'];
|
|
if ($getvillage['owner']!=3 && $starv==0) {
|
|
$crop = $database->getCropProdstarv($village->wid);
|
|
$unitarrays = $this->getAllUnits($village->wid);
|
|
$village_upkeep = $getvillage['pop'] + $this->getUpkeep($unitarrays, 0);
|
|
if ($crop < $village_upkeep){
|
|
// add starv data
|
|
$database->setVillageField($village->wid, 'starv', $village_upkeep);
|
|
if($starv==0)
|
|
$database->setVillageField($village->wid, 'starvupdate', time());
|
|
}
|
|
unset($crop,$unitarrays,$getvillage,$village_upkeep);
|
|
}
|
|
|
|
// load villages with minus prod
|
|
|
|
$starvarray = array();
|
|
$starvarray = $database->getStarvation();
|
|
foreach ($starvarray as $starv){
|
|
$unitarrays = $this->getAllUnits($starv['wref']);
|
|
$howweeating=$this->getUpkeep($unitarrays, 0,$starv['wref']);
|
|
$upkeep = $starv['pop'] + $howweeating;
|
|
|
|
|
|
// get enforce other player from oasis
|
|
$enforceoasis = $database->getOasisEnforce($starv['wref'], 2);
|
|
$maxcount=0;
|
|
$totalunits=0;
|
|
if(count($enforceoasis)>0){
|
|
foreach ($enforceoasis as $enforce){
|
|
for($i=1;$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";
|
|
}
|
|
$other_reinf=true;
|
|
}
|
|
}else{
|
|
//own troops from oasis
|
|
$enforceoasis = $database->getOasisEnforce($starv['wref'], 3);
|
|
if(count($enforceoasis)>0){
|
|
foreach ($enforceoasis as $enforce){
|
|
for($i=1;$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";
|
|
}
|
|
}
|
|
}else{
|
|
//get enforce other player from village
|
|
$enforcearray = $database->getEnforceVillage($starv['wref'], 2);
|
|
if(count($enforcearray)>0){
|
|
foreach ($enforcearray as $enforce){
|
|
for($i = 0 ; $i <= 50 ; $i++){
|
|
$units = (isset($enforce['u'.$i]) ? $enforce['u'.$i] : 0);
|
|
if($units > $maxcount){
|
|
$maxcount = $units;
|
|
$maxtype = $i;
|
|
$enf = $enforce['id'];
|
|
}
|
|
$totalunits += $units;
|
|
}
|
|
if($totalunits == 0){
|
|
$maxcount = $enforce['hero'];
|
|
$maxtype = "hero";
|
|
}
|
|
}
|
|
}else{
|
|
//get own reinforcement from other village
|
|
$enforcearray = $database->getEnforceVillage($starv['wref'], 3);
|
|
if(count($enforcearray)>0){
|
|
foreach ($enforcearray as $enforce){
|
|
for($i = 0 ; $i <= 50 ; $i++){
|
|
$units = (isset($enforce['u'.$i]) ? $enforce['u'.$i] : 0);
|
|
if($units > $maxcount){
|
|
$maxcount = $units;
|
|
$maxtype = $i;
|
|
$enf = $enforce['id'];
|
|
}
|
|
$totalunits += $units;
|
|
}
|
|
if($totalunits == 0){
|
|
$maxcount = $enforce['hero'];
|
|
$maxtype = "hero";
|
|
}
|
|
}
|
|
}else{
|
|
//get own unit
|
|
$unitarray = $database->getUnit($starv['wref']);
|
|
for($i = 0 ; $i <= 50 ; $i++){
|
|
$units = (isset($unitarray['u'.$i]) ? $unitarray['u'.$i] : 0);
|
|
if($units > $maxcount){
|
|
$maxcount = $units;
|
|
$maxtype = $i;
|
|
}
|
|
$totalunits += $units;
|
|
}
|
|
if($totalunits == 0){
|
|
$maxcount = $unitarray['hero'];
|
|
$maxtype = "hero";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// counting
|
|
|
|
$timedif = $time-$starv['starvupdate'];
|
|
$skolko=$database->getCropProdstarv($starv['wref'])-$starv['starv'];
|
|
if($skolko<0){$golod=true;}
|
|
else{$golod=false;}
|
|
if($golod){
|
|
$starvsec = (abs($skolko)/3600);
|
|
$difcrop = ($timedif*$starvsec); //crop eat up over time
|
|
$newcrop = 0;
|
|
$oldcrop = $database->getVillageField($starv['wref'], 'crop');
|
|
if ($oldcrop > 100){ //if the grain is then tries to send all
|
|
$difcrop = $difcrop-$oldcrop;
|
|
if($difcrop < 0){
|
|
$difcrop = 0;
|
|
$newcrop = $oldcrop-$difcrop;
|
|
$database->setVillageField($starv['wref'], 'crop', $newcrop);
|
|
}
|
|
}
|
|
|
|
if($difcrop > 0){
|
|
global ${'u'.$maxtype};
|
|
|
|
$hungry=array();
|
|
$hungry=${'u'.$maxtype};
|
|
|
|
if ($hungry['crop']>0 && $oldcrop <=0) {
|
|
$killunits = intval($difcrop/$hungry['crop']);
|
|
}else $killunits=0;
|
|
|
|
if($killunits > 0){
|
|
$pskolko = abs($skolko);
|
|
if($killunits > $pskolko && $skolko <0){
|
|
$killunits = $pskolko;
|
|
}
|
|
if (isset($enf)){
|
|
if($killunits < $maxcount){
|
|
$database->modifyEnforce($enf, $maxtype, $killunits, 0);
|
|
$database->setVillageField(
|
|
$starv['wref'],
|
|
['starv', 'starvupdate'],
|
|
[$upkeep, $time]
|
|
);
|
|
$database->modifyResource($starv['wref'],0,0,0,$hungry['crop'],1);
|
|
|
|
if($maxtype == "hero"){
|
|
$heroid = $database->getHeroField($database->getVillageField($enf,"owner"),"heroid");
|
|
$database->modifyHero("dead", 1, $heroid);
|
|
}
|
|
}else{
|
|
$database->deleteReinf($enf);
|
|
$database->setVillageField(
|
|
$starv['wref'],
|
|
['starv', 'starvupdate'],
|
|
[$upkeep, $time]
|
|
);
|
|
}
|
|
}else{
|
|
if($killunits < $maxcount){
|
|
$database->modifyUnit($starv['wref'], array($maxtype), array($killunits), array(0));
|
|
$database->setVillageField(
|
|
$starv['wref'],
|
|
['starv', 'starvupdate'],
|
|
[$upkeep, $time]
|
|
);
|
|
$database->modifyResource($starv['wref'],0,0,0,$hungry['crop'],1);
|
|
if($maxtype == "hero"){
|
|
$heroid = $database->getHeroField($starv['owner'],"heroid");
|
|
$database->modifyHero("dead", 1, $heroid);
|
|
}
|
|
}elseif($killunits > $maxcount){
|
|
$killunits = $maxcount;
|
|
$database->modifyUnit($starv['wref'], array($maxtype), array($killunits), array(0));
|
|
$database->setVillageField(
|
|
$starv['wref'],
|
|
['starv', 'starvupdate'],
|
|
[$upkeep, $time]
|
|
);
|
|
|
|
if($maxtype == "hero"){
|
|
$heroid = $database->getHeroField($starv['owner'],"heroid");
|
|
$database->modifyHero("dead", 1, $heroid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$crop = $database->getCropProdstarv($starv['wref'], false);
|
|
if ($crop > $upkeep){
|
|
$database->setVillageField(
|
|
$starv['wref'],
|
|
['starv', 'starvupdate'],
|
|
[0, 0]
|
|
);
|
|
}
|
|
|
|
unset ($starv,$unitarrays,$enforcearray,$enforce,$starvarray);
|
|
}
|
|
|
|
if(file_exists("GameEngine/Prevention/starvation.txt")) {
|
|
unlink("GameEngine/Prevention/starvation.txt");
|
|
}
|
|
}
|
|
|
|
/************************************************
|
|
Function for starvation - by brainiacX and Shadow
|
|
Rework by ronix
|
|
References:
|
|
************************************************/
|
|
|
|
private function procNewClimbers() {
|
|
if(file_exists("GameEngine/Prevention/climbers.txt")) {
|
|
unlink("GameEngine/Prevention/climbers.txt");
|
|
}
|
|
global $database,$ranking;
|
|
$ranking->procRankArray();
|
|
$climbers = $ranking->getRank();
|
|
if(count($ranking->getRank()) > 0){
|
|
$q = "SELECT week FROM ".TB_PREFIX."medal order by week DESC LIMIT 0, 1";
|
|
$result = mysqli_query($GLOBALS['link'],$q);
|
|
if(mysqli_num_rows($result)) {
|
|
$row=mysqli_fetch_assoc($result);
|
|
$week=($row['week']+1);
|
|
} else {
|
|
$week='1';
|
|
}
|
|
$q = "SELECT id FROM ".TB_PREFIX."users where oldrank = 0 and id > 5";
|
|
$array = $database->query_return($q);
|
|
foreach($array as $user){
|
|
$newrank = $ranking->getUserRank($user['id']);
|
|
if($week > 1){
|
|
for($i=$newrank+1;$i<count($ranking->getRank());$i++) {
|
|
$oldrank = $ranking->getUserRank($climbers[$i]['userid']);
|
|
$totalpoints = $oldrank - $climbers[$i]['oldrank'];
|
|
$database->removeclimberrankpop($climbers[$i]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$i]['userid'], $oldrank);
|
|
}
|
|
$database->updateoldrank($user['id'], $newrank);
|
|
}else{
|
|
$totalpoints = count($ranking->getRank()) - $newrank;
|
|
$database->setclimberrankpop($user['id'], $totalpoints);
|
|
$database->updateoldrank($user['id'], $newrank);
|
|
for($i=1;$i<$newrank;$i++){
|
|
$oldrank = $ranking->getUserRank($climbers[$i]['userid']);
|
|
$totalpoints = count($ranking->getRank()) - $oldrank;
|
|
$database->setclimberrankpop($climbers[$i]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$i]['userid'], $oldrank);
|
|
}
|
|
for($i=$newrank+1;$i<count($ranking->getRank());$i++){
|
|
$oldrank = $ranking->getUserRank($climbers[$i]['userid']);
|
|
$totalpoints = count($ranking->getRank()) - $oldrank;
|
|
$database->setclimberrankpop($climbers[$i]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$i]['userid'], $oldrank);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(file_exists("GameEngine/Prevention/climbers.txt")) {
|
|
unlink("GameEngine/Prevention/climbers.txt");
|
|
}
|
|
}
|
|
|
|
private function procClimbers($uid) {
|
|
global $database, $ranking;
|
|
$ranking->procRankArray();
|
|
$climbers = $ranking->getRank();
|
|
if(count($ranking->getRank()) > 0){
|
|
$q = "SELECT week FROM ".TB_PREFIX."medal order by week DESC LIMIT 0, 1";
|
|
$result = mysqli_query($GLOBALS['link'],$q);
|
|
if(mysqli_num_rows($result)) {
|
|
$row=mysqli_fetch_assoc($result);
|
|
$week=($row['week']+1);
|
|
} else {
|
|
$week='1';
|
|
}
|
|
$myrank = $ranking->getUserRank($uid);
|
|
if(isset($climbers[$myrank]['oldrank']) && $climbers[$myrank]['oldrank'] > $myrank){
|
|
for($i=$myrank+1;$i<=$climbers[$myrank]['oldrank'];$i++) {
|
|
$oldrank = $ranking->getUserRank($climbers[$i]['userid']);
|
|
if($week > 1){
|
|
$totalpoints = $oldrank - $climbers[$i]['oldrank'];
|
|
$database->removeclimberrankpop($climbers[$i]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$i]['userid'], $oldrank);
|
|
}else{
|
|
$totalpoints = count($ranking->getRank()) - $oldrank;
|
|
$database->setclimberrankpop($climbers[$i]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$i]['userid'], $oldrank);
|
|
}
|
|
}
|
|
if($week > 1){
|
|
$totalpoints = $climbers[$myrank]['oldrank'] - $myrank;
|
|
$database->addclimberrankpop($climbers[$myrank]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$myrank]['userid'], $myrank);
|
|
}else{
|
|
$totalpoints = count($ranking->getRank()) - $myrank;
|
|
$database->setclimberrankpop($climbers[$myrank]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$myrank]['userid'], $myrank);
|
|
}
|
|
}else if(isset($climbers[$myrank]['oldrank']) && $climbers[$myrank]['oldrank'] < $myrank){
|
|
for($i=$climbers[$myrank]['oldrank'];$i<$myrank;$i++) {
|
|
$oldrank = $ranking->getUserRank($climbers[$i]['userid']);
|
|
if($week > 1){
|
|
$totalpoints = $climbers[$i]['oldrank'] - $oldrank;
|
|
$database->addclimberrankpop($climbers[$i]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$i]['userid'], $oldrank);
|
|
}else{
|
|
$totalpoints = count($ranking->getRank()) - $oldrank;
|
|
$database->setclimberrankpop($climbers[$i]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$i]['userid'], $oldrank);
|
|
}
|
|
}
|
|
if($week > 1){
|
|
$totalpoints = $myrank - $climbers[$myrank-1]['oldrank'];
|
|
$database->removeclimberrankpop($climbers[$myrank-1]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$myrank-1]['userid'], $myrank);
|
|
}else{
|
|
$totalpoints = count($ranking->getRank()) - $myrank;
|
|
$database->setclimberrankpop($climbers[$myrank-1]['userid'], $totalpoints);
|
|
$database->updateoldrank($climbers[$myrank-1]['userid'], $myrank);
|
|
}
|
|
}
|
|
}
|
|
$ranking->procARankArray();
|
|
$aid = $database->getUserField($uid,"alliance",0);
|
|
if(count($ranking->getRank()) > 0 && $aid != 0){
|
|
$ally = $database->getAlliance($aid);
|
|
$memberlist = $database->getAllMember($ally['id']);
|
|
$oldrank = 0;
|
|
foreach($memberlist as $member) {
|
|
$oldrank += $database->getVSumField($member['id'],"pop");
|
|
}
|
|
if($ally['oldrank'] != $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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private function checkBan() {
|
|
global $database;
|
|
|
|
mysqli_query($database->dblink, "
|
|
UPDATE ".TB_PREFIX."banlist as b
|
|
JOIN ".TB_PREFIX."users as u ON b.uid = u.id
|
|
SET
|
|
b.active = 0,
|
|
u.access = 2
|
|
WHERE
|
|
b.active = 1 AND
|
|
b.`end` < UNIX_TIMESTAMP() AND
|
|
b.`end` > 0");
|
|
}
|
|
|
|
private function regenerateOasisTroops() {
|
|
global $database;
|
|
$time = time();
|
|
$time2 = NATURE_REGTIME;
|
|
$timeFinal = $time - $time2;
|
|
$q = "SELECT wref FROM " . TB_PREFIX . "odata where conqured = 0 and lastupdated2 < $timeFinal";
|
|
$array = $database->query_return($q);
|
|
if (count($array)) {
|
|
$ids = [];
|
|
foreach($array as $oasis) {
|
|
$ids[] = $oasis['wref'];
|
|
}
|
|
|
|
$database->regenerateOasisUnits($ids, true);
|
|
}
|
|
}
|
|
|
|
public static function updateMax($leader) {
|
|
global $bid18, $database;
|
|
$q = mysqli_fetch_array(mysqli_query($GLOBALS['link'],"SELECT Count(*) as Total FROM " . TB_PREFIX . "alidata where leader = ". (int) $leader), MYSQLI_ASSOC);
|
|
if ($q['Total'] > 0) {
|
|
$villages = $database->getVillagesID2($leader);
|
|
$max = 0;
|
|
foreach($villages as $village){
|
|
$field = $database->getResourceLevel($village['wref']);
|
|
for($i=19;$i<=40;$i++){
|
|
if($field['f'.$i.'t'] == 18){
|
|
$level = $field['f'.$i];
|
|
$attri = $bid18[$level]['attri'];
|
|
}
|
|
}
|
|
if($attri > $max){
|
|
$max = $attri;
|
|
}
|
|
}
|
|
$q = "UPDATE ".TB_PREFIX."alidata set max = ".(int) $max." where leader = ".(int) $leader;
|
|
$database->query($q);
|
|
}
|
|
}
|
|
|
|
private function checkReviveHero(){
|
|
global $database,$session;
|
|
$herodata=$database->getHero($session->uid,1);
|
|
if ($herodata[0]['dead']==1){
|
|
mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX . "units SET hero = 0 WHERE vref = ".(int) $session->villages[0]."");
|
|
}
|
|
if($herodata[0]['trainingtime'] <= time()) {
|
|
if($herodata[0]['trainingtime'] != 0) {
|
|
if($herodata[0]['dead'] == 0) {
|
|
mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX . "hero SET trainingtime = '0' WHERE heroid = " . $herodata[0]['heroid']);
|
|
mysqli_query($GLOBALS['link'],"UPDATE " . TB_PREFIX . "units SET hero = 1 WHERE vref = ".(int) $session->villages[0]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************
|
|
Function for automate medals - by yi12345 and Shadow
|
|
References:
|
|
************************************************/
|
|
|
|
function medals(){
|
|
global $ranking,$database;
|
|
|
|
//we may give away ribbons
|
|
$giveMedal = false;
|
|
$q = "SELECT lastgavemedal FROM ".TB_PREFIX."config";
|
|
$result = mysqli_query($GLOBALS['link'],$q);
|
|
if($result) {
|
|
$row=mysqli_fetch_assoc($result);
|
|
$stime = strtotime(START_DATE)-strtotime(date('m/d/Y'))+strtotime(START_TIME);
|
|
if($row['lastgavemedal'] == 0 && $stime < time()){
|
|
$newtime = time()+MEDALINTERVAL;
|
|
$q = "UPDATE ".TB_PREFIX."config SET lastgavemedal=".(int) $newtime;
|
|
$database->query($q);
|
|
$row['lastgavemedal'] = time()+MEDALINTERVAL;
|
|
}
|
|
$time = $row['lastgavemedal'] + MEDALINTERVAL;
|
|
if ($time < time()) $giveMedal = true;
|
|
}
|
|
|
|
if($giveMedal && MEDALINTERVAL > 0){
|
|
|
|
//determine which week we are
|
|
|
|
$q = "SELECT week FROM ".TB_PREFIX."medal order by week DESC LIMIT 0, 1";
|
|
$result = mysqli_query($GLOBALS['link'],$q);
|
|
if(mysqli_num_rows($result)) {
|
|
$row=mysqli_fetch_assoc($result);
|
|
$week=($row['week']+1);
|
|
} else {
|
|
$week='1';
|
|
}
|
|
|
|
//Do same for ally week
|
|
|
|
$q = "SELECT week FROM ".TB_PREFIX."allimedal order by week DESC LIMIT 0, 1";
|
|
$result = mysqli_query($GLOBALS['link'],$q);
|
|
if(mysqli_num_rows($result)) {
|
|
$row=mysqli_fetch_assoc($result);
|
|
$allyweek=($row['week']+1);
|
|
} else {
|
|
$allyweek='1';
|
|
}
|
|
|
|
|
|
//Attackers of the week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, ap FROM ".TB_PREFIX."users ORDER BY ap DESC, id DESC Limit 10");
|
|
$i=0;
|
|
while($row = mysqli_fetch_array($result)){
|
|
$i++;
|
|
$img="t2_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."medal (userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", 1, ".($i).", ".(int) $week.", '".$row['ap']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
//Defender of the week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, dp FROM ".TB_PREFIX."users ORDER BY dp DESC, id DESC Limit 10");
|
|
$i=0;
|
|
while($row = mysqli_fetch_array($result)){
|
|
$i++;
|
|
$img="t3_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '2', ".($i).", '".(int) $week."', '".$row['dp']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
//Climbers of the week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, Rc FROM ".TB_PREFIX."users ORDER BY Rc DESC, id DESC Limit 10");
|
|
$i=0;
|
|
while($row = mysqli_fetch_array($result)){
|
|
$i++;
|
|
$img="t1_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '3', ".($i).", '".(int) $week."', '".$row['Rc']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
//Rank climbers of the week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, clp FROM ".TB_PREFIX."users ORDER BY clp DESC Limit 10");
|
|
$i=0;
|
|
while($row = mysqli_fetch_array($result)){
|
|
$i++;
|
|
$img="t6_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '10', ".($i).", '".(int) $week."', '".$row['clp']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
//Robbers of the week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, RR FROM ".TB_PREFIX."users ORDER BY RR DESC, id DESC Limit 10");
|
|
$i=0;
|
|
while($row = mysqli_fetch_array($result)){
|
|
$i++;
|
|
$img="t4_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '4', ".($i).", '".(int) $week."', '".$row['RR']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
//Part of the bonus for top 10 attack + defense out
|
|
//Top10 attackers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY ap DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
//Top 10 defenders
|
|
$result2 = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY dp DESC, id DESC Limit 10");
|
|
while($row2 = mysqli_fetch_array($result2)){
|
|
if($row['id']==$row2['id']){
|
|
|
|
$query3="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 5";
|
|
$result3=mysqli_query($GLOBALS['link'],$query3);
|
|
$row3=mysqli_fetch_row($result3);
|
|
|
|
//Look what color the ribbon must have
|
|
if($row3[0]<='2'){
|
|
$img="t22".$row3[0]."_1";
|
|
switch ($row3[0]) {
|
|
case "0":
|
|
$tekst="";
|
|
break;
|
|
case "1":
|
|
$tekst="twice ";
|
|
break;
|
|
case "2":
|
|
$tekst="three times ";
|
|
break;
|
|
}
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '5', '0', '".(int) $week."', '".$tekst."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//you stand for 3rd / 5th / 10th time in the top 3 strikers
|
|
//top10 attackers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY ap DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 1 AND plaats<=3";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x at present as it is so ribbon 3rd (bronze)
|
|
if($row1[0]=='3'){
|
|
$img="t120_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '6', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x at present as it is so 5th medal (silver)
|
|
if($row1[0]=='5'){
|
|
$img="t121_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '6', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t122_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '6', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
}
|
|
//you stand for 3rd / 5th / 10th time in the top 10 attackers
|
|
//top10 attackers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY ap DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 1 AND plaats<=10";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t130_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '12', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t131_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '12', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t132_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '12', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
}
|
|
//je staat voor 3e / 5e / 10e keer in de top 3 verdedigers
|
|
//Pak de top10 verdedigers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY dp DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 2 AND plaats<=3";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t140_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '7', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t141_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '7', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t142_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '7', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
}
|
|
//je staat voor 3e / 5e / 10e keer in de top 3 verdedigers
|
|
//Pak de top10 verdedigers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY dp DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 2 AND plaats<=10";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t150_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '13', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t151_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '13', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t152_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '13', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
}
|
|
|
|
//je staat voor 3e / 5e / 10e keer in de top 3 klimmers
|
|
//Pak de top10 klimmers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY Rc DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 3 AND plaats<=3";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t100_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '8', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t101_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '8', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t102_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '8', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
}
|
|
//je staat voor 3e / 5e / 10e keer in de top 3 klimmers
|
|
//Pak de top10 klimmers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY Rc DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 3 AND plaats<=10";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t110_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '14', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t111_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '14', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t112_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '14', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
}
|
|
|
|
//je staat voor 3e / 5e / 10e keer in de top 3 klimmers
|
|
//Pak de top3 rank climbers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY clp DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 10 AND plaats<=3";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t200_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '11', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t201_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '11', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t202_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '11', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
}
|
|
//je staat voor 3e / 5e / 10e keer in de top 10klimmers
|
|
//Pak de top3 rank climbers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY clp DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 10 AND plaats<=10";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t210_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '16', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t211_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '16', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t212_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '16', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
}
|
|
|
|
//je staat voor 3e / 5e / 10e keer in de top 10 overvallers
|
|
//Pak de top10 overvallers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY RR DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 4 AND plaats<=3";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t160_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '9', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t161_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '9', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t162_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '9', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
}
|
|
//je staat voor 3e / 5e / 10e keer in de top 10 overvallers
|
|
//Pak de top10 overvallers
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."users ORDER BY RR DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
$query1="SELECT Count(*) FROM ".TB_PREFIX."medal WHERE userid=".(int) $row['id']." AND categorie = 4 AND plaats<=10";
|
|
$result1=mysqli_query($GLOBALS['link'],$query1);
|
|
$row1=mysqli_fetch_row($result1);
|
|
|
|
|
|
//2x in gestaan, dit is 3e dus lintje (brons)
|
|
if($row1[0]=='3'){
|
|
$img="t170_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '15', '0', '".(int) $week."', 'Three', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//4x in gestaan, dit is 5e dus lintje (zilver)
|
|
if($row1[0]=='5'){
|
|
$img="t171_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '15', '0', '".(int) $week."', 'Five', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
//9x at present as it is so 10th medal (gold)
|
|
if($row1[0]=='10'){
|
|
$img="t172_1";
|
|
$quer="insert into ".TB_PREFIX."medal(userid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '15', '0', '".(int) $week."', 'Ten', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
}
|
|
|
|
//Put all true dens to 0
|
|
$query="SELECT id FROM ".TB_PREFIX."users ORDER BY id+0 DESC";
|
|
$result=mysqli_query($GLOBALS['link'],$query);
|
|
$userIDs = [];
|
|
for ($i=0; $row=mysqli_fetch_row($result); $i++){
|
|
$userIDs[] = (int) $row[0];
|
|
}
|
|
|
|
if (count($userIDs)) {
|
|
mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."users SET ap=0, dp=0,Rc=0,clp=0, RR=0 WHERE id IN(".implode(', ', $userIDs).")");
|
|
}
|
|
|
|
//Start alliance Medals wooot
|
|
|
|
//Aanvallers v/d Week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, ap FROM ".TB_PREFIX."alidata ORDER BY ap DESC, id DESC Limit 10");
|
|
$i=0; while($row = mysqli_fetch_array($result)){
|
|
$i++; $img="a2_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."allimedal(allyid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '1', ".($i).", '".$allyweek."', '".$row['ap']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
//Verdediger v/d Week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, dp FROM ".TB_PREFIX."alidata ORDER BY dp DESC Limit 10");
|
|
$i=0; while($row = mysqli_fetch_array($result)){
|
|
$i++; $img="a3_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."allimedal(allyid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '2', ".($i).", '".$allyweek."', '".$row['dp']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
//Overvallers v/d Week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, RR FROM ".TB_PREFIX."alidata ORDER BY RR DESC, id DESC Limit 10");
|
|
$i=0; while($row = mysqli_fetch_array($result)){
|
|
$i++; $img="a4_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."allimedal(allyid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '4', ".($i).", '".$allyweek."', '".$row['RR']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
//Rank climbers of the week
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT id, clp FROM ".TB_PREFIX."alidata ORDER BY clp DESC Limit 10");
|
|
$i=0; while($row = mysqli_fetch_array($result)){
|
|
$i++; $img="a1_".($i)."";
|
|
$quer="insert into ".TB_PREFIX."allimedal(allyid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '3', ".($i).", '".$allyweek."', '".$row['clp']."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
|
|
$result = mysqli_query($GLOBALS['link'],"SELECT * FROM ".TB_PREFIX."alidata ORDER BY ap DESC, id DESC Limit 10");
|
|
while($row = mysqli_fetch_array($result)){
|
|
|
|
//Pak de top10 verdedigers
|
|
$result2 = mysqli_query($GLOBALS['link'],"SELECT id FROM ".TB_PREFIX."alidata ORDER BY dp DESC, id DESC Limit 10");
|
|
while($row2 = mysqli_fetch_array($result2)){
|
|
if($row['id']==$row2['id']){
|
|
|
|
$query3="SELECT Count(*) FROM ".TB_PREFIX."allimedal WHERE allyid=".(int) $row['id']." AND categorie = 5";
|
|
$result3=mysqli_query($GLOBALS['link'],$query3);
|
|
$row3=mysqli_fetch_row($result3);
|
|
|
|
//Look what color the ribbon must have
|
|
if($row3[0]<='2'){
|
|
$img="t22".$row3[0]."_1";
|
|
switch ($row3[0]) {
|
|
case "0":
|
|
$tekst="";
|
|
break;
|
|
case "1":
|
|
$tekst="twice ";
|
|
break;
|
|
case "2":
|
|
$tekst="three times ";
|
|
break;
|
|
}
|
|
$quer="insert into ".TB_PREFIX."allimedal(allyid, categorie, plaats, week, points, img) values(".(int) $row['id'].", '5', '0', '".$allyweek."', '".$tekst."', '".$img."')";
|
|
$resul=mysqli_query($GLOBALS['link'],$quer);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$query="SELECT id FROM ".TB_PREFIX."alidata ORDER BY id+0 DESC";
|
|
$result=mysqli_query($GLOBALS['link'],$query);
|
|
|
|
$aliIDs = [];
|
|
for ($i=0; $row=mysqli_fetch_row($result); $i++){
|
|
$aliIDs[] = (int) $row[0];
|
|
}
|
|
|
|
if (count($aliIDs)) {
|
|
mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."alidata SET ap=0, dp=0,RR=0,clp=0 WHERE id IN(".implode(', ', $aliIDs).")");
|
|
}
|
|
|
|
$q = "UPDATE ".TB_PREFIX."config SET lastgavemedal=".$time;
|
|
$database->query($q);
|
|
}
|
|
}
|
|
|
|
/************************************************
|
|
Function for automate medals - by yi12345 and Shadow
|
|
References:
|
|
************************************************/
|
|
|
|
private function artefactOfTheFool() {
|
|
global $database;
|
|
$time = time();
|
|
$q = "SELECT id, size FROM " . TB_PREFIX . "artefacts where type = 8 and active = 1 and lastupdate <= ".($time - 86400);
|
|
$array = $database->query_return($q);
|
|
if ($array) {
|
|
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;
|
|
}
|
|
mysqli_query($GLOBALS['link'],"UPDATE ".TB_PREFIX."artefacts SET kind = ". (int) $kind. ", bad_effect = $bad_effect, effect2 = $effect, lastupdate = $time WHERE id = ".(int) $artefact['id']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$automation = new Automation;
|
|
?>
|