Skip to content
Snippets Groups Projects
Commit 2734f1fd authored by Rumen Nikiforov's avatar Rumen Nikiforov
Browse files

BETA: DP-Part for [L5293]

Also Added new command script_unload //id / script name
parent 717bf3df
No related branches found
No related tags found
No related merge requests found
......@@ -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" />
......
......@@ -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();
}
}
}
......
......@@ -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 ");
......
......@@ -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;
}
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment