1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-20 11:47:48 +00:00

Fixed up warping with new values for SetActorPosition packet. The script instantiation packet is done and implemented. Player init is done except for parameters.

This commit is contained in:
Filip Maj 2016-01-09 18:52:23 -05:00
parent 071b1f11a8
commit c9f35a207b
6 changed files with 82 additions and 55 deletions

View file

@ -218,7 +218,6 @@ namespace FFXIVClassic_Lobby_Server
client.queuePacket(SetWeatherPacket.buildPacket(player.actorID, SetWeatherPacket.WEATHER_CLEAR), true, false);
BasePacket actorPacket = player.getActor().getInitPackets(player.actorID);
actorPacket.debugPrintPacket();
client.queuePacket(actorPacket);
//Retainers
@ -603,7 +602,6 @@ namespace FFXIVClassic_Lobby_Server
actorPacket.replaceActorID(entry.Value.actorID);
entry.Value.getConnection2().queuePacket(packet);
actorPacket.debugPrintPacket();
entry.Value.getConnection2().queuePacket(actorPacket);

View file

@ -265,6 +265,9 @@ namespace FFXIVClassic_Lobby_Server
public void doWarp(String map, String x, String y, String z)
{
if (map.ToLower().StartsWith("0x"))
mProcessor.doWarp(Convert.ToUInt32(map, 16), Single.Parse(x), Single.Parse(y), Single.Parse(z));
else
mProcessor.doWarp(Convert.ToUInt32(map), Single.Parse(x), Single.Parse(y), Single.Parse(z));
}

View file

@ -61,10 +61,17 @@ namespace FFXIVClassic_Map_Server.dataobjects
public SubPacket createSpawnPositonPacket(uint playerActorId, uint spawnType)
{
return SetActorPositionPacket.buildPacket(actorId, playerActorId, SetActorPositionPacket.INNPOS_X, SetActorPositionPacket.INNPOS_Y, SetActorPositionPacket.INNPOS_Z, SetActorPositionPacket.INNPOS_ROT, SetActorPositionPacket.SPAWNTYPE_PLAYERWAKE);
SubPacket spawnPacket;
if (!spawnedFirstTime && playerActorId == actorId)
spawnPacket = SetActorPositionPacket.buildPacket(actorId, playerActorId, 0, positionX, positionY, positionZ, rotation, spawnType, false);
else if (playerActorId == actorId)
spawnPacket = SetActorPositionPacket.buildPacket(actorId, playerActorId, 0xFFFFFFFF, positionX, positionY, positionZ, rotation, spawnType, true);
else
spawnPacket = SetActorPositionPacket.buildPacket(actorId, playerActorId, actorId, positionX, positionY, positionZ, rotation, spawnType, false);
//return SetActorPositionPacket.buildPacket(actorId, playerActorId, -211.895477f, 190.000000f, 29.651011f, 2.674819f, SetActorPositionPacket.SPAWNTYPE_PLAYERWAKE);
//spawnedFirstTime = true;
//return spawnPacket;
spawnedFirstTime = true;
return spawnPacket;
}
public SubPacket createPositionUpdatePacket(uint playerActorId)
@ -92,7 +99,7 @@ namespace FFXIVClassic_Map_Server.dataobjects
List<SubPacket> subpackets = new List<SubPacket>();
subpackets.Add(createAddActorPacket(playerActorId));
subpackets.Add(createSpeedPacket(playerActorId));
subpackets.Add(createSpawnPositonPacket(playerActorId, 0xFF));
subpackets.Add(createSpawnPositonPacket(playerActorId, 0x1));
subpackets.Add(createNamePacket(playerActorId));
subpackets.Add(createStatePacket(playerActorId));
subpackets.Add(createIsZoneingPacket(playerActorId));

View file

@ -43,8 +43,8 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
public Player(uint actorID) : base(actorID)
{
actorName = String.Format("_player{0:00000000}", actorID);
actorName = String.Format("_pc{0:00000000}", actorID);
className = "Player";
currentSubState = SetActorStatePacket.SUB_STATE_PLAYER;
DBStats stats = Database.getCharacterStats(actorID);
@ -118,8 +118,7 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
List<LuaParam> lParams;
if (isMyPlayer(playerActorId))
{
lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, false, false, false, true);
lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, false, true, 0, false, timers, true);
}
else
lParams = LuaUtils.createLuaParamList("/Chara/Player/Player_work", false, false, false, false, false, true);
@ -134,7 +133,7 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
if (isMyPlayer(playerActorId))
subpackets.AddRange(create0x132Packets(playerActorId));
subpackets.Add(createSpeedPacket(playerActorId));
subpackets.Add(createSpawnPositonPacket(playerActorId, 0xFF));
subpackets.Add(createSpawnPositonPacket(playerActorId, 0x1));
subpackets.Add(createAppearancePacket(playerActorId));
subpackets.Add(createNamePacket(playerActorId));
subpackets.Add(_0xFPacket.buildPacket(playerActorId, playerActorId));
@ -143,7 +142,8 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
subpackets.Add(createInitStatusPacket(playerActorId));
subpackets.Add(createSetActorIconPacket(playerActorId));
subpackets.Add(createIsZoneingPacket(playerActorId));
//subpackets.Add(createScriptBindPacket(playerActorId));
subpackets.Add(createScriptBindPacket(playerActorId));
return BasePacket.createPacket(subpackets, true, false);
}

