refactor: use try-with-resources for PlayerNPC db operations
This commit is contained in:
@@ -21,32 +21,17 @@
|
|||||||
*/
|
*/
|
||||||
package server.life;
|
package server.life;
|
||||||
|
|
||||||
import config.YamlConfig;
|
|
||||||
import server.life.positioner.MaplePlayerNPCPositioner;
|
|
||||||
import server.life.positioner.MaplePlayerNPCPodium;
|
|
||||||
import java.awt.Point;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Statement;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import client.MapleCharacter;
|
import client.MapleCharacter;
|
||||||
import client.MapleClient;
|
import client.MapleClient;
|
||||||
import client.inventory.Item;
|
import client.inventory.Item;
|
||||||
import client.inventory.MapleInventoryType;
|
import client.inventory.MapleInventoryType;
|
||||||
|
import config.YamlConfig;
|
||||||
import constants.game.GameConstants;
|
import constants.game.GameConstants;
|
||||||
import net.server.Server;
|
import net.server.Server;
|
||||||
import net.server.channel.Channel;
|
import net.server.channel.Channel;
|
||||||
import net.server.world.World;
|
import net.server.world.World;
|
||||||
|
import server.life.positioner.MaplePlayerNPCPodium;
|
||||||
|
import server.life.positioner.MaplePlayerNPCPositioner;
|
||||||
import server.maps.AbstractMapleMapObject;
|
import server.maps.AbstractMapleMapObject;
|
||||||
import server.maps.MapleMap;
|
import server.maps.MapleMap;
|
||||||
import server.maps.MapleMapObject;
|
import server.maps.MapleMapObject;
|
||||||
@@ -55,6 +40,12 @@ import tools.DatabaseConnection;
|
|||||||
import tools.MaplePacketCreator;
|
import tools.MaplePacketCreator;
|
||||||
import tools.Pair;
|
import tools.Pair;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author XoticStory
|
* @author XoticStory
|
||||||
@@ -119,16 +110,16 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
setPosition(new Point(rs.getInt("x"), CY));
|
setPosition(new Point(rs.getInt("x"), CY));
|
||||||
setObjectId(rs.getInt("id"));
|
setObjectId(rs.getInt("id"));
|
||||||
|
|
||||||
Connection con = DatabaseConnection.getConnection();
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT equippos, equipid FROM playernpcs_equip WHERE npcid = ?");
|
PreparedStatement ps = con.prepareStatement("SELECT equippos, equipid FROM playernpcs_equip WHERE npcid = ?")) {
|
||||||
ps.setInt(1, rs.getInt("id"));
|
ps.setInt(1, rs.getInt("id"));
|
||||||
ResultSet rs2 = ps.executeQuery();
|
|
||||||
|
try (ResultSet rs2 = ps.executeQuery()) {
|
||||||
while (rs2.next()) {
|
while (rs2.next()) {
|
||||||
equips.put(rs2.getShort("equippos"), rs2.getInt("equipid"));
|
equips.put(rs2.getShort("equippos"), rs2.getInt("equipid"));
|
||||||
}
|
}
|
||||||
rs2.close();
|
}
|
||||||
ps.close();
|
}
|
||||||
con.close();
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -220,63 +211,52 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void getRunningMetadata() {
|
private static void getRunningMetadata() {
|
||||||
try {
|
try (Connection con = DatabaseConnection.getConnection()) {
|
||||||
Connection con = DatabaseConnection.getConnection();
|
|
||||||
|
|
||||||
getRunningOverallRanks(con);
|
getRunningOverallRanks(con);
|
||||||
getRunningWorldRanks(con);
|
getRunningWorldRanks(con);
|
||||||
getRunningWorldJobRanks(con);
|
getRunningWorldJobRanks(con);
|
||||||
|
|
||||||
con.close();
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void getRunningOverallRanks(Connection con) throws SQLException {
|
private static void getRunningOverallRanks(Connection con) throws SQLException {
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT max(overallrank) FROM playernpcs");
|
try (PreparedStatement ps = con.prepareStatement("SELECT max(overallrank) FROM playernpcs");
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery()) {
|
||||||
|
|
||||||
if(rs.next()) {
|
if (rs.next()) {
|
||||||
runningOverallRank.set(rs.getInt(1) + 1);
|
runningOverallRank.set(rs.getInt(1) + 1);
|
||||||
} else {
|
} else {
|
||||||
runningOverallRank.set(1);
|
runningOverallRank.set(1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
rs.close();
|
|
||||||
ps.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void getRunningWorldRanks(Connection con) throws SQLException {
|
private static void getRunningWorldRanks(Connection con) throws SQLException {
|
||||||
int numWorlds = Server.getInstance().getWorldsSize();
|
int numWorlds = Server.getInstance().getWorldsSize();
|
||||||
for(int i = 0; i < numWorlds; i++) {
|
for (int i = 0; i < numWorlds; i++) {
|
||||||
runningWorldRank.add(new AtomicInteger(1));
|
runningWorldRank.add(new AtomicInteger(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT world, max(worldrank) FROM playernpcs GROUP BY world ORDER BY world");
|
try (PreparedStatement ps = con.prepareStatement("SELECT world, max(worldrank) FROM playernpcs GROUP BY world ORDER BY world");
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery()) {
|
||||||
|
|
||||||
while(rs.next()) {
|
while (rs.next()) {
|
||||||
int wid = rs.getInt(1);
|
int wid = rs.getInt(1);
|
||||||
if(wid < numWorlds) {
|
if (wid < numWorlds) {
|
||||||
runningWorldRank.get(wid).set(rs.getInt(2) + 1);
|
runningWorldRank.get(wid).set(rs.getInt(2) + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
rs.close();
|
|
||||||
ps.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void getRunningWorldJobRanks(Connection con) throws SQLException {
|
private static void getRunningWorldJobRanks(Connection con) throws SQLException {
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT world, job, max(worldjobrank) FROM playernpcs GROUP BY world, job ORDER BY world, job");
|
try (PreparedStatement ps = con.prepareStatement("SELECT world, job, max(worldjobrank) FROM playernpcs GROUP BY world, job ORDER BY world, job");
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery()) {
|
||||||
|
while (rs.next()) {
|
||||||
while(rs.next()) {
|
|
||||||
runningWorldJobRank.put(new Pair<>(rs.getInt(1), rs.getInt(2)), new AtomicInteger(rs.getInt(3) + 1));
|
runningWorldJobRank.put(new Pair<>(rs.getInt(1), rs.getInt(2)), new AtomicInteger(rs.getInt(3) + 1));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
rs.close();
|
|
||||||
ps.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getAndIncrementRunningWorldJobRanks(int world, int job) {
|
private static int getAndIncrementRunningWorldJobRanks(int world, int job) {
|
||||||
@@ -292,20 +272,16 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
public static boolean canSpawnPlayerNpc(String name, int mapid) {
|
public static boolean canSpawnPlayerNpc(String name, int mapid) {
|
||||||
boolean ret = true;
|
boolean ret = true;
|
||||||
|
|
||||||
try {
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
Connection con = DatabaseConnection.getConnection();
|
PreparedStatement ps = con.prepareStatement("SELECT name FROM playernpcs WHERE name LIKE ? AND map = ?")) {
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT name FROM playernpcs WHERE name LIKE ? AND map = ?");
|
|
||||||
ps.setString(1, name);
|
ps.setString(1, name);
|
||||||
ps.setInt(2, mapid);
|
ps.setInt(2, mapid);
|
||||||
|
|
||||||
ResultSet rs = ps.executeQuery();
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
if(rs.next()) {
|
if (rs.next()) {
|
||||||
ret = false;
|
ret = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
rs.close();
|
|
||||||
ps.close();
|
|
||||||
con.close();
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -320,10 +296,8 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
CY = newPos.y;
|
CY = newPos.y;
|
||||||
FH = map.getFootholds().findBelow(newPos).getId();
|
FH = map.getFootholds().findBelow(newPos).getId();
|
||||||
|
|
||||||
try {
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
Connection con = DatabaseConnection.getConnection();
|
PreparedStatement ps = con.prepareStatement("UPDATE playernpcs SET x = ?, cy = ?, fh = ?, rx0 = ?, rx1 = ? WHERE id = ?")) {
|
||||||
|
|
||||||
PreparedStatement ps = con.prepareStatement("UPDATE playernpcs SET x = ?, cy = ?, fh = ?, rx0 = ?, rx1 = ? WHERE id = ?");
|
|
||||||
ps.setInt(1, newPos.x);
|
ps.setInt(1, newPos.x);
|
||||||
ps.setInt(2, CY);
|
ps.setInt(2, CY);
|
||||||
ps.setInt(3, FH);
|
ps.setInt(3, FH);
|
||||||
@@ -331,9 +305,6 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
ps.setInt(5, RX1);
|
ps.setInt(5, RX1);
|
||||||
ps.setInt(6, getObjectId());
|
ps.setInt(6, getObjectId());
|
||||||
ps.executeUpdate();
|
ps.executeUpdate();
|
||||||
|
|
||||||
ps.close();
|
|
||||||
con.close();
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -344,27 +315,28 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
int branchLen = (branch < 26) ? 100 : 400;
|
int branchLen = (branch < 26) ? 100 : 400;
|
||||||
int branchSid = 9900000 + (branch * 100);
|
int branchSid = 9900000 + (branch * 100);
|
||||||
int nextBranchSid = branchSid + branchLen;
|
int nextBranchSid = branchSid + branchLen;
|
||||||
Set<Integer> usedScriptIds = new HashSet<>();
|
|
||||||
|
|
||||||
Connection con = DatabaseConnection.getConnection();
|
List<Integer> availables = new ArrayList<>(20);
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT scriptid FROM playernpcs WHERE scriptid >= ? AND scriptid < ? ORDER BY scriptid");
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
|
PreparedStatement ps = con.prepareStatement("SELECT scriptid FROM playernpcs WHERE scriptid >= ? AND scriptid < ? ORDER BY scriptid")) {
|
||||||
ps.setInt(1, branchSid);
|
ps.setInt(1, branchSid);
|
||||||
ps.setInt(2, nextBranchSid);
|
ps.setInt(2, nextBranchSid);
|
||||||
|
|
||||||
ResultSet rs = ps.executeQuery();
|
Set<Integer> usedScriptIds = new HashSet<>();
|
||||||
while(rs.next()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
while (rs.next()) {
|
||||||
usedScriptIds.add(rs.getInt(1));
|
usedScriptIds.add(rs.getInt(1));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<Integer> availables = new ArrayList<>(20);
|
|
||||||
int j = 0;
|
int j = 0;
|
||||||
for(int i = branchSid; i < nextBranchSid; i++) {
|
for (int i = branchSid; i < nextBranchSid; i++) {
|
||||||
if(!usedScriptIds.contains(i)) {
|
if (!usedScriptIds.contains(i)) {
|
||||||
if (MaplePlayerNPCFactory.isExistentScriptid(i)) { // thanks Ark, Zein, geno, Ariel, JrCl0wn for noticing client crashes due to use of missing scriptids
|
if (MaplePlayerNPCFactory.isExistentScriptid(i)) { // thanks Ark, Zein, geno, Ariel, JrCl0wn for noticing client crashes due to use of missing scriptids
|
||||||
availables.add(i);
|
availables.add(i);
|
||||||
j++;
|
j++;
|
||||||
|
|
||||||
if(j == 20) {
|
if (j == 20) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -372,15 +344,12 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rs.close();
|
for (int i = availables.size() - 1; i >= 0; i--) {
|
||||||
ps.close();
|
|
||||||
con.close();
|
|
||||||
|
|
||||||
for(int i = availables.size() - 1; i >= 0; i--) {
|
|
||||||
list.add(availables.get(i));
|
list.add(availables.get(i));
|
||||||
}
|
}
|
||||||
} catch(SQLException sqle) {
|
} catch (SQLException sqle) {
|
||||||
sqle.printStackTrace();
|
sqle.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -407,7 +376,7 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
private static MaplePlayerNPC createPlayerNPCInternal(MapleMap map, Point pos, MapleCharacter chr) {
|
private static MaplePlayerNPC createPlayerNPCInternal(MapleMap map, Point pos, MapleCharacter chr) {
|
||||||
int mapId = map.getId();
|
int mapId = map.getId();
|
||||||
|
|
||||||
if(!canSpawnPlayerNpc(chr.getName(), mapId)) {
|
if (!canSpawnPlayerNpc(chr.getName(), mapId)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,35 +387,41 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pos == null) {
|
if (pos == null) {
|
||||||
if(GameConstants.isPodiumHallOfFameMap(map.getId())) {
|
if (GameConstants.isPodiumHallOfFameMap(map.getId())) {
|
||||||
pos = MaplePlayerNPCPodium.getNextPlayerNpcPosition(map);
|
pos = MaplePlayerNPCPodium.getNextPlayerNpcPosition(map);
|
||||||
} else {
|
} else {
|
||||||
pos = MaplePlayerNPCPositioner.getNextPlayerNpcPosition(map);
|
pos = MaplePlayerNPCPositioner.getNextPlayerNpcPosition(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pos == null) {
|
if (pos == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(YamlConfig.config.server.USE_DEBUG) System.out.println("GOT SID " + scriptId + " POS " + pos);
|
if (YamlConfig.config.server.USE_DEBUG) {
|
||||||
|
System.out.println("GOT SID " + scriptId + " POS " + pos);
|
||||||
|
}
|
||||||
|
|
||||||
int worldId = chr.getWorld();
|
int worldId = chr.getWorld();
|
||||||
int jobId = (chr.getJob().getId() / 100) * 100;
|
int jobId = (chr.getJob().getId() / 100) * 100;
|
||||||
|
|
||||||
MaplePlayerNPC ret;
|
MaplePlayerNPC ret;
|
||||||
int npcId;
|
try (Connection con = DatabaseConnection.getConnection()) {
|
||||||
try {
|
boolean createNew = false;
|
||||||
Connection con = DatabaseConnection.getConnection();
|
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM playernpcs WHERE scriptid = ?")) {
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT * FROM playernpcs WHERE scriptid = ?");
|
|
||||||
ps.setInt(1, scriptId);
|
ps.setInt(1, scriptId);
|
||||||
ResultSet rs = ps.executeQuery();
|
|
||||||
if (!rs.next()) { // creates new playernpc if scriptid doesn't exist
|
|
||||||
rs.close();
|
|
||||||
ps.close();
|
|
||||||
|
|
||||||
ps = con.prepareStatement("INSERT INTO playernpcs (name, hair, face, skin, gender, x, cy, world, map, scriptid, dir, fh, rx0, rx1, worldrank, overallrank, worldjobrank, job) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
if (!rs.next()) {
|
||||||
|
createNew = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (createNew) { // creates new playernpc if scriptid doesn't exist
|
||||||
|
final int npcId;
|
||||||
|
try (PreparedStatement ps = con.prepareStatement("INSERT INTO playernpcs (name, hair, face, skin, gender, x, cy, world, map, scriptid, dir, fh, rx0, rx1, worldrank, overallrank, worldjobrank, job) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) {
|
||||||
ps.setString(1, chr.getName());
|
ps.setString(1, chr.getName());
|
||||||
ps.setInt(2, chr.getHair());
|
ps.setInt(2, chr.getHair());
|
||||||
ps.setInt(3, chr.getFace());
|
ps.setInt(3, chr.getFace());
|
||||||
@@ -465,17 +440,17 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
ps.setInt(16, runningOverallRank.getAndIncrement());
|
ps.setInt(16, runningOverallRank.getAndIncrement());
|
||||||
ps.setInt(17, getAndIncrementRunningWorldJobRanks(worldId, jobId));
|
ps.setInt(17, getAndIncrementRunningWorldJobRanks(worldId, jobId));
|
||||||
ps.setInt(18, jobId);
|
ps.setInt(18, jobId);
|
||||||
|
|
||||||
ps.executeUpdate();
|
ps.executeUpdate();
|
||||||
|
|
||||||
rs = ps.getGeneratedKeys();
|
try (ResultSet rs = ps.getGeneratedKeys()) {
|
||||||
rs.next();
|
rs.next();
|
||||||
npcId = rs.getInt(1);
|
npcId = rs.getInt(1);
|
||||||
rs.close();
|
}
|
||||||
ps.close();
|
}
|
||||||
|
|
||||||
ps = con.prepareStatement("INSERT INTO playernpcs_equip (npcid, equipid, equippos) VALUES (?, ?, ?)");
|
try (PreparedStatement ps = con.prepareStatement("INSERT INTO playernpcs_equip (npcid, equipid, equippos) VALUES (?, ?, ?)")) {
|
||||||
ps.setInt(1, npcId);
|
ps.setInt(1, npcId);
|
||||||
|
|
||||||
for (Item equip : chr.getInventory(MapleInventoryType.EQUIPPED)) {
|
for (Item equip : chr.getInventory(MapleInventoryType.EQUIPPED)) {
|
||||||
int position = Math.abs(equip.getPosition());
|
int position = Math.abs(equip.getPosition());
|
||||||
if ((position < 12 && position > 0) || (position > 100 && position < 112)) {
|
if ((position < 12 && position > 0) || (position > 100 && position < 112)) {
|
||||||
@@ -485,22 +460,20 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ps.executeBatch();
|
ps.executeBatch();
|
||||||
ps.close();
|
}
|
||||||
|
|
||||||
ps = con.prepareStatement("SELECT * FROM playernpcs WHERE id = ?");
|
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM playernpcs WHERE id = ?")) {
|
||||||
ps.setInt(1, npcId);
|
ps.setInt(1, npcId);
|
||||||
rs = ps.executeQuery();
|
|
||||||
|
|
||||||
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
rs.next();
|
rs.next();
|
||||||
ret = new MaplePlayerNPC(rs);
|
ret = new MaplePlayerNPC(rs);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = null;
|
ret = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
rs.close();
|
|
||||||
ps.close();
|
|
||||||
con.close();
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -514,36 +487,34 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
List<Integer> mapids = new LinkedList<>();
|
List<Integer> mapids = new LinkedList<>();
|
||||||
mapids.add(chr.getWorld());
|
mapids.add(chr.getWorld());
|
||||||
|
|
||||||
try {
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
Connection con = DatabaseConnection.getConnection();
|
PreparedStatement ps = con.prepareStatement("SELECT id, map FROM playernpcs WHERE name LIKE ?" + (map != null ? " AND map = ?" : ""))) {
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT id, map FROM playernpcs WHERE name LIKE ?" + (map != null ? " AND map = ?" : ""));
|
|
||||||
ps.setString(1, chr.getName());
|
ps.setString(1, chr.getName());
|
||||||
if(map != null) ps.setInt(2, map.getId());
|
if (map != null) {
|
||||||
|
ps.setInt(2, map.getId());
|
||||||
|
}
|
||||||
|
|
||||||
ResultSet rs = ps.executeQuery();
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
while(rs.next()) {
|
while (rs.next()) {
|
||||||
updateMapids.add(rs.getInt("map"));
|
updateMapids.add(rs.getInt("map"));
|
||||||
int npcId = rs.getInt("id");
|
int npcId = rs.getInt("id");
|
||||||
|
|
||||||
PreparedStatement ps2 = con.prepareStatement("DELETE FROM playernpcs WHERE id = ?");
|
try (PreparedStatement ps2 = con.prepareStatement("DELETE FROM playernpcs WHERE id = ?")) {
|
||||||
ps2.setInt(1, npcId);
|
ps2.setInt(1, npcId);
|
||||||
ps2.executeUpdate();
|
ps2.executeUpdate();
|
||||||
ps2.close();
|
|
||||||
|
|
||||||
ps2 = con.prepareStatement("DELETE FROM playernpcs_equip WHERE npcid = ?");
|
|
||||||
ps2.setInt(1, npcId);
|
|
||||||
ps2.executeUpdate();
|
|
||||||
ps2.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rs.close();
|
try (PreparedStatement ps2 = con.prepareStatement("DELETE FROM playernpcs_equip WHERE npcid = ?")) {
|
||||||
ps.close();
|
ps2.setInt(1, npcId);
|
||||||
con.close();
|
ps2.executeUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Integer i : updateMapids) {
|
for (Integer i : updateMapids) {
|
||||||
mapids.add(i);
|
mapids.add(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -630,21 +601,20 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void removeAllPlayerNPC() {
|
public static void removeAllPlayerNPC() {
|
||||||
try {
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
Connection con = DatabaseConnection.getConnection();
|
|
||||||
|
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT DISTINCT world, map FROM playernpcs");
|
PreparedStatement ps = con.prepareStatement("SELECT DISTINCT world, map FROM playernpcs");
|
||||||
ResultSet rs = ps.executeQuery();
|
ResultSet rs = ps.executeQuery()) {
|
||||||
|
|
||||||
int wsize = Server.getInstance().getWorldsSize();
|
int wsize = Server.getInstance().getWorldsSize();
|
||||||
while(rs.next()) {
|
while (rs.next()) {
|
||||||
int world = rs.getInt("world"), map = rs.getInt("map");
|
int world = rs.getInt("world"), map = rs.getInt("map");
|
||||||
if(world >= wsize) continue;
|
if (world >= wsize) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
for (Channel channel : Server.getInstance().getChannelsFromWorld(world)) {
|
for (Channel channel : Server.getInstance().getChannelsFromWorld(world)) {
|
||||||
MapleMap m = channel.getMapFactory().getMap(map);
|
MapleMap m = channel.getMapFactory().getMap(map);
|
||||||
|
|
||||||
for(MapleMapObject pnpcObj : m.getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.PLAYER_NPC))) {
|
for (MapleMapObject pnpcObj : m.getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.PLAYER_NPC))) {
|
||||||
MaplePlayerNPC pn = (MaplePlayerNPC) pnpcObj;
|
MaplePlayerNPC pn = (MaplePlayerNPC) pnpcObj;
|
||||||
m.removeMapObject(pnpcObj);
|
m.removeMapObject(pnpcObj);
|
||||||
m.broadcastMessage(MaplePacketCreator.removeNPCController(pn.getObjectId()));
|
m.broadcastMessage(MaplePacketCreator.removeNPCController(pn.getObjectId()));
|
||||||
@@ -653,26 +623,21 @@ public class MaplePlayerNPC extends AbstractMapleMapObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rs.close();
|
try (PreparedStatement ps2 = con.prepareStatement("DELETE FROM playernpcs")) {
|
||||||
ps.close();
|
ps2.executeUpdate();
|
||||||
|
|
||||||
ps = con.prepareStatement("DELETE FROM playernpcs");
|
|
||||||
ps.executeUpdate();
|
|
||||||
ps.close();
|
|
||||||
|
|
||||||
ps = con.prepareStatement("DELETE FROM playernpcs_equip");
|
|
||||||
ps.executeUpdate();
|
|
||||||
ps.close();
|
|
||||||
|
|
||||||
ps = con.prepareStatement("DELETE FROM playernpcs_field");
|
|
||||||
ps.executeUpdate();
|
|
||||||
ps.close();
|
|
||||||
|
|
||||||
for(World w : Server.getInstance().getWorlds()) {
|
|
||||||
w.resetPlayerNpcMapData();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
con.close();
|
try (PreparedStatement ps2 = con.prepareStatement("DELETE FROM playernpcs_equip")) {
|
||||||
|
ps2.executeUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
try (PreparedStatement ps2 = con.prepareStatement("DELETE FROM playernpcs_field")) {
|
||||||
|
ps2.executeUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (World w : Server.getInstance().getWorlds()) {
|
||||||
|
w.resetPlayerNpcMapData();
|
||||||
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user