Method getEventQuests returns List and addition of getAllQuestStates method.
This commit is contained in:
@@ -765,10 +765,10 @@ public class NpcInstance extends Creature
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final Quest[] qlst = getTemplate().getEventQuests(Quest.QuestEventType.NPC_FIRST_TALK);
|
final List<Quest> questList = getTemplate().getEventQuests(Quest.QuestEventType.NPC_FIRST_TALK);
|
||||||
if (qlst.length == 1)
|
if (questList.size() == 1)
|
||||||
{
|
{
|
||||||
qlst[0].notifyFirstTalk(this, player);
|
questList.get(0).notifyFirstTalk(this, player);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1096,10 +1096,10 @@ public class NpcInstance extends Creature
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final Quest[] qlst = getTemplate().getEventQuests(Quest.QuestEventType.NPC_FIRST_TALK);
|
final List<Quest> questList = getTemplate().getEventQuests(Quest.QuestEventType.NPC_FIRST_TALK);
|
||||||
if (qlst.length == 1)
|
if (questList.size() == 1)
|
||||||
{
|
{
|
||||||
qlst[0].notifyFirstTalk(this, player);
|
questList.get(0).notifyFirstTalk(this, player);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1878,28 +1878,28 @@ public class NpcInstance extends Creature
|
|||||||
final List<Quest> options = new ArrayList<>();
|
final List<Quest> options = new ArrayList<>();
|
||||||
|
|
||||||
final List<QuestState> awaits = player.getQuestsForTalk(getTemplate().npcId);
|
final List<QuestState> awaits = player.getQuestsForTalk(getTemplate().npcId);
|
||||||
final Quest[] starts = getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START);
|
final List<Quest> starts = getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START);
|
||||||
|
|
||||||
// Quests are limited between 1 and 999 because those are the quests that are supported by the client.
|
// 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
|
// By limiting them there, we are allowed to create custom quests at higher IDs without interfering
|
||||||
if (awaits != null)
|
if (awaits != null)
|
||||||
{
|
{
|
||||||
for (QuestState x : awaits)
|
for (QuestState qs : awaits)
|
||||||
{
|
{
|
||||||
if (!options.contains(x.getQuest()) && (x.getQuest().getQuestId() > 0) && (x.getQuest().getQuestId() < 1000))
|
if (!options.contains(qs.getQuest()) && (qs.getQuest().getQuestId() > 0) && (qs.getQuest().getQuestId() < 1000))
|
||||||
{
|
{
|
||||||
options.add(x.getQuest());
|
options.add(qs.getQuest());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (starts != null)
|
if (starts != null)
|
||||||
{
|
{
|
||||||
for (Quest x : starts)
|
for (Quest quest : starts)
|
||||||
{
|
{
|
||||||
if (!options.contains(x) && (x.getQuestId() > 0) && (x.getQuestId() < 1000))
|
if (!options.contains(quest) && (quest.getQuestId() > 0) && (quest.getQuestId() < 1000))
|
||||||
{
|
{
|
||||||
options.add(x);
|
options.add(quest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1674,10 +1674,7 @@ public class PlayerInstance extends Playable
|
|||||||
List<QuestState> states = new ArrayList<>();
|
List<QuestState> states = new ArrayList<>();
|
||||||
|
|
||||||
// Go through the QuestState of the PlayerInstance quests
|
// Go through the QuestState of the PlayerInstance quests
|
||||||
final Quest[] quests = NpcTable.getInstance().getTemplate(npcId).getEventQuests(Quest.QuestEventType.QUEST_TALK);
|
for (Quest quest : NpcTable.getInstance().getTemplate(npcId).getEventQuests(Quest.QuestEventType.QUEST_TALK))
|
||||||
if (quests != null)
|
|
||||||
{
|
|
||||||
for (Quest quest : quests)
|
|
||||||
{
|
{
|
||||||
// Copy the current PlayerInstance QuestState in the QuestState table
|
// Copy the current PlayerInstance QuestState in the QuestState table
|
||||||
if ((quest != null) && (getQuestState(quest.getName()) != null))
|
if ((quest != null) && (getQuestState(quest.getName()) != null))
|
||||||
@@ -1685,12 +1682,16 @@ public class PlayerInstance extends Playable
|
|||||||
states.add(getQuestState(quest.getName()));
|
states.add(getQuestState(quest.getName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Return a list containing all QuestState to modify
|
// Return a list containing all QuestState to modify
|
||||||
return states;
|
return states;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Collection<QuestState> getAllQuestStates()
|
||||||
|
{
|
||||||
|
return _quests.values();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process quest event.
|
* Process quest event.
|
||||||
* @param quest the quest
|
* @param quest the quest
|
||||||
|
@@ -18,6 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
@@ -238,14 +239,14 @@ public class SepulcherNpcInstance extends NpcInstance
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
if (getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START).length > 0)
|
if (!getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START).isEmpty())
|
||||||
{
|
{
|
||||||
player.setLastQuestNpcObject(getObjectId());
|
player.setLastQuestNpcObject(getObjectId());
|
||||||
}
|
}
|
||||||
final Quest[] qlst = getTemplate().getEventQuests(Quest.QuestEventType.QUEST_TALK);
|
final List<Quest> questList = getTemplate().getEventQuests(Quest.QuestEventType.QUEST_TALK);
|
||||||
if (qlst.length == 1)
|
if (questList.size() == 1)
|
||||||
{
|
{
|
||||||
qlst[0].notifyFirstTalk(this, player);
|
questList.get(0).notifyFirstTalk(this, player);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
package org.l2jmobius.gameserver.model.actor.templates;
|
package org.l2jmobius.gameserver.model.actor.templates;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -125,7 +126,7 @@ public class NpcTemplate extends CreatureTemplate
|
|||||||
private final Map<Integer, Skill> _skills = new HashMap<>();
|
private final Map<Integer, Skill> _skills = new HashMap<>();
|
||||||
private final Map<Stats, Double> _vulnerabilities = new EnumMap<>(Stats.class);
|
private final Map<Stats, Double> _vulnerabilities = new EnumMap<>(Stats.class);
|
||||||
// contains a list of quests for each event type (questStart, questAttack, questKill, etc)
|
// contains a list of quests for each event type (questStart, questAttack, questKill, etc)
|
||||||
private final Map<QuestEventType, Quest[]> _questEvents = new EnumMap<>(QuestEventType.class);
|
private final Map<QuestEventType, List<Quest>> _questEvents = new EnumMap<>(QuestEventType.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor of Creature.<BR>
|
* Constructor of Creature.<BR>
|
||||||
@@ -301,24 +302,22 @@ public class NpcTemplate extends CreatureTemplate
|
|||||||
{
|
{
|
||||||
if (_questEvents.get(eventType) == null)
|
if (_questEvents.get(eventType) == null)
|
||||||
{
|
{
|
||||||
_questEvents.put(eventType, new Quest[]
|
final List<Quest> quests = new ArrayList<>();
|
||||||
{
|
quests.add(q);
|
||||||
q
|
_questEvents.put(eventType, quests);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final Quest[] quests = _questEvents.get(eventType);
|
final List<Quest> quests = _questEvents.get(eventType);
|
||||||
final int len = quests.length;
|
|
||||||
|
|
||||||
// If only one registration per npc is allowed for this event type then only register this NPC if not already registered for the specified event.
|
// If only one registration per npc is allowed for this event type then only register this NPC if not already registered for the specified event.
|
||||||
// If a quest allows multiple registrations, then register regardless of count.
|
// If a quest allows multiple registrations, then register regardless of count.
|
||||||
// In all cases, check if this new registration is replacing an older copy of the SAME quest.
|
// In all cases, check if this new registration is replacing an older copy of the SAME quest.
|
||||||
if (!eventType.isMultipleRegistrationAllowed())
|
if (!eventType.isMultipleRegistrationAllowed())
|
||||||
{
|
{
|
||||||
if (quests[0].getName().equals(q.getName()))
|
if (quests.get(0).getName().equals(q.getName()))
|
||||||
{
|
{
|
||||||
quests[0] = q;
|
quests.add(0, q);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -327,30 +326,27 @@ public class NpcTemplate extends CreatureTemplate
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Be ready to add a new quest to a new copy of the list, with larger size than previously.
|
|
||||||
final Quest[] tmp = new Quest[len + 1];
|
|
||||||
// Loop through the existing quests and copy them to the new list. While doing so, also check if this new quest happens to be just a replacement for a previously loaded quest.
|
// Loop through the existing quests and copy them to the new list. While doing so, also check if this new quest happens to be just a replacement for a previously loaded quest.
|
||||||
// If so, just save the updated reference and do NOT use the new list. Else, add the new quest to the end of the new list.
|
// If so, just save the updated reference and do NOT use the new list. Else, add the new quest to the end of the new list.
|
||||||
for (int i = 0; i < len; i++)
|
for (Quest quest : quests)
|
||||||
{
|
{
|
||||||
if (quests[i].getName().equals(q.getName()))
|
if (quest.getName().equals(q.getName()))
|
||||||
{
|
{
|
||||||
quests[i] = q;
|
quest = q;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tmp[i] = quests[i];
|
|
||||||
}
|
}
|
||||||
tmp[len] = q;
|
quests.add(q);
|
||||||
_questEvents.put(eventType, tmp);
|
// _questEvents.put(eventType, quests);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Quest[] getEventQuests(Quest.QuestEventType eventType)
|
public List<Quest> getEventQuests(Quest.QuestEventType eventType)
|
||||||
{
|
{
|
||||||
if (_questEvents.get(eventType) == null)
|
if (_questEvents.get(eventType) == null)
|
||||||
{
|
{
|
||||||
return new Quest[0];
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return _questEvents.get(eventType);
|
return _questEvents.get(eventType);
|
||||||
}
|
}
|
||||||
|
@@ -16,37 +16,28 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.network.serverpackets;
|
package org.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
|
||||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||||
|
|
||||||
public class QuestList extends GameServerPacket
|
public class QuestList extends GameServerPacket
|
||||||
{
|
{
|
||||||
private final List<Quest> _quests;
|
private final Collection<QuestState> _questStates;
|
||||||
private final PlayerInstance _activeChar;
|
|
||||||
|
|
||||||
public QuestList(PlayerInstance player)
|
public QuestList(PlayerInstance player)
|
||||||
{
|
{
|
||||||
_activeChar = player;
|
_questStates = player.getAllQuestStates();
|
||||||
_quests = player.getAllActiveQuests();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected final void writeImpl()
|
protected final void writeImpl()
|
||||||
{
|
{
|
||||||
writeC(0x80);
|
writeC(0x80);
|
||||||
writeH(_quests.size());
|
writeH(_questStates.size());
|
||||||
for (Quest q : _quests)
|
for (QuestState qs : _questStates)
|
||||||
{
|
{
|
||||||
writeD(q.getQuestId());
|
writeD(qs.getQuest().getQuestId());
|
||||||
final QuestState qs = _activeChar.getQuestState(q.getName());
|
|
||||||
if (qs == null)
|
|
||||||
{
|
|
||||||
writeD(0);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int states = qs.getInt("__compltdStateFlags");
|
final int states = qs.getInt("__compltdStateFlags");
|
||||||
if (states != 0)
|
if (states != 0)
|
||||||
|
Reference in New Issue
Block a user