diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index 0a729f99..da468efa 100644 --- a/FFXIVClassic Map Server/WorldManager.cs +++ b/FFXIVClassic Map Server/WorldManager.cs @@ -243,7 +243,8 @@ namespace FFXIVClassic_Map_Server string query = @" SELECT - actorClassId, + actorClassId, + uniqueId, zoneId, privateAreaName, privateAreaLevel, @@ -264,10 +265,11 @@ namespace FFXIVClassic_Map_Server while (reader.Read()) { string customName = null; - if (!reader.IsDBNull(10)) + if (!reader.IsDBNull(11)) customName = reader.GetString("customDisplayName"); uint classId = reader.GetUInt32("actorClassId"); + string uniqueId = reader.GetString("uniqueId"); uint zoneId = reader.GetUInt32("zoneId"); string privAreaName = reader.GetString("privateAreaName"); uint privAreaLevel = reader.GetUInt32("privateAreaLevel"); @@ -287,7 +289,7 @@ namespace FFXIVClassic_Map_Server if (zone == null) continue; - SpawnLocation spawn = new SpawnLocation(classId, zoneId, privAreaName, privAreaLevel, x, y, z, rot, state, animId); + SpawnLocation spawn = new SpawnLocation(classId, uniqueId, zoneId, privAreaName, privAreaLevel, x, y, z, rot, state, animId); zone.addSpawnLocation(spawn); diff --git a/FFXIVClassic Map Server/actors/area/Area.cs b/FFXIVClassic Map Server/actors/area/Area.cs index fb33b770..191e81cb 100644 --- a/FFXIVClassic Map Server/actors/area/Area.cs +++ b/FFXIVClassic Map Server/actors/area/Area.cs @@ -346,7 +346,7 @@ namespace FFXIVClassic_Map_Server.Actors if (actorClass == null) return; - Npc npc = new Npc(mActorList.Count + 1, actorClass.actorClassId, actorId, location.x, location.y, location.z, location.rot, location.state, location.animId, actorClass.displayNameId, null, actorClass.classPath); + Npc npc = new Npc(mActorList.Count + 1, actorClass.actorClassId, location.uniqueId, actorId, location.x, location.y, location.z, location.rot, location.state, location.animId, actorClass.displayNameId, null, actorClass.classPath); npc.loadEventConditions(actorClass.eventConditions); addActorToZone(npc); diff --git a/FFXIVClassic Map Server/actors/area/SpawnLocation.cs b/FFXIVClassic Map Server/actors/area/SpawnLocation.cs index 9e1fe67b..87c36f76 100644 --- a/FFXIVClassic Map Server/actors/area/SpawnLocation.cs +++ b/FFXIVClassic Map Server/actors/area/SpawnLocation.cs @@ -9,6 +9,7 @@ namespace FFXIVClassic_Map_Server.actors.area class SpawnLocation { public uint classId; + public string uniqueId; public uint zoneId; public string privAreaName; public uint privAreaLevel; @@ -19,9 +20,10 @@ namespace FFXIVClassic_Map_Server.actors.area public ushort state; public uint animId; - public SpawnLocation(uint classId, uint zoneId, string privAreaName, uint privAreaLevel, float x, float y, float z, float rot, ushort state, uint animId) + public SpawnLocation(uint classId, string uniqueId, uint zoneId, string privAreaName, uint privAreaLevel, float x, float y, float z, float rot, ushort state, uint animId) { this.classId = classId; + this.uniqueId = uniqueId; this.zoneId = zoneId; this.privAreaName = privAreaName; this.privAreaLevel = privAreaLevel; diff --git a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs index 99785435..1f1266dc 100644 --- a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs +++ b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs @@ -22,12 +22,12 @@ namespace FFXIVClassic_Map_Server.Actors { class Npc : Character { - //private Script actorScript; private uint actorClassId; + private string uniqueIdentifier; public NpcWork npcWork = new NpcWork(); - public Npc(int actorNumber, uint classId, uint zoneId, float posX, float posY, float posZ, float rot, ushort actorState, uint animationId, uint displayNameId, string customDisplayName, string classPath) + public Npc(int actorNumber, uint classId, string uniqueId, uint zoneId, float posX, float posY, float posZ, float rot, ushort actorState, uint animationId, uint displayNameId, string customDisplayName, string classPath) : base((4 << 28 | zoneId << 19 | (uint)actorNumber)) { this.positionX = posX; @@ -39,6 +39,8 @@ namespace FFXIVClassic_Map_Server.Actors this.displayNameId = displayNameId; this.customDisplayName = customDisplayName; + this.uniqueIdentifier = uniqueId; + this.zoneId = zoneId; this.zone = Server.GetWorldManager().GetZone(zoneId); @@ -86,13 +88,23 @@ namespace FFXIVClassic_Map_Server.Actors List lParams; Player player = Server.GetWorldManager().GetPCInWorld(playerActorId); - lParams = DoActorInit(player); + lParams = DoActorInit(player); if (lParams == null) { classPath = "/Chara/Npc/Populace/PopulaceStandard"; className = "PopulaceStandard"; - lParams = LuaUtils.createLuaParamList(classPath, false, false, false, false, false, 0xF47F6, false, false, 0, 0); + lParams = LuaUtils.createLuaParamList(classPath, false, false, false, false, false, 0xF47F6, false, false, 0, 1, "TEST"); + } + else + { + lParams.Insert(0, new LuaParam(2, classPath)); + lParams.Insert(1, new LuaParam(4, 4)); + lParams.Insert(2, new LuaParam(4, 4)); + lParams.Insert(3, new LuaParam(4, 4)); + lParams.Insert(4, new LuaParam(4, 4)); + lParams.Insert(5, new LuaParam(4, 4)); + lParams.Insert(6, new LuaParam(0, (int)actorClassId)); } ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams).debugPrintSubPacket(); @@ -188,7 +200,7 @@ namespace FFXIVClassic_Map_Server.Actors hairStyle, hairHighlightColor, hairVariation, - faceType, + faceType, characteristics, characteristicsColor, faceEyebrows, @@ -287,8 +299,8 @@ namespace FFXIVClassic_Map_Server.Actors if (File.Exists("./scripts/base/" + classPath + ".lua")) parent = LuaEngine.loadScript("./scripts/base/" + classPath + ".lua"); - if (File.Exists(String.Format("./scripts/unique/{0}/{1}.{2}.lua", zone.zoneName, className, actorClassId))) - child = LuaEngine.loadScript(String.Format("./scripts/unique/{0}/{1}.{2}.lua", zone.zoneName, className, actorClassId)); + if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier))) + child = LuaEngine.loadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)); if (parent == null) { @@ -315,8 +327,8 @@ namespace FFXIVClassic_Map_Server.Actors if (File.Exists("./scripts/base/" + classPath + ".lua")) parent = LuaEngine.loadScript("./scripts/base/" + classPath + ".lua"); - if (File.Exists(String.Format("./scripts/unique/{0}/{1}.{2}.lua", zone.zoneName, className, actorClassId))) - child = LuaEngine.loadScript(String.Format("./scripts/unique/{0}/{1}.{2}.lua", zone.zoneName, className, actorClassId)); + if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier))) + child = LuaEngine.loadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)); if (parent == null) { @@ -351,8 +363,8 @@ namespace FFXIVClassic_Map_Server.Actors if (File.Exists("./scripts/base/" + classPath + ".lua")) parent = LuaEngine.loadScript("./scripts/base/" + classPath + ".lua"); - if (File.Exists(String.Format("./scripts/unique/{0}/{1}.{2}.lua", zone.zoneName, className, actorClassId))) - child = LuaEngine.loadScript(String.Format("./scripts/unique/{0}/{1}.{2}.lua", zone.zoneName, className, actorClassId)); + if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier))) + child = LuaEngine.loadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)); if (parent == null) { @@ -385,8 +397,8 @@ namespace FFXIVClassic_Map_Server.Actors if (File.Exists("./scripts/base/" + classPath + ".lua")) parent = LuaEngine.loadScript("./scripts/base/" + classPath + ".lua"); - if (File.Exists(String.Format("./scripts/unique/{0}/{1}.{2}.lua", zone.zoneName, className, actorClassId))) - child = LuaEngine.loadScript(String.Format("./scripts/unique/{0}/{1}.{2}.lua", zone.zoneName, className, actorClassId)); + if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier))) + child = LuaEngine.loadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)); if (parent == null) {