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:
parent
071b1f11a8
commit
c9f35a207b
6 changed files with 82 additions and 55 deletions
|
@ -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);
|
||||
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue