Method getEventQuests returns List and addition of getAllQuestStates method.
This commit is contained in:
parent
58fe3bdd8f
commit
4f5e72d88d
@ -765,10 +765,10 @@ public class NpcInstance extends Creature
|
||||
}
|
||||
else
|
||||
{
|
||||
final Quest[] qlst = getTemplate().getEventQuests(Quest.QuestEventType.NPC_FIRST_TALK);
|
||||
if (qlst.length == 1)
|
||||
final List<Quest> questList = getTemplate().getEventQuests(Quest.QuestEventType.NPC_FIRST_TALK);
|
||||
if (questList.size() == 1)
|
||||
{
|
||||
qlst[0].notifyFirstTalk(this, player);
|
||||
questList.get(0).notifyFirstTalk(this, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1096,10 +1096,10 @@ public class NpcInstance extends Creature
|
||||
}
|
||||
else
|
||||
{
|
||||
final Quest[] qlst = getTemplate().getEventQuests(Quest.QuestEventType.NPC_FIRST_TALK);
|
||||
if (qlst.length == 1)
|
||||
final List<Quest> questList = getTemplate().getEventQuests(Quest.QuestEventType.NPC_FIRST_TALK);
|
||||
if (questList.size() == 1)
|
||||
{
|
||||
qlst[0].notifyFirstTalk(this, player);
|
||||
questList.get(0).notifyFirstTalk(this, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1878,28 +1878,28 @@ public class NpcInstance extends Creature
|
||||
final List<Quest> options = new ArrayList<>();
|
||||
|
||||
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.
|
||||
// By limiting them there, we are allowed to create custom quests at higher IDs without interfering
|
||||
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)
|
||||
{
|
||||
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,16 +1674,12 @@ public class PlayerInstance extends Playable
|
||||
List<QuestState> states = new ArrayList<>();
|
||||
|
||||
// Go through the QuestState of the PlayerInstance quests
|
||||
final Quest[] quests = NpcTable.getInstance().getTemplate(npcId).getEventQuests(Quest.QuestEventType.QUEST_TALK);
|
||||
if (quests != null)
|
||||
for (Quest quest : NpcTable.getInstance().getTemplate(npcId).getEventQuests(Quest.QuestEventType.QUEST_TALK))
|
||||
{
|
||||
for (Quest quest : quests)
|
||||
// Copy the current PlayerInstance QuestState in the QuestState table
|
||||
if ((quest != null) && (getQuestState(quest.getName()) != null))
|
||||
{
|
||||
// Copy the current PlayerInstance QuestState in the QuestState table
|
||||
if ((quest != null) && (getQuestState(quest.getName()) != null))
|
||||
{
|
||||
states.add(getQuestState(quest.getName()));
|
||||
}
|
||||
states.add(getQuestState(quest.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1691,6 +1687,11 @@ public class PlayerInstance extends Playable
|
||||
return states;
|
||||
}
|
||||
|
||||
public Collection<QuestState> getAllQuestStates()
|
||||
{
|
||||
return _quests.values();
|
||||
}
|
||||
|
||||
/**
|
||||
* Process quest event.
|
||||
* @param quest the quest
|
||||
|
@ -18,6 +18,7 @@ package org.l2jmobius.gameserver.model.actor.instance;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
@ -238,14 +239,14 @@ public class SepulcherNpcInstance extends NpcInstance
|
||||
}
|
||||
default:
|
||||
{
|
||||
if (getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START).length > 0)
|
||||
if (!getTemplate().getEventQuests(Quest.QuestEventType.QUEST_START).isEmpty())
|
||||
{
|
||||
player.setLastQuestNpcObject(getObjectId());
|
||||
}
|
||||
final Quest[] qlst = getTemplate().getEventQuests(Quest.QuestEventType.QUEST_TALK);
|
||||
if (qlst.length == 1)
|
||||
final List<Quest> questList = getTemplate().getEventQuests(Quest.QuestEventType.QUEST_TALK);
|
||||
if (questList.size() == 1)
|
||||
{
|
||||
qlst[0].notifyFirstTalk(this, player);
|
||||
questList.get(0).notifyFirstTalk(this, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -17,6 +17,7 @@
|
||||
package org.l2jmobius.gameserver.model.actor.templates;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -125,7 +126,7 @@ public class NpcTemplate extends CreatureTemplate
|
||||
private final Map<Integer, Skill> _skills = new HashMap<>();
|
||||
private final Map<Stats, Double> _vulnerabilities = new EnumMap<>(Stats.class);
|
||||
// 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>
|
||||
@ -301,24 +302,22 @@ public class NpcTemplate extends CreatureTemplate
|
||||
{
|
||||
if (_questEvents.get(eventType) == null)
|
||||
{
|
||||
_questEvents.put(eventType, new Quest[]
|
||||
{
|
||||
q
|
||||
});
|
||||
final List<Quest> quests = new ArrayList<>();
|
||||
quests.add(q);
|
||||
_questEvents.put(eventType, quests);
|
||||
}
|
||||
else
|
||||
{
|
||||
final Quest[] quests = _questEvents.get(eventType);
|
||||
final int len = quests.length;
|
||||
final List<Quest> quests = _questEvents.get(eventType);
|
||||
|
||||
// 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.
|
||||
// In all cases, check if this new registration is replacing an older copy of the SAME quest.
|
||||
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
|
||||
{
|
||||
@ -327,30 +326,27 @@ public class NpcTemplate extends CreatureTemplate
|
||||
}
|
||||
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.
|
||||
// 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;
|
||||
}
|
||||
tmp[i] = quests[i];
|
||||
}
|
||||
tmp[len] = q;
|
||||
_questEvents.put(eventType, tmp);
|
||||
quests.add(q);
|
||||
// _questEvents.put(eventType, quests);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Quest[] getEventQuests(Quest.QuestEventType eventType)
|
||||
public List<Quest> getEventQuests(Quest.QuestEventType eventType)
|
||||
{
|
||||
if (_questEvents.get(eventType) == null)
|
||||
{
|
||||
return new Quest[0];
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return _questEvents.get(eventType);
|
||||
}
|
||||
|
@ -16,37 +16,28 @@
|
||||
*/
|
||||
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.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
|
||||
public class QuestList extends GameServerPacket
|
||||
{
|
||||
private final List<Quest> _quests;
|
||||
private final PlayerInstance _activeChar;
|
||||
private final Collection<QuestState> _questStates;
|
||||
|
||||
public QuestList(PlayerInstance player)
|
||||
{
|
||||
_activeChar = player;
|
||||
_quests = player.getAllActiveQuests();
|
||||
_questStates = player.getAllQuestStates();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void writeImpl()
|
||||
{
|
||||
writeC(0x80);
|
||||
writeH(_quests.size());
|
||||
for (Quest q : _quests)
|
||||
writeH(_questStates.size());
|
||||
for (QuestState qs : _questStates)
|
||||
{
|
||||
writeD(q.getQuestId());
|
||||
final QuestState qs = _activeChar.getQuestState(q.getName());
|
||||
if (qs == null)
|
||||
{
|
||||
writeD(0);
|
||||
continue;
|
||||
}
|
||||
writeD(qs.getQuest().getQuestId());
|
||||
|
||||
final int states = qs.getInt("__compltdStateFlags");
|
||||
if (states != 0)
|
||||
|
Loading…
Reference in New Issue
Block a user