diff --git a/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java index fa025157..a6327d7a 100644 --- a/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java +++ b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java @@ -85,6 +85,7 @@ public class AuctionQueryHeadersResponseMessage extends SWGMessage { for(AuctionItem item : itemList) { result.put(getUnicodeString(item.getItemName())); + //System.out.println(item.getItemName()); } result.putInt(itemList.size()); @@ -96,7 +97,8 @@ public class AuctionQueryHeadersResponseMessage extends SWGMessage { result.put((byte) i); result.putInt(item.getPrice()); result.putInt((int) ((item.getExpireTime() - System.currentTimeMillis()) / 1000)); - result.putInt(item.getPrice()); + result.putInt(item.getPrice()); // if != price then auction instead of instant sale + //result.putInt(0); result.putShort((short) getStringIndex(item.getVuid())); result.putLong(item.getOwnerId()); result.putShort((short) getStringIndex(item.getOwnerName())); @@ -105,7 +107,7 @@ public class AuctionQueryHeadersResponseMessage extends SWGMessage { result.putShort((short) getStringIndex(item.getOwnerName())); result.put((byte) 0);*/ result.putLong(0); - result.putInt(2); // unk + result.putInt(0); // unk seen as 2 mostly, doesnt seem to have any effect result.putInt(0); result.putShort((short) 0); result.putInt(item.getItemType()); // gameObjectType/category bitmask diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index 1e217d34..f3dc4d31 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -275,10 +275,7 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria String firstName = NGECore.getInstance().characterService.getPlayerFirstName(oid); entryListFirstNames.add(firstName); } - - entryListFirstNames.add("Peter"); - entryListFirstNames.add("Jackson"); - + owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(entryListFirstNames, name)); } @@ -289,38 +286,47 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria String firstName = NGECore.getInstance().characterService.getPlayerFirstName(oid); banListFirstNames.add(firstName); } - - banListFirstNames.add("Peter"); - banListFirstNames.add("Smith"); - + owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(banListFirstNames, name)); } public void addPlayerToEntryList(CreatureObject owner, long oid, String firstName){ if (!entryList.contains(oid)){ + SWGObject obj = NGECore.getInstance().objectService.getObject(oid); entryList.add(oid); - owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_added", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + if(getObservers().contains(obj.getClient())) + updateCellPermissions(obj); } } public void removePlayerFromEntryList(CreatureObject owner, long oid, String firstName){ if (entryList.contains(oid)){ + SWGObject obj = NGECore.getInstance().objectService.getObject(oid); entryList.remove(oid); owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + if(getObservers().contains(obj.getClient())) // TODO: eject player + updateCellPermissions(obj); } } public void addPlayerToBanList(CreatureObject owner, long oid, String firstName){ if (!banList.contains(oid)){ + SWGObject obj = NGECore.getInstance().objectService.getObject(oid); banList.add(oid); - owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_added", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + if(getObservers().contains(obj.getClient())) // TODO: eject player + updateCellPermissions(obj); } } public void removePlayerFromBanList(CreatureObject owner, long oid, String firstName){ if (banList.contains(oid)){ + SWGObject obj = NGECore.getInstance().objectService.getObject(oid); banList.remove(oid); owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + if(getObservers().contains(obj.getClient())) + updateCellPermissions(obj); } } @@ -359,4 +365,14 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria super.sendListDelta(viewType, updateType, buffer); } + public boolean canEnter(SWGObject object) { + return (getPrivacy() == PRIVATE && entryList.contains(object.getObjectID())) || !banList.contains(object.getObjectID()); + } + + public void updateCellPermissions(SWGObject obj) { + if(obj.getClient() == null) + return; + viewChildren(this, true, false, (cell) -> ((CellObject) cell).sendPermissionMessage(obj.getClient())); + } + } diff --git a/src/resources/objects/cell/CellObject.java b/src/resources/objects/cell/CellObject.java index 2709577f..9c25167b 100644 --- a/src/resources/objects/cell/CellObject.java +++ b/src/resources/objects/cell/CellObject.java @@ -27,6 +27,7 @@ import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.UpdateCellPermissionMessage; import resources.objects.ObjectMessageBuilder; +import resources.objects.building.BuildingObject; import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; @@ -83,9 +84,21 @@ public class CellObject extends SWGObject implements Serializable { destination.getSession().write(messageBuilder.buildBaseline3()); destination.getSession().write(messageBuilder.buildBaseline6()); - destination.getSession().write(new UpdateCellPermissionMessage((byte) 1, getObjectID()).serialize()); + sendPermissionMessage(destination); } + + public void sendPermissionMessage(Client destination) { + + if(destination == null || destination.getSession() == null) { + System.out.println("NULL session"); + return; + } + + byte canEnter = (byte) (((BuildingObject) getContainer()).canEnter(destination.parent) ? 1 : 0); + destination.getSession().write(new UpdateCellPermissionMessage(canEnter, getObjectID()).serialize()); + + } @Override public void initAfterDBLoad() { diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 20a097ea..fc2accc5 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -621,9 +621,6 @@ public class HousingService implements INetworkDispatch { } public void handleSearchForItems(SWGObject owner, TangibleObject target) { - // Spawning the structure terminal outside makes it display the correct radial - core.staticService.spawnObject("object/tangible/terminal/shared_terminal_player_structure.iff", "tatooine", 0L, 3525.0F, 4.0F, -4800.0F, 0.70F, 0.71F); - // I assume that childobject does not get a radial somehow final BuildingObject building = (BuildingObject) target.getGrandparent(); //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct");