- Joined
- Apr 30, 2007
- Messages
- 2,339
- Reaction score
- 1,547
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:
Then create a new file in commands/user/room named EjectAllCommand.java and populate it with this:
Then simply open CommandManager.java and add a new command binding like so:
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.
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:
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 navigate to ItemsComponent.java and add these 2 voids:
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 create a new file in commands/user/room named EjectAllCommand.java and populate it with this:
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");
}
}
Then simply open CommandManager.java and add a new command binding like so:
Code:
this.addCommand("ejectall", new EjectAllCommand());
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.
Last edited: