diff --git a/GameEngine/Profile.php b/GameEngine/Profile.php index e0b5e3ec..97f306bc 100755 --- a/GameEngine/Profile.php +++ b/GameEngine/Profile.php @@ -269,8 +269,14 @@ class Profile { * numele se afiseaza in rapoarte de lupta, pe harta si in listele de * sate - deci codul se executa in browserul altor jucatori. * - * Aceleasi reguli ca la numele de cont: litere, cifre, punct, liniuta, - * underscore si spatii simple. Fara caractere cu inteles in HTML. + * Permise: litere, cifre, punct, liniuta, underscore, paranteze + * rotunde si drepte, plus spatii simple intre grupuri. + * + * Parantezele sunt sigure aici: nu au niciun inteles in HTML, iar + * numele satelor nu trec prin BBCode (acesta se aplica doar pe + * descrierile de profil si pe forum), deci un sat numit "[b]x[/b]" + * se afiseaza ca atare, nu ingrosat. Raman excluse < > & " ', + * adica exact caracterele care ar putea sparge HTML-ul. */ if (function_exists('mb_strlen')) { if (mb_strlen($newName, 'UTF-8') > 25) { @@ -280,7 +286,7 @@ class Profile { $newName = substr($newName, 0, 25); } - if (!preg_match('/^[\p{L}\p{N}._-]+(?: [\p{L}\p{N}._-]+)*$/u', $newName)) { + if (!preg_match('/^[\p{L}\p{N}._\-\[\]()]+(?: [\p{L}\p{N}._\-\[\]()]+)*$/u', $newName)) { continue; // nume respins, satul isi pastreaza numele vechi } diff --git a/Templates/header.tpl b/Templates/header.tpl index 11b622e8..5c40f734 100644 --- a/Templates/header.tpl +++ b/Templates/header.tpl @@ -204,18 +204,50 @@ if ($hour > 1759 || $hour < 500) { ?>
gold <= 1) { - echo ' - ' . GOLD . ' - ' . $session->gold . ' ' . GOLD . ' - '; - } else { - echo '' . GOLD . ' - ' . $session->gold . ' ' . GOLD; - } + /** + * FORMAT COMPACT: iconita + valoare, fara cuvintele "Aur"/"Argint". + * Cuvintele au ramas in title/alt, deci se vad la mouseover. + * + * ICONITE SVG, nu gif-uri din graphic pack: gold.gif si gold_g.gif + * aveau alt contur si alta dimensiune decat silver.png, asa ca cele + * doua randuri nu se aliniau. Acum ambele sunt desenate la fel - + * acelasi cerc, aceeasi rama, aceeasi marime - si difera doar + * culoarea monedelor. Aceleasi clase ca iconita de argint din + * componenta Hero (css/hero_header.css), deci se potrivesc intre ele. + */ + $goldLabel = defined('GOLD') ? GOLD : 'Gold'; + $goldValue = (int) $session->gold; /** - * Argintul eroului, afisat langa aur (doar cu functiile T4 pornite). + * Un teanc de monede, desenat o singura data si refolosit. + * $tone alege paleta: aur, aur stins (fara aur) sau argint. + */ + if (!function_exists('tzCoinIcon')) { + function tzCoinIcon($tone, $title) + { + $cls = 'tzCoinStack tzCoin-' . $tone; + + return '' + . '' . htmlspecialchars($title, ENT_QUOTES, 'UTF-8') . '' + . '' + . '' + . '' + . '' + . '' + . ''; + } + } + + // sub 2 monede aurul era deja afisat stins in interfata veche + $goldTone = ($goldValue <= 1) ? 'goldOff' : 'gold'; + + echo '
' + . tzCoinIcon($goldTone, $goldValue . ' ' . $goldLabel) + . '' . $goldValue . '' + . '
'; + + /** + * Argintul eroului, afisat sub aur (doar cu functiile T4 pornite). * Valoarea sta pe randul eroului, in hero.silver. O tinem in * $GLOBALS, nu intr-o variabila "static": intr-un fisier inclus, * "static" nu persista intre includeri, deci nu ar fi un cache real. @@ -228,10 +260,11 @@ if ($hour > 1759 || $hour < 500) { } $t4SilverLabel = defined('HERO_SILVER') ? HERO_SILVER : 'Silver'; + $t4SilverValue = (int) $GLOBALS['t4SilverValue']; - echo '
' - . '' . $t4SilverLabel . '' - . ' ' . (int) $GLOBALS['t4SilverValue'] . ' ' . $t4SilverLabel + echo '
' + . tzCoinIcon('silver', $t4SilverValue . ' ' . $t4SilverLabel) + . '' . $t4SilverValue . '' . '
'; } ?> @@ -325,26 +358,80 @@ if ($hour > 1759 || $hour < 500) { /* GOLD IN DREPTUNGHIUL ALBASTRU (RELOCARE_GOLD_LOCATIE_EROU.png) Vechea pozitie era left:370px, adica exact cercul rosu - acolo sta acum componenta Hero (#tzHeroBox), asa ca aurul s-a mutat la dreapta, - dupa butonul Plus si iconita day/night. */ + dupa butonul Plus si iconita day/night. + + ANCORAT LA DREAPTA, NU LA STANGA (right, nu left): + #mtop are 570px latime, deci right:-104px pune marginea dreapta la + x=674, sub limita de 686 peste care pagina se taie pe mobil + (#header are min-width:980px si #mtop incepe la ~294px absolut). + Ancorarea la dreapta face ca valorile lungi (un jucator cu milioane + de argint) sa creasca spre STANGA, nu spre marginea paginii - cu + "left" ar fi iesit iar din ecran. */ #goldHeader { position: absolute; - left: 630px; /* << DREPTUNGHIUL ALBASTRU - muta 620-680 daca e nevoie */ - /* Centrare pe verticala in bara gri: ancoram la mijloc si compensam - inaltimea proprie. Asa ramane centrat si acum, cand sunt doua - randuri (aur + argint), nu impins spre partea de jos. */ + /* ANCORAT IN INTERIORUL BARII. + #mtop are 700px latime, nu 570: lang.css face @import la + modules/new_layout_ltr.css, care se incarca DUPA compact.css si + ii suprascrie regula. Cu right negativ blocul iesea din pagina + pe mobil. right:8px il tine mereu in bara, oricat de lunga ar fi + valoarea, si lasa ~45px fata de iconita day/night. */ + right: 8px; + left: auto; + white-space: nowrap; top: 40%; transform: translateY(-50%); width: auto; - min-width: 100px; height: auto; min-height: 22px; line-height: 16px; - text-align: center; + text-align: right; font-size: 11px; font-weight: bold; z-index: 50; } + /* Randurile de aur/argint: iconita si valoarea aliniate pe aceeasi + linie de baza, ca sa nu mai "sara" una fata de alta. */ + #goldHeader .tzCoinRow { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 4px; + height: 18px; + } + + #goldHeader .tzCoinStack { + display: block; + width: 16px; + height: 16px; + flex: 0 0 16px; + } + + #goldHeader .tzCoinValue { + display: inline-block; + } + + /* Rama comuna: acelasi cerc pentru toate cele trei variante */ + #goldHeader .tzCoinBg { + fill: #f6f5f2; + stroke: #b8b6b1; + stroke-width: 1; + } + + /* Aur */ + #goldHeader .tzCoin-gold .tzCoinDisc { fill: #e3b427; stroke: #9a7512; stroke-width: .8; } + #goldHeader .tzCoin-gold .tzCoinShine { fill: #f7e08a; } + + /* Aur epuizat: aceeasi forma, doar decolorata (inlocuieste gold_g.gif) */ + #goldHeader .tzCoin-goldOff .tzCoinDisc { fill: #d3d2ce; stroke: #a3a19c; stroke-width: .8; } + #goldHeader .tzCoin-goldOff .tzCoinShine { fill: #efeeeb; } + #goldHeader .tzCoinRow-goldOff .tzCoinValue { color: #b3b3b3; } + + /* Argint */ + #goldHeader .tzCoin-silver .tzCoinDisc { fill: #cdd2d6; stroke: #7e858b; stroke-width: .8; } + #goldHeader .tzCoin-silver .tzCoinShine { fill: #eef1f3; } + + #goldHeader img { vertical-align: middle; margin-right: 4px; diff --git a/Templates/hero_header.tpl b/Templates/hero_header.tpl index b5a04fe8..445b135b 100644 --- a/Templates/hero_header.tpl +++ b/Templates/hero_header.tpl @@ -273,17 +273,54 @@ if (isset($building) && is_object($building) && method_exists($building, 'getTyp $tzHeroField = (int) $building->getTypeField(37); } +/** + * ATENTIE la varianta "build.php?gid=37" fara nimic in spate: build.php + * rezolva gid-ul in satul CURENT, iar daca nu gaseste cladirea pune id = 1, + * adica primul camp de resurse. Cine nu avea nici erou, nici Resedinta, + * ajungea pe Padure cand apasa pe cerc. De aceea nu mai construim niciodata + * linkul "orb": daca nu stim un camp valid, componenta ramane needclickabila. + * + * $tzHeroClickable spune daca avem o tinta reala: + * - cladirea 37 exista in satul curent -> link direct + * - altfel, stim satul eroului -> newdid + gid=37 + * - altfel (fara erou SI fara Resedinta nicaieri) -> fara link + */ +$tzHeroClickable = true; + if ($tzHeroField > 0) { $tzHeroBase = 'build.php?id=' . $tzHeroField; } elseif ($tzHeroWref > 0) { $tzHeroBase = 'build.php?newdid=' . $tzHeroWref . '&gid=37'; } else { - $tzHeroBase = 'build.php?gid=37'; + $tzHeroBase = ''; + $tzHeroClickable = false; } $tzLinkHero = $tzHeroBase; -$tzLinkAdv = $tzHeroBase . '&t4tab=adventures'; -$tzLinkAuc = $tzHeroBase . '&t4tab=auction'; +$tzLinkAdv = $tzHeroClickable ? $tzHeroBase . '&t4tab=adventures' : ''; +$tzLinkAuc = $tzHeroClickable ? $tzHeroBase . '&t4tab=auction' : ''; + +/** + * Cand nu e clickabil folosim in loc de : fara href gol, fara + * cursor de link, fara intrare in ordinea de tabulare. Tooltip-ul ramane. + */ +$tzTag = $tzHeroClickable ? 'a' : 'span'; + +/** + * Deschide slotul ca sau ca , dupa caz. + * function_exists: un template inclus de doua ori intr-un request ar da + * fatal error la redeclarare. + */ +if (!function_exists('tzHeroSlotOpen')) { +function tzHeroSlotOpen($link, $classes, $clickable) +{ + if ($clickable && $link !== '') { + return ''; + } + + return ''; +} +} /** * --------------------------------------------------------------------------- @@ -357,7 +394,7 @@ $tzHeroVillageSafe = htmlspecialchars($tzHeroVillage, ENT_QUOTES, 'UTF-8');
- + @@ -373,13 +410,12 @@ $tzHeroVillageSafe = htmlspecialchars($tzHeroVillage, ENT_QUOTES, 'UTF-8'); - + @@ -402,9 +438,33 @@ $tzHeroVillageSafe = htmlspecialchars($tzHeroVillage, ENT_QUOTES, 'UTF-8'); + + + + + + + + + + - + + ' : ''; ?> - + + ' : ''; ?> - + 0 ? 'tzHeroAdvOn' : 'tzHeroAdvOff'), $tzHeroClickable); ?> : - + ' : ''; ?> - + : - + ' : ''; ?> diff --git a/css/hero_header.css b/css/hero_header.css index dd5507ef..ac011484 100644 --- a/css/hero_header.css +++ b/css/hero_header.css @@ -160,10 +160,17 @@ div#mtop { .tzHeroSkull { fill: #e9e7e2; stroke: #7d7b76; stroke-width: .8; } .tzHeroSkullEye { fill: #3a3835; } -/* Starile "plecat": aventura (cizma), atac (sabii), intarire (scut) */ -.tzHeroBoot { fill: #8a6a3f; stroke: #5f482a; stroke-width: .8; } -.tzHeroBootSole { fill: #4a3a24; } -.tzHeroBootCuff { fill: #b08a52; } +/* Aventura: indicator cu doua sageti */ +.tzHeroPost { fill: #8a6a3f; } +.tzHeroSign { fill: #d8c9a6; stroke: #8a6a3f; stroke-width: .8; } + +/* Antrenament: clepsidra */ +.tzHeroGlassFrame { fill: #8a6a3f; } +.tzHeroGlass { fill: #dfe6ea; stroke: #8f9aa1; stroke-width: .7; } +.tzHeroSand { fill: #d8a93f; } + +/* Fara erou: silueta stinsa, la fel ca portretul gol din centru */ +.tzHeroNone { fill: #b9b7b2; } .tzHeroBlade { fill: none; stroke: #9a9894; stroke-width: 2.2; stroke-linecap: round; } .tzHeroHilt { fill: none; stroke: #8a6a3f; stroke-width: 2.2; stroke-linecap: round; } @@ -241,6 +248,12 @@ div#mtop { display: block; } +/* Slot fara tinta valida (fara erou SI fara Resedinta Eroului nicaieri): + ramane vizibil si cu tooltip, dar nu mai arata a link. */ +.tzHeroNoLink { + cursor: default; +} + .tzHeroTip b { display: block; color: #ffffff;