Rebase with upstream

This commit is contained in:
verinia 2019-05-28 22:15:17 -08:00
commit 101b8314c9
2889 changed files with 481914 additions and 0 deletions

View file

@ -0,0 +1,197 @@
package plugin.command;
import org.crandor.game.interaction.Interaction;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.ai.AIPBuilder;
import org.crandor.game.node.entity.player.ai.AIPlayer;
import org.crandor.game.node.entity.player.ai.pvp.PVPAIPActions;
import org.crandor.game.node.entity.player.ai.pvp.PVPAIPBuilderUtils;
import org.crandor.game.node.entity.player.ai.resource.ResourceAIPActions;
import org.crandor.game.node.entity.player.link.appearance.Gender;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.system.task.Pulse;
import org.crandor.game.world.GameWorld;
import org.crandor.game.world.map.Location;
import org.crandor.game.world.map.RegionManager;
import org.crandor.game.world.map.path.Pathfinder;
import org.crandor.game.world.repository.Repository;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
import org.crandor.tools.RandomFunction;
import java.util.ArrayList;
import java.util.List;
/**
* Handles the AIPlayer commands.
* @author Emperor
*/
@InitializablePlugin
public final class AIPCommandPlugin extends CommandPlugin {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.ADMINISTRATOR);
return this;
}
@Override
public boolean parse(final Player player, String name, String[] args) {
List<AIPlayer> legion = player.getAttribute("aip_legion");
switch (name) {
case "desaip":
player.removeAttribute("aip_select");
return true;
case "sellegion":
if (legion != null && !legion.isEmpty()) {
player.setAttribute("aip_select", legion.get(0));
}
return true;
case "regroup":
Player last = player;
if (legion != null && !legion.isEmpty()) {
for (AIPlayer p : legion) {
p.follow(last);
last = p;
}
}
player.removeAttribute("aip_select");
return true;
case "clearlegion":
if (legion != null && !legion.isEmpty()) {
for (AIPlayer p : legion) {
AIPlayer.deregister(p.getUid());
}
legion.clear();
}
player.removeAttribute("aip_select");
player.removeAttribute("aip_legion");
return true;
case "clearaips":
for (Player p : Repository.getPlayers()) {
if (p.isArtificial()) {
p.clear();
}
}
return true;
case "aip":
name = args.length < 2 ? player.getName() : args[1];
AIPlayer p = AIPBuilder.copy(player, name, player.getLocation().transform(0, 1, 0));
Repository.getPlayers().add(p);
p.init();
Interaction.sendOption(player, 7, "Control");
return true;
case "legion":
int size = args.length < 2 ? 10 : Integer.parseInt(args[1]);
last = player;
if (legion == null) {
player.setAttribute("aip_legion", legion = new ArrayList<>());
}
Interaction.sendOption(player, 7, "Control");
boolean joinClan = player.getCommunication().getClan() != null && !player.getCommunication().getClan().isDefault();
String message = player.getName().equals("ethan") ? "The Dark Army marches again!" : null; // Add
// your
// own
// message
for (int i = 0; i < size; i++) {
final AIPlayer aip = AIPBuilder.copy(player, last.getLocation().transform(0, 1, 0));
Repository.getPlayers().add(aip);
aip.init();
if (legion.isEmpty()) {
aip.setAttribute("aip_legion", legion);
}
legion.add(aip);
final Player l = last;
if (joinClan) {
if (player.getCommunication().getClan().enter(aip)) {
aip.getCommunication().setClan(player.getCommunication().getClan());
}
if (player.getCommunication().getClan().getClanWar() != null) {
player.getCommunication().getClan().getClanWar().fireEvent("join", aip);
}
}
GameWorld.submit(new Pulse(1) {
@Override
public boolean pulse() {
aip.follow(l);
return true;
}
});
if (message != null) {
aip.sendChat("The Dark Army marches again!");
}
last = aip;
}
return true;
case "pvplegion":
size = args.length < 2 ? 10 : Integer.parseInt(args[1]);
last = player;
if (PVPAIPActions.pvp_players == null) {
player.setAttribute("aip_legion", PVPAIPActions.pvp_players = new ArrayList<>());
}
for (int i = 0; i < size; i++) {
String aipName = PVPAIPBuilderUtils.names[i];
final AIPlayer aip = AIPBuilder.create(aipName, generateLocation(player));
aip.setControler(player);
aip.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
Repository.getPlayers().add(aip);
aip.init();
PVPAIPBuilderUtils.generateClass(aip);
if (PVPAIPActions.pvp_players.isEmpty()) {
aip.setAttribute("aip_legion", PVPAIPActions.pvp_players);
}
PVPAIPActions.pvp_players.add(aip);
last = aip;
}
return true;
case "resourcelegion":
size = args.length < 2 ? 10 : Integer.parseInt(args[1]);
last = player;
if (ResourceAIPActions.resource_players == null) {
player.setAttribute("aip_legion", ResourceAIPActions.resource_players = new ArrayList<>());
}
for (int i = 0; i < size; i++) {
String aipName = PVPAIPBuilderUtils.names[i];
final AIPlayer aip = AIPBuilder.create(aipName, generateLocation(player));
aip.setControler(player);
aip.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
Repository.getPlayers().add(aip);
aip.init();
PVPAIPBuilderUtils.generateClass(aip);
if (ResourceAIPActions.resource_players .isEmpty()) {
aip.setAttribute("aip_legion", ResourceAIPActions.resource_players );
}
ResourceAIPActions.resource_players.add(aip);
last = aip;
}
return true;
case "syncresource":
ResourceAIPActions.syncBotThread(player);
break;
case "pvpfight":
PVPAIPActions.syncBotThread(player);
return true;
}
return false;
}
private Location generateLocation(Player player) {
Location random_location = player.getLocation().transform(RandomFunction.random(-15, 15), RandomFunction.random(-15, 15), 0);
if (!RegionManager.isTeleportPermitted(random_location)) {
return generateLocation(player);
}
if (!Pathfinder.find(player, random_location, false, Pathfinder.DUMB).isSuccessful()) {
return generateLocation(player);
}
if (RegionManager.getObject(random_location) != null) {
return generateLocation(player);
}
return random_location;
}
}

View file

