mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-10-19 09:02:54 -04:00
Added automatic cell permission messages
This commit is contained in:
+4
-2
@@ -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
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user