This commit is contained in:
novgorodschi catalin
2026-07-28 19:06:44 +03:00
parent a8832847d8
commit 4809626e40
3 changed files with 47 additions and 4 deletions
@@ -159,6 +159,27 @@ trait AutomationMarket {
if($this->getTypeLevel(28, $from) != 0) {
$maxcarry2 *= $bid28[$this->getTypeLevel(28, $from)]['attri'] / 100;
}
// Bonusul de alianta "Commerce".
//
// BUG REPARAT: trimiterea repetata (2x / 3x) e executata de aici,
// nu de Market.php, iar aici bonusul lipsea. Prima livrare pleca cu
// capacitatea marita (calculata in Market.php), dar repetarea o
// recalcula fara bonus, cerea mai multi negustori decat exista si
// se oprea in tacere.
//
// Se ia dupa PROPRIETARUL satului, nu dupa sesiune: aici rulam din
// automatizare, unde nu exista un jucator conectat.
if (class_exists('AllianceBonus') && AllianceBonus::enabled()) {
$ownerFrom = (int) $database->getVillageField($from, 'owner');
if ($ownerFrom > 0) {
$maxcarry2 *= AllianceBonus::multiplier($ownerFrom, AllianceBonus::COMMERCE);
}
}
$maxcarry2 = floor($maxcarry2);
$resource = [$wtrans, $ctrans, $itrans, $crtrans];
$reqMerc = ceil((array_sum($resource) - 0.1) / $maxcarry2);
@@ -48,7 +48,7 @@ trait AutomationPlayerStatistics
$now = time();
$res = mysqli_query($database->dblink,
"SELECT MAX(recorded_at) AS last FROM " . $table);
"SELECT MAX(recorded_at) AS `last` FROM " . $table);
$row = $res ? mysqli_fetch_assoc($res) : null;
$last = $row ? (int) $row['last'] : 0;
@@ -78,7 +78,7 @@ trait AutomationPlayerStatistics
// rang, populatie, sate si puncte de lupta, per jucator
$q = "SELECT
u.id AS uid,
u.oldrank AS rank,
u.oldrank AS `rank`,
COALESCE(SUM(v.pop), 0) AS population,
COUNT(CASE WHEN v.type != 99 THEN v.wref END) AS villages,
u.apall AS attack_points,
@@ -91,6 +91,12 @@ trait AutomationPlayerStatistics
$res = mysqli_query($database->dblink, $q);
if (!$res) {
// Fara asta, o interogare esuata lasa tabela goala la nesfarsit
// fara niciun semn. Exact ce s-a intamplat cu aliasul `rank`, care
// e cuvant rezervat din MySQL 8.0 si trebuie protejat.
error_log('[TravianZ] player statistics snapshot failed: '
. mysqli_error($database->dblink));
return;
}
@@ -125,11 +131,18 @@ trait AutomationPlayerStatistics
}
foreach (array_chunk($values, 200) as $chunk) {
mysqli_query($database->dblink,
$ok = mysqli_query($database->dblink,
"INSERT IGNORE INTO " . $table . "
(uid, recorded_at, `rank`, population, villages,
troop_count, troop_upkeep, attack_points, defence_points)
VALUES " . implode(',', $chunk));
if (!$ok) {
error_log('[TravianZ] player statistics insert failed: '
. mysqli_error($database->dblink));
return;
}
}
}
+10 -1
View File
@@ -184,8 +184,17 @@ class Market
// Bonusul de alianta "Commerce". Se inmulteste cu biroul comercial, ca
// in T4: 750 de baza x 2.2 (Commerce 4) x 5 (birou 20) = 8250.
// Se ia dupa PROPRIETARUL satului, nu dupa sesiune, ca sa dea acelasi
// rezultat si cand codul ruleaza in alt context (sitter, automatizare).
// Calea de repetare din AutomationMarket foloseste aceeasi regula.
if (class_exists('AllianceBonus') && AllianceBonus::enabled()) {
$this->maxcarry *= AllianceBonus::multiplier((int) $session->uid, AllianceBonus::COMMERCE);
$carryOwner = isset($village->wid)
? (int) $database->getVillageField($village->wid, 'owner')
: (int) $session->uid;
if ($carryOwner > 0) {
$this->maxcarry *= AllianceBonus::multiplier($carryOwner, AllianceBonus::COMMERCE);
}
}
$this->maxcarry = floor($this->maxcarry);