@ -0,0 +1,372 @@
package plugin.command;
import org.crandor.ServerConstants;
import org.crandor.cache.Cache;
import org.crandor.cache.def.impl.ItemDefinition;
import org.crandor.cache.def.impl.NPCDefinition;
import org.crandor.game.content.eco.ge.GrandExchangeDatabase;
import org.crandor.game.content.eco.ge.GrandExchangeEntry;
import org.crandor.game.content.skill.Skills;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.ai.resource.ResourceAIPManager;
import org.crandor.game.node.entity.player.info.Rights;
import org.crandor.game.node.entity.player.link.TeleportManager.TeleportType;
import org.crandor.game.node.entity.player.link.quest.Quest;
import org.crandor.game.node.entity.player.link.quest.QuestRepository;
import org.crandor.game.node.item.Item;
import org.crandor.game.system.SystemLogger;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.world.map.Location;
import org.crandor.game.world.map.Region;
import org.crandor.game.world.map.RegionManager;
import org.crandor.game.world.map.build.DynamicRegion;
import org.crandor.game.world.map.zone.impl.DonatorZone;
import org.crandor.game.world.repository.Repository;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
import org.crandor.tools.StringUtils;
import org.crandor.tools.npc.TestStats;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
/**
* The commands available during beta stage.
*
* @author Emperor
*/
@InitializablePlugin
public final class BetaCommandPlugin extends CommandPlugin {
@Override
public boolean parse(Player player, String name, String[] args) {
int id, amount;
Player p;
switch (name) {
case "lo":
int index = 0;
for (int i = 8349; i < 8367; i++) {
NPC n = NPC.create(i, player.getLocation().transform(0, -index, 0));
n.init();
index += 2;
}
player.sendMessage("Lol");
break;
case "resetquest":
case "reset_quest":
if (args.length < 2) {
player.debug("syntax error: name");
return true;
}
name = "";
for (int i = 1; i < args.length; i++) {
name += (i == 1 ? "" : " ") + args[i];
}
name = StringUtils.formatDisplayName(name);
if (player.getQuestRepository().getQuest(name) == null) {
player.debug("err or: invalid quest - " + name);
return true;
}
player.getQuestRepository().getQuest(name).setStage(player, 0);
player.getQuestRepository().syncronizeTab(player);
return true;
case "allquest":
for (Quest quest : QuestRepository.getQuests().values()) {
quest.finish(player);
}
return true;
case "pos":
case "position":
case "loc":
final Location l = player.getLocation();
final Region r = player.getViewport().getRegion();
player.getPacketDispatch().sendMessage("Absolute: " + l + ", regional: [" + l.getLocalX() + ", " + l.getLocalY() + "], chunk: [" + l.getChunkOffsetX() + ", " + l.getChunkOffsetY() + "], flag: [" + RegionManager.isTeleportPermitted(l) + ", " + RegionManager.getClippingFlag(l) + ", " + RegionManager.isLandscape(l) + "].");
player.getPacketDispatch().sendMessage("Region: [id=" + l.getRegionId() + ", active=" + r.isActive() + ", instanced=" + ((r instanceof DynamicRegion)) + "], obj=" + RegionManager.getObject(l) + ".");
player.getPacketDispatch().sendMessage("Object: " + RegionManager.getObject(l) + ".");
SystemLogger.log("Viewport: " + l.getSceneX(player.getPlayerFlags().getLastSceneGraph()) + "," + l.getSceneY(player.getPlayerFlags().getLastSceneGraph()));
String loc = "Location.create(" + l.getX() + ", " + l.getY() + ", " + l.getZ() + ")";
SystemLogger.log(loc + "; "+ player.getPlayerFlags().getLastSceneGraph() + ", " + l.getLocalX() + ", " + l.getLocalY());
StringSelection stringSelection = new StringSelection(loc);
Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
clpbrd.setContents(stringSelection, null);
return true;
case "npc":
if (args.length < 2) {
player.debug("syntax error: id (optional) direction");
return true;
}
NPC npc = NPC.create(toInteger(args[1]), player.getLocation());
npc.setAttribute("spawned:npc", true);
npc.setRespawn(false);
npc.setDirection(player.getDirection());
npc.init();
npc.setWalks(args.length > 2 ? true : false);
String npcString = "{" + npc.getLocation().getX() + "," + npc.getLocation().getY() + "," + npc.getLocation().getZ() + "," + (npc.isWalks() ? "1" : "0") + "," + npc.getDirection().ordinal() + "}";
clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
clpbrd.setContents(new StringSelection(npcString), null);
System.out.println(npcString);
return true;
case "dz":
DonatorZone.getInstance().invite(player, null);
return true;
case "setquest":
case "setoquest":
if (args.length < 2) {
player.debug("syntax error: name");
return true;
}
Player m = name.equals("setoquest") ? getTarget(args[args.length - 1]) : player;
if (m == null || !m.isActive()) {
player.sendMessage("Error! " + args[3] + " in invalid.");
return true;
}
name = "";
for (int i = 1; i < args.length - 1; i++) {
name += (i == 1 ? "" : " ") + args[i];
}
Quest quest = null;
for (Quest q : QuestRepository.getQuests().values()) {
if (q.getName().toLowerCase().equals(name.toLowerCase())) {
quest = q;
break;
}
}
if (quest == null) {
player.debug("error: invalid quest - " + name);
return true;
}
int stage = toInteger(args[args.length - 1]);
quest.setStage(player, stage);
m.getPacketDispatch().sendMessage("quest=" + name + ", new stage=" + stage);
m.getQuestRepository().syncronizeTab(player);
break;
case "empty":
player.getInventory().clear();
return true;
case "itemn":
if (args.length < 2) {
player.debug("syntax error: item-name (optional) amount");
return true;
}
String params = "";
for (int i = 1; i < args.length; i++) {
params += i == args.length - 1 ? args[i] : args[i] + " ";
}
for (int i = 0; i < ItemDefinition.getDefinitions().size(); i++) {
ItemDefinition def1 = ItemDefinition.forId(i);
if (def1 != null && def1.getName().equalsIgnoreCase(params.toLowerCase())) {
player.getInventory().add(new Item(i, 1));
player.getPacketDispatch().sendMessage("[item=" + def1.getId() + ", " + def1.getName() + "].");
break;
}
}
return true;
case "npcn":
if (args.length < 2) {
player.debug("syntax error: npc-name (optional) amount");
return true;
}
String parameters = "";
for (int i = 1; i < args.length; i++) {
parameters += i == args.length - 1 ? args[i] : args[i] + " ";
}
for (int i = 0; i < NPCDefinition.getDefinitions().size(); i++) {
NPCDefinition npcDefinition = NPCDefinition.forId(i);
if (npcDefinition != null && npcDefinition.getName().equalsIgnoreCase(parameters.toLowerCase())) {
NPC n = NPC.create(npcDefinition.getId(), player.getLocation());
n.setAttribute("spawned:npcDefinition", true);
n.setRespawn(false);
n.setDirection(player.getDirection());
n.init();
n.setWalks(args.length > 2 ? true : false);
String npcs = "{" + n.getLocation().getX() + "," + n.getLocation().getY() + "," + n.getLocation().getZ() + "," + (n.isWalks() ? "1" : "0") + "," + n.getDirection().ordinal() + "}";
System.out.println(npcs);
break;
}
}
return true;
case "setvalue":
int itemId = toInteger(args[1]);
int value = toInteger(args[2]);
Item item = new Item(itemId);
GrandExchangeEntry entry = GrandExchangeDatabase.getDatabase().get(itemId);
if (entry == null) {
player.getPacketDispatch().sendMessage("Could not find G.E entry for item [id=" + itemId + ", name=" + item.getName() + "]!");
break;
}
entry.setValue(value);
player.getPacketDispatch().sendMessage("Set Grand Exchange value for item [id=" + itemId + ", name=" + item.getName() + "] to " + value + "gp!");
break;
case "item":
amount = args.length > 2 ? toInteger(args[2]) : 1;
if (args[1].contains("-")) {
String[] data = args[1].split("-");
for (id = toInteger(data[0]); id < toInteger(data[1]); id++) {
if (id > Cache.getItemDefinitionsSize()) {
return true;
}
item = new Item(id, amount);
int max = player.getInventory().getMaximumAdd(item);
if (amount > max) {
amount = max;
}
item.setAmount(amount);
player.getInventory().add(item);
}
return true;
}
id = args.length > 1 ? toInteger(args[1]) : 0;
if (id > Cache.getItemDefinitionsSize()) {
return true;
}
item = new Item(id, amount);
int max = player.getInventory().getMaximumAdd(item);
if (amount > max) {
amount = max;
}
item.setAmount(amount);
player.getInventory().add(item);
return true;
case "task":
ResourceAIPManager.get().runTask(player, "Willow Logs");
break;
case "master":
case "max":
if (player.getDetails().getRights() != Rights.ADMINISTRATOR) {
if (player.inCombat() || player.getLocks().isInteractionLocked() || player.getSkullManager().isWilderness()) {
player.getPacketDispatch().sendMessage("You can't do that right now.");
return true;
}
}
for (int i = 0; i < Skills.SKILL_NAME.length; i++) {
player.getSkills().setLevel(i, 99);
player.getSkills().setStaticLevel(i, 99);
}
player.getSkills().updateCombatLevel();
player.getAppearance().sync();
return true;
case "runes":
for (int i = 554; i < 567; i++) {
player.getInventory().add(new Item(i, 50000));
}
player.getInventory().add(new Item(9075, 50000));
return true;
case "skill":
case "oskill":
if (player.getDetails().getRights() != Rights.ADMINISTRATOR) {
if (player.inCombat() || player.getLocks().isInteractionLocked() || player.getSkullManager().isWilderness()) {
player.getPacketDispatch().sendMessage("You can't do that right now.");
return true;
}
}
if (args.length < 3) {
player.getPacketDispatch().sendMessage("Use as ::skill skillname/id level.");
return true;
}
int skillId = -1;
if (Character.isDigit(args[1].charAt(0))) {
skillId = toInteger(args[1]);
} else {
for (id = 0; id < Skills.SKILL_NAME.length; id++) {
String skill = Skills.SKILL_NAME[id];
if (args[1].equals(skill.toLowerCase())) {
skillId = id;
break;
}
}
}
if (skillId < 0) {
player.getPacketDispatch().sendMessage("Use as ::skill skillname/id level.");
return true;
}
int level = Math.abs(toInteger(args[2]));
if (level > 99) {
level = 99;
}
p = name.equals("oskill") && args.length > 3 ? Repository.getPlayer(args[3]) : player;
if (p == null) {
player.getPacketDispatch().sendMessage("Unable to set level for " + args[3] + ".");
return true;
}
p.getSkills().setLevel(skillId, level);
p.getSkills().setStaticLevel(skillId, level);
p.getSkills().updateCombatLevel();
p.getAppearance().sync();
player.getPacketDispatch().sendMessage("Set " + p.getName() + "'s " + Skills.SKILL_NAME[skillId] + " level to " + args[2] + ".");
return true;
case "copy":
Player target = Repository.getPlayer(args[1]);
if (target != null) {
player.getInventory().copy(target.getInventory());
player.getInventory().refresh();
player.getSkills().copy(target.getSkills());
player.getSkills().configure();
player.getEquipment().copy(target.getEquipment());
player.getEquipment().refresh();
player.getAppearance().sync();
}
return true;
case "to":
if (player.getDetails().getRights() != Rights.ADMINISTRATOR) {
if (player.inCombat() || player.getLocks().isTeleportLocked()) {
player.getPacketDispatch().sendMessage("You can't teleport right now.");
return true;
}
}
Location destination = null;
String place = getArgumentLine(args);
for (Object[] data : ServerConstants.TELEPORT_DESTINATIONS) {
for (int i = 1; i < data.length; i++) {
if (place.equals(data[i])) {
destination = (Location) data[0];
break;
}
}
}
if (destination != null) {
player.getTeleporter().send(destination, TeleportType.NORMAL);
} else {
player.getPacketDispatch().sendMessage("Could not locate teleport destination [name=" + place + "]!");
}
return true;
case "teleports":
case "destinations":
player.getInterfaceManager().close();
player.getPacketDispatch().sendString("<u>Teleport destinations</u>", 239, 1);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ServerConstants.TELEPORT_DESTINATIONS.length; i++) {
sb.append(ServerConstants.TELEPORT_DESTINATIONS[i][1]);
if (i != ServerConstants.TELEPORT_DESTINATIONS.length - 1) {
sb.append(", ");
}
}
player.getPacketDispatch().sendString("<br>" + sb.toString(), 239, 2);
player.getPacketDispatch().sendString("", 239, 3);
player.getPacketDispatch().sendString("", 239, 4);
player.getPacketDispatch().sendString("", 239, 5);
player.getInterfaceManager().openComponent(239);
return true;
case "maxmag":
TestStats.setMaxedMagicAcc(player);
return true;
case "maxstr":
TestStats.setMaxedMeleeStr(player);
return true;
}
return false;
}
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.BETA, CommandSet.ADMINISTRATOR);
return this;
}
}

View file

