Znote Premium_ends_at

Alex

Administrator
Dev
Messages
2,352
Points
707
Para el valor del Premium_ends_at, que es lo que significa el premium days para las cuentas:

JavaScript:
$register_data['premium_ends_at'] ='1726562004'; <--- Este valor es caduco

Se inserta en engine/function/users.php , debajo de la linea:
JavaScript:
if (config('ServerEngine') == 'TFS_10') $register_data['creation'] = $created;


Entonces, como calcular ese tiempo ? Porqué claro, no podemos mantener ese tiempo de premium days para siempre, sabiendo que es un UnixTime y ese Time corre.

Entonces de una para saber el valor del tiempo en el cual estamos en 2024, iremos aqui: https://www.unixtimestamp.com/

Despues, de ahi, si quieren agregar dias de premium:

1 Dia corresponde a 86400 segundos, por lo cual =

Cogeran el valor UnixTime de la web + 86400 tantas veces que desean en dias.

Ejemplo: Quiero 10 Dias son 864000 + UnixTime = 1715523904 <-- Este valor lo pondremos en la primera linea del codigo.
 
la manera mas sencilla para añadir 30 dias de premium account a las cuentas nuevas, me parecio que era desde el mismo momento del registro de la cuenta, que esta apenas se registre, se añadan 30 dias de premium, el calculo se hace automatico a partir de la fecha de registro.

Screenshot_178.png

register.php

PHP:
<?php
require_once 'engine/init.php';
logged_in_redirect();
include 'layout/overall/header_register.php';
require_once('config.countries.php');

if (empty($_POST) === false) {
    // $_POST['']
    $required_fields = array('username', 'password', 'password_again', 'email', 'selected');
    foreach($_POST as $key=>$value) {
        if (empty($value) && in_array($key, $required_fields) === true) {
            $errors[] = 'You need to fill in all fields.';
            break 1;
        }
    }

    // check errors (= user exist, pass long enough
    if (empty($errors) === true) {
        /* Token used for cross site scripting security */
        if (!Token::isValid($_POST['token'])) {
            $errors[] = 'Token is invalid.';
        }

        if ($config['use_captcha']) {
            if(!verifyGoogleReCaptcha($_POST['g-recaptcha-response'])) {
                $errors[] = "Please confirm that you're not a robot.";
            }
        }

        if (user_exist($_POST['username']) === true) {
            $errors[] = 'Sorry, that username already exist.';
        }

        // Don't allow "default admin names in config.php" access to register.
        $isNoob = in_array(strtolower($_POST['username']), $config['page_admin_access']) ? true : false;
        if ($isNoob) {
            $errors[] = 'This account name is blocked for registration.';
        }
        if ($config['ServerEngine'] !== 'OTHIRE' && $config['client'] >= 830) {
            if (preg_match("/^[a-zA-Z0-9]+$/", $_POST['username']) == false) {
                $errors[] = 'Your account name can only contain characters a-z, A-Z and 0-9.';
            }
        } else {
            if (preg_match("/^[0-9]+$/", $_POST['username']) == false) {
                $errors[] = 'Your account can only contain numbers 0-9.';
            }
            if ((int)$_POST['username'] < 100000 || (int)$_POST['username'] > 999999999) {
                $errors[] = 'Your account number must be a value between 6-8 numbers long.';
            }
        }
        // name restriction
        $resname = explode(" ", $_POST['username']);
        foreach($resname as $res) {
            if(in_array(strtolower($res), $config['invalidNameTags'])) {
                $errors[] = 'Your username contains a restricted word.';
            }
            else if(strlen($res) == 1) {
                $errors[] = 'Too short words in your name.';
            }
        }
        if (strlen($_POST['username']) > 32) {
            $errors[] = 'Your account name must be less than 33 characters.';
        }
        // end name restriction
        if (strlen($_POST['password']) < 6) {
            $errors[] = 'Your password must be at least 6 characters.';
        }
        if (strlen($_POST['password']) > 29) {
            $errors[] = 'Your password must be less than 30 characters.';
        }
        if ($_POST['password'] !== $_POST['password_again']) {
            $errors[] = 'Your passwords do not match.';
        }
        if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
            $errors[] = 'A valid email address is required.';
        }
        if (user_email_exist($_POST['email']) === true) {
            $errors[] = 'That email address is already in use.';
        }
        if ($_POST['selected'] != 1) {
            $errors[] = 'You are only allowed to have an account if you accept the rules.';
        }
        if (validate_ip(getIP()) === false && $config['validate_IP'] === true) {
            $errors[] = 'Failed to recognize your IP address. (Not a valid IPv4 address).';
        }
        if (strlen($_POST['flag']) < 1) {
            $errors[] = 'Please choose country.';
        }
    }
}

