mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Initial Commit.
This commit is contained in:
		
							
								
								
									
										52
									
								
								FFXIVClassic Map Server/dataobjects/Actor.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								FFXIVClassic Map Server/dataobjects/Actor.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.dataobjects | ||||
| { | ||||
|     class Actor | ||||
|     { | ||||
|         enum Appearance { | ||||
|             MODEL, | ||||
|             SIZE, | ||||
|             COLORINFO, | ||||
|             FACEINFO, | ||||
|             HIGHLIGHT_HAIR, | ||||
|             VOICE, | ||||
|             WEAPON1, | ||||
|             WEAPON2, | ||||
|             WEAPON3, | ||||
|             HEADGEAR, | ||||
|             BODYGEAR, | ||||
|             LEGSGEAR, | ||||
|             HANDSGEAR, | ||||
|             FEETGEAR, | ||||
|             WAISTGEAR, | ||||
|             UNKNOWN1, | ||||
|             R_EAR, | ||||
|             L_EAR, | ||||
|             UNKNOWN2, | ||||
|             UNKNOWN3, | ||||
|             R_FINGER, | ||||
|             L_FINGER | ||||
|         } | ||||
|  | ||||
|         public uint actorID; | ||||
|  | ||||
|         public uint displayNameID; | ||||
|         public string customDisplayName; | ||||
|  | ||||
|         public uint[] appearanceIDs; | ||||
|  | ||||
|         public float positionX, positionY, positionZ; | ||||
|         public float rotation; | ||||
|         public ushort moveState; | ||||
|  | ||||
|         public Actor(uint id) | ||||
|         { | ||||
|             actorID = id; | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
							
								
								
									
										314
									
								
								FFXIVClassic Map Server/dataobjects/CharaInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										314
									
								
								FFXIVClassic Map Server/dataobjects/CharaInfo.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,314 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
| using FFXIVClassic_Lobby_Server.common; | ||||
| using System.IO; | ||||
|  | ||||
| namespace FFXIVClassic_Lobby_Server.dataobjects | ||||
| { | ||||
|     class CharaInfo | ||||
|     { | ||||
|         public uint tribe = 0; | ||||
|         public uint size = 0; | ||||
|         public uint voice = 0; | ||||
|         public ushort skinColor = 0; | ||||
|  | ||||
|         public ushort hairStyle = 0; | ||||
|         public ushort hairColor = 0; | ||||
|         public ushort hairHighlightColor = 0; | ||||
|         public ushort eyeColor = 0; | ||||
|         public ushort characteristicsColor = 0; | ||||
|  | ||||
|         public struct FaceInfo | ||||
|         { | ||||
|             [BitfieldLength(5)] | ||||
|             public uint characteristics; | ||||
|             [BitfieldLength(3)] | ||||
|             public uint characteristicsColor; | ||||
|             [BitfieldLength(6)] | ||||
|             public uint type; | ||||
|             [BitfieldLength(2)] | ||||
|             public uint ears; | ||||
|             [BitfieldLength(2)] | ||||
|             public uint mouth; | ||||
|             [BitfieldLength(2)] | ||||
|             public uint features; | ||||
|             [BitfieldLength(3)] | ||||
|             public uint nose; | ||||
|             [BitfieldLength(3)] | ||||
|             public uint eyeShape; | ||||
|             [BitfieldLength(1)] | ||||
|             public uint irisSize; | ||||
|             [BitfieldLength(3)] | ||||
|             public uint eyebrows; | ||||
|             [BitfieldLength(2)] | ||||
|             public uint unknown; | ||||
|         } | ||||
|  | ||||
|         public uint faceType = 0; | ||||
|         public uint faceEyebrows = 0; | ||||
|         public uint faceEyeShape = 0; | ||||
|         public uint faceIrisSize = 0; | ||||
|         public uint faceNose = 0; | ||||
|         public uint faceMouth = 0; | ||||
|         public uint faceFeatures = 0; | ||||
|         public uint characteristics = 0; | ||||
|         public uint ears = 0; | ||||
|  | ||||
|         public uint guardian = 0; | ||||
|         public uint birthMonth = 0; | ||||
|         public uint birthDay = 0; | ||||
|         public uint currentClass = 0; | ||||
|         public uint currentJob = 0; | ||||
|         public uint allegiance = 0; | ||||
|  | ||||
|         public uint mainHand = 0; | ||||
|         public uint offHand = 0; | ||||
|  | ||||
|         public uint headGear = 0; | ||||
|         public uint bodyGear = 0; | ||||
|         public uint legsGear = 0; | ||||
|         public uint handsGear = 0; | ||||
|         public uint feetGear = 0; | ||||
|         public uint waistGear = 0; | ||||
|         public uint rightEarGear = 0; | ||||
|         public uint leftEarGear = 0; | ||||
|         public uint rightFingerGear = 0; | ||||
|         public uint leftFingerGear = 0; | ||||
|  | ||||
|         public uint currentLevel = 1; | ||||
|  | ||||
|         public static CharaInfo getFromNewCharRequest(String encoded) | ||||
|         { | ||||
|             byte[] data = Convert.FromBase64String(encoded.Replace('-', '+').Replace('_', '/')); | ||||
|             CharaInfo info = new CharaInfo(); | ||||
|  | ||||
|             using (MemoryStream stream = new MemoryStream(data)) | ||||
|             { | ||||
|                 using (BinaryReader reader = new BinaryReader(stream)) | ||||
|                 { | ||||
|                     uint version = reader.ReadUInt32(); | ||||
|                     uint unknown1 = reader.ReadUInt32(); | ||||
|                     info.tribe = reader.ReadByte(); | ||||
|                     info.size = reader.ReadByte(); | ||||
|                     info.hairStyle = reader.ReadUInt16(); | ||||
|                     info.hairHighlightColor = reader.ReadUInt16(); | ||||
|                     info.faceType = reader.ReadByte(); | ||||
|                     info.characteristics = reader.ReadByte(); | ||||
|                     info.characteristicsColor = reader.ReadByte(); | ||||
|  | ||||
|                     reader.ReadUInt32(); | ||||
|  | ||||
|                     info.faceEyebrows = reader.ReadByte(); | ||||
|                     info.faceIrisSize = reader.ReadByte(); | ||||
|                     info.faceEyeShape = reader.ReadByte(); | ||||
|                     info.faceNose = reader.ReadByte(); | ||||
|                     info.faceFeatures = reader.ReadByte(); | ||||
|                     info.faceMouth = reader.ReadByte(); | ||||
|                     info.ears = reader.ReadByte(); | ||||
|                     info.hairColor = reader.ReadUInt16(); | ||||
|  | ||||
|                     reader.ReadUInt32(); | ||||
|  | ||||
|                     info.skinColor = reader.ReadUInt16(); | ||||
|                     info.eyeColor = reader.ReadUInt16(); | ||||
|  | ||||
|                     info.voice = reader.ReadByte(); | ||||
|                     info.guardian = reader.ReadByte(); | ||||
|                     info.birthMonth = reader.ReadByte(); | ||||
|                     info.birthDay = reader.ReadByte(); | ||||
|                     info.currentClass = reader.ReadUInt16(); | ||||
|  | ||||
|                     reader.ReadUInt32(); | ||||
|                     reader.ReadUInt32(); | ||||
|                     reader.ReadUInt32(); | ||||
|  | ||||
|                     reader.BaseStream.Seek(0x10, SeekOrigin.Current); | ||||
|  | ||||
|                     info.allegiance = reader.ReadByte(); | ||||
|  | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|  | ||||
|  | ||||
|             return info; | ||||
|         } | ||||
|  | ||||
|         public String buildForCharaList(Character chara) | ||||
|         { | ||||
|             byte[] data; | ||||
|  | ||||
|             mainHand = 79707136; | ||||
|             offHand = 32509954; | ||||
|             headGear = 43008; | ||||
|             bodyGear = 43008; | ||||
|             legsGear = 43008; | ||||
|             handsGear = 43008; | ||||
|             feetGear = 43008; | ||||
|  | ||||
|             using (MemoryStream stream = new MemoryStream()) | ||||
|             { | ||||
|                 using (BinaryWriter writer = new BinaryWriter(stream)) | ||||
|                 { | ||||
|                     //Build faceinfo for later | ||||
|                     FaceInfo faceInfo = new FaceInfo(); | ||||
|                     faceInfo.characteristics = characteristics; | ||||
|                     faceInfo.characteristicsColor = characteristicsColor; | ||||
|                     faceInfo.type = faceType; | ||||
|                     faceInfo.ears = ears; | ||||
|                     faceInfo.features = faceFeatures; | ||||
|                     faceInfo.eyebrows = faceEyebrows; | ||||
|                     faceInfo.eyeShape = faceEyeShape; | ||||
|                     faceInfo.irisSize = faceIrisSize; | ||||
|                     faceInfo.mouth = faceMouth; | ||||
|                     faceInfo.nose = faceNose; | ||||
|  | ||||
|  | ||||
|                     string location1 = "prv0Inn01\0"; | ||||
|                     string location2 = "defaultTerritory\0"; | ||||
|  | ||||
|                     writer.Write((UInt32)0x000004c0); | ||||
|                     writer.Write((UInt32)0x232327ea); | ||||
|                     writer.Write((UInt32)System.Text.Encoding.UTF8.GetBytes(chara.name + '\0').Length); | ||||
|                     writer.Write(System.Text.Encoding.UTF8.GetBytes(chara.name + '\0')); | ||||
|                     writer.Write((UInt32)0x1c); | ||||
|                     writer.Write((UInt32)0x04); | ||||
|                     writer.Write((UInt32)getTribeModel()); | ||||
|                     writer.Write((UInt32)size); | ||||
|                     uint colorVal = skinColor | (uint)(hairColor << 10) | (uint)(eyeColor << 20); | ||||
|                     writer.Write((UInt32)colorVal); | ||||
|  | ||||
|                     var bitfield = PrimitiveConversion.ToUInt32(faceInfo); | ||||
|  | ||||
|                     writer.Write((UInt32)bitfield); //FACE, Figure this out! | ||||
|                     uint hairVal = hairHighlightColor | (uint)(hairStyle << 10) | (uint)(characteristicsColor << 20); | ||||
|                     writer.Write((UInt32)hairVal); | ||||
|                     writer.Write((UInt32)voice);                     | ||||
|                     writer.Write((UInt32)mainHand); | ||||
|                     writer.Write((UInt32)offHand); | ||||
|  | ||||
|                     writer.Write((UInt32)0); | ||||
|                     writer.Write((UInt32)0); | ||||
|                     writer.Write((UInt32)0); | ||||
|                     writer.Write((UInt32)0); | ||||
|                     writer.Write((UInt32)0); | ||||
|  | ||||
|                     writer.Write((UInt32)headGear); | ||||
|                     writer.Write((UInt32)bodyGear); | ||||
|                     writer.Write((UInt32)legsGear); | ||||
|                     writer.Write((UInt32)handsGear); | ||||
|                     writer.Write((UInt32)feetGear); | ||||
|                     writer.Write((UInt32)waistGear); | ||||
|  | ||||
|                     writer.Write((UInt32)0); | ||||
|  | ||||
|                     writer.Write((UInt32)rightEarGear); | ||||
|                     writer.Write((UInt32)leftEarGear); | ||||
|  | ||||
|                     writer.Write((UInt32)0); | ||||
|                     writer.Write((UInt32)0); | ||||
|  | ||||
|                     writer.Write((UInt32)rightFingerGear); | ||||
|                     writer.Write((UInt32)leftFingerGear); | ||||
|  | ||||
|                     for (int i = 0; i < 0x8; i++) | ||||
|                         writer.Write((byte)0); | ||||
|  | ||||
|                     writer.Write((UInt32)1); | ||||
|                     writer.Write((UInt32)1); | ||||
|  | ||||
|                     writer.Write((byte)currentClass); | ||||
|                     writer.Write((UInt16)currentLevel); | ||||
|                     writer.Write((byte)currentJob); | ||||
|                     writer.Write((UInt16)1); | ||||
|                     writer.Write((byte)tribe); | ||||
|  | ||||
|                     writer.Write((UInt32)0xe22222aa); | ||||
|  | ||||
|                     writer.Write((UInt32)System.Text.Encoding.UTF8.GetBytes(location1).Length); | ||||
|                     writer.Write(System.Text.Encoding.UTF8.GetBytes(location1)); | ||||
|                     writer.Write((UInt32)System.Text.Encoding.UTF8.GetBytes(location2).Length); | ||||
|                     writer.Write(System.Text.Encoding.UTF8.GetBytes(location2)); | ||||
|  | ||||
|                     writer.Write((byte)guardian); | ||||
|                     writer.Write((byte)birthMonth); | ||||
|                     writer.Write((byte)birthDay); | ||||
|  | ||||
|                     writer.Write((UInt16)0x17); | ||||
|                     writer.Write((UInt32)4); | ||||
|                     writer.Write((UInt32)4); | ||||
|  | ||||
|                     writer.BaseStream.Seek(0x10, SeekOrigin.Current); | ||||
|  | ||||
|                     writer.Write((UInt32)allegiance); | ||||
|                     writer.Write((UInt32)allegiance); | ||||
|                 } | ||||
|  | ||||
|                 data = stream.GetBuffer(); | ||||
|             } | ||||
|  | ||||
|             return Convert.ToBase64String(data).Replace('+', '-').Replace('/', '_'); | ||||
|         } | ||||
|  | ||||
|         public static String debug() | ||||
|         { | ||||
|             byte[] bytes = File.ReadAllBytes("./packets/charaInfo.bin"); | ||||
|  | ||||
|             Console.WriteLine(Utils.ByteArrayToHex(bytes)); | ||||
|  | ||||
|             return Convert.ToBase64String(bytes).Replace('+', '-').Replace('/', '_'); | ||||
|         } | ||||
|  | ||||
|         public UInt32 getTribeModel() | ||||
|         { | ||||
|             switch (tribe) | ||||
|             { | ||||
|                 //Hyur Midlander Male | ||||
|                 case 1: | ||||
|                 default: | ||||
|                     return 1; | ||||
|  | ||||
|                 //Hyur Midlander Female | ||||
|                 case 2: | ||||
|                     return 2; | ||||
|  | ||||
|                 //Elezen Male | ||||
|                 case 4: | ||||
|                 case 6: | ||||
|                     return 3; | ||||
|  | ||||
|                 //Elezen Female | ||||
|                 case 5: | ||||
|                 case 7: | ||||
|                     return 4; | ||||
|  | ||||
|                 //Lalafell Male | ||||
|                 case 8: | ||||
|                 case 10: | ||||
|                     return 5; | ||||
|  | ||||
|                 //Lalafell Female | ||||
|                 case 9: | ||||
|                 case 11: | ||||
|                     return 6; | ||||
|  | ||||
|                 //Miqo'te Female | ||||
|                 case 12: | ||||
|                 case 13: | ||||
|                     return 8; | ||||
|  | ||||
|                 //Roegadyn Male | ||||
|                 case 14: | ||||
|                 case 15: | ||||
|                     return 7; | ||||
|  | ||||
|                 //Hyur Highlander Male | ||||
|                 case 3: | ||||
|                     return 9; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										40
									
								
								FFXIVClassic Map Server/dataobjects/Character.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								FFXIVClassic Map Server/dataobjects/Character.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
| using FFXIVClassic_Lobby_Server.common; | ||||
| using FFXIVClassic_Lobby_Server.dataobjects; | ||||
|  | ||||
| namespace FFXIVClassic_Lobby_Server | ||||
| { | ||||
|     class Character | ||||
|     { | ||||
|         public uint id; | ||||
|         public ushort slot; | ||||
|         public ushort serverId; | ||||
|         public string name; | ||||
|         public ushort state; | ||||
|         public string charaInfo; | ||||
|         public bool isLegacy; | ||||
|         public bool doRename; | ||||
|         public uint currentZoneId; | ||||
|          | ||||
|          | ||||
|  | ||||
|         public static CharaInfo EncodedToCharacter(String charaInfo) | ||||
|         { | ||||
|             charaInfo.Replace("+", "-"); | ||||
|             charaInfo.Replace("/", "_"); | ||||
|             byte[] data = System.Convert.FromBase64String(charaInfo); | ||||
|  | ||||
|             Console.WriteLine("------------Base64 printout------------------"); | ||||
|             Console.WriteLine(Utils.ByteArrayToHex(data)); | ||||
|             Console.WriteLine("------------Base64 printout------------------"); | ||||
|  | ||||
|             CharaInfo chara = new CharaInfo(); | ||||
|  | ||||
|             return chara; | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										102
									
								
								FFXIVClassic Map Server/dataobjects/Player.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								FFXIVClassic Map Server/dataobjects/Player.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| using FFXIVClassic_Lobby_Server; | ||||
| using FFXIVClassic_Lobby_Server.dataobjects; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.dataobjects | ||||
| { | ||||
|     class Player | ||||
|     {         | ||||
|         Actor playerActor; | ||||
|  | ||||
|         ClientConnection conn1; | ||||
|         ClientConnection conn2; | ||||
|  | ||||
|         public uint characterID = 0; | ||||
|         public uint actorID = 0; | ||||
|          | ||||
|         uint currentZoneID = 0; | ||||
|  | ||||
|         List<Actor> actorInstanceList = new List<Actor>(); | ||||
|  | ||||
|         bool isDisconnected; | ||||
|  | ||||
|         public Player(uint actorId) | ||||
|         { | ||||
|             this.actorID = actorId; | ||||
|             createPlayerActor(actorId, null); | ||||
|         } | ||||
|  | ||||
|         public void addConnection(ClientConnection conn) | ||||
|         { | ||||
|             if (conn1 == null && conn2 != null) | ||||
|                 conn1 = conn; | ||||
|             else if (conn2 == null && conn1 != null) | ||||
|                 conn2 = conn; | ||||
|             else | ||||
|                 conn1 = conn; | ||||
|         } | ||||
|  | ||||
|         public bool isClientConnectionsReady() | ||||
|         { | ||||
|             return (conn1 != null && conn2 != null); | ||||
|         } | ||||
|  | ||||
|         public void disconnect() | ||||
|         { | ||||
|             isDisconnected = true; | ||||
|             conn1.disconnect(); | ||||
|             conn2.disconnect(); | ||||
|         } | ||||
|  | ||||
|         public void setConnection1(ClientConnection conn) | ||||
|         { | ||||
|             conn1 = conn; | ||||
|         } | ||||
|  | ||||
|         public void setConnection2(ClientConnection conn) | ||||
|         { | ||||
|             conn2 = conn; | ||||
|         } | ||||
|  | ||||
|         public ClientConnection getConnection1() | ||||
|         { | ||||
|             return conn1; | ||||
|         } | ||||
|  | ||||
|         public ClientConnection getConnection2() | ||||
|         { | ||||
|             return conn1; | ||||
|         } | ||||
|  | ||||
|         public void createPlayerActor(uint actorId, Character chara) | ||||
|         { | ||||
|             playerActor = new Actor(actorId); | ||||
|             actorInstanceList.Add(playerActor); | ||||
|         } | ||||
|  | ||||
|         public void updatePlayerActorPosition(float x, float y, float z, float rot, ushort moveState) | ||||
|         { | ||||
|             playerActor.positionX = x; | ||||
|             playerActor.positionY = y; | ||||
|             playerActor.positionZ = z; | ||||
|             playerActor.rotation = rot; | ||||
|             playerActor.moveState = moveState; | ||||
|         }             | ||||
|  | ||||
|         public void sendMotd() | ||||
|         { | ||||
|             World world = Database.getServer(ConfigConstants.DATABASE_WORLDID); | ||||
|             //sendChat(world.motd); | ||||
|         } | ||||
|  | ||||
|         public void sendChat(Player sender, string message, int mode) | ||||
|         { | ||||
|  | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								FFXIVClassic Map Server/dataobjects/World.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								FFXIVClassic Map Server/dataobjects/World.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace FFXIVClassic_Lobby_Server.dataobjects | ||||
| { | ||||
|     class World | ||||
|     { | ||||
|         public ushort id; | ||||
|         public string address; | ||||
|         public ushort port; | ||||
|         public ushort listPosition; | ||||
|         public ushort population; | ||||
|         public string name; | ||||
|         public bool   isActive; | ||||
|         public string motd; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user