@ -0,0 +1,638 @@
package plugin.command;
import org.crandor.ServerConstants;
import org.crandor.cache.Cache;
import org.crandor.cache.def.impl.ItemDefinition;
import org.crandor.cache.def.impl.NPCDefinition;
import org.crandor.game.container.Container;
import org.crandor.game.container.impl.EquipmentContainer;
import org.crandor.game.content.eco.EconomyManagement;
import org.crandor.game.content.global.tutorial.TutorialSession;
import org.crandor.game.content.holiday.HolidayItem;
import org.crandor.game.content.holiday.ItemLimitation;
import org.crandor.game.content.skill.Skills;
import org.crandor.game.content.skill.free.smithing.smelting.Bar;
import org.crandor.game.content.skill.member.construction.HouseLocation;
import org.crandor.game.content.skill.member.summoning.pet.Pets;
import org.crandor.game.events.GlobalEventManager;
import org.crandor.game.node.entity.combat.ImpactHandler.HitsplatType;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.ai.AIPBuilder;
import org.crandor.game.node.entity.player.ai.AIPlayer;
import org.crandor.game.node.entity.player.ai.pvp.PVPAIPActions;
import org.crandor.game.node.entity.player.ai.pvp.PVPAIPBuilderUtils;
import org.crandor.game.node.entity.player.ai.resource.ResourceAIPManager;
import org.crandor.game.node.entity.player.info.login.PlayerParser;
import org.crandor.game.node.entity.player.link.IronmanMode;
import org.crandor.game.node.entity.player.link.appearance.Gender;
import org.crandor.game.node.entity.player.link.skillertasks.Difficulty;
import org.crandor.game.node.entity.state.EntityState;
import org.crandor.game.node.item.Item;
import org.crandor.game.node.object.GameObject;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.system.mysql.SQLManager;
import org.crandor.game.system.mysql.impl.ItemConfigSQLHandler;
import org.crandor.game.system.mysql.impl.NPCDropSQLHandler;
import org.crandor.game.system.script.ScriptManager;
import org.crandor.game.system.task.Pulse;
import org.crandor.game.world.GameWorld;
import org.crandor.game.world.map.Location;
import org.crandor.game.world.map.RegionManager;
import org.crandor.game.world.map.RegionPlane;
import org.crandor.game.world.map.path.Pathfinder;
import org.crandor.game.world.map.zone.RegionZone;
import org.crandor.game.world.repository.Repository;
import org.crandor.game.world.update.flag.context.Animation;
import org.crandor.game.world.update.flag.context.Graphics;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
import org.crandor.plugin.PluginManager;
import org.crandor.tools.RandomFunction;
import plugin.skill.herblore.PotionDecantingPlugin;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* Handles the developer commands.
*
* @author Vexia
*/
@InitializablePlugin
public final class DeveloperCommandPlugin extends CommandPlugin {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.ADMINISTRATOR);
return this;
}
@SuppressWarnings("deprecation")
@Override
public boolean parse(final Player player, String name, String[] args) {
switch (name) {
/* case "itemn":
try {
String itemName = "";
for (int i = 1; i < args.length; i++)
itemName += args[i] + ((i == args.length - 1) ? "" : " ");
int count = 0;
player.getAttributes().computeIfAbsent("found_items", k -> new HashMap<Integer, Integer>());
player.getAttributes().remove("found_items");
Container storeItems = new Container(1200);
// ItemsContainer<Item> storeItems = new ItemsContainer<Item>(1200, false);
for (int i = 0; i < ItemDefinition.getDefinitions().size(); i++) {
ItemDefinition definition = ItemDefinition.forId(i);
itemName = itemName.toLowerCase();
if (definition == null)
continue;
String output = definition.getName().toLowerCase();
int itemId = definition.getId();
if (output.contains(itemName)) {
storeItems.add(new Item(itemId, 1));
player.spawns.put(count, itemId);
count++;
}
}
player.getPacketDispatch().sendItems(-1, 0, 91, storeItems);
player.getPacketDispatch().sendUnlockIComponentOptionSlots(860, 23, 0, count, 0, 1, 2, 3, 4, 5, 6);
player.getPackets().sendInterSetItemsOptionsScript(860, 23, 91, 8, 150, "Take-1", "Take-10", "Take-1000", "Take-10000", "Take-X");
player.getPackets().sendHideIComponent(860, 20, true);
player.getPackets().sendHideIComponent(860, 26, true);
player.getPackets().sendHideIComponent(860, 21, true);
player.getPackets().sendIComponentText(860, 18, "Found " + count + " results for item " + StringUtils.capitalize(itemName));
player.getPackets().sendIComponentText(860, 19, "Click items to spawn them to your inventory.");
player.getInterfaceManager().openComponent(860);
player.getPacketDispatch().sendMessage("<col=FF0000>Found " + count + " results for the item " + StringUtils.capitalize(itemName) + ".");
} catch (NumberFormatException e) {
return true;
}
break;*/
case "tut":
if (player.getInventory().isEmpty()) {
player.getPacketDispatch().sendMessage("You have nothing to deposit.");
} else {
dump(player, player.getInventory());
}
if (player.getEquipment().isEmpty()) {
player.getPacketDispatch().sendMessage("You have nothing to deposit.");
} else {
dump(player, player.getEquipment());
}
TutorialSession.extend(player);
GameWorld.submit(new Pulse(1, player) {
@Override
public boolean pulse() {
TutorialSession.getExtension(player).init();
return true;
}
});
break;
case "item":
int itemId = Integer.parseInt(args[1]), amount = Integer.parseInt(args[2]);
player.getInventory().add(new Item(itemId, amount));
break;
case "eventlocator":
player.getDialogueInterpreter().open(175869, GlobalEventManager.get().getCurrentEvent());
break;
case "drops":
try {
new NPCDropSQLHandler().parse();
player.sendMessage(EconomyManagement.getModificationRate() + "");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
break;
case "stask":
player.getSkillTasks().getNewTask(player, Difficulty.NOVICE);
player.sendMessage("Your current task is " + player.getSkillTasks().getCurrentTask().getAssignment() + ".");
player.sendMessage(player.getSkillTasks().getCurrentTask().getDescription());
break;
case "taskamount":
player.sendMessage("You have " + player.getSkillTasks().getTaskAmount() + " more to go!");
break;
case "activatexp":
String target = "";
for (int i = 1; i < args.length; i++)
target += args[i] + ((i == args.length - 1) ? "" : " ");
if (args.length > 1)
GlobalEventManager.get().activate("XPFever", target);
else
GlobalEventManager.get().activate("XPFever", target);
break;
case "poison":
player.getStateManager().set(EntityState.POISONED, 200, player);
player.getConfigManager().set(102, 1);
player.sendMessage("Poisoned...");
break;
case "activatecf":
target = "Developers";
for (int i = 1; i < args.length; i++)
target += args[i] + ((i == args.length - 1) ? "" : " ");
GlobalEventManager.get().activate("Clone Fest", null);
if (GlobalEventManager.get().isActive("Clone Fest")) {
int size = 20;
if (PVPAIPActions.pvp_players == null) {
player.setAttribute("aip_legion", PVPAIPActions.pvp_players = new ArrayList<>());
}
for (int i = 0; i < size; i++) {
String aipName = PVPAIPBuilderUtils.names[i];
final AIPlayer aip = AIPBuilder.create(aipName, generateLocation(player));
aip.setControler(player);
aip.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE);
Repository.getPlayers().add(aip);
aip.init();
PVPAIPBuilderUtils.generateClass(aip);
if (PVPAIPActions.pvp_players.isEmpty()) {
aip.setAttribute("aip_legion", PVPAIPActions.pvp_players);
}
PVPAIPActions.pvp_players.add(aip);
}
PVPAIPActions.syncBotThread(player);
}
break;
case "deactivatexp":
GlobalEventManager.get().deactivate("XPFever");
break;
case "deactivatecf":
GlobalEventManager.get().deactivate("Clone Fest");
break;
case "reloaddb":
SQLManager.init();
player.sendMessage("[MySQl] The database has been reloaded.");
break;
case "g":
Location l = player.getLocation();
int xz = l.getX();
int yz = l.getY();
int er = Integer.parseInt(args[1]);
for (int w = 10; w > 0; w--) {
Graphics gfx = new Graphics(er + w);
Graphics.send(gfx, new Location(xz - (w > 5 ? -(w - 5) : 5 - w), yz));
}
case "v":
Map<Integer, ArrayList<NPC>> zz = new HashMap<>();
for (NPC n : Repository.getNpcs()) {
if (n == null) {
continue;
}
if (n.getAttribute("spawned:npc", false) && n.getName().startsWith("Kalphite") && n.getViewport().getRegion().getId() == 14939) {
if (!zz.containsKey(n.getId())) {
ArrayList<NPC> ooo = new ArrayList<NPC>();
ooo.add(n);
zz.put(n.getId(), ooo);
} else {
ArrayList<NPC> nn = zz.get(n.getId());
nn.add(n);
zz.put(n.getId(), nn);
}
}
}
for (Entry<Integer, ArrayList<NPC>> e : zz.entrySet()) {
System.out.println("--- npc -> " + e.getKey() + " ----");
List<NPC> bn = e.getValue();
String ll = "";
for (NPC n : bn) {
Location hu = n.getProperties().getSpawnLocation();
ll += "{" + hu.getX() + "," + hu.getY() + "," + hu.getZ() + "," + (n.isWalks() ? "1" : "0") + "," + n.getDirection().toInteger() + "}-";
}
System.out.println(ll);
}
break;
case "fillbank":
for (int zy = 0; zy < 100; zy++) {
player.getBank().add(new Item(zy + 2000));
}
break;
case "anim":
player.animate(new Animation(Integer.parseInt(args[1])));
break;
case "em":
final int[] y = new int[]{16044, 16045, 16256, 16259, 16260, 16334, 16381, 16556, 16564, 16638, 16642, 16673, 16710, 16713, 16715, 16722, 16796, 16797, 16805, 16831, 16886, 16890, 16926, 16938, 16942};
GameWorld.submit(new Pulse(3) {
int anim = 0;
@Override
public boolean pulse() {
if (anim == (y.length - 1)) {
player.sendChat("Done");
return true;
}
player.animate(new Animation(y[anim]));
player.sendChat("Animation: " + y[anim]);
anim++;
return false;
}
});
break;
case "c":
for (Bar bar : Bar.values()) {
System.out.println(bar.getProduct().getId() + ",");
}
break;
/* case "zulrahzone":
DynamicRegion y = DynamicRegion.create(9007, 9008);
if (y != null) {
Location l = y.getBaseLocation();
int xOffset = 2240 - l.getX();
int yOffset = 3008 - l.getY();
System.out.println(y.getBaseLocation());
player.teleport(y.getBaseLocation());
ZulrahPattern.startZulrahSpawn(ZulrahPattern.getPatterns().get(0), player, xOffset, yOffset);
} else {
System.out.println("No zone");
}
break;*/
case "damage":
player.getImpactHandler().manualHit(player, 5, HitsplatType.VENOM);
break;
case "region":
System.out.println("You're in region: " + player.getLocation().getRegionId() + " " + player.getLocation().getLocalX() + " " + player.getLocation().getLocalY());
player.getPacketDispatch().sendMessage("You're in region: " + player.getLocation().getRegionId() + " " + player.getLocation().getRegionX() + " " + player.getLocation().getRegionY());
break;
case "pots":
for (int i = 0; i < ItemDefinition.getDefinitions().size(); i++) {
if (ItemDefinition.getDefinitions().get(i).getName().contains("(1)")) {
System.out.println(ItemDefinition.getDefinitions().get(i).getName());
}
}
break;
case "t":
RegionPlane plane = player.getViewport().getCurrentPlane();
int replace = 2103;
System.out.println("----------------------");
for (GameObject[] o : plane.getObjects()) {
if (o == null) {
continue;
}
for (GameObject oo : o) {
if (oo == null) {
continue;
}
if (oo.getId() == 42036) {
System.out.println("{new GameObject(" + oo.getId() + "," + oo.getLocation().getX() + "," + oo.getLocation().getY() + ",0," + oo.getType() + "," + oo.getRotation() + "),new GameObject(" + replace + "," + oo.getLocation().getX() + "," + oo.getLocation().getY() + ",0," + oo.getType() + "," + oo.getRotation() + ")},");
}
}
}
System.out.println("----------------------");
break;
case "rp":
PluginManager.init();
player.sendMessage("Plugins reloaded");
break;
case "decant":
PotionDecantingPlugin.decant(player);
break;
case "removeiron":
Player t = Repository.getPlayer(args[1], true);
if (t == null) {
return true;
}
t.getIronmanManager().setMode(IronmanMode.NONE);
if (t.isActive()) {
t.sendMessage("Iron man mode removed.");
}
player.sendMessage("Removed ironman mode.");
PlayerParser.dump(t);
break;
case "holidayitemloc":
if (args.length < 1) {
player.sendMessage("Syntax error - please do ::holidayitemloc itemId");
return true;
}
int holidayItemId = Integer.parseInt(args[1]);
Location itemLoc = HolidayItem.getHolidayItemLocation(holidayItemId);
player.sendMessage("The location of the holiday item is - " + (itemLoc != null ? itemLoc : "null") + ".");
return true;
case "krakme":
player.getFamiliarManager().summon(new Item(14651), true);
break;
case "addpets":
player.getFamiliarManager().getInsuredPets().add(Pets.BABY_MOLE);
player.getFamiliarManager().getInsuredPets().add(Pets.KREE_JR);
player.getFamiliarManager().getInsuredPets().add(Pets.KQ_FORM_1);
player.getFamiliarManager().getInsuredPets().add(Pets.TZREK_JAD);
return true;
case "clearpets":
player.getFamiliarManager().getInsuredPets().clear();
return true;
case "holidayitemamount":
if (args.length < 1) {
player.sendMessage("Syntax error - please do ::holidayitemamount itemId");
return true;
}
int itemAmount = Integer.parseInt(args[1]);
player.sendMessage("There are " + ItemLimitation.getAmountLeft(itemAmount) + " left.");
return true;
case "iparse":
try {
new ItemConfigSQLHandler().parse();
} catch (SQLException e) {
e.printStackTrace();
}
break;
case "l":
player.sendMessage("" + player.getSavedData().getGlobalData().getLowAlchemyCharges());
//player.getSavedData().getGlobalData().setLowAlchemyCharges(2);
break;
case "o":
String[] stock = {"Bronze arrow", "Iron arrow", "Steel arrow", "Mithril arrow", "Adamant arrow", "Bronze bolts", "Iron bolts", "Steel bolts", "Shortbow", "Oak shortbow", "Willow shortbow", "Maple shortbow", "Yew shortbow", "Magic shortbow", "Crossbow", "Iron crossbow", "Steel crossbow", "Mith crossbow", "Adamant crossbow", "Rune crossbow", "Green dragonhide set", "Blue dragonhide set", "Red dragonhide set", "Black dragonhide set", "Leather vambraces", "Leather chaps", "Leather body", "Leather body", "Hardleather body", "Leather cowl", "Studded body", "Studded chaps", "Snakeskin boots", "Archer helm", "Amulet of accuracy", "Dorgeshuun c'bow", "Bone bolts", "Iron knife", "Rune knife"};
String output = "";
for (String string : stock) {
for (int i = 0; i < Cache.getItemDefinitionsSize(); i++) {
if (ItemDefinition.forId(i).getName().toLowerCase().equals(string.toLowerCase())) {
output += "{" + i + ",10}-";
break;
}
if (i == Cache.getItemDefinitionsSize() - 1) {
System.err.println("You failed on " + string);
}
}
}
System.out.println(output);
break;
case "rls":
ScriptManager.load();
break;
case "k":
String[] types = {"Adamant", "Rune", "Dragon"};
String[] items = {"dagger", "spear", "pickaxe", "sword", "longsword", "2h sword", "scimitar", "warhammer", "axe", "battleaxe"};
String out = "";
for (String type : types) {
for (String item : items) {
for (int i = 0; i < Cache.getItemDefinitionsSize(); i++) {
if (ItemDefinition.forId(i).getName().equals(type + " " + item)) {
out += "{" + i + ",10}-";
break;
}
if (i == Cache.getItemDefinitionsSize()) {
System.err.println("Could not do " + type + ", & " + item);
}
}
}
}
System.out.println(out);
break;
case "i":
for (int i = 0; i < Cache.getNPCDefinitionsSize(); i++) {
if (NPCDefinition.forId(i).getName().equals("Gnome traveller")) {
System.out.println(i + ", " + NPCDefinition.forId(i).getExamine());
}
}
break;
case "setpin":
if (args.length < 2) {
player.sendMessage("Syntax error - ::setpin username 1234");
return true;
}
Player p = super.getTarget(args[1], true);
if (p == null) {
player.sendMessage("Could not find player " + args[1] + "!");
return true;
}
String pin = args.length > 2 ? args[2] : null;
p.getBankPinManager().setPin(pin == "" ? null : pin);
p.sendMessage("Your pin has been set by an administrator.");
player.sendMessage("Set " + p.getUsername() + "'s pin to " + pin + ".");
return true;
case "special":
case "spec":
amount = args.length > 1 ? Integer.parseInt(args[1]) : 100;
player.getSettings().setSpecialEnergy(amount);
return true;
case "god":
player.setAttribute("godMode", !player.getAttribute("godMode", false));
player.sendMessage("God mode=<col=ff0000>" + player.getAttribute("godMode", false));
break;
case "1hit":
int[] bonuses = new int[15];
for (int z = 0; z < 15; z++) {
if (player.getProperties().getBonuses()[z] > 1000) {
EquipmentContainer.updateBonuses(player);
break;
}
bonuses[z] = 10000;
}
if (bonuses[1] > 1000) {
player.getProperties().setBonuses(bonuses);
}
return true;
case "home":
player.teleport(ServerConstants.HOME_LOCATION);
return true;
case "heal":
case "hp":
case "life":
player.getSettings().setSpecialEnergy(100);
player.getSettings().updateRunEnergy(-100);
player.getSkills().setLifepointsIncrease(0);
player.getSkills().rechargePrayerPoints();
player.getSkills().heal(100);
player.getSkills().setLevel(Skills.SUMMONING, player.getSkills().getStaticLevel(Skills.SUMMONING));
player.getStateManager().remove(EntityState.TELEBLOCK);
if (player.getFamiliarManager().hasFamiliar()) {
player.getFamiliarManager().getFamiliar().updateSpecialPoints(-200);
}
return true;
case "slayerpoints":
player.getSlayer().setSlayerPoints(10000);
return true;
case "bank":
player.getBank().open();
return true;
case "debugil":
for (int itemIdv : ItemLimitation.getItems().keySet()) {
player.getPacketDispatch().sendMessage(itemIdv + ": " + ItemDefinition.forId(itemIdv).getName() + " is limited to " + ItemLimitation.getItems().get(itemIdv) + ".");
System.out.println(itemIdv + ": " + ItemDefinition.forId(itemIdv).getName() + " is limited to " + ItemLimitation.getItems().get(itemIdv) + ".");
}
return true;
case "setil":
if (args.length < 3) {
player.getPacketDispatch().sendMessage("Syntax is ::setil itemId limit.");
return true;
}
player.getPacketDispatch().sendMessage("Limited item " + args[1] + " to " + args[2] + ".");
ItemLimitation.register(toInteger(args[1]), toInteger(args[2]));
return true;
case "unlock":
player.unlock();
return true;
case "task":
ResourceAIPManager.get().runTask(player, "Willow Logs");
break;
case "gettask":
ResourceAIPManager.get().runTask(player, "Willow Logs");
break;
case "modroom":
player.teleport(new Location(2843, 5214, 0));
return true;
case "poh":
if (!player.getHouseManager().hasHouse()) {
player.getHouseManager().create(HouseLocation.RIMMINGTON);
}
player.getHouseManager().enter(player, true);
return true;
case "resethouse":
case "rh":
player.getHouseManager().clearRooms();
player.getHouseManager().create(HouseLocation.RIMMINGTON);
player.getHouseManager().enter(player, true);
return true;
case "debug":
player.toggleDebug();
return true;
case "copycoords":
String coords = player.getLocation().getX() + ", " + player.getLocation().getY() + ", " + player.getLocation().getZ();
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new StringSelection(coords), null);
break;
case "zones":
for (RegionZone z : player.getZoneMonitor().getZones()) {
player.getPacketDispatch().sendMessage("Region zone " + z.getZone().getName() + " active...");
}
return true;
case "additem":
case "deleteitem":
case "deleteitemb":
if (name.equals("additem")) {
addItem(player, args);
} else {
deleteItem(player, args);
}
break;
case "roar":
player.getPacketDispatch().sendInterfaceConfig(762, 20, false);
break;
}
return false;
}
/**
* Adds an item to a players item.
*
* @param player the player.
* @param args the args.
*/
private void addItem(Player player, String[] args) {
Player t = Repository.getPlayer(args[1]);
if (t == null) {
return;
}
int id = toInteger(args[2]);
int amount = toInteger(args[3]);
Item item = new Item(id, amount);
t.getInventory().add(item);
player.getPacketDispatch().sendMessage("You just gave " + t.getUsername() + " the item - " + item);
}
/**
* Deletes an item from a players item.
*
* @param player the player.
* @param args the args.
*/
private void deleteItem(Player player, String[] args) {
Player t = Repository.getPlayer(args[1]);
if (t == null) {
return;
}
int id = toInteger(args[2]);
int amount = toInteger(args[3]);
Item item = new Item(id, amount);
if (args[0].equals("deleteitemb")) {
t.getBank().remove(item);
} else {
t.getInventory().remove(item);
}
player.getPacketDispatch().sendMessage("You just removed" + t.getUsername() + " the item - " + item);
}
private Location generateLocation(Player player) {
Location random_location = new Location(3075 + RandomFunction.random(-15, 15), 3954 + RandomFunction.random(-15, 15), 0);
if (!RegionManager.isTeleportPermitted(random_location)) {
return generateLocation(player);
}
if (!Pathfinder.find(player, random_location, false, Pathfinder.DUMB).isSuccessful()) {
return generateLocation(player);
}
if (RegionManager.getObject(random_location) != null) {
return generateLocation(player);
}
return random_location;
}
private void dump(Player player, Container container) {
for (Item i : container.toArray()) {
if (i == null) {
continue;
}
if (!player.getBank().canAdd(i)) {
player.getPacketDispatch().sendMessage("A magical force prevents you from banking your equipment.");
return;
}
if (!player.getBank().hasSpaceFor(i)) {
player.getPacketDispatch().sendMessage("There is not enough space left in your bank.");
return;
}
if (container.remove(i)) {
player.getBank().add(i.getDefinition().isUnnoted() ? i : new Item(i.getNoteChange(), i.getAmount()));
}
}
}
}

