Implemented admin delete_group command.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package handlers.admincommandhandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.data.SpawnTable;
|
||||
import org.l2jmobius.gameserver.handler.AdminCommandHandler;
|
||||
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
import org.l2jmobius.gameserver.instancemanager.RaidBossSpawnManager;
|
||||
import org.l2jmobius.gameserver.model.Spawn;
|
||||
@@ -24,23 +25,29 @@ import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.zone.type.NpcSpawnTerritory;
|
||||
import org.l2jmobius.gameserver.util.BuilderUtil;
|
||||
import org.l2jmobius.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* This class handles following admin commands: - delete = deletes target
|
||||
* @author Mobius
|
||||
*/
|
||||
public class AdminDelete implements IAdminCommandHandler
|
||||
{
|
||||
private static final String[] ADMIN_COMMANDS =
|
||||
{
|
||||
"admin_delete"
|
||||
"admin_delete", // supports range parameter
|
||||
"admin_delete_group" // for territory spawns
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean useAdminCommand(String command, Player activeChar)
|
||||
{
|
||||
if (command.startsWith("admin_delete"))
|
||||
if (command.contains("group"))
|
||||
{
|
||||
handleDeleteGroup(activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_delete"))
|
||||
{
|
||||
final String[] split = command.split(" ");
|
||||
handleDelete(activeChar, (split.length > 1) && Util.isDigit(split[1]) ? Integer.parseInt(split[1]) : 0);
|
||||
@@ -48,48 +55,110 @@ public class AdminDelete implements IAdminCommandHandler
|
||||
return true;
|
||||
}
|
||||
|
||||
private void handleDelete(Player activeChar, int range)
|
||||
private void handleDelete(Player player, int range)
|
||||
{
|
||||
if (range > 0)
|
||||
{
|
||||
World.getInstance().forEachVisibleObjectInRange(activeChar, Npc.class, range, target ->
|
||||
{
|
||||
deleteNpc(activeChar, target);
|
||||
});
|
||||
World.getInstance().forEachVisibleObjectInRange(player, Npc.class, range, target -> deleteNpc(player, target));
|
||||
return;
|
||||
}
|
||||
|
||||
final WorldObject obj = activeChar.getTarget();
|
||||
final WorldObject obj = player.getTarget();
|
||||
if (obj instanceof Npc)
|
||||
{
|
||||
deleteNpc(activeChar, (Npc) obj);
|
||||
deleteNpc(player, (Npc) obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
BuilderUtil.sendSysMessage(activeChar, "Incorrect target.");
|
||||
BuilderUtil.sendSysMessage(player, "Incorrect target.");
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteNpc(Player activeChar, Npc target)
|
||||
private void handleDeleteGroup(Player player)
|
||||
{
|
||||
final WorldObject obj = player.getTarget();
|
||||
if (obj instanceof Npc)
|
||||
{
|
||||
deleteGroup(player, (Npc) obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
BuilderUtil.sendSysMessage(player, "Incorrect target.");
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteNpc(Player player, Npc target)
|
||||
{
|
||||
target.deleteMe();
|
||||
|
||||
final Spawn spawn = target.getSpawn();
|
||||
if (spawn != null)
|
||||
{
|
||||
spawn.stopRespawn();
|
||||
|
||||
if (RaidBossSpawnManager.getInstance().isDefined(spawn.getId()))
|
||||
final NpcSpawnTerritory npcSpawnTerritory = spawn.getSpawnTerritory();
|
||||
if (npcSpawnTerritory == null)
|
||||
{
|
||||
RaidBossSpawnManager.getInstance().deleteSpawn(spawn, true);
|
||||
target.deleteMe();
|
||||
spawn.stopRespawn();
|
||||
if (RaidBossSpawnManager.getInstance().isDefined(spawn.getId()))
|
||||
{
|
||||
RaidBossSpawnManager.getInstance().deleteSpawn(spawn, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
SpawnTable.getInstance().deleteSpawn(spawn, true);
|
||||
}
|
||||
BuilderUtil.sendSysMessage(player, "Deleted " + target.getName() + " from " + target.getObjectId() + ".");
|
||||
}
|
||||
else
|
||||
{
|
||||
SpawnTable.getInstance().deleteSpawn(spawn, true);
|
||||
AdminCommandHandler.getInstance().useAdminCommand(player, AdminDelete.ADMIN_COMMANDS[1], true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteGroup(Player player, Npc target)
|
||||
{
|
||||
final Spawn spawn = target.getSpawn();
|
||||
if (spawn != null)
|
||||
{
|
||||
final NpcSpawnTerritory npcSpawnTerritory = spawn.getSpawnTerritory();
|
||||
if (npcSpawnTerritory == null)
|
||||
{
|
||||
BuilderUtil.sendSysMessage(player, "Incorrect target.");
|
||||
}
|
||||
else
|
||||
{
|
||||
target.deleteMe();
|
||||
spawn.stopRespawn();
|
||||
if (RaidBossSpawnManager.getInstance().isDefined(spawn.getId()))
|
||||
{
|
||||
RaidBossSpawnManager.getInstance().deleteSpawn(spawn, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
SpawnTable.getInstance().deleteSpawn(spawn, true);
|
||||
}
|
||||
|
||||
for (WorldObject wo : World.getInstance().getVisibleObjects())
|
||||
{
|
||||
if (!wo.isNpc())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
final Spawn npcSpawn = ((Npc) wo).getSpawn();
|
||||
if (npcSpawn != null)
|
||||
{
|
||||
final NpcSpawnTerritory territory = npcSpawn.getSpawnTerritory();
|
||||
if ((territory != null) && !territory.getName().isEmpty() && territory.getName().equals(npcSpawnTerritory.getName()))
|
||||
{
|
||||
((Npc) wo).deleteMe();
|
||||
npcSpawn.stopRespawn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BuilderUtil.sendSysMessage(player, "Deleted " + target.getName() + " group from " + target.getObjectId() + ".");
|
||||
}
|
||||
}
|
||||
|
||||
BuilderUtil.sendSysMessage(activeChar, "Deleted " + target.getName() + " from " + target.getObjectId() + ".");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user