mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-08-14 15:21:01 +00:00
Fix Lang + Fix train troops in greatbarraks and great stable + fix ally message + refactor battle system
Fix Lang + Fix train troops in greatbarraks and great stable + fix ally message + refactor battle system #219
This commit is contained in:
@@ -11,4 +11,68 @@
|
|||||||
<Files "*.log">
|
<Files "*.log">
|
||||||
Order Allow,Deny
|
Order Allow,Deny
|
||||||
Deny from all
|
Deny from all
|
||||||
</Files>
|
</Files>
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
## PERFORMANTA (P1) - compresie + cache pe statice. Adaugat de refactor.
|
||||||
|
## Toate blocurile sunt gardate cu <IfModule>: daca un modul nu e activ
|
||||||
|
## pe server, Apache ignora blocul (nu da Error 500).
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
## 1. Compresie GZIP - reduce dimensiunea textelor transferate (HTML/CSS/JS)
|
||||||
|
<IfModule mod_deflate.c>
|
||||||
|
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml
|
||||||
|
AddOutputFilterByType DEFLATE application/javascript application/x-javascript text/javascript
|
||||||
|
AddOutputFilterByType DEFLATE application/json application/xml
|
||||||
|
AddOutputFilterByType DEFLATE image/svg+xml
|
||||||
|
|
||||||
|
# Browsere vechi (proxy-uri care strica compresia)
|
||||||
|
BrowserMatch ^Mozilla/4 gzip-only-text/html
|
||||||
|
BrowserMatch ^Mozilla/4\.0[678] no-gzip
|
||||||
|
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
|
||||||
|
|
||||||
|
# Nu comprima imaginile deja comprimate (gif/jpg/png sunt deja compresate)
|
||||||
|
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico|webp)$ no-gzip dont-vary
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
## 2. Cache in browser - staticele nu se re-descarca la fiecare vizita
|
||||||
|
<IfModule mod_expires.c>
|
||||||
|
ExpiresActive On
|
||||||
|
|
||||||
|
# Imagini: 30 zile (se schimba rar)
|
||||||
|
ExpiresByType image/gif "access plus 30 days"
|
||||||
|
ExpiresByType image/jpeg "access plus 30 days"
|
||||||
|
ExpiresByType image/png "access plus 30 days"
|
||||||
|
ExpiresByType image/webp "access plus 30 days"
|
||||||
|
ExpiresByType image/x-icon "access plus 30 days"
|
||||||
|
ExpiresByType image/svg+xml "access plus 30 days"
|
||||||
|
|
||||||
|
# CSS / JS: 7 zile (se pot schimba la update-uri de joc)
|
||||||
|
ExpiresByType text/css "access plus 7 days"
|
||||||
|
ExpiresByType application/javascript "access plus 7 days"
|
||||||
|
ExpiresByType text/javascript "access plus 7 days"
|
||||||
|
|
||||||
|
# HTML si JSON: fara cache (continut dinamic de joc)
|
||||||
|
ExpiresByType text/html "access plus 0 seconds"
|
||||||
|
ExpiresByType application/json "access plus 0 seconds"
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
## 3. Cache-Control headers (completeaza Expires; unele CDN-uri le prefera)
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
# Statice: cache public 30 zile
|
||||||
|
<FilesMatch "\.(gif|jpe?g|png|webp|ico|svg|css|js|woff2?|ttf|eot)$">
|
||||||
|
Header set Cache-Control "public, max-age=2592000"
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
# Paginile dinamice de joc: niciodata cache-uite
|
||||||
|
<FilesMatch "\.php$">
|
||||||
|
Header set Cache-Control "no-cache, no-store, must-revalidate"
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
## 4. Dezactiveaza ETag global (Expires/Cache-Control sunt suficiente)
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
Header unset ETag
|
||||||
|
</IfModule>
|
||||||
|
FileETag None
|
||||||
|
|||||||
+657
-400
File diff suppressed because it is too large
Load Diff
@@ -317,6 +317,27 @@ References: User ID/Message ID, Mode
|
|||||||
return $ids;
|
return $ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UM-W1: permisiunea de mesaj-catre-alianta (opt7) a unui membru. Muta
|
||||||
|
* query-ul inline din Message::sendAMessage(). Returneaza direct valoarea
|
||||||
|
* opt7 (0 sau 1), deci in Message.php comparatia devine "$permission == 1"
|
||||||
|
* in loc de vechiul "$permission['opt7'] == 1" - aceeasi verificare.
|
||||||
|
* Filtreaza pe uid SI alliance (+ LIMIT 1) ca sa nu ia un rand ramas dintr-o
|
||||||
|
* alianta anterioara.
|
||||||
|
*/
|
||||||
|
function getAllyMessagePermission($uid, $alliance = 0) {
|
||||||
|
list($uid, $alliance) = $this->escape_input((int) $uid, (int) $alliance);
|
||||||
|
|
||||||
|
$q = "SELECT opt7 FROM " . TB_PREFIX . "ali_permission WHERE uid = $uid";
|
||||||
|
if ($alliance > 0) {
|
||||||
|
$q .= " AND alliance = $alliance";
|
||||||
|
}
|
||||||
|
$q .= " LIMIT 1";
|
||||||
|
|
||||||
|
$row = mysqli_fetch_assoc(mysqli_query($this->dblink, $q));
|
||||||
|
return (int) ($row['opt7'] ?? 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UM-W1: target + owner ale unui mesaj (pentru a decide modul de stergere).
|
* UM-W1: target + owner ale unui mesaj (pentru a decide modul de stergere).
|
||||||
* Muta SELECT-ul inline din Message::removeMessage().
|
* Muta SELECT-ul inline din Message::removeMessage().
|
||||||
|
|||||||
+2498
-2481
File diff suppressed because it is too large
Load Diff
+1913
-1904
File diff suppressed because it is too large
Load Diff
+2518
-2315
File diff suppressed because it is too large
Load Diff
+2022
-2013
File diff suppressed because it is too large
Load Diff
@@ -596,7 +596,7 @@ class Message
|
|||||||
|
|
||||||
$allmembers = $database->getAllianceMemberIds($session->alliance);
|
$allmembers = $database->getAllianceMemberIds($session->alliance);
|
||||||
$userally = $database->getUserField($session->uid, "alliance", 0);
|
$userally = $database->getUserField($session->uid, "alliance", 0);
|
||||||
$permission = $database->getAllyMessagePermission($session->uid);
|
$permission = $database->getAllyMessagePermission($session->uid, $session->alliance);
|
||||||
|
|
||||||
if (defined('WORD_CENSOR')) {
|
if (defined('WORD_CENSOR')) {
|
||||||
$topic = $this->wordCensor($topic);
|
$topic = $this->wordCensor($topic);
|
||||||
|
|||||||
@@ -27,7 +27,11 @@ $end = $session->tribe * 10;
|
|||||||
$level = (int)$village->resarray['f'.$id];
|
$level = (int)$village->resarray['f'.$id];
|
||||||
|
|
||||||
for ($i = $start; $i <= $end; $i++):
|
for ($i = $start; $i <= $end; $i++):
|
||||||
if ($i == 4 || $i == 23 || $i == 24) continue;
|
// FIX (triburi noi): Great Barracks antreneaza DOAR infanteria tribului, la
|
||||||
|
// fel ca Barracks-ul normal. Filtrul generic $unitsbytype['infantry'] acopera
|
||||||
|
// si triburile 6-9; vechea excludere 4/23/24 era hardcodata pentru triburile
|
||||||
|
// 1-5 si lasa cavaleria sa treaca la triburile noi.
|
||||||
|
if (!in_array($i, $unitsbytype['infantry'])) continue;
|
||||||
if (!($technology->getTech($i) || $i % 10 == 1)) continue;
|
if (!($technology->getTech($i) || $i % 10 == 1)) continue;
|
||||||
|
|
||||||
$unit = ${'u'.$i};
|
$unit = ${'u'.$i};
|
||||||
|
|||||||
@@ -29,7 +29,11 @@ $horseDrinking = $building->getTypeLevel(41);
|
|||||||
$success = 0;
|
$success = 0;
|
||||||
|
|
||||||
for ($i = $start; $i <= $end; $i++):
|
for ($i = $start; $i <= $end; $i++):
|
||||||
if ($i == 3 || $i == 13 || $i == 14) continue;
|
// FIX (triburi noi): Great Stable antreneaza DOAR cavaleria tribului, la fel
|
||||||
|
// ca Stable-ul normal (20_train.tpl). Filtrul generic $unitsbytype['cavalry']
|
||||||
|
// acopera si triburile 6-9; vechea excludere 3/13/14 lasa sa treaca toate
|
||||||
|
// unitatile (infanterie, berbeci, catapulte).
|
||||||
|
if (!in_array($i, $unitsbytype['cavalry'])) continue;
|
||||||
if (!$technology->getTech($i)) continue;
|
if (!$technology->getTech($i)) continue;
|
||||||
$success++;
|
$success++;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
#################################################################################
|
||||||
|
## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ##
|
||||||
|
## --------------------------------------------------------------------------- ##
|
||||||
|
## Filename : cron.php ##
|
||||||
|
## Type : Standalone automation runner (P2 - performance) ##
|
||||||
|
## --------------------------------------------------------------------------- ##
|
||||||
|
## Scop : Ruleaza Automation.php separat de request-urile ##
|
||||||
|
## jucatorilor. Se apeleaza dintr-un cron job cPanel la ##
|
||||||
|
## fiecare minut, astfel incat procesarea (batalii, miscari, ##
|
||||||
|
## antrenamente) nu mai e carata de pagina unui jucator. ##
|
||||||
|
## --------------------------------------------------------------------------- ##
|
||||||
|
## Instalare cron cPanel (la fiecare minut): ##
|
||||||
|
## * * * * * /usr/bin/php /home/USER/public_html/cron.php >/dev/null 2>&1 ##
|
||||||
|
## sau prin wget/curl daca php-cli nu e disponibil: ##
|
||||||
|
## * * * * * wget -q -O /dev/null "https://DOMENIU/cron.php?key=SECRET" ##
|
||||||
|
## --------------------------------------------------------------------------- ##
|
||||||
|
## Contact : cata7007@gmail.com ##
|
||||||
|
## Project : TravianZ ##
|
||||||
|
## GitHub : https://github.com/Shadowss/TravianZ ##
|
||||||
|
#################################################################################
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// 1. Detectare mod de rulare
|
||||||
|
// - CLI (php cron.php): mereu permis, e apelat doar de cron-ul serverului.
|
||||||
|
// - HTTP (wget/curl): permis DOAR daca cheia din config se potriveste, ca sa
|
||||||
|
// nu poata declansa oricine automation-ul de pe internet.
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
$isCli = (PHP_SAPI === 'cli');
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// 2. Bootstrap minimal - NU includem Session.php (porneste sesiune, se leaga de
|
||||||
|
// request si de un user logat). Automation are nevoie doar de config (constante
|
||||||
|
// SQL_*, TB_PREFIX, AUTOMATION_LOCK_FILE_NAME) si de $database; restul (buidata,
|
||||||
|
// unitdata, Units, Battle, etc.) si le include Automation.php singur.
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
$autoprefix = '';
|
||||||
|
for ($i = 0; $i < 5; $i++) {
|
||||||
|
$autoprefix = str_repeat('../', $i);
|
||||||
|
if (file_exists($autoprefix . 'autoloader.php')) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once($autoprefix . 'autoloader.php');
|
||||||
|
|
||||||
|
if (!file_exists($autoprefix . 'GameEngine/config.php')) {
|
||||||
|
// instalarea nu e finalizata - nu avem ce rula
|
||||||
|
if ($isCli) { fwrite(STDERR, "cron: config.php lipseste, jocul nu e instalat\n"); }
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
include_once($autoprefix . 'GameEngine/config.php');
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// 3. Verificare cheie pentru accesul HTTP (nu se aplica in CLI)
|
||||||
|
// Defineste in GameEngine/config.php: define('CRON_KEY', 'un-secret-lung');
|
||||||
|
// Apoi apeleaza: https://domeniu/cron.php?key=un-secret-lung
|
||||||
|
// Daca CRON_KEY nu e definit, accesul HTTP este refuzat (doar CLI merge).
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
if (!$isCli) {
|
||||||
|
$providedKey = isset($_GET['key']) ? (string)$_GET['key'] : '';
|
||||||
|
if (!defined('CRON_KEY') || CRON_KEY === '' || !hash_equals(CRON_KEY, $providedKey)) {
|
||||||
|
header('HTTP/1.1 403 Forbidden');
|
||||||
|
exit('Forbidden');
|
||||||
|
}
|
||||||
|
// nu tinem conexiunea deschisa pentru client - raspundem si continuam in fundal
|
||||||
|
ignore_user_abort(true);
|
||||||
|
@set_time_limit(0);
|
||||||
|
header('Content-Type: text/plain');
|
||||||
|
echo "OK\n";
|
||||||
|
if (function_exists('fastcgi_finish_request')) {
|
||||||
|
fastcgi_finish_request();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// 4. Conexiune la baza de date (acelasi mod ca in Database.php - variabila globala
|
||||||
|
// $database folosita de Automation prin "global $database").
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
include_once($autoprefix . 'GameEngine/Database.php');
|
||||||
|
|
||||||
|
if (!isset($database) || !$database) {
|
||||||
|
if ($isCli) { fwrite(STDERR, "cron: conexiunea la baza de date a esuat\n"); }
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// 5. Marcam ca suntem sursa oficiala de automation. AUTOMATION_MANUAL_RUN spune
|
||||||
|
// Automation.php sa NU mai treaca prin gardul de lock file (acela era pentru
|
||||||
|
// coordonarea request-urilor concurente ale jucatorilor; cron-ul e sursa unica,
|
||||||
|
// o data pe minut, deci nu are nevoie de el).
|
||||||
|
//
|
||||||
|
// In plus scriem un marker cu timestamp, ca Village.php sa stie ca exista un
|
||||||
|
// cron activ si sa NU mai declanseze automation din paginile jucatorilor
|
||||||
|
// (fallback: daca cron-ul se opreste > 90s, paginile preiau automat).
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
if (!defined('AUTOMATION_MANUAL_RUN')) {
|
||||||
|
define('AUTOMATION_MANUAL_RUN', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cronMarker = $autoprefix . 'GameEngine/Prevention/cron_active.txt';
|
||||||
|
@file_put_contents($cronMarker, (string)time(), LOCK_EX);
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// 6. Rulam automation-ul propriu-zis. Constructorul din Automation.php face toata
|
||||||
|
// treaba (procNewClimbers, buildComplete, trainingComplete, batalii, miscari...).
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
include_once($autoprefix . 'GameEngine/Automation.php');
|
||||||
|
|
||||||
|
if ($isCli) {
|
||||||
|
echo "cron: automation rulat la " . date('Y-m-d H:i:s') . "\n";
|
||||||
|
}
|
||||||
+3
-1
@@ -486,7 +486,9 @@ CREATE TABLE IF NOT EXISTS `%PREFIX%chat` (
|
|||||||
`alli` varchar(255) NULL,
|
`alli` varchar(255) NULL,
|
||||||
`date` varchar(255) NULL,
|
`date` varchar(255) NULL,
|
||||||
`msg` varchar(255) NULL,
|
`msg` varchar(255) NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `alli` (`alli`(32)),
|
||||||
|
KEY `id_user` (`id_user`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|||||||
Reference in New Issue
Block a user