View file

@ -0,0 +1,240 @@
package plugin.command;
import org.crandor.game.component.Component;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.Rights;
import org.crandor.game.node.item.Item;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.system.communication.ClanRepository;
import org.crandor.game.world.GameWorld;
import org.crandor.game.world.repository.Repository;
import org.crandor.net.amsc.MSPacketRepository;
import org.crandor.net.amsc.WorldCommunicator;
import org.crandor.net.packet.PacketRepository;
import org.crandor.net.packet.context.ContainerContext;
import org.crandor.net.packet.out.ContainerPacket;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
/**
* Handles the moderators commands.
* @author Vexia
*/
@InitializablePlugin
public final class ModeratorCommand extends CommandPlugin {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.MODERATOR);
return this;
}
@Override
public boolean parse(final Player player, String name, String[] args) {
switch (name) {
case "clear":
case "kick":
Player target = Repository.getPlayer(args[1]);
if (WorldCommunicator.isEnabled()) {
MSPacketRepository.sendPunishment(player, args[1], 6, 0l);
} else if (target != null) {
target.getPacketDispatch().sendLogout();
target.getSession().disconnect();
target.clear(true);
player.getPacketDispatch().sendMessage("Kicked player " + args[1] + " from this world.");
} else {
player.getPacketDispatch().sendMessage("Player " + args[1] + " was already inactive.");
}
return true;
case "getinfo":
case "getmac":
case "getip":
case "getcompname":
printInfo(player, args[1]);
return true;
case "unban":
unpunish(player, args[1], 1);
return true;
case "unmute":
unpunish(player, args[1], 0);
return true;
case "mute":
case "permmute":
punish(player, args[1], args, 0);
return true;
case "ban":
case "permban":
punish(player, args[1], args, 1);
return true;
case "ipban":
punish(player, args[1], args, 2);
return true;
case "macban":
punish(player, args[1], args, 3);
return true;
case "uidban":
case "mskban":
punish(player, args[1], args, 4);
return true;
case "sysban":
punish(player, args[1], args, 5);
return true;
case "unccban":
ClanRepository clan = ClanRepository.get(GameWorld.getSettings().getName());
if (clan == null) {
return true;
}
if (!clan.isBanned(args[1])) {
player.sendMessage("The player is not banned.");
return true;
}
clan.getBanned().remove(args[1]);
player.sendMessage("Unbanned the player " + args[1] + " from the cc.");
return true;
case "checkbank":
checkBank(player, args);
return true;
case "checkinvy":
checkInvy(player, args);
return true;
case "players":
if ((player.getInterfaceManager().isOpened() && player.getInterfaceManager().getOpened().getId() != 275) || player.getLocks().isMovementLocked() || player.getLocks().isTeleportLocked()) {
player.sendMessage("Please finish what you're doing first.");
return true;
}
player.getInterfaceManager().open(new Component(275));
for (int i = 0; i < 257; i++) {
player.getPacketDispatch().sendString("", 275, i);
}
String red = "<col=8A0808>";
player.getPacketDispatch().sendString("<col=8A0808>" + "Players" + "</col>", 275, 2);
StringBuilder builder = new StringBuilder("<br>");
int count = 0;
for (Player p : Repository.getPlayers()) {
if (count > 45) {
builder.append("<br>Max amount we can show on this interface.");
break;
}
if (p == null || (p.isAdmin() && !GameWorld.getSettings().isDevMode()) && !player.isAdmin() || p.isArtificial()) {
continue;
}
builder.append(red + "<img=" + (Rights.getChatIcon(p) - 1) + ">" + p.getUsername() + " [ip=" + p.getDetails().getIpAddress() + ", name=" + p.getDetails().getCompName() + "]<br><br>");
count++;
}
player.getPacketDispatch().sendString(builder.toString(), 275, 11);
return true;
}
return false;
}
/**
* Punishes a player.
* @param player the player.
* @param target The target.
* @param args the args.
* @param target the target.
* @param ban if banned.
*/
private Player punish(Player player, String target, String[] args, int type) {
boolean perm = args[0].contains("perm");
long duration = perm ? -1l : ((args.length > 2 ? Integer.parseInt(args[2]) : 2) * 24 * 60 * 60_000);
if (WorldCommunicator.isEnabled()) {
MSPacketRepository.sendPunishment(player, target, type, duration);
return null;
}
player.sendMessage("Management server is offline, punishment could not be processed.");
return null;
}
/**
* Removes the punishment of a player.
* @param player the player.
* @param target the target.
* @param ban if we are unbanning.
*/
private void unpunish(Player player, String target, int type) {
if (WorldCommunicator.isEnabled()) {
MSPacketRepository.sendPunishment(player, target, type, 0L);
return;
}
player.sendMessage("Management server is offline, removing punishment could not be processed.");
}
/**
* Prints the info of a player.
* @param player the player.
* @param target the target.
*/
private void printInfo(Player player, String target) {
if (WorldCommunicator.isEnabled()) {
MSPacketRepository.sendPunishment(player, target, 7, 0L);
return;
}
}
/**
* Checks another players bank.
* @param player the player.
* @param args the args.
*/
private void checkBank(Player player, String[] args) {
if (player.getDetails().getRights() == Rights.PLAYER_MODERATOR && !player.getZoneMonitor().isInZone("Moderator Zone")) {
player.sendMessage("You can only use this command in the moderator room.");
return;
}
Player o = Repository.getPlayer(args[1], true);
if (o == null) {
player.sendMessage("Unable to load player " + args[1]);
return;
}
Item[] items = o.getBank().toArray();
int size = 0;
int[] slots = new int[items.length];
for (int i = 0; i < items.length; i++) {
if (items[i] != null) {
slots[size++] = i;
}
}
int[] slot = new int[size];
for (int i = 0; i < size; i++) {
slot[i] = slots[i];
}
PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 762, 89, 90, new Item[] {}, 0, false));
PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 762, 89, 90, o.getBank().toArray(), false, slots));
player.getInterfaceManager().open(new Component(12));
player.getPacketDispatch().sendMessage("Checking " + o.getName() + "'s bank.");
}
/**
* Checks a players inventory.
* @param player the player.
* @param args the arguments.
*/
private void checkInvy(Player player, String[] args) {
if (player.getDetails().getRights() == Rights.PLAYER_MODERATOR && !player.getZoneMonitor().isInZone("Moderator Zone")) {
player.sendMessage("You can only use this command in the moderator room.");
return;
}
Player o = Repository.getPlayer(args[1], true);
if (o == null) {
player.sendMessage("Unable to load player " + args[1]);
return;
}
Item[] items = o.getInventory().toArray();
int size = 0;
int[] slots = new int[items.length];
for (int i = 0; i < items.length; i++) {
if (items[i] != null) {
slots[size++] = i;
}
}
int[] slot = new int[size];
for (int i = 0; i < size; i++) {
slot[i] = slots[i];
}
PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 149, 0, 93, new Item[] {}, false));
PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 149, 0, 93, items, false, slots));
player.getPacketDispatch().sendMessage("Checking " + o.getName() + "'s inventory.");
}
}

