source.sendChat("/ban " + user.getFullLogonName() + " TimeBan: " + TimeFormatter.formatTime(tb.getTimeLeft(), false) + " left");
return;
}
}
BNLogin rsUser = touchUser(source, user, "joining the channel");
if(rsUser == null)
return;
if(!source.getConnectionSettings().enableGreetings)
return;
try {
// Fix the case of the user's login if it has changed
rsUser.setLogin(user.getFullAccountName());
switch(user.getStatString().getProduct()) {
case STAR: {
Integer newWins = user.getStatString().getWins();
if(newWins != null) {
Integer oldWins = rsUser.getWinsSTAR();
if((oldWins == null) || (newWins > oldWins)) {
rsUser.setWinsSTAR(newWins);
}
}
break;
}
case SEXP: {
Integer newWins = user.getStatString().getWins();
if(newWins != null) {
Integer oldWins = rsUser.getWinsSEXP();
if((oldWins == null) || (newWins > oldWins)) {
rsUser.setWinsSEXP(newWins);
}
}
break;
}
case W2BN: {
Integer newWins = user.getStatString().getWins();
if(newWins != null) {
Integer oldWins = rsUser.getWinsW2BN();
if((oldWins == null) || (newWins > oldWins)) {
rsUser.setWinsW2BN(newWins);
}
}
break;
}
case D2DV:
case D2XP: {
Integer newLevel = user.getStatString().getCharLevel();
if(newLevel != null) {
Integer oldLevel = rsUser.getLevelD2();
if((oldLevel == null) || (newLevel > oldLevel)) {
rsUser.setLevelD2(newLevel);
}
}
break;
}
case WAR3:
case W3XP: {
Integer newLevel = user.getStatString().getLevel();
if(newLevel != null) {
Integer oldLevel = rsUser.getLevelW3();
if((oldLevel == null) || (newLevel > oldLevel)) {
rsUser.setLevelW3(newLevel);
}
}
break;
}
}
try {
rsUser.updateRow();
} catch(Exception e) {
Out.exception(e);
}
Account rsAccount = Account.get(user);
Rank rsRank = (rsAccount == null) ? Rank.get(0) : rsAccount.getRank();
if(rsRank != null) {
// Autopromotions
Integer apDays = rsRank.getApDays();
// Check that they meet the days requirement
apBlock: if((apDays != null) && (apDays != 0)) {
double timeElapsed = 0;
if(rsAccount == null) {
timeElapsed = rsUser.getCreated().getTime();
} else if(rsAccount.getLastRankChange() != null) {
timeElapsed = rsAccount.getLastRankChange().getTime();
}
timeElapsed = System.currentTimeMillis() - timeElapsed;
timeElapsed /= 1000 * 60 * 60 * 24;
if(timeElapsed < apDays)
break apBlock;
if((rsRank.getApWins() == null)
|| (rsRank.getApD2Level() == null)
|| (rsRank.getApW3Level() == null))
break apBlock;
int apWins = rsRank.getApWins().intValue();
int apD2Level = rsRank.getApD2Level().intValue();
int apW3Level = rsRank.getApW3Level().intValue();
long wins[];
if(rsAccount == null)
wins = new long[] {0, 0, 0};
else
wins = rsAccount.getWinsLevels(GlobalSettings.recruitTagPrefix, GlobalSettings.recruitTagSuffix);
boolean hasEnoughWins = false;
hasEnoughWins |= ((apWins > 0) && (wins[0] >= apWins));
hasEnoughWins |= ((apD2Level > 0) && (wins[1] >= apD2Level));
hasEnoughWins |= ((apW3Level > 0) && (wins[2] >= apW3Level));
hasEnoughWins |= ((apWins == 0) && (apD2Level == 0) && (apW3Level == 0));
if(hasEnoughWins) {
// Check RS
long rs = 0;
if(rsAccount != null)
rs = rsAccount.getRecruitScore(GlobalSettings.recruitAccess);
Integer apRS = rsRank.getApRecruitScore();
if((apRS == null) || (apRS == 0) || (rs >= apRS)) {
int rank = 0;
if(rsAccount != null)
rank = rsAccount.getAccess();
else {
String name = user.getFullAccountName();
name = name.substring(0, name.indexOf('@'));
try {
Account recoverAccount = Account.get(name);
if((recoverAccount != null)
&& (recoverAccount.getAccess() <= 1)
&& (recoverAccount.getBnLogins().size() == 0)) {
rsAccount = recoverAccount;
// Reset the account to rank zero, just in case
rsAccount.setRank(Rank.get(0));
rsUser.setAccount(rsAccount);
rsUser.updateRow();
} else {
rsAccount = createAccount(name, 0, null, rsUser);
}
} catch(Exception e) {
Out.exception(e);