diff --git a/src/main/java/kamkeel/command/AnimationCommand.java b/src/main/java/kamkeel/command/AnimationCommand.java index 447c0f18f..439c157cd 100644 --- a/src/main/java/kamkeel/command/AnimationCommand.java +++ b/src/main/java/kamkeel/command/AnimationCommand.java @@ -4,6 +4,7 @@ import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.PlayerDataController; +import noppes.npcs.controllers.QuestController; import noppes.npcs.controllers.data.Animation; import noppes.npcs.controllers.data.PlayerData; @@ -49,42 +50,52 @@ public class AnimationCommand extends CommandKamkeelBase { data.get(0).save(); } - @SubCommand(desc = "enable animation") - public void on(ICommandSender sender, String[] args) throws CommandException { - data.get(0).animationData.setEnabled(true); - sendMessage(sender, String.format("Animations enabled for Player %s", data.get(0).player.getCommandSenderName())); - - } +// @SubCommand(desc = "enable animation") +// public void on(ICommandSender sender, String[] args) throws CommandException { +// data.get(0).animationData.setEnabled(true); +// sendMessage(sender, String.format("Animations enabled for Player %s", data.get(0).player.getCommandSenderName())); +// +// } +// +// @SubCommand( +// desc = "Set animation", +// usage = "" +// ) +// public void set(ICommandSender sender, String[] args) throws CommandException { +// if(args.length != 1){ +// throw new CommandException("Please include the animation name:" + " set "); +// } +// String animationName = args[0]; +// selectedAnimation = AnimationController.getInstance().getAnimationFromName(animationName); +// if (selectedAnimation == null) { +// throw new CommandException("Unknown animation: " + animationName); +// } +// +// data.get(0).animationData.setAnimation(selectedAnimation); +// sendMessage(sender, String.format("Animation %s set for Player %s", selectedAnimation.getName(), data.get(0).player.getCommandSenderName())); +// } +// +// @SubCommand(desc = "disable animation") +// public void off(ICommandSender sender, String[] args) throws CommandException { +// data.get(0).animationData.setEnabled(false); +// sendMessage(sender, String.format("Animations disabled for Player %s", data.get(0).player.getCommandSenderName())); +// } +// +// @SubCommand(desc = "play animation") +// public void clear(ICommandSender sender, String[] args) throws CommandException { +// data.get(0).animationData.setEnabled(false); +// data.get(0).animationData.setAnimation(null); +// sendMessage(sender, String.format("Animations cleared for Player %s", data.get(0).player.getCommandSenderName())); +// +// } @SubCommand( - desc = "Set animation", - usage = "" + desc="reload animations from disk", + permission = 4 ) - public void set(ICommandSender sender, String[] args) throws CommandException { - if(args.length != 1){ - throw new CommandException("Please include the animation name:" + " set "); - } - String animationName = args[0]; - selectedAnimation = AnimationController.getInstance().getAnimationFromName(animationName); - if (selectedAnimation == null) { - throw new CommandException("Unknown animation: " + animationName); - } - - data.get(0).animationData.setAnimation(selectedAnimation); - sendMessage(sender, String.format("Animation %s set for Player %s", selectedAnimation.getName(), data.get(0).player.getCommandSenderName())); - } - - @SubCommand(desc = "disable animation") - public void off(ICommandSender sender, String[] args) throws CommandException { - data.get(0).animationData.setEnabled(false); - sendMessage(sender, String.format("Animations disabled for Player %s", data.get(0).player.getCommandSenderName())); - } - - @SubCommand(desc = "play animation") - public void clear(ICommandSender sender, String[] args) throws CommandException { - data.get(0).animationData.setEnabled(false); - data.get(0).animationData.setAnimation(null); - sendMessage(sender, String.format("Animations cleared for Player %s", data.get(0).player.getCommandSenderName())); - + public void reload(ICommandSender sender, String args[]){ + new AnimationController(); + AnimationController.instance.load(); + sendResult(sender, "Animations Reloaded"); } } diff --git a/src/main/java/kamkeel/command/CommandKamkeel.java b/src/main/java/kamkeel/command/CommandKamkeel.java index f45f47171..9597fe049 100644 --- a/src/main/java/kamkeel/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/command/CommandKamkeel.java @@ -30,6 +30,7 @@ public class CommandKamkeel extends CommandBase{ registerCommand(new NpcCommand()); registerCommand(new CloneCommand()); registerCommand(new ConfigCommand()); + registerCommand(new AnimationCommand()); } public void registerCommand(CommandKamkeelBase command){ diff --git a/src/main/java/kamkeel/command/DialogCategoryCommand.java b/src/main/java/kamkeel/command/DialogCategoryCommand.java index 48d787119..df83ec7e7 100644 --- a/src/main/java/kamkeel/command/DialogCategoryCommand.java +++ b/src/main/java/kamkeel/command/DialogCategoryCommand.java @@ -66,7 +66,7 @@ public class DialogCategoryCommand extends CommandKamkeelBase { sendError(sender, String.format("Unknown player '%s'", playername)); return; } - + DialogCategory dialogCategory = DialogController.Instance.categories.get(dialogCatId); if (dialogCategory == null){ sendError(sender, "Unknown DialogCatID: " + dialogCatId); diff --git a/src/main/java/kamkeel/command/DialogCommand.java b/src/main/java/kamkeel/command/DialogCommand.java index 74115a32e..2fc845647 100644 --- a/src/main/java/kamkeel/command/DialogCommand.java +++ b/src/main/java/kamkeel/command/DialogCommand.java @@ -1,5 +1,6 @@ package kamkeel.command; +import java.util.Collection; import java.util.List; import net.minecraft.command.CommandBase; @@ -8,12 +9,14 @@ import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; import noppes.npcs.NoppesUtilServer; import noppes.npcs.client.EntityUtil; +import noppes.npcs.constants.EnumAvailabilityDialog; +import noppes.npcs.constants.EnumAvailabilityQuest; +import noppes.npcs.constants.EnumQuestCompletion; import noppes.npcs.controllers.DialogController; import noppes.npcs.controllers.PlayerDataController; -import noppes.npcs.controllers.data.Dialog; -import noppes.npcs.controllers.data.DialogOption; -import noppes.npcs.controllers.data.PlayerData; +import noppes.npcs.controllers.QuestController; +import noppes.npcs.controllers.data.*; import noppes.npcs.entity.EntityDialogNpc; public class DialogCommand extends CommandKamkeelBase { @@ -120,4 +123,131 @@ public class DialogCommand extends CommandKamkeelBase { NoppesUtilServer.openDialog(player, npc, dialog, 0); sendResult(sender, String.format("Displayed Dialog \u00A7e%d\u00A77 to Player '\u00A7b%s\u00A77'", diagid, player.getCommandSenderName())); } + + @SubCommand( + desc = "Find dialog id number by its name", + usage = "" + ) + public void id(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide a name for the dialog"); + return; + } + + String dialogName = String.join(" ", args).toLowerCase(); + final Collection quests = DialogController.instance.dialogs.values(); + int count = 0; + for(Dialog dialog : quests){ + if(dialog.getName().toLowerCase().contains(dialogName)){ + sendResult(sender, String.format("Dialog \u00A7e%d\u00A77 - \u00A7c'%s'", dialog.id, dialog.getName())); + count++; + } + } + if(count == 0){ + sendResult(sender, String.format("No Dialog found with name: \u00A7c'%s'", dialogName)); + } + } + + @SubCommand( + desc = "List a dialogs availability options", + usage = "" + ) + public void availability(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide an id for the dialog"); + return; + } + + int diagid; + try { + diagid = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + sendError(sender, "DialogID must be an integer: " + args[0]); + return; + } + Dialog dialog = DialogController.instance.dialogs.get(diagid); + if(dialog == null){ + sendError(sender, "Unknown dialog id: " + args[0]); + return; + } + + Availability avail = dialog.availability; + if(avail != null){ + sendResult(sender, String.format("Availability Options for Dialog: \u00A7c%d", dialog.id)); + sendResult(sender, "--------------------"); + boolean diagFound = false; + if(avail.dialogId != -1 && avail.dialogAvailable != EnumAvailabilityDialog.Always){ + sendResult(sender, String.format("%s Dialog: \u00A7c%d", avail.dialogAvailable.toString(), avail.dialogId)); + diagFound = true; + } + if(avail.dialog2Id != -1 && avail.dialog2Available != EnumAvailabilityDialog.Always){ + sendResult(sender, String.format("%s Dialog: \u00A7c%d", avail.dialog2Available.toString(), avail.dialog2Id)); + diagFound = true; + } + if(avail.dialog3Id != -1 && avail.dialog3Available != EnumAvailabilityDialog.Always){ + sendResult(sender, String.format("%s Dialog: \u00A7c%d", avail.dialog3Available.toString(), avail.dialog3Id)); + diagFound = true; + } + if(avail.dialog4Id != -1 && avail.dialog4Available != EnumAvailabilityDialog.Always){ + sendResult(sender, String.format("%s Dialog: \u00A7c%d", avail.dialog4Available.toString(), avail.dialog4Id)); + diagFound = true; + } + + if(!diagFound){ + sendResult(sender, "No Dialog Availability Options"); + } + sendResult(sender, "--------------------"); + + boolean questFound = false; + if(avail.questId != -1 && avail.questAvailable != EnumAvailabilityQuest.Always){ + sendResult(sender, String.format("%s Quest: \u00A7c%d", avail.questAvailable.toString(), avail.questId)); + questFound = true; + } + if(avail.quest2Id != -1 && avail.quest2Available != EnumAvailabilityQuest.Always){ + sendResult(sender, String.format("%s Quest: \u00A7c%d", avail.quest2Available.toString(), avail.quest2Id)); + questFound = true; + } + if(avail.quest3Id != -1 && avail.quest3Available != EnumAvailabilityQuest.Always){ + sendResult(sender, String.format("%s Quest: \u00A7c%d", avail.quest3Available.toString(), avail.quest3Id)); + questFound = true; + } + if(avail.quest4Id != -1 && avail.quest4Available != EnumAvailabilityQuest.Always){ + sendResult(sender, String.format("%s Quest: \u00A7c%d", avail.quest4Available.toString(), avail.quest4Id)); + questFound = true; + } + if(!questFound){ + sendResult(sender, "No Quest Availability Options"); + } + sendResult(sender, "--------------------"); + } + } + + @SubCommand( + desc = "Quick info on a dialog", + usage = "" + ) + public void info(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide an id for the quest"); + return; + } + + int diagid; + try { + diagid = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + sendError(sender, "DialogID must be an integer: " + args[0]); + return; + } + Dialog dialog = DialogController.instance.dialogs.get(diagid); + if(dialog == null){ + sendError(sender, "Unknown dialog id: " + args[0]); + return; + } + + sendResult(sender, "--------------------"); + sendResult(sender, String.format("\u00A7e%d\u00A77: \u00A7a%s", dialog.id, dialog.title)); + sendResult(sender, String.format("Category: \u00A7b%s", dialog.category.getName())); + sendResult(sender, "--------------------"); + } } diff --git a/src/main/java/kamkeel/command/QuestCategoryCommand.java b/src/main/java/kamkeel/command/QuestCategoryCommand.java index cd655a17f..392c4bedb 100644 --- a/src/main/java/kamkeel/command/QuestCategoryCommand.java +++ b/src/main/java/kamkeel/command/QuestCategoryCommand.java @@ -11,8 +11,8 @@ import noppes.npcs.controllers.QuestController; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.data.Quest; import noppes.npcs.controllers.data.QuestCategory; - import java.util.Collection; +import noppes.npcs.controllers.data.QuestData; import java.util.List; public class QuestCategoryCommand extends CommandKamkeelBase { @@ -53,10 +53,10 @@ public class QuestCategoryCommand extends CommandKamkeelBase { @SubCommand( - desc = "Complete a quest category for a player", + desc = "Finish a quest category for a player", usage = " " ) - public void complete(ICommandSender sender, String args[]) throws CommandException{ + public void finish(ICommandSender sender, String args[]) throws CommandException{ String playername=args[0]; int questcatid; try { @@ -104,12 +104,102 @@ public class QuestCategoryCommand extends CommandKamkeelBase { } } - @SubCommand( - desc = "Clear a quest category from a player", + desc = "Stop a quest category for a players active quests", usage = " " ) - public void clear(ICommandSender sender, String args[]) throws CommandException{ + public void stop(ICommandSender sender, String args[]) throws CommandException{ + String playername=args[0]; + int questcatid; + try { + questcatid = Integer.parseInt(args[1]); + } + catch (NumberFormatException ex) { + sendError(sender, "QuestCatID must be an integer: " + args[1]); + return; + } + + List data = PlayerDataController.Instance.getPlayersData(sender, playername); + if (data.isEmpty()) { + sendError(sender, String.format("Unknown player '%s'", playername)); + return; + } + + QuestCategory questCategory = QuestController.Instance.categories.get(questcatid); + if (questCategory == null){ + sendError(sender, "Unknown QuestCatID: " + questcatid); + return; + } + + int count = 0; + for(PlayerData playerdata : data){ + for(Quest quest : questCategory.quests.values()){ + if(playerdata.questData.activeQuests.containsKey(quest.id)){ + playerdata.questData.activeQuests.remove(quest.id); + count++; + } + } + + playerdata.save(); + sendResult(sender, String.format("Stopped Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questCategory.getName(), questcatid, playerdata.playername)); + sendResult(sender, String.format("Stopped a total of \u00A7b%d \u00A77quests", count)); + } + } + + @SubCommand( + desc = "Start a quest category for a player", + usage = " " + ) + public void start(ICommandSender sender, String args[]) throws CommandException{ + String playername=args[0]; + int questcatid; + try { + questcatid = Integer.parseInt(args[1]); + } + catch (NumberFormatException ex) { + sendError(sender, "QuestCatID must be an integer: " + args[1]); + return; + } + + List data = PlayerDataController.Instance.getPlayersData(sender, playername); + if (data.isEmpty()) { + sendError(sender, String.format("Unknown player '%s'", playername)); + return; + } + + QuestCategory questCategory = QuestController.Instance.categories.get(questcatid); + if (questCategory == null){ + sendError(sender, "Unknown QuestCatID: " + questcatid); + return; + } + + int count = 0; + for(PlayerData playerdata : data){ + for(Quest quest : questCategory.quests.values()){ + if(!playerdata.questData.activeQuests.containsKey(quest.id)){ + QuestData questData = new QuestData(quest); + playerdata.questData.activeQuests.put(quest.id, questData); + count++; + + if(playerdata.player != null && questData.sendAlerts){ + Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.newquest", quest.title); + Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.newquest", ": ", quest.title); + } + } + } + + playerdata.save(); + sendResult(sender, String.format("Started Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questCategory.getName(), questcatid, playerdata.playername)); + sendResult(sender, String.format("Started a total of \u00A7b%d \u00A77quests", count)); + } + } + + + @SubCommand( + desc = "Remove a quest cat from active/finished", + usage = " " + ) + public void remove(ICommandSender sender, String args[]) throws CommandException{ String playername=args[0]; int questcatid; try { diff --git a/src/main/java/kamkeel/command/QuestCommand.java b/src/main/java/kamkeel/command/QuestCommand.java index 86e97ba14..c14550c90 100644 --- a/src/main/java/kamkeel/command/QuestCommand.java +++ b/src/main/java/kamkeel/command/QuestCommand.java @@ -1,5 +1,6 @@ package kamkeel.command; +import java.util.Collection; import java.util.List; import net.minecraft.command.CommandException; @@ -7,11 +8,13 @@ import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; import noppes.npcs.Server; import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.EnumQuestCompletion; import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.data.Quest; +import noppes.npcs.controllers.data.QuestCategory; import noppes.npcs.controllers.data.QuestData; public class QuestCommand extends CommandKamkeelBase { @@ -173,6 +176,109 @@ public class QuestCommand extends CommandKamkeelBase { sendResult(sender, String.format("Removed Quest \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questid, playerdata.playername)); } } + + @SubCommand( + desc = "Find quest id number by its name", + usage = "" + ) + public void id(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide a name for the quest"); + return; + } + + String catName = String.join(" ", args).toLowerCase(); + final Collection quests = QuestController.instance.quests.values(); + int count = 0; + for(Quest quest : quests){ + if(quest.getName().toLowerCase().contains(catName)){ + sendResult(sender, String.format("Quest \u00A7e%d\u00A77 - \u00A7c'%s'", quest.id, quest.getName())); + count++; + } + } + if(count == 0){ + sendResult(sender, String.format("No Quest found with name: \u00A7c'%s'", catName)); + } + } + + @SubCommand( + desc = "Find prerequisite quests for an id", + usage = "" + ) + public void prereq(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide an id for the quest"); + return; + } + + int questid; + try { + questid = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + sendError(sender, "QuestID must be an integer: " + args[1]); + return; + } + + Quest quest = QuestController.instance.quests.get(questid); + if (quest == null){ + sendError(sender, "Unknown QuestID"); + return; + } + final Collection quests = QuestController.instance.quests.values(); + sendResult(sender, "Prerequisites:"); + sendResult(sender, "--------------------"); + boolean foundOne = false; + for(Quest allQuest : quests){ + if(allQuest.nextQuestid == questid){ + foundOne = true; + sendResult(sender, String.format("Quest %d: \u00A7a'%s'", allQuest.id, allQuest.title)); + } + } + + if(!foundOne){ + sendResult(sender, String.format("No Prerequisites found for Quest \u00A7c%d", questid)); + } + sendResult(sender, "--------------------"); + } + + @SubCommand( + desc = "Quick info on a quest", + usage = "" + ) + public void info(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide an id for the quest"); + return; + } + + int questid; + try { + questid = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + sendError(sender, "QuestID must be an integer: " + args[1]); + return; + } + + Quest quest = QuestController.instance.quests.get(questid); + if (quest == null){ + sendError(sender, "Unknown QuestID"); + return; + } + + sendResult(sender, "--------------------"); + sendResult(sender, String.format("\u00A7e%d\u00A77: \u00A7a%s", quest.id, quest.title)); + sendResult(sender, String.format("Category: \u00A7b%s", quest.category.getName())); + sendResult(sender, String.format("Type: \u00A76%s", quest.type.toString())); + sendResult(sender, String.format("Repeatable: \u00A76%s", quest.repeat.toString())); + sendResult(sender, String.format("Complete: \u00A76%s", quest.completion.toString())); + if(quest.completion == EnumQuestCompletion.Npc){ + sendResult(sender, String.format("NPC: \u00A76%s", quest.completerNpc)); + } + if(quest.nextQuestid != -1){ + sendResult(sender, String.format("Next Quest ID: \u00A7c%d", quest.nextQuestid)); + } + sendResult(sender, "--------------------"); + } @SubCommand( desc="reload quests from disk", diff --git a/src/main/java/noppes/npcs/LogWriter.java b/src/main/java/noppes/npcs/LogWriter.java index 183a8a14e..6286f2c1f 100644 --- a/src/main/java/noppes/npcs/LogWriter.java +++ b/src/main/java/noppes/npcs/LogWriter.java @@ -76,7 +76,7 @@ public class LogWriter { logger.setUseParentHandlers(false); Handler consoleHandler = new ConsoleHandler(); consoleHandler.setFormatter(handler.getFormatter()); - consoleHandler.setLevel(Level.ALL); + consoleHandler.setLevel(Level.FINEST); logger.addHandler(consoleHandler); logger.setLevel(Level.ALL); info(new Date().toString()); diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManagePlayerData.java b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManagePlayerData.java index e4a4b69b6..8b3fafe37 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManagePlayerData.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManagePlayerData.java @@ -36,24 +36,24 @@ public class GuiNpcManagePlayerData extends GuiNPCInterface2 implements IScrollD { super.initGui(); scroll = new GuiCustomScroll(this,0); - scroll.setSize(190, 175); + scroll.setSize(303, 175); scroll.guiLeft = guiLeft + 4; scroll.guiTop = guiTop + 16; addScroll(scroll); addLabel(new GuiNpcLabel(0,"All Players", guiLeft + 10, guiTop + 6)); - this.addButton(new GuiNpcButton(0, guiLeft + 200, guiTop + 10,98, 20, "selectWorld.deleteButton")); - this.addButton(new GuiNpcButton(1, guiLeft + 200, guiTop + 32,98, 20, "Players")); - this.addButton(new GuiNpcButton(2, guiLeft + 200, guiTop + 54,98, 20, "Quest Data")); - this.addButton(new GuiNpcButton(3, guiLeft + 200, guiTop + 76,98, 20, "Dialog Data")); - this.addButton(new GuiNpcButton(4, guiLeft + 200, guiTop + 98,98, 20, "Transport Data")); - this.addButton(new GuiNpcButton(5, guiLeft + 200, guiTop + 120,98, 20, "Bank Data")); - this.addButton(new GuiNpcButton(6, guiLeft + 200, guiTop + 142,98, 20, "Faction Data")); + this.addButton(new GuiNpcButton(0, guiLeft + 313, guiTop + 10,98, 20, "selectWorld.deleteButton")); + this.addButton(new GuiNpcButton(1, guiLeft + 313, guiTop + 32,98, 20, "Players")); + this.addButton(new GuiNpcButton(2, guiLeft + 313, guiTop + 54,98, 20, "Quest Data")); + this.addButton(new GuiNpcButton(3, guiLeft + 313, guiTop + 76,98, 20, "Dialog Data")); + this.addButton(new GuiNpcButton(4, guiLeft + 313, guiTop + 98,98, 20, "Transport Data")); + this.addButton(new GuiNpcButton(5, guiLeft + 313, guiTop + 120,98, 20, "Bank Data")); + this.addButton(new GuiNpcButton(6, guiLeft + 313, guiTop + 142,98, 20, "Faction Data")); - this.addButton(new GuiNpcButton(7, guiLeft + 200, guiTop + 193,98, 20, "Regen PlayerMap")); + this.addButton(new GuiNpcButton(7, guiLeft + 313, guiTop + 193,98, 20, "Regen PlayerMap")); - addTextField(new GuiNpcTextField(0, this, fontRendererObj, guiLeft + 4, guiTop + 193, 190, 20, search)); + addTextField(new GuiNpcTextField(0, this, fontRendererObj, guiLeft + 4, guiTop + 193, 303, 20, search)); getTextField(0).enabled = selection == EnumPlayerData.Players; initButtons();