Travian Fix by NIKO28

  • Autore discussione Deleted member 172943
  • Data d'inizio
Stato
Discussione chiusa ad ulteriori risposte.
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++ :lol:)


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]
E sostituitelo con questo:
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]
E sostituitelo con questo:
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.
 
Ultima modifica da un moderatore:
Aggiunto nuovo fix, se avete bug da segnalarmi contattatemi o scrivete qui :)
 
  • Mi piace
Reazioni: WonderFire58
Fix per la perdita della protezione ora funzionante al 100%, si perde la protezione solo se si attaccano giocatori, si possono quindi attaccare le oasi senza perderla e la protezione viene rimossa solo al momento in cui iniziano i movimenti delle truppe :) Appena Chris finirà la lista bug proverò a fixare anche un po' degli altri bug che ci sono ;)
 
Riguardo il fix della protezione inverti i 2 controlli, ponendo il secondo controllo dentro una elseif. In questo modo eviti di visualizzare entrambi i messaggi (avrebbe poco senso) ma te ne visualizza solo uno...
 
Così come dici tu sarebbe sbagliato secondo me perchè nel caso in cui un player avesse la protezione ti farebbe procedere lo stesso e non ti bloccherebbe l'attacco (se vedi dopo il secondo if c'è un else e se guardi tutto il codice è quello che lascia premere il pulsante ok). Al massimo si puo fare che visualizza il primo messaggio solo se il player che attacchi non ha la protezione... Ora lo faccio ;)
 
No, il codice sarebbe questo:

<?php
if($database->hasBeginnerProtection($process['0'])==1)
{
echo"<b>User presently has beginners protection</b>";
}
elseif(($database->hasBeginnerProtection($village->wid)==1)&&($database->hasBeginnerProtection($process['0'])==0))
{
echo"<span style=\"color: #DD0000\"><b>Attenzione:</b> Attaccando un player perderai la protezione!</span>";
}
?>

In questo modo:

Se il difensore è protetto ti avvisa e stop; se il difensore non è protetto controlla che l'attaccante non sia protetto avvisandolo; se ne il difensore, ne l'attaccante son protetti... prosegue ^^

PS: come diavolo faccio a visualizzare l'editor per poter inserire i tag, o il grassetto, o i colori (non mi viene il nome)? :(
 
No, il codice sarebbe questo:

<?php
if($database->hasBeginnerProtection($process['0'])==1)
{
echo"<b>User presently has beginners protection</b>";
}
elseif(($database->hasBeginnerProtection($village->wid)==1)&&($database->hasBeginnerProtection($process['0'])==0))
{
echo"<span style=\"color: #DD0000\"><b>Attenzione:</b> Attaccando un player perderai la protezione!</span>";
}
?>

In questo modo:

Se il difensore è protetto ti avvisa e stop; se il difensore non è protetto controlla che l'attaccante non sia protetto avvisandolo; se ne il difensore, ne l'attaccante son protetti... prosegue ^^

PS: come diavolo faccio a visualizzare l'editor per poter inserire i tag, o il grassetto, o i colori (non mi viene il nome)? :(

Ci vuole un altro else all fine del tuo codice ;) se controlli il codice completo nei travianz lo capisci :) Comunque ho risolto pure come ho fatto io... Per l'editor basta che fai modalità avvanzata :D
 
Ultima modifica:
Eccomiiiiiiiiii

Sto testando la versione ND

Bug riscontrati:

-MOLTIPLICAZIONE DECURIONI

Andando sulla farm list e avendo sul villo 3 decu, dalla farm lis è possibile mandarli in raid, ma i decurioni che sono sul villo non si muovono ovvero in raid partono altri 3 decurioni che tornando dal raid si vanno a sommare ai 3 che erano già presenti sul villo e quindi arriviamo a 6, se poi andiamo a modificare in farm list cambiando il tanto da 3 (messi prima) a 6 (che abbiamo adesso) ne partono sei, che poi si andranno a sommare a quei 6 che già avevamo.

-MULTI ARTEFATTI O PIANI DI COSTRUZIONE

Con Camera del tesoro a 10 sono riuscito a prendere 2 piani di costruzione sullo stesso villaggio. E con camera del tesoro a 20 penso si possano prendere svariati artefatti, sempre sullo stesso villo.

-NON SI POSSONO MIRARE LE STRUTTURE CON LE CATAPULTE SE...

...abbiamo sul villo il birrificio. C'è un file che no mi ricordo che fa un controllo, e se abbiamo il birrificio non ci fa mirare obbiettivi con le kata.

-BIRRIFICIO INUTILE

La struttura presente qualche problema, non è infatti possibile effettuare la festa della birra...

IN PANNELLO ADMIN:
-NON SI RIESCONO A MODIFICARE GOLD DALLA SCHERMATA UTENTE

-NON SI RIESCONO A MODIFICARE I PUNTI CULTURA DALLA SCHERMATA UTENTE

-NON SI RIESCE A MODIFICARE IL NOME DEL VILLAGGIO DALLA SCHERMATA UTENTE

-NON SI RIESCE A MODIFICARE UNA ALLEANZA