View file

@ -0,0 +1,110 @@
package plugin.command;
import org.crandor.game.content.skill.member.slayer.Master;
import org.crandor.game.content.skill.member.slayer.Task;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.Rights;
import org.crandor.game.node.entity.player.info.portal.Perks;
import org.crandor.game.node.item.Item;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.world.update.flag.context.Animation;
import org.crandor.game.world.update.flag.context.Graphics;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
/**
* Handles the perk related commands.
* @author Vexia
*/
@InitializablePlugin
public class PerkCommandPlugin extends CommandPlugin {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.PLAYER);
return this;
}
@Override
public boolean parse(Player player, String name, String[] args) {
switch (name) {
case "bonecrusher":
case "bone":
case "enablebonecrusher":
case "enablebone":
if (!player.hasPerk(Perks.BONECRUSHER) && !player.isAdmin()) {
player.sendMessage("You do not own the bonecrusher perk.");
return false;
}
boolean bone = player.getGlobalData().isEnableBoneCrusher();
player.getGlobalData().setEnableBoneCrusher(bone ? false : true);
player.sendMessage("You have " + (bone ? "disabled" : "enabled") + " your bonecrusher perk.");
return true;
case "coinmachine":
if (!player.hasPerk(Perks.COIN_MACHINE) && !player.isAdmin()) {
player.sendMessage("You do not own the coin machine perk.");
return false;
}
boolean coin = player.getGlobalData().isEnableCoinMachine();
player.getGlobalData().setEnableCoinMachine(coin ? false : true);
player.sendMessage("You have " + (coin ? "disabled" : "enabled") + " your coin machine perk.");
return true;
case "charmcollector":
case "charm":
if (!player.hasPerk(Perks.CHARM_COLLECTOR) && !player.isAdmin()) {
player.sendMessage("You do not own the coin machine perk.");
return false;
}
boolean charm = player.getGlobalData().isEnableCoinMachine();
player.getGlobalData().setEnableCharmCollector(charm ? false : true);
player.sendMessage("You have " + (charm? "disabled" : "enabled") + " your charm collector perk.");
return true;
case "swap":
case "spellswap":
if (!player.hasPerk(Perks.SPELL_SWAP) && player.getDetails().getRights() != Rights.ADMINISTRATOR) {
player.sendMessage("You don't have the spell swap perk.");
return false;
}
if (player.inCombat() || player.getLocks().isInteractionLocked() || player.getSkullManager().isWilderness() || player.getAttribute("activity", null) != null) {
player.getPacketDispatch().sendMessage("You can't do that right now.");
return true;
}
player.animate(new Animation(6299));
player.graphics(new Graphics(1062));
player.getDialogueInterpreter().open(3264731, true, true);
return true;
case "resettask":
case "cleartask":
if (!player.getSlayer().hasTask()) {
player.sendMessage("You don't have a slayer task!");
return true;
}
if (player.getSlayer().getMaster() == Master.WISE_OLD_MAN) {
player.sendMessage("You can't do this with tasks from the Wise Old Man.");
return true;
}
Task task = player.getSlayer().getTask();
if (task.isDisabled() || player.getDetails().getShop().hasPerk(Perks.SLAYER_BETRAYER)) {
player.sendMessage("You have reset your task.");
player.getSlayer().clear();
return true;
} else {
if (player.getInventory().contains(995, 200000)) {
Item i = new Item(995);
i.setAmount(200000);
if (player.getInventory().remove(i)) {
player.sendMessage("You have reset your task.");
player.getSlayer().clear();
return true;
}
} else {
player.sendMessage("You need 200,000 coins in order to do that.");
return false;
}
}
}
return false;
}
}

View file

