QuestList packet rework.

Contributed by rocknowx.
This commit is contained in:
MobiusDev
2015-11-28 00:23:12 +00:00
parent 8d5e8e97c1
commit eb3f869b56
4 changed files with 93 additions and 13 deletions

View File

@@ -225,7 +225,7 @@ public class QuestLink implements IBypassHandler
if ((q.getId() >= 1) && (q.getId() < 20000)) if ((q.getId() >= 1) && (q.getId() < 20000))
{ {
// Too many ongoing quests. // Too many ongoing quests.
if (player.getAllActiveQuests().length > 40) if (player.getAllActiveQuests().size() > 40)
{ {
final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId()); final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
html.setFile(player.getHtmlPrefix(), "html/fullquest.html"); html.setFile(player.getHtmlPrefix(), "html/fullquest.html");

View File

@@ -1475,7 +1475,7 @@ public final class L2PcInstance extends L2Playable
/** /**
* @return a table containing all Quest in progress from the table _quests. * @return a table containing all Quest in progress from the table _quests.
*/ */
public Quest[] getAllActiveQuests() public List<Quest> getAllActiveQuests()
{ {
List<Quest> quests = new ArrayList<>(); List<Quest> quests = new ArrayList<>();
for (QuestState qs : _quests.values()) for (QuestState qs : _quests.values())
@@ -1491,8 +1491,26 @@ public final class L2PcInstance extends L2Playable
} }
quests.add(qs.getQuest()); quests.add(qs.getQuest());
} }
return quests;
}
return quests.toArray(new Quest[quests.size()]); public List<Quest> getAllCompletedQuests()
{
List<Quest> quests = new ArrayList<>();
for (QuestState qs : _quests.values())
{
if ((qs == null) || (qs.getQuest() == null) || (!qs.isCompleted()))
{
continue;
}
final int questId = qs.getQuest().getId();
if ((questId > 19999) || (questId < 1))
{
continue;
}
quests.add(qs.getQuest());
}
return quests;
} }
public void processQuestEvent(String questName, String event) public void processQuestEvent(String questName, String event)

View File

@@ -18,6 +18,8 @@
*/ */
package com.l2jserver.gameserver.network.serverpackets; package com.l2jserver.gameserver.network.serverpackets;
import java.util.List;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.model.quest.QuestState;
@@ -41,9 +43,9 @@ public class GmViewQuestInfo extends L2GameServerPacket
writeC(0x99); writeC(0x99);
writeS(_activeChar.getName()); writeS(_activeChar.getName());
Quest[] questList = _activeChar.getAllActiveQuests(); List<Quest> questList = _activeChar.getAllActiveQuests();
writeH(questList.length); // quest count writeH(questList.size()); // quest count
for (Quest q : questList) for (Quest q : questList)
{ {

View File

@@ -18,18 +18,21 @@
*/ */
package com.l2jserver.gameserver.network.serverpackets; package com.l2jserver.gameserver.network.serverpackets;
import java.util.List;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest; import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState; import com.l2jserver.gameserver.model.quest.QuestState;
public class QuestList extends L2GameServerPacket public class QuestList extends L2GameServerPacket
{ {
private Quest[] _quests; private List<Quest> _activeQuests;
private List<Quest> _completedQuests;
private L2PcInstance _activeChar; private L2PcInstance _activeChar;
private final static byte[] _info = new byte[128];
public QuestList() public QuestList()
{ {
} }
@Override @Override
@@ -38,7 +41,8 @@ public class QuestList extends L2GameServerPacket
if ((getClient() != null) && (getClient().getActiveChar() != null)) if ((getClient() != null) && (getClient().getActiveChar() != null))
{ {
_activeChar = getClient().getActiveChar(); _activeChar = getClient().getActiveChar();
_quests = _activeChar.getAllActiveQuests(); _activeQuests = _activeChar.getAllActiveQuests();
_completedQuests = _activeChar.getAllCompletedQuests();
} }
} }
@@ -79,10 +83,10 @@ public class QuestList extends L2GameServerPacket
*/ */
writeC(0x86); writeC(0x86);
if (_quests != null) if (_activeQuests != null)
{ {
writeH(_quests.length); writeH(_activeQuests.size());
for (Quest q : _quests) for (Quest q : _activeQuests)
{ {
writeD(q.getId()); writeD(q.getId());
QuestState qs = _activeChar.getQuestState(q.getName()); QuestState qs = _activeChar.getQuestState(q.getName());
@@ -108,6 +112,62 @@ public class QuestList extends L2GameServerPacket
// write empty size // write empty size
writeH(0x00); writeH(0x00);
} }
writeB(new byte[128]);
for (Quest q : _completedQuests)
{
// add completed quests
int questId = q.getId();
if (questId > 10000)
{
questId -= 10000;
}
int pos = questId / 8;
int add = questId - (pos * 8);
switch (add)
{
case 0:
{
add = 0x01;
break;
}
case 1:
{
add = 0x2;
break;
}
case 2:
{
add = 0x4;
break;
}
case 3:
{
add = 0x8;
break;
}
case 4:
{
add = 0x10;
break;
}
case 5:
{
add = 0x20;
break;
}
case 6:
{
add = 0x40;
break;
}
case 7:
{
add = 0x80;
break;
}
}
_info[pos] = (byte) (_info[pos] + add);
}
writeB(_info);
} }
} }