diff --git a/GameEngine/Automation.php b/GameEngine/Automation.php index 3999df7b..840ca60b 100755 --- a/GameEngine/Automation.php +++ b/GameEngine/Automation.php @@ -1162,8 +1162,15 @@ class Automation { 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']; } } @@ -1227,13 +1234,8 @@ class Automation { $defpop = $toF['pop']; $def_ab=array(); //get level of palace or residence - for ($i=19; $i<40; $i++){ - if ($database->getFieldLevel($data['to'],"".$i."t")=='25' OR $database->getFieldLevel($data['to'],"".$i."t")=='26'){ - $residence = $database->getFieldLevel($data['to'],$i); - $i=40; - } - } - + $residence = $database->getFieldLevelIfInVillage($data['to'], '25, 26'); + //type of attack if($dataarray[$data_num]['attack_type'] == 1){ $type = 1; @@ -1366,7 +1368,7 @@ class Automation { $def_wall = 1; $att_tribe = $owntribe; $def_tribe = $targettribe; - $residence = "0"; + $residence = 0; $attpop = $fromF['pop']; $defpop = 100; @@ -1485,7 +1487,10 @@ class Automation { $Defender['hero'] += $enforce2['hero']; if ($enforce2['hero']>0) { $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++) { $Defender['u'.$i]+= $enforce2['u'.$i]; @@ -1584,83 +1589,92 @@ class Automation { $database->modifyUnit($data['to'],array("hero"),array($owndead['hero']),array(0)); } //kill other defence in village - if(count($database->getEnforceVillage($data['to'],0)) > 0) { - foreach($database->getEnforceVillage($data['to'],0) as $enforce) { - $life=''; $notlife=''; $wrong='0'; - if($enforce['from'] != 0){ - $tribe = $cachedUserData[$data['from']]["tribe"]; - }else{ - $tribe = 4; + foreach($database->getEnforceVillage($data['to'],0) as $enforce) { + $life=''; $notlife=''; $wrong='0'; + if($enforce['from'] != 0){ + if (!isset($villageOwners[$enforce['from']])) { + $villageOwners[$enforce['from']] = $database->getVillageField($enforce['from'],"owner"); } - $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'][] = round($battlepart[2]*$enforce['u'.$i]); - $enforceModificationsById[$enforce['id']]['modes'][] = 0; - $dead[$i]=round($battlepart[2]*$enforce['u'.$i]); - $checkpoint=round($battlepart[2]*$enforce['u'.$i]); - $alldead[$i]+=$dead[$i]; - if($checkpoint!=$enforce['u'.$i]){ - $wrong='1'; - } - } else { - $dead[$i]='0'; + if (!isset($cachedUserData[$enforce['from']])) { + $cachedUserData[$enforce['from']] = $database->getUserArray($villageOwners[$enforce['from']], 1); + } + $tribe = $cachedUserData[$enforce['from']]["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); + $alldead[$i]+=$dead[$i]; + if (!isset($enforce['u'.$i])) { + $enforce['u'.$i] = 0; } - } - // modify enforce in DB - 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']){ + if($checkpoint!=$enforce['u'.$i]){ $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).''].''; - $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']); } + } + + // modify enforce in DB + 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'; } } + $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']; for ($i=1;$i<=50;$i++) { diff --git a/GameEngine/Battle.php b/GameEngine/Battle.php index d0723118..3ea6c7e2 100755 --- a/GameEngine/Battle.php +++ b/GameEngine/Battle.php @@ -95,6 +95,11 @@ class Battle { private function getBattleHero($uid) { global $database; $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']]; if(!isset($heroarray['health'])) $heroarray['health']=0; $h_atk = $herodata['atk'] + ($heroarray[0]['attack'] * $herodata['atkp']); @@ -247,8 +252,7 @@ class Battle { $winner = false; // at 0 all partial results $cap = $ap = $dp = $cdp = $rap = $rdp = 0; - - + $att_artefact = count($database->getOwnUniqueArtefactInfo2($AttackerID,3,3,0)); $att_artefact1 = count($database->getOwnUniqueArtefactInfo2($AttackerWref,3,1,1)); $att_artefact2 = count($database->getOwnUniqueArtefactInfo2($AttackerID,3,2,0)); @@ -300,11 +304,21 @@ class Battle { } } $DefendersAll = $database->getEnforceVillage($DefenderWref,0); + $villageOwners = []; + $userdataCache = []; + $villageOwners[$DefenderWref] = $database->getVillageField($DefenderWref,"owner"); + if(!empty($DefendersAll) && $DefenderWref>0){ foreach($DefendersAll as $defenders) { for ($i=1;$i<=50;$i++) {$def_ab[$i]=0;} $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; if($defenders['from']>0) { //don't check nature tribe $armory = $database->getABTech($defenders['from']); // Armory level every village enforcement @@ -329,7 +343,7 @@ class Battle { $cdp+=$datadef['cdp']; $involve=$datadef['involve']; } - $reinfowner = $database->getVillageField($fromvillage,"owner"); + $reinfowner = $villageOwners[$fromvillage]; $defhero = $this->getBattleHero($reinfowner); //calculate def hero from enforcement if($defenders['hero'] != 0){ @@ -565,7 +579,7 @@ class Battle { $wctp = pow(($rap/$rdp),1.5); $wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp; $wctp *= $catp+($att_ab8/1.5); - $artowner = $database->getVillageField($DefenderWref,"owner"); + $artowner = $villageOwners[$DefenderWref]; $bartefact = count($database->getOwnUniqueArtefactInfo2($artowner,1,3,0)); $bartefact1 = count($database->getOwnUniqueArtefactInfo2($DefenderWref,1,1,1)); $bartefact2 = count($database->getOwnUniqueArtefactInfo2($artowner,1,2,0)); @@ -608,7 +622,7 @@ class Battle { $wctp = pow(($rap/$rdp),1.5); $wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp; $wctp *= ($ram/2) + ($att_ab7/1.5); - $artowner = $database->getVillageField($DefenderWref,"owner"); + $artowner = $villageOwners[$DefenderWref]; $bartefact = count($database->getOwnUniqueArtefactInfo2($artowner,1,3,0)); $bartefact1 = count($database->getOwnUniqueArtefactInfo2($DefenderWref,1,1,1)); $bartefact2 = count($database->getOwnUniqueArtefactInfo2($artowner,1,2,0)); @@ -668,8 +682,7 @@ class Battle { if ($hero_health<=$damage_health or $damage_health>90){ //hero die $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 `health`='0' where `heroid`=".(int) $hero_id); + mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead` = 1, `health` = 0 where `heroid`=".(int) $hero_id); }else{ 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){ //hero die $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 `health`='0' where `heroid`=".(int) $hero_id); + mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead` = 1, `health` = 0 where `heroid`=".(int) $hero_id); }else{ $result['deadherodef'] = 0; 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); - $DefendersAll = $database->getEnforceVillage($DefenderWref,0); if(!empty($DefendersAll)){ + $battleHeroesCache = []; foreach($DefendersAll as $defenders) { if($defenders['hero']>0) { if(!empty($heroarray)) { reset($heroarray); } - $Reinforcer = $database->getVillageField($defenders['from'],"owner"); - $heroarraydefender = $this->getBattleHero($Reinforcer); + if (!isset($villageOwners[$defenders['from']])) { + $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']); $fdb = mysqli_fetch_array($_result); $hero_id=(int) $fdb['heroid']; @@ -711,8 +726,7 @@ class Battle { if ($hero_health<=$damage_health or $damage_health>90){ //hero die $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 `health`='0' where `heroid`=".(int) $hero_id); + mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `dead` = 1, `health` = 0 where `heroid`=".(int) $hero_id); }else{ $result['deadheroref'][$defenders['id']] = 0; mysqli_query($GLOBALS['link'],"update " . TB_PREFIX . "hero set `health`=`health`-".(int) $damage_health." where `heroid`=".(int) $hero_id); diff --git a/GameEngine/Database.php b/GameEngine/Database.php index ee714706..a62a464d 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -2278,6 +2278,280 @@ class MYSQLi_DB implements IDbConnection { 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) { list($vid, $field) = $this->escape_input((int) $vid, $field); @@ -4144,24 +4418,23 @@ class MYSQLi_DB implements IDbConnection { } function modifyEnforce($id, $unit, $amt, $mode) { - list($id, $unit, $amt, $mode) = $this->escape_input((int) $id, $unit, (int) $amt, $mode); - - if($unit != 'hero') { $unit = 'u' . $unit; } + $id = (int) $id; // prepare pairing array, even if we're not passing arrays, so we can use the same logic $pairs = []; if (!is_array($unit)) { $unit = [$unit]; - $amt = [$amt]; - $mode = [$mode]; + $amt = [(int) $amt]; + $mode = [(int) $mode]; } 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"; - mysqli_query($this->dblink,$q); + mysqli_query($this->dblink,$q) OR DIE (mysqli_error($this->dblink)); } function getEnforceArray($id, $mode) { @@ -4713,7 +4986,8 @@ class MYSQLi_DB implements IDbConnection { $result = mysqli_query($this->dblink,$q); return mysqli_fetch_array($result); } - + + // TODO: wtf, 2 same functionalities with 2 differently named functions?? function getOwnArtefactInfo2($vref) { list($vref) = $this->escape_input((int) $vref); @@ -4730,6 +5004,28 @@ class MYSQLi_DB implements IDbConnection { 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) { list($vref, $type) = $this->escape_input($vref, $type);