Hi
Comet does not have an ejectall command, and the pickall does not take into account items owned by other players.
To fix this, first open PickAllCommand.java and replace it with this:
Then navigate to ItemsComponent.java and add these 2 voids:Code:package com.cometproject.server.game.commands.user.room; import com.cometproject.server.config.Locale; import com.cometproject.server.game.commands.ChatCommand; import com.cometproject.server.game.rooms.objects.items.RoomItem; import com.cometproject.server.game.rooms.objects.items.RoomItemFloor; import com.cometproject.server.game.rooms.objects.items.RoomItemWall; import com.cometproject.server.game.rooms.types.Room; import com.cometproject.server.network.sessions.Session; import java.util.ArrayList; import java.util.List; public class PickAllCommand extends ChatCommand { @Override public void execute(Session client, String message[]) { Room room = client.getPlayer().getEntity().getRoom(); if (room == null || !room.getData().getOwner().equals(client.getPlayer().getData().getUsername())) { return; } List<RoomItem> itemsToRemove = new ArrayList<>(); itemsToRemove.addAll(room.getItems().getFloorItems().values()); itemsToRemove.addAll(room.getItems().getWallItems().values()); for (RoomItem item : itemsToRemove) { if (item instanceof RoomItemFloor) { if(item.getOwner() == room.getData().getOwnerId()) { room.getItems().removeItem((RoomItemFloor) item, client); } } else if (item instanceof RoomItemWall) { if(item.getOwner() == room.getData().getOwnerId()) { room.getItems().removeItem((RoomItemWall) item, client, true); } } } itemsToRemove.clear(); } @Override public String getPermission() { return "pickall_command"; } @Override public String getDescription() { return Locale.get("command.pickall.description"); } }
Then create a new file in commands/user/room named EjectAllCommand.java and populate it with this:Code:public void removeNonOwnedItem(RoomItemFloor item, int ownerId) { RoomItemDao.removeItemFromRoom(item.getItemId(), ownerId); Session client = NetworkManager.getInstance().getSessions().getByPlayerId(ownerId); room.getEntities().broadcastMessage(new RemoveFloorItemMessageComposer(ItemManager.getInstance().getItemVirtualId(item.getId()), ownerId)); this.getFloorItems().remove(item.getId()); if(client != null && client.getPlayer() != null) { client.getPlayer().getInventory().add(item.getId(), item.getItemId(), item.getExtraData(), item.getLimitedEditionItemData()); client.send(new UpdateInventoryMessageComposer()); } } public void removeNonOwnedItem(RoomItemWall item, int ownerId) { RoomItemDao.removeItemFromRoom(item.getItemId(), ownerId); room.getEntities().broadcastMessage(new RemoveWallItemMessageComposer(ItemManager.getInstance().getItemVirtualId(item.getId()), ownerId)); this.getWallItems().remove(item.getId()); Session client = NetworkManager.getInstance().getSessions().getByPlayerId(ownerId); if(client != null && client.getPlayer() != null) { client.getPlayer().getInventory().add(item.getId(), item.getItemId(), item.getExtraData(), item.getLimitedEditionItemData()); client.send(new UpdateInventoryMessageComposer()); } }
Then simply open CommandManager.java and add a new command binding like so:Code:package com.cometproject.server.game.commands.user.room; import com.cometproject.server.config.Locale; import com.cometproject.server.game.commands.ChatCommand; import com.cometproject.server.game.rooms.objects.items.RoomItem; import com.cometproject.server.game.rooms.objects.items.RoomItemFloor; import com.cometproject.server.game.rooms.objects.items.RoomItemWall; import com.cometproject.server.game.rooms.types.Room; import com.cometproject.server.network.sessions.Session; import java.util.ArrayList; import java.util.List; public class EjectAllCommand extends ChatCommand { @Override public void execute(Session client, String message[]) { Room room = client.getPlayer().getEntity().getRoom(); if (room == null || !room.getData().getOwner().equals(client.getPlayer().getData().getUsername())) { return; } List<RoomItem> itemsToRemove = new ArrayList<>(); itemsToRemove.addAll(room.getItems().getFloorItems().values()); itemsToRemove.addAll(room.getItems().getWallItems().values()); for (RoomItem item : itemsToRemove) { final int ownerId = item.getOwner(); if(ownerId != room.getData().getOwnerId()) { if (item instanceof RoomItemFloor) { room.getItems().removeNonOwnedItem((RoomItemFloor) item, ownerId); } else if (item instanceof RoomItemWall) { room.getItems().removeNonOwnedItem((RoomItemWall) item, ownerId); } } } itemsToRemove.clear(); } @Override public String getPermission() { return "ejectall_command"; } @Override public String getDescription() { return Locale.get("command.ejectall.description"); } }
Was requested by someone I work for however I figured everyone should be able to have this command as it should have been in there by default.Code:this.addCommand("ejectall", new EjectAllCommand());



Reply With Quote


