forked from MagicBane/Server
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 221ae0a58b |
@@ -24,7 +24,3 @@
|
||||
hs_err_pid*
|
||||
replay_pid*
|
||||
|
||||
*.idea/
|
||||
Server.iml
|
||||
*.gitignore
|
||||
prestonbane.iml
|
||||
@@ -243,8 +243,12 @@ public class dbNPCHandler extends dbHandlerBase {
|
||||
|
||||
public boolean UPDATE_EQUIPSET(NPC npc, int equipSetID) {
|
||||
|
||||
// Column name must match what NPC/Mob loaders read ("equipmentSet").
|
||||
// Using the wrong column here causes the update to fail silently and
|
||||
// dev command to report "Unable to find Equipset" despite a valid ID.
|
||||
|
||||
try (Connection connection = DbManager.getConnection();
|
||||
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_npc` SET `equipsetID`=? WHERE `UID`=?")) {
|
||||
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_npc` SET `equipmentSet`=? WHERE `UID`=?")) {
|
||||
|
||||
preparedStatement.setInt(1, equipSetID);
|
||||
preparedStatement.setLong(2, npc.getObjectUUID());
|
||||
@@ -467,4 +471,4 @@ public class dbNPCHandler extends dbHandlerBase {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -541,8 +541,18 @@ public class Mob extends AbstractIntelligenceAgent {
|
||||
mobWithoutID.parentZone = parent;
|
||||
mobWithoutID.parentZoneID = parent.getObjectUUID();
|
||||
|
||||
// NPC in a Building derives position from slot
|
||||
// Ensure spawn coordinates are persisted for DB insert
|
||||
// statLat/statAlt/statLon represent local (zone-relative) spawn
|
||||
// coordinates used by the DB handler when creating the mob row.
|
||||
if (spawn != null && parent != null) {
|
||||
// Convert world coordinates to zone-local spawn coordinates
|
||||
Vector3fImmutable localSpawn = spawn.subtract(parent.getLoc());
|
||||
mobWithoutID.statLat = localSpawn.x;
|
||||
mobWithoutID.statAlt = localSpawn.y;
|
||||
mobWithoutID.statLon = localSpawn.z;
|
||||
}
|
||||
|
||||
// NPC in a Building derives position from slot
|
||||
if (mobWithoutID.building != null)
|
||||
mobWithoutID.bindLoc = Vector3fImmutable.ZERO;
|
||||
|
||||
|
||||
@@ -470,7 +470,8 @@ public class NPC extends AbstractCharacter {
|
||||
newNPC.bindLoc = Vector3fImmutable.ZERO;
|
||||
|
||||
newNPC.parentZoneUUID = parent.getObjectUUID();
|
||||
newNPC.guildUUID = guild.getObjectUUID();
|
||||
// guild may be null when spawning via ./npc; default to 0
|
||||
newNPC.guildUUID = (guild != null) ? guild.getObjectUUID() : 0;
|
||||
|
||||
if (building == null)
|
||||
newNPC.buildingUUID = 0;
|
||||
@@ -1347,4 +1348,4 @@ public class NPC extends AbstractCharacter {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -174,7 +174,6 @@ public class PlayerCharacter extends AbstractCharacter {
|
||||
private boolean isTeleporting = false;
|
||||
private boolean dirtyLoad = true;
|
||||
private final ReadWriteLock dirtyLock = new ReentrantReadWriteLock(true);
|
||||
private Bounds playerBounds;
|
||||
|
||||
/**
|
||||
* No Id Constructor
|
||||
@@ -207,10 +206,6 @@ public class PlayerCharacter extends AbstractCharacter {
|
||||
|
||||
this.guildStatus = new AtomicInteger(0);
|
||||
this.bindBuildingID = -1;
|
||||
|
||||
this.playerBounds = Bounds.borrow();
|
||||
playerBounds.setBounds(this.getLoc());
|
||||
this.playerBounds.setBounds(this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -274,40 +269,11 @@ public class PlayerCharacter extends AbstractCharacter {
|
||||
|
||||
this.hash = rs.getString("hash");
|
||||
|
||||
this.playerBounds = Bounds.borrow();
|
||||
playerBounds.setBounds(this.getLoc());
|
||||
this.playerBounds.setBounds(this);
|
||||
|
||||
|
||||
// For debugging skills
|
||||
// CharacterSkill.printSkills(this);
|
||||
}
|
||||
|
||||
public void updateBounds() {
|
||||
this.playerBounds.setBounds(this);
|
||||
this.checkCollisionsWithOtherPlayers();
|
||||
// This is a test to see if it will push to the docker container
|
||||
}
|
||||
|
||||
public void checkCollisionsWithOtherPlayers() {
|
||||
HashSet<AbstractWorldObject> nearbyObjects = WorldGrid.getObjectsInRangePartial(this, MBServerStatics.CHARACTER_LOAD_RANGE, MBServerStatics.MASK_PLAYER);
|
||||
for (AbstractWorldObject obj : nearbyObjects) {
|
||||
if (obj instanceof PlayerCharacter && obj != this) {
|
||||
PlayerCharacter otherPlayer = (PlayerCharacter) obj;
|
||||
if (Bounds.collide(this.getBounds(), otherPlayer.getBounds(), 0.1f)) {
|
||||
// Handle collision with other player
|
||||
handleCollisionWithPlayer(otherPlayer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handleCollisionWithPlayer(PlayerCharacter otherPlayer) {
|
||||
// Implement collision response here
|
||||
System.out.println("Collision detected with player: " + otherPlayer.getFirstName());
|
||||
ChatManager.chatSystemInfo(otherPlayer, "Has Collided with YOU");
|
||||
}
|
||||
|
||||
public static Building getUpdatedBindBuilding(PlayerCharacter player) {
|
||||
Building returnBuilding = null;
|
||||
|
||||
@@ -4916,7 +4882,6 @@ public class PlayerCharacter extends AbstractCharacter {
|
||||
@Override
|
||||
public void updateLocation() {
|
||||
|
||||
this.updateBounds();
|
||||
|
||||
if (!this.isMoving())
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user