mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-06-28 00:24:23 +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:
+14
-11
@@ -1236,7 +1236,7 @@ class Automation {
|
||||
$defpop = $toF['pop'];
|
||||
$def_ab=array();
|
||||
//get level of palace or residence
|
||||
$residence = $database->getFieldLevelIfInVillage($data['to'], '25, 26');
|
||||
$residence = $database->getFieldLevelInVillage($data['to'], '25, 26');
|
||||
|
||||
//type of attack
|
||||
if($dataarray[$data_num]['attack_type'] == 1){
|
||||
@@ -1467,7 +1467,7 @@ class Automation {
|
||||
$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
|
||||
$unitssend_att = ''.$data['t1'].','.$data['t2'].','.$data['t3'].','.$data['t4'].','.$data['t5'].','.$data['t6'].','.$data['t7'].','.$data['t8'].','.$data['t9'].','.$data['t10'].'';
|
||||
@@ -1486,7 +1486,8 @@ class Automation {
|
||||
$DefenderHero[$d]=$DefenderID;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// our reinforcements count could have changed at this point, thus the re-select
|
||||
$enforcementarray2 = $database->getEnforceVillage($data['to'],0);
|
||||
if(count($enforcementarray2) > 0) {
|
||||
foreach($enforcementarray2 as $enforce2) {
|
||||
@@ -1595,7 +1596,9 @@ class Automation {
|
||||
$database->modifyUnit($data['to'],array("hero"),array($owndead['hero']),array(0));
|
||||
}
|
||||
//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';
|
||||
if($enforce['from'] != 0){
|
||||
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'];
|
||||
$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 (!isset($villageOwners[$enforce['from']])) {
|
||||
$villageOwners[$enforce['from']] = $database->getVillageField( $enforce['from'], "owner" );
|
||||
}
|
||||
$data2 = ''.$villageOwners[$enforce['from']].','.$to['wref'].','.addslashes($to['name']).','.$tribe.','.$life.','.$notlife.','.$lifehero.','.$notlifehero.','.$enforce['from'].'';
|
||||
if(empty($scout)) {
|
||||
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){
|
||||
$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{
|
||||
$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.
|
||||
if($wrong=='0'){ $database->deleteReinf($enforce['id']); }
|
||||
|
||||
@@ -238,7 +238,7 @@ class Battle {
|
||||
}
|
||||
|
||||
//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;
|
||||
|
||||
// Define the array, with the units
|
||||
@@ -303,10 +303,11 @@ class Battle {
|
||||
$cdp *= $defenderhero['db'];
|
||||
}
|
||||
}
|
||||
$DefendersAll = $database->getEnforceVillage($DefenderWref,0);
|
||||
$villageOwners = [];
|
||||
$userdataCache = [];
|
||||
$villageOwners[$DefenderWref] = $database->getVillageField($DefenderWref,"owner");
|
||||
$DefendersAll = (!is_null($defReinforcements) ? $database->getEnforceVillage($DefenderWref,0) : $defReinforcements);
|
||||
|
||||
if (!isset($villageOwners[$DefenderWref])) {
|
||||
$villageOwners[ $DefenderWref ] = $database->getVillageField( $DefenderWref, "owner" );
|
||||
}
|
||||
|
||||
if(!empty($DefendersAll) && $DefenderWref>0){
|
||||
foreach($DefendersAll as $defenders) {
|
||||
|
||||
@@ -2307,7 +2307,7 @@ class MYSQLi_DB implements IDbConnection {
|
||||
return mysqli_query($this->dblink,$q); }else{return false;}
|
||||
}
|
||||
|
||||
function getFieldLevelIfInVillage($vid, $fieldType) {
|
||||
function getFieldLevelInVillage($vid, $fieldType) {
|
||||
$vid = (int) $vid;
|
||||
|
||||
// $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...
|
||||
// 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,"
|
||||
SELECT
|
||||
IF(
|
||||
|
||||
Reference in New Issue
Block a user