package handling.login.handler;
import client.MapleCharacter;
import client.MapleCharacterUtil;
import client.MapleClient;
import client.inventory.Item;
import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import gui.ServerUI;
import handling.login.LoginInformationProvider;
import org.apache.log4j.Logger;
import server.MapleItemInformationProvider;
import server.ServerProperties;
import tools.FileoutputUtil;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.packet.LoginPacket;
public class CreateCharHandler {
private static final Logger log = Logger.getLogger(CreateCharHandler.class);
public static void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
if (!c.isLoggedIn()) {
c.getSession().close(true);
return;
}
int faceMark = 0;
int cape = 0;
int bottom = 0;
String name = slea.readMapleAsciiString();
int face = slea.readInt();
int hair = slea.readInt();
int top = slea.readInt();
bottom = slea.readInt();
int shoes = slea.readInt();
int weapon = slea.readInt();
MapleItemInformationProvider li = MapleItemInformationProvider.getInstance();
int[] items = {top, bottom, cape, shoes, weapon};
for (int i : items) {
if (!LoginInformationProvider.getInstance().isEligibleItem(i)) {
FileoutputUtil.log("[作弊] 新建角色装备检测失败 名字: " + name + " 道具ID: " + i + " - " + li.getName(i));
c.getSession().write(LoginPacket.charNameResponse(name, (byte) 3));
return;
}
}
short[] stat = new short[4];
int totalStat = 0;
for (int i = 0; i < 4; i++) {
stat[i] = slea.readByte();
if (stat[i] < 4 || stat[i] > 13) {
FileoutputUtil.log("[作弊] 創建角色初始能力值過小或過大");
return;
}
totalStat += stat[i];
}
if (totalStat != 25) {
FileoutputUtil.log("[作弊] 創建角色初始總能力值不正確");
return;
}
MapleCharacter newchar = MapleCharacter.getDefault(c, stat);
newchar.setWorld((byte) c.getWorld());
newchar.setFace(face);
newchar.setHair(hair);
newchar.setMap(0);
// newchar.setGender(gender);
newchar.setName(name);
// newchar.setSkinColor(skin);
newchar.setDecorate(faceMark);
newchar.setLevel((short) 1);
newchar.setGmLevel(6);
MapleInventory equipedIv = newchar.getInventory(MapleInventoryType.EQUIPPED);
int[][] equips = {{top, -5}, {bottom, -6}, {shoes, -7}, {cape, -9}, {weapon, -11}};
for (int[] i : equips) {
if (i[0] > 0) {
Item item = li.getEquipById(i[0]);
item.setPosition((byte) i[1]);
item.setGMLog("角色创建");
equipedIv.addFromDB(item);
}
}
//newchar.getInventory(MapleInventoryType.USE).addItem(new Item(2000013, (short) 0, (short) 100, (short) 0));
//newchar.getInventory(MapleInventoryType.USE).addItem(new Item(2000014, (short) 0, (short) 100, (short) 0));
/*
int[][] guidebooks = {{4161001, 0}, {4161047, 1}, {4161048, 2000}, {4161052, 2001}, {4161054, 3}, {4161079, 2002}};
int guidebook = 0;
for (int[] i : guidebooks) {
if (newchar.getJob() == i[1]) {
guidebook = i[0];
} else if (newchar.getJob() / 1000 == i[1]) {
guidebook = i[0];
}
}
if (guidebook > 0) {
newchar.getInventory(MapleInventoryType.ETC).addItem(new Item(guidebook, (short) 0, (short) 1, (short) 0));
}*/
if ((MapleCharacterUtil.canCreateChar(name, c.isGm())) && ((!LoginInformationProvider.getInstance().isForbiddenName(name)) || (c.isGm())) && ((c.isGm()) || (c.canMakeCharacter(c.getWorld())))) {
MapleCharacter.saveNewCharToDB(newchar);
c.getSession().write(LoginPacket.addNewCharEntry(newchar, true));
c.createdChar(newchar.getId());
// ServerUI.getInstance().addCharTable(newchar); // 报错,先注释掉
} else {
c.getSession().write(LoginPacket.addNewCharEntry(newchar, false));
}
}
}