Got limsa opening working again

This commit is contained in:
Filip Maj 2022-01-26 01:15:02 -05:00
parent c38caffaf1
commit 93c90df797
7 changed files with 218 additions and 161 deletions

View file

@ -30,6 +30,9 @@ namespace Meteor.Map.Actors
{
public const ushort SEQ_NOT_STARTED = ushort.MaxValue;
public enum QuestFlag { None = 0, Map = 1, Plate = 2 }
public enum ENpcProperty { QuestFlag = 0, CanTalk = 1, CanPush = 2, CanEmote = 3, CanNotice = 4}
public class ENpcQuestInstance
{
public readonly uint actorClassId;
@ -72,7 +75,7 @@ namespace Meteor.Map.Actors
private QuestData data = new QuestData();
private Dictionary<uint, ENpcQuestInstance> ActiveENpcs = new Dictionary<uint, ENpcQuestInstance>();
public void AddENpc(uint classId, byte flagType = 0, bool isTalkEnabled = false, bool isEmoteEnabled = false, bool isPushEnabled = false, bool isSpawned = false)
public void AddENpc(uint classId, byte flagType = 0, bool isTalkEnabled = true, bool isEmoteEnabled = false, bool isPushEnabled = false, bool isSpawned = false)
{
if (ActiveENpcs.ContainsKey(classId))
return;
@ -90,10 +93,33 @@ namespace Meteor.Map.Actors
ActiveENpcs.Clear();
}
public void UpdateENpc(uint classId, int param, object value)
public void UpdateENpc(uint classId, ENpcProperty property, object value)
{
if (!ActiveENpcs.ContainsKey(classId))
return;
ENpcQuestInstance instance = ActiveENpcs[classId];
switch (property)
{
case ENpcProperty.QuestFlag:
if (value is double)
instance.questFlagType = (byte)(double)value;
else if (value is int)
instance.questFlagType = (byte)value;
break;
case ENpcProperty.CanTalk:
instance.isTalkEnabled = (bool)value;
break;
case ENpcProperty.CanPush:
instance.isPushEnabled = (bool)value;
break;
case ENpcProperty.CanEmote:
instance.isEmoteEnabled = (bool)value;
break;
}
Owner.playerSession.UpdateQuestNpcInInstance(instance, false);
}
public ENpcQuestInstance GetENpcInstance(uint classId)

View file

@ -55,6 +55,8 @@ namespace Meteor.Map.dataobjects
public void QueuePacket(SubPacket subPacket)
{
////if (subPacket.gameMessage.opcode != 1)
//subPacket.DebugPrintSubPacket();
subPacket.SetTargetId(id);
Server.GetWorldConnection().QueuePacket(subPacket);
}
@ -185,7 +187,7 @@ namespace Meteor.Map.dataobjects
{
if (!clearInstance)
{
QueuePacket(actor.GetSetEventStatusPackets());
QueuePacket(actor.GetSetEventStatusPackets(questInstance.isTalkEnabled, questInstance.isEmoteEnabled, questInstance.isPushEnabled));
QueuePacket(SetActorQuestGraphicPacket.BuildPacket(actor.actorId, questInstance.questFlagType));
}
else