@ -0,0 +1,273 @@
package plugin.command;
import org.crandor.ServerConstants;
import org.crandor.game.component.Component;
import org.crandor.game.content.global.tutorial.TutorialStage;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.info.Rights;
import org.crandor.game.node.entity.player.link.IronmanMode;
import org.crandor.game.node.entity.player.link.RunScript;
import org.crandor.game.node.entity.player.link.quest.Quest;
import org.crandor.game.node.entity.player.link.quest.QuestRepository;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.system.communication.ClanRepository;
import org.crandor.game.system.communication.CommunicationInfo;
import org.crandor.game.world.GameWorld;
import org.crandor.game.world.repository.Repository;
import org.crandor.net.amsc.WorldCommunicator;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
import org.crandor.tools.StringUtils;
/**
* Handles a player command.
* @author Vexia
*/
@InitializablePlugin
public final class PlayerCommandPlugin extends CommandPlugin {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.PLAYER);
return this;
}
@Override
public boolean parse(Player player, String name, String[] arguments) {
switch (name) {
case "shutdowninterface":
player.getInterfaceManager().close();
break;
case "tut":
int stage = Integer.parseInt(arguments[1]);
TutorialStage.load(player, stage, false);
break;
case "resettabs":
for (int i = 0; i < player.getBank().getTabStartSlot().length; i++) {
player.getBank().getTabStartSlot()[i] = 0;
}
player.getBank().setTabIndex(10);
if (player.getBank().isOpen()) {
player.getInterfaceManager().close();
}
player.getPacketDispatch().sendMessage("Bank tabs are reset!");
return true;
case "resetpin":
if (arguments.length < 2) {
player.sendMessage("Syntax error: ::resetpin oldpin");
return true;
}
String oldPin = arguments[1];
if (oldPin == null) {
return true;
}
if (!player.getBankPinManager().hasPin()) {
player.sendMessage("You don't have a pin.");
return true;
}
if (!oldPin.equals(player.getBankPinManager().getPin())) {
player.sendMessage("Your old pin doesn't match your current pin.");
return true;
}
player.getBankPinManager().setPin(null);
player.sendMessage("Your pin has been reset.");
return true;
case "bank":// The players want OSRS content, let's give it to em
if (!player.isAdmin()) {
player.sendChat("Hey, everyone, I just tried to do something very silly!");
}
break;
case "players":
int count = Repository.getPlayers().size();
int ironCount = 1;
int ultIronCount = 0;
for (Player p : Repository.getPlayers()) {
if (p.getIronmanManager().checkRestriction(IronmanMode.ULTIMATE)) {
ultIronCount++;
}
if (p.getIronmanManager().checkRestriction(IronmanMode.STANDARD)) {
ironCount++;
}
}
int regular = count - ironCount - ultIronCount;
if (count == 1) {
player.getPacketDispatch().sendMessage("There is 1 active player in this world.");
} else {
player.getPacketDispatch().sendMessage("There are " + count + " active players in this world: " + regular + " regular, " + ironCount + " iron, and " + ultIronCount + " ultimate iron.");
}
return player.getRights() == Rights.REGULAR_PLAYER;
case "yell":
if (!player.isDonator() && !player.isAdmin()) {
player.getPacketDispatch().sendMessages("Join clan chat \"" + GameWorld.getName() + "\" to talk globally, or become a donator to have access to", "this benefit.");
return true;
}
if (player.getDetails().isMuted()) {
player.getPacketDispatch().sendMessage("You have been " + (player.getDetails().isPermMute() ? "permanently" : "temporarily") + " muted due to breaking a rule.");
return true;
}
if(WorldCommunicator.isEnabled()){
if(ClanRepository.getDefault().isBanned(player.getName())){
player.sendMessages("You are temporarily unable to yell as you are banned from the main clan chat.", "Don't be annoying!");
return true;
}
}
if (player.getAttribute("yell-delay", 0.0) > GameWorld.getTicks()) {
player.sendMessages("You have yelled in the last " + player.getDonatorType().getCooldown() + " seconds. Upgrade to an extreme donator to have", "unlimited yelling abilities.");
return true;
}
String text = getArgumentLine(arguments);
if(text.contains("<img=") || text.contains("<br>") || text.contains("<col=") || text.contains("<shad=")){
player.sendMessage("Bad! No images/text effects allowed in yell chat.");
return true;
}
if(text.contains("aq p")){
return true;
}
int length = text.length();
if (length > 100) {
length = 100;
}
if (text.length() >= 2) {
if (Character.isLowerCase(text.charAt(0))) {
text = Character.toUpperCase(text.charAt(0)) + text.substring(1, length);
}
text = getYellPrefix(player) + text + "</col>";
for (Player p : Repository.getPlayers()) {
if (p.isActive()) {
p.getPacketDispatch().sendMessage(text);
}
}
if (player.getDonatorType().getCooldown() > 0 && !player.isStaff()) {
player.setAttribute("yell-delay", (int) GameWorld.getTicks() + (player.getDonatorType().getCooldown() / 0.6));
}
} else {
player.getPacketDispatch().sendMessage("Your message was too short.");
}
return true;
case "togglenews":
player.getSavedData().getGlobalData().setDisableNews(!player.getSavedData().getGlobalData().isDisableNews());
player.sendMessage("<col=FF0000>" + (player.getSavedData().getGlobalData().isDisableNews() ? "You will no longer see news notifications." : "You will now see news notifications."));
return true;
case "commands":
case "command":
case "commandlist":
sendCommands(player);
return true;
case "quests":
sendQuests(player);
return true;
case "donate":
sendDonationInfo(player);
return true;
case "reply":
if(player.getInterfaceManager().isOpened()){
player.sendMessage("Please finish what you're doing first.");
return true;
}
if (player.getAttributes().containsKey("replyTo")) {
player.setAttribute("keepDialogueAlive", true);
final String replyTo = (String) player.getAttribute("replyTo", "").replaceAll("_", " ");
player.setAttribute("runscript", new RunScript() {
@Override
public boolean handle() {
CommunicationInfo.sendMessage(player, replyTo.toLowerCase(), (String) getValue());
player.removeAttribute("keepDialogueAlive");
return true;
}
});
player.getDialogueInterpreter().sendMessageInput(StringUtils.formatDisplayName(replyTo));
} else {
player.getPacketDispatch().sendMessage("You have not recieved any recent messages to which you can reply.");
}
return true;
}
return false;
}
/**
* Sends commands.
* @param player the player.
*/
private void sendCommands(Player player) {
if (player.getInterfaceManager().isOpened()) {
player.sendMessage("Finish what you're currently doing.");
return;
}
player.getInterfaceManager().close();
player.getPacketDispatch().sendString("<u>" + GameWorld.getName() + " commands</u>", 239, 1);
player.getPacketDispatch().sendString("::filter (completely toggles game messages)<br>::players (shows player count)<br>::doublexp (claims double xp)<br>::shop opens up a dialogue so you can use credits<br>::togglenews toggles the news broadcasts.<br>::help shows a small help dialogue<br>::toggleatk toggles left-click attack option mode<br>Shift+Scroll wheel zooms the client in/out", 239, 2);
player.getPacketDispatch().sendString("", 239, 3);
player.getPacketDispatch().sendString("", 239, 4);
player.getPacketDispatch().sendString("", 239, 5);
player.getInterfaceManager().openComponent(239);
}
/**
* Sends information about donating.
* @param player The player.
*/
private void sendDonationInfo(Player player) {
player.getInterfaceManager().open(new Component(275));
for (int i = 0; i < 257; i++) {
player.getPacketDispatch().sendString("", 275, i);
}
int lineId = 11;
player.getPacketDispatch().sendString("<col=8A0808>" + "Donation Information" + "</col>", 275, 2);
for (String s : ServerConstants.MESSAGES) {
player.getPacketDispatch().sendString("<col=8A0808>" + s + "<br><br></col>", 275, lineId++);
}
}
/**
* Sends the quests.
* @param player the player.
*/
private void sendQuests(Player player) {
player.getInterfaceManager().open(new Component(275));
for (int i = 0; i < 257; i++) {
player.getPacketDispatch().sendString("", 275, i);
}
String red = "<col=8A0808>";
int lineId = 11;
player.getPacketDispatch().sendString("<col=8A0808>" + "Available Quests" + "</col>", 275, 2);
for (Quest q : QuestRepository.getQuests().values()) {
player.getPacketDispatch().sendString(q.isCompleted(player) ? red + "<str> " + q.getName() + " <br><br>" : red + " " + q.getName() + " <br><br>", 275, lineId++);
}
}
/**
* Gets the yell prefix for the given player.
* @param player The player.
* @return The prefix used in yell.
*/
private static String getYellPrefix(Player player) {
String color = "<col=800080>";
StringBuilder sb = new StringBuilder("[");
if (player.getDetails().getRights().isVisible(player)) {
Rights right = player.getAttribute("visible_rank", player.getDetails().getRights());
switch (right) {
case ADMINISTRATOR:
color = "<col=009999>";
break;
case PLAYER_MODERATOR:
color = "<col=81819B>";
break;
default:
break;
}
}
if (player.isDonator() && !player.isStaff()) {
color = "<col=" + player.getDonatorType().getColor() + ">";
}
int icon = Rights.getChatIcon(player);
if (icon > 0) {
sb.append("<img=").append(icon - 1).append(">");
}
sb.append(color).append(player.getUsername()).append("</col>");
sb.append("]: ").append(color);
return sb.toString();
}
}

View file

