mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-02 19:42:05 -04:00
-Fixed up the quest flag functions.
-Renamed the ActorSpecialGraphicPacket to SetActorQuestGraphic as those icons all have to do with questing. -Got onSpawn to work and implemented the quest graphics. -Added new QuestDirector class.
This commit is contained in:
parent
1f5788def8
commit
c0cd7555e1
@ -35,7 +35,14 @@ namespace FFXIVClassic_Map_Server.actors.area
|
|||||||
public override SubPacket createScriptBindPacket(uint playerActorId)
|
public override SubPacket createScriptBindPacket(uint playerActorId)
|
||||||
{
|
{
|
||||||
List<LuaParam> lParams;
|
List<LuaParam> lParams;
|
||||||
lParams = LuaUtils.createLuaParamList("/Area/PrivateArea/" + className, false, true, zoneName, privateAreaName, 0x9E, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false);
|
|
||||||
|
string path = className;
|
||||||
|
|
||||||
|
if (className.ToLower().Contains("content"))
|
||||||
|
path = "Content/" + className;
|
||||||
|
|
||||||
|
lParams = LuaUtils.createLuaParamList("/Area/PrivateArea/" + path, false, true, zoneName, privateAreaName, 0x9E, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false);
|
||||||
|
ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams).debugPrintSubPacket();
|
||||||
return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams);
|
return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,11 +81,9 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
return SetActorIdleAnimationPacket.buildPacket(actorId, playerActorId, animationId);
|
return SetActorIdleAnimationPacket.buildPacket(actorId, playerActorId, animationId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setQuestIcon(Player player, bool hasIcon)
|
public void setQuestGraphic(Player player, int graphicNum)
|
||||||
{
|
{
|
||||||
ActorSpecialGraphicPacket.buildPacket(player.actorId, actorId, hasIcon ? ActorSpecialGraphicPacket.QUEST : 0x0).debugPrintSubPacket();
|
player.queuePacket(SetActorQuestGraphicPacket.buildPacket(player.actorId, actorId, graphicNum));
|
||||||
//player.queuePacket(ActorSpecialGraphicPacket.buildPacket(player.actorId, actorId, hasIcon ? ActorSpecialGraphicPacket.QUEST : 0x0));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
public Quest[] questScenario = new Quest[16];
|
public Quest[] questScenario = new Quest[16];
|
||||||
public Quest[] questGuildleve = new Quest[8];
|
public Quest[] questGuildleve = new Quest[8];
|
||||||
|
|
||||||
public Director currentDirector;// = new OpeningDirector(0x46080012);
|
public Director currentDirector = new OpeningDirector(0x46080012);
|
||||||
|
|
||||||
public PlayerWork playerWork = new PlayerWork();
|
public PlayerWork playerWork = new PlayerWork();
|
||||||
|
|
||||||
@ -590,6 +590,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
playerSession.queuePacket(packet, true, false);
|
playerSession.queuePacket(packet, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void queuePackets(List<SubPacket> packets)
|
||||||
|
{
|
||||||
|
foreach (SubPacket subpacket in packets)
|
||||||
|
playerSession.queuePacket(subpacket, true, false);
|
||||||
|
}
|
||||||
|
|
||||||
public void broadcastPacket(SubPacket packet, bool sendToSelf)
|
public void broadcastPacket(SubPacket packet, bool sendToSelf)
|
||||||
{
|
{
|
||||||
if (sendToSelf)
|
if (sendToSelf)
|
||||||
@ -969,7 +975,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < questScenario.Length; i++)
|
for (int i = 0; i < questScenario.Length; i++)
|
||||||
{
|
{
|
||||||
if (questScenario[i] != null && questScenario[i].actorName.Equals(name))
|
if (questScenario[i] != null && questScenario[i].actorName.ToLower().Equals(name.ToLower()))
|
||||||
return questScenario[i];
|
return questScenario[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -993,6 +999,10 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
{
|
{
|
||||||
currentDirector = new OpeningDirector(0x46080012);
|
currentDirector = new OpeningDirector(0x46080012);
|
||||||
}
|
}
|
||||||
|
else if (directorType.Equals("QuestDirectorMan0l001"))
|
||||||
|
{
|
||||||
|
currentDirector = new QuestDirectorMan0l001(0x46080012);
|
||||||
|
}
|
||||||
|
|
||||||
queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012));
|
queuePacket(RemoveActorPacket.buildPacket(actorId, 0x46080012));
|
||||||
queuePacket(currentDirector.getSpawnPackets(actorId));
|
queuePacket(currentDirector.getSpawnPackets(actorId));
|
||||||
@ -1077,12 +1087,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
{
|
{
|
||||||
|
|
||||||
//Update Instance
|
//Update Instance
|
||||||
List<BasePacket> instanceUpdatePackets = playerSession.updateInstance(zone.getActorsAroundActor(this, 50));
|
playerSession.updateInstance(zone.getActorsAroundActor(this, 50));
|
||||||
foreach (BasePacket bp in instanceUpdatePackets)
|
|
||||||
{
|
|
||||||
// bp.debugPrintPacket();
|
|
||||||
queuePacket(bp);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
using FFXIVClassic_Lobby_Server.packets;
|
||||||
|
using FFXIVClassic_Map_Server.lua;
|
||||||
|
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FFXIVClassic_Map_Server.actors.director
|
||||||
|
{
|
||||||
|
class QuestDirectorMan0l001 : Director
|
||||||
|
{
|
||||||
|
public QuestDirectorMan0l001(uint id) : base(id)
|
||||||
|
{
|
||||||
|
this.displayNameId = 0;
|
||||||
|
this.customDisplayName = "questDirect_ocn0Btl02_01";
|
||||||
|
|
||||||
|
this.actorName = "questDirect_ocn0Btl02_01@0C196";
|
||||||
|
this.className = "QuestDirectorMan0l001";
|
||||||
|
|
||||||
|
this.eventConditions = new EventList();
|
||||||
|
|
||||||
|
List<EventList.NoticeEventCondition> noticeEventList = new List<EventList.NoticeEventCondition>();
|
||||||
|
|
||||||
|
noticeEventList.Add(new EventList.NoticeEventCondition("noticeEvent", 0xE, 0x0));
|
||||||
|
noticeEventList.Add(new EventList.NoticeEventCondition("noticeRequest", 0x0, 0x1));
|
||||||
|
|
||||||
|
this.eventConditions.noticeEventConditions = noticeEventList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override SubPacket createScriptBindPacket(uint playerActorId)
|
||||||
|
{
|
||||||
|
List<LuaParam> lParams;
|
||||||
|
lParams = LuaUtils.createLuaParamList("/Director/Quest/QuestDirectorMan0l001", false, false, false, false, 0x7532);
|
||||||
|
return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -68,7 +68,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return (questFlags & (1 << bitIndex)) == 1;
|
return (questFlags & (1 << bitIndex)) == (1 << bitIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GetPhase()
|
public int GetPhase()
|
||||||
|
@ -113,7 +113,7 @@ namespace FFXIVClassic_Map_Server.dataobjects
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<BasePacket> updateInstance(List<Actor> list)
|
public void updateInstance(List<Actor> list)
|
||||||
{
|
{
|
||||||
List<BasePacket> basePackets = new List<BasePacket>();
|
List<BasePacket> basePackets = new List<BasePacket>();
|
||||||
List<SubPacket> removeActorSubpackets = new List<SubPacket>();
|
List<SubPacket> removeActorSubpackets = new List<SubPacket>();
|
||||||
@ -124,14 +124,11 @@ namespace FFXIVClassic_Map_Server.dataobjects
|
|||||||
{
|
{
|
||||||
if (!list.Contains(actorInstanceList[i]))
|
if (!list.Contains(actorInstanceList[i]))
|
||||||
{
|
{
|
||||||
removeActorSubpackets.Add(RemoveActorPacket.buildPacket(playerActor.actorId, actorInstanceList[i].actorId));
|
getActor().queuePacket(RemoveActorPacket.buildPacket(playerActor.actorId, actorInstanceList[i].actorId));
|
||||||
actorInstanceList.RemoveAt(i);
|
actorInstanceList.RemoveAt(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (removeActorSubpackets.Count != 0)
|
|
||||||
basePackets.Add(BasePacket.createPacket(removeActorSubpackets, true, false));
|
|
||||||
|
|
||||||
//Add new actors or move
|
//Add new actors or move
|
||||||
for (int i = 0; i < list.Count; i++)
|
for (int i = 0; i < list.Count; i++)
|
||||||
{
|
{
|
||||||
@ -142,21 +139,22 @@ namespace FFXIVClassic_Map_Server.dataobjects
|
|||||||
|
|
||||||
if (actorInstanceList.Contains(actor))
|
if (actorInstanceList.Contains(actor))
|
||||||
{
|
{
|
||||||
posUpdateSubpackets.Add(actor.createPositionUpdatePacket(playerActor.actorId));
|
getActor().queuePacket(actor.createPositionUpdatePacket(playerActor.actorId));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
basePackets.Add(actor.getSpawnPackets(playerActor.actorId, 1));
|
getActor().queuePacket(actor.getSpawnPackets(playerActor.actorId, 1));
|
||||||
basePackets.Add(actor.getInitPackets(playerActor.actorId));
|
getActor().queuePacket(actor.getInitPackets(playerActor.actorId));
|
||||||
basePackets.Add(actor.getSetEventStatusPackets(playerActor.actorId));
|
getActor().queuePacket(actor.getSetEventStatusPackets(playerActor.actorId));
|
||||||
actorInstanceList.Add(actor);
|
actorInstanceList.Add(actor);
|
||||||
|
|
||||||
|
if (actor is Npc)
|
||||||
|
{
|
||||||
|
LuaEngine.doActorOnSpawn(getActor(), (Npc)actor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (posUpdateSubpackets.Count > 0)
|
|
||||||
basePackets.Add(BasePacket.createPacket(posUpdateSubpackets, true, false));
|
|
||||||
|
|
||||||
return basePackets;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using FFXIVClassic_Lobby_Server;
|
using FFXIVClassic_Lobby_Server;
|
||||||
|
using FFXIVClassic_Lobby_Server.common;
|
||||||
using FFXIVClassic_Lobby_Server.packets;
|
using FFXIVClassic_Lobby_Server.packets;
|
||||||
using FFXIVClassic_Map_Server.actors.director;
|
using FFXIVClassic_Map_Server.actors.director;
|
||||||
using FFXIVClassic_Map_Server.Actors;
|
using FFXIVClassic_Map_Server.Actors;
|
||||||
@ -42,16 +43,16 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
{
|
{
|
||||||
Script script = loadScript(luaPath);
|
Script script = loadScript(luaPath);
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
DynValue result = script.Call(script.Globals["init"], target);
|
DynValue result = script.Call(script.Globals["init"], target);
|
||||||
List<LuaParam> lparams = LuaUtils.createLuaParamList(result);
|
List<LuaParam> lparams = LuaUtils.createLuaParamList(result);
|
||||||
return lparams;
|
return lparams;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<SubPacket> sendError = new List<SubPacket>();
|
SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName()));
|
||||||
sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter));
|
|
||||||
player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName()));
|
|
||||||
player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false));
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,6 +79,9 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
{
|
{
|
||||||
Script script = loadScript(luaPath);
|
Script script = loadScript(luaPath);
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return;
|
||||||
|
|
||||||
//Have to do this to combine LuaParams
|
//Have to do this to combine LuaParams
|
||||||
List<Object> objects = new List<Object>();
|
List<Object> objects = new List<Object>();
|
||||||
objects.Add(player);
|
objects.Add(player);
|
||||||
@ -93,10 +97,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<SubPacket> sendError = new List<SubPacket>();
|
SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName()));
|
||||||
sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter));
|
|
||||||
player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName()));
|
|
||||||
player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -109,16 +110,16 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
{
|
{
|
||||||
Script script = loadScript(luaPath);
|
Script script = loadScript(luaPath);
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return;
|
||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onSpawn").IsNil())
|
if (!script.Globals.Get("onSpawn").IsNil())
|
||||||
script.Call(script.Globals["onSpawn"], player, target);
|
script.Call(script.Globals["onSpawn"], player, target);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<SubPacket> sendError = new List<SubPacket>();
|
SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName()));
|
||||||
sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter));
|
|
||||||
player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName()));
|
|
||||||
player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -138,11 +139,14 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
{
|
{
|
||||||
Script script = loadScript(luaPath);
|
Script script = loadScript(luaPath);
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return;
|
||||||
|
|
||||||
//Have to do this to combine LuaParams
|
//Have to do this to combine LuaParams
|
||||||
List<Object> objects = new List<Object>();
|
List<Object> objects = new List<Object>();
|
||||||
objects.Add(player);
|
objects.Add(player);
|
||||||
objects.Add(target);
|
objects.Add(target);
|
||||||
objects.Add(eventUpdate.step);
|
objects.Add(eventUpdate.val2);
|
||||||
objects.AddRange(LuaUtils.createLuaParamObjectList(eventUpdate.luaParams));
|
objects.AddRange(LuaUtils.createLuaParamObjectList(eventUpdate.luaParams));
|
||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
@ -151,10 +155,7 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<SubPacket> sendError = new List<SubPacket>();
|
SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.getName()));
|
||||||
sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter));
|
|
||||||
player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", String.Format("ERROR: Could not find script for actor {0}.", target.getName()));
|
|
||||||
player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,6 +167,9 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
{
|
{
|
||||||
Script script = loadScript(luaPath);
|
Script script = loadScript(luaPath);
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return;
|
||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onZoneIn").IsNil())
|
if (!script.Globals.Get("onZoneIn").IsNil())
|
||||||
script.Call(script.Globals["onZoneIn"], player);
|
script.Call(script.Globals["onZoneIn"], player);
|
||||||
@ -178,6 +182,9 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
{
|
{
|
||||||
Script script = loadScript(FILEPATH_PLAYER);
|
Script script = loadScript(FILEPATH_PLAYER);
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return;
|
||||||
|
|
||||||
//Run Script
|
//Run Script
|
||||||
if (!script.Globals.Get("onZoneIn").IsNil())
|
if (!script.Globals.Get("onZoneIn").IsNil())
|
||||||
script.Call(script.Globals["onZoneIn"], player);
|
script.Call(script.Globals["onZoneIn"], player);
|
||||||
@ -192,9 +199,26 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
script.Globals["getStaticActor"] = (Func<string, Actor>)Server.getStaticActors;
|
script.Globals["getStaticActor"] = (Func<string, Actor>)Server.getStaticActors;
|
||||||
script.Globals["getWorldMaster"] = (Func<Actor>)Server.GetWorldManager().GetActor;
|
script.Globals["getWorldMaster"] = (Func<Actor>)Server.GetWorldManager().GetActor;
|
||||||
script.Globals["getItemGamedata"] = (Func<uint, Item>)Server.getItemGamedata;
|
script.Globals["getItemGamedata"] = (Func<uint, Item>)Server.getItemGamedata;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
script.DoFile(filename);
|
script.DoFile(filename);
|
||||||
|
}
|
||||||
|
catch(SyntaxErrorException e)
|
||||||
|
{
|
||||||
|
Log.error(String.Format("LUAERROR: {0}.", e.DecoratedMessage));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void SendError(Player player, string message)
|
||||||
|
{
|
||||||
|
List<SubPacket> sendError = new List<SubPacket>();
|
||||||
|
sendError.Add(EndEventPacket.buildPacket(player.actorId, player.eventCurrentOwner, player.eventCurrentStarter));
|
||||||
|
player.sendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", message);
|
||||||
|
player.playerSession.queuePacket(BasePacket.createPacket(sendError, true, false));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace FFXIVClassic_Map_Server.packets.send.actor
|
namespace FFXIVClassic_Map_Server.packets.send.actor
|
||||||
{
|
{
|
||||||
class ActorSpecialGraphicPacket
|
class SetActorQuestGraphicPacket
|
||||||
{
|
{
|
||||||
public const int NONE = 0x0;
|
public const int NONE = 0x0;
|
||||||
public const int QUEST = 0x2;
|
public const int QUEST = 0x2;
|
||||||
|
Loading…
Reference in New Issue
Block a user