- Joined
- Mar 17, 2009
- Messages
- 1,911
- Reaction score
- 538
Since you can't delete characters without PIC, and PIC is plainly annoying, I quickly made this NPC. Yes, It can be done a lot better but this didn't take long.
NPC Code:
MapleClient:
MapleCharacter
Screenies:
NPC Code:
Code:
/*
* Made by Sparrow of RaGEZONE
* Purpose: Deletes characters without PIC.
* Map: Free Market (910000000)
* NPC Name:
*/
var status = 0;
var selectedchar;
var text = "Are you sure you wish to delete #b#e";
var text2 = "#n#k?\r\n#L8#Yes#l\r\n#L7#No#l";
function start() {
status = -1;
action(1, 0, 0);
}
function action(mode, type, selection) {
if (mode == -1) {
cm.dispose();
}
else if(mode == 0){
cm.dispose();
}
else {
if (mode == 1)
status++;
else
status--;
if (status == 0) {
cm.sendSimple("Hello " + cm.getPlayer() + ", click on a character to delete it.#b" + cm.getC().loadCharacterList(cm.getC().getWorld()) + "\r\n\r\n#L6#Information#l#k");
} else if (selection == 1) {
selectedchar = cm.getPlayer().Character1;
cm.sendSimple(text + cm.getPlayer().getNameById(selectedchar) + text2);
} else if (selection == 2) {
selectedchar = cm.getPlayer().Character2;
cm.sendSimple(text + cm.getPlayer().getNameById(selectedchar) + text2);
} else if (selection == 3) {
selectedchar = cm.getPlayer().Character3;
cm.sendSimple(text + cm.getPlayer().getNameById(selectedchar) + text2);
} else if (selection == 4) {
selectedchar = cm.getPlayer().Character4;
cm.sendSimple(text + cm.getPlayer().getNameById(selectedchar) + text2);
} else if (selection == 5) {
selectedchar = cm.getPlayer().Character5;
cm.sendSimple(text + cm.getPlayer().getNameById(selectedchar) + text2);
} else if (selection == 6) {
cm.sendOk("#eInformation#n\r\nThe purpose of this NPC is to delete your characters, since the only way you can delete your characters is with PIC Enabled.\r\n\r\n#eNotice#n\r\nWhen you select the option to delete your character, there will be a confirmation notice asking you if you are sure.\r\n\r\n#eWarning#n\r\nOnce you delete your character it is gone #r#eforever#n#k. We are not responsible for your use of this NPC.");
cm.dispose();
} else if (selection == 7) {
cm.sendOk("Okay, come back if you wish to delete your character.");
cm.dispose();
}
else if (selection == 8) {
if (cm.getPlayer().getGuildIdById(selectedchar) > 0 || cm.getPlayer().getId() == selectedchar) {
cm.sendOk("You are either on the same character you wish to delete or they are in a guild.");
cm.dispose();
} else {
cm.sendOk("Character #b" + cm.getPlayer().getNameById(selectedchar) + "#k has been deleted!");
cm.getC().deleteCharacter(selectedchar);
cm.dispose();
}
}
}
}
MapleClient:
loadCharacterList
deleteCharacter
public String loadCharacterList(int serverId) throws SQLException {
StringBuilder chars = new StringBuilder();
int c = 1;
try {
for (CharNameAndId cni : loadCharactersInternal(serverId)) {
chars.append("\r\n#L" + c + "#" + c + ". " + MapleCharacter.loadCharFromDB(cni.id, this, false) + "#l");
if (c == 1) {
player.Character1 = (cni.id);
}
else if (c == 2) {
player.Character2 = (cni.id);
}
else if (c == 3) {
player.Character3 = (cni.id);
}
if (c == 4) {
player.Character4 = (cni.id);
}
else if (c == 5) {
player.Character5 = (cni.id);
}
c++;
}
} catch (Exception e) {
}
return chars.toString();
}[/QUOTE]
StringBuilder chars = new StringBuilder();
int c = 1;
try {
for (CharNameAndId cni : loadCharactersInternal(serverId)) {
chars.append("\r\n#L" + c + "#" + c + ". " + MapleCharacter.loadCharFromDB(cni.id, this, false) + "#l");
if (c == 1) {
player.Character1 = (cni.id);
}
else if (c == 2) {
player.Character2 = (cni.id);
}
else if (c == 3) {
player.Character3 = (cni.id);
}
if (c == 4) {
player.Character4 = (cni.id);
}
else if (c == 5) {
player.Character5 = (cni.id);
}
c++;
}
} catch (Exception e) {
}
return chars.toString();
}[/QUOTE]
public void deleteCharacter(int cid) {
Connection con = DatabaseConnection.getConnection();
try {
PreparedStatement ps = con.prepareStatement("SELECT id, guildid, guildrank, name, allianceRank FROM characters WHERE id = ? AND accountid = ?");
ps.setInt(1, cid);
ps.setInt(2, accId);
ResultSet rs = ps.executeQuery();
if (!rs.next()) {
rs.close();
ps.close();
// return false;
}
if (rs.getInt("guildid") > 0) {
try {
LoginServer.getInstance().getWorldInterface().deleteGuildCharacter(new MapleGuildCharacter(cid, 0, rs.getString("name"), -1, 0, rs.getInt("guildrank"), rs.getInt("guildid"), false, rs.getInt("allianceRank")));
} catch (RemoteException re) {
rs.close();
ps.close();
// return false;
}
}
rs.close();
ps = con.prepareStatement("DELETE FROM wishlists WHERE charid = ?");
ps.setInt(1, cid);
ps.executeUpdate();
ps = con.prepareStatement("DELETE FROM characters WHERE id = ?");
ps.setInt(1, cid);
ps.executeUpdate();
String[] toDel = {"famelog", "inventoryitems", "keymap", "queststatus", "savedlocations", "skillmacros", "skills", "eventstats"};
for (String s : toDel) {
ps = con.prepareStatement("DELETE FROM `" + s + "` WHERE characterid = ?");
ps.setInt(1, cid);
ps.executeUpdate();
}
getChannelServer().removePlayer(player);
// return true;
} catch (SQLException e) {
e.printStackTrace();
// return false;
}
}
Connection con = DatabaseConnection.getConnection();
try {
PreparedStatement ps = con.prepareStatement("SELECT id, guildid, guildrank, name, allianceRank FROM characters WHERE id = ? AND accountid = ?");
ps.setInt(1, cid);
ps.setInt(2, accId);
ResultSet rs = ps.executeQuery();
if (!rs.next()) {
rs.close();
ps.close();
// return false;
}
if (rs.getInt("guildid") > 0) {
try {
LoginServer.getInstance().getWorldInterface().deleteGuildCharacter(new MapleGuildCharacter(cid, 0, rs.getString("name"), -1, 0, rs.getInt("guildrank"), rs.getInt("guildid"), false, rs.getInt("allianceRank")));
} catch (RemoteException re) {
rs.close();
ps.close();
// return false;
}
}
rs.close();
ps = con.prepareStatement("DELETE FROM wishlists WHERE charid = ?");
ps.setInt(1, cid);
ps.executeUpdate();
ps = con.prepareStatement("DELETE FROM characters WHERE id = ?");
ps.setInt(1, cid);
ps.executeUpdate();
String[] toDel = {"famelog", "inventoryitems", "keymap", "queststatus", "savedlocations", "skillmacros", "skills", "eventstats"};
for (String s : toDel) {
ps = con.prepareStatement("DELETE FROM `" + s + "` WHERE characterid = ?");
ps.setInt(1, cid);
ps.executeUpdate();
}
getChannelServer().removePlayer(player);
// return true;
} catch (SQLException e) {
e.printStackTrace();
// return false;
}
}
MapleCharacter
Ints
getGuildIdById
//Delete Characters
public int Character1;
public int Character2;
public int Character3;
public int Character4;
public int Character5;
//End Delete Characters
public int Character1;
public int Character2;
public int Character3;
public int Character4;
public int Character5;
//End Delete Characters
public static int getGuildIdById(int victimid) {
try {
PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("SELECT guildid FROM characters WHERE id = ?");
ps.setInt(1, victimid);
ResultSet rs = ps.executeQuery();
if (!rs.next()) {
rs.close();
ps.close();
return 0;
}
int guildid = rs.getInt("guildid");
rs.close();
ps.close();
return guildid;
} catch (Exception e) {
}
return 0;
}
try {
PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("SELECT guildid FROM characters WHERE id = ?");
ps.setInt(1, victimid);
ResultSet rs = ps.executeQuery();
if (!rs.next()) {
rs.close();
ps.close();
return 0;
}
int guildid = rs.getInt("guildid");
rs.close();
ps.close();
return guildid;
} catch (Exception e) {
}
return 0;
}