@ -0,0 +1,119 @@
package plugin.command;
import org.crandor.cache.Cache;
import org.crandor.cache.def.impl.ItemDefinition;
import org.crandor.game.content.eco.ge.GrandExchangeDatabase;
import org.crandor.game.content.eco.ge.GrandExchangeEntry;
import org.crandor.game.content.eco.ge.ResourceManager;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.system.SystemManager;
import org.crandor.game.system.SystemState;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.system.mysql.impl.ItemConfigSQLHandler;
import org.crandor.game.world.repository.Repository;
import org.crandor.gui.KeldagrimFrame;
import org.crandor.net.amsc.WorldCommunicator;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
/**
* Represents commands related to system updating.
* @author Vexia
*/
@InitializablePlugin
public final class SystemCommand extends CommandPlugin {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.DEVELOPER);
return this;
}
@SuppressWarnings("deprecation")
@Override
public boolean parse(Player player, String name, String[] args) {
switch (name) {
case "cms":// Re-connects to the management server.
for (Player pl : Repository.getPlayers()) {
try {
pl.removeAttribute("combat-time");
pl.getPacketDispatch().sendLogout();
pl.clear();
} catch (Throwable t) {
t.printStackTrace();
}
}
WorldCommunicator.terminate();
WorldCommunicator.connect();
return true;
case "showgui":
KeldagrimFrame.INSTANCE.setVisible(true);
return true;
case "update":
if (args.length > 1) {
SystemManager.getUpdater().setCountdown(Integer.parseInt(args[1]));
}
SystemManager.flag(SystemState.UPDATING);
return true;
case "cancel_update":
case "cancelupdate":
case "cancel":
SystemManager.getUpdater().cancel();
return true;
case "clear_resource":
ResourceManager.clearResource(toInteger(args[1]));
System.out.println("Cleared resource " + args[1] + "!");
return true;
case "add_resource":
boolean sell = !(args.length > 3 && args[3].equals("false"));
ResourceManager.addResource(toInteger(args[1]), toInteger(args[2]), sell);
System.out.println("Added " + (sell ? "selling" : "buying") + " resource " + args[1] + ", " + args[2] + "!");
return true;
case "kseco":
ResourceManager.kickStartEconomy();
return true;
case "resetrm":
ResourceManager.getStock().clear();
System.out.println("Fully reset resource manager!");
return true;
case "setdefaultge":
int changes = 0;
for (int id = 0; id < Cache.getItemDefinitionsSize(); id++) {
GrandExchangeEntry entry = GrandExchangeDatabase.getDatabase().get(id);
if (entry == null) {
continue;
}
ItemDefinition def = ItemDefinition.forId(id);
int value = entry.getValue();
if (value < def.getAlchemyValue(true)) {
value = def.getAlchemyValue(true);
}
if (value < def.getAlchemyValue(false)) {
value = def.getAlchemyValue(false);
}
if (value < def.getValue()) {
value = def.getValue();
}
if (value < def.getConfiguration(ItemConfigSQLHandler.GE_PRICE, 0)) {
value = def.getConfiguration(ItemConfigSQLHandler.GE_PRICE, 0);
}
if (value < def.getConfiguration(ItemConfigSQLHandler.SHOP_PRICE, 0)) {
value = def.getConfiguration(ItemConfigSQLHandler.SHOP_PRICE, 0);
}
if (value != entry.getValue()) {
changes++;
}
entry.setValue(value);
}
player.getPacketDispatch().sendMessage("Set default G.E prices - " + changes + " changes made!");
return true;
case "sgc":
case "systemgc":
System.gc();
return true;
}
return false;
}
}

View file

@ -0,0 +1,147 @@
package plugin.command;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.system.SystemLogger;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.world.map.Location;
import org.crandor.game.world.map.Region;
import org.crandor.game.world.map.RegionManager;
import org.crandor.game.world.map.build.DynamicRegion;
import org.crandor.game.world.repository.Repository;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
/**
* Represents the commands related to teleporting.
* @author 'Vexia
* @author Emperor
*/
@InitializablePlugin
public final class TeleportCommand extends CommandPlugin {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.ADMINISTRATOR);
return this;
}
@Override
public boolean parse(Player player, String name, String[] args) {
final Player target;
String n = "";
switch (name) {
case "tele":
if (args.length == 2 && args[1].contains(",")) {
args = args[1].split(",");
int x = Integer.parseInt(args[1]) << 6 | Integer.parseInt(args[3]);
int y = Integer.parseInt(args[2]) << 6 | Integer.parseInt(args[4]);
int z = Integer.parseInt(args[0]);
player.getProperties().setTeleportLocation(Location.create(x, y, z));
return true;
}
if (args.length < 2) {
player.debug("syntax error: x, y, (optional) z");
return false;
}
player.getProperties().setTeleportLocation(Location.create(Integer.parseInt(args[1]), Integer.parseInt(args[2]), args.length > 3 ? Integer.parseInt(args[3]) : 0));
return true;
case "telecs": // Client ctrl+shift teleport
try {
Location loc = player.getPlayerFlags().getLastSceneGraph();
int x = ((loc.getRegionX() - 6) << 3) + toInteger(args[1]);
int y = ((loc.getRegionY() - 6) << 3) + toInteger(args[2]);
player.getPulseManager().clear();
player.getProperties().setTeleportLocation(Location.create(x, y, player.getLocation().getZ()));
} catch (Throwable t) {
// region is changing
t.printStackTrace();
}
return true;
case "teler": // Teleports to the center of the region.
int regionId = Integer.parseInt(args[1]);
int x = 32;
int y = 32;
if (args.length > 3) {
x = toInteger(args[2]);
y = toInteger(args[3]);
}
player.getProperties().setTeleportLocation(Location.create(((regionId >> 8) << 6) + x, ((regionId & 0xFF) << 6) + y, 0));
player.debug("Current location=" + player.getProperties().getTeleportLocation());
return true;
case "telers": // Teleports to the start of the region.
regionId = Integer.parseInt(args[1]);
player.getProperties().setTeleportLocation(Location.create(((regionId >> 8) << 6), ((regionId & 0xFF) << 6), 0));
player.debug("Current location=" + player.getProperties().getTeleportLocation());
return true;
case "telere": // Teleports to the end of the region.
regionId = Integer.parseInt(args[1]);
player.getProperties().setTeleportLocation(Location.create(((regionId >> 8) << 6) + 63, ((regionId & 0xFF) << 6) + 63, 0));
player.debug("Current location=" + player.getProperties().getTeleportLocation());
return true;
case "teleto":
if (args.length < 1) {
player.debug("syntax error: name");
return true;
}
for (int i = 1; i < args.length; i++) {
if (i == 1) {
n += args[i];
continue;
}
n += " " + args[i];
}
target = Repository.getPlayer(n);
if (target == null) {
player.debug("syntax error: name");
return true;
}
if (target.getAttribute("fc_wave") != null) {
player.sendMessage("You cannot teleport to a player who is in the Fight Caves.");
return true;
}
player.getProperties().setTeleportLocation(target.getLocation());
break;
case "teletome":
if (args.length < 1) {
player.debug("syntax error: name");
return true;
}
for (int i = 1; i < args.length; i++) {
if (i == 1) {
n += args[i];
continue;
}
n += " " + args[i];
}
target = Repository.getPlayer(n);
if (target == null) {
player.debug("syntax error: name");
return true;
}
target.getProperties().setTeleportLocation(player.getLocation());
break;
case "pos":
case "position":
case "loc":
final Location l = player.getLocation();
final Region r = player.getViewport().getRegion();
player.getPacketDispatch().sendMessage("Absolute: " + l + ", regional: [" + l.getLocalX() + ", " + l.getLocalY() + "], chunk: [" + l.getChunkOffsetX() + ", " + l.getChunkOffsetY() + "], flag: [" + RegionManager.isTeleportPermitted(l) + ", " + RegionManager.getClippingFlag(l) + ", " + RegionManager.isLandscape(l) + "].");
player.getPacketDispatch().sendMessage("Region: [id=" + l.getRegionId() + ", active=" + r.isActive() + ", instanced=" + ((r instanceof DynamicRegion)) + "], obj=" + RegionManager.getObject(l) + ".");
player.getPacketDispatch().sendMessage("Object: " + RegionManager.getObject(l) + ".");
SystemLogger.log("Viewport: " + l.getSceneX(player.getPlayerFlags().getLastSceneGraph()) + "," + l.getSceneY(player.getPlayerFlags().getLastSceneGraph()));
String loc = "Location.create(" + l.getX() + ", " + l.getY() + ", " + l.getZ() + ")";
SystemLogger.log(loc + "; "+ player.getPlayerFlags().getLastSceneGraph() + ", " + l.getLocalX() + ", " + l.getLocalY());
StringSelection stringSelection = new StringSelection(loc);
Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
clpbrd.setContents(stringSelection, null);
return true;
}
return false;
}
}

View file

