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))
{
// Too many ongoing quests.
if (player.getAllActiveQuests().length > 40)
if (player.getAllActiveQuests().size() > 40)
{
final NpcHtmlMessage html = new NpcHtmlMessage(npc.getObjectId());
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.
*/
public Quest[] getAllActiveQuests()
public List<Quest> getAllActiveQuests()
{
List<Quest> quests = new ArrayList<>();
for (QuestState qs : _quests.values())
@ -1491,8 +1491,26 @@ public final class L2PcInstance extends L2Playable
}
quests.add(qs.getQuest());
}
return quests.toArray(new Quest[quests.size()]);
return quests;
}
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)

View File

@ -18,6 +18,8 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import java.util.List;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
@ -41,9 +43,9 @@ public class GmViewQuestInfo extends L2GameServerPacket
writeC(0x99);
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)
{

View File

@ -18,18 +18,21 @@
*/
package com.l2jserver.gameserver.network.serverpackets;
import java.util.List;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
public class QuestList extends L2GameServerPacket
{
private Quest[] _quests;
private List<Quest> _activeQuests;
private List<Quest> _completedQuests;
private L2PcInstance _activeChar;
private final static byte[] _info = new byte[128];
public QuestList()
{
}
@Override
@ -38,7 +41,8 @@ public class QuestList extends L2GameServerPacket
if ((getClient() != null) && (getClient().getActiveChar() != null))
{
_activeChar = getClient().getActiveChar();
_quests = _activeChar.getAllActiveQuests();
_activeQuests = _activeChar.getAllActiveQuests();
_completedQuests = _activeChar.getAllCompletedQuests();
}
}
@ -79,10 +83,10 @@ public class QuestList extends L2GameServerPacket
*/
writeC(0x86);
if (_quests != null)
if (_activeQuests != null)
{
writeH(_quests.length);
for (Quest q : _quests)
writeH(_activeQuests.size());
for (Quest q : _activeQuests)
{
writeD(q.getId());
QuestState qs = _activeChar.getQuestState(q.getName());
@ -108,6 +112,62 @@ public class QuestList extends L2GameServerPacket
// write empty size
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);
}
}