?>
<center>
<div class="InnerTableContainer"> 
    <div class="TableContentContainer">
    <h1>&nbsp;&nbsp;&nbsp;&nbsp;Register Account</h1>
<?php
if (isset($_GET['success']) && empty($_GET['success'])) {
    if ($config['mailserver']['register']) {
        ?>
        <h1>Email authentication required</h1>
        <p>We have sent you an email with an activation link to your submitted email address.</p>
        <p>If you can't find the email within 5 minutes, check your <strong>junk/trash inbox (spam filter)</strong> as it may be mislocated there.</p>
        <?php
    } else echo 'Congratulations! Your account has been created. You may now login to create a character.<br></br>
    <form action="login.php" method="post">
    <ul id="login">
        <div>
            Username: <br>
            <input type="text" name="username">
        </div>
        <div>
            Password: <br>
            <input type="password" name="password">
        </div>
        <div>
            <input type="submit" value="Log in">
        </div>
        <?php
            /* Form file */
            Token::create();
        ?>
        <br></br>
    <br>
    <font size="1">- Lost <a href="recovery.php?mode=username">username</a> or <a href="recovery.php?mode=password">password</a>?</font>
    </ul>
    </form>';
} elseif (isset($_GET['authenticate']) && empty($_GET['authenticate'])) {
    // Authenticate user, fetch user id and activation key
    $auid = (isset($_GET['u']) && (int)$_GET['u'] > 0) ? (int)$_GET['u'] : false;
    $akey = (isset($_GET['k']) && (int)$_GET['k'] > 0) ? (int)$_GET['k'] : false;
    // Find a match
    $user = mysql_select_single("SELECT `id`, `active`, `active_email` FROM `znote_accounts` WHERE `account_id`='$auid' AND `activekey`='$akey' LIMIT 1;");
    if ($user !== false) {
        $user = (int) $user['id'];
        $active = (int) $user['active'];
        $active_email = (int) $user['active_email'];
        // Enable the account to login
        if ($active == 0 || $active_email == 0) {
            mysql_update("UPDATE `znote_accounts` SET `active`='1', `active_email`='1' WHERE `id`= $user LIMIT 1;");
        }
        echo '<h1>Congratulations!</h1> <p>Your account has been created. You may now login to create a character.</p>';
    } else {
        echo '<h1>Authentication failed</h1> <p>Either the activation link is wrong, or your account is already activated.</p>';
    }
} else {
    if (empty($_POST) === false && empty($errors) === true) {
        if ($config['log_ip']) {
            znote_visitor_insert_detailed_data(1);
        }

        // Calcular 30 días de premium (30 días * 24 horas * 60 minutos * 60 segundos)
        $premium_end_time = time() + (30 * 24 * 60 * 60);

        // Register
        if ($config['ServerEngine'] !== 'OTHIRE') {
            $register_data = array(
                'name'          =>  $_POST['username'],
                'password'      =>  $_POST['password'],
                'email'         =>  $_POST['email'],
                'created'       =>  time(),
                'ip'            =>  getIPLong(),
                'flag'          =>  $_POST['flag'],
                'premium_ends_at' => $premium_end_time // Agregar los 30 días de premium
            );
        } else {
            $register_data = array(
                'id'            =>  $_POST['username'],
                'password'      =>  $_POST['password'],
                'email'         =>  $_POST['email'],
                'created'       =>  time(),
                'ip'            =>  getIPLong(),
                'flag'          =>  $_POST['flag'],
                'premium_ends_at' => $premium_end_time // Agregar los 30 días de premium
            );
        }

        user_create_account($register_data, $config['mailserver']);
        if (!$config['mailserver']['debug']) header('Location: register.php?success');
        exit();
    } else if (empty($errors) === false) {
        echo '<font color="red"><b>';
        echo output_errors($errors);
        echo '</b></font>';
    }
?>

    <form action="" method="post">
        <ul>
            <div>
                Account Name:<br>
                <input type="text" name="username">
            </div>
            <div>
                Password:<br>
                <input type="password" name="password">
            </div>
            <div>
                Password again:<br>
                <input type="password" name="password_again">
            </div>
            <div>
                Email:<br>
                <input type="text" name="email">
            </div>
            <div>
                Country:<br>
                <select name="flag">
                    <option value="">(Please choose)</option>
                    <?php
                    foreach(array('pl', 'se', 'br', 'us', 'gb', ) as $c)
                        echo '<option value="' . $c . '">' . $config['countries'][$c] . '</option>';

                        echo '<option value="">----------</option>';
                        foreach($config['countries'] as $code => $c)
                            echo '<option value="' . $code . '">' . $c . '</option>';
                    ?>
                </select>
            </div>
            <?php
            if ($config['use_captcha']) {
                ?>
                <div>
                     <div class="g-recaptcha" data-sitekey="<?php echo $config['captcha_site_key']; ?>"></div>
                </div>
                <?php
            }
            ?><br>
            <div><b>World Type:</b></div>
            <img src="layout/images/global/images/option_server_pvp_type_open.gif">
            <div><input type="radio" checked="checked"> <b>Open PvP</b></div>
            <br>
            <div><b>World Server:</b></div>
            <img src="layout/images/global/images/option_server_location_all.png">
            <div><input type="radio" checked="checked"> <b><?php echo $config['site_title']; ?></b></div>
            <div>
                <h2>Server Rules</h2>
                <p>The golden rule: Have fun.</p>
                <p>If you get pwn3d, don't hate the game.</p>
                <p>No <a href='https://en.wikipedia.org/wiki/Cheating_in_video_games' target="_blank">cheating</a> allowed.</p>
                <p>No <a href='https://en.wikipedia.org/wiki/Video_game_bot' target="_blank">botting</a> allowed.</p>
                <p>The staff can delete, ban, do whatever they want with your account and your <br>
                    submitted information. (Including exposing and logging your IP).</p>
            </div><br>
            <div>
                Do you agree to follow the server rules?<br>
                <select name="selected">
                  <option value="0">Umh...</option>
                  <option value="1">Yes.</option>
                  <option value="2">No.</option>
                </select>
            </div><br>
            <?php
                /* Form file */
                Token::create();
            ?>
            <div>
                <input type="submit" value="Create Account">
            </div>
        </ul>
    </form></div></div></center>
<?php
}
include 'layout/overall/footer.php';
?>
 
