mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-02 19:42:05 -04:00
NPCs now spawn and load template from the db.
This commit is contained in:
parent
02b90edd3f
commit
ea6b1e33c7
@ -7,14 +7,13 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FFXIVClassic_Lobby_Server.common;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara.npc;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara;
|
||||
using FFXIVClassic_Map_Server.utils;
|
||||
using FFXIVClassic_Lobby_Server.packets;
|
||||
using FFXIVClassic_Map_Server.packets.send.player;
|
||||
using FFXIVClassic_Lobby_Server.dataobjects;
|
||||
using FFXIVClassic_Map_Server;
|
||||
using FFXIVClassic_Map_Server.common.EfficientHashTables;
|
||||
using FFXIVClassic_Map_Server.Actors;
|
||||
|
||||
namespace FFXIVClassic_Lobby_Server
|
||||
{
|
||||
@ -458,6 +457,7 @@ namespace FFXIVClassic_Lobby_Server
|
||||
conn.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static SubPacket getLatestAchievements(Player player)
|
||||
|
@ -30,12 +30,7 @@ using FFXIVClassic_Map_Server.packets.send.list;
|
||||
using FFXIVClassic_Map_Server.packets.receive.events;
|
||||
using FFXIVClassic_Map_Server.packets.send.events;
|
||||
using FFXIVClassic_Map_Server.lua;
|
||||
using FFXIVClassic_Map_Server.dataobjects.actors;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara.npc;
|
||||
using FFXIVClassic_Map_Server.actors;
|
||||
using System.Net;
|
||||
using FFXIVClassic_Map_Server.actors.debug;
|
||||
using FFXIVClassic_Map_Server.actors.world;
|
||||
using FFXIVClassic_Map_Server.common.EfficientHashTables;
|
||||
|
||||
namespace FFXIVClassic_Lobby_Server
|
||||
@ -200,8 +195,10 @@ namespace FFXIVClassic_Lobby_Server
|
||||
//Update Instance
|
||||
List<BasePacket> instanceUpdatePackets = player.updateInstance(player.getActor().zone.getActorsAroundActor(player.getActor(), 50));
|
||||
foreach (BasePacket bp in instanceUpdatePackets)
|
||||
{
|
||||
// bp.debugPrintPacket();
|
||||
client.queuePacket(bp);
|
||||
|
||||
}
|
||||
break;
|
||||
//Set Target
|
||||
case 0x00CD:
|
||||
|
@ -127,10 +127,6 @@ namespace FFXIVClassic_Lobby_Server
|
||||
{
|
||||
server.testCodePacket(Utils.MurmurHash2(split[1], 0), Convert.ToUInt32(split[2], 16), split[3]);
|
||||
}
|
||||
else if (split[0].Equals("test"))
|
||||
{
|
||||
server.testCodePacket2(split[1], split[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,9 +12,9 @@ using FFXIVClassic_Lobby_Server.packets;
|
||||
using System.IO;
|
||||
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||
using FFXIVClassic_Map_Server;
|
||||
using FFXIVClassic_Map_Server.actors;
|
||||
using FFXIVClassic_Map_Server.packets.send;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara;
|
||||
using FFXIVClassic_Map_Server.Actors;
|
||||
|
||||
namespace FFXIVClassic_Lobby_Server
|
||||
{
|
||||
@ -40,6 +40,7 @@ namespace FFXIVClassic_Lobby_Server
|
||||
mWorldManager = new WorldManager(this);
|
||||
mWorldManager.LoadZoneList();
|
||||
mWorldManager.LoadZoneEntranceList();
|
||||
mWorldManager.LoadNPCs();
|
||||
|
||||
IPEndPoint serverEndPoint = new System.Net.IPEndPoint(IPAddress.Parse(ConfigConstants.OPTIONS_BINDIP), FFXIV_MAP_PORT);
|
||||
|
||||
@ -253,22 +254,6 @@ namespace FFXIVClassic_Lobby_Server
|
||||
}
|
||||
}
|
||||
|
||||
public void testCodePacket2(string name, string target)
|
||||
{
|
||||
foreach (KeyValuePair<uint, ConnectedPlayer> entry in mConnectedPlayerList)
|
||||
{
|
||||
SetActorPropetyPacket changeProperty = new SetActorPropetyPacket(target);
|
||||
changeProperty.addProperty(entry.Value.getActor(), name);
|
||||
changeProperty.addProperty(entry.Value.getActor(), "charaWork.parameterSave.hpMax[0]");
|
||||
changeProperty.setTarget(target);
|
||||
|
||||
SubPacket changePropertyPacket = changeProperty.buildPacket((entry.Value.actorID), (entry.Value.actorID));
|
||||
BasePacket packet = BasePacket.createPacket(changePropertyPacket, true, false);
|
||||
packet.debugPrintPacket();
|
||||
entry.Value.queuePacket(packet);
|
||||
}
|
||||
}
|
||||
|
||||
public void doMusic(string music)
|
||||
{
|
||||
ushort musicId;
|
||||
|
@ -1,8 +1,6 @@
|
||||
using FFXIVClassic_Lobby_Server;
|
||||
using FFXIVClassic_Lobby_Server.common;
|
||||
using FFXIVClassic_Map_Server.actors;
|
||||
using FFXIVClassic_Map_Server.actors.debug;
|
||||
using FFXIVClassic_Map_Server.actors.world;
|
||||
using FFXIVClassic_Map_Server.Actors;
|
||||
using FFXIVClassic_Map_Server.common.EfficientHashTables;
|
||||
using FFXIVClassic_Map_Server.dataobjects;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara;
|
||||
@ -124,6 +122,61 @@ namespace FFXIVClassic_Map_Server
|
||||
Log.info(String.Format("Loaded {0} zone spawn locations.", count));
|
||||
}
|
||||
|
||||
public void LoadNPCs()
|
||||
{
|
||||
int count = 0;
|
||||
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
|
||||
{
|
||||
try
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
string query = @"
|
||||
SELECT
|
||||
id,
|
||||
name,
|
||||
zoneId,
|
||||
actorTemplateId,
|
||||
positionX,
|
||||
positionY,
|
||||
positionZ,
|
||||
rotation,
|
||||
actorState,
|
||||
animationId,
|
||||
actorClassName
|
||||
FROM server_npclist
|
||||
";
|
||||
|
||||
MySqlCommand cmd = new MySqlCommand(query, conn);
|
||||
|
||||
using (MySqlDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
Npc npc = new Npc(reader.GetUInt32(0), reader.GetString(1), reader.GetUInt32(2), reader.GetUInt32(3), reader.GetFloat(4), reader.GetFloat(5), reader.GetFloat(6), reader.GetFloat(7), reader.GetUInt16(8), reader.GetUInt32(9), reader.GetString(10));
|
||||
|
||||
Zone zone = zoneList[npc.zoneId];
|
||||
if (zone == null)
|
||||
continue;
|
||||
npc.zone = zone;
|
||||
zone.addActorToZone(npc);
|
||||
count++;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (MySqlException e)
|
||||
{ Console.WriteLine(e); }
|
||||
finally
|
||||
{
|
||||
conn.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Log.info(String.Format("Loaded {0} npc(s).", count));
|
||||
}
|
||||
|
||||
//Moves the actor to the new zone if exists. No packets are sent nor position changed.
|
||||
public void DoSeamlessZoneChange(Player player, uint destinationZoneId)
|
||||
{
|
||||
@ -235,6 +288,8 @@ namespace FFXIVClassic_Map_Server
|
||||
|
||||
public Zone GetZone(uint zoneId)
|
||||
{
|
||||
if (!zoneList.ContainsKey(zoneId))
|
||||
return null;
|
||||
return zoneList[zoneId];
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class Actor
|
||||
{
|
||||
@ -121,6 +121,9 @@ namespace FFXIVClassic_Map_Server.dataobjects
|
||||
public virtual BasePacket getInitPackets(uint playerActorId)
|
||||
{
|
||||
SetActorPropetyPacket initProperties = new SetActorPropetyPacket("/_init");
|
||||
initProperties.addByte(0xE14B0CA8, 1);
|
||||
initProperties.addByte(0x2138FD71, 1);
|
||||
initProperties.addByte(0xFBFBCFB1, 1);
|
||||
initProperties.addTarget();
|
||||
return BasePacket.createPacket(initProperties.buildPacket(playerActorId, actorId), true, false);
|
||||
}
|
||||
|
@ -1,13 +1,11 @@
|
||||
using FFXIVClassic_Map_Server.actors.judge;
|
||||
using FFXIVClassic_Map_Server.dataobjects;
|
||||
using FFXIVClassic_Map_Server.dataobjects.actors;
|
||||
using FFXIVClassic_Map_Server.dataobjects;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.actors
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class StaticActors
|
||||
{
|
||||
|
@ -10,7 +10,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class Zone : Actor
|
||||
{
|
||||
@ -21,7 +21,7 @@ namespace FFXIVClassic_Map_Server
|
||||
public ushort bgmDay, bgmNight, bgmBattle;
|
||||
|
||||
public int boundingGridSize = 50;
|
||||
public int minX = -100, minY = -100, maxX = 100, maxY = 100;
|
||||
public int minX = -1000, minY = -1000, maxX = 1000, maxY = 1000;
|
||||
private int numXBlocks, numYBlocks;
|
||||
private int halfWidth, halfHeight;
|
||||
|
||||
@ -182,6 +182,8 @@ namespace FFXIVClassic_Map_Server
|
||||
|
||||
public List<Actor> getActorsAroundPoint(float x, float y, int checkDistance)
|
||||
{
|
||||
checkDistance /= boundingGridSize;
|
||||
|
||||
int gridX = (int)x/boundingGridSize;
|
||||
int gridY = (int)y/boundingGridSize;
|
||||
|
||||
@ -213,13 +215,23 @@ namespace FFXIVClassic_Map_Server
|
||||
|
||||
public List<Actor> getActorsAroundActor(Actor actor, int checkDistance)
|
||||
{
|
||||
checkDistance /= boundingGridSize;
|
||||
|
||||
int gridX = (int)actor.positionX / boundingGridSize;
|
||||
int gridY = (int)actor.positionZ / boundingGridSize;
|
||||
|
||||
gridX += halfWidth;
|
||||
gridY += halfHeight;
|
||||
|
||||
|
||||
//Boundries
|
||||
if (gridX < 0)
|
||||
gridX = 0;
|
||||
if (gridX >= numXBlocks)
|
||||
gridX = numXBlocks - 1;
|
||||
if (gridY < 0)
|
||||
gridY = 0;
|
||||
if (gridY >= numYBlocks)
|
||||
gridY = numYBlocks - 1;
|
||||
|
||||
List<Actor> result = new List<Actor>();
|
||||
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class AetheryteWork
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class BattleSave
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class BattleTemp
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class CharaWork
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
using FFXIVClassic_Lobby_Server.packets;
|
||||
using FFXIVClassic_Map_Server.actors.chara;
|
||||
using FFXIVClassic_Map_Server.Actors.Chara;
|
||||
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -7,7 +7,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class Character:Actor
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class EventSave
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class EventTemp
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class ParameterSave
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class ParameterTemp
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.actors.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class Work
|
||||
{
|
||||
|
@ -3,43 +3,56 @@ using FFXIVClassic_Lobby_Server.common;
|
||||
using FFXIVClassic_Lobby_Server.packets;
|
||||
using FFXIVClassic_Map_Server.lua;
|
||||
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||
using FFXIVClassic_Map_Server.utils;
|
||||
using MySql.Data.MySqlClient;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara.npc
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class Npc : Character
|
||||
{
|
||||
public Npc(uint id, string actorName, uint displayNameId, string customDisplayName, float positionX, float positionY, float positionZ, float rotation, uint animationId, string className, byte[] initParams)
|
||||
public Npc(uint id, string actorName, uint zoneId, uint actorTemplateId, float posX, float posY, float posZ, float rot, ushort actorState, uint animationId, string className)
|
||||
: base(id)
|
||||
{
|
||||
this.actorName = actorName;
|
||||
this.displayNameId = displayNameId;
|
||||
this.customDisplayName = customDisplayName;
|
||||
this.positionX = positionX;
|
||||
this.positionY = positionY;
|
||||
this.positionZ = positionZ;
|
||||
this.rotation = rotation;
|
||||
this.positionX = posX;
|
||||
this.positionY = posY;
|
||||
this.positionZ = posZ;
|
||||
this.rotation = rot;
|
||||
this.animationId = animationId;
|
||||
this.className = className;
|
||||
|
||||
if (initParams.Length != 0)
|
||||
this.classParams = LuaUtils.readLuaParams(initParams);
|
||||
this.displayNameId = displayNameId;
|
||||
this.customDisplayName = customDisplayName;
|
||||
|
||||
this.zoneId = zoneId;
|
||||
|
||||
loadNpcTemplate(actorTemplateId);
|
||||
}
|
||||
|
||||
public override BasePacket getInitPackets(uint playerActorId)
|
||||
public SubPacket createAddActorPacket(uint playerActorId)
|
||||
{
|
||||
return AddActorPacket.buildPacket(actorId, playerActorId, 8);
|
||||
}
|
||||
|
||||
public override SubPacket createScriptBindPacket(uint playerActorId)
|
||||
{
|
||||
List<LuaParam> lParams = LuaUtils.createLuaParamList("/Chara/Npc/Populace/PopulaceStandard", false, false, false, false, false, 0xF47F6, false, false, 0, 1, "TEST");
|
||||
return ActorInstantiatePacket.buildPacket(actorId, playerActorId, actorName, className, lParams);
|
||||
}
|
||||
|
||||
public override BasePacket getSpawnPackets(uint playerActorId, uint spawnType)
|
||||
{
|
||||
List<SubPacket> subpackets = new List<SubPacket>();
|
||||
subpackets.Add(createAddActorPacket(playerActorId));
|
||||
subpackets.Add(createSpeedPacket(playerActorId));
|
||||
subpackets.Add(createSpawnPositonPacket(playerActorId, 0x1));
|
||||
subpackets.Add(createSpawnPositonPacket(playerActorId, 0x0));
|
||||
subpackets.Add(createAppearancePacket(playerActorId));
|
||||
subpackets.Add(createNamePacket(playerActorId));
|
||||
subpackets.Add(_0xFPacket.buildPacket(playerActorId, playerActorId));
|
||||
subpackets.Add(createStatePacket(playerActorId));
|
||||
subpackets.Add(createIdleAnimationPacket(playerActorId));
|
||||
subpackets.Add(createInitStatusPacket(playerActorId));
|
||||
@ -50,5 +63,112 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara.npc
|
||||
return BasePacket.createPacket(subpackets, true, false);
|
||||
}
|
||||
|
||||
public void loadNpcTemplate(uint id)
|
||||
{
|
||||
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
|
||||
{
|
||||
try
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
string query = @"
|
||||
SELECT
|
||||
displayNameId,
|
||||
customDisplayName,
|
||||
base,
|
||||
size,
|
||||
hairStyle,
|
||||
hairHighlightColor,
|
||||
hairVariation,
|
||||
faceType,
|
||||
characteristics,
|
||||
characteristicsColor,
|
||||
faceEyebrows,
|
||||
faceIrisSize,
|
||||
faceEyeShape,
|
||||
faceNose,
|
||||
faceFeatures,
|
||||
faceMouth,
|
||||
ears,
|
||||
hairColor,
|
||||
skinColor,
|
||||
eyeColor,
|
||||
voice,
|
||||
mainHand,
|
||||
offHand,
|
||||
spMainHand,
|
||||
spOffHand,
|
||||
throwing,
|
||||
pack,
|
||||
pouch,
|
||||
head,
|
||||
body,
|
||||
legs,
|
||||
hands,
|
||||
feet,
|
||||
waist,
|
||||
neck,
|
||||
leftEars,
|
||||
rightEars,
|
||||
leftIndex,
|
||||
rightIndex,
|
||||
leftFinger,
|
||||
rightFinger
|
||||
FROM gamedata_actor_templates
|
||||
INNER JOIN gamedata_actor_appearance ON gamedata_actor_templates.id = gamedata_actor_appearance.id
|
||||
WHERE gamedata_actor_templates.id = @templateId
|
||||
";
|
||||
|
||||
MySqlCommand cmd = new MySqlCommand(query, conn);
|
||||
cmd.Parameters.AddWithValue("@templateId", id);
|
||||
|
||||
using (MySqlDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
|
||||
//Handle Name
|
||||
|
||||
if (reader.IsDBNull(1))
|
||||
displayNameId = reader.GetUInt32(0);
|
||||
else
|
||||
{
|
||||
customDisplayName = reader.GetString(1);
|
||||
displayNameId = 0xFFFFFFF;
|
||||
}
|
||||
|
||||
//Handle Appearance
|
||||
modelId = reader.GetUInt32(2);
|
||||
appearanceIds[Character.SIZE] = reader.GetUInt32(3);
|
||||
appearanceIds[Character.COLORINFO] = (uint)(reader.GetUInt32(18) | (reader.GetUInt32(17) << 10) | (reader.GetUInt32(19) << 20)); //17 - Skin Color, 16 - Hair Color, 18 - Eye Color
|
||||
appearanceIds[Character.FACEINFO] = PrimitiveConversion.ToUInt32(CharacterUtils.getFaceInfo(reader.GetByte(8), reader.GetByte(9), reader.GetByte(7), reader.GetByte(16), reader.GetByte(15), reader.GetByte(14), reader.GetByte(13), reader.GetByte(12), reader.GetByte(11), reader.GetByte(10)));
|
||||
appearanceIds[Character.HIGHLIGHT_HAIR] = (uint)(reader.GetUInt32(5) | reader.GetUInt32(4) << 10); //5- Hair Highlight, 4 - Hair Style
|
||||
appearanceIds[Character.VOICE] = reader.GetUInt32(19);
|
||||
appearanceIds[Character.WEAPON1] = reader.GetUInt32(21);
|
||||
//appearanceIds[Character.WEAPON2] = reader.GetUInt32(22);
|
||||
appearanceIds[Character.HEADGEAR] = reader.GetUInt32(28);
|
||||
appearanceIds[Character.BODYGEAR] = reader.GetUInt32(29);
|
||||
appearanceIds[Character.LEGSGEAR] = reader.GetUInt32(30);
|
||||
appearanceIds[Character.HANDSGEAR] = reader.GetUInt32(31);
|
||||
appearanceIds[Character.FEETGEAR] = reader.GetUInt32(32);
|
||||
appearanceIds[Character.WAISTGEAR] = reader.GetUInt32(33);
|
||||
appearanceIds[Character.R_EAR] = reader.GetUInt32(34);
|
||||
appearanceIds[Character.L_EAR] = reader.GetUInt32(35);
|
||||
appearanceIds[Character.R_FINGER] = reader.GetUInt32(38);
|
||||
appearanceIds[Character.L_FINGER] = reader.GetUInt32(39);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (MySqlException e)
|
||||
{ Console.WriteLine(e); }
|
||||
finally
|
||||
{
|
||||
conn.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors.Chara
|
||||
{
|
||||
class NpcWork
|
||||
{
|
||||
|
@ -1,6 +1,8 @@
|
||||
using FFXIVClassic_Lobby_Server;
|
||||
using FFXIVClassic_Lobby_Server.common;
|
||||
using FFXIVClassic_Lobby_Server.packets;
|
||||
using FFXIVClassic_Map_Server.dataobjects;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara;
|
||||
using FFXIVClassic_Map_Server.lua;
|
||||
using FFXIVClassic_Map_Server.packets.send;
|
||||
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||
@ -16,7 +18,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class Player : Character
|
||||
{
|
||||
@ -482,7 +484,112 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
|
||||
return actorId == otherActorId;
|
||||
}
|
||||
|
||||
public void loadNpcTemplate(uint id)
|
||||
{
|
||||
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
|
||||
{
|
||||
try
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
string query = @"
|
||||
SELECT
|
||||
displayNameId,
|
||||
customDisplayName,
|
||||
base,
|
||||
size,
|
||||
hairStyle,
|
||||
hairHighlightColor,
|
||||
hairVariation,
|
||||
faceType,
|
||||
characteristics,
|
||||
characteristicsColor,
|
||||
faceEyebrows,
|
||||
faceIrisSize,
|
||||
faceEyeShape,
|
||||
faceNose,
|
||||
faceFeatures,
|
||||
faceMouth,
|
||||
ears,
|
||||
hairColor,
|
||||
skinColor,
|
||||
eyeColor,
|
||||
voice,
|
||||
mainHand,
|
||||
offHand,
|
||||
spMainHand,
|
||||
spOffHand,
|
||||
throwing,
|
||||
pack,
|
||||
pouch,
|
||||
head,
|
||||
body,
|
||||
legs,
|
||||
hands,
|
||||
feet,
|
||||
waist,
|
||||
neck,
|
||||
leftEars,
|
||||
rightEars,
|
||||
leftIndex,
|
||||
rightIndex,
|
||||
leftFinger,
|
||||
rightFinger
|
||||
FROM gamedata_actor_templates
|
||||
INNER JOIN gamedata_actor_appearance ON gamedata_actor_templates.id = gamedata_actor_appearance.id
|
||||
WHERE gamedata_actor_templates.id = @templateId
|
||||
";
|
||||
|
||||
MySqlCommand cmd = new MySqlCommand(query, conn);
|
||||
cmd.Parameters.AddWithValue("@templateId", id);
|
||||
|
||||
using (MySqlDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
|
||||
//Handle Name
|
||||
|
||||
if (reader.IsDBNull(1))
|
||||
displayNameId = reader.GetUInt32(0);
|
||||
else
|
||||
{
|
||||
customDisplayName = reader.GetString(1);
|
||||
displayNameId = 0xFFFFFFF;
|
||||
}
|
||||
|
||||
//Handle Appearance
|
||||
modelId = reader.GetUInt32(2);
|
||||
appearanceIds[Character.SIZE] = reader.GetUInt32(3);
|
||||
appearanceIds[Character.COLORINFO] = (uint)(reader.GetUInt32(18) | (reader.GetUInt32(17) << 10) | (reader.GetUInt32(19) << 20)); //17 - Skin Color, 16 - Hair Color, 18 - Eye Color
|
||||
appearanceIds[Character.FACEINFO] = PrimitiveConversion.ToUInt32(CharacterUtils.getFaceInfo(reader.GetByte(8), reader.GetByte(9), reader.GetByte(7), reader.GetByte(16), reader.GetByte(15), reader.GetByte(14), reader.GetByte(13), reader.GetByte(12), reader.GetByte(11), reader.GetByte(10)));
|
||||
appearanceIds[Character.HIGHLIGHT_HAIR] = (uint)(reader.GetUInt32(5) | reader.GetUInt32(4) << 10); //5- Hair Highlight, 4 - Hair Style
|
||||
appearanceIds[Character.VOICE] = reader.GetUInt32(19);
|
||||
appearanceIds[Character.WEAPON1] = reader.GetUInt32(21);
|
||||
//appearanceIds[Character.WEAPON2] = reader.GetUInt32(22);
|
||||
appearanceIds[Character.HEADGEAR] = reader.GetUInt32(28);
|
||||
appearanceIds[Character.BODYGEAR] = reader.GetUInt32(29);
|
||||
appearanceIds[Character.LEGSGEAR] = reader.GetUInt32(30);
|
||||
appearanceIds[Character.HANDSGEAR] = reader.GetUInt32(31);
|
||||
appearanceIds[Character.FEETGEAR] = reader.GetUInt32(32);
|
||||
appearanceIds[Character.WAISTGEAR] = reader.GetUInt32(33);
|
||||
appearanceIds[Character.R_EAR] = reader.GetUInt32(34);
|
||||
appearanceIds[Character.L_EAR] = reader.GetUInt32(35);
|
||||
appearanceIds[Character.R_FINGER] = reader.GetUInt32(38);
|
||||
appearanceIds[Character.L_FINGER] = reader.GetUInt32(39);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (MySqlException e)
|
||||
{ Console.WriteLine(e); }
|
||||
finally
|
||||
{
|
||||
conn.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.dataobjects.actors
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class Command : Actor
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.actors.debug
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class DebugProg : Actor
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.actors.director
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class WeatherDirector : Actor
|
||||
{
|
||||
|
@ -5,7 +5,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.actors.judge
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class Judge : Actor
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.actors.world
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
class WorldMaster : Actor
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
using FFXIVClassic_Lobby_Server;
|
||||
using FFXIVClassic_Lobby_Server.packets;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara;
|
||||
using FFXIVClassic_Map_Server.Actors;
|
||||
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -110,9 +110,8 @@ namespace FFXIVClassic_Map_Server.dataobjects
|
||||
}
|
||||
else
|
||||
{
|
||||
BasePacket p = actor.getInitPackets(playerActor.actorId);
|
||||
p.replaceActorID(playerActor.actorId);
|
||||
basePackets.Add(p);
|
||||
basePackets.Add(actor.getSpawnPackets(playerActor.actorId, 1));
|
||||
basePackets.Add(actor.getInitPackets(playerActor.actorId));
|
||||
actorInstanceList.Add(actor);
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
using FFXIVClassic_Lobby_Server.packets;
|
||||
using FFXIVClassic_Map_Server.Actors;
|
||||
using FFXIVClassic_Map_Server.dataobjects;
|
||||
using FFXIVClassic_Map_Server.dataobjects.actors;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara;
|
||||
using FFXIVClassic_Map_Server.dataobjects.chara.npc;
|
||||
using FFXIVClassic_Map_Server.packets.receive.events;
|
||||
using FFXIVClassic_Map_Server.packets.send;
|
||||
using FFXIVClassic_Map_Server.packets.send.events;
|
||||
|
@ -1,4 +1,5 @@
|
||||
using FFXIVClassic_Lobby_Server.common;
|
||||
using FFXIVClassic_Map_Server.Actors;
|
||||
using FFXIVClassic_Map_Server.dataobjects;
|
||||
using FFXIVClassic_Map_Server.lua;
|
||||
using System;
|
||||
|
@ -93,7 +93,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool addProperty(FFXIVClassic_Map_Server.dataobjects.Actor actor, string name)
|
||||
public bool addProperty(FFXIVClassic_Map_Server.Actors.Actor actor, string name)
|
||||
{
|
||||
string[] split = name.Split('.');
|
||||
int arrayIndex = 0;
|
||||
|
@ -90,7 +90,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addProperty(FFXIVClassic_Map_Server.dataobjects.Actor actor, string name)
|
||||
public void addProperty(FFXIVClassic_Map_Server.Actors.Actor actor, string name)
|
||||
{
|
||||
string[] split = name.Split('.');
|
||||
int arrayIndex = 0;
|
||||
|
@ -6,6 +6,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||
using FFXIVClassic_Map_Server.dataobjects;
|
||||
using FFXIVClassic_Map_Server.Actors;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.utils
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user