QuestList packet rework.
Contributed by rocknowx.
This commit is contained in:
@@ -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");
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user