mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-09-01 16:17:13 +00:00
refactor: 3rd round of sendunitsComplete() optimizations
This commit is contained in:
+91
-77
@@ -1162,8 +1162,15 @@ class Automation {
|
|||||||
|
|
||||||
foreach($enforcementarray as $enforce) {
|
foreach($enforcementarray as $enforce) {
|
||||||
for($i=1;$i<=50;$i++) {
|
for($i=1;$i<=50;$i++) {
|
||||||
|
if (!isset($enforDefender['u'.$i])) {
|
||||||
|
$enforDefender['u'.$i] = 0;
|
||||||
|
}
|
||||||
$enforDefender['u'.$i] += $enforce['u'.$i];
|
$enforDefender['u'.$i] += $enforce['u'.$i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isset($enforDefender['hero'])) {
|
||||||
|
$enforDefender['hero'] = 0;
|
||||||
|
}
|
||||||
$enforDefender['hero'] += $enforce['hero'];
|
$enforDefender['hero'] += $enforce['hero'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1227,13 +1234,8 @@ class Automation {
|
|||||||
$defpop = $toF['pop'];
|
$defpop = $toF['pop'];
|
||||||
$def_ab=array();
|
$def_ab=array();
|
||||||
//get level of palace or residence
|
//get level of palace or residence
|
||||||
for ($i=19; $i<40; $i++){
|
$residence = $database->getFieldLevelIfInVillage($data['to'], '25, 26');
|
||||||
if ($database->getFieldLevel($data['to'],"".$i."t")=='25' OR $database->getFieldLevel($data['to'],"".$i."t")=='26'){
|
|
||||||
$residence = $database->getFieldLevel($data['to'],$i);
|
|
||||||
$i=40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//type of attack
|
//type of attack
|
||||||
if($dataarray[$data_num]['attack_type'] == 1){
|
if($dataarray[$data_num]['attack_type'] == 1){
|
||||||
$type = 1;
|
$type = 1;
|
||||||
@@ -1366,7 +1368,7 @@ class Automation {
|
|||||||
$def_wall = 1;
|
$def_wall = 1;
|
||||||
$att_tribe = $owntribe;
|
$att_tribe = $owntribe;
|
||||||
$def_tribe = $targettribe;
|
$def_tribe = $targettribe;
|
||||||
$residence = "0";
|
$residence = 0;
|
||||||
$attpop = $fromF['pop'];
|
$attpop = $fromF['pop'];
|
||||||
$defpop = 100;
|
$defpop = 100;
|
||||||
|
|
||||||
@@ -1485,7 +1487,10 @@ class Automation {
|
|||||||
$Defender['hero'] += $enforce2['hero'];
|
$Defender['hero'] += $enforce2['hero'];
|
||||||
if ($enforce2['hero']>0) {
|
if ($enforce2['hero']>0) {
|
||||||
$d++;
|
$d++;
|
||||||
$DefenderHero[$d] = $database->getVillageField($enforce2['from'],"owner");
|
if (!isset($villageOwners[$enforce2['from']])) {
|
||||||
|
$villageOwners[$enforce2['from']] = $database->getVillageField($enforce2['from'],"owner");
|
||||||
|
}
|
||||||
|
$DefenderHero[$d] = $villageOwners[$enforce2['from']];
|
||||||
}
|
}
|
||||||
for ($i=1;$i<=50;$i++) {
|
for ($i=1;$i<=50;$i++) {
|
||||||
$Defender['u'.$i]+= $enforce2['u'.$i];
|
$Defender['u'.$i]+= $enforce2['u'.$i];
|
||||||
@@ -1584,83 +1589,92 @@ class Automation {
|
|||||||
$database->modifyUnit($data['to'],array("hero"),array($owndead['hero']),array(0));
|
$database->modifyUnit($data['to'],array("hero"),array($owndead['hero']),array(0));
|
||||||
}
|
}
|
||||||
//kill other defence in village
|
//kill other defence in village
|
||||||
if(count($database->getEnforceVillage($data['to'],0)) > 0) {
|
foreach($database->getEnforceVillage($data['to'],0) as $enforce) {
|
||||||
foreach($database->getEnforceVillage($data['to'],0) as $enforce) {
|
$life=''; $notlife=''; $wrong='0';
|
||||||
$life=''; $notlife=''; $wrong='0';
|
if($enforce['from'] != 0){
|
||||||
if($enforce['from'] != 0){
|
if (!isset($villageOwners[$enforce['from']])) {
|
||||||
$tribe = $cachedUserData[$data['from']]["tribe"];
|
$villageOwners[$enforce['from']] = $database->getVillageField($enforce['from'],"owner");
|
||||||
}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 = [];
|
if (!isset($cachedUserData[$enforce['from']])) {
|
||||||
for ($i = $start; $i <= $end; $i++){ //($i=$start;$i<=($start+9);$i++) {
|
$cachedUserData[$enforce['from']] = $database->getUserArray($villageOwners[$enforce['from']], 1);
|
||||||
if($enforce['u'.$i]>'0'){
|
}
|
||||||
if (!isset($enforceModificationsById[$enforce['id']])) {
|
$tribe = $cachedUserData[$enforce['from']]["tribe"];
|
||||||
$enforceModificationsById[$enforce['id']] = [
|
}else{
|
||||||
'units' => [],
|
$tribe = 4;
|
||||||
'amounts' => [],
|
}
|
||||||
'modes' => []
|
$start = ($tribe-1)*10+1;
|
||||||
];
|
$end = ($tribe*10);
|
||||||
}
|
unset($dead);
|
||||||
$enforceModificationsById[$enforce['id']]['units'][] = $i;
|
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[$enforce['id']]['amounts'][] = round($battlepart[2]*$enforce['u'.$i]);
|
|
||||||
$enforceModificationsById[$enforce['id']]['modes'][] = 0;
|
$enforceModificationsById = [];
|
||||||
$dead[$i]=round($battlepart[2]*$enforce['u'.$i]);
|
for ($i = $start; $i <= $end; $i++){ //($i=$start;$i<=($start+9);$i++) {
|
||||||
$checkpoint=round($battlepart[2]*$enforce['u'.$i]);
|
if($enforce['u'.$i]>'0'){
|
||||||
$alldead[$i]+=$dead[$i];
|
if (!isset($enforceModificationsById[$enforce['id']])) {
|
||||||
if($checkpoint!=$enforce['u'.$i]){
|
$enforceModificationsById[$enforce['id']] = [
|
||||||
$wrong='1';
|
'units' => [],
|
||||||
}
|
'amounts' => [],
|
||||||
} else {
|
'modes' => []
|
||||||
$dead[$i]='0';
|
];
|
||||||
|
}
|
||||||
|
$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);
|
||||||
|
$alldead[$i]+=$dead[$i];
|
||||||
|
if (!isset($enforce['u'.$i])) {
|
||||||
|
$enforce['u'.$i] = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// modify enforce in DB
|
if($checkpoint!=$enforce['u'.$i]){
|
||||||
foreach ($enforceModificationsById as $enforceId => $enforceArray) {
|
|
||||||
$database->modifyEnforce( $enforceId, $enforceArray['units'], $enforceArray['amounts'], $enforceArray['modes']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($enforce['hero']>'0'){
|
|
||||||
$database->modifyEnforce($enforce['id'],"hero",$battlepart['deadheroref'][$enforce['id']],0);
|
|
||||||
$dead['hero']=$battlepart['deadheroref'][$enforce['id']];
|
|
||||||
$alldead['hero']+=$dead['hero'];
|
|
||||||
if($dead['hero']!=$enforce['hero']){
|
|
||||||
$wrong='1';
|
$wrong='1';
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$dead[$i]='0';
|
||||||
}
|
}
|
||||||
$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).''].'';
|
// modify enforce in DB
|
||||||
$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).''];
|
foreach ($enforceModificationsById as $enforceId => $enforceArray) {
|
||||||
$lifehero = $enforce['hero'];
|
$database->modifyEnforce( $enforceId, $enforceArray['units'], $enforceArray['amounts'], $enforceArray['modes']);
|
||||||
$notlifehero = $dead['hero'];
|
}
|
||||||
$totallife = $enforce['hero']+$life1;
|
|
||||||
$totalnotlife = $dead['hero']+$notlife1;
|
if($enforce['hero']>'0'){
|
||||||
$totalsend_att = $data['t1']+$data['t2']+$data['t3']+$data['t4']+$data['t5']+$data['t6']+$data['t7']+$data['t8']+$data['t9']+$data['t10']+$data['t11'];
|
$database->modifyEnforce($enforce['id'],"hero",$battlepart['deadheroref'][$enforce['id']],0);
|
||||||
$totaldead_att = $dead1+$dead2+$dead3+$dead4+$dead5+$dead6+$dead7+$dead8+$dead9+$dead10+$dead11;
|
$dead['hero']=$battlepart['deadheroref'][$enforce['id']];
|
||||||
//NEED TO SEND A RAPPORTAGE!!!
|
$alldead['hero']+=$dead['hero'];
|
||||||
$enforceOwner = [
|
if($dead['hero']!=$enforce['hero']){
|
||||||
'from' => $database->getVillageField($enforce['from'],"owner")
|
$wrong='1';
|
||||||
];
|
|
||||||
$data2 = ''.$enforceOwner['from'].','.$to['wref'].','.addslashes($to['name']).','.$tribe.','.$life.','.$notlife.','.$lifehero.','.$notlifehero.','.$enforce['from'].'';
|
|
||||||
if(!$scout) {
|
|
||||||
if($totalnotlife == 0){
|
|
||||||
$database->addNotice($enforceOwner['from'],$from['wref'],$ownally,15,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
|
||||||
}else if($totallife > $totalnotlife){
|
|
||||||
$database->addNotice($enforceOwner['from'],$from['wref'],$ownally,16,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
|
||||||
}else{
|
|
||||||
$database->addNotice($enforceOwner['from'],$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']); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$notlife= ''.$dead[$start].','.$dead[$start+1].','.$dead[$start+2].','.$dead[$start+3].','.$dead[$start+4].','.$dead[$start+5].','.$dead[$start+6].','.$dead[$start+7].','.$dead[$start+8].','.$dead[$start+9].'';
|
||||||
|
$notlife1 = $dead[$start]+$dead[$start+1]+$dead[$start+2]+$dead[$start+3]+$dead[$start+4]+$dead[$start+5]+$dead[$start+6]+$dead[$start+7]+$dead[$start+8]+$dead[$start+9];
|
||||||
|
$life= ''.$enforce['u'.$start.''].','.$enforce['u'.($start+1).''].','.$enforce['u'.($start+2).''].','.$enforce['u'.($start+3).''].','.$enforce['u'.($start+4).''].','.$enforce['u'.($start+5).''].','.$enforce['u'.($start+6).''].','.$enforce['u'.($start+7).''].','.$enforce['u'.($start+8).''].','.$enforce['u'.($start+9).''].'';
|
||||||
|
$life1 = $enforce['u'.$start.'']+$enforce['u'.($start+1).'']+$enforce['u'.($start+2).'']+$enforce['u'.($start+3).'']+$enforce['u'.($start+4).'']+$enforce['u'.($start+5).'']+$enforce['u'.($start+6).'']+$enforce['u'.($start+7).'']+$enforce['u'.($start+8).'']+$enforce['u'.($start+9).''];
|
||||||
|
$lifehero = $enforce['hero'];
|
||||||
|
$notlifehero = $dead['hero'];
|
||||||
|
$totallife = $enforce['hero']+$life1;
|
||||||
|
$totalnotlife = $dead['hero']+$notlife1;
|
||||||
|
$totalsend_att = $data['t1']+$data['t2']+$data['t3']+$data['t4']+$data['t5']+$data['t6']+$data['t7']+$data['t8']+$data['t9']+$data['t10']+$data['t11'];
|
||||||
|
$totaldead_att = $dead1+$dead2+$dead3+$dead4+$dead5+$dead6+$dead7+$dead8+$dead9+$dead10+$dead11;
|
||||||
|
//NEED TO SEND A RAPPORTAGE!!!
|
||||||
|
$enforceOwner = [
|
||||||
|
'from' => $database->getVillageField($enforce['from'],"owner")
|
||||||
|
];
|
||||||
|
$data2 = ''.$enforceOwner['from'].','.$to['wref'].','.addslashes($to['name']).','.$tribe.','.$life.','.$notlife.','.$lifehero.','.$notlifehero.','.$enforce['from'].'';
|
||||||
|
if(!$scout) {
|
||||||
|
if($totalnotlife == 0){
|
||||||
|
$database->addNotice($enforceOwner['from'],$from['wref'],$ownally,15,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
||||||
|
}else if($totallife > $totalnotlife){
|
||||||
|
$database->addNotice($enforceOwner['from'],$from['wref'],$ownally,16,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
||||||
|
}else{
|
||||||
|
$database->addNotice($enforceOwner['from'],$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'];
|
$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++) {
|
for ($i=1;$i<=50;$i++) {
|
||||||
|
|||||||
+29
-15
@@ -95,6 +95,11 @@ class Battle {
|
|||||||
private function getBattleHero($uid) {
|
private function getBattleHero($uid) {
|
||||||
global $database;
|
global $database;
|
||||||
$heroarray = $database->getHero($uid);
|
$heroarray = $database->getHero($uid);
|
||||||
|
|
||||||
|
if (!count($heroarray)) {
|
||||||
|
return array('heroid'=> 0, 'unit'=>'','atk'=>0,'di'=>0,'dc'=>0,'ob'=>0,'db'=>0,'health'=>0);
|
||||||
|
}
|
||||||
|
|
||||||
$herodata = $GLOBALS["h".$heroarray[0]['unit']];
|
$herodata = $GLOBALS["h".$heroarray[0]['unit']];
|
||||||
if(!isset($heroarray['health'])) $heroarray['health']=0;
|
if(!isset($heroarray['health'])) $heroarray['health']=0;
|
||||||
$h_atk = $herodata['atk'] + ($heroarray[0]['attack'] * $herodata['atkp']);
|
$h_atk = $herodata['atk'] + ($heroarray[0]['attack'] * $herodata['atkp']);
|
||||||
@@ -247,8 +252,7 @@ class Battle {
|
|||||||
$winner = false;
|
$winner = false;
|
||||||
// at 0 all partial results
|
// at 0 all partial results
|
||||||
$cap = $ap = $dp = $cdp = $rap = $rdp = 0;
|
$cap = $ap = $dp = $cdp = $rap = $rdp = 0;
|
||||||
|
|
||||||
|
|
||||||
$att_artefact = count($database->getOwnUniqueArtefactInfo2($AttackerID,3,3,0));
|
$att_artefact = count($database->getOwnUniqueArtefactInfo2($AttackerID,3,3,0));
|
||||||
$att_artefact1 = count($database->getOwnUniqueArtefactInfo2($AttackerWref,3,1,1));
|
$att_artefact1 = count($database->getOwnUniqueArtefactInfo2($AttackerWref,3,1,1));
|
||||||
$att_artefact2 = count($database->getOwnUniqueArtefactInfo2($AttackerID,3,2,0));
|
$att_artefact2 = count($database->getOwnUniqueArtefactInfo2($AttackerID,3,2,0));
|
||||||
@@ -300,11 +304,21 @@ class Battle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$DefendersAll = $database->getEnforceVillage($DefenderWref,0);
|
$DefendersAll = $database->getEnforceVillage($DefenderWref,0);
|
||||||
|
$villageOwners = [];
|
||||||
|
$userdataCache = [];
|
||||||
|
$villageOwners[$DefenderWref] = $database->getVillageField($DefenderWref,"owner");
|
||||||
|
|
||||||
if(!empty($DefendersAll) && $DefenderWref>0){
|
if(!empty($DefendersAll) && $DefenderWref>0){
|
||||||
foreach($DefendersAll as $defenders) {
|
foreach($DefendersAll as $defenders) {
|
||||||
for ($i=1;$i<=50;$i++) {$def_ab[$i]=0;}
|
for ($i=1;$i<=50;$i++) {$def_ab[$i]=0;}
|
||||||
$fromvillage = $defenders['from'];
|
$fromvillage = $defenders['from'];
|
||||||
$enforcetribe = $database->getUserField($database->getVillageField($fromvillage,"owner"),"tribe",0);
|
|
||||||
|
if (!isset($villageOwners[$fromvillage])) {
|
||||||
|
$villageOwners[$fromvillage] = $database->getVillageField($fromvillage,"owner");
|
||||||
|
$userdataCache[$fromvillage] = $database->getUserArray($villageOwners[$fromvillage], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$enforcetribe = $userdataCache[$fromvillage]["tribe"];
|
||||||
$ud=($enforcetribe-1)*10;
|
$ud=($enforcetribe-1)*10;
|
||||||
if($defenders['from']>0) { //don't check nature tribe
|
if($defenders['from']>0) { //don't check nature tribe
|
||||||
$armory = $database->getABTech($defenders['from']); // Armory level every village enforcement
|
$armory = $database->getABTech($defenders['from']); // Armory level every village enforcement
|
||||||
@@ -329,7 +343,7 @@ class Battle {
|
|||||||
$cdp+=$datadef['cdp'];
|
$cdp+=$datadef['cdp'];
|
||||||
$involve=$datadef['involve'];
|
$involve=$datadef['involve'];
|
||||||
}
|
}
|
||||||
$reinfowner = $database->getVillageField($fromvillage,"owner");
|
$reinfowner = $villageOwners[$fromvillage];
|
||||||
$defhero = $this->getBattleHero($reinfowner);
|
$defhero = $this->getBattleHero($reinfowner);
|
||||||
//calculate def hero from enforcement
|
//calculate def hero from enforcement
|
||||||
if($defenders['hero'] != 0){
|
if($defenders['hero'] != 0){
|
||||||
@@ -565,7 +579,7 @@ class Battle {
|
|||||||
$wctp = pow(($rap/$rdp),1.5);
|
$wctp = pow(($rap/$rdp),1.5);
|
||||||
$wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp;
|
$wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp;
|
||||||
$wctp *= $catp+($att_ab8/1.5);
|
$wctp *= $catp+($att_ab8/1.5);
|
||||||
$artowner = $database->getVillageField($DefenderWref,"owner");
|
$artowner = $villageOwners[$DefenderWref];
|
||||||
$bartefact = count($database->getOwnUniqueArtefactInfo2($artowner,1,3,0));
|
$bartefact = count($database->getOwnUniqueArtefactInfo2($artowner,1,3,0));
|
||||||
$bartefact1 = count($database->getOwnUniqueArtefactInfo2($DefenderWref,1,1,1));
|
$bartefact1 = count($database->getOwnUniqueArtefactInfo2($DefenderWref,1,1,1));
|
||||||
$bartefact2 = count($database->getOwnUniqueArtefactInfo2($artowner,1,2,0));
|
$bartefact2 = count($database->getOwnUniqueArtefactInfo2($artowner,1,2,0));
|
||||||
@@ -608,7 +622,7 @@ class Battle {
|
|||||||
$wctp = pow(($rap/$rdp),1.5);
|
$wctp = pow(($rap/$rdp),1.5);
|
||||||
$wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp;
|
$wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp;
|
||||||
$wctp *= ($ram/2) + ($att_ab7/1.5);
|
$wctp *= ($ram/2) + ($att_ab7/1.5);
|
||||||
$artowner = $database->getVillageField($DefenderWref,"owner");
|
$artowner = $villageOwners[$DefenderWref];
|
||||||
$bartefact = count($database->getOwnUniqueArtefactInfo2($artowner,1,3,0));
|
$bartefact = count($database->getOwnUniqueArtefactInfo2($artowner,1,3,0));
|
||||||
$bartefact1 = count($database->getOwnUniqueArtefactInfo2($DefenderWref,1,1,1));
|
$bartefact1 = count($database->getOwnUniqueArtefactInfo2($DefenderWref,1,1,1));
|
||||||
$bartefact2 = count($database->getOwnUniqueArtefactInfo2($artowner,1,2,0));
|
$bartefact2 = count($database->getOwnUniqueArtefactInfo2($artowner,1,2,0));
|
||||||
@@ -668,8 +682,7 @@ class Battle {
|
|||||||
if ($hero_health<=$damage_health or $damage_health>90){
|
if ($hero_health<=$damage_health or $damage_health>90){
|
||||||
//hero die
|
//hero die
|
||||||
$result['casualties_attacker']['11'] = 1;
|
$result['casualties_attacker']['11'] = 1;
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead`='1' where `heroid`=".(int) $hero_id);
|
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead` = 1, `health` = 0 where `heroid`=".(int) $hero_id);
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`='0' where `heroid`=".(int) $hero_id);
|
|
||||||
}else{
|
}else{
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`=`health`-".(int) $damage_health." where `heroid`=".(int) $hero_id);
|
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`=`health`-".(int) $damage_health." where `heroid`=".(int) $hero_id);
|
||||||
}
|
}
|
||||||
@@ -687,8 +700,7 @@ class Battle {
|
|||||||
if ($hero_health<=$damage_health or $damage_health>90){
|
if ($hero_health<=$damage_health or $damage_health>90){
|
||||||
//hero die
|
//hero die
|
||||||
$result['deadherodef'] = 1;
|
$result['deadherodef'] = 1;
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead`='1' where `heroid`=".(int) $hero_id);
|
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead` = 1, `health` = 0 where `heroid`=".(int) $hero_id);
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`='0' where `heroid`=".(int) $hero_id);
|
|
||||||
}else{
|
}else{
|
||||||
$result['deadherodef'] = 0;
|
$result['deadherodef'] = 0;
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`=`health`-".(int) $damage_health." where `heroid`=".(int) $hero_id);
|
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`=`health`-".(int) $damage_health." where `heroid`=".(int) $hero_id);
|
||||||
@@ -696,13 +708,16 @@ class Battle {
|
|||||||
}
|
}
|
||||||
unset($_result,$fdb,$hero_id,$hero_health,$damage_health);
|
unset($_result,$fdb,$hero_id,$hero_health,$damage_health);
|
||||||
|
|
||||||
$DefendersAll = $database->getEnforceVillage($DefenderWref,0);
|
|
||||||
if(!empty($DefendersAll)){
|
if(!empty($DefendersAll)){
|
||||||
|
$battleHeroesCache = [];
|
||||||
foreach($DefendersAll as $defenders) {
|
foreach($DefendersAll as $defenders) {
|
||||||
if($defenders['hero']>0) {
|
if($defenders['hero']>0) {
|
||||||
if(!empty($heroarray)) { reset($heroarray); }
|
if(!empty($heroarray)) { reset($heroarray); }
|
||||||
$Reinforcer = $database->getVillageField($defenders['from'],"owner");
|
if (!isset($villageOwners[$defenders['from']])) {
|
||||||
$heroarraydefender = $this->getBattleHero($Reinforcer);
|
$villageOwners[$defenders['from']] = $database->getVillageField($defenders['from'],"owner");
|
||||||
|
$battleHeroesCache[$defenders['from']] = $this->getBattleHero($villageOwners[$defenders['from']]);
|
||||||
|
}
|
||||||
|
$heroarraydefender = $battleHeroesCache[$defenders['from']];
|
||||||
$_result=mysqli_query($GLOBALS['link'],"select heroid, health from " . TB_PREFIX . "hero where `dead`='0' and `heroid`=".(int) $heroarraydefender['heroid']);
|
$_result=mysqli_query($GLOBALS['link'],"select heroid, health from " . TB_PREFIX . "hero where `dead`='0' and `heroid`=".(int) $heroarraydefender['heroid']);
|
||||||
$fdb = mysqli_fetch_array($_result);
|
$fdb = mysqli_fetch_array($_result);
|
||||||
$hero_id=(int) $fdb['heroid'];
|
$hero_id=(int) $fdb['heroid'];
|
||||||
@@ -711,8 +726,7 @@ class Battle {
|
|||||||
if ($hero_health<=$damage_health or $damage_health>90){
|
if ($hero_health<=$damage_health or $damage_health>90){
|
||||||
//hero die
|
//hero die
|
||||||
$result['deadheroref'][$defenders['id']] = 1;
|
$result['deadheroref'][$defenders['id']] = 1;
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead`='1' where `heroid`=".(int) $hero_id);
|
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead` = 1, `health` = 0 where `heroid`=".(int) $hero_id);
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`='0' where `heroid`=".(int) $hero_id);
|
|
||||||
}else{
|
}else{
|
||||||
$result['deadheroref'][$defenders['id']] = 0;
|
$result['deadheroref'][$defenders['id']] = 0;
|
||||||
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`=`health`-".(int) $damage_health." where `heroid`=".(int) $hero_id);
|
mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`=`health`-".(int) $damage_health." where `heroid`=".(int) $hero_id);
|
||||||
|
|||||||
+304
-8
@@ -2278,6 +2278,280 @@ class MYSQLi_DB implements IDbConnection {
|
|||||||
return mysqli_query($this->dblink,$q); }else{return false;}
|
return mysqli_query($this->dblink,$q); }else{return false;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFieldLevelIfInVillage($vid, $fieldType) {
|
||||||
|
$vid = (int) $vid;
|
||||||
|
|
||||||
|
// $fieldType can be both, integer and string, to be used in the IN statement,
|
||||||
|
// so we need to handle it correctly here
|
||||||
|
if (!Math::isInt($fieldType)) {
|
||||||
|
$fieldType = $this->escape($fieldType);
|
||||||
|
}
|
||||||
|
|
||||||
|
// please don't scream...
|
||||||
|
// with the current table structure, there really IS NOT another way
|
||||||
|
// (except for stored procedures, which we can't rely will be allowed on the server)
|
||||||
|
$result = mysqli_query($this->dblink,"
|
||||||
|
SELECT
|
||||||
|
IF(
|
||||||
|
f1t IN ($fieldType),
|
||||||
|
f1,
|
||||||
|
IF(
|
||||||
|
f2t IN ($fieldType),
|
||||||
|
f2,
|
||||||
|
IF(
|
||||||
|
f3t IN ($fieldType),
|
||||||
|
f3,
|
||||||
|
IF(
|
||||||
|
f4t IN ($fieldType),
|
||||||
|
f4,
|
||||||
|
IF(
|
||||||
|
f5t IN ($fieldType),
|
||||||
|
f5,
|
||||||
|
IF(
|
||||||
|
f6t IN ($fieldType),
|
||||||
|
f6,
|
||||||
|
IF(
|
||||||
|
f7t IN ($fieldType),
|
||||||
|
f7,
|
||||||
|
IF(
|
||||||
|
f8t IN ($fieldType),
|
||||||
|
f8,
|
||||||
|
IF(
|
||||||
|
f9t IN ($fieldType),
|
||||||
|
f9,
|
||||||
|
IF(
|
||||||
|
f10t IN ($fieldType),
|
||||||
|
f10,
|
||||||
|
IF(
|
||||||
|
f11t IN ($fieldType),
|
||||||
|
f11,
|
||||||
|
IF(
|
||||||
|
f12t IN ($fieldType),
|
||||||
|
f12,
|
||||||
|
IF(
|
||||||
|
f13t IN ($fieldType),
|
||||||
|
f13,
|
||||||
|
IF(
|
||||||
|
f14t IN ($fieldType),
|
||||||
|
f14,
|
||||||
|
IF(
|
||||||
|
f15t IN ($fieldType),
|
||||||
|
f15,
|
||||||
|
IF(
|
||||||
|
f16t IN ($fieldType),
|
||||||
|
f16,
|
||||||
|
IF(
|
||||||
|
f17t IN ($fieldType),
|
||||||
|
f17,
|
||||||
|
IF(
|
||||||
|
f18t IN ($fieldType),
|
||||||
|
f18,
|
||||||
|
IF(
|
||||||
|
f19t IN ($fieldType),
|
||||||
|
f19,
|
||||||
|
IF(
|
||||||
|
f20t IN ($fieldType),
|
||||||
|
f20,
|
||||||
|
IF(
|
||||||
|
f20t IN ($fieldType),
|
||||||
|
f20,
|
||||||
|
IF(
|
||||||
|
f21t IN ($fieldType),
|
||||||
|
f21,
|
||||||
|
IF(
|
||||||
|
f22t IN ($fieldType),
|
||||||
|
f22,
|
||||||
|
IF(
|
||||||
|
f23t IN ($fieldType),
|
||||||
|
f23,
|
||||||
|
IF(
|
||||||
|
f24t IN ($fieldType),
|
||||||
|
f24,
|
||||||
|
IF(
|
||||||
|
f25t IN ($fieldType),
|
||||||
|
f25,
|
||||||
|
IF(
|
||||||
|
f26t IN ($fieldType),
|
||||||
|
f26,
|
||||||
|
IF(
|
||||||
|
f27t IN ($fieldType),
|
||||||
|
f27,
|
||||||
|
IF(
|
||||||
|
f28t IN ($fieldType),
|
||||||
|
f28,
|
||||||
|
IF(
|
||||||
|
f29t IN ($fieldType),
|
||||||
|
f29,
|
||||||
|
IF(
|
||||||
|
f30t IN ($fieldType),
|
||||||
|
f30,
|
||||||
|
IF(
|
||||||
|
f31t IN ($fieldType),
|
||||||
|
f31,
|
||||||
|
IF(
|
||||||
|
f32t IN ($fieldType),
|
||||||
|
f32,
|
||||||
|
IF(
|
||||||
|
f33t IN ($fieldType),
|
||||||
|
f33,
|
||||||
|
IF(
|
||||||
|
f34t IN ($fieldType),
|
||||||
|
f34,
|
||||||
|
IF(
|
||||||
|
f35t IN ($fieldType),
|
||||||
|
f35,
|
||||||
|
IF(
|
||||||
|
f36t IN ($fieldType),
|
||||||
|
f36,
|
||||||
|
IF(
|
||||||
|
f37t IN ($fieldType),
|
||||||
|
f37,
|
||||||
|
IF(
|
||||||
|
f38t IN ($fieldType),
|
||||||
|
f38,
|
||||||
|
IF(
|
||||||
|
f39t IN ($fieldType),
|
||||||
|
f39,
|
||||||
|
IF(
|
||||||
|
f40t IN ($fieldType),
|
||||||
|
f40,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) as level
|
||||||
|
FROM
|
||||||
|
`s1_fdata`
|
||||||
|
WHERE
|
||||||
|
vref = $vid
|
||||||
|
AND
|
||||||
|
(f1t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f2t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f3t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f4t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f5t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f6t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f7t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f8t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f9t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f10t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f11t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f12t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f13t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f14t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f15t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f16t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f17t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f18t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f19t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f20t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f20t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f21t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f22t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f23t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f24t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f25t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f26t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f27t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f28t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f29t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f30t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f30t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f31t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f32t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f33t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f34t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f35t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f36t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f37t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f38t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f39t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f40t IN ($fieldType)
|
||||||
|
OR
|
||||||
|
f99 IN ($fieldType))
|
||||||
|
");
|
||||||
|
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
|
||||||
|
return $row['level'];
|
||||||
|
}
|
||||||
|
|
||||||
function getFieldLevel($vid, $field) {
|
function getFieldLevel($vid, $field) {
|
||||||
list($vid, $field) = $this->escape_input((int) $vid, $field);
|
list($vid, $field) = $this->escape_input((int) $vid, $field);
|
||||||
|
|
||||||
@@ -4144,24 +4418,23 @@ class MYSQLi_DB implements IDbConnection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function modifyEnforce($id, $unit, $amt, $mode) {
|
function modifyEnforce($id, $unit, $amt, $mode) {
|
||||||
list($id, $unit, $amt, $mode) = $this->escape_input((int) $id, $unit, (int) $amt, $mode);
|
$id = (int) $id;
|
||||||
|
|
||||||
if($unit != 'hero') { $unit = 'u' . $unit; }
|
|
||||||
|
|
||||||
// prepare pairing array, even if we're not passing arrays, so we can use the same logic
|
// prepare pairing array, even if we're not passing arrays, so we can use the same logic
|
||||||
$pairs = [];
|
$pairs = [];
|
||||||
if (!is_array($unit)) {
|
if (!is_array($unit)) {
|
||||||
$unit = [$unit];
|
$unit = [$unit];
|
||||||
$amt = [$amt];
|
$amt = [(int) $amt];
|
||||||
$mode = [$mode];
|
$mode = [(int) $mode];
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($unit as $index => $unitType) {
|
foreach ($unit as $index => $unitType) {
|
||||||
$pairs[] = $unitType . ' = ' . $unitType . (!$mode[$index] ? ' - ' : ' + ') . $amt[$index];
|
$unitType = ($unitType != 'hero' ? 'u' . $this->escape($unitType) : $unitType);
|
||||||
|
$pairs[] = $unitType . ' = ' . $unitType . (!(int) $mode[$index] ? ' - ' : ' + ') . (int) $amt[$index];
|
||||||
}
|
}
|
||||||
|
|
||||||
$q = "UPDATE " . TB_PREFIX . "enforcement SET ".implode(', ', $pairs)." WHERE id = $id";
|
$q = "UPDATE " . TB_PREFIX . "enforcement SET ".implode(', ', $pairs)." WHERE id = $id";
|
||||||
mysqli_query($this->dblink,$q);
|
mysqli_query($this->dblink,$q) OR DIE (mysqli_error($this->dblink));
|
||||||
}
|
}
|
||||||
|
|
||||||
function getEnforceArray($id, $mode) {
|
function getEnforceArray($id, $mode) {
|
||||||
@@ -4713,7 +4986,8 @@ class MYSQLi_DB implements IDbConnection {
|
|||||||
$result = mysqli_query($this->dblink,$q);
|
$result = mysqli_query($this->dblink,$q);
|
||||||
return mysqli_fetch_array($result);
|
return mysqli_fetch_array($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: wtf, 2 same functionalities with 2 differently named functions??
|
||||||
function getOwnArtefactInfo2($vref) {
|
function getOwnArtefactInfo2($vref) {
|
||||||
list($vref) = $this->escape_input((int) $vref);
|
list($vref) = $this->escape_input((int) $vref);
|
||||||
|
|
||||||
@@ -4730,6 +5004,28 @@ class MYSQLi_DB implements IDbConnection {
|
|||||||
return $this->mysqli_fetch_all($result);
|
return $this->mysqli_fetch_all($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getOwnArtefactCount($uid, $type, $size, $mode) {
|
||||||
|
// $type and $size can both be either a single integer or a list of integer to be used in an IN statement
|
||||||
|
if (!Math::isInt($type)) {
|
||||||
|
$type = $this->escape($type);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Math::isInt($size)) {
|
||||||
|
$size = $this->escape($size);
|
||||||
|
}
|
||||||
|
|
||||||
|
$uid = (int) $uid;
|
||||||
|
$mode = (int) $mode;
|
||||||
|
|
||||||
|
if (!$mode) {
|
||||||
|
$q = "SELECT Count(*) as Total FROM " . TB_PREFIX . "artefacts WHERE owner = $id AND active = 1 AND type IN($type) AND size IN($size)";
|
||||||
|
}else{
|
||||||
|
$q = "SELECT Count(*) as Total FROM " . TB_PREFIX . "artefacts WHERE vref = $id AND active = 1 AND type IN($type) AND size IN($size)";
|
||||||
|
}
|
||||||
|
$result = mysqli_fetch_array(mysqli_query($this->dblink,$q), MYSQLI_ASSOC);
|
||||||
|
return $result['Total'];
|
||||||
|
}
|
||||||
|
|
||||||
function getOwnArtefactInfoByType($vref, $type) {
|
function getOwnArtefactInfoByType($vref, $type) {
|
||||||
list($vref, $type) = $this->escape_input($vref, $type);
|
list($vref, $type) = $this->escape_input($vref, $type);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user