Open Up MySQL Querry Browser.
Click File>NewTab and Execute this file:
ALTER TABLE `accounts` ADD COLUMN `lastknownip` VARCHAR(30) NOT NULL DEFAULT '' AFTER `macs`;
Now, open up Auto-Register.java.
Scroll down until you find this:
private static final boolean autoRegister = true; //enable = true or disable = false
Change it to this if you want to enable Auto-Register
private static final boolean autoRegister = true; //enable = true or disable = true
Go up one line and you'll see
private static final int ACCOUNTS_PER_IP = 1; //change the value to the amount of accounts you want allowed for each ip
Change the 1 to w/e you like. This will allow how many accounts per an IP.
Save like Duh?
Open Up LoginCrypto.java which is in src>net>sf>odinms>client
Hit Ctr + F and put this in:
private static String hexSha1(String in) {
Replace that with :
public static String hexSha1(String in) {
Save obviously.
Now, open LoginPasswordHandler. Which is in src>net>sf>odinms>net>login>handler.
Add this import to it:
import net.sf.odinms.client.AutoRegister;
Then find: loginok = c.login(login, pwd, ipBan || macBan);
Replace it with:
if (AutoRegister.getAccountExists(login) != false) {
loginok = c.login(login, pwd, ipBan || macBan);
} else if (AutoRegister.autoRegister != false && (!ipBan || !macBan)) {
AutoRegister.createAccount(login, pwd, c.getSession().getRemoteAddress().toString());
if (AutoRegister.success != false) {
loginok = c.login(login, pwd, ipBan || macBan);
}
}
SAVE!!!
Open up MapleClient which is in src>net>sf>odinms>client.
Replace:
public int login(String login, String pwd, boolean ipMacBanned) {
int loginok = 5;
Connection con = DatabaseConnection.getConnection();
try {
PreparedStatement ps = con
.prepareStatement("SELECT id,password,salt,tempban,banned,gm,macs,greason FROM accounts WHERE name = ?");
ps.setString(1, login);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
int banned = rs.getInt("banned");
accId = rs.getInt("id");
int igm = rs.getInt("gm");
String passhash = rs.getString("password");
String salt = rs.getString("salt");
gm = igm > 0;
greason = rs.getByte("greason");
tempban = getTempBanCalendar(rs);
if ((banned == 0 && !ipMacBanned) || banned == -1) {
PreparedStatement ips = con.prepareStatement("INSERT INTO iplog (accountid, ip) VALUES (?, ?)");
ips.setInt(1, accId);
String sockAddr = session.getRemoteAddress().toString();
ips.setString(2, sockAddr.substring(1, sockAddr.lastIndexOf(':')));
ips.executeUpdate();
ips.close();
}
// do NOT track ALL mac addresses ever used
/*String[] macData = rs.getString("macs").split(", ");
for (String mac : macData) {
if (!mac.equals(""))
macs.add(mac);
}*/
ps.close();
// if (gm > 0) {
// session.write(MaplePacketCreator.getAuthSuccessReq uestPin(getAccountName()));
// return finishLogin(true);
// }
if (banned == 1) {
loginok = 3;
} else {
// this is to simplify unbanning
// all known ip and mac bans associated with the current
// client
// will be deleted
if (banned == -1)
unban();
if (getLoginState() > MapleClient.LOGIN_NOTLOGGEDIN) { // already
// loggedin
loggedIn = false;
loginok = 7;
} else {
boolean updatePasswordHash = false;
// Check if the passwords are correct here. :B
if (LoginCryptoLegacy.isLegacyPassword(passhash) && LoginCryptoLegacy.checkPassword(pwd, passhash)) {
// Check if a password upgrade is needed.
loginok = 0;
updatePasswordHash = true;
} else if (salt == null && LoginCrypto.checkSha1Hash(passhash, pwd)) {
loginok = 0;
updatePasswordHash = true;
} else if (LoginCrypto.checkSaltedSha512Hash(passhash, pwd, salt)) {
loginok = 0;
} else {
loggedIn = false;
loginok = 4;
}
if (updatePasswordHash) {
PreparedStatement pss = con.prepareStatement("UPDATE `accounts` SET `password` = ?, `salt` = ? WHERE id = ?");
try {
String newSalt = LoginCrypto.makeSalt();
pss.setString(1, LoginCrypto.makeSaltedSha512Hash(pwd, newSalt));
pss.setString(2, newSalt);
pss.setInt(3, accId);
pss.executeUpdate();
} finally {
pss.close();
}
}
}
}
}
rs.close();
ps.close();
} catch (SQLException e) {
log.error("ERROR", e);
}
return loginok;
}
With:
public int login(String login, String pwd, boolean ipMacBanned) {
int loginok = 5;
Connection con = DatabaseConnection.getConnection();
try {
PreparedStatement ps = con
.prepareStatement("SELECT id,password,salt,tempban,banned,gm,macs,lastknowni p,greason FROM accounts WHERE name = ?");
ps.setString(1, login);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
int banned = rs.getInt("banned");
accId = rs.getInt("id");
int igm = rs.getInt("gm");
String passhash = rs.getString("password");
String salt = rs.getString("salt");
gm = igm > 0;
greason = rs.getByte("greason");
tempban = getTempBanCalendar(rs);
if ((banned == 0 && !ipMacBanned) || banned == -1) {
PreparedStatement ips = con.prepareStatement("INSERT INTO iplog (accountid, ip) VALUES (?, ?)");
ips.setInt(1, accId);
ips.setString(2, session.getRemoteAddress().toString());
ips.executeUpdate();
ips.close();
}
//update the lastknownip for the player on a successful login if the ip changes
if (!rs.getString("lastknownip").equals(session.getRe moteAddress().toString())) {
PreparedStatement lkip = con.prepareStatement("UPDATE accounts SET lastknownip = ? where id = ?");
String sockAddr = session.getRemoteAddress().toString();
lkip.setString(1, sockAddr.substring(1, sockAddr.lastIndexOf(':')));
lkip.setInt(2, accId);
lkip.executeUpdate();
lkip.close();
}
// do NOT track ALL mac addresses ever used
/*String[] macData = rs.getString("macs").split(", ");
for (String mac : macData) {
if (!mac.equals(""))
macs.add(mac);
}*/
ps.close();
// if (gm > 0) {
// session.write(MaplePacketCreator.getAuthSuccessReq uestPin(getAccountName()));
// return finishLogin(true);
// }
if (banned == 1) {
loginok = 3;
} else {
// this is to simplify unbanning
// all known ip and mac bans associated with the current
// client
// will be deleted
if (banned == -1)
unban();
if (getLoginState() > MapleClient.LOGIN_NOTLOGGEDIN) { // already loggedin
loggedIn = false;
loginok = 7;
} else {
boolean updatePasswordHash = false;
// Check if the passwords are correct here. :B
if (LoginCryptoLegacy.isLegacyPassword(passhash) && LoginCryptoLegacy.checkPassword(pwd, passhash)) {
// Check if a password upgrade is needed.
loginok = 0;
updatePasswordHash = true;
} else if (salt == null && LoginCrypto.checkSha1Hash(passhash, pwd)) {
loginok = 0;
updatePasswordHash = true;
} else if (LoginCrypto.checkSaltedSha512Hash(passhash, pwd, salt)) {
loginok = 0;
} else {
loggedIn = false;
loginok = 4;
}
if (updatePasswordHash) {
PreparedStatement pss = con.prepareStatement("UPDATE `accounts` SET `password` = ?, `salt` = ? WHERE id = ?");
try {
String newSalt = LoginCrypto.makeSalt();
pss.setString(1, LoginCrypto.makeSaltedSha512Hash(pwd, newSalt));
pss.setString(2, newSalt);
pss.setInt(3, accId);
pss.executeUpdate();
} finally {
pss.close();
}
}
}
}
}
rs.close();
ps.close();
} catch (SQLException e) {
log.error("ERROR", e);
}
return loginok;
}
Save it!!!
Now, Compile it with w/e you use. NetBeans etc. If you dunno how, Go on my Channel and you'll see a Video called How to Edit GM Hat and Compile etc.
Then it should work perfectly!!!
Enjoy your Server with Non-Registration Page needed.
Download---
Click File>NewTab and Execute this file:
ALTER TABLE `accounts` ADD COLUMN `lastknownip` VARCHAR(30) NOT NULL DEFAULT '' AFTER `macs`;
Now, open up Auto-Register.java.
Scroll down until you find this:
private static final boolean autoRegister = true; //enable = true or disable = false
Change it to this if you want to enable Auto-Register
private static final boolean autoRegister = true; //enable = true or disable = true
Go up one line and you'll see
private static final int ACCOUNTS_PER_IP = 1; //change the value to the amount of accounts you want allowed for each ip
Change the 1 to w/e you like. This will allow how many accounts per an IP.
Save like Duh?
Open Up LoginCrypto.java which is in src>net>sf>odinms>client
Hit Ctr + F and put this in:
private static String hexSha1(String in) {
Replace that with :
public static String hexSha1(String in) {
Save obviously.
Now, open LoginPasswordHandler. Which is in src>net>sf>odinms>net>login>handler.
Add this import to it:
import net.sf.odinms.client.AutoRegister;
Then find: loginok = c.login(login, pwd, ipBan || macBan);
Replace it with:
if (AutoRegister.getAccountExists(login) != false) {
loginok = c.login(login, pwd, ipBan || macBan);
} else if (AutoRegister.autoRegister != false && (!ipBan || !macBan)) {
AutoRegister.createAccount(login, pwd, c.getSession().getRemoteAddress().toString());
if (AutoRegister.success != false) {
loginok = c.login(login, pwd, ipBan || macBan);
}
}
SAVE!!!
Open up MapleClient which is in src>net>sf>odinms>client.
Replace:
public int login(String login, String pwd, boolean ipMacBanned) {
int loginok = 5;
Connection con = DatabaseConnection.getConnection();
try {
PreparedStatement ps = con
.prepareStatement("SELECT id,password,salt,tempban,banned,gm,macs,greason FROM accounts WHERE name = ?");
ps.setString(1, login);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
int banned = rs.getInt("banned");
accId = rs.getInt("id");
int igm = rs.getInt("gm");
String passhash = rs.getString("password");
String salt = rs.getString("salt");
gm = igm > 0;
greason = rs.getByte("greason");
tempban = getTempBanCalendar(rs);
if ((banned == 0 && !ipMacBanned) || banned == -1) {
PreparedStatement ips = con.prepareStatement("INSERT INTO iplog (accountid, ip) VALUES (?, ?)");
ips.setInt(1, accId);
String sockAddr = session.getRemoteAddress().toString();
ips.setString(2, sockAddr.substring(1, sockAddr.lastIndexOf(':')));
ips.executeUpdate();
ips.close();
}
// do NOT track ALL mac addresses ever used
/*String[] macData = rs.getString("macs").split(", ");
for (String mac : macData) {
if (!mac.equals(""))
macs.add(mac);
}*/
ps.close();
// if (gm > 0) {
// session.write(MaplePacketCreator.getAuthSuccessReq uestPin(getAccountName()));
// return finishLogin(true);
// }
if (banned == 1) {
loginok = 3;
} else {
// this is to simplify unbanning
// all known ip and mac bans associated with the current
// client
// will be deleted
if (banned == -1)
unban();
if (getLoginState() > MapleClient.LOGIN_NOTLOGGEDIN) { // already
// loggedin
loggedIn = false;
loginok = 7;
} else {
boolean updatePasswordHash = false;
// Check if the passwords are correct here. :B
if (LoginCryptoLegacy.isLegacyPassword(passhash) && LoginCryptoLegacy.checkPassword(pwd, passhash)) {
// Check if a password upgrade is needed.
loginok = 0;
updatePasswordHash = true;
} else if (salt == null && LoginCrypto.checkSha1Hash(passhash, pwd)) {
loginok = 0;
updatePasswordHash = true;
} else if (LoginCrypto.checkSaltedSha512Hash(passhash, pwd, salt)) {
loginok = 0;
} else {
loggedIn = false;
loginok = 4;
}
if (updatePasswordHash) {
PreparedStatement pss = con.prepareStatement("UPDATE `accounts` SET `password` = ?, `salt` = ? WHERE id = ?");
try {
String newSalt = LoginCrypto.makeSalt();
pss.setString(1, LoginCrypto.makeSaltedSha512Hash(pwd, newSalt));
pss.setString(2, newSalt);
pss.setInt(3, accId);
pss.executeUpdate();
} finally {
pss.close();
}
}
}
}
}
rs.close();
ps.close();
} catch (SQLException e) {
log.error("ERROR", e);
}
return loginok;
}
With:
public int login(String login, String pwd, boolean ipMacBanned) {
int loginok = 5;
Connection con = DatabaseConnection.getConnection();
try {
PreparedStatement ps = con
.prepareStatement("SELECT id,password,salt,tempban,banned,gm,macs,lastknowni p,greason FROM accounts WHERE name = ?");
ps.setString(1, login);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
int banned = rs.getInt("banned");
accId = rs.getInt("id");
int igm = rs.getInt("gm");
String passhash = rs.getString("password");
String salt = rs.getString("salt");
gm = igm > 0;
greason = rs.getByte("greason");
tempban = getTempBanCalendar(rs);
if ((banned == 0 && !ipMacBanned) || banned == -1) {
PreparedStatement ips = con.prepareStatement("INSERT INTO iplog (accountid, ip) VALUES (?, ?)");
ips.setInt(1, accId);
ips.setString(2, session.getRemoteAddress().toString());
ips.executeUpdate();
ips.close();
}
//update the lastknownip for the player on a successful login if the ip changes
if (!rs.getString("lastknownip").equals(session.getRe moteAddress().toString())) {
PreparedStatement lkip = con.prepareStatement("UPDATE accounts SET lastknownip = ? where id = ?");
String sockAddr = session.getRemoteAddress().toString();
lkip.setString(1, sockAddr.substring(1, sockAddr.lastIndexOf(':')));
lkip.setInt(2, accId);
lkip.executeUpdate();
lkip.close();
}
// do NOT track ALL mac addresses ever used
/*String[] macData = rs.getString("macs").split(", ");
for (String mac : macData) {
if (!mac.equals(""))
macs.add(mac);
}*/
ps.close();
// if (gm > 0) {
// session.write(MaplePacketCreator.getAuthSuccessReq uestPin(getAccountName()));
// return finishLogin(true);
// }
if (banned == 1) {
loginok = 3;
} else {
// this is to simplify unbanning
// all known ip and mac bans associated with the current
// client
// will be deleted
if (banned == -1)
unban();
if (getLoginState() > MapleClient.LOGIN_NOTLOGGEDIN) { // already loggedin
loggedIn = false;
loginok = 7;
} else {
boolean updatePasswordHash = false;
// Check if the passwords are correct here. :B
if (LoginCryptoLegacy.isLegacyPassword(passhash) && LoginCryptoLegacy.checkPassword(pwd, passhash)) {
// Check if a password upgrade is needed.
loginok = 0;
updatePasswordHash = true;
} else if (salt == null && LoginCrypto.checkSha1Hash(passhash, pwd)) {
loginok = 0;
updatePasswordHash = true;
} else if (LoginCrypto.checkSaltedSha512Hash(passhash, pwd, salt)) {
loginok = 0;
} else {
loggedIn = false;
loginok = 4;
}
if (updatePasswordHash) {
PreparedStatement pss = con.prepareStatement("UPDATE `accounts` SET `password` = ?, `salt` = ? WHERE id = ?");
try {
String newSalt = LoginCrypto.makeSalt();
pss.setString(1, LoginCrypto.makeSaltedSha512Hash(pwd, newSalt));
pss.setString(2, newSalt);
pss.setInt(3, accId);
pss.executeUpdate();
} finally {
pss.close();
}
}
}
}
}
rs.close();
ps.close();
} catch (SQLException e) {
log.error("ERROR", e);
}
return loginok;
}
Save it!!!
Now, Compile it with w/e you use. NetBeans etc. If you dunno how, Go on my Channel and you'll see a Video called How to Edit GM Hat and Compile etc.
Then it should work perfectly!!!
Enjoy your Server with Non-Registration Page needed.
Download---
You must be registered to see links