la manera mas sencilla para añadir 30 dias de premium account a las cuentas nuevas, me parecio que era desde el mismo momento del registro de la cuenta, que esta apenas se registre, se añadan 30 dias de premium, el calculo se hace automatico a partir de la fecha de registro.

View attachment 5054

register.php

PHP:
<?php
require_once 'engine/init.php';
logged_in_redirect();
include 'layout/overall/header_register.php';
require_once('config.countries.php');

if (empty($_POST) === false) {
    // $_POST['']
    $required_fields = array('username', 'password', 'password_again', 'email', 'selected');
    foreach($_POST as $key=>$value) {
        if (empty($value) && in_array($key, $required_fields) === true) {
            $errors[] = 'You need to fill in all fields.';
            break 1;
        }
    }

    // check errors (= user exist, pass long enough
    if (empty($errors) === true) {
        /* Token used for cross site scripting security */
        if (!Token::isValid($_POST['token'])) {
            $errors[] = 'Token is invalid.';
        }

        if ($config['use_captcha']) {
            if(!verifyGoogleReCaptcha($_POST['g-recaptcha-response'])) {
                $errors[] = "Please confirm that you're not a robot.";
            }
        }

        if (user_exist($_POST['username']) === true) {
            $errors[] = 'Sorry, that username already exist.';
        }

        // Don't allow "default admin names in config.php" access to register.
        $isNoob = in_array(strtolower($_POST['username']), $config['page_admin_access']) ? true : false;
        if ($isNoob) {
            $errors[] = 'This account name is blocked for registration.';
        }
        if ($config['ServerEngine'] !== 'OTHIRE' && $config['client'] >= 830) {
            if (preg_match("/^[a-zA-Z0-9]+$/", $_POST['username']) == false) {
                $errors[] = 'Your account name can only contain characters a-z, A-Z and 0-9.';
            }
        } else {
            if (preg_match("/^[0-9]+$/", $_POST['username']) == false) {
                $errors[] = 'Your account can only contain numbers 0-9.';
            }
            if ((int)$_POST['username'] < 100000 || (int)$_POST['username'] > 999999999) {
                $errors[] = 'Your account number must be a value between 6-8 numbers long.';
            }
        }
        // name restriction
        $resname = explode(" ", $_POST['username']);
        foreach($resname as $res) {
            if(in_array(strtolower($res), $config['invalidNameTags'])) {
                $errors[] = 'Your username contains a restricted word.';
            }
            else if(strlen($res) == 1) {
                $errors[] = 'Too short words in your name.';
            }
        }
        if (strlen($_POST['username']) > 32) {
            $errors[] = 'Your account name must be less than 33 characters.';
        }
        // end name restriction
        if (strlen($_POST['password']) < 6) {
            $errors[] = 'Your password must be at least 6 characters.';
        }
        if (strlen($_POST['password']) > 29) {
            $errors[] = 'Your password must be less than 30 characters.';
        }
        if ($_POST['password'] !== $_POST['password_again']) {
            $errors[] = 'Your passwords do not match.';
        }
        if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
            $errors[] = 'A valid email address is required.';
        }
        if (user_email_exist($_POST['email']) === true) {
            $errors[] = 'That email address is already in use.';
        }
        if ($_POST['selected'] != 1) {
            $errors[] = 'You are only allowed to have an account if you accept the rules.';
        }
        if (validate_ip(getIP()) === false && $config['validate_IP'] === true) {
            $errors[] = 'Failed to recognize your IP address. (Not a valid IPv4 address).';
        }
        if (strlen($_POST['flag']) < 1) {
            $errors[] = 'Please choose country.';
        }
    }
}