View file

@ -42,12 +42,12 @@ namespace FFXIVClassic_Map_Server
}
value = Encoding.ASCII.GetString(list.ToArray());
break;
case 0x3: //Boolean False
value = false;
break;
case 0x4: //Boolean True
case 0x3: //Boolean True
value = true;
break;
case 0x4: //Boolean False
value = false;
break;
case 0x5: //Nil
wasNil = true;
break;
@ -85,10 +85,13 @@ namespace FFXIVClassic_Map_Server
switch (l.typeID)
{
case 0x0: //Int32
writer.Write((UInt32)l.value);
if (l.value is uint)
writer.Write((UInt32)Utils.swapEndian((UInt32)l.value));
else
writer.Write((UInt32)Utils.swapEndian((UInt32)(Int32)l.value));
break;
case 0x1: //Int32
writer.Write((UInt32)l.value);
writer.Write((UInt32)Utils.swapEndian((UInt32)l.value));
break;
case 0x2: //Null Termed String
string sv = (string)l.value;
@ -102,7 +105,7 @@ namespace FFXIVClassic_Map_Server
case 0x5: //Nil
break;
case 0x6: //Actor (By Id)
writer.Write((UInt32)l.value);
writer.Write((UInt32)Utils.swapEndian((UInt32)l.value));
break;
case 0x10: //Byte?
break;
@ -150,12 +153,12 @@ namespace FFXIVClassic_Map_Server
}
value = Encoding.ASCII.GetString(list.ToArray());
break;
case 0x3: //Boolean False
value = false;
break;
case 0x4: //Boolean True
case 0x3: //Boolean True
value = true;
break;
case 0x4: //Boolean False
value = false;
break;
case 0x5: //Nil
wasNil = true;
break;
@ -191,11 +194,30 @@ namespace FFXIVClassic_Map_Server
List<LuaParam> luaParams = new List<LuaParam>();
foreach (object o in list)
{
if (o.GetType().IsArray)
{
Array arrayO = (Array)o;
foreach (object o2 in arrayO)
addToList(o2, luaParams);
}
else
addToList(o, luaParams);
}
return luaParams;
}
private static void addToList(object o, List<LuaParam> luaParams)
{
if (o is uint)
{
luaParams.Add(new LuaParam(0x0, (uint)o));
}
else if (o is int)
{
luaParams.Add(new LuaParam(0x0, (int)o));
}
else if (o is string)
{
luaParams.Add(new LuaParam(0x2, (string)o));
@ -203,9 +225,9 @@ namespace FFXIVClassic_Map_Server
else if (o is bool)
{
if (((bool)o))
luaParams.Add(new LuaParam(0x4, null));
else
luaParams.Add(new LuaParam(0x3, null));
else
luaParams.Add(new LuaParam(0x4, null));
}
else if (o == null)
{
@ -217,9 +239,6 @@ namespace FFXIVClassic_Map_Server
}
}
return luaParams;
}
public static object[] createLuaParamObjectList(List <LuaParam> luaParams)
{
object[] list = new object[luaParams.Count];
@ -247,12 +266,12 @@ namespace FFXIVClassic_Map_Server
case 0x2: //Null Termed String
dumpString += String.Format("\"{0}\"", (string)lParams[i].value);
break;
case 0x3: //Boolean False
dumpString += "false";
break;
case 0x4: //Boolean True
case 0x3: //Boolean True
dumpString += "true";
break;
case 0x4: //Boolean False
dumpString += "false";
break;
case 0x5: //NULL???
dumpString += "nil";
break;

View file

@ -27,7 +27,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor
public const float INNPOS_Z = 165.050003f;
public const float INNPOS_ROT = -1.530000f;
public static SubPacket buildPacket(uint sourceActorID, uint targetActorID,float x, float y, float z, float rotation, uint spawnType)
public static SubPacket buildPacket(uint sourceActorID, uint targetActorID, uint actorId, float x, float y, float z, float rotation, uint spawnType, bool isZoningPlayer)
{
byte[] data = new byte[PACKET_SIZE-0x20];
@ -36,7 +36,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor
using (BinaryWriter binWriter = new BinaryWriter(mem))
{
binWriter.Write((Int32)0);
binWriter.Write((Int32)0);
binWriter.Write((Int32)actorId);
binWriter.Write((Single)x);
binWriter.Write((Single)y);
binWriter.Write((Single)z);
@ -45,7 +45,7 @@ namespace FFXIVClassic_Map_Server.packets.send.actor
binWriter.BaseStream.Seek(0x24, SeekOrigin.Begin);
binWriter.Write((UInt16)spawnType);
binWriter.Write((UInt16)(0));
binWriter.Write((UInt16)(isZoningPlayer ? 1 : 0));
}
}