D
Deleted member 172943
Ultima modifica da un moderatore:
Salve a tutti!
Molti di voi già mi conosceranno per tutti i fix per Travian che ho rilasciato qua su inforge... Oggi ho ripreso a lavorare un po' sui TravianZ per fixare gli ultimi bug di questa versione e come sempre condividere i fix con voi, ho così deciso di aprire questo thread dove posterò tutti i fix che farò da ora in poi... Se conoscete dei bug di questa versione segnalateli qua e per quanto possibile proverò a fixarli, nonostante io non sia un bravo sviluppatore PHP (conosco meglio il C++ )
FIX LISTA FARM
Questo fix serve a correggere il bug che permetteva di attaccare player sotto protezione con la lista farm...
Aprite: Templates/goldClub/farmlist_addraid.tpl
Cercate ( righe 24/32 ):
e sostituite con:
PROTEZIONE ADMIN PANEL
Questa protezione non consente a nessuno con ip diverso dal vostro di visualizzare l'admin panel...
Dovete creare all interno della cartella Admin un file chiamato .htaccess e inserirvi queste istruzioni:
Dove dovete sostituire 00.000.000.000 con il vostro ip, che potete trovare qua: IL MIO IP - Scopri l'indirizzo IP della tua connessione internet - DNS Dinamico Free - Annunci di Lavoro Free - Annunci di Lavoro Gratis
Ovviamente ogni volta che cambierete il vostro ip dovrete cambiare anche il codice del file .htaccess
FIX PERDITA PROTEZIONE
Con questo fix ora chi è sotto protezione e attacca un altro giocatore perde immediatemente la protezione.
Aprite GameEngine/Units.php e cercate questo codice alle righe 347-349:
E sostituitelo con questo:
Aprite Templates/a2b/attack.tpl e cercate questo codice alle righe 447-451:
E sostituitelo con questo:
FIX ACCOUNT IN SHARER
Con questo fix potrete permettere ai player di giocare in sharer, si potrà rimanere loggati in due o più in uno stesso account contemporaneamente, senza essere sloggati...
Aprite GameEngine/session.php e cercate questo codice alle righe 118-135:
E sostituitelo con questo:
FIX CATAPULTE RANDOM CON BIRRIFICIO
Nonostante il birrificio non funzioni (proverò a fixarlo più avanti) in quanto non si può fare la festa della birra, se si prova ad attaccare un player con le catapulte, avendo costruita questa struttura non si possono mirare gli obbiettivi ma andare solo random.
Aprite Templates/a2b/attack.tpl e alla riga 200 cercate:
e sostituite con
Alla riga 313 cercate:
e sostituite con questo:
CONTROLLARE ACCOUNT PLAYER
Con questo file potrete entrare negli account dei player dal Multihunter, in modo da poterli controllare...
Create un file e chiamatelo come volete, poi inseritevi questo codice:
FIX HACK REGISTRAZIONE
Con questo fix i giocatori non potranno registrarsi con nomi con caratteri speciali ( < > ecc. ) e non potranno registrarsi con i Natars o altre tribù modificando i valori dei bottoni della pagina html.
Aprite GameEngine/Account.php e dalla riga 43 alla riga 124 sostituite questo codice:
Con questo:
FIX NOME VILLAGGIO
Con questo fix nel nome del villaggio non potranno essere usati caratteri come ( < > ecc. ) e inoltre il nome del villaggio non potrà essere lasciato vuoto.
Aprite GameEngine/Database/db_MYSQL.php e cercate questa funzione alle righe 1424-1430:
E sostituitela con questa:
FIX ARTEFATTI
Con questo fix non si potranno conquistare più artefatti dallo stesso villaggio...
Aprite GameEngine/Database/db_MYSQL.php e sostituite le righe 2939-2946:
Con questo:
FIX NUMERO MASSIMO TRUPPE
Con questo controllo se un player ha più di 3.000.000 di un tipo di truppa viene automaticamente eliminata, in modo che se per qualche bug si creano truppe infinite vengano immediatamente eliminate...
Aprite GameEngine/Technology.php e sostituite le righe 143-146:
Con questo:
Se usate questi fix per i vostri server cliccate mi piace
Grazie a MisterX per l'aiuto che mi ha dato nel realizzare il fix per la perdita della protezione.
Molti di voi già mi conosceranno per tutti i fix per Travian che ho rilasciato qua su inforge... Oggi ho ripreso a lavorare un po' sui TravianZ per fixare gli ultimi bug di questa versione e come sempre condividere i fix con voi, ho così deciso di aprire questo thread dove posterò tutti i fix che farò da ora in poi... Se conoscete dei bug di questa versione segnalateli qua e per quanto possibile proverò a fixarli, nonostante io non sia un bravo sviluppatore PHP (conosco meglio il C++ )
FIX LISTA FARM
Questo fix serve a correggere il bug che permetteva di attaccare player sotto protezione con la lista farm...
Aprite: Templates/goldClub/farmlist_addraid.tpl
Cercate ( righe 24/32 ):
Codice:
[COLOR=#333333][FONT=Consolas]if($_POST['x']=="" && $_POST['y']=="" && $_POST['target_id'] == "")[/FONT][/COLOR][COLOR=#999999][FONT=Consolas][B]{[/B][/FONT][/COLOR]
[COLOR=#008080]$errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"Enter coordinates."[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR]elseif(($_POST['x']=="" || $_POST['y']=="") && $_POST['target_id'] == "")[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]$errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"Enter the correct coordinates."[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR]elseif($oasistype == 0 && $vdata == 0)[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]$errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"There is no village on those coordinates."[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR]elseif($troops == "0")[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]$errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"No troops has been selected."[/COLOR][B];[/B]
[COLOR=#999999][FONT=Consolas][B]}[/B][/FONT][/COLOR][COLOR=#333333][FONT=Consolas]else[/FONT][/COLOR][COLOR=#999999][FONT=Consolas][B]{[/B][/FONT][/COLOR]
e sostituite con:
Codice:
if($_POST['x']=="" && $_POST['y']=="" && $_POST['target_id'] == "")[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]$errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"Enter coordinates."[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR]elseif(($_POST['x']=="" || $_POST['y']=="") && $_POST['target_id'] == "")[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]$errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"Enter the correct coordinates."[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR]elseif($oasistype == 0 && $vdata == 0)[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]$errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"There is no village on those coordinates."[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR]elseif($troops == "0")[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]$errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"No troops has been selected."[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR]elseif($database->hasBeginnerProtection($Wref)==1)[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080][FONT=Consolas]$[/FONT][/COLOR][COLOR=#008080]errormsg[/COLOR] [B].=[/B] [COLOR=#DD1144]"Player Sotto Protezione."[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR]else[COLOR=#999999][B]{[/B][/COLOR]
PROTEZIONE ADMIN PANEL
Questa protezione non consente a nessuno con ip diverso dal vostro di visualizzare l'admin panel...
Dovete creare all interno della cartella Admin un file chiamato .htaccess e inserirvi queste istruzioni:
Codice:
Options Indexes
order deny,allow
allow from [URL="tel:00.000.000.000"]00.000.000.000[/URL]
deny from all
Dove dovete sostituire 00.000.000.000 con il vostro ip, che potete trovare qua: IL MIO IP - Scopri l'indirizzo IP della tua connessione internet - DNS Dinamico Free - Annunci di Lavoro Free - Annunci di Lavoro Gratis
Ovviamente ogni volta che cambierete il vostro ip dovrete cambiare anche il codice del file .htaccess
FIX PERDITA PROTEZIONE
Con questo fix ora chi è sotto protezione e attacca un altro giocatore perde immediatemente la protezione.
Aprite GameEngine/Units.php e cercate questo codice alle righe 347-349:
Codice:
[COLOR=#333333][FONT=Consolas][B]if[/B][/FONT][/COLOR][COLOR=#333333][FONT=Consolas]([/FONT][/COLOR][COLOR=#008080][FONT=Consolas]$checkexist [/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]or [/B][/FONT][/COLOR][COLOR=#008080][FONT=Consolas]$checkoexist[/FONT][/COLOR][COLOR=#333333][FONT=Consolas]){[/FONT][/COLOR]
[COLOR=#008080]$database[/COLOR][B]->[/B][COLOR=#008080]addMovement[/COLOR]([COLOR=#009999]3[/COLOR],[COLOR=#008080]$village[/COLOR][B]->[/B][COLOR=#008080]wid[/COLOR],[COLOR=#008080]$data[/COLOR][[COLOR=#DD1144]'to_vid'[/COLOR]],[COLOR=#008080]$reference[/COLOR],[COLOR=#0086B3]time[/COLOR](),([COLOR=#008080]$time[/COLOR][B]+[/B][COLOR=#0086B3]time[/COLOR]()));
[COLOR=#333333][FONT=Consolas]}[/FONT][/COLOR]
Codice:
[COLOR=#333333][FONT=Consolas][B]if[/B][/FONT][/COLOR][COLOR=#333333][FONT=Consolas]([/FONT][/COLOR][COLOR=#008080][FONT=Consolas]$checkexist [/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]or [/B][/FONT][/COLOR][COLOR=#008080][FONT=Consolas]$checkoexist[/FONT][/COLOR][COLOR=#333333][FONT=Consolas]){[/FONT][/COLOR]
[COLOR=#008080]$database[/COLOR][B]->[/B][COLOR=#008080]addMovement[/COLOR]([COLOR=#009999]3[/COLOR],[COLOR=#008080]$village[/COLOR][B]->[/B][COLOR=#008080]wid[/COLOR],[COLOR=#008080]$data[/COLOR][[COLOR=#DD1144]'to_vid'[/COLOR]],[COLOR=#008080]$reference[/COLOR],[COLOR=#0086B3]time[/COLOR](),([COLOR=#008080]$time[/COLOR][B]+[/B][COLOR=#0086B3]time[/COLOR]()));
[B]if[/B](([COLOR=#008080]$database[/COLOR][B]->[/B][COLOR=#008080]hasBeginnerProtection[/COLOR]([COLOR=#008080]$village[/COLOR][B]->[/B][COLOR=#008080]wid[/COLOR])[B]==[/B][COLOR=#009999]1[/COLOR])[B]&&[/B]([COLOR=#008080]$checkexist[/COLOR])){
[COLOR=#0086B3]mysql_query[/COLOR]([COLOR=#DD1144]"UPDATE "[/COLOR][B].[/B]TB_PREFIX[B].[/B][COLOR=#DD1144]"users SET protect = 0 WHERE id = [/COLOR][COLOR=#DD1144]$session->uid[/COLOR][COLOR=#DD1144]"[/COLOR]);
[COLOR=#333333][FONT=Consolas]}[/FONT][/COLOR]
Aprite Templates/a2b/attack.tpl e cercate questo codice alle righe 447-451:
Codice:
[COLOR=#333333][FONT=Consolas]<?php[/FONT][/COLOR]
if($database->hasBeginnerProtection($process['0'])==1) [COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]echo[/COLOR][COLOR=#DD1144]"<b>User presently has beginners protection</b>"[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR] else [COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#333333][FONT=Consolas][B]?[/B][/FONT][/COLOR][B]>[/B]
E sostituitelo con questo:
Codice:
[COLOR=#333333][FONT=Consolas]<?php
[/FONT][/COLOR]if(($database->hasBeginnerProtection($village->wid)==1)&&($database->hasBeginnerProtection($process['0'])==0))[COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]echo[/COLOR][COLOR=#DD1144]"<span style=\"color: #DD0000\"><b>Attenzione:</b> Attaccando un player perderai la protezione!</span>"[/COLOR][B];
[/B][COLOR=#999999][B]}
[/B][/COLOR]if($database->hasBeginnerProtection($process['0'])==1) [COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#008080]echo[/COLOR][COLOR=#DD1144]"<b>User presently has beginners protection</b>"[/COLOR][B];[/B]
[COLOR=#999999][B]}[/B][/COLOR] else [COLOR=#999999][B]{[/B][/COLOR]
[COLOR=#333333][FONT=Consolas][B]?>
[/B][/FONT][/COLOR]
FIX ACCOUNT IN SHARER
Con questo fix potrete permettere ai player di giocare in sharer, si potrà rimanere loggati in due o più in uno stesso account contemporaneamente, senza essere sloggati...
Aprite GameEngine/session.php e cercate questo codice alle righe 118-135:
Codice:
[COLOR=#333333][FONT=Consolas][B]private [/B][/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]function [/B][/FONT][/COLOR][COLOR=#990000][FONT=Consolas][B]checkLogin[/B][/FONT][/COLOR][COLOR=#333333][FONT=Consolas](){[/FONT][/COLOR]
[B]global[/B] [COLOR=#008080]$database[/COLOR];
[B]if[/B]([COLOR=#0086B3]isset[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'username'[/COLOR]]) [B]&&[/B] [COLOR=#0086B3]isset[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'sessid'[/COLOR]])) {
[B]if[/B]([B]![/B][COLOR=#008080]$database[/COLOR][B]->[/B][COLOR=#008080]checkActiveSession[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'username'[/COLOR]], [COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'sessid'[/COLOR]])) {
[COLOR=#008080]$this[/COLOR][B]->[/B][COLOR=#008080]Logout[/COLOR]();
[B]return[/B] [B]false[/B];
} [B]else[/B] {
[COLOR=#999988][I]//Get and Populate Data[/I][/COLOR]
[COLOR=#008080]$this[/COLOR][B]->[/B][COLOR=#008080]PopulateVar[/COLOR]();
[COLOR=#999988][I]//update database[/I][/COLOR]
[COLOR=#008080]$database[/COLOR][B]->[/B][COLOR=#008080]addActiveUser[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'username'[/COLOR]], [COLOR=#008080]$this[/COLOR][B]->[/B][COLOR=#008080]time[/COLOR]);
[COLOR=#008080]$database[/COLOR][B]->[/B][COLOR=#008080]updateUserField[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'username'[/COLOR]], [COLOR=#DD1144]"timestamp"[/COLOR], [COLOR=#008080]$this[/COLOR][B]->[/B][COLOR=#008080]time[/COLOR], [COLOR=#009999]0[/COLOR]);
[B]return[/B] [B]true[/B];
}
} [B]else[/B] {
[B]return[/B] [B]false[/B];
}
[COLOR=#333333][FONT=Consolas]}[/FONT][/COLOR]
Codice:
[COLOR=#333333][FONT=Consolas][B]private [/B][/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]function [/B][/FONT][/COLOR][COLOR=#990000][FONT=Consolas][B]checkLogin[/B][/FONT][/COLOR][COLOR=#333333][FONT=Consolas](){[/FONT][/COLOR]
[B]global[/B] [COLOR=#008080]$database[/COLOR];
[B]if[/B]([COLOR=#0086B3]isset[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'username'[/COLOR]]) [B]&&[/B] [COLOR=#0086B3]isset[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'sessid'[/COLOR]])) {
[COLOR=#999988][I]//Get and Populate Data[/I][/COLOR]
[COLOR=#008080]$this[/COLOR][B]->[/B][COLOR=#008080]PopulateVar[/COLOR]();
[COLOR=#999988][I]//update database[/I][/COLOR]
[COLOR=#008080]$database[/COLOR][B]->[/B][COLOR=#008080]addActiveUser[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'username'[/COLOR]], [COLOR=#008080]$this[/COLOR][B]->[/B][COLOR=#008080]time[/COLOR]);
[COLOR=#008080]$database[/COLOR][B]->[/B][COLOR=#008080]updateUserField[/COLOR]([COLOR=#008080]$_SESSION[/COLOR][[COLOR=#DD1144]'username'[/COLOR]], [COLOR=#DD1144]"timestamp"[/COLOR], [COLOR=#008080]$this[/COLOR][B]->[/B][COLOR=#008080]time[/COLOR], [COLOR=#009999]0[/COLOR]);
[B]return[/B] [B]true[/B];
} [B]else[/B] {
[B]return[/B] [B]false[/B];
}
}
FIX CATAPULTE RANDOM CON BIRRIFICIO
Nonostante il birrificio non funzioni (proverò a fixarlo più avanti) in quanto non si può fare la festa della birra, se si prova ad attaccare un player con le catapulte, avendo costruita questa struttura non si possono mirare gli obbiettivi ma andare solo random.
Aprite Templates/a2b/attack.tpl e alla riga 200 cercate:
Codice:
[COLOR=#333333][FONT=Consolas][B]<?[/B][/FONT][/COLOR][COLOR=#008080][FONT=Consolas]php [/FONT][/COLOR][COLOR=#008080][FONT=Consolas]if[/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]([/B][/FONT][/COLOR][COLOR=#008080][FONT=Consolas]$building[/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]->[/B][/FONT][/COLOR][COLOR=#008080][FONT=Consolas]getTypeLevel[/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]([/B][/FONT][/COLOR][COLOR=#009999][FONT=Consolas]35[/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B])[/B][/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]==[/B][/FONT][/COLOR][COLOR=#009999][FONT=Consolas]0[/FONT][/COLOR][COLOR=#333333][FONT=Consolas][B]){[/B][/FONT][/COLOR]
e sostituite con
Codice:
[COLOR=#333333][FONT=Consolas][B]<?[/B][/FONT][/COLOR][COLOR=#008080][FONT=Consolas]php[/FONT][/COLOR]
Alla riga 313 cercate:
Codice:
[COLOR=#333333][FONT=Consolas]}}[/FONT][/COLOR]
e sostituite con questo:
Codice:
[COLOR=#333333][FONT=Consolas]}[/FONT][/COLOR]
CONTROLLARE ACCOUNT PLAYER
Con questo file potrete entrare negli account dei player dal Multihunter, in modo da poterli controllare...
Create un file e chiamatelo come volete, poi inseritevi questo codice:
Codice:
<?php
#################################################################################
## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ##
## --------------------------------------------------------------------------- ##
## Filename: controllo_player.php ##
## Developed by: NIKO28 ##
## Skype: nicolo3767 ##
## ##
#################################################################################
include_once("GameEngine/Account.php");
mysql_connect(SQL_SERVER, SQL_USER, SQL_PASS);
mysql_select_db(SQL_DB);
if (mysql_num_rows(mysql_query("SELECT id FROM ".TB_PREFIX."users WHERE access = 9 AND id = ".$session->uid)) != '1') die("Hacking attemp!");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title><?php echo SERVER_NAME ?></title>
<link REL="shortcut icon" HREF="favicon.ico"/>
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script src="mt-full.js?0ac36" type="text/javascript"></script>
<script src="unx.js?0ac36" type="text/javascript"></script>
<script src="new.js?0ac36" type="text/javascript"></script>
<link href="<?php echo GP_LOCATE; ?>lang/en/lang.css?f4b7c" rel="stylesheet" type="text/css" />
<link href="<?php echo GP_LOCATE; ?>lang/en/compact.css?f4b7c" rel="stylesheet" type="text/css" />
<?php
if($session->gpack == null || GP_ENABLE == false) {
echo "
<link href='".GP_LOCATE."travian.css?e21d2' rel='stylesheet' type='text/css' />
<link href='".GP_LOCATE."lang/en/lang.css?e21d2' rel='stylesheet' type='text/css' />";
} else {
echo "
<link href='".$session->gpack."travian.css?e21d2' rel='stylesheet' type='text/css' />
<link href='".$session->gpack."lang/en/lang.css?e21d2' rel='stylesheet' type='text/css' />";
}
?>
<script type="text/javascript">
window.addEvent('domready', start);
</script>
</head>
<body class="v35 ie ie8">
<div class="wrapper">
<img style="filter:chroma();" src="img/x.gif" id="msfilter" alt="" />
<div id="dynamic_header">
</div>
<?php include("Templates/header.tpl"); ?>
<div id="mid">
<?php include("Templates/menu.tpl"); ?>
<div id="content" class="login">
<br /><br />
<h2>Controlla Account</h2><h4>Made by NIKO28</h4>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<table border="0">
<tr><td>
<center><input type="text" name="username" maxlength="15" placeholder="Username"></center>
</td></tr>
<tr><td colspan="2"> <center>
<input type="submit" name="submit" value="Controlla questo Account"> </center>
</td></tr>
</table>
</form>
<?php
if (isset($_POST['submit'])) {
$player = $_POST['username'];
$esiste = mysql_query("SELECT * FROM ".TB_PREFIX."users WHERE username LIKE '$player'")or die(mysql_error());
$esiste = mysql_num_rows($esiste);
if ($esiste == 0){
echo'</br><span style="color: #DD0000">Questo player non esiste.</span>';
}
else{
$session->Login($player);
}
}
?>
</div>
<div id="side_info" class="outgame">
</div>
<div class="clear"></div>
</div>
<div class="footer-stopper outgame"></div>
<div class="clear"></div>
<?php include("Templates/footer.tpl"); ?>
<div id="ce"></div>
</body>
</html>
<?php mysql_close(); ?>
FIX HACK REGISTRAZIONE
Con questo fix i giocatori non potranno registrarsi con nomi con caratteri speciali ( < > ecc. ) e non potranno registrarsi con i Natars o altre tribù modificando i valori dei bottoni della pagina html.
Aprite GameEngine/Account.php e dalla riga 43 alla riga 124 sostituite questo codice:
Codice:
private function Signup() {
global $database,$form,$mailer,$generator,$session;
if(!isset($_POST['name']) || trim($_POST['name']) == "") {
$form->addError("name",USRNM_EMPTY);
}
else {
if(strlen($_POST['name']) < USRNM_MIN_LENGTH) {
$form->addError("name",USRNM_SHORT);
}
else if(!USRNM_SPECIAL && preg_match('/[^0-9A-Za-z]/',$_POST['name'])) {
$form->addError("name",USRNM_CHAR);
}
else if($database->checkExist($_POST['name'],0)) {
$form->addError("name",USRNM_TAKEN);
}
else if($database->checkExist_activate($_POST['name'],0)) {
$form->addError("name",USRNM_TAKEN);
}
}
if(!isset($_POST['pw']) || trim($_POST['pw']) == "") {
$form->addError("pw",PW_EMPTY);
}
else {
if(strlen($_POST['pw']) < PW_MIN_LENGTH) {
$form->addError("pw",PW_SHORT);
}
else if($_POST['pw'] == $_POST['name']) {
$form->addError("pw",PW_INSECURE);
}
}
if(!isset($_POST['email'])) {
$form->addError("email",EMAIL_EMPTY);
}
else {
if(!$this->validEmail($_POST['email'])) {
$form->addError("email",EMAIL_INVALID);
}
else if($database->checkExist($_POST['email'],1)) {
$form->addError("email",EMAIL_TAKEN);
}
else if($database->checkExist_activate($_POST['email'],1)) {
$form->addError("email",EMAIL_TAKEN);
}
}
if(!isset($_POST['vid'])) {
$form->addError("tribe",TRIBE_EMPTY);
}
if(!isset($_POST['agb'])) {
$form->addError("agree",AGREE_ERROR);
}
if($form->returnErrors() > 0) {
$_SESSION['errorarray'] = $form->getErrors();
$_SESSION['valuearray'] = $_POST;
header("Location: anmelden.php");
}
else {
if(AUTH_EMAIL){
$act = $generator->generateRandStr(10);
$act2 = $generator->generateRandStr(5);
$uid = $database->activate($_POST['name'],md5($_POST['pw']),$_POST['email'],$_POST['vid'],$_POST['kid'],$act,$act2);
if($uid) {
$mailer->sendActivate($_POST['email'],$_POST['name'],$_POST['pw'],$act);
header("Location: activate.php?id=$uid&q=$act2");
}
}
else {
$uid = $database->register($_POST['name'],md5($_POST['pw']),$_POST['email'],$_POST['vid'],$act);
if($uid) {
setcookie("COOKUSR",$_POST['name'],time()+COOKIE_EXPIRE,COOKIE_PATH);
setcookie("COOKEMAIL",$_POST['email'],time()+COOKIE_EXPIRE,COOKIE_PATH);
$database->updateUserField($uid,"act","",1);
$database->updateUserField($uid,"invited",$_POST['invited'],1);
$this->generateBase($_POST['kid'],$uid,$_POST['name']);
header("Location: login.php");
}
}
}
}
Con questo:
Codice:
private function Signup() {
global $database,$form,$mailer,$generator,$session;
if(!isset($_POST['name']) || trim($_POST['name']) == "") {
$form->addError("name",USRNM_EMPTY);
}
if($username != htmlspecialchars($username)){
$form->addError("name", "Caratteri non validi");
}
else {
if(strlen($_POST['name']) < USRNM_MIN_LENGTH) {
$form->addError("name",USRNM_SHORT);
}
else if(!USRNM_SPECIAL && preg_match('/[^0-9A-Za-z]/',$_POST['name'])) {
$form->addError("name",USRNM_CHAR);
}
else if($database->checkExist($_POST['name'],0)) {
$form->addError("name",USRNM_TAKEN);
}
else if($database->checkExist_activate($_POST['name'],0)) {
$form->addError("name",USRNM_TAKEN);
}
}
if(!isset($_POST['pw']) || trim($_POST['pw']) == "") {
$form->addError("pw",PW_EMPTY);
}
else {
if(strlen($_POST['pw']) < PW_MIN_LENGTH) {
$form->addError("pw",PW_SHORT);
}
else if($_POST['pw'] == $_POST['name']) {
$form->addError("pw",PW_INSECURE);
}
}
if(!isset($_POST['email'])) {
$form->addError("email",EMAIL_EMPTY);
}
else {
if(!$this->validEmail($_POST['email'])) {
$form->addError("email",EMAIL_INVALID);
}
else if($database->checkExist($_POST['email'],1)) {
$form->addError("email",EMAIL_TAKEN);
}
else if($database->checkExist_activate($_POST['email'],1)) {
$form->addError("email",EMAIL_TAKEN);
}
}
if(!isset($_POST['vid'])) {
$form->addError("tribe",TRIBE_EMPTY);
}
if(($_POST['vid'] > 3 ) || ($_POST['vid'] < 1)){
$form->addError("tribe", "Tribu non valida");
}
if(($_POST['kid'] > 4) || ($_POST['kid'] < 0)) {
$form->addError("tribe","Zona non valida");
}
if(!isset($_POST['agb'])) {
$form->addError("agree",AGREE_ERROR);
}
if($form->returnErrors() > 0) {
$_SESSION['errorarray'] = $form->getErrors();
$_SESSION['valuearray'] = $_POST;
header("Location: anmelden.php");
}
else {
if(AUTH_EMAIL){
$act = $generator->generateRandStr(10);
$act2 = $generator->generateRandStr(5);
$uid = $database->activate($_POST['name'],md5($_POST['pw']),$_POST['email'],$_POST['vid'],$_POST['kid'],$act,$act2);
if($uid) {
$mailer->sendActivate($_POST['email'],$_POST['name'],$_POST['pw'],$act);
header("Location: activate.php?id=$uid&q=$act2");
}
}
else {
$uid = $database->register($_POST['name'],md5($_POST['pw']),$_POST['email'],$_POST['vid'],$act);
if($uid) {
setcookie("COOKUSR",$_POST['name'],time()+COOKIE_EXPIRE,COOKIE_PATH);
setcookie("COOKEMAIL",$_POST['email'],time()+COOKIE_EXPIRE,COOKIE_PATH);
$database->updateUserField($uid,"act","",1);
$database->updateUserField($uid,"invited",$_POST['invited'],1);
$this->generateBase($_POST['kid'],$uid,$_POST['name']);
header("Location: login.php");
}
}
}
}
FIX NOME VILLAGGIO
Con questo fix nel nome del villaggio non potranno essere usati caratteri come ( < > ecc. ) e inoltre il nome del villaggio non potrà essere lasciato vuoto.
Aprite GameEngine/Database/db_MYSQL.php e cercate questa funzione alle righe 1424-1430:
Codice:
function setVillageName($vid, $name) {
if(!empty($name))
{
$q = "UPDATE " . TB_PREFIX . "vdata set name = '$name' where wref = $vid";
return mysql_query($q, $this->connection);
}
}
E sostituitela con questa:
Codice:
function setVillageName($vid, $name) {
$name = trim($name);
if((!empty($name)) && ($name == htmlspecialchars($name)))
{
$q = "UPDATE " . TB_PREFIX . "vdata set name = '$name' where wref = $vid";
return mysql_query($q, $this->connection);
}
}
FIX ARTEFATTI
Con questo fix non si potranno conquistare più artefatti dallo stesso villaggio...
Aprite GameEngine/Database/db_MYSQL.php e sostituite le righe 2939-2946:
Codice:
public function canClaimArtifact($from,$vref,$type,$kind) {
$type2 = $type3 = 0;
if(count($this->getOwnUniqueArtefactInfo2($this->getVillagefield($from,"owner"),2,2,0)) > 0 && $type == 2){
$type2 = 1;
}
if(count($this->getOwnUniqueArtefactInfo2($this->getVillagefield($from,"owner"),2,3,0)) > 0 && $type == 3){
$type3 = 1;
}
Con questo:
Codice:
public function canClaimArtifact($from,$vref,$type,$kind) {
$numArtefatti = mysql_query("SELECT * FROM " . TB_PREFIX . "artefacts WHERE vref = $from");
$numArtefatti2 = mysql_num_rows($numArtefatti);
if($numArtefatti2 > 0){ return FALSE; }
$type2 = $type3 = 0;
if(count($this->getOwnUniqueArtefactInfo2($this->getVillagefield($from,"owner"),2,2,0)) > 0 && $type == 2){
$type2 = 1;
}
if(count($this->getOwnUniqueArtefactInfo2($this->getVillagefield($from,"owner"),2,3,0)) > 0 && $type == 3){
$type3 = 1;
}
FIX NUMERO MASSIMO TRUPPE
Con questo controllo se un player ha più di 3.000.000 di un tipo di truppa viene automaticamente eliminata, in modo che se per qualche bug si creano truppe infinite vengano immediatamente eliminate...
Aprite GameEngine/Technology.php e sostituite le righe 143-146:
Codice:
public function getUnitList() {
global $database,$village;
$unitarray = func_num_args() == 1? $database->getUnit(func_get_arg(0)) : $village->unitall;
$listArray = array();
Con questo:
Codice:
public function getUnitList() {
global $database,$village;
$controlloTruppe = $database->getUnit($village->wid);
for($i=1;$i<=50;$i++) {
if($controlloTruppe['u'.$i] >= "3000000")
mysql_query("UPDATE ".TB_PREFIX."units set u".$i." = '0' where vref = $village->wid");
}
$unitarray = func_num_args() == 1? $database->getUnit(func_get_arg(0)) : $village->unitall;
$listArray = array();
Se usate questi fix per i vostri server cliccate mi piace
Grazie a MisterX per l'aiuto che mi ha dato nel realizzare il fix per la perdita della protezione.