diff --git a/L2J_DataPack_BETA/dist/game/data/adminCommands.xml b/L2J_DataPack_BETA/dist/game/data/adminCommands.xml index 64e328674599e10d31463871b9e932ea715cbf88..d1be0ba3d87a8d710543f5a4df22ebab4848f03b 100644 --- a/L2J_DataPack_BETA/dist/game/data/adminCommands.xml +++ b/L2J_DataPack_BETA/dist/game/data/adminCommands.xml @@ -467,6 +467,7 @@ <!-- ADMIN QUEST --> <admin command="admin_quest_reload" accessLevel="7" /> <admin command="admin_script_load" accessLevel="7" /> + <admin command="admin_script_unload" accessLevel="7" /> <!-- ADMIN REPAIR CHAR --> <admin command="admin_restore" accessLevel="7" /> diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/actionhandlers/L2NpcAction.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/actionhandlers/L2NpcAction.java index c05711004d39df9086c9fc2bd2859a112c4ad3c5..d731d76b0288fe09d4e967a8d72a2ba93338db0b 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/actionhandlers/L2NpcAction.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/actionhandlers/L2NpcAction.java @@ -14,6 +14,8 @@ */ package handlers.actionhandlers; +import java.util.List; + import com.l2jserver.Config; import com.l2jserver.gameserver.ai.CtrlIntention; import com.l2jserver.gameserver.handler.IActionHandler; @@ -24,6 +26,7 @@ import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.entity.L2Event; import com.l2jserver.gameserver.model.quest.Quest; +import com.l2jserver.gameserver.model.quest.Quest.QuestEventType; import com.l2jserver.gameserver.network.serverpackets.ActionFailed; import com.l2jserver.gameserver.network.serverpackets.MyTargetSelected; import com.l2jserver.gameserver.network.serverpackets.StatusUpdate; @@ -123,29 +126,37 @@ public class L2NpcAction implements IActionHandler } else { - if (((L2Npc)target).hasRandomAnimation()) - ((L2Npc)target).onRandomAnimation(Rnd.get(8)); + L2Npc npc = (L2Npc) target; + if (npc.hasRandomAnimation()) + npc.onRandomAnimation(Rnd.get(8)); // Open a chat window on client with the text of the L2Npc - if (((L2Npc)target).isEventMob) + if (npc.isEventMob) { L2Event.showEventHtml(activeChar, String.valueOf(target.getObjectId())); } else { - Quest[] qlsa = ((L2Npc)target).getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START); - if ((qlsa != null) && qlsa.length > 0) + List<Quest> qlsa = npc.getTemplate().getEventQuests(QuestEventType.QUEST_START); + List<Quest> qlst = npc.getTemplate().getEventQuests(QuestEventType.ON_FIRST_TALK); + + if ((qlsa != null) && !qlsa.isEmpty()) + { activeChar.setLastQuestNpcObject(target.getObjectId()); - Quest[] qlst = ((L2Npc)target).getTemplate().getEventQuests(Quest.QuestEventType.ON_FIRST_TALK); - if ((qlst != null) && qlst.length == 1) - qlst[0].notifyFirstTalk((L2Npc)target, activeChar); + } + + if ((qlst != null) && qlst.size() == 1) + { + qlst.get(0).notifyFirstTalk(npc, activeChar); + } else - ((L2Npc)target).showChatWindow(activeChar); + { + npc.showChatWindow(activeChar); + } } - if(Config.PLAYER_MOVEMENT_BLOCK_TIME > 0 - && !activeChar.isGM()) - activeChar.updateNotMoveUntil(); - + + if (Config.PLAYER_MOVEMENT_BLOCK_TIME > 0 && !activeChar.isGM()) + activeChar.updateNotMoveUntil(); } } } diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEditNpc.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEditNpc.java index f8ed3e420c05c3c61ee9c2130dfd007508bfb465..3b2ad245684493c090c06b0e1dddcdb5d6da4584 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEditNpc.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminEditNpc.java @@ -14,13 +14,13 @@ */ package handlers.admincommandhandlers; -import gnu.trove.iterator.TIntObjectIterator; -import gnu.trove.map.hash.TIntObjectHashMap; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; @@ -1392,10 +1392,7 @@ public class AdminEditNpc implements IAdminCommandHandler return; } - TIntObjectHashMap<L2Skill> skills = new TIntObjectHashMap<L2Skill>(); - if (npcData.getSkills() != null) - skills = npcData.getSkills(); - + Map<Integer, L2Skill> skills = new HashMap<>(npcData.getSkills()); int _skillsize = skills.size(); int MaxSkillsPerPage = PAGE_LIMIT; @@ -1440,39 +1437,40 @@ public class AdminEditNpc implements IAdminCommandHandler } } replyMSG.append("</tr></table><table width=\"100%\" border=0><tr><td>Skill name [skill id-skill lvl]</td><td>Delete</td></tr>"); - TIntObjectIterator<L2Skill> skillite = skills.iterator(); + Iterator<L2Skill> skillite = skills.values().iterator(); for (int i = 0; i < SkillsStart; i++) { if (skillite.hasNext()) - skillite.advance(); + skillite.next(); } int cnt = SkillsStart; + L2Skill sk; while (skillite.hasNext()) { cnt++; if (cnt > SkillsEnd) break; - skillite.advance(); + sk = skillite.next(); replyMSG.append("<tr><td width=240><a action=\"bypass -h admin_edit_skill_npc "); replyMSG.append(npcData.getNpcId()); replyMSG.append(" "); - replyMSG.append(skillite.value().getId()); + replyMSG.append(sk.getId()); replyMSG.append("\">"); - if (skillite.value().getSkillType() == L2SkillType.NOTDONE) - replyMSG.append("<font color=\"777777\">" + skillite.value().getName() + "</font>"); + if (sk.getSkillType() == L2SkillType.NOTDONE) + replyMSG.append("<font color=\"777777\">" + sk.getName() + "</font>"); else - replyMSG.append(skillite.value().getName()); + replyMSG.append(sk.getName()); replyMSG.append(" ["); - replyMSG.append(skillite.value().getId()); + replyMSG.append(sk.getId()); replyMSG.append("-"); - replyMSG.append(skillite.value().getLevel()); + replyMSG.append(sk.getLevel()); replyMSG.append("]</a></td><td width=60><a action=\"bypass -h admin_del_skill_npc "); replyMSG.append(npcData.getNpcId()); replyMSG.append(" "); - replyMSG.append(skillite.key()); + replyMSG.append(sk.getId()); replyMSG.append("\">Delete</a></td></tr>"); } replyMSG.append("</table><br><center><button value=\"Add Skill\" action=\"bypass -h admin_add_skill_npc "); diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 85e6e674d21c4730bc075fe6deb0848d1d27b23b..32fe9e614b3b16701fb61eb6b1b27d45e0848dc7 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -21,14 +21,17 @@ import javax.script.ScriptException; import com.l2jserver.gameserver.handler.IAdminCommandHandler; import com.l2jserver.gameserver.instancemanager.QuestManager; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.scripting.L2ScriptEngineManager; +import com.l2jserver.gameserver.util.Util; public class AdminQuest implements IAdminCommandHandler { private static final String[] ADMIN_COMMANDS = { "admin_quest_reload", - "admin_script_load" + "admin_script_load", + "admin_script_unload", }; @Override @@ -124,6 +127,34 @@ public class AdminQuest implements IAdminCommandHandler } } + else if (command.startsWith("admin_script_unload")) + { + String[] parts = command.split(" "); + if (parts.length < 2) + { + activeChar.sendMessage("Example: //script_unload questName/questId"); + } + else + { + Quest q = Util.isDigit(parts[1]) ? QuestManager.getInstance().getQuest(Integer.parseInt(parts[1])) : QuestManager.getInstance().getQuest(parts[1]); + + if (q != null) + { + if (q.unload()) + { + activeChar.sendMessage("Script Successfully Unloaded [" + q.getName() + "/" + q.getQuestIntId() + "]"); + } + else + { + activeChar.sendMessage("Failed unloading [" + q.getName() + "/" + q.getQuestIntId() + "]."); + } + } + else + { + activeChar.sendMessage("The quest [" + parts[1] + "] was not found!."); + } + } + } return true; } diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/QuestLink.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/QuestLink.java index ecdc7c3bf9433aeb27224db32b093f638b34bf86..9c0dd5a3d9531067dd72413ff011e7db85127a38 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/QuestLink.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/bypasshandlers/QuestLink.java @@ -26,6 +26,7 @@ import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.quest.Quest; +import com.l2jserver.gameserver.model.quest.Quest.QuestEventType; import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.model.quest.State; import com.l2jserver.gameserver.network.SystemMessageId; @@ -170,9 +171,9 @@ public class QuestLink implements IBypassHandler } } // check for start point - Quest[] qlst = npc.getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START); + List<Quest> qlst = npc.getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START); - if ((qlst != null) && (qlst.length > 0)) + if ((qlst != null) && !qlst.isEmpty()) { for (Quest temp : qlst) { @@ -237,7 +238,7 @@ public class QuestLink implements IBypassHandler List<Quest> options = new FastList<Quest>(); QuestState[] awaits = player.getQuestsForTalk(npc.getTemplate().getNpcId()); - Quest[] starts = npc.getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START); + List<Quest> starts = npc.getTemplate().getEventQuests(QuestEventType.QUEST_START); // Quests are limited between 1 and 999 because those are the quests that are supported by the client. // By limiting them there, we are allowed to create custom quests at higher IDs without interfering