?>
<center>
<div class="InnerTableContainer">
    <div class="TableContentContainer">
    <h1>&nbsp;&nbsp;&nbsp;&nbsp;Register Account</h1>
<?php
if (isset($_GET['success']) && empty($_GET['success'])) {
    if ($config['mailserver']['register']) {
        ?>
        <h1>Email authentication required</h1>
        <p>We have sent you an email with an activation link to your submitted email address.</p>
        <p>If you can't find the email within 5 minutes, check your <strong>junk/trash inbox (spam filter)</strong> as it may be mislocated there.</p>
        <?php
    } else echo 'Congratulations! Your account has been created. You may now login to create a character.<br></br>
    <form action="login.php" method="post">
    <ul id="login">
        <div>
            Username: <br>
            <input type="text" name="username">
        </div>
        <div>
            Password: <br>
            <input type="password" name="password">
        </div>
        <div>
            <input type="submit" value="Log in">
        </div>
        <?php
            /* Form file */
            Token::create();
        ?>
        <br></br>
    <br>
    <font size="1">- Lost <a href="recovery.php?mode=username">username</a> or <a href="recovery.php?mode=password">password</a>?</font>
    </ul>
    </form>';
} elseif (isset($_GET['authenticate']) && empty($_GET['authenticate'])) {
    // Authenticate user, fetch user id and activation key
    $auid = (isset($_GET['u']) && (int)$_GET['u'] > 0) ? (int)$_GET['u'] : false;
    $akey = (isset($_GET['k']) && (int)$_GET['k'] > 0) ? (int)$_GET['k'] : false;
    // Find a match
    $user = mysql_select_single("SELECT `id`, `active`, `active_email` FROM `znote_accounts` WHERE `account_id`='$auid' AND `activekey`='$akey' LIMIT 1;");
    if ($user !== false) {
        $user = (int) $user['id'];
        $active = (int) $user['active'];
        $active_email = (int) $user['active_email'];
        // Enable the account to login
        if ($active == 0 || $active_email == 0) {
            mysql_update("UPDATE `znote_accounts` SET `active`='1', `active_email`='1' WHERE `id`= $user LIMIT 1;");
        }
        echo '<h1>Congratulations!</h1> <p>Your account has been created. You may now login to create a character.</p>';
    } else {
        echo '<h1>Authentication failed</h1> <p>Either the activation link is wrong, or your account is already activated.</p>';
    }
} else {
    if (empty($_POST) === false && empty($errors) === true) {
        if ($config['log_ip']) {
            znote_visitor_insert_detailed_data(1);
        }

        // Calcular 30 días de premium (30 días * 24 horas * 60 minutos * 60 segundos)
        $premium_end_time = time() + (30 * 24 * 60 * 60);

        // Register
        if ($config['ServerEngine'] !== 'OTHIRE') {
            $register_data = array(
                'name'          =>  $_POST['username'],
                'password'      =>  $_POST['password'],
                'email'         =>  $_POST['email'],
                'created'       =>  time(),
                'ip'            =>  getIPLong(),
                'flag'          =>  $_POST['flag'],
                'premium_ends_at' => $premium_end_time // Agregar los 30 días de premium
            );
        } else {
            $register_data = array(
                'id'            =>  $_POST['username'],
                'password'      =>  $_POST['password'],
                'email'         =>  $_POST['email'],
                'created'       =>  time(),
                'ip'            =>  getIPLong(),
                'flag'          =>  $_POST['flag'],
                'premium_ends_at' => $premium_end_time // Agregar los 30 días de premium
            );
        }

        user_create_account($register_data, $config['mailserver']);
        if (!$config['mailserver']['debug']) header('Location: register.php?success');
        exit();
    } else if (empty($errors) === false) {
        echo '<font color="red"><b>';
        echo output_errors($errors);
        echo '</b></font>';
    }
?>

    <form action="" method="post">
        <ul>
            <div>
                Account Name:<br>
                <input type="text" name="username">
            </div>
            <div>
                Password:<br>
                <input type="password" name="password">
            </div>
            <div>
                Password again:<br>
                <input type="password" name="password_again">
            </div>
            <div>
                Email:<br>
                <input type="text" name="email">
            </div>
            <div>
                Country:<br>
                <select name="flag">
                    <option value="">(Please choose)</option>
                    <?php
                    foreach(array('pl', 'se', 'br', 'us', 'gb', ) as $c)
                        echo '<option value="' . $c . '">' . $config['countries'][$c] . '</option>';

                        echo '<option value="">----------</option>';
                        foreach($config['countries'] as $code => $c)
                            echo '<option value="' . $code . '">' . $c . '</option>';
                    ?>
                </select>
            </div>
            <?php
            if ($config['use_captcha']) {
                ?>
                <div>
                     <div class="g-recaptcha" data-sitekey="<?php echo $config['captcha_site_key']; ?>"></div>
                </div>
                <?php
            }
            ?><br>
            <div><b>World Type:</b></div>
            <img src="layout/images/global/images/option_server_pvp_type_open.gif">
            <div><input type="radio" checked="checked"> <b>Open PvP</b></div>
            <br>
            <div><b>World Server:</b></div>
            <img src="layout/images/global/images/option_server_location_all.png">
            <div><input type="radio" checked="checked"> <b><?php echo $config['site_title']; ?></b></div>
            <div>
                <h2>Server Rules</h2>
                <p>The golden rule: Have fun.</p>
                <p>If you get pwn3d, don't hate the game.</p>
                <p>No <a href='https://en.wikipedia.org/wiki/Cheating_in_video_games' target="_blank">cheating</a> allowed.</p>
                <p>No <a href='https://en.wikipedia.org/wiki/Video_game_bot' target="_blank">botting</a> allowed.</p>
                <p>The staff can delete, ban, do whatever they want with your account and your <br>
                    submitted information. (Including exposing and logging your IP).</p>
            </div><br>
            <div>
                Do you agree to follow the server rules?<br>
                <select name="selected">
                  <option value="0">Umh...</option>
                  <option value="1">Yes.</option>
                  <option value="2">No.</option>
                </select>
            </div><br>
            <?php
                /* Form file */
                Token::create();
            ?>
            <div>
                <input type="submit" value="Create Account">
            </div>
        </ul>
    </form></div></div></center>
<?php
}
include 'layout/overall/footer.php';
?>
PD: se hace automatica la conversion de tiempo a UnixTime y se inserta en la tabla correspondiente
 
Top