mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-09-23 18:36:38 +08:00
fix
This commit is contained in:
@@ -159,6 +159,27 @@ trait AutomationMarket {
|
|||||||
if($this->getTypeLevel(28, $from) != 0) {
|
if($this->getTypeLevel(28, $from) != 0) {
|
||||||
$maxcarry2 *= $bid28[$this->getTypeLevel(28, $from)]['attri'] / 100;
|
$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];
|
$resource = [$wtrans, $ctrans, $itrans, $crtrans];
|
||||||
$reqMerc = ceil((array_sum($resource) - 0.1) / $maxcarry2);
|
$reqMerc = ceil((array_sum($resource) - 0.1) / $maxcarry2);
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ trait AutomationPlayerStatistics
|
|||||||
$now = time();
|
$now = time();
|
||||||
|
|
||||||
$res = mysqli_query($database->dblink,
|
$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;
|
$row = $res ? mysqli_fetch_assoc($res) : null;
|
||||||
$last = $row ? (int) $row['last'] : 0;
|
$last = $row ? (int) $row['last'] : 0;
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ trait AutomationPlayerStatistics
|
|||||||
// rang, populatie, sate si puncte de lupta, per jucator
|
// rang, populatie, sate si puncte de lupta, per jucator
|
||||||
$q = "SELECT
|
$q = "SELECT
|
||||||
u.id AS uid,
|
u.id AS uid,
|
||||||
u.oldrank AS rank,
|
u.oldrank AS `rank`,
|
||||||
COALESCE(SUM(v.pop), 0) AS population,
|
COALESCE(SUM(v.pop), 0) AS population,
|
||||||
COUNT(CASE WHEN v.type != 99 THEN v.wref END) AS villages,
|
COUNT(CASE WHEN v.type != 99 THEN v.wref END) AS villages,
|
||||||
u.apall AS attack_points,
|
u.apall AS attack_points,
|
||||||
@@ -91,6 +91,12 @@ trait AutomationPlayerStatistics
|
|||||||
$res = mysqli_query($database->dblink, $q);
|
$res = mysqli_query($database->dblink, $q);
|
||||||
|
|
||||||
if (!$res) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,11 +131,18 @@ trait AutomationPlayerStatistics
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach (array_chunk($values, 200) as $chunk) {
|
foreach (array_chunk($values, 200) as $chunk) {
|
||||||
mysqli_query($database->dblink,
|
$ok = mysqli_query($database->dblink,
|
||||||
"INSERT IGNORE INTO " . $table . "
|
"INSERT IGNORE INTO " . $table . "
|
||||||
(uid, recorded_at, `rank`, population, villages,
|
(uid, recorded_at, `rank`, population, villages,
|
||||||
troop_count, troop_upkeep, attack_points, defence_points)
|
troop_count, troop_upkeep, attack_points, defence_points)
|
||||||
VALUES " . implode(',', $chunk));
|
VALUES " . implode(',', $chunk));
|
||||||
|
|
||||||
|
if (!$ok) {
|
||||||
|
error_log('[TravianZ] player statistics insert failed: '
|
||||||
|
. mysqli_error($database->dblink));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-1
@@ -184,8 +184,17 @@ class Market
|
|||||||
|
|
||||||
// Bonusul de alianta "Commerce". Se inmulteste cu biroul comercial, ca
|
// 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.
|
// 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()) {
|
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);
|
$this->maxcarry = floor($this->maxcarry);
|
||||||
|
|||||||
Reference in New Issue
Block a user