@ -0,0 +1,403 @@
package plugin.command;
import org.crandor.cache.Cache;
import org.crandor.game.content.global.tutorial.CharacterDesign;
import org.crandor.game.content.skill.member.farming.wrapper.PatchWrapper;
import org.crandor.game.node.entity.combat.ImpactHandler.HitsplatType;
import org.crandor.game.node.entity.impl.Projectile;
import org.crandor.game.node.entity.npc.NPC;
import org.crandor.game.node.entity.player.Player;
import org.crandor.game.node.entity.player.link.IronmanMode;
import org.crandor.game.node.entity.player.link.audio.Audio;
import org.crandor.game.node.object.GameObject;
import org.crandor.game.node.object.ObjectBuilder;
import org.crandor.game.system.SystemLogger;
import org.crandor.game.system.command.CommandPlugin;
import org.crandor.game.system.command.CommandSet;
import org.crandor.game.system.task.Pulse;
import org.crandor.game.world.GameWorld;
import org.crandor.game.world.map.Location;
import org.crandor.game.world.map.RegionManager;
import org.crandor.game.world.repository.Repository;
import org.crandor.game.world.update.flag.context.Animation;
import org.crandor.game.world.update.flag.context.Graphics;
import org.crandor.net.packet.PacketRepository;
import org.crandor.net.packet.context.InterfaceContext;
import org.crandor.net.packet.out.Interface;
import org.crandor.plugin.InitializablePlugin;
import org.crandor.plugin.Plugin;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
/**
* Represents the the command plugin used for visual commands.
* @author Vexia
* @author Emperor
*
*/
@InitializablePlugin
public final class VisualCommand extends CommandPlugin {
@Override
public Plugin<Object> newInstance(Object arg) throws Throwable {
link(CommandSet.ADMINISTRATOR);
return this;
}
@SuppressWarnings("deprecation")
@Override
public boolean parse(final Player player, String name, String[] args) {
Location location = null;
GameObject object = null;
Player o = null;
switch (name) {
case "invisible":
case "invis":
case "seti":
player.setInvisible(!player.isInvisible());
player.sendMessage("You are now "+(player.isInvisible() ? "invisible" : "rendering")+" for other players.");
break;
case "maxkc":
for (int i = 0; i < 6; i++) {
player.getSavedData().getActivityData().getBarrowBrothers()[i] = true;
}
String[] names = new String[] { "Ahrim", "Dharok", "Guthan", "Karil", "Torag", "Verac" };
player.getSavedData().getActivityData().setBarrowKills(50);
player.getPacketDispatch().sendMessage("Flagged all barrow brothers killed and 50 catacomb kills, current entrance: " + names[player.getSavedData().getActivityData().getBarrowTunnelIndex()] + ".");
return true;
case "1hko":
player.setAttribute("1hko", !player.getAttribute("1hko", false));
player.getPacketDispatch().sendMessage("1-hit KO mode " + (player.getAttribute("1hko", false) ? "on." : "off."));
return true;
case "anim":
case "emote":
if (args.length < 2) {
player.debug("syntax error: id (optional) delay");
return true;
}
final Animation animation = new Animation(Integer.parseInt(args[1]), args.length > 2 ? Integer.parseInt(args[2]) : 0);
player.animate(animation);
return true;
case "gfx":
case "graphic":
case "graphics":
if (args.length < 2) {
player.debug("syntax error: id (optional) height delay");
return true;
}
player.graphics(new Graphics(Integer.parseInt(args[1]), args.length > 2 ? Integer.parseInt(args[2]) : 0, args.length > 3 ? Integer.parseInt(args[3]) : 0));
return true;
case "sync":
case "visual":
if (args.length < 3) {
player.debug("syntax error: anim_id gfx_id (optional) height");
return true;
}
int animId = toInteger(args[1]);
int gfxId = toInteger(args[2]);
int height = args.length > 3 ? toInteger(args[3]) : 0;
player.visualize(Animation.create(animId), new Graphics(gfxId, height));
return true;
case "pos_graphic":
case "position_gfx":
case "pos_gfx":
case "lgfx":
if (args.length < 2) {
player.debug("syntax error: id x y (optional) height delay");
return true;
}
location = Location.create(Integer.parseInt(args[2]), Integer.parseInt(args[3]), args.length > 4 ? Integer.parseInt(args[4]) : 0);
player.getPacketDispatch().sendPositionedGraphic(Integer.parseInt(args[1]), args.length > 5 ? Integer.parseInt(args[5]) : 0, args.length > 6 ? Integer.parseInt(args[6]) : 0, location);
break;
case "npc":
if (args.length < 2) {
player.debug("syntax error: id (optional) direction");
return true;
}
NPC npc = NPC.create(toInteger(args[1]), player.getLocation());
npc.setAttribute("spawned:npc", true);
npc.setRespawn(false);
npc.setDirection(player.getDirection());
npc.init();
npc.setWalks(args.length > 2 ? true : false);
String npcString = "{" + npc.getLocation().getX() + "," + npc.getLocation().getY() + "," + npc.getLocation().getZ() + "," + (npc.isWalks() ? "1" : "0") + "," + npc.getDirection().ordinal() + "}";
Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
clpbrd.setContents(new StringSelection(npcString), null);
System.out.println(npcString);
return true;
case "npcsquad":
if (args.length < 2) {
player.debug("syntax error: id (optional) sizeX sizeY");
return true;
}
int sizeX = 3;
int sizeY = 3;
if (args.length > 2) {
sizeX = toInteger(args[2]);
if (args.length > 3) {
sizeY = toInteger(args[3]);
} else {
sizeY = sizeX;
}
}
boolean aggressive = args.length > 4;
for (int x = 0; x < sizeX; x++) {
for (int y = 0; y < sizeY; y++) {
npc = NPC.create(toInteger(args[1]), player.getLocation().transform(1 + x, 1 + y, 0));
npc.setAttribute("spawned:npc", true);
npc.setAggressive(aggressive);
npc.init();
npc.setRespawn(false);
npc.setWalks(aggressive);
}
}
return true;
case "oib":
player.getInterfaceManager().openInfoBars();
break;
case "char":
CharacterDesign.open(player);
break;
case "savenpc":
return true;
case "object":
case "obj":
if (args.length < 2) {
player.debug("syntax error: id (optional) type rotation or rotation");
return true;
}
object = args.length > 3 ? new GameObject(toInteger(args[1]), player.getLocation(), toInteger(args[2]), toInteger(args[3])) : args.length == 3 ? new GameObject(toInteger(args[1]), player.getLocation(), toInteger(args[2])) : new GameObject(toInteger(args[1]), player.getLocation());
ObjectBuilder.add(object);
SystemLogger.log("object = " + object);
return true;
case "oa":
case "object_anim":
case "obj_anim":
case "objectanim":
case "objanim":
if (args.length < 2) {
player.debug("syntax error: x y id");
return true;
}
location = args.length > 2 ? Location.create(Integer.parseInt(args[1]), Integer.parseInt(args[2]), 3) : player.getLocation();
object = RegionManager.getObject(location);
if (object == null) {
player.debug("error: object not found in region cache.");
return true;
}
player.getPacketDispatch().sendObjectAnimation(object, new Animation(toInteger(args[args.length - 1])));
return true;
case "inter":
case "component":
case "interface":
if (args.length < 2) {
player.debug("syntax error: interface-id");
return true;
}
int componentId = toInteger(args[1]);
if (componentId < 0 || componentId > Cache.getInterfaceDefinitionsSize()) {
player.debug("Invalid component id [id=" + componentId + ", max=" + Cache.getInterfaceDefinitionsSize() + "].");
return true;
}
player.getInterfaceManager().openComponent(componentId);
return true;
case "ti":
player.getPacketDispatch().sendInterfaceConfig(90, 87, false);
break;
case "iconfig":
case "inter_config":
if (args.length < 2) {
player.debug("syntax error: interface-id child hidden");
return true;
}
boolean hidden = args.length > 3 ? Boolean.parseBoolean(args[3]) : true;
player.getPacketDispatch().sendInterfaceConfig(toInteger(args[1]), toInteger(args[2]), hidden);
player.getPacketDispatch().sendMessage("Interface child (id=" + args[1] + ", child=" + args[2] + ") is " + (hidden ? "hidden." : "visible."));
return true;
case "saveconfig":
case "config":
if (args.length < 2) {
player.debug("syntax error: config-id (optional) value");
return true;
}
if (name.equals("saveconfig")) {
player.getConfigManager().set(toInteger(args[1]), args.length > 2 ? toInteger(args[2]) : 0, true);
} else {
player.getConfigManager().send(toInteger(args[1]), args.length > 2 ? toInteger(args[2]) : 0);
}
return true;
case "loop_inter":
final int st = toInteger(args[1]);
final int en = args.length > 2 ? toInteger(args[2]) : 740;
GameWorld.submit(new Pulse(3, player) {
int id = st;
@Override
public boolean pulse() {
PacketRepository.send(Interface.class, new InterfaceContext(player, 548, 77, id, false));
player.debug("Interface id: " + id);
return ++id >= en;
}
});
return true;
case "loop_config":
case "config_loop":
if (args.length < 4) {
player.debug("syntax error: config-id start end value");
return true;
}
int value = toInteger(args[3]);
for (int i = toInteger(args[1]); i < toInteger(args[2]); i++) {
player.getConfigManager().set(i, value);
}
return true;
case "string":
if (args.length < 3) {
player.debug("syntax error: interface child text");
return true;
}
player.getPacketDispatch().sendString(args[3], toInteger(args[1]), toInteger(args[2]));
return true;
case "loop_string":
case "string_loop":
if (args.length < 3) {
player.debug("syntax error: interface min max");
return true;
}
int interfaceId = toInteger(args[1]);
for (int i = toInteger(args[2]); i < toInteger(args[3]); i++) {
player.getPacketDispatch().sendString("child=" + i, interfaceId, i);
}
return true;
case "loop_oa":
final int startId = toInteger(args[1]);
final int endId = args.length > 2 ? toInteger(args[2]) : 11000;
GameWorld.submit(new Pulse(3, player) {
int id = startId;
@Override
public boolean pulse() {
GameObject object = RegionManager.getObject(player.getLocation());
if (object == null) {
player.debug("error: object not found in region cache.");
return true;
}
player.getPacketDispatch().sendObjectAnimation(object, new Animation(id));
player.debug("Animation id: " + id);
return ++id >= endId;
}
});
return true;
case "loop_anim":
final int start = toInteger(args[1]);
final int end = args.length > 2 ? toInteger(args[2]) : 11000;
GameWorld.submit(new Pulse(3, player) {
int id = start;
@Override
public boolean pulse() {
player.animate(Animation.create(id));
player.debug("Animation id: " + id);
return ++id >= end;
}
});
return true;
case "loop_gfx":
final int s = toInteger(args[1]);
final int e = args.length > 2 ? toInteger(args[2]) : 11000;
GameWorld.submit(new Pulse(3, player) {
int id = s;
@Override
public boolean pulse() {
Projectile.create(player.getLocation(), player.getLocation().transform(0, 3, 0), id, 42, 36, 46, 75, 5, 11).send();
player.graphics(new Graphics(id, 96));
player.debug("Graphic id: " + id);
return ++id >= e;
}
});
return true;
case "removenpc":
player.setAttribute("removenpc", !player.getAttribute("removenpc", false));
player.debug("You have set remove npc value to " + player.getAttribute("removenpc", false) + ".");
return true;
case "pnpc":
if (args.length < 2) {
player.debug("syntax error: id");
return true;
}
player.getAppearance().transformNPC(toInteger(args[1]));
return true;
case "itemoni":
int inter = toInteger(args[1]);
int child = toInteger(args[2]);
int item = args.length > 3 ? toInteger(args[3]) : 1038;
player.getPacketDispatch().sendItemZoomOnInterface(item, 270, inter, child);
return true;
case "hit":
player.getImpactHandler().manualHit(player, toInteger(args[1]), HitsplatType.NORMAL);
return true;
case "sound":
player.getAudioManager().send(new Audio(Integer.parseInt(args[1]), 10, 1));
return true;
case "noclip":
player.setAttribute("no_clip", !player.getAttribute("no_clip", false));
return true;
case "grow":
for (PatchWrapper wrapper : player.getFarmingManager().getPatches()) {
if (wrapper == null || wrapper.getPatch() == null || wrapper.getCycle() == null || wrapper.getCycle().getGrowthHandler() == null) {
continue;
}
wrapper.getCycle().getGrowthHandler().handle();
}
return true;
case "disabledisease":
player.setAttribute("stop-disease", !player.getAttribute("stop-disease", false));
player.sendMessage("Disable disease=" + player.getAttribute("stop-disease", false));
return true;
case "rake":
for (PatchWrapper wrapper : player.getFarmingManager().getPatches()) {
wrapper.getCycle().clear(player);
}
return true;
case "full":
for (PatchWrapper wrapper : player.getFarmingManager().getPatches()) {
for (int i = 0; i < 20; i++) {
if (wrapper == null || wrapper.getPatch() == null || wrapper.getCycle() == null || wrapper.getCycle().getGrowthHandler() == null) {
continue;
}
wrapper.getCycle().getGrowthHandler().handle();
}
}
return true;
case "toreg"://these fucking kids are so goddam annoying
o = Repository.getPlayer(args[1]);
o.getIronmanManager().setMode(IronmanMode.NONE);
player.sendMessage("done...");
o.sendMessage("<col=FF0000>You are no longer an ironman. Log out to see the ironman icon disappear.</col>");
break;
case "clearpatches":
if (args.length > 1) {
o = Repository.getPlayer(args[1]);
}
if (o != null) {
for (PatchWrapper wrapper : o.getFarmingManager().getPatches()) {
wrapper.getCycle().clear(o);
}
o.sendMessage("Your patches have been cleared.");
player.sendMessage("You cleared " + o.getUsername() + "'s patches.");
return true;
}
for (PatchWrapper wrapper : player.getFarmingManager().getPatches()) {
wrapper.getCycle().clear(player);
}
return true;
}
return false;
}
}