This commit is contained in:
633
trunk/dist/game/data/scripts/handlers/admincommandhandlers/AdminMobGroup.java
vendored
Normal file
633
trunk/dist/game/data/scripts/handlers/admincommandhandlers/AdminMobGroup.java
vendored
Normal file
@@ -0,0 +1,633 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J DataPack
|
||||
*
|
||||
* This file is part of L2J DataPack.
|
||||
*
|
||||
* L2J DataPack is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* L2J DataPack is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.admincommandhandlers;
|
||||
|
||||
import com.l2jserver.gameserver.datatables.NpcData;
|
||||
import com.l2jserver.gameserver.handler.IAdminCommandHandler;
|
||||
import com.l2jserver.gameserver.model.L2World;
|
||||
import com.l2jserver.gameserver.model.MobGroup;
|
||||
import com.l2jserver.gameserver.model.MobGroupTable;
|
||||
import com.l2jserver.gameserver.model.actor.L2Character;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
|
||||
import com.l2jserver.gameserver.network.serverpackets.SetupGauge;
|
||||
import com.l2jserver.gameserver.util.Broadcast;
|
||||
|
||||
/**
|
||||
* @author littlecrow Admin commands handler for controllable mobs
|
||||
*/
|
||||
public class AdminMobGroup implements IAdminCommandHandler
|
||||
{
|
||||
private static final String[] ADMIN_COMMANDS =
|
||||
{
|
||||
"admin_mobmenu",
|
||||
"admin_mobgroup_list",
|
||||
"admin_mobgroup_create",
|
||||
"admin_mobgroup_remove",
|
||||
"admin_mobgroup_delete",
|
||||
"admin_mobgroup_spawn",
|
||||
"admin_mobgroup_unspawn",
|
||||
"admin_mobgroup_kill",
|
||||
"admin_mobgroup_idle",
|
||||
"admin_mobgroup_attack",
|
||||
"admin_mobgroup_rnd",
|
||||
"admin_mobgroup_return",
|
||||
"admin_mobgroup_follow",
|
||||
"admin_mobgroup_casting",
|
||||
"admin_mobgroup_nomove",
|
||||
"admin_mobgroup_attackgrp",
|
||||
"admin_mobgroup_invul"
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean useAdminCommand(String command, L2PcInstance activeChar)
|
||||
{
|
||||
if (command.equals("admin_mobmenu"))
|
||||
{
|
||||
showMainPage(activeChar, command);
|
||||
return true;
|
||||
}
|
||||
else if (command.equals("admin_mobgroup_list"))
|
||||
{
|
||||
showGroupList(activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_create"))
|
||||
{
|
||||
createGroup(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_delete") || command.startsWith("admin_mobgroup_remove"))
|
||||
{
|
||||
removeGroup(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_spawn"))
|
||||
{
|
||||
spawnGroup(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_unspawn"))
|
||||
{
|
||||
unspawnGroup(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_kill"))
|
||||
{
|
||||
killGroup(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_attackgrp"))
|
||||
{
|
||||
attackGrp(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_attack"))
|
||||
{
|
||||
if (activeChar.getTarget() instanceof L2Character)
|
||||
{
|
||||
L2Character target = (L2Character) activeChar.getTarget();
|
||||
attack(command, activeChar, target);
|
||||
}
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_rnd"))
|
||||
{
|
||||
setNormal(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_idle"))
|
||||
{
|
||||
idle(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_return"))
|
||||
{
|
||||
returnToChar(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_follow"))
|
||||
{
|
||||
follow(command, activeChar, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_casting"))
|
||||
{
|
||||
setCasting(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_nomove"))
|
||||
{
|
||||
noMove(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_invul"))
|
||||
{
|
||||
invul(command, activeChar);
|
||||
}
|
||||
else if (command.startsWith("admin_mobgroup_teleport"))
|
||||
{
|
||||
teleportGroup(command, activeChar);
|
||||
}
|
||||
showMainPage(activeChar, command);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param activeChar
|
||||
* @param command
|
||||
*/
|
||||
private void showMainPage(L2PcInstance activeChar, String command)
|
||||
{
|
||||
String filename = "mobgroup.htm";
|
||||
AdminHtml.showAdminHtml(activeChar, filename);
|
||||
}
|
||||
|
||||
private void returnToChar(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Incorrect command arguments.");
|
||||
return;
|
||||
}
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
group.returnGroup(activeChar);
|
||||
}
|
||||
|
||||
private void idle(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Incorrect command arguments.");
|
||||
return;
|
||||
}
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
group.setIdleMode();
|
||||
}
|
||||
|
||||
private void setNormal(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Incorrect command arguments.");
|
||||
return;
|
||||
}
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
group.setAttackRandom();
|
||||
}
|
||||
|
||||
private void attack(String command, L2PcInstance activeChar, L2Character target)
|
||||
{
|
||||
int groupId;
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Incorrect command arguments.");
|
||||
return;
|
||||
}
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
group.setAttackTarget(target);
|
||||
}
|
||||
|
||||
private void follow(String command, L2PcInstance activeChar, L2Character target)
|
||||
{
|
||||
int groupId;
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Incorrect command arguments.");
|
||||
return;
|
||||
}
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
group.setFollowMode(target);
|
||||
}
|
||||
|
||||
private void createGroup(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
int templateId;
|
||||
int mobCount;
|
||||
|
||||
try
|
||||
{
|
||||
String[] cmdParams = command.split(" ");
|
||||
|
||||
groupId = Integer.parseInt(cmdParams[1]);
|
||||
templateId = Integer.parseInt(cmdParams[2]);
|
||||
mobCount = Integer.parseInt(cmdParams[3]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_create <group> <npcid> <count>");
|
||||
return;
|
||||
}
|
||||
|
||||
if (MobGroupTable.getInstance().getGroup(groupId) != null)
|
||||
{
|
||||
activeChar.sendMessage("Mob group " + groupId + " already exists.");
|
||||
return;
|
||||
}
|
||||
|
||||
L2NpcTemplate template = NpcData.getInstance().getTemplate(templateId);
|
||||
|
||||
if (template == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid NPC ID specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = new MobGroup(groupId, template, mobCount);
|
||||
MobGroupTable.getInstance().addGroup(groupId, group);
|
||||
|
||||
activeChar.sendMessage("Mob group " + groupId + " created.");
|
||||
}
|
||||
|
||||
private void removeGroup(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_remove <groupId>");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
doAnimation(activeChar);
|
||||
group.unspawnGroup();
|
||||
|
||||
if (MobGroupTable.getInstance().removeGroup(groupId))
|
||||
{
|
||||
activeChar.sendMessage("Mob group " + groupId + " unspawned and removed.");
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnGroup(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
boolean topos = false;
|
||||
int posx = 0;
|
||||
int posy = 0;
|
||||
int posz = 0;
|
||||
|
||||
try
|
||||
{
|
||||
String[] cmdParams = command.split(" ");
|
||||
groupId = Integer.parseInt(cmdParams[1]);
|
||||
|
||||
try
|
||||
{ // we try to get a position
|
||||
posx = Integer.parseInt(cmdParams[2]);
|
||||
posy = Integer.parseInt(cmdParams[3]);
|
||||
posz = Integer.parseInt(cmdParams[4]);
|
||||
topos = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// no position given
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_spawn <group> [ x y z ]");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
doAnimation(activeChar);
|
||||
|
||||
if (topos)
|
||||
{
|
||||
group.spawnGroup(posx, posy, posz);
|
||||
}
|
||||
else
|
||||
{
|
||||
group.spawnGroup(activeChar);
|
||||
}
|
||||
|
||||
activeChar.sendMessage("Mob group " + groupId + " spawned.");
|
||||
}
|
||||
|
||||
private void unspawnGroup(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_unspawn <groupId>");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
doAnimation(activeChar);
|
||||
group.unspawnGroup();
|
||||
|
||||
activeChar.sendMessage("Mob group " + groupId + " unspawned.");
|
||||
}
|
||||
|
||||
private void killGroup(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_kill <groupId>");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
doAnimation(activeChar);
|
||||
group.killGroup(activeChar);
|
||||
}
|
||||
|
||||
private void setCasting(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_casting <groupId>");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
group.setCastMode();
|
||||
}
|
||||
|
||||
private void noMove(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
String enabled;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
enabled = command.split(" ")[2];
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_nomove <groupId> <on|off>");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (enabled.equalsIgnoreCase("on") || enabled.equalsIgnoreCase("true"))
|
||||
{
|
||||
group.setNoMoveMode(true);
|
||||
}
|
||||
else if (enabled.equalsIgnoreCase("off") || enabled.equalsIgnoreCase("false"))
|
||||
{
|
||||
group.setNoMoveMode(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
activeChar.sendMessage("Incorrect command arguments.");
|
||||
}
|
||||
}
|
||||
|
||||
private void doAnimation(L2PcInstance activeChar)
|
||||
{
|
||||
Broadcast.toSelfAndKnownPlayersInRadius(activeChar, new MagicSkillUse(activeChar, 1008, 1, 4000, 0), 1500);
|
||||
activeChar.sendPacket(new SetupGauge(0, 4000));
|
||||
}
|
||||
|
||||
private void attackGrp(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
int othGroupId;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
othGroupId = Integer.parseInt(command.split(" ")[2]);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_attackgrp <groupId> <TargetGroupId>");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup othGroup = MobGroupTable.getInstance().getGroup(othGroupId);
|
||||
|
||||
if (othGroup == null)
|
||||
{
|
||||
activeChar.sendMessage("Incorrect target group.");
|
||||
return;
|
||||
}
|
||||
|
||||
group.setAttackGroup(othGroup);
|
||||
}
|
||||
|
||||
private void invul(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
String enabled;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
enabled = command.split(" ")[2];
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_invul <groupId> <on|off>");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (enabled.equalsIgnoreCase("on") || enabled.equalsIgnoreCase("true"))
|
||||
{
|
||||
group.setInvul(true);
|
||||
}
|
||||
else if (enabled.equalsIgnoreCase("off") || enabled.equalsIgnoreCase("false"))
|
||||
{
|
||||
group.setInvul(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
activeChar.sendMessage("Incorrect command arguments.");
|
||||
}
|
||||
}
|
||||
|
||||
private void teleportGroup(String command, L2PcInstance activeChar)
|
||||
{
|
||||
int groupId;
|
||||
String targetPlayerStr = null;
|
||||
L2PcInstance targetPlayer = null;
|
||||
|
||||
try
|
||||
{
|
||||
groupId = Integer.parseInt(command.split(" ")[1]);
|
||||
targetPlayerStr = command.split(" ")[2];
|
||||
|
||||
if (targetPlayerStr != null)
|
||||
{
|
||||
targetPlayer = L2World.getInstance().getPlayer(targetPlayerStr);
|
||||
}
|
||||
|
||||
if (targetPlayer == null)
|
||||
{
|
||||
targetPlayer = activeChar;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //mobgroup_teleport <groupId> [playerName]");
|
||||
return;
|
||||
}
|
||||
|
||||
MobGroup group = MobGroupTable.getInstance().getGroup(groupId);
|
||||
|
||||
if (group == null)
|
||||
{
|
||||
activeChar.sendMessage("Invalid group specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
group.teleportGroup(activeChar);
|
||||
}
|
||||
|
||||
private void showGroupList(L2PcInstance activeChar)
|
||||
{
|
||||
MobGroup[] mobGroupList = MobGroupTable.getInstance().getGroups();
|
||||
|
||||
activeChar.sendMessage("======= <Mob Groups> =======");
|
||||
|
||||
for (MobGroup mobGroup : mobGroupList)
|
||||
{
|
||||
activeChar.sendMessage(mobGroup.getGroupId() + ": " + mobGroup.getActiveMobCount() + " alive out of " + mobGroup.getMaxMobCount() + " of NPC ID " + mobGroup.getTemplate().getId() + " (" + mobGroup.getStatus() + ")");
|
||||
}
|
||||
|
||||
activeChar.sendPacket(SystemMessageId.EMPTY3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdminCommandList()
|
||||
{
|
||||
return ADMIN_COMMANDS;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user