-NON SI POSSONO AGGIUNGERE VILLAGGI AD UN PLAYER


Ovvero il villaggio aggiunto viene creato ma non ha coordinate e si incasina il server.

-NON SI POSSONO CANCELLARE LE TRUPPE AD UN PLAYER DA SCHERMATA PLAYER PRINCIPALE

Mi riferisco alla scritta Delete Troops


BUG INSPIEGABILI:


I miei tester sono riusciti a far sparire un eroe, ma non si sa ancora come abbiano fatto... (attendo con ansia il system di misterx :D)
Sono riusciti a moltiplicare i decurioni arrivando ad averne 429miliardi etc etc appena so come hanno fatto posto anche quello.

-BUG DECURIONI SPIEGAZIONE:

Quando si hanno 3 decurioni sul villo e si è prossimi a fondare aprendo la mappa, aprendo con la rotellina vari villaggi, cliccando su found new village, cliccando su ok e mandando a fondare in tutti i villi aperti i decu sul villo diventano 429miliardi etc.

Riusciranno i nostri eroi a fixare questo bug? :D

Questi sono i bug fino a questo momento... a man mano che trovo aggiorno... e man mano che sistemate e provo elimino dalla lista.

Thanks a lot.

-CHRIS-
 
Ook :) Grande Chris... Per il bug delle cara mi ha già fatto vedere crow ;) quando arrivo a casa pubblico il fix... Per gli altri proverò a fixare :D il birrificio potremmo provare a farlo... Magari insieme a MisterX ;)
 
Ook :) Grande Chris... Per il bug delle cara mi ha già fatto vedere crow ;) quando arrivo a casa pubblico il fix... Per gli altri proverò a fixare :D il birrificio potremmo provare a farlo... Magari insieme a MisterX ;)


Niko se ti va di collaborare io quando ho tempo sono più che disposto a completare la mia ultimissima versione :) è super fixata tra i tuoi e miei fix...e ha anche aggiunte tipo SGH (system generation hero xD ahahahah) poi il mio system antihack per il pannello admin e il mio ultimissimo system antihack per giocatori completato al 100% :D e ho già fixato anche il bug dei decurioni ;) ho già idee innovative per i bug inspiegabili :D

Saluti

MisterX
 
Ai dboor ci sto lavorando da un po', ma per aprire un mio server, poi quando ho tempo faccio qualche fix per i travianZ...
 
Lo so, ma va decodificato... E si creano numerosi bug faccendolo
 
si trovano cmq i files buoni decodificati ,basta cercare bene oppure usare il vecchio metodo di sempre pagare ,purtroppo e un business
 
Be, io non ho intenzione di comprarli quindi ci lavoro io, e per ora sto riuscendo a decodificarli e fixarli... Anche se ci metterò tempo, ma non ho fretta :)
 
Ci sono diversi decompilatori, li puoi trovare in rete, basta che cerchi con google, ma dopo aver decodificato i file oltre a errori di sintassi probabilmente si creerà pure qualche bug ;)

- - - Updated - - -

Creato e aggiunto uno script che permette di entrare negli account dei player dal Multihunter :)
 
Lo so, ma va decodificato... E si creano numerosi bug faccendolo

I file puoi anche farli girare da codificati (basta che sia installato l'estensione php di ioncube sul server... quindi scordatevi i free host) ma sono buggati... e se vuoi sbuggarli ovviamente devi decodificare.
 
Niko,ho chiesto anche a sunjoin ,adesso lo chiedo pure a te se potresti creare un fix di questo bug
1 1 1,4 1 0,1 1 0,3 1 0,2 1 0,2 1 0,3 1 0,4 1 0,4 2 0,3 1 0,3 1 0,4 1 0,4 1 0,1 1 0,4 1 0,2 1 0,1 1 0,2 1 0,26 1 1,0 0 0,0 0 0,19 3 0,0 0 0,22 7 0,23 2 0,15 12 0,0 0 0,0 0 0,18 1 0,0 0 0,0 0 0,0 0 0,17 1 0,0 0 0,10 3 0,11 3 0,0 0 0,0 0 0,16 1 0,0 0 0

l'ultimo numero deve essere perforza zero ,dunque per esempio il 26 1 1, deve essere 26 1 0, il primo rappresenta l edificio in questo esempio il castello poi il secondo il suo livello e il terzo deve essere perforza zero

grazie
 
Non ho capito qual'è il bug scusa, è la tabella fdata quella? Cosa succede se il 3 numero non è 0? Bisogna solo correggere la tabella? Oppure sono sbagliato gli update? Spiegati meglio :)
 
è una tabella dboor quella ,e come lo fai ,devi spezzare?
hai un bug di livello se non è zero l ultimo numero per esempio non arriva piu al livello 20 ma si ferma al livello 19 e dice che e il massimo del livello invece ,e colpa dello zero che non c e
 
Ah pensavo parlassi dei TravianZ, io sto lavorando ai dboor per conto mio, e la mia versione non ha quel bug... Ma per ora non rilascio i file... Qui comunque si parla dei TravianZ quindi non andiamo OT
 
Stato
Discussione chiusa ad ulteriori risposte.