mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-08-11 22:01:00 +00:00
Some important fix and view
Some important fix and view
This commit is contained in:
+54
-10
@@ -461,6 +461,18 @@ class HeroItems
|
||||
|
||||
$p = TB_PREFIX;
|
||||
|
||||
/**
|
||||
* FIX: eroul care se INTORCEA dintr-o aventura aparea ca fiind acasa.
|
||||
*
|
||||
* Ciclul unei aventuri e: status 0 (oferta) -> status 1 (dus, miscare
|
||||
* sort_type 20) -> la sosire status devine 2 si se creeaza miscarea de
|
||||
* intoarcere (sort_type 21). Numaram doar status = 1, deci pe tot
|
||||
* drumul de intoarcere eroul "disparea": bara de sus scria "Hero at
|
||||
* home", iar pagina de echipare lasa schimbarea itemelor desi eroul
|
||||
* era inca pe drum. Adaugam si miscarea de intoarcere.
|
||||
*/
|
||||
$advBack = defined('MOVEMENT_ADVENTURE_BACK') ? (int) MOVEMENT_ADVENTURE_BACK : 21;
|
||||
|
||||
// ATENTIE: aliasul pentru miscarea de intoarcere NU poate fi "returning" -
|
||||
// e cuvant rezervat in MariaDB (clauza RETURNING) si strica query-ul.
|
||||
// Un singur query, cu motive separate, ca interfata sa poata afisa
|
||||
@@ -471,6 +483,10 @@ class HeroItems
|
||||
WHERE uid = ? AND COALESCE(intraining, 0) = 0) AS hero_exists,
|
||||
(SELECT COUNT(*) FROM {$p}hero_adventure
|
||||
WHERE uid = ? AND status = 1) AS adventure,
|
||||
(SELECT COUNT(*) FROM {$p}movement m
|
||||
INNER JOIN {$p}vdata v ON v.wref = m.`to`
|
||||
WHERE v.owner = ? AND m.proc = 0
|
||||
AND m.sort_type = {$advBack}) AS adv_return,
|
||||
(SELECT IFNULL(SUM(e.hero), 0) FROM {$p}enforcement e
|
||||
INNER JOIN {$p}vdata v ON v.wref = e.`from`
|
||||
WHERE v.owner = ?) AS reinforcement,
|
||||
@@ -490,9 +506,9 @@ class HeroItems
|
||||
return self::$awayCache[$uid] = '';
|
||||
}
|
||||
|
||||
$stmt->bind_param('iiiii', $uid, $uid, $uid, $uid, $uid);
|
||||
$stmt->bind_param('iiiiii', $uid, $uid, $uid, $uid, $uid, $uid);
|
||||
$stmt->execute();
|
||||
$stmt->bind_result($heroExists, $adventure, $reinforcement, $outgoing, $atkReturn);
|
||||
$stmt->bind_result($heroExists, $adventure, $advReturn, $reinforcement, $outgoing, $atkReturn);
|
||||
$stmt->fetch();
|
||||
$stmt->close();
|
||||
|
||||
@@ -504,7 +520,10 @@ class HeroItems
|
||||
// conteaza - inca nu exista cu adevarat.
|
||||
if ((int) $heroExists === 0) {
|
||||
$reason = 'nohero';
|
||||
} elseif ((int) $adventure > 0) {
|
||||
} elseif (((int) $adventure + (int) $advReturn) > 0) {
|
||||
// "adventure" acopera ambele picioare ale drumului: dus si intors.
|
||||
// Contractul metodei ramane neschimbat, deci 37_items.tpl continua
|
||||
// sa afiseze acelasi mesaj - doar ca acum si pe drumul de intoarcere.
|
||||
$reason = 'adventure';
|
||||
} elseif (((int) $outgoing + (int) $atkReturn) > 0) {
|
||||
$reason = 'attack';
|
||||
@@ -539,7 +558,13 @@ class HeroItems
|
||||
return self::$locationCache[$uid];
|
||||
}
|
||||
|
||||
$info = array('reason' => $this->heroAwayReason($uid), 'target' => 0, 'endtime' => 0, 'sort' => 0);
|
||||
$info = array(
|
||||
'reason' => $this->heroAwayReason($uid),
|
||||
'target' => 0,
|
||||
'endtime' => 0,
|
||||
'sort' => 0,
|
||||
'returning' => false, // true = se intoarce acasa
|
||||
);
|
||||
|
||||
if ($info['reason'] === '' || $info['reason'] === 'nohero') {
|
||||
return self::$locationCache[$uid] = $info;
|
||||
@@ -548,14 +573,24 @@ class HeroItems
|
||||
$p = TB_PREFIX;
|
||||
$q = '';
|
||||
|
||||
$advOut = defined('MOVEMENT_ADVENTURE_OUT') ? (int) MOVEMENT_ADVENTURE_OUT : 20;
|
||||
$advBack = defined('MOVEMENT_ADVENTURE_BACK') ? (int) MOVEMENT_ADVENTURE_BACK : 21;
|
||||
|
||||
if ($info['reason'] === 'adventure') {
|
||||
|
||||
// LEFT JOIN, nu INNER: daca randul de miscare a fost deja procesat,
|
||||
// vrem macar destinatia, nu sa pierdem tot randul.
|
||||
$q = "SELECT a.wref AS target, IFNULL(m.endtime, 0) AS endtime, IFNULL(m.sort_type, 0) AS sort_type
|
||||
FROM {$p}hero_adventure a
|
||||
LEFT JOIN {$p}movement m ON m.moveid = a.moveid
|
||||
WHERE a.uid = ? AND a.status = 1
|
||||
/**
|
||||
* Citim direct miscarea, nu randul din hero_adventure: la
|
||||
* intoarcere randul e deja status = 2, deci ar fi invizibil.
|
||||
* Satul jucatorului e `from` la dus si `to` la intors, de aceea
|
||||
* IF() alege coloana potrivita pentru verificarea proprietarului.
|
||||
* Destinatia afisata e mereu `to` - locul aventurii la dus,
|
||||
* satul de acasa la intoarcere.
|
||||
*/
|
||||
$q = "SELECT m.`to` AS target, m.endtime, m.sort_type
|
||||
FROM {$p}movement m
|
||||
INNER JOIN {$p}vdata v ON v.wref = IF(m.sort_type = {$advBack}, m.`to`, m.`from`)
|
||||
WHERE v.owner = ? AND m.proc = 0 AND m.sort_type IN ({$advOut}, {$advBack})
|
||||
ORDER BY m.endtime ASC
|
||||
LIMIT 1";
|
||||
|
||||
} elseif ($info['reason'] === 'attack') {
|
||||
@@ -597,6 +632,15 @@ class HeroItems
|
||||
$info['target'] = (int) $target;
|
||||
$info['endtime'] = (int) $endtime;
|
||||
$info['sort'] = (int) $sortType;
|
||||
|
||||
/**
|
||||
* Drumul de intoarcere, indiferent de unde:
|
||||
* sort_type 21 = intoarcere din aventura
|
||||
* sort_type 4 = intoarcere din atac SAU erou rechemat dintr-o
|
||||
* intarire (ambele produc aceeasi miscare, deci
|
||||
* nu pot fi deosebite - textul e generic)
|
||||
*/
|
||||
$info['returning'] = ($info['sort'] === $advBack || $info['sort'] === 4);
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
|
||||
+13
-5
@@ -4370,8 +4370,16 @@ tz_def('ADM_PROTECTED_PLAYERS_TIP', 'Comma-separated player names that cannot be
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// COMPONENTA HERO DIN BARA DE SUS
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
tz_def('HERO_HEADER_AT_HOME', 'Hero at home');
|
||||
tz_def('HERO_HEADER_DEAD', 'Hero is dead');
|
||||
tz_def('HERO_HEADER_TRAINING', 'Hero in training');
|
||||
tz_def('HERO_HEADER_NOHERO', 'No hero yet');
|
||||
tz_def('TZ_HEALTH', 'Health');
|
||||
tz_def('HERO_HEADER_AT_HOME', 'Hero at home');
|
||||
tz_def('HERO_HEADER_DEAD', 'Hero is dead');
|
||||
tz_def('HERO_HEADER_TRAINING', 'Hero in training');
|
||||
tz_def('HERO_HEADER_NOHERO', 'No hero yet');
|
||||
tz_def('HERO_HEADER_ADVENTURE', 'Hero on adventure');
|
||||
tz_def('HERO_HEADER_ATTACK', 'Hero is with the army');
|
||||
tz_def('HERO_HEADER_REINFORCE', 'Hero is reinforcing');
|
||||
tz_def('HERO_HEADER_IN', 'in');
|
||||
tz_def('HERO_HEADER_RETURN_ADV', 'Hero returning from adventure');
|
||||
tz_def('HERO_HEADER_RETURN_HOME', 'Hero returning home');
|
||||
tz_def('HERO_HEADER_PER_HOUR', 'per hour');
|
||||
tz_def('TZ_HEALTH', 'Health');
|
||||
|
||||
|
||||
+12
-5
@@ -4313,8 +4313,15 @@ tz_def('ADM_PROTECTED_PLAYERS_TIP', 'Noms de joueurs separes par des virgules qu
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// COMPONENTA HERO DIN BARA DE SUS
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
tz_def('HERO_HEADER_AT_HOME', 'Le heros est chez lui');
|
||||
tz_def('HERO_HEADER_DEAD', 'Le heros est mort');
|
||||
tz_def('HERO_HEADER_TRAINING', 'Heros en formation');
|
||||
tz_def('HERO_HEADER_NOHERO', 'Pas encore de heros');
|
||||
tz_def('TZ_HEALTH', 'Sante');
|
||||
tz_def('HERO_HEADER_AT_HOME', 'Le heros est chez lui');
|
||||
tz_def('HERO_HEADER_DEAD', 'Le heros est mort');
|
||||
tz_def('HERO_HEADER_TRAINING', 'Heros en formation');
|
||||
tz_def('HERO_HEADER_NOHERO', 'Pas encore de heros');
|
||||
tz_def('HERO_HEADER_ADVENTURE', 'Le heros est en aventure');
|
||||
tz_def('HERO_HEADER_ATTACK', 'Le heros est parti avec l\'armee');
|
||||
tz_def('HERO_HEADER_REINFORCE', 'Le heros est en renfort');
|
||||
tz_def('HERO_HEADER_IN', 'dans');
|
||||
tz_def('HERO_HEADER_RETURN_ADV', 'Le heros revient de l\'aventure');
|
||||
tz_def('HERO_HEADER_RETURN_HOME', 'Le heros rentre chez lui');
|
||||
tz_def('HERO_HEADER_PER_HOUR', 'par heure');
|
||||
tz_def('TZ_HEALTH', 'Sante');
|
||||
|
||||
+10
-6
@@ -2790,7 +2790,7 @@ tz_def('HERO_AUC_SELL_FAIL', 'Acest obiect nu poate fi listat (obiectele ech
|
||||
tz_def('HERO_AUC_SELL_OK', 'Obiectul tau a fost listat.');
|
||||
tz_def('HERO_AUC_SOLD', 'Licitatia ta s-a vandut:');
|
||||
tz_def('HERO_AUC_START_PRICE', 'Pret de pornire');
|
||||
tz_def('HERO_AUC_TIME_LEFT', 'Se incheie in');
|
||||
tz_def('HERO_AUC_TIME_LEFT', 'Se incheie');
|
||||
tz_def('HERO_AUC_WON', 'Ai castigat licitatia pentru');
|
||||
tz_def('HERO_AUC_YOUR_MAX', 'Maximul tau');
|
||||
|
||||
@@ -4110,8 +4110,12 @@ tz_def('ADM_PROTECTED_PLAYERS_TIP', 'Nume de jucatori separate prin virgula, car
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// COMPONENTA HERO DIN BARA DE SUS
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
tz_def('HERO_HEADER_AT_HOME', 'Eroul este acasa');
|
||||
tz_def('HERO_HEADER_DEAD', 'Eroul este mort');
|
||||
tz_def('HERO_HEADER_TRAINING', 'Eroul este in antrenament');
|
||||
tz_def('HERO_HEADER_NOHERO', 'Inca nu ai erou');
|
||||
tz_def('TZ_HEALTH', 'Sanatate');
|
||||
tz_def('HERO_HEADER_AT_HOME', 'Eroul este acasa');
|
||||
tz_def('HERO_HEADER_DEAD', 'Eroul este mort');
|
||||
tz_def('HERO_HEADER_TRAINING', 'Eroul este in antrenament');
|
||||
tz_def('HERO_HEADER_NOHERO', 'Inca nu ai erou');
|
||||
tz_def('HERO_HEADER_ADVENTURE', 'Eroul este in aventura');
|
||||
tz_def('HERO_HEADER_ATTACK', 'Eroul este plecat cu armata');
|
||||
tz_def('HERO_HEADER_REINFORCE', 'Eroul este intr-o intarire');
|
||||
tz_def('HERO_HEADER_IN', 'in');
|
||||
tz_def('TZ_HEALTH', 'Sanatate');
|
||||
|
||||
Reference in New Issue
Block a user