Implemented admin delete_group command.

This commit is contained in:
MobiusDevelopment
2022-08-16 21:02:41 +00:00
parent a5aecb2a9a
commit b3c92bebee
84 changed files with 5602 additions and 1550 deletions

View File

@@ -16,7 +16,11 @@
*/
package handlers.admincommandhandlers;
import java.util.Collections;
import java.util.List;
import org.l2jmobius.gameserver.data.SpawnTable;
import org.l2jmobius.gameserver.handler.AdminCommandHandler;
import org.l2jmobius.gameserver.handler.IAdminCommandHandler;
import org.l2jmobius.gameserver.instancemanager.DBSpawnManager;
import org.l2jmobius.gameserver.model.Spawn;
@@ -24,23 +28,32 @@ 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.spawns.NpcSpawnTemplate;
import org.l2jmobius.gameserver.model.spawns.SpawnGroup;
import org.l2jmobius.gameserver.model.spawns.SpawnTemplate;
import org.l2jmobius.gameserver.model.zone.type.SpawnTerritory;
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 +61,125 @@ 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 (DBSpawnManager.getInstance().isDefined(spawn.getId()))
final NpcSpawnTemplate npcSpawnTemplate = spawn.getNpcSpawnTemplate();
final SpawnGroup group = npcSpawnTemplate != null ? npcSpawnTemplate.getGroup() : null;
List<SpawnTerritory> territories = group != null ? group.getTerritories() : Collections.emptyList();
if (territories.isEmpty())
{
DBSpawnManager.getInstance().deleteSpawn(spawn, true);
final SpawnTemplate spawnTemplate = npcSpawnTemplate != null ? npcSpawnTemplate.getSpawnTemplate() : null;
if (spawnTemplate != null)
{
territories = spawnTemplate.getTerritories();
}
}
if (territories.isEmpty())
{
target.deleteMe();
spawn.stopRespawn();
if (DBSpawnManager.getInstance().isDefined(spawn.getId()))
{
DBSpawnManager.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 NpcSpawnTemplate npcSpawnTemplate = spawn.getNpcSpawnTemplate();
final SpawnGroup group = npcSpawnTemplate != null ? npcSpawnTemplate.getGroup() : null;
List<SpawnTerritory> territories = group != null ? group.getTerritories() : Collections.emptyList();
boolean simpleTerritory = false;
if (territories.isEmpty())
{
final SpawnTemplate spawnTemplate = npcSpawnTemplate != null ? npcSpawnTemplate.getSpawnTemplate() : null;
if (spawnTemplate != null)
{
territories = spawnTemplate.getTerritories();
simpleTerritory = true;
}
}
if (territories.isEmpty())
{
BuilderUtil.sendSysMessage(player, "Incorrect target.");
}
else
{
target.deleteMe();
spawn.stopRespawn();
if (DBSpawnManager.getInstance().isDefined(spawn.getId()))
{
DBSpawnManager.getInstance().deleteSpawn(spawn, true);
}
else
{
SpawnTable.getInstance().deleteSpawn(spawn, true);
}
if (group != null)
{
for (NpcSpawnTemplate template : group.getSpawns())
{
template.despawn();
}
}
else if (simpleTerritory && (npcSpawnTemplate != null))
{
npcSpawnTemplate.despawn();
}
BuilderUtil.sendSysMessage(player, "Deleted " + target.getName() + " group from " + target.getObjectId() + ".");
}
}
BuilderUtil.sendSysMessage(activeChar, "Deleted " + target.getName() + " from " + target.getObjectId() + ".");
}
@Override