mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-08-23 11:37:14 +00:00
refactor: more caching where possible
This also fixes "Multihunter" being stated as the one attacking reinforcements in villages during battle (now stores real attacker ID).
This commit is contained in:
+13
-10
@@ -1236,7 +1236,7 @@ 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
|
||||||
$residence = $database->getFieldLevelIfInVillage($data['to'], '25, 26');
|
$residence = $database->getFieldLevelInVillage($data['to'], '25, 26');
|
||||||
|
|
||||||
//type of attack
|
//type of attack
|
||||||
if($dataarray[$data_num]['attack_type'] == 1){
|
if($dataarray[$data_num]['attack_type'] == 1){
|
||||||
@@ -1467,7 +1467,7 @@ class Automation {
|
|||||||
$walllevel = 0;
|
$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);
|
$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, $villageOwners, $cachedUserData);
|
||||||
|
|
||||||
//units attack string for battleraport
|
//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'].'';
|
$unitssend_att = ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].'';
|
||||||
@@ -1487,6 +1487,7 @@ class Automation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// our reinforcements count could have changed at this point, thus the re-select
|
||||||
$enforcementarray2 = $database->getEnforceVillage($data['to'],0);
|
$enforcementarray2 = $database->getEnforceVillage($data['to'],0);
|
||||||
if(count($enforcementarray2) > 0) {
|
if(count($enforcementarray2) > 0) {
|
||||||
foreach($enforcementarray2 as $enforce2) {
|
foreach($enforcementarray2 as $enforce2) {
|
||||||
@@ -1595,7 +1596,9 @@ 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
|
||||||
foreach($database->getEnforceVillage($data['to'],0) as $enforce) {
|
// ... once again, units could have changed, so we need to reselect
|
||||||
|
$enforcementarray3 = $database->getEnforceVillage($data['to'],0);
|
||||||
|
foreach ($enforcementarray3 as $enforce) {
|
||||||
$life=''; $notlife=''; $wrong='0';
|
$life=''; $notlife=''; $wrong='0';
|
||||||
if($enforce['from'] != 0){
|
if($enforce['from'] != 0){
|
||||||
if (!isset($villageOwners[$enforce['from']])) {
|
if (!isset($villageOwners[$enforce['from']])) {
|
||||||
@@ -1669,17 +1672,17 @@ class Automation {
|
|||||||
$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'];
|
||||||
$totaldead_att = $dead1+$dead2+$dead3+$dead4+$dead5+$dead6+$dead7+$dead8+$dead9+$dead10+$dead11;
|
$totaldead_att = $dead1+$dead2+$dead3+$dead4+$dead5+$dead6+$dead7+$dead8+$dead9+$dead10+$dead11;
|
||||||
//NEED TO SEND A RAPPORTAGE!!!
|
//NEED TO SEND A RAPPORTAGE!!!
|
||||||
$enforceOwner = [
|
if (!isset($villageOwners[$enforce['from']])) {
|
||||||
'from' => $database->getVillageField($enforce['from'],"owner")
|
$villageOwners[$enforce['from']] = $database->getVillageField( $enforce['from'], "owner" );
|
||||||
];
|
}
|
||||||
$data2 = ''.$enforceOwner['from'].','.$to['wref'].','.addslashes($to['name']).','.$tribe.','.$life.','.$notlife.','.$lifehero.','.$notlifehero.','.$enforce['from'].'';
|
$data2 = ''.$villageOwners[$enforce['from']].','.$to['wref'].','.addslashes($to['name']).','.$tribe.','.$life.','.$notlife.','.$lifehero.','.$notlifehero.','.$enforce['from'].'';
|
||||||
if(empty($scout)) {
|
if(empty($scout)) {
|
||||||
if($totalnotlife == 0){
|
if($totalnotlife == 0){
|
||||||
$database->addNotice($enforceOwner['from'],$from['wref'],$ownally,15,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
$database->addNotice($villageOwners[$enforce['from']],$from['wref'],$ownally,15,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
||||||
}else if($totallife > $totalnotlife){
|
}else if($totallife > $totalnotlife){
|
||||||
$database->addNotice($enforceOwner['from'],$from['wref'],$ownally,16,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
$database->addNotice($villageOwners[$enforce['from']],$from['wref'],$ownally,16,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
||||||
}else{
|
}else{
|
||||||
$database->addNotice($enforceOwner['from'],$from['wref'],$ownally,17,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
$database->addNotice($villageOwners[$enforce['from']],$from['wref'],$ownally,17,'Reinforcement in '.addslashes($to['name']).' was attacked',$data2,$AttackArrivalTime);
|
||||||
}
|
}
|
||||||
//delete reinf sting when its killed all.
|
//delete reinf sting when its killed all.
|
||||||
if($wrong=='0'){ $database->deleteReinf($enforce['id']); }
|
if($wrong=='0'){ $database->deleteReinf($enforce['id']); }
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ class Battle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//1 raid 0 normal
|
//1 raid 0 normal
|
||||||
function 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,$offhero,$hero_strenght,$deffhero,$AttackerID,$DefenderID,$AttackerWref,$DefenderWref,$conqureby) {
|
function 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,$offhero,$hero_strenght,$deffhero,$AttackerID,$DefenderID,$AttackerWref,$DefenderWref,$conqureby, $defReinforcements = null, $villageOwners = array(), $userdataCache = array()) {
|
||||||
global $bid34,$bid35,$database;
|
global $bid34,$bid35,$database;
|
||||||
|
|
||||||
// Define the array, with the units
|
// Define the array, with the units
|
||||||
@@ -303,10 +303,11 @@ class Battle {
|
|||||||
$cdp *= $defenderhero['db'];
|
$cdp *= $defenderhero['db'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$DefendersAll = $database->getEnforceVillage($DefenderWref,0);
|
$DefendersAll = (!is_null($defReinforcements) ? $database->getEnforceVillage($DefenderWref,0) : $defReinforcements);
|
||||||
$villageOwners = [];
|
|
||||||
$userdataCache = [];
|
if (!isset($villageOwners[$DefenderWref])) {
|
||||||
$villageOwners[$DefenderWref] = $database->getVillageField($DefenderWref,"owner");
|
$villageOwners[ $DefenderWref ] = $database->getVillageField( $DefenderWref, "owner" );
|
||||||
|
}
|
||||||
|
|
||||||
if(!empty($DefendersAll) && $DefenderWref>0){
|
if(!empty($DefendersAll) && $DefenderWref>0){
|
||||||
foreach($DefendersAll as $defenders) {
|
foreach($DefendersAll as $defenders) {
|
||||||
|
|||||||
@@ -2307,7 +2307,7 @@ 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) {
|
function getFieldLevelInVillage($vid, $fieldType) {
|
||||||
$vid = (int) $vid;
|
$vid = (int) $vid;
|
||||||
|
|
||||||
// $fieldType can be both, integer and string, to be used in the IN statement,
|
// $fieldType can be both, integer and string, to be used in the IN statement,
|
||||||
@@ -2318,7 +2318,7 @@ class MYSQLi_DB implements IDbConnection {
|
|||||||
|
|
||||||
// please don't scream...
|
// please don't scream...
|
||||||
// with the current table structure, there really IS NOT another way
|
// 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)
|
// (except for stored procedures, which we can't rely on to be allowed on the server)
|
||||||
$result = mysqli_query($this->dblink,"
|
$result = mysqli_query($this->dblink,"
|
||||||
SELECT
|
SELECT
|
||||||
IF(
|
IF(
|
||||||
|
|||||||
Reference in New Issue
Block a user