diff --git a/gameserver/src/main/java/brainwine/gameserver/entity/player/PlayerManager.java b/gameserver/src/main/java/brainwine/gameserver/entity/player/PlayerManager.java index a86a679..b417297 100644 --- a/gameserver/src/main/java/brainwine/gameserver/entity/player/PlayerManager.java +++ b/gameserver/src/main/java/brainwine/gameserver/entity/player/PlayerManager.java @@ -180,7 +180,11 @@ public class PlayerManager { public Player getPlayer(String name) { return playersByName.get(name.toLowerCase()); } - + + public Player getPlayerById(String id) { + return playersById.get(id); + } + public Player getPlayer(Connection connection) { return playersByConnection.get(connection); } diff --git a/gameserver/src/main/java/brainwine/gameserver/item/ItemUseType.java b/gameserver/src/main/java/brainwine/gameserver/item/ItemUseType.java index e09e66c..f2995fe 100644 --- a/gameserver/src/main/java/brainwine/gameserver/item/ItemUseType.java +++ b/gameserver/src/main/java/brainwine/gameserver/item/ItemUseType.java @@ -14,6 +14,8 @@ public enum ItemUseType { FIELDABLE, FLY, MULTI, + PROTECTED, + PUBLIC, SWITCH, SWITCHED, TELEPORT, diff --git a/gameserver/src/main/java/brainwine/gameserver/server/requests/BlockUseRequest.java b/gameserver/src/main/java/brainwine/gameserver/server/requests/BlockUseRequest.java index 18ec86c..2422a36 100644 --- a/gameserver/src/main/java/brainwine/gameserver/server/requests/BlockUseRequest.java +++ b/gameserver/src/main/java/brainwine/gameserver/server/requests/BlockUseRequest.java @@ -48,6 +48,26 @@ public class BlockUseRequest extends PlayerRequest { Item item = block.getItem(layer); int mod = block.getMod(layer); + if(metaBlock != null && item.hasUse(ItemUseType.PROTECTED)) { + Player owner = GameServer.getInstance().getPlayerManager().getPlayerById(metaBlock.getOwner()); + + if(player != owner) { + if(item.hasUse(ItemUseType.PUBLIC)) { + String publicUse = item.getUse(ItemUseType.PUBLIC).toString(); + + switch(publicUse) { + case "owner": + player.alert(String.format("This %s is owned by %s.", + item.getTitle().toLowerCase(), owner == null ? "nobody.." : owner.getName())); + break; + } + } else { + player.alert("Sorry, that belongs to somebody else."); + return; + } + } + } + for(Entry entry : item.getUses().entrySet()) { ItemUseType use = entry.getKey(); Object value = entry.getValue(); @@ -55,7 +75,7 @@ public class BlockUseRequest extends PlayerRequest { switch(use) { case DIALOG: case CREATE_DIALOG: - if(metaBlock != null && player.getDocumentId().equals(metaBlock.getOwner()) && data != null && value instanceof Map) { + if(data != null && value instanceof Map) { Map config = (Map)value; String target = MapHelper.getString(config, "target", "none");