diff --git a/GameEngine/Building.php b/GameEngine/Building.php index 40f4e658..c5c49cf8 100755 --- a/GameEngine/Building.php +++ b/GameEngine/Building.php @@ -8,9 +8,7 @@ ## Filename: Building.php ## ## Developed by: Dzoki & Dixie ## ## Refactored by: Shadow ## -## Fixed by: InCube - double troops ## ## Reworked/Fix: ronix ## -## Thanks to: Akakori, Elmar & Kirilloid ## ## License: TravianZ Project ## ## Copyright: TravianZ (c) 2010-2026. All rights reserved. ## ## ## diff --git a/GameEngine/Generator.php b/GameEngine/Generator.php index 65900738..e8a78e70 100755 --- a/GameEngine/Generator.php +++ b/GameEngine/Generator.php @@ -3,142 +3,217 @@ ################################################################################# ## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ## ## --------------------------------------------------------------------------- ## -## Filename Generator.php ## -## License: TravianZ Project ## -## Copyright: TravianZ (c) 2010-2025. All rights reserved. ## +## Project: TravianZ ## +## Version: 18.05.2026 ## +## Filename: Generator.php ## +## Developed by: Dzoki ## +## Refactored by: Shadow ## +## License: TravianZ Project ## +## Copyright: TravianZ (c) 2010-2026. All rights reserved. ## +## ## +## * Rules applied: ## +## - No logic changes ## +## - No functional behavior changes ## +## - Improved readability & structure ## +## - Removed obvious redundancy ## +## - PHP 7+ / legacy compatible ## +## ## +## URLs: https://travianz.org ## +## https://github.com/Shadowss/TravianZ ## ## ## ################################################################################# -class MyGenerator { - - public function generateRandID(){ +class MyGenerator +{ + /** + * Generate hashed random ID + */ + public function generateRandID() + { return md5($this->generateRandStr(16)); } - public function generateRandStr($length){ - $randstr = ""; - for($i = 0; $i < $length; $i++){ + /** + * Generate random string using secure random_int + */ + public function generateRandStr($length) + { + $randstr = ''; + + for ($i = 0; $i < $length; $i++) { $randnum = random_int(0, 61); - if($randnum < 10) $randstr .= chr($randnum + 48); - else if($randnum < 36) $randstr .= chr($randnum + 55); - else $randstr .= chr($randnum + 61); - } - return $randstr; - } - public function encodeStr($str, $length) { - $encode = md5($str); - return substr($encode, 0 ,$length); - } - - public function procDistanceTime($coor, $thiscoor, $ref, $mode, $vid = 0) { - global $database, $bid28, $bid14, $village; - - if($vid == 0) $vid = $village->wid; - - $xdistance = ABS($thiscoor['x'] - $coor['x']); - if($xdistance > WORLD_MAX) $xdistance = (2 * WORLD_MAX + 1) - $xdistance; - - $ydistance = ABS($thiscoor['y'] - $coor['y']); - if($ydistance > WORLD_MAX) $ydistance = (2 * WORLD_MAX + 1) - $ydistance; - - $distance = SQRT(POW($xdistance,2) + POW($ydistance,2)); - if(!$mode){ - if($ref == 1) $speed = 16; - else if($ref == 2) $speed = 12; - else if($ref == 3) $speed = 24; - else if($ref == 300) $speed = 5; - else $speed = 1; - }else{ - $speed = $ref; - if(($tSquareLevel = $database->getFieldLevelInVillage($vid, 14)) > 0 && $distance >= TS_THRESHOLD) { - $speed *= ($bid14[$tSquareLevel]['attri'] / 100) ; + if ($randnum < 10) { + $randstr .= chr($randnum + 48); + } elseif ($randnum < 36) { + $randstr .= chr($randnum + 55); + } else { + $randstr .= chr($randnum + 61); } } - - if($speed > 0) return round(($distance / $speed) * 3600 / INCREASE_SPEED); - else return round($distance * 3600 / INCREASE_SPEED); + + return $randstr; } - public function getTimeFormat($time) { - $min = $hr = $days = 0; - - while($time >= 60){ + /** + * Encode string to fixed-length md5 hash + */ + public function encodeStr($str, $length) + { + $encode = md5($str); + return substr($encode, 0, $length); + } + + /** + * Calculate travel/distance time between coordinates + */ + public function procDistanceTime($coor, $thiscoor, $ref, $mode, $vid = 0) + { + global $database, $bid28, $bid14, $village; + + if ($vid == 0) { + $vid = $village->wid; + } + + $xdistance = abs($thiscoor['x'] - $coor['x']); + if ($xdistance > WORLD_MAX) { + $xdistance = (2 * WORLD_MAX + 1) - $xdistance; + } + + $ydistance = abs($thiscoor['y'] - $coor['y']); + if ($ydistance > WORLD_MAX) { + $ydistance = (2 * WORLD_MAX + 1) - $ydistance; + } + + $distance = sqrt(pow($xdistance, 2) + pow($ydistance, 2)); + + if (!$mode) { + if ($ref == 1) $speed = 16; + elseif ($ref == 2) $speed = 12; + elseif ($ref == 3) $speed = 24; + elseif ($ref == 300) $speed = 5; + else $speed = 1; + } else { + $speed = $ref; + + $tSquareLevel = $database->getFieldLevelInVillage($vid, 14); + + if ($tSquareLevel > 0 && $distance >= TS_THRESHOLD) { + $speed *= ($bid14[$tSquareLevel]['attri'] / 100); + } + } + + if ($speed > 0) { + return round(($distance / $speed) * 3600 / INCREASE_SPEED); + } + + return round($distance * 3600 / INCREASE_SPEED); + } + + /** + * Format seconds into H:i:s + */ + public function getTimeFormat($time) + { + $min = 0; + $hr = 0; + + while ($time >= 60) { $time -= 60; - $min += 1; + $min++; } - - while($min >= 60){ + + while ($min >= 60) { $min -= 60; - $hr += 1; + $hr++; } - - if($min < 10) $min = "0" . $min; - if($time < 10) $time = "0" . $time; - + + if ($min < 10) $min = "0" . $min; + if ($time < 10) $time = "0" . $time; + return $hr . ":" . $min . ":" . $time; } - public function procMtime($time, $pref = 3){ - /* - * $timezone = 7; - * switch($timezone) { - * case 7: - * $time -= 3600; - * break; - * } - */ - // $time += 3600*0; //Edit this yourself - $time += 0; // Edit this yourself - + /** + * Format timestamp into readable date/time + */ + public function procMtime($time, $pref = 3) + { + $time += 0; // placeholder for timezone adjustments + $today = date('d', time()) - 1; - if(date('Ymd', time()) == date('Ymd', $time)) $day = "today"; - elseif($today == date('d', $time)) $day = "yesterday"; - else - { - switch($pref){ - case 1 : + + if (date('Ymd', time()) == date('Ymd', $time)) { + $day = "today"; + } elseif ($today == date('d', $time)) { + $day = "yesterday"; + } else { + switch ($pref) { + case 1: $day = date("m/j/y", $time); break; - case 2 : + case 2: $day = date("j/m/y", $time); break; - case 3 : + case 3: $day = date("j.m.y", $time); break; - default : + default: $day = date("y/m/j", $time); break; } } + $new = date("H:i:s", $time); - if($pref == "9" || $pref == 9) return $new; - else return array($day, $new); + + if ($pref == 9) { + return $new; + } + + return [$day, $new]; } - - public function getBaseID($x, $y){ + /** + * Convert map coordinates to base ID + */ + public function getBaseID($x, $y) + { return ((WORLD_MAX - $y) * (WORLD_MAX * 2 + 1)) + (WORLD_MAX + $x + 1); } - public function getMapCheck($wref){ + /** + * Generate map checksum + */ + public function getMapCheck($wref) + { return substr(md5($wref), 5, 2); } - public function pageLoadTimeStart(){ - if(isset($_SERVER["REQUEST_TIME_FLOAT"])) return $_SERVER["REQUEST_TIME_FLOAT"]; + /** + * Page load start time + */ + public function pageLoadTimeStart() + { + if (isset($_SERVER["REQUEST_TIME_FLOAT"])) { + return $_SERVER["REQUEST_TIME_FLOAT"]; + } + $starttime = microtime(true); $startarray = explode(" ", $starttime); - //$starttime = $startarray[1] + $startarray[0]; + return $startarray[0]; } - public function pageLoadTimeEnd(){ + /** + * Page load end time + */ + public function pageLoadTimeEnd() + { $endtime = microtime(true); $endarray = explode(" ", $endtime); - //$endtime = $endarray[1] + $endarray[0]; + return $endarray[0]; } +} -}; -$generator = new MyGenerator; +$generator = new MyGenerator(); \ No newline at end of file diff --git a/GameEngine/Lang/en.php b/GameEngine/Lang/en.php index 776fa131..f0ce4590 100755 --- a/GameEngine/Lang/en.php +++ b/GameEngine/Lang/en.php @@ -1746,4 +1746,4 @@ $lang['screenshots']['desc5'] = 'Your attack report'; $lang['screenshots']['title6'] = 'Statistics'; $lang['screenshots']['desc6'] = 'View your ranking in statistics'; $lang['screenshots']['title7'] = 'Weapons or dough'; -$lang['screenshots']['desc7'] = 'You can choose to play as military or economy'; +$lang['screenshots']['desc7'] = 'You can choose to play as military or economy'; \ No newline at end of file diff --git a/GameEngine/Logging.php b/GameEngine/Logging.php index d8d763d1..2b235471 100755 --- a/GameEngine/Logging.php +++ b/GameEngine/Logging.php @@ -3,108 +3,170 @@ ################################################################################# ## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ## ## --------------------------------------------------------------------------- ## -## Filename Logging.php ## -## License: TravianZ Project ## -## Copyright: TravianZ (c) 2010-2025. All rights reserved. ## +## Project: TravianZ ## +## Version: 12.05.2026 ## +## Filename: Logging.php ## +## Developed by: Shadow ## +## Refactored by: Shadow ## +## License: TravianZ Project ## +## Copyright: TravianZ (c) 2010-2026. All rights reserved. ## +## ## +## Refactor: Incremental cleanup (structure / readability / safety) ## +## Compatibility: PHP 7+ / legacy ## +## ## +## URLs: https://travianz.org ## +## https://github.com/Shadowss/TravianZ ## ## ## ################################################################################# class Logging { - public function addIllegal($uid,$ref,$type) { + public function addIllegal($uid, $ref, $type) { global $database; - list($uid,$ref,$type) = $database->escape_input((int) $uid,$ref,$type); - if(LOG_ILLEGAL) { + + list($uid, $ref, $type) = $database->escape_input((int)$uid, $ref, $type); + + if (LOG_ILLEGAL) { $log = "Attempted to "; - switch($type) { + + switch ($type) { case 1: - $log .= "access village $ref"; - break; + $log .= "access village $ref"; + break; + default: + $log .= "perform illegal action"; + break; } - $q = "Insert into ".TB_PREFIX."illegal_log SET user = $uid, log = '$log'"; + + list($log) = $database->escape_input($log); + + $q = "Insert into " . TB_PREFIX . "illegal_log SET user = $uid, log = '$log'"; $database->query($q); } } - public function addLoginLog($id,$ip) { + public function addLoginLog($id, $ip) { global $database; - list($id,$ip) = $database->escape_input((int) $id,$ip); - if(LOG_LOGIN) { - $q = "Insert into ".TB_PREFIX."login_log SET uid = $id, ip = '".$_SERVER['REMOTE_ADDR']."'"; + + list($id, $ip) = $database->escape_input((int)$id, $ip); + + if (LOG_LOGIN) { + + if (empty($ip)) { + $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'; + } + + list($ip) = $database->escape_input($ip); + + $q = "Insert into " . TB_PREFIX . "login_log SET uid = $id, ip = '$ip'"; $database->query($q); } } - public function addBuildLog($wid,$building,$level,$type) { + public function addBuildLog($wid, $building, $level, $type) { global $database; - list($wid,$building,$level,$type) = $database->escape_input((int) $wid,$building,$level,$type); - if(LOG_BUILD) { - if($type) { + + list($wid, $building, $level, $type) = $database->escape_input((int)$wid, $building, $level, $type); + + if (LOG_BUILD) { + + if ($type) { $log = "Start Construction of "; - } - else { + } else { $log = "Start Upgrade of "; } - $log .= $building." to level ".$level; - $q = "Insert into ".TB_PREFIX."build_log SET wid = $wid, log = '$log'"; + + $log .= $building . " to level " . $level; + + list($log) = $database->escape_input($log); + + $q = "Insert into " . TB_PREFIX . "build_log SET wid = $wid, log = '$log'"; $database->query($q); } } - public function addTechLog($wid,$tech,$level) { + public function addTechLog($wid, $tech, $level) { global $database; - list($wid,$tech,$level) = $database->escape_input((int) $wid,$tech,$level); - if(LOG_TECH) { - $log = "Upgrading of tech ".$tech." to level ".$level; - $q = "Insert into ".TB_PREFIX."tech_log SET wid = $wid, log = '$log'"; + + list($wid, $tech, $level) = $database->escape_input((int)$wid, $tech, $level); + + if (LOG_TECH) { + + $log = "Upgrading of tech " . $tech . " to level " . $level; + list($log) = $database->escape_input($log); + + $q = "Insert into " . TB_PREFIX . "tech_log SET wid = $wid, log = '$log'"; $database->query($q); } } public function goldFinLog($wid) { global $database; - list($wid) = $database->escape_input((int) $wid); - if(LOG_GOLD_FIN) { + + list($wid) = $database->escape_input((int)$wid); + + if (LOG_GOLD_FIN) { + $log = "Finish construction and research with gold"; - $q = "Insert into ".TB_PREFIX."gold_fin_log values (0,$wid,'$log')"; + list($log) = $database->escape_input($log); + + $q = "Insert into " . TB_PREFIX . "gold_fin_log values (0,$wid,'$log')"; $database->query($q); } } public function addAdminLog() { global $database; + // reserved } - public function addMarketLog($wid,$type,$data) { + public function addMarketLog($wid, $type, $data) { global $database; - list($wid,$type,$data) = $database->escape_input((int) $wid,$type,$data); - if(LOG_MARKET) { - if($type == 1) { - $log = "Sent ".$data[0].",".$data[1].",".$data[2].",".$data[3]." to village ".$data[4]; + + list($wid, $type, $data) = $database->escape_input((int)$wid, $type, $data); + + if (LOG_MARKET) { + + if ($type == 1) { + $log = "Sent " . $data[0] . "," . $data[1] . "," . $data[2] . "," . $data[3] . " to village " . $data[4]; + } else if ($type == 2) { + $log = "Traded resource between " . $wid . " and " . $data[0] . " market ref is " . $data[1]; + } else { + $log = "Unknown market action"; } - else if($type == 2) { - $log = "Traded resource between ".$wid." and ".$data[0]." market ref is ".$data[1]; - } - $q = "Insert into ".TB_PREFIX."market_log SET wid = $wid, log = '$log'"; + + list($log) = $database->escape_input($log); + + $q = "Insert into " . TB_PREFIX . "market_log SET wid = $wid, log = '$log'"; $database->query($q); } } public function addWarLog() { global $database; + // reserved } public function clearLogs() { global $database; + // reserved } public static function debug($debug_info, $time = 0) { global $database, $generator; - list($debug_info) = $database->escape_input($debug_info); - - echo ''; - } -}; -$logging = new Logging; -?> + list($debug_info) = $database->escape_input($debug_info); + + $prefix = ""; + + if ($time > 0 && isset($generator)) { + $mtime = $generator->procMtime($time); + $prefix = "[" . ($mtime[1] ?? '') . "] "; + } + + echo ''; + } +} + +$logging = new Logging(); +?> \ No newline at end of file diff --git a/GameEngine/Multisort.php b/GameEngine/Multisort.php index 42336537..8d890867 100755 --- a/GameEngine/Multisort.php +++ b/GameEngine/Multisort.php @@ -7,52 +7,73 @@ ## License: TravianZ Project ## ## Copyright: TravianZ (c) 2010-2025. All rights reserved. ## ## ## +## URLs: https://travianz.org ## +## https://github.com/Shadowss/TravianZ ## +################################################################################# +## Refactored: incremental cleanup (compat PHP 7+, readability, minor fixes) ## ################################################################################# -class multiSort { - - function sorte($array) +class multiSort +{ + /** + * Multi-key array sorter + * Usage: sorte($array, 'key1', true, 3, 'key2', false, 2, ...) + */ + public function sorte($array) { - for($i = 1; $i < func_num_args(); $i += 3) + $args = func_get_args(); + $array = $args[0]; + + // iterate key/order/type triplets + for ($i = 1; $i < count($args); $i += 3) { - $key = func_get_arg($i); + $key = isset($args[$i]) ? $args[$i] : null; + $order = isset($args[$i + 1]) ? $args[$i + 1] : true; // true = ASC + $type = isset($args[$i + 2]) ? $args[$i + 2] : 0; - $order = true; - if($i + 1 < func_num_args()) - $order = func_get_arg($i + 1); + if ($key === null) { + continue; + } - $type = 0; - if($i + 2 < func_num_args()) - $type = func_get_arg($i + 2); + // comparator + $cmp = function ($a, $b) use ($key, $type, $order) + { + $va = isset($a[$key]) ? $a[$key] : null; + $vb = isset($b[$key]) ? $b[$key] : null; - $t = function($a, $b) use ($key, $type, $order) - { - switch($type) - { - case 1: // Case insensitive natural. - $result = strcasenatcmp($a[$key], $b[$key]); - break; - case 2: // Numeric. - $result = $a[$key] - $b[$key]; - break; - case 3: // Case sensitive string. - $result = strcmp($a[$key], $b[$key]); - break; - case 4: // Case insensitive string. - $result = strcasecmp($a[$key], $b[$key]); - break; - default: // Case sensitive natural. - $result = strnatcmp($a[$key], $b[ $key]); - break; - } - return $result*($order ? 1 : -1); + switch ($type) + { + case 1: // Case insensitive natural + $result = strnatcasecmp($va, $vb); + break; + + case 2: // Numeric + $result = ($va == $vb) ? 0 : (($va < $vb) ? -1 : 1); + break; + + case 3: // Case sensitive string + $result = strcmp((string)$va, (string)$vb); + break; + + case 4: // Case insensitive string + $result = strcasecmp((string)$va, (string)$vb); + break; + + default: // Case sensitive natural + $result = strnatcmp((string)$va, (string)$vb); + break; + } + + return $order ? $result : -$result; }; - usort($array, $t); + usort($array, $cmp); } + return $array; } +} -}; -$multisort = new multiSort; -?> +$multisort = new multiSort(); + +?> \ No newline at end of file