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