#include "Login.h"
#include "LoginPacket.h"
#include "MySQLM.h"
#include <stdio.h>
#include "PlayerLogin.h"
void Login::loginUser(PlayerLogin* player, unsigned char* packet){
int usersize = getShort(packet);
int passsize = getShort(packet+usersize+2);
char username[MAX_FIELD_SIZE], password[MAX_FIELD_SIZE];
getString(packet+2, usersize, username);
getString(packet+4+usersize, passsize, password);
printf("Username: %s\nPassword: %s\n", username, password);
int s = checkLogin(username, password);
if(s == 1){
player->setUserid(MySQL::getUserID(username));
player->setPin(MySQL::getInt("users", player->getUserid(), "pin"));
if (MySQL::getInt("users", player->getUserid(), "ban_expire > NOW()") >= 1) {
int expire = (int) MySQL::getInt("users", player->getUserid(), "CEIL(((UNIX_TIMESTAMP(ban_expire) + 11644502400) / 4294967296) * 10000000)");
int reason = MySQL::getInt("users", player->getUserid(), "ban_reason");
LoginPacket::loginBan(player, reason, expire);
}
else{
int pin = player->getPin();
if(pin == -1)
player->setStatus(1); // New PIN
else
player->setStatus(2); // Ask for PIN
player->setGender(MySQL::getInt("users", player->getUserid(), "gender"));
LoginPacket::loginConnect(player, username, usersize);
}
else if(s == 0) // LINE 47 !! <<<<<
LoginPacket::loginError(player, 0x04);
else if(s == -1)
LoginPacket::loginError(player, 0x05);
}
}
int Login::checkLogin(char *username, char *password){
char rpassword[13];
if(!MySQL::isString("users","username", username)){
return -1;
}
MySQL::getString("users", "username",username,"password", rpassword);
if(strcmp(rpassword, password) == 0)
return 1;
return 0;
}
void Login::handleLogin(PlayerLogin* player, unsigned char* packet){
int status = player->getStatus();
if(status == 1)
LoginPacket::loginProcess(player, 0x01);
else if(status == 2){
LoginPacket::loginProcess(player, 0x04);
player->setStatus(3);
LoginPacket::loginProcess(player, 0x00);
player->setStatus(4);
}
else if(status == 3)
checkPin(player, packet);
else if(status == 4)
LoginPacket::loginProcess(player, 0x00);
}
void Login::checkPin(PlayerLogin* player, unsigned char* packet){
if(packet[0] == 0x00){
player->setStatus(2);
}
else if(packet[0] == 0x01){
int pin = (packet[8]-'0')*1000 + (packet[9]-'0')*100 + (packet[10]-'0')*10 + (packet[11]-'0');
int curpin = player->getPin();
if(pin == curpin){
LoginPacket::loginProcess(player, 0x00);
player->setStatus(4);
printf("Pin: %d\n", pin);
}
else
LoginPacket::loginProcess(player, 0x02);
}
else if(packet[0] == 0x02){
int pin = (packet[8]-'0')*1000 + (packet[9]-'0')*100 + (packet[10]-'0')*10 + (packet[11]-'0');
int curpin = player->getPin();
if(pin == curpin){
LoginPacket::loginProcess(player, 0x01);
}
else
LoginPacket::loginProcess(player, 0x02);
}
}
void Login::registerPIN(PlayerLogin* player, unsigned char* packet){
if(packet[0] == 0x00){
if(player->getPin() != -1){
player->setStatus(2);
}
return;
}
int pin = (packet[3]-'0')*1000 + (packet[4]-'0')*100 + (packet[5]-'0')*10 + (packet[6]-'0');
player->setStatus(0);
MySQL::setInt("users", "pin", player->getUserid(), pin);
LoginPacket::processOk(player);
}
void Login::loginBack(PlayerLogin* player){
LoginPacket::logBack(player);
}