Olá Convidado,
A sua idade é de 0 anos e registou-se em Qua Dez 31, 1969, desde esta data, já postou 0 mensagens. A sua última visita foi Qua Dez 31, 1969.

Participe do fórum, é rápido e fácil

Olá Convidado,
A sua idade é de 0 anos e registou-se em Qua Dez 31, 1969, desde esta data, já postou 0 mensagens. A sua última visita foi Qua Dez 31, 1969.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.


2 participantes

    [v83][MoopleDEV] Como por AutoRegister na sua source MoopleDEV!

    ~Victor~
    ~Victor~
    Coordenador
    Coordenador


    Advertencias : Normal
    Mensagens Mensagens : 22
    Mesos Mesos : 43520
    Data de inscrição : 06/05/2012
    Idade Idade : 26

    Pedra [v83][MoopleDEV] Como por AutoRegister na sua source MoopleDEV!

    Mensagem por ~Victor~ Dom maio 06, 2012 5:07 pm

    O Que é Auto Register?
    AutoRegister é um jeito para seus players não precisarem se cadastrar pelo site, e sim na hora de login.

    Como Funciona?
    Na Tela do login, já no jogo, é só escrever o login e senha que você quer cadastrar e clicar em "Log in", que sua conta vai cadastrar e automaticamente já logar.


    Para Colocar o AutoRegister, abra o seu Netbeans, abra a classe "client", e em seguida crie um arquivo novo com o nome AutoRegister.java, e abra esse arquivo (DETALHE: NO NETBEANS)
    Quando abrir, coloque esse código:

    Código:
    package client;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.ResultSet;
    import tools.DatabaseConnection;

    public class AutoRegister {

        private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MapleClient.class);
        private static final int ACCOUNTS_PER_IP = 3;
        public static final boolean autoRegister = true;
        public static boolean success;

        public static boolean getAccountExists(String login) {
            boolean accountExists = false;
            Connection con = DatabaseConnection.getConnection();
            try {
                PreparedStatement ps = con.prepareStatement("SELECT name FROM accounts WHERE name = ?");
                ps.setString(1, login);
                ResultSet rs = ps.executeQuery();
                if (rs.first()) {
                    accountExists = true;
                }
            } catch (Exception ex) {
            }
            return accountExists;
        }

        public static void createAccount(String login, String pwd, String eip) {
            String sockAddr = eip;
            Connection con;
            try {
                con = DatabaseConnection.getConnection();
            } catch (Exception ex) {
                log.error("ERROR", ex);
                return;
            }
            try {
                PreparedStatement ipc = con.prepareStatement("SELECT lastknownip FROM accounts WHERE lastknownip = ?");
                ipc.setString(1, sockAddr.substring(1, sockAddr.lastIndexOf(':')));
                ResultSet rs = ipc.executeQuery();
                if (rs.first() == false || rs.last() == true && rs.getRow() < ACCOUNTS_PER_IP) {
                    try {
                        PreparedStatement ps = con.prepareStatement("INSERT INTO accounts (name, password, email, birthday, macs, lastknownip) VALUES (?, ?, ?, ?, ?, ?)");
                        ps.setString(1, login);
                        ps.setString(2, pwd);//sem encripitacao <3
                        ps.setString(3, "no@email.provided");
                        ps.setString(4, "0000-00-00");
                        ps.setString(5, "00-00-00-00-00-00");
                        ps.setString(6, sockAddr.substring(1, sockAddr.lastIndexOf(':')));
                        ps.executeUpdate();
                        ps.close();
                        success = true;
                    } catch (SQLException ex) {
                        log.error("ERROR", ex);
                        return;
                    }
                }
                ipc.close();
                rs.close();
            } catch (SQLException ex) {
                log.error("Tem alguma coisa errada com o autoregister.\r\n" + ex);
            }
        }


    Agora, vá até net.login.handler/LoginPasswordHandler.java e delete tudo o quê está escrito, e coloque isso:

    Código:
    /*
        This file is part of the OdinMS Maple Story Server
        Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
                  Matthias Butz <matze@odinms.de>
                  Jan Christian Meyer <vimes@odinms.de>

        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU Affero General Public License as
        published by the Free Software Foundation version 3 as published by
        the Free Software Foundation. You may not use, modify or distribute
        this program under any other version of the GNU Affero General Public
        License.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU Affero General Public License for more details.

        You should have received a copy of the GNU Affero General Public License
        along with this program.  If not, see <http://www.gnu.org/licenses/>.
    */
    package net.login.handler;

    import client.AutoRegister;
    import client.MapleCharacter;
    import client.MapleClient;
    import java.util.Calendar;
    import net.MaplePacketHandler;
    import net.channel.ChannelServer;
    import server.TimerManager;
    import tools.DateUtil;
    import tools.MaplePacketCreator;
    import tools.data.input.SeekableLittleEndianAccessor;

    public final class LoginPasswordHandler implements MaplePacketHandler {
        public boolean validateState(MapleClient c) {
            return !c.isLoggedIn();
        }
    ChannelServer cserv;
    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MapleClient.class);
    public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
            int loginok = 0;
            String login = slea.readMapleAsciiString();
            String pwd = slea.readMapleAsciiString();
            c.setAccountName(login);
            final boolean isBanned = c.hasBannedIP() || c.hasBannedMac();

            boolean ipBan = c.hasBannedIP();
            boolean macBan = c.hasBannedMac();
            if (AutoRegister.getAccountExists(login)) {
                loginok = c.login(login, pwd, ipBan || macBan);
            } else if (AutoRegister.success = true && (!ipBan || !macBan)) {
                AutoRegister.createAccount(login, pwd, c.getSession().getRemoteAddress().toString());
                if (AutoRegister.success) {
                    loginok = c.login(login, pwd, ipBan || macBan);
                }
            } else loginok = c.login(login, pwd, ipBan || macBan);
            if (loginok == 0 && isBanned) {
                loginok = 3;
                MapleCharacter.ban(c.getSession().getRemoteAddress().toString().split(":")[0], "Mac/IP Re-ban", false);
            } else if (loginok != 0) {
                c.announce(MaplePacketCreator.getLoginFailed(loginok));
                return;
            }
            if (c.finishLogin() == 0) {
                c.announce(MaplePacketCreator.getAuthSuccess(c, c.getAccountName()));
                final MapleClient client = c;
                c.setIdleTask(TimerManager.getInstance().schedule(new Runnable() {
                    public void run() {
                        client.getSession().close(true);
                    }
                }, 600000));
            } else {
                c.announce(MaplePacketCreator.getLoginFailed(7));
            }
        }

    E Agora compile!


    Após compilar, vá até o seu banco de dados, e execute esta query:

    Código:
    ALTER TABLE `accounts` ADD COLUMN `lastknownip` VARCHAR(30) NOT NULL DEFAULT '' AFTER `macs`;
    ALTER TABLE `accounts` ADD COLUMN `email` VARCHAR(255) NOT NULL DEFAULT '' AFTER `pic`;



    E Pronto, seu servidor está funcionando o AutoRegister =]


    -----------------
    Créditos:
    Tradução: Eu
    Ferramenta: Xiuszu
    moopledev
    moopledev
    Novo Membro
    Novo Membro


    Advertencias : Normal
    Mensagens Mensagens : 1
    Mesos Mesos : 36975
    Data de inscrição : 13/02/2014
    Idade Idade : 27

    Pedra Re: [v83][MoopleDEV] Como por AutoRegister na sua source MoopleDEV!

    Mensagem por moopledev Qui Fev 13, 2014 6:07 pm

    Pode fazer um vídeo?

      Data/hora atual: Qui Mar 28, 2024 8:45 pm