mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	PROJECT: added common library to make common files actually common
- renamed sln to FFXIVClassic.sln - threaded logging - todo: print packets using Log.Packet
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| using System; | ||||
| using System.Net.Sockets; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using System.Collections.Concurrent; | ||||
| using System.Net; | ||||
|  | ||||
| @@ -46,7 +46,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     socket.Send(packetBytes); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { Log.Error(String.Format("Weird case, socket was d/ced: {0}", e)); } | ||||
|                 { Program.Log.Error(String.Format("Weird case, socket was d/ced: {0}", e)); } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.dataobjects; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using FFXIVClassic_Map_Server.packets.send.actor; | ||||
| @@ -116,7 +116,7 @@ namespace FFXIVClassic_Map_Server | ||||
|             { | ||||
|                 if (client != null) | ||||
|                     client.queuePacket(BasePacket.createPacket(SendMessagePacket.buildPacket(client.actorID, client.actorID, SendMessagePacket.MESSAGE_TYPE_GENERAL_INFO, "", "Zone does not exist or setting isn't valid."), true, false)); | ||||
|                 Log.Error("Zone does not exist or setting isn't valid."); | ||||
|                 Program.Log.Error("Zone does not exist or setting isn't valid."); | ||||
|             } | ||||
|  | ||||
|             if (client != null) | ||||
| @@ -142,7 +142,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 foreach (KeyValuePair<uint, ConnectedPlayer> entry in mConnectedPlayerList) | ||||
|                 { | ||||
|                     Player p = entry.Value.getActor(); | ||||
|                     Log.Info(String.Format("{0}\'s position: ZoneID: {1}, X: {2}, Y: {3}, Z: {4}, Rotation: {5}", p.customDisplayName, p.zoneId, p.positionX, p.positionY, p.positionZ, p.rotation)); | ||||
|                     Program.Log.Info(String.Format("{0}\'s position: ZoneID: {1}, X: {2}, Y: {3}, Z: {4}, Rotation: {5}", p.customDisplayName, p.zoneId, p.positionX, p.positionY, p.positionZ, p.rotation)); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -578,7 +578,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                             } | ||||
|                             catch (Exception e) | ||||
|                             { | ||||
|                                 Log.Error("Could not change weather: " + e); | ||||
|                                 Program.Log.Error("Could not change weather: " + e); | ||||
|                             } | ||||
|                         } | ||||
|                         #endregion | ||||
| @@ -597,7 +597,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not load packet: " + e); | ||||
|                         Program.Log.Error("Could not load packet: " + e); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -607,7 +607,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 { | ||||
|                     if (client != null) | ||||
|                     { | ||||
|                         Log.Info(String.Format("Got request to reset zone: {0}", client.getActor().zoneId)); | ||||
|                         Program.Log.Info(String.Format("Got request to reset zone: {0}", client.getActor().zoneId)); | ||||
|                         client.getActor().zone.clear(); | ||||
|                         client.getActor().zone.addActorToZone(client.getActor()); | ||||
|                         client.getActor().sendInstanceUpdate(); | ||||
| @@ -621,11 +621,11 @@ namespace FFXIVClassic_Map_Server | ||||
|                 #region !reloaditems | ||||
|                 else if (split[0].Equals("reloaditems")) | ||||
|                 { | ||||
|                     Log.Info(String.Format("Got request to reload item gamedata")); | ||||
|                     Program.Log.Info(String.Format("Got request to reload item gamedata")); | ||||
|                     sendMessage(client, "Reloading Item Gamedata..."); | ||||
|                     gamedataItems.Clear(); | ||||
|                     gamedataItems = Database.getItemGamedata(); | ||||
|                     Log.Info(String.Format("Loaded {0} items.", gamedataItems.Count)); | ||||
|                     Program.Log.Info(String.Format("Loaded {0} items.", gamedataItems.Count)); | ||||
|                     sendMessage(client, String.Format("Loaded {0} items.", gamedataItems.Count)); | ||||
|                     return true; | ||||
|                 } | ||||
| @@ -644,7 +644,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not load packet: " + e); | ||||
|                         Program.Log.Error("Could not load packet: " + e); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -660,7 +660,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not give item."); | ||||
|                         Program.Log.Error("Could not give item."); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -680,7 +680,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not give item."); | ||||
|                         Program.Log.Error("Could not give item."); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -703,7 +703,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not remove item."); | ||||
|                         Program.Log.Error("Could not remove item."); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -718,7 +718,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not give keyitem."); | ||||
|                         Program.Log.Error("Could not give keyitem."); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -737,7 +737,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not remove keyitem."); | ||||
|                         Program.Log.Error("Could not remove keyitem."); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -754,7 +754,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not give currency."); | ||||
|                         Program.Log.Error("Could not give currency."); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -775,7 +775,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not remove currency."); | ||||
|                         Program.Log.Error("Could not remove currency."); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
| @@ -793,7 +793,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     } | ||||
|                     catch (Exception e) | ||||
|                     { | ||||
|                         Log.Error("Could not change music: " + e); | ||||
|                         Program.Log.Error("Could not change music: " + e); | ||||
|                     } | ||||
|                 } | ||||
|                 #endregion | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using STA.Settings; | ||||
| using FFXIVClassic.Common; | ||||
| using System; | ||||
| using System.IO; | ||||
|  | ||||
| @@ -9,8 +9,9 @@ namespace FFXIVClassic_Map_Server | ||||
|         public static String OPTIONS_BINDIP; | ||||
|         public static String OPTIONS_PORT; | ||||
|         public static bool   OPTIONS_TIMESTAMP = false; | ||||
|         public static String OPTIONS_LOGPATH; | ||||
|         public static String OPTIONS_LOGPATH; | ||||
|         public static String OPTIONS_LOGFILE; | ||||
|         public static String OPTIONS_LOGLEVEL; | ||||
|  | ||||
|         public static uint   DATABASE_WORLDID; | ||||
|         public static String DATABASE_HOST; | ||||
| @@ -36,10 +37,11 @@ namespace FFXIVClassic_Map_Server | ||||
|             ConfigConstants.OPTIONS_BINDIP =        configIni.GetValue("General", "server_ip", "127.0.0.1"); | ||||
|             ConfigConstants.OPTIONS_PORT =          configIni.GetValue("General", "server_port", "54992"); | ||||
|             ConfigConstants.OPTIONS_TIMESTAMP =     configIni.GetValue("General", "showtimestamp", "true").ToLower().Equals("true"); | ||||
|             ConfigConstants.OPTIONS_LOGPATH =       configIni.GetValue("General", "log_path", "./logs/"); | ||||
|             ConfigConstants.OPTIONS_LOGPATH =       configIni.GetValue("General", "log_path", "./logs/"); | ||||
|             ConfigConstants.OPTIONS_LOGFILE =       configIni.GetValue("General", "log_file_name", String.Format("map_{0}_{1}.log", OPTIONS_BINDIP, OPTIONS_PORT)); | ||||
|             ConfigConstants.OPTIONS_LOGLEVEL =      configIni.GetValue("General", "log_level", "127"); | ||||
|  | ||||
|             ConfigConstants.DATABASE_WORLDID =      configIni.GetValue("Database", "worldid", (uint)0); | ||||
|             ConfigConstants.DATABASE_WORLDID =      UInt32.Parse(configIni.GetValue("Database", "worldid", "0")); | ||||
|             ConfigConstants.DATABASE_HOST =         configIni.GetValue("Database", "host", ""); | ||||
|             ConfigConstants.DATABASE_PORT =         configIni.GetValue("Database", "port", ""); | ||||
|             ConfigConstants.DATABASE_NAME =         configIni.GetValue("Database", "database", ""); | ||||
|   | ||||
| @@ -3,7 +3,7 @@ using Dapper; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.utils; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using FFXIVClassic_Map_Server.packets.send.player; | ||||
| @@ -37,7 +37,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -59,7 +59,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -82,7 +82,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -138,7 +138,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -196,7 +196,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -232,7 +232,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -274,7 +274,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -308,7 +308,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -322,7 +322,7 @@ namespace FFXIVClassic_Map_Server | ||||
|             int slot = player.getQuestSlot(quest.actorId); | ||||
|             if (slot == -1) | ||||
|             { | ||||
|                 Log.Error(String.Format("Tried saving quest player didn't have: Player: {0:x}, QuestId: {0:x}", player.actorId, quest.actorId)); | ||||
|                 Program.Log.Error(String.Format("Tried saving quest player didn't have: Player: {0:x}, QuestId: {0:x}", player.actorId, quest.actorId)); | ||||
|                 return; | ||||
|             } | ||||
|             else | ||||
| @@ -360,7 +360,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -790,7 +790,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -834,7 +834,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -872,7 +872,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -905,7 +905,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -976,7 +976,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -1032,7 +1032,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -1067,7 +1067,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -1107,7 +1107,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -1148,7 +1148,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -1188,7 +1188,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -1225,7 +1225,7 @@ namespace FFXIVClassic_Map_Server | ||||
|  | ||||
|                             if (offset < 0 || offset >= cheevosPacket.achievementFlags.Length) | ||||
|                             { | ||||
|                                 Log.Error("SQL Error; achievement flag offset id out of range: " + offset); | ||||
|                                 Program.Log.Error("SQL Error; achievement flag offset id out of range: " + offset); | ||||
|                                 continue; | ||||
|                             } | ||||
|                             cheevosPacket.achievementFlags[offset] = true;                              | ||||
| @@ -1234,7 +1234,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
|   | ||||
| @@ -42,6 +42,10 @@ | ||||
|       <HintPath>..\packages\Dapper.1.42\lib\net45\Dapper.dll</HintPath> | ||||
|       <Private>True</Private> | ||||
|     </Reference> | ||||
|     <Reference Include="FFXIVClassic.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | ||||
|       <SpecificVersion>False</SpecificVersion> | ||||
|       <HintPath>..\FFXIVClassic Common Class Lib\bin\Debug\FFXIVClassic.Common.dll</HintPath> | ||||
|     </Reference> | ||||
|     <Reference Include="MoonSharp.Interpreter"> | ||||
|       <HintPath>..\packages\MoonSharp.1.2.1.0\lib\net40-client\MoonSharp.Interpreter.dll</HintPath> | ||||
|     </Reference> | ||||
| @@ -83,12 +87,6 @@ | ||||
|     <Compile Include="actors\world\WorldMaster.cs" /> | ||||
|     <Compile Include="ClientConnection.cs" /> | ||||
|     <Compile Include="CommandProcessor.cs" /> | ||||
|     <Compile Include="common\Bitfield.cs" /> | ||||
|     <Compile Include="common\Blowfish.cs" /> | ||||
|     <Compile Include="common\EfficientHashTables.cs" /> | ||||
|     <Compile Include="common\Log.cs" /> | ||||
|     <Compile Include="common\STA_INIFile.cs" /> | ||||
|     <Compile Include="common\Utils.cs" /> | ||||
|     <Compile Include="ConfigConstants.cs" /> | ||||
|     <Compile Include="Database.cs" /> | ||||
|     <Compile Include="actors\Actor.cs" /> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| @@ -127,9 +127,9 @@ namespace FFXIVClassic_Map_Server | ||||
|                     player.setConnection(packet.header.connectionType, client); | ||||
|  | ||||
|                     if (packet.header.connectionType == BasePacket.TYPE_ZONE) | ||||
|                         Log.Debug(String.Format("Got {0} connection for ActorID {1} @ {2}.", "zone", actorID, client.getAddress())); | ||||
|                         Program.Log.Debug(String.Format("Got {0} connection for ActorID {1} @ {2}.", "zone", actorID, client.getAddress())); | ||||
|                     else if (packet.header.connectionType == BasePacket.TYPE_CHAT) | ||||
|                         Log.Debug(String.Format("Got {0} connection for ActorID {1} @ {2}.", "chat", actorID, client.getAddress())); | ||||
|                         Program.Log.Debug(String.Format("Got {0} connection for ActorID {1} @ {2}.", "chat", actorID, client.getAddress())); | ||||
|  | ||||
|                     //Create player actor | ||||
|                     reply1.debugPrintPacket(); | ||||
| @@ -180,7 +180,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                         //Chat Received | ||||
|                         case 0x0003: | ||||
|                             ChatMessagePacket chatMessage = new ChatMessagePacket(subpacket.data); | ||||
|                             Log.Info(String.Format("Got type-{5} message: {0} @ {1}, {2}, {3}, Rot: {4}", chatMessage.message, chatMessage.posX, chatMessage.posY, chatMessage.posZ, chatMessage.posRot, chatMessage.logType)); | ||||
|                             Program.Log.Info(String.Format("Got type-{5} message: {0} @ {1}, {2}, {3}, Rot: {4}", chatMessage.message, chatMessage.posX, chatMessage.posY, chatMessage.posZ, chatMessage.posRot, chatMessage.logType)); | ||||
|                             subpacket.debugPrintSubPacket(); | ||||
|  | ||||
|                             if (chatMessage.message.StartsWith("!")) | ||||
| @@ -238,7 +238,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                                 player.errorMessage += eventStart.error; | ||||
|  | ||||
|                                 if (eventStart.errorIndex == eventStart.errorNum - 1) | ||||
|                                     Log.Error("\n"+player.errorMessage); | ||||
|                                     Program.Log.Error("\n"+player.errorMessage); | ||||
|  | ||||
|  | ||||
|                                 break; | ||||
| @@ -268,7 +268,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                                         ownerActor = player.getActor().currentDirector; | ||||
|                                     else | ||||
|                                     { | ||||
|                                         Log.Debug(String.Format("\n===Event START===\nCould not find actor 0x{0:X} for event started by caller: 0x{1:X}\nEvent Starter: {2}\nParams: {3}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.triggerName, LuaUtils.dumpParams(eventStart.luaParams))); | ||||
|                                         Program.Log.Debug(String.Format("\n===Event START===\nCould not find actor 0x{0:X} for event started by caller: 0x{1:X}\nEvent Starter: {2}\nParams: {3}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.triggerName, LuaUtils.dumpParams(eventStart.luaParams))); | ||||
|                                         break; | ||||
|                                     } | ||||
|                                 }                                     | ||||
| @@ -276,7 +276,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                              | ||||
|                             LuaEngine.doActorOnEventStarted(player.getActor(), ownerActor, eventStart); | ||||
|  | ||||
|                             Log.Debug(String.Format("\n===Event START===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nEvent Starter: {4}\nParams: {5}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.val1, eventStart.val2, eventStart.triggerName, LuaUtils.dumpParams(eventStart.luaParams))); | ||||
|                             Program.Log.Debug(String.Format("\n===Event START===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nEvent Starter: {4}\nParams: {5}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.val1, eventStart.val2, eventStart.triggerName, LuaUtils.dumpParams(eventStart.luaParams))); | ||||
|                             break; | ||||
|                         //Unknown, happens at npc spawn and cutscene play???? | ||||
|                         case 0x00CE: | ||||
| @@ -285,7 +285,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                         case 0x012E: | ||||
|                             subpacket.debugPrintSubPacket(); | ||||
|                             EventUpdatePacket eventUpdate = new EventUpdatePacket(subpacket.data); | ||||
|                             Log.Debug(String.Format("\n===Event UPDATE===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nStep: 0x{4:X}\nParams: {5}", eventUpdate.actorID, eventUpdate.scriptOwnerActorID, eventUpdate.val1, eventUpdate.val2, eventUpdate.step, LuaUtils.dumpParams(eventUpdate.luaParams))); | ||||
|                             Program.Log.Debug(String.Format("\n===Event UPDATE===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nStep: 0x{4:X}\nParams: {5}", eventUpdate.actorID, eventUpdate.scriptOwnerActorID, eventUpdate.val1, eventUpdate.val2, eventUpdate.step, LuaUtils.dumpParams(eventUpdate.luaParams))); | ||||
|  | ||||
|                             //Is it a static actor? If not look in the player's instance | ||||
|                             Actor updateOwnerActor = Server.getStaticActors(player.getActor().currentEventOwner); | ||||
| @@ -398,7 +398,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                         //GM Ticket Sent | ||||
|                         case 0x01D5: | ||||
|                             GMSupportTicketPacket gmTicket = new GMSupportTicketPacket(subpacket.data); | ||||
|                             Log.Info("Got GM Ticket: \n" + gmTicket.ticketTitle + "\n" + gmTicket.ticketBody); | ||||
|                             Program.Log.Info("Got GM Ticket: \n" + gmTicket.ticketTitle + "\n" + gmTicket.ticketBody); | ||||
|                             client.queuePacket(BasePacket.createPacket(GMTicketSentResponsePacket.buildPacket(player.actorID, true), true, false)); | ||||
|                             break; | ||||
|                         //Request to end ticket | ||||
| @@ -406,7 +406,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                             client.queuePacket(BasePacket.createPacket(EndGMTicketPacket.buildPacket(player.actorID), true, false)); | ||||
|                             break; | ||||
|                         default: | ||||
|                             Log.Debug(String.Format("Unknown command 0x{0:X} received.", subpacket.gameMessage.opcode)); | ||||
|                             Program.Log.Debug(String.Format("Unknown command 0x{0:X} received.", subpacket.gameMessage.opcode)); | ||||
|                             subpacket.debugPrintSubPacket(); | ||||
|                             break; | ||||
|                     } | ||||
|   | ||||
| @@ -1,14 +1,17 @@ | ||||
| using System; | ||||
| using System.Diagnostics; | ||||
| using System.Threading; | ||||
| using MySql.Data.MySqlClient; | ||||
| using System.Reflection; | ||||
| using FFXIVClassic_Map_Server.dataobjects; | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server | ||||
| { | ||||
|     class Program | ||||
|     { | ||||
|         public static Log Log; | ||||
|  | ||||
|         static void Main(string[] args) | ||||
|         { | ||||
| #if DEBUG | ||||
| @@ -21,14 +24,29 @@ namespace FFXIVClassic_Map_Server | ||||
|             if (!ConfigConstants.load()) | ||||
|                 startServer = false; | ||||
|  | ||||
|             Log.Info("---------FFXIV 1.0 Map Server---------");             | ||||
|             Log = new Log(ConfigConstants.OPTIONS_LOGPATH, ConfigConstants.OPTIONS_LOGFILE, Int32.Parse(ConfigConstants.OPTIONS_LOGLEVEL)); | ||||
|  | ||||
|             Thread thread = new Thread(() => | ||||
|             { | ||||
|                 while (true) | ||||
|                 { | ||||
|                     if (Log.LogQueue.Count > 0) | ||||
|                     { | ||||
|                         var message = Program.Log.LogQueue.Dequeue(); | ||||
|                         Program.Log.WriteMessage(message.Item1, message.Item2); | ||||
|                     } | ||||
|                 } | ||||
|             }); | ||||
|             thread.Start(); | ||||
|  | ||||
|             Program.Log.Info("---------FFXIV 1.0 Map Server---------");             | ||||
|  | ||||
|             Assembly assem = Assembly.GetExecutingAssembly(); | ||||
|             Version vers = assem.GetName().Version; | ||||
|             Log.Info("Version: " + vers.ToString()); | ||||
|             Program.Log.Info("Version: " + vers.ToString()); | ||||
|  | ||||
|             //Test DB Connection | ||||
|             Log.Info("Testing DB connection... "); | ||||
|             Program.Log.Info("Testing DB connection... "); | ||||
|             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 | ||||
| @@ -36,11 +54,11 @@ namespace FFXIVClassic_Map_Server | ||||
|                     conn.Open(); | ||||
|                     conn.Close(); | ||||
|  | ||||
|                     Log.Status("[OK]"); | ||||
|                     Program.Log.Status("[OK]"); | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                     startServer = false;  | ||||
|                 } | ||||
|             } | ||||
| @@ -48,9 +66,9 @@ namespace FFXIVClassic_Map_Server | ||||
|             //Check World ID | ||||
|             DBWorld thisWorld = Database.getServer(ConfigConstants.DATABASE_WORLDID); | ||||
|             if (thisWorld != null) | ||||
|                 Log.Info(String.Format("Successfully pulled world info from DB. Server name is {0}.", thisWorld.name)); | ||||
|                 Program.Log.Info(String.Format("Successfully pulled world info from DB. Server name is {0}.", thisWorld.name)); | ||||
|             else | ||||
|                 Log.Info("World info could not be retrieved from the DB. Welcome and MOTD will not be displayed."); | ||||
|                 Program.Log.Info("World info could not be retrieved from the DB. Welcome and MOTD will not be displayed."); | ||||
|  | ||||
|             //Start server if A-OK | ||||
|             if (startServer) | ||||
| @@ -66,7 +84,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             Log.Info("Press any key to continue..."); | ||||
|             Program.Log.Info("Press any key to continue..."); | ||||
|             Console.ReadKey(); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ using System.Net.Sockets; | ||||
| using System.Threading; | ||||
| using FFXIVClassic_Map_Server.dataobjects; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.Actors; | ||||
| using FFXIVClassic_Map_Server.lua; | ||||
|  | ||||
| @@ -39,7 +39,7 @@ namespace FFXIVClassic_Map_Server | ||||
|  | ||||
|         private void connectionHealth() | ||||
|         { | ||||
|             Log.Info(String.Format("Connection Health thread started; it will run every {0} seconds.", HEALTH_THREAD_SLEEP_TIME)); | ||||
|             Program.Log.Info(String.Format("Connection Health thread started; it will run every {0} seconds.", HEALTH_THREAD_SLEEP_TIME)); | ||||
|             while (!killHealthThread) | ||||
|             { | ||||
|                 lock (mConnectedPlayerList) | ||||
| @@ -77,7 +77,7 @@ namespace FFXIVClassic_Map_Server | ||||
|             mStaticActors = new StaticActors(STATIC_ACTORS_PATH); | ||||
|  | ||||
|             gamedataItems = Database.getItemGamedata(); | ||||
|             Log.Info(String.Format("Loaded {0} items.", gamedataItems.Count)); | ||||
|             Program.Log.Info(String.Format("Loaded {0} items.", gamedataItems.Count)); | ||||
|  | ||||
|             mWorldManager = new WorldManager(this); | ||||
|             mWorldManager.LoadZoneList(); | ||||
| @@ -113,7 +113,7 @@ namespace FFXIVClassic_Map_Server | ||||
|             } | ||||
|  | ||||
|             Console.ForegroundColor = ConsoleColor.White; | ||||
|             Log.Debug(String.Format("Map Server has started @ {0}:{1}", (mServerSocket.LocalEndPoint as IPEndPoint).Address, (mServerSocket.LocalEndPoint as IPEndPoint).Port)); | ||||
|             Program.Log.Debug(String.Format("Map Server has started @ {0}:{1}", (mServerSocket.LocalEndPoint as IPEndPoint).Address, (mServerSocket.LocalEndPoint as IPEndPoint).Port)); | ||||
|             Console.ForegroundColor = ConsoleColor.Gray; | ||||
|  | ||||
|             mProcessor = new PacketProcessor(this, mConnectedPlayerList, mConnectionList); | ||||
| @@ -150,7 +150,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     mConnectionList.Add(conn); | ||||
|                 } | ||||
|  | ||||
|                 Log.Status(String.Format("Connection {0}:{1} has connected.", (conn.socket.RemoteEndPoint as IPEndPoint).Address, (conn.socket.RemoteEndPoint as IPEndPoint).Port)); | ||||
|                 Program.Log.Status(String.Format("Connection {0}:{1} has connected.", (conn.socket.RemoteEndPoint as IPEndPoint).Address, (conn.socket.RemoteEndPoint as IPEndPoint).Port)); | ||||
|                 //Queue recieving of data from the connection | ||||
|                 conn.socket.BeginReceive(conn.buffer, 0, conn.buffer.Length, SocketFlags.None, new AsyncCallback(receiveCallback), conn); | ||||
|                 //Queue the accept of the next incomming connection | ||||
| @@ -217,7 +217,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                     mConnectionList.Remove(conn); | ||||
|                 } | ||||
|                 if (conn.connType == BasePacket.TYPE_ZONE) | ||||
|                     Log.Status(String.Format("{0} has disconnected.", conn.owner == 0 ? conn.getAddress() : "User " + conn.owner)); | ||||
|                     Program.Log.Status(String.Format("{0} has disconnected.", conn.owner == 0 ? conn.getAddress() : "User " + conn.owner)); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
| @@ -261,7 +261,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     Log.Status(String.Format("{0} has disconnected.", conn.owner == 0 ? conn.getAddress() : "User " + conn.owner)); | ||||
|                     Program.Log.Status(String.Format("{0} has disconnected.", conn.owner == 0 ? conn.getAddress() : "User " + conn.owner)); | ||||
|  | ||||
|                     lock (mConnectionList) | ||||
|                     { | ||||
| @@ -273,7 +273,7 @@ namespace FFXIVClassic_Map_Server | ||||
|             { | ||||
|                 if (conn.socket != null) | ||||
|                 { | ||||
|                     Log.Status(String.Format("{0} has disconnected.", conn.owner == 0 ? conn.getAddress() : "User " + conn.owner)); | ||||
|                     Program.Log.Status(String.Format("{0} has disconnected.", conn.owner == 0 ? conn.getAddress() : "User " + conn.owner)); | ||||
|  | ||||
|                     lock (mConnectionList) | ||||
|                     { | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.actors.area; | ||||
| using FFXIVClassic_Map_Server.Actors; | ||||
| using FFXIVClassic_Map_Server.lua; | ||||
| @@ -67,7 +67,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|  | ||||
|                 } | ||||
|                 finally | ||||
| @@ -117,7 +117,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -125,7 +125,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             Log.Info(String.Format("Loaded {0} zones and {1} private areas.", count1, count2)); | ||||
|             Program.Log.Info(String.Format("Loaded {0} zones and {1} private areas.", count1, count2)); | ||||
|         } | ||||
|  | ||||
|         public void LoadZoneEntranceList() | ||||
| @@ -170,7 +170,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -178,7 +178,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             Log.Info(String.Format("Loaded {0} zone spawn locations.", count)); | ||||
|             Program.Log.Info(String.Format("Loaded {0} zone spawn locations.", count)); | ||||
|         } | ||||
|  | ||||
|         public void LoadNPCs() | ||||
| @@ -242,7 +242,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -250,7 +250,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             Log.Info(String.Format("Loaded {0} npc(s).", count)); | ||||
|             Program.Log.Info(String.Format("Loaded {0} npc(s).", count)); | ||||
|         } | ||||
|  | ||||
|         public void LoadNPCs(uint zoneId) | ||||
| @@ -315,7 +315,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -323,7 +323,7 @@ namespace FFXIVClassic_Map_Server | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             Log.Info(String.Format("Loaded {0} npc(s).", count)); | ||||
|             Program.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. | ||||
| @@ -354,7 +354,7 @@ namespace FFXIVClassic_Map_Server | ||||
|         { | ||||
|             if (!zoneEntranceList.ContainsKey(zoneEntrance)) | ||||
|             { | ||||
|                 Log.Error("Given zone entrance was not found: " + zoneEntrance); | ||||
|                 Program.Log.Error("Given zone entrance was not found: " + zoneEntrance); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
| @@ -410,7 +410,7 @@ namespace FFXIVClassic_Map_Server | ||||
|         { | ||||
|             if (!zoneEntranceList.ContainsKey(zoneEntrance)) | ||||
|             { | ||||
|                 Log.Error("Given zone entrance was not found: " + zoneEntrance); | ||||
|                 Program.Log.Error("Given zone entrance was not found: " + zoneEntrance); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
| @@ -89,9 +89,9 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|                 } | ||||
|             } | ||||
|             catch(FileNotFoundException e) | ||||
|             { Log.Error("Could not find staticactors file."); return false; } | ||||
|             { Program.Log.Error("Could not find staticactors file."); return false; } | ||||
|  | ||||
|             Log.Info(String.Format("Loaded {0} static actors.", mStaticActors.Count())); | ||||
|             Program.Log.Info(String.Format("Loaded {0} static actors.", mStaticActors.Count())); | ||||
|  | ||||
|             return true; | ||||
|         } | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using FFXIVClassic_Map_Server.actors; | ||||
| using FFXIVClassic_Map_Server.Actors.Chara; | ||||
| @@ -238,7 +238,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using FFXIVClassic_Map_Server.actors.chara.player; | ||||
| using FFXIVClassic_Map_Server.actors.director; | ||||
| @@ -642,7 +642,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             Database.savePlayerPlayTime(this); | ||||
|             Database.savePlayerPosition(this); | ||||
|  | ||||
|             Log.Info(String.Format("{0} has been logged out and saved.", this.customDisplayName)); | ||||
|             Program.Log.Info(String.Format("{0} has been logged out and saved.", this.customDisplayName)); | ||||
|         } | ||||
|  | ||||
|         public Area getZone() | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using Newtonsoft.Json; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| @@ -68,7 +68,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|         { | ||||
|             if (bitIndex >= 32) | ||||
|             { | ||||
|                 Log.Error(String.Format("Tried to access bit flag >= 32 for questId: {0}", actorId)); | ||||
|                 Program.Log.Error(String.Format("Tried to access bit flag >= 32 for questId: {0}", actorId)); | ||||
|                 return; | ||||
|             } | ||||
|              | ||||
| @@ -86,7 +86,7 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|         { | ||||
|             if (bitIndex >= 32) | ||||
|             { | ||||
|                 Log.Error(String.Format("Tried to access bit flag >= 32 for questId: {0}", actorId)); | ||||
|                 Program.Log.Error(String.Format("Tried to access bit flag >= 32 for questId: {0}", actorId)); | ||||
|                 return false; | ||||
|             } | ||||
|             else | ||||
|   | ||||
| @@ -1,74 +0,0 @@ | ||||
| using System; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.common | ||||
| { | ||||
|     [global::System.AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] | ||||
|     sealed class BitfieldLengthAttribute : Attribute | ||||
|     { | ||||
|         uint length; | ||||
|  | ||||
|         public BitfieldLengthAttribute(uint length) | ||||
|         { | ||||
|             this.length = length; | ||||
|         } | ||||
|  | ||||
|         public uint Length { get { return length; } } | ||||
|     } | ||||
|  | ||||
|     static class PrimitiveConversion | ||||
|     { | ||||
|         public static UInt32 ToUInt32<T>(T t) where T : struct | ||||
|         { | ||||
|             UInt32 r = 0; | ||||
|             int offset = 0; | ||||
|  | ||||
|             // For every field suitably attributed with a BitfieldLength | ||||
|             foreach (System.Reflection.FieldInfo f in t.GetType().GetFields()) | ||||
|             { | ||||
|                 object[] attrs = f.GetCustomAttributes(typeof(BitfieldLengthAttribute), false); | ||||
|                 if (attrs.Length == 1) | ||||
|                 { | ||||
|                     uint fieldLength = ((BitfieldLengthAttribute)attrs[0]).Length; | ||||
|  | ||||
|                     // Calculate a bitmask of the desired length | ||||
|                     uint mask = 0; | ||||
|                     for (int i = 0; i < fieldLength; i++) | ||||
|                         mask |= (UInt32)1 << i; | ||||
|  | ||||
|                     r |= ((UInt32)f.GetValue(t) & mask) << offset; | ||||
|  | ||||
|                     offset += (int)fieldLength; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return r; | ||||
|         } | ||||
|  | ||||
|         public static long ToLong<T>(T t) where T : struct | ||||
|         { | ||||
|             long r = 0; | ||||
|             int offset = 0; | ||||
|  | ||||
|             // For every field suitably attributed with a BitfieldLength | ||||
|             foreach (System.Reflection.FieldInfo f in t.GetType().GetFields()) | ||||
|             { | ||||
|                 object[] attrs = f.GetCustomAttributes(typeof(BitfieldLengthAttribute), false); | ||||
|                 if (attrs.Length == 1) | ||||
|                 { | ||||
|                     uint fieldLength = ((BitfieldLengthAttribute)attrs[0]).Length; | ||||
|  | ||||
|                     // Calculate a bitmask of the desired length | ||||
|                     long mask = 0; | ||||
|                     for (int i = 0; i < fieldLength; i++) | ||||
|                         mask |= 1 << i; | ||||
|  | ||||
|                     r |= ((UInt32)f.GetValue(t) & mask) << offset; | ||||
|  | ||||
|                     offset += (int)fieldLength; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return r; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,456 +0,0 @@ | ||||
| using System; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.common | ||||
| { | ||||
|     public class Blowfish | ||||
|     {    | ||||
|         const int N = 16; | ||||
|         UInt32 [] P = new uint[16 + 2]; | ||||
|         UInt32 [,] S = new UInt32[4,256]; | ||||
|  | ||||
|         #region P and S Values | ||||
|  | ||||
|         byte [] P_values = | ||||
|         { | ||||
| 	        0x88, 0x6A, 0x3F, 0x24, 0xD3, 0x08, 0xA3, 0x85, 0x2E, 0x8A, 0x19, 0x13, 0x44, 0x73, 0x70, 0x03, | ||||
| 	        0x22, 0x38, 0x09, 0xA4, 0xD0, 0x31, 0x9F, 0x29, 0x98, 0xFA, 0x2E, 0x08, 0x89, 0x6C, 0x4E, 0xEC, | ||||
| 	        0xE6, 0x21, 0x28, 0x45, 0x77, 0x13, 0xD0, 0x38, 0xCF, 0x66, 0x54, 0xBE, 0x6C, 0x0C, 0xE9, 0x34, | ||||
| 	        0xB7, 0x29, 0xAC, 0xC0, 0xDD, 0x50, 0x7C, 0xC9, 0xB5, 0xD5, 0x84, 0x3F, 0x17, 0x09, 0x47, 0xB5, | ||||
| 	        0xD9, 0xD5, 0x16, 0x92, 0x1B, 0xFB, 0x79, 0x89 | ||||
|         }; | ||||
|  | ||||
|         byte [] S_values = | ||||
|         { | ||||
| 	        0xA6, 0x0B, 0x31, 0xD1, 0xAC, 0xB5, 0xDF, 0x98, 0xDB, 0x72, 0xFD, 0x2F, 0xB7, 0xDF, 0x1A, 0xD0, | ||||
| 	        0xED, 0xAF, 0xE1, 0xB8, 0x96, 0x7E, 0x26, 0x6A, 0x45, 0x90, 0x7C, 0xBA, 0x99, 0x7F, 0x2C, 0xF1, | ||||
| 	        0x47, 0x99, 0xA1, 0x24, 0xF7, 0x6C, 0x91, 0xB3, 0xE2, 0xF2, 0x01, 0x08, 0x16, 0xFC, 0x8E, 0x85, | ||||
| 	        0xD8, 0x20, 0x69, 0x63, 0x69, 0x4E, 0x57, 0x71, 0xA3, 0xFE, 0x58, 0xA4, 0x7E, 0x3D, 0x93, 0xF4, | ||||
| 	        0x8F, 0x74, 0x95, 0x0D, 0x58, 0xB6, 0x8E, 0x72, 0x58, 0xCD, 0x8B, 0x71, 0xEE, 0x4A, 0x15, 0x82, | ||||
| 	        0x1D, 0xA4, 0x54, 0x7B, 0xB5, 0x59, 0x5A, 0xC2, 0x39, 0xD5, 0x30, 0x9C, 0x13, 0x60, 0xF2, 0x2A, | ||||
| 	        0x23, 0xB0, 0xD1, 0xC5, 0xF0, 0x85, 0x60, 0x28, 0x18, 0x79, 0x41, 0xCA, 0xEF, 0x38, 0xDB, 0xB8, | ||||
| 	        0xB0, 0xDC, 0x79, 0x8E, 0x0E, 0x18, 0x3A, 0x60, 0x8B, 0x0E, 0x9E, 0x6C, 0x3E, 0x8A, 0x1E, 0xB0, | ||||
| 	        0xC1, 0x77, 0x15, 0xD7, 0x27, 0x4B, 0x31, 0xBD, 0xDA, 0x2F, 0xAF, 0x78, 0x60, 0x5C, 0x60, 0x55, | ||||
| 	        0xF3, 0x25, 0x55, 0xE6, 0x94, 0xAB, 0x55, 0xAA, 0x62, 0x98, 0x48, 0x57, 0x40, 0x14, 0xE8, 0x63, | ||||
| 	        0x6A, 0x39, 0xCA, 0x55, 0xB6, 0x10, 0xAB, 0x2A, 0x34, 0x5C, 0xCC, 0xB4, 0xCE, 0xE8, 0x41, 0x11, | ||||
| 	        0xAF, 0x86, 0x54, 0xA1, 0x93, 0xE9, 0x72, 0x7C, 0x11, 0x14, 0xEE, 0xB3, 0x2A, 0xBC, 0x6F, 0x63, | ||||
| 	        0x5D, 0xC5, 0xA9, 0x2B, 0xF6, 0x31, 0x18, 0x74, 0x16, 0x3E, 0x5C, 0xCE, 0x1E, 0x93, 0x87, 0x9B, | ||||
| 	        0x33, 0xBA, 0xD6, 0xAF, 0x5C, 0xCF, 0x24, 0x6C, 0x81, 0x53, 0x32, 0x7A, 0x77, 0x86, 0x95, 0x28, | ||||
| 	        0x98, 0x48, 0x8F, 0x3B, 0xAF, 0xB9, 0x4B, 0x6B, 0x1B, 0xE8, 0xBF, 0xC4, 0x93, 0x21, 0x28, 0x66, | ||||
| 	        0xCC, 0x09, 0xD8, 0x61, 0x91, 0xA9, 0x21, 0xFB, 0x60, 0xAC, 0x7C, 0x48, 0x32, 0x80, 0xEC, 0x5D, | ||||
| 	        0x5D, 0x5D, 0x84, 0xEF, 0xB1, 0x75, 0x85, 0xE9, 0x02, 0x23, 0x26, 0xDC, 0x88, 0x1B, 0x65, 0xEB, | ||||
| 	        0x81, 0x3E, 0x89, 0x23, 0xC5, 0xAC, 0x96, 0xD3, 0xF3, 0x6F, 0x6D, 0x0F, 0x39, 0x42, 0xF4, 0x83, | ||||
| 	        0x82, 0x44, 0x0B, 0x2E, 0x04, 0x20, 0x84, 0xA4, 0x4A, 0xF0, 0xC8, 0x69, 0x5E, 0x9B, 0x1F, 0x9E, | ||||
| 	        0x42, 0x68, 0xC6, 0x21, 0x9A, 0x6C, 0xE9, 0xF6, 0x61, 0x9C, 0x0C, 0x67, 0xF0, 0x88, 0xD3, 0xAB, | ||||
| 	        0xD2, 0xA0, 0x51, 0x6A, 0x68, 0x2F, 0x54, 0xD8, 0x28, 0xA7, 0x0F, 0x96, 0xA3, 0x33, 0x51, 0xAB, | ||||
| 	        0x6C, 0x0B, 0xEF, 0x6E, 0xE4, 0x3B, 0x7A, 0x13, 0x50, 0xF0, 0x3B, 0xBA, 0x98, 0x2A, 0xFB, 0x7E, | ||||
| 	        0x1D, 0x65, 0xF1, 0xA1, 0x76, 0x01, 0xAF, 0x39, 0x3E, 0x59, 0xCA, 0x66, 0x88, 0x0E, 0x43, 0x82, | ||||
| 	        0x19, 0x86, 0xEE, 0x8C, 0xB4, 0x9F, 0x6F, 0x45, 0xC3, 0xA5, 0x84, 0x7D, 0xBE, 0x5E, 0x8B, 0x3B, | ||||
| 	        0xD8, 0x75, 0x6F, 0xE0, 0x73, 0x20, 0xC1, 0x85, 0x9F, 0x44, 0x1A, 0x40, 0xA6, 0x6A, 0xC1, 0x56, | ||||
| 	        0x62, 0xAA, 0xD3, 0x4E, 0x06, 0x77, 0x3F, 0x36, 0x72, 0xDF, 0xFE, 0x1B, 0x3D, 0x02, 0x9B, 0x42, | ||||
| 	        0x24, 0xD7, 0xD0, 0x37, 0x48, 0x12, 0x0A, 0xD0, 0xD3, 0xEA, 0x0F, 0xDB, 0x9B, 0xC0, 0xF1, 0x49, | ||||
| 	        0xC9, 0x72, 0x53, 0x07, 0x7B, 0x1B, 0x99, 0x80, 0xD8, 0x79, 0xD4, 0x25, 0xF7, 0xDE, 0xE8, 0xF6, | ||||
| 	        0x1A, 0x50, 0xFE, 0xE3, 0x3B, 0x4C, 0x79, 0xB6, 0xBD, 0xE0, 0x6C, 0x97, 0xBA, 0x06, 0xC0, 0x04, | ||||
| 	        0xB6, 0x4F, 0xA9, 0xC1, 0xC4, 0x60, 0x9F, 0x40, 0xC2, 0x9E, 0x5C, 0x5E, 0x63, 0x24, 0x6A, 0x19, | ||||
| 	        0xAF, 0x6F, 0xFB, 0x68, 0xB5, 0x53, 0x6C, 0x3E, 0xEB, 0xB2, 0x39, 0x13, 0x6F, 0xEC, 0x52, 0x3B, | ||||
| 	        0x1F, 0x51, 0xFC, 0x6D, 0x2C, 0x95, 0x30, 0x9B, 0x44, 0x45, 0x81, 0xCC, 0x09, 0xBD, 0x5E, 0xAF, | ||||
| 	        0x04, 0xD0, 0xE3, 0xBE, 0xFD, 0x4A, 0x33, 0xDE, 0x07, 0x28, 0x0F, 0x66, 0xB3, 0x4B, 0x2E, 0x19, | ||||
| 	        0x57, 0xA8, 0xCB, 0xC0, 0x0F, 0x74, 0xC8, 0x45, 0x39, 0x5F, 0x0B, 0xD2, 0xDB, 0xFB, 0xD3, 0xB9, | ||||
| 	        0xBD, 0xC0, 0x79, 0x55, 0x0A, 0x32, 0x60, 0x1A, 0xC6, 0x00, 0xA1, 0xD6, 0x79, 0x72, 0x2C, 0x40, | ||||
| 	        0xFE, 0x25, 0x9F, 0x67, 0xCC, 0xA3, 0x1F, 0xFB, 0xF8, 0xE9, 0xA5, 0x8E, 0xF8, 0x22, 0x32, 0xDB, | ||||
| 	        0xDF, 0x16, 0x75, 0x3C, 0x15, 0x6B, 0x61, 0xFD, 0xC8, 0x1E, 0x50, 0x2F, 0xAB, 0x52, 0x05, 0xAD, | ||||
| 	        0xFA, 0xB5, 0x3D, 0x32, 0x60, 0x87, 0x23, 0xFD, 0x48, 0x7B, 0x31, 0x53, 0x82, 0xDF, 0x00, 0x3E, | ||||
| 	        0xBB, 0x57, 0x5C, 0x9E, 0xA0, 0x8C, 0x6F, 0xCA, 0x2E, 0x56, 0x87, 0x1A, 0xDB, 0x69, 0x17, 0xDF, | ||||
| 	        0xF6, 0xA8, 0x42, 0xD5, 0xC3, 0xFF, 0x7E, 0x28, 0xC6, 0x32, 0x67, 0xAC, 0x73, 0x55, 0x4F, 0x8C, | ||||
| 	        0xB0, 0x27, 0x5B, 0x69, 0xC8, 0x58, 0xCA, 0xBB, 0x5D, 0xA3, 0xFF, 0xE1, 0xA0, 0x11, 0xF0, 0xB8, | ||||
| 	        0x98, 0x3D, 0xFA, 0x10, 0xB8, 0x83, 0x21, 0xFD, 0x6C, 0xB5, 0xFC, 0x4A, 0x5B, 0xD3, 0xD1, 0x2D, | ||||
| 	        0x79, 0xE4, 0x53, 0x9A, 0x65, 0x45, 0xF8, 0xB6, 0xBC, 0x49, 0x8E, 0xD2, 0x90, 0x97, 0xFB, 0x4B, | ||||
| 	        0xDA, 0xF2, 0xDD, 0xE1, 0x33, 0x7E, 0xCB, 0xA4, 0x41, 0x13, 0xFB, 0x62, 0xE8, 0xC6, 0xE4, 0xCE, | ||||
| 	        0xDA, 0xCA, 0x20, 0xEF, 0x01, 0x4C, 0x77, 0x36, 0xFE, 0x9E, 0x7E, 0xD0, 0xB4, 0x1F, 0xF1, 0x2B, | ||||
| 	        0x4D, 0xDA, 0xDB, 0x95, 0x98, 0x91, 0x90, 0xAE, 0x71, 0x8E, 0xAD, 0xEA, 0xA0, 0xD5, 0x93, 0x6B, | ||||
| 	        0xD0, 0xD1, 0x8E, 0xD0, 0xE0, 0x25, 0xC7, 0xAF, 0x2F, 0x5B, 0x3C, 0x8E, 0xB7, 0x94, 0x75, 0x8E, | ||||
| 	        0xFB, 0xE2, 0xF6, 0x8F, 0x64, 0x2B, 0x12, 0xF2, 0x12, 0xB8, 0x88, 0x88, 0x1C, 0xF0, 0x0D, 0x90, | ||||
| 	        0xA0, 0x5E, 0xAD, 0x4F, 0x1C, 0xC3, 0x8F, 0x68, 0x91, 0xF1, 0xCF, 0xD1, 0xAD, 0xC1, 0xA8, 0xB3, | ||||
| 	        0x18, 0x22, 0x2F, 0x2F, 0x77, 0x17, 0x0E, 0xBE, 0xFE, 0x2D, 0x75, 0xEA, 0xA1, 0x1F, 0x02, 0x8B, | ||||
| 	        0x0F, 0xCC, 0xA0, 0xE5, 0xE8, 0x74, 0x6F, 0xB5, 0xD6, 0xF3, 0xAC, 0x18, 0x99, 0xE2, 0x89, 0xCE, | ||||
| 	        0xE0, 0x4F, 0xA8, 0xB4, 0xB7, 0xE0, 0x13, 0xFD, 0x81, 0x3B, 0xC4, 0x7C, 0xD9, 0xA8, 0xAD, 0xD2, | ||||
| 	        0x66, 0xA2, 0x5F, 0x16, 0x05, 0x77, 0x95, 0x80, 0x14, 0x73, 0xCC, 0x93, 0x77, 0x14, 0x1A, 0x21, | ||||
| 	        0x65, 0x20, 0xAD, 0xE6, 0x86, 0xFA, 0xB5, 0x77, 0xF5, 0x42, 0x54, 0xC7, 0xCF, 0x35, 0x9D, 0xFB, | ||||
| 	        0x0C, 0xAF, 0xCD, 0xEB, 0xA0, 0x89, 0x3E, 0x7B, 0xD3, 0x1B, 0x41, 0xD6, 0x49, 0x7E, 0x1E, 0xAE, | ||||
| 	        0x2D, 0x0E, 0x25, 0x00, 0x5E, 0xB3, 0x71, 0x20, 0xBB, 0x00, 0x68, 0x22, 0xAF, 0xE0, 0xB8, 0x57, | ||||
| 	        0x9B, 0x36, 0x64, 0x24, 0x1E, 0xB9, 0x09, 0xF0, 0x1D, 0x91, 0x63, 0x55, 0xAA, 0xA6, 0xDF, 0x59, | ||||
| 	        0x89, 0x43, 0xC1, 0x78, 0x7F, 0x53, 0x5A, 0xD9, 0xA2, 0x5B, 0x7D, 0x20, 0xC5, 0xB9, 0xE5, 0x02, | ||||
| 	        0x76, 0x03, 0x26, 0x83, 0xA9, 0xCF, 0x95, 0x62, 0x68, 0x19, 0xC8, 0x11, 0x41, 0x4A, 0x73, 0x4E, | ||||
| 	        0xCA, 0x2D, 0x47, 0xB3, 0x4A, 0xA9, 0x14, 0x7B, 0x52, 0x00, 0x51, 0x1B, 0x15, 0x29, 0x53, 0x9A, | ||||
| 	        0x3F, 0x57, 0x0F, 0xD6, 0xE4, 0xC6, 0x9B, 0xBC, 0x76, 0xA4, 0x60, 0x2B, 0x00, 0x74, 0xE6, 0x81, | ||||
| 	        0xB5, 0x6F, 0xBA, 0x08, 0x1F, 0xE9, 0x1B, 0x57, 0x6B, 0xEC, 0x96, 0xF2, 0x15, 0xD9, 0x0D, 0x2A, | ||||
| 	        0x21, 0x65, 0x63, 0xB6, 0xB6, 0xF9, 0xB9, 0xE7, 0x2E, 0x05, 0x34, 0xFF, 0x64, 0x56, 0x85, 0xC5, | ||||
| 	        0x5D, 0x2D, 0xB0, 0x53, 0xA1, 0x8F, 0x9F, 0xA9, 0x99, 0x47, 0xBA, 0x08, 0x6A, 0x07, 0x85, 0x6E, | ||||
| 	        0xE9, 0x70, 0x7A, 0x4B, 0x44, 0x29, 0xB3, 0xB5, 0x2E, 0x09, 0x75, 0xDB, 0x23, 0x26, 0x19, 0xC4, | ||||
| 	        0xB0, 0xA6, 0x6E, 0xAD, 0x7D, 0xDF, 0xA7, 0x49, 0xB8, 0x60, 0xEE, 0x9C, 0x66, 0xB2, 0xED, 0x8F, | ||||
| 	        0x71, 0x8C, 0xAA, 0xEC, 0xFF, 0x17, 0x9A, 0x69, 0x6C, 0x52, 0x64, 0x56, 0xE1, 0x9E, 0xB1, 0xC2, | ||||
| 	        0xA5, 0x02, 0x36, 0x19, 0x29, 0x4C, 0x09, 0x75, 0x40, 0x13, 0x59, 0xA0, 0x3E, 0x3A, 0x18, 0xE4, | ||||
| 	        0x9A, 0x98, 0x54, 0x3F, 0x65, 0x9D, 0x42, 0x5B, 0xD6, 0xE4, 0x8F, 0x6B, 0xD6, 0x3F, 0xF7, 0x99, | ||||
| 	        0x07, 0x9C, 0xD2, 0xA1, 0xF5, 0x30, 0xE8, 0xEF, 0xE6, 0x38, 0x2D, 0x4D, 0xC1, 0x5D, 0x25, 0xF0, | ||||
| 	        0x86, 0x20, 0xDD, 0x4C, 0x26, 0xEB, 0x70, 0x84, 0xC6, 0xE9, 0x82, 0x63, 0x5E, 0xCC, 0x1E, 0x02, | ||||
| 	        0x3F, 0x6B, 0x68, 0x09, 0xC9, 0xEF, 0xBA, 0x3E, 0x14, 0x18, 0x97, 0x3C, 0xA1, 0x70, 0x6A, 0x6B, | ||||
| 	        0x84, 0x35, 0x7F, 0x68, 0x86, 0xE2, 0xA0, 0x52, 0x05, 0x53, 0x9C, 0xB7, 0x37, 0x07, 0x50, 0xAA, | ||||
| 	        0x1C, 0x84, 0x07, 0x3E, 0x5C, 0xAE, 0xDE, 0x7F, 0xEC, 0x44, 0x7D, 0x8E, 0xB8, 0xF2, 0x16, 0x57, | ||||
| 	        0x37, 0xDA, 0x3A, 0xB0, 0x0D, 0x0C, 0x50, 0xF0, 0x04, 0x1F, 0x1C, 0xF0, 0xFF, 0xB3, 0x00, 0x02, | ||||
| 	        0x1A, 0xF5, 0x0C, 0xAE, 0xB2, 0x74, 0xB5, 0x3C, 0x58, 0x7A, 0x83, 0x25, 0xBD, 0x21, 0x09, 0xDC, | ||||
| 	        0xF9, 0x13, 0x91, 0xD1, 0xF6, 0x2F, 0xA9, 0x7C, 0x73, 0x47, 0x32, 0x94, 0x01, 0x47, 0xF5, 0x22, | ||||
| 	        0x81, 0xE5, 0xE5, 0x3A, 0xDC, 0xDA, 0xC2, 0x37, 0x34, 0x76, 0xB5, 0xC8, 0xA7, 0xDD, 0xF3, 0x9A, | ||||
| 	        0x46, 0x61, 0x44, 0xA9, 0x0E, 0x03, 0xD0, 0x0F, 0x3E, 0xC7, 0xC8, 0xEC, 0x41, 0x1E, 0x75, 0xA4, | ||||
| 	        0x99, 0xCD, 0x38, 0xE2, 0x2F, 0x0E, 0xEA, 0x3B, 0xA1, 0xBB, 0x80, 0x32, 0x31, 0xB3, 0x3E, 0x18, | ||||
| 	        0x38, 0x8B, 0x54, 0x4E, 0x08, 0xB9, 0x6D, 0x4F, 0x03, 0x0D, 0x42, 0x6F, 0xBF, 0x04, 0x0A, 0xF6, | ||||
| 	        0x90, 0x12, 0xB8, 0x2C, 0x79, 0x7C, 0x97, 0x24, 0x72, 0xB0, 0x79, 0x56, 0xAF, 0x89, 0xAF, 0xBC, | ||||
| 	        0x1F, 0x77, 0x9A, 0xDE, 0x10, 0x08, 0x93, 0xD9, 0x12, 0xAE, 0x8B, 0xB3, 0x2E, 0x3F, 0xCF, 0xDC, | ||||
| 	        0x1F, 0x72, 0x12, 0x55, 0x24, 0x71, 0x6B, 0x2E, 0xE6, 0xDD, 0x1A, 0x50, 0x87, 0xCD, 0x84, 0x9F, | ||||
| 	        0x18, 0x47, 0x58, 0x7A, 0x17, 0xDA, 0x08, 0x74, 0xBC, 0x9A, 0x9F, 0xBC, 0x8C, 0x7D, 0x4B, 0xE9, | ||||
| 	        0x3A, 0xEC, 0x7A, 0xEC, 0xFA, 0x1D, 0x85, 0xDB, 0x66, 0x43, 0x09, 0x63, 0xD2, 0xC3, 0x64, 0xC4, | ||||
| 	        0x47, 0x18, 0x1C, 0xEF, 0x08, 0xD9, 0x15, 0x32, 0x37, 0x3B, 0x43, 0xDD, 0x16, 0xBA, 0xC2, 0x24, | ||||
| 	        0x43, 0x4D, 0xA1, 0x12, 0x51, 0xC4, 0x65, 0x2A, 0x02, 0x00, 0x94, 0x50, 0xDD, 0xE4, 0x3A, 0x13, | ||||
| 	        0x9E, 0xF8, 0xDF, 0x71, 0x55, 0x4E, 0x31, 0x10, 0xD6, 0x77, 0xAC, 0x81, 0x9B, 0x19, 0x11, 0x5F, | ||||
| 	        0xF1, 0x56, 0x35, 0x04, 0x6B, 0xC7, 0xA3, 0xD7, 0x3B, 0x18, 0x11, 0x3C, 0x09, 0xA5, 0x24, 0x59, | ||||
| 	        0xED, 0xE6, 0x8F, 0xF2, 0xFA, 0xFB, 0xF1, 0x97, 0x2C, 0xBF, 0xBA, 0x9E, 0x6E, 0x3C, 0x15, 0x1E, | ||||
| 	        0x70, 0x45, 0xE3, 0x86, 0xB1, 0x6F, 0xE9, 0xEA, 0x0A, 0x5E, 0x0E, 0x86, 0xB3, 0x2A, 0x3E, 0x5A, | ||||
| 	        0x1C, 0xE7, 0x1F, 0x77, 0xFA, 0x06, 0x3D, 0x4E, 0xB9, 0xDC, 0x65, 0x29, 0x0F, 0x1D, 0xE7, 0x99, | ||||
| 	        0xD6, 0x89, 0x3E, 0x80, 0x25, 0xC8, 0x66, 0x52, 0x78, 0xC9, 0x4C, 0x2E, 0x6A, 0xB3, 0x10, 0x9C, | ||||
| 	        0xBA, 0x0E, 0x15, 0xC6, 0x78, 0xEA, 0xE2, 0x94, 0x53, 0x3C, 0xFC, 0xA5, 0xF4, 0x2D, 0x0A, 0x1E, | ||||
| 	        0xA7, 0x4E, 0xF7, 0xF2, 0x3D, 0x2B, 0x1D, 0x36, 0x0F, 0x26, 0x39, 0x19, 0x60, 0x79, 0xC2, 0x19, | ||||
| 	        0x08, 0xA7, 0x23, 0x52, 0xB6, 0x12, 0x13, 0xF7, 0x6E, 0xFE, 0xAD, 0xEB, 0x66, 0x1F, 0xC3, 0xEA, | ||||
| 	        0x95, 0x45, 0xBC, 0xE3, 0x83, 0xC8, 0x7B, 0xA6, 0xD1, 0x37, 0x7F, 0xB1, 0x28, 0xFF, 0x8C, 0x01, | ||||
| 	        0xEF, 0xDD, 0x32, 0xC3, 0xA5, 0x5A, 0x6C, 0xBE, 0x85, 0x21, 0x58, 0x65, 0x02, 0x98, 0xAB, 0x68, | ||||
| 	        0x0F, 0xA5, 0xCE, 0xEE, 0x3B, 0x95, 0x2F, 0xDB, 0xAD, 0x7D, 0xEF, 0x2A, 0x84, 0x2F, 0x6E, 0x5B, | ||||
| 	        0x28, 0xB6, 0x21, 0x15, 0x70, 0x61, 0x07, 0x29, 0x75, 0x47, 0xDD, 0xEC, 0x10, 0x15, 0x9F, 0x61, | ||||
| 	        0x30, 0xA8, 0xCC, 0x13, 0x96, 0xBD, 0x61, 0xEB, 0x1E, 0xFE, 0x34, 0x03, 0xCF, 0x63, 0x03, 0xAA, | ||||
| 	        0x90, 0x5C, 0x73, 0xB5, 0x39, 0xA2, 0x70, 0x4C, 0x0B, 0x9E, 0x9E, 0xD5, 0x14, 0xDE, 0xAA, 0xCB, | ||||
| 	        0xBC, 0x86, 0xCC, 0xEE, 0xA7, 0x2C, 0x62, 0x60, 0xAB, 0x5C, 0xAB, 0x9C, 0x6E, 0x84, 0xF3, 0xB2, | ||||
| 	        0xAF, 0x1E, 0x8B, 0x64, 0xCA, 0xF0, 0xBD, 0x19, 0xB9, 0x69, 0x23, 0xA0, 0x50, 0xBB, 0x5A, 0x65, | ||||
| 	        0x32, 0x5A, 0x68, 0x40, 0xB3, 0xB4, 0x2A, 0x3C, 0xD5, 0xE9, 0x9E, 0x31, 0xF7, 0xB8, 0x21, 0xC0, | ||||
| 	        0x19, 0x0B, 0x54, 0x9B, 0x99, 0xA0, 0x5F, 0x87, 0x7E, 0x99, 0xF7, 0x95, 0xA8, 0x7D, 0x3D, 0x62, | ||||
| 	        0x9A, 0x88, 0x37, 0xF8, 0x77, 0x2D, 0xE3, 0x97, 0x5F, 0x93, 0xED, 0x11, 0x81, 0x12, 0x68, 0x16, | ||||
| 	        0x29, 0x88, 0x35, 0x0E, 0xD6, 0x1F, 0xE6, 0xC7, 0xA1, 0xDF, 0xDE, 0x96, 0x99, 0xBA, 0x58, 0x78, | ||||
| 	        0xA5, 0x84, 0xF5, 0x57, 0x63, 0x72, 0x22, 0x1B, 0xFF, 0xC3, 0x83, 0x9B, 0x96, 0x46, 0xC2, 0x1A, | ||||
| 	        0xEB, 0x0A, 0xB3, 0xCD, 0x54, 0x30, 0x2E, 0x53, 0xE4, 0x48, 0xD9, 0x8F, 0x28, 0x31, 0xBC, 0x6D, | ||||
| 	        0xEF, 0xF2, 0xEB, 0x58, 0xEA, 0xFF, 0xC6, 0x34, 0x61, 0xED, 0x28, 0xFE, 0x73, 0x3C, 0x7C, 0xEE, | ||||
| 	        0xD9, 0x14, 0x4A, 0x5D, 0xE3, 0xB7, 0x64, 0xE8, 0x14, 0x5D, 0x10, 0x42, 0xE0, 0x13, 0x3E, 0x20, | ||||
| 	        0xB6, 0xE2, 0xEE, 0x45, 0xEA, 0xAB, 0xAA, 0xA3, 0x15, 0x4F, 0x6C, 0xDB, 0xD0, 0x4F, 0xCB, 0xFA, | ||||
| 	        0x42, 0xF4, 0x42, 0xC7, 0xB5, 0xBB, 0x6A, 0xEF, 0x1D, 0x3B, 0x4F, 0x65, 0x05, 0x21, 0xCD, 0x41, | ||||
| 	        0x9E, 0x79, 0x1E, 0xD8, 0xC7, 0x4D, 0x85, 0x86, 0x6A, 0x47, 0x4B, 0xE4, 0x50, 0x62, 0x81, 0x3D, | ||||
| 	        0xF2, 0xA1, 0x62, 0xCF, 0x46, 0x26, 0x8D, 0x5B, 0xA0, 0x83, 0x88, 0xFC, 0xA3, 0xB6, 0xC7, 0xC1, | ||||
| 	        0xC3, 0x24, 0x15, 0x7F, 0x92, 0x74, 0xCB, 0x69, 0x0B, 0x8A, 0x84, 0x47, 0x85, 0xB2, 0x92, 0x56, | ||||
| 	        0x00, 0xBF, 0x5B, 0x09, 0x9D, 0x48, 0x19, 0xAD, 0x74, 0xB1, 0x62, 0x14, 0x00, 0x0E, 0x82, 0x23, | ||||
| 	        0x2A, 0x8D, 0x42, 0x58, 0xEA, 0xF5, 0x55, 0x0C, 0x3E, 0xF4, 0xAD, 0x1D, 0x61, 0x70, 0x3F, 0x23, | ||||
| 	        0x92, 0xF0, 0x72, 0x33, 0x41, 0x7E, 0x93, 0x8D, 0xF1, 0xEC, 0x5F, 0xD6, 0xDB, 0x3B, 0x22, 0x6C, | ||||
| 	        0x59, 0x37, 0xDE, 0x7C, 0x60, 0x74, 0xEE, 0xCB, 0xA7, 0xF2, 0x85, 0x40, 0x6E, 0x32, 0x77, 0xCE, | ||||
| 	        0x84, 0x80, 0x07, 0xA6, 0x9E, 0x50, 0xF8, 0x19, 0x55, 0xD8, 0xEF, 0xE8, 0x35, 0x97, 0xD9, 0x61, | ||||
| 	        0xAA, 0xA7, 0x69, 0xA9, 0xC2, 0x06, 0x0C, 0xC5, 0xFC, 0xAB, 0x04, 0x5A, 0xDC, 0xCA, 0x0B, 0x80, | ||||
| 	        0x2E, 0x7A, 0x44, 0x9E, 0x84, 0x34, 0x45, 0xC3, 0x05, 0x67, 0xD5, 0xFD, 0xC9, 0x9E, 0x1E, 0x0E, | ||||
| 	        0xD3, 0xDB, 0x73, 0xDB, 0xCD, 0x88, 0x55, 0x10, 0x79, 0xDA, 0x5F, 0x67, 0x40, 0x43, 0x67, 0xE3, | ||||
| 	        0x65, 0x34, 0xC4, 0xC5, 0xD8, 0x38, 0x3E, 0x71, 0x9E, 0xF8, 0x28, 0x3D, 0x20, 0xFF, 0x6D, 0xF1, | ||||
| 	        0xE7, 0x21, 0x3E, 0x15, 0x4A, 0x3D, 0xB0, 0x8F, 0x2B, 0x9F, 0xE3, 0xE6, 0xF7, 0xAD, 0x83, 0xDB, | ||||
| 	        0x68, 0x5A, 0x3D, 0xE9, 0xF7, 0x40, 0x81, 0x94, 0x1C, 0x26, 0x4C, 0xF6, 0x34, 0x29, 0x69, 0x94, | ||||
| 	        0xF7, 0x20, 0x15, 0x41, 0xF7, 0xD4, 0x02, 0x76, 0x2E, 0x6B, 0xF4, 0xBC, 0x68, 0x00, 0xA2, 0xD4, | ||||
| 	        0x71, 0x24, 0x08, 0xD4, 0x6A, 0xF4, 0x20, 0x33, 0xB7, 0xD4, 0xB7, 0x43, 0xAF, 0x61, 0x00, 0x50, | ||||
| 	        0x2E, 0xF6, 0x39, 0x1E, 0x46, 0x45, 0x24, 0x97, 0x74, 0x4F, 0x21, 0x14, 0x40, 0x88, 0x8B, 0xBF, | ||||
| 	        0x1D, 0xFC, 0x95, 0x4D, 0xAF, 0x91, 0xB5, 0x96, 0xD3, 0xDD, 0xF4, 0x70, 0x45, 0x2F, 0xA0, 0x66, | ||||
| 	        0xEC, 0x09, 0xBC, 0xBF, 0x85, 0x97, 0xBD, 0x03, 0xD0, 0x6D, 0xAC, 0x7F, 0x04, 0x85, 0xCB, 0x31, | ||||
| 	        0xB3, 0x27, 0xEB, 0x96, 0x41, 0x39, 0xFD, 0x55, 0xE6, 0x47, 0x25, 0xDA, 0x9A, 0x0A, 0xCA, 0xAB, | ||||
| 	        0x25, 0x78, 0x50, 0x28, 0xF4, 0x29, 0x04, 0x53, 0xDA, 0x86, 0x2C, 0x0A, 0xFB, 0x6D, 0xB6, 0xE9, | ||||
| 	        0x62, 0x14, 0xDC, 0x68, 0x00, 0x69, 0x48, 0xD7, 0xA4, 0xC0, 0x0E, 0x68, 0xEE, 0x8D, 0xA1, 0x27, | ||||
| 	        0xA2, 0xFE, 0x3F, 0x4F, 0x8C, 0xAD, 0x87, 0xE8, 0x06, 0xE0, 0x8C, 0xB5, 0xB6, 0xD6, 0xF4, 0x7A, | ||||
| 	        0x7C, 0x1E, 0xCE, 0xAA, 0xEC, 0x5F, 0x37, 0xD3, 0x99, 0xA3, 0x78, 0xCE, 0x42, 0x2A, 0x6B, 0x40, | ||||
| 	        0x35, 0x9E, 0xFE, 0x20, 0xB9, 0x85, 0xF3, 0xD9, 0xAB, 0xD7, 0x39, 0xEE, 0x8B, 0x4E, 0x12, 0x3B, | ||||
| 	        0xF7, 0xFA, 0xC9, 0x1D, 0x56, 0x18, 0x6D, 0x4B, 0x31, 0x66, 0xA3, 0x26, 0xB2, 0x97, 0xE3, 0xEA, | ||||
| 	        0x74, 0xFA, 0x6E, 0x3A, 0x32, 0x43, 0x5B, 0xDD, 0xF7, 0xE7, 0x41, 0x68, 0xFB, 0x20, 0x78, 0xCA, | ||||
| 	        0x4E, 0xF5, 0x0A, 0xFB, 0x97, 0xB3, 0xFE, 0xD8, 0xAC, 0x56, 0x40, 0x45, 0x27, 0x95, 0x48, 0xBA, | ||||
| 	        0x3A, 0x3A, 0x53, 0x55, 0x87, 0x8D, 0x83, 0x20, 0xB7, 0xA9, 0x6B, 0xFE, 0x4B, 0x95, 0x96, 0xD0, | ||||
| 	        0xBC, 0x67, 0xA8, 0x55, 0x58, 0x9A, 0x15, 0xA1, 0x63, 0x29, 0xA9, 0xCC, 0x33, 0xDB, 0xE1, 0x99, | ||||
| 	        0x56, 0x4A, 0x2A, 0xA6, 0xF9, 0x25, 0x31, 0x3F, 0x1C, 0x7E, 0xF4, 0x5E, 0x7C, 0x31, 0x29, 0x90, | ||||
| 	        0x02, 0xE8, 0xF8, 0xFD, 0x70, 0x2F, 0x27, 0x04, 0x5C, 0x15, 0xBB, 0x80, 0xE3, 0x2C, 0x28, 0x05, | ||||
| 	        0x48, 0x15, 0xC1, 0x95, 0x22, 0x6D, 0xC6, 0xE4, 0x3F, 0x13, 0xC1, 0x48, 0xDC, 0x86, 0x0F, 0xC7, | ||||
| 	        0xEE, 0xC9, 0xF9, 0x07, 0x0F, 0x1F, 0x04, 0x41, 0xA4, 0x79, 0x47, 0x40, 0x17, 0x6E, 0x88, 0x5D, | ||||
| 	        0xEB, 0x51, 0x5F, 0x32, 0xD1, 0xC0, 0x9B, 0xD5, 0x8F, 0xC1, 0xBC, 0xF2, 0x64, 0x35, 0x11, 0x41, | ||||
| 	        0x34, 0x78, 0x7B, 0x25, 0x60, 0x9C, 0x2A, 0x60, 0xA3, 0xE8, 0xF8, 0xDF, 0x1B, 0x6C, 0x63, 0x1F, | ||||
| 	        0xC2, 0xB4, 0x12, 0x0E, 0x9E, 0x32, 0xE1, 0x02, 0xD1, 0x4F, 0x66, 0xAF, 0x15, 0x81, 0xD1, 0xCA, | ||||
| 	        0xE0, 0x95, 0x23, 0x6B, 0xE1, 0x92, 0x3E, 0x33, 0x62, 0x0B, 0x24, 0x3B, 0x22, 0xB9, 0xBE, 0xEE, | ||||
| 	        0x0E, 0xA2, 0xB2, 0x85, 0x99, 0x0D, 0xBA, 0xE6, 0x8C, 0x0C, 0x72, 0xDE, 0x28, 0xF7, 0xA2, 0x2D, | ||||
| 	        0x45, 0x78, 0x12, 0xD0, 0xFD, 0x94, 0xB7, 0x95, 0x62, 0x08, 0x7D, 0x64, 0xF0, 0xF5, 0xCC, 0xE7, | ||||
| 	        0x6F, 0xA3, 0x49, 0x54, 0xFA, 0x48, 0x7D, 0x87, 0x27, 0xFD, 0x9D, 0xC3, 0x1E, 0x8D, 0x3E, 0xF3, | ||||
| 	        0x41, 0x63, 0x47, 0x0A, 0x74, 0xFF, 0x2E, 0x99, 0xAB, 0x6E, 0x6F, 0x3A, 0x37, 0xFD, 0xF8, 0xF4, | ||||
| 	        0x60, 0xDC, 0x12, 0xA8, 0xF8, 0xDD, 0xEB, 0xA1, 0x4C, 0xE1, 0x1B, 0x99, 0x0D, 0x6B, 0x6E, 0xDB, | ||||
| 	        0x10, 0x55, 0x7B, 0xC6, 0x37, 0x2C, 0x67, 0x6D, 0x3B, 0xD4, 0x65, 0x27, 0x04, 0xE8, 0xD0, 0xDC, | ||||
| 	        0xC7, 0x0D, 0x29, 0xF1, 0xA3, 0xFF, 0x00, 0xCC, 0x92, 0x0F, 0x39, 0xB5, 0x0B, 0xED, 0x0F, 0x69, | ||||
| 	        0xFB, 0x9F, 0x7B, 0x66, 0x9C, 0x7D, 0xDB, 0xCE, 0x0B, 0xCF, 0x91, 0xA0, 0xA3, 0x5E, 0x15, 0xD9, | ||||
| 	        0x88, 0x2F, 0x13, 0xBB, 0x24, 0xAD, 0x5B, 0x51, 0xBF, 0x79, 0x94, 0x7B, 0xEB, 0xD6, 0x3B, 0x76, | ||||
| 	        0xB3, 0x2E, 0x39, 0x37, 0x79, 0x59, 0x11, 0xCC, 0x97, 0xE2, 0x26, 0x80, 0x2D, 0x31, 0x2E, 0xF4, | ||||
| 	        0xA7, 0xAD, 0x42, 0x68, 0x3B, 0x2B, 0x6A, 0xC6, 0xCC, 0x4C, 0x75, 0x12, 0x1C, 0xF1, 0x2E, 0x78, | ||||
| 	        0x37, 0x42, 0x12, 0x6A, 0xE7, 0x51, 0x92, 0xB7, 0xE6, 0xBB, 0xA1, 0x06, 0x50, 0x63, 0xFB, 0x4B, | ||||
| 	        0x18, 0x10, 0x6B, 0x1A, 0xFA, 0xED, 0xCA, 0x11, 0xD8, 0xBD, 0x25, 0x3D, 0xC9, 0xC3, 0xE1, 0xE2, | ||||
| 	        0x59, 0x16, 0x42, 0x44, 0x86, 0x13, 0x12, 0x0A, 0x6E, 0xEC, 0x0C, 0xD9, 0x2A, 0xEA, 0xAB, 0xD5, | ||||
| 	        0x4E, 0x67, 0xAF, 0x64, 0x5F, 0xA8, 0x86, 0xDA, 0x88, 0xE9, 0xBF, 0xBE, 0xFE, 0xC3, 0xE4, 0x64, | ||||
| 	        0x57, 0x80, 0xBC, 0x9D, 0x86, 0xC0, 0xF7, 0xF0, 0xF8, 0x7B, 0x78, 0x60, 0x4D, 0x60, 0x03, 0x60, | ||||
| 	        0x46, 0x83, 0xFD, 0xD1, 0xB0, 0x1F, 0x38, 0xF6, 0x04, 0xAE, 0x45, 0x77, 0xCC, 0xFC, 0x36, 0xD7, | ||||
| 	        0x33, 0x6B, 0x42, 0x83, 0x71, 0xAB, 0x1E, 0xF0, 0x87, 0x41, 0x80, 0xB0, 0x5F, 0x5E, 0x00, 0x3C, | ||||
| 	        0xBE, 0x57, 0xA0, 0x77, 0x24, 0xAE, 0xE8, 0xBD, 0x99, 0x42, 0x46, 0x55, 0x61, 0x2E, 0x58, 0xBF, | ||||
| 	        0x8F, 0xF4, 0x58, 0x4E, 0xA2, 0xFD, 0xDD, 0xF2, 0x38, 0xEF, 0x74, 0xF4, 0xC2, 0xBD, 0x89, 0x87, | ||||
| 	        0xC3, 0xF9, 0x66, 0x53, 0x74, 0x8E, 0xB3, 0xC8, 0x55, 0xF2, 0x75, 0xB4, 0xB9, 0xD9, 0xFC, 0x46, | ||||
| 	        0x61, 0x26, 0xEB, 0x7A, 0x84, 0xDF, 0x1D, 0x8B, 0x79, 0x0E, 0x6A, 0x84, 0xE2, 0x95, 0x5F, 0x91, | ||||
| 	        0x8E, 0x59, 0x6E, 0x46, 0x70, 0x57, 0xB4, 0x20, 0x91, 0x55, 0xD5, 0x8C, 0x4C, 0xDE, 0x02, 0xC9, | ||||
| 	        0xE1, 0xAC, 0x0B, 0xB9, 0xD0, 0x05, 0x82, 0xBB, 0x48, 0x62, 0xA8, 0x11, 0x9E, 0xA9, 0x74, 0x75, | ||||
| 	        0xB6, 0x19, 0x7F, 0xB7, 0x09, 0xDC, 0xA9, 0xE0, 0xA1, 0x09, 0x2D, 0x66, 0x33, 0x46, 0x32, 0xC4, | ||||
| 	        0x02, 0x1F, 0x5A, 0xE8, 0x8C, 0xBE, 0xF0, 0x09, 0x25, 0xA0, 0x99, 0x4A, 0x10, 0xFE, 0x6E, 0x1D, | ||||
| 	        0x1D, 0x3D, 0xB9, 0x1A, 0xDF, 0xA4, 0xA5, 0x0B, 0x0F, 0xF2, 0x86, 0xA1, 0x69, 0xF1, 0x68, 0x28, | ||||
| 	        0x83, 0xDA, 0xB7, 0xDC, 0xFE, 0x06, 0x39, 0x57, 0x9B, 0xCE, 0xE2, 0xA1, 0x52, 0x7F, 0xCD, 0x4F, | ||||
| 	        0x01, 0x5E, 0x11, 0x50, 0xFA, 0x83, 0x06, 0xA7, 0xC4, 0xB5, 0x02, 0xA0, 0x27, 0xD0, 0xE6, 0x0D, | ||||
| 	        0x27, 0x8C, 0xF8, 0x9A, 0x41, 0x86, 0x3F, 0x77, 0x06, 0x4C, 0x60, 0xC3, 0xB5, 0x06, 0xA8, 0x61, | ||||
| 	        0x28, 0x7A, 0x17, 0xF0, 0xE0, 0x86, 0xF5, 0xC0, 0xAA, 0x58, 0x60, 0x00, 0x62, 0x7D, 0xDC, 0x30, | ||||
| 	        0xD7, 0x9E, 0xE6, 0x11, 0x63, 0xEA, 0x38, 0x23, 0x94, 0xDD, 0xC2, 0x53, 0x34, 0x16, 0xC2, 0xC2, | ||||
| 	        0x56, 0xEE, 0xCB, 0xBB, 0xDE, 0xB6, 0xBC, 0x90, 0xA1, 0x7D, 0xFC, 0xEB, 0x76, 0x1D, 0x59, 0xCE, | ||||
| 	        0x09, 0xE4, 0x05, 0x6F, 0x88, 0x01, 0x7C, 0x4B, 0x3D, 0x0A, 0x72, 0x39, 0x24, 0x7C, 0x92, 0x7C, | ||||
| 	        0x5F, 0x72, 0xE3, 0x86, 0xB9, 0x9D, 0x4D, 0x72, 0xB4, 0x5B, 0xC1, 0x1A, 0xFC, 0xB8, 0x9E, 0xD3, | ||||
| 	        0x78, 0x55, 0x54, 0xED, 0xB5, 0xA5, 0xFC, 0x08, 0xD3, 0x7C, 0x3D, 0xD8, 0xC4, 0x0F, 0xAD, 0x4D, | ||||
| 	        0x5E, 0xEF, 0x50, 0x1E, 0xF8, 0xE6, 0x61, 0xB1, 0xD9, 0x14, 0x85, 0xA2, 0x3C, 0x13, 0x51, 0x6C, | ||||
| 	        0xE7, 0xC7, 0xD5, 0x6F, 0xC4, 0x4E, 0xE1, 0x56, 0xCE, 0xBF, 0x2A, 0x36, 0x37, 0xC8, 0xC6, 0xDD, | ||||
| 	        0x34, 0x32, 0x9A, 0xD7, 0x12, 0x82, 0x63, 0x92, 0x8E, 0xFA, 0x0E, 0x67, 0xE0, 0x00, 0x60, 0x40, | ||||
| 	        0x37, 0xCE, 0x39, 0x3A, 0xCF, 0xF5, 0xFA, 0xD3, 0x37, 0x77, 0xC2, 0xAB, 0x1B, 0x2D, 0xC5, 0x5A, | ||||
| 	        0x9E, 0x67, 0xB0, 0x5C, 0x42, 0x37, 0xA3, 0x4F, 0x40, 0x27, 0x82, 0xD3, 0xBE, 0x9B, 0xBC, 0x99, | ||||
| 	        0x9D, 0x8E, 0x11, 0xD5, 0x15, 0x73, 0x0F, 0xBF, 0x7E, 0x1C, 0x2D, 0xD6, 0x7B, 0xC4, 0x00, 0xC7, | ||||
| 	        0x6B, 0x1B, 0x8C, 0xB7, 0x45, 0x90, 0xA1, 0x21, 0xBE, 0xB1, 0x6E, 0xB2, 0xB4, 0x6E, 0x36, 0x6A, | ||||
| 	        0x2F, 0xAB, 0x48, 0x57, 0x79, 0x6E, 0x94, 0xBC, 0xD2, 0x76, 0xA3, 0xC6, 0xC8, 0xC2, 0x49, 0x65, | ||||
| 	        0xEE, 0xF8, 0x0F, 0x53, 0x7D, 0xDE, 0x8D, 0x46, 0x1D, 0x0A, 0x73, 0xD5, 0xC6, 0x4D, 0xD0, 0x4C, | ||||
| 	        0xDB, 0xBB, 0x39, 0x29, 0x50, 0x46, 0xBA, 0xA9, 0xE8, 0x26, 0x95, 0xAC, 0x04, 0xE3, 0x5E, 0xBE, | ||||
| 	        0xF0, 0xD5, 0xFA, 0xA1, 0x9A, 0x51, 0x2D, 0x6A, 0xE2, 0x8C, 0xEF, 0x63, 0x22, 0xEE, 0x86, 0x9A, | ||||
| 	        0xB8, 0xC2, 0x89, 0xC0, 0xF6, 0x2E, 0x24, 0x43, 0xAA, 0x03, 0x1E, 0xA5, 0xA4, 0xD0, 0xF2, 0x9C, | ||||
| 	        0xBA, 0x61, 0xC0, 0x83, 0x4D, 0x6A, 0xE9, 0x9B, 0x50, 0x15, 0xE5, 0x8F, 0xD6, 0x5B, 0x64, 0xBA, | ||||
| 	        0xF9, 0xA2, 0x26, 0x28, 0xE1, 0x3A, 0x3A, 0xA7, 0x86, 0x95, 0xA9, 0x4B, 0xE9, 0x62, 0x55, 0xEF, | ||||
| 	        0xD3, 0xEF, 0x2F, 0xC7, 0xDA, 0xF7, 0x52, 0xF7, 0x69, 0x6F, 0x04, 0x3F, 0x59, 0x0A, 0xFA, 0x77, | ||||
| 	        0x15, 0xA9, 0xE4, 0x80, 0x01, 0x86, 0xB0, 0x87, 0xAD, 0xE6, 0x09, 0x9B, 0x93, 0xE5, 0x3E, 0x3B, | ||||
| 	        0x5A, 0xFD, 0x90, 0xE9, 0x97, 0xD7, 0x34, 0x9E, 0xD9, 0xB7, 0xF0, 0x2C, 0x51, 0x8B, 0x2B, 0x02, | ||||
| 	        0x3A, 0xAC, 0xD5, 0x96, 0x7D, 0xA6, 0x7D, 0x01, 0xD6, 0x3E, 0xCF, 0xD1, 0x28, 0x2D, 0x7D, 0x7C, | ||||
| 	        0xCF, 0x25, 0x9F, 0x1F, 0x9B, 0xB8, 0xF2, 0xAD, 0x72, 0xB4, 0xD6, 0x5A, 0x4C, 0xF5, 0x88, 0x5A, | ||||
| 	        0x71, 0xAC, 0x29, 0xE0, 0xE6, 0xA5, 0x19, 0xE0, 0xFD, 0xAC, 0xB0, 0x47, 0x9B, 0xFA, 0x93, 0xED, | ||||
| 	        0x8D, 0xC4, 0xD3, 0xE8, 0xCC, 0x57, 0x3B, 0x28, 0x29, 0x66, 0xD5, 0xF8, 0x28, 0x2E, 0x13, 0x79, | ||||
| 	        0x91, 0x01, 0x5F, 0x78, 0x55, 0x60, 0x75, 0xED, 0x44, 0x0E, 0x96, 0xF7, 0x8C, 0x5E, 0xD3, 0xE3, | ||||
| 	        0xD4, 0x6D, 0x05, 0x15, 0xBA, 0x6D, 0xF4, 0x88, 0x25, 0x61, 0xA1, 0x03, 0xBD, 0xF0, 0x64, 0x05, | ||||
| 	        0x15, 0x9E, 0xEB, 0xC3, 0xA2, 0x57, 0x90, 0x3C, 0xEC, 0x1A, 0x27, 0x97, 0x2A, 0x07, 0x3A, 0xA9, | ||||
| 	        0x9B, 0x6D, 0x3F, 0x1B, 0xF5, 0x21, 0x63, 0x1E, 0xFB, 0x66, 0x9C, 0xF5, 0x19, 0xF3, 0xDC, 0x26, | ||||
| 	        0x28, 0xD9, 0x33, 0x75, 0xF5, 0xFD, 0x55, 0xB1, 0x82, 0x34, 0x56, 0x03, 0xBB, 0x3C, 0xBA, 0x8A, | ||||
| 	        0x11, 0x77, 0x51, 0x28, 0xF8, 0xD9, 0x0A, 0xC2, 0x67, 0x51, 0xCC, 0xAB, 0x5F, 0x92, 0xAD, 0xCC, | ||||
| 	        0x51, 0x17, 0xE8, 0x4D, 0x8E, 0xDC, 0x30, 0x38, 0x62, 0x58, 0x9D, 0x37, 0x91, 0xF9, 0x20, 0x93, | ||||
| 	        0xC2, 0x90, 0x7A, 0xEA, 0xCE, 0x7B, 0x3E, 0xFB, 0x64, 0xCE, 0x21, 0x51, 0x32, 0xBE, 0x4F, 0x77, | ||||
| 	        0x7E, 0xE3, 0xB6, 0xA8, 0x46, 0x3D, 0x29, 0xC3, 0x69, 0x53, 0xDE, 0x48, 0x80, 0xE6, 0x13, 0x64, | ||||
| 	        0x10, 0x08, 0xAE, 0xA2, 0x24, 0xB2, 0x6D, 0xDD, 0xFD, 0x2D, 0x85, 0x69, 0x66, 0x21, 0x07, 0x09, | ||||
| 	        0x0A, 0x46, 0x9A, 0xB3, 0xDD, 0xC0, 0x45, 0x64, 0xCF, 0xDE, 0x6C, 0x58, 0xAE, 0xC8, 0x20, 0x1C, | ||||
| 	        0xDD, 0xF7, 0xBE, 0x5B, 0x40, 0x8D, 0x58, 0x1B, 0x7F, 0x01, 0xD2, 0xCC, 0xBB, 0xE3, 0xB4, 0x6B, | ||||
| 	        0x7E, 0x6A, 0xA2, 0xDD, 0x45, 0xFF, 0x59, 0x3A, 0x44, 0x0A, 0x35, 0x3E, 0xD5, 0xCD, 0xB4, 0xBC, | ||||
| 	        0xA8, 0xCE, 0xEA, 0x72, 0xBB, 0x84, 0x64, 0xFA, 0xAE, 0x12, 0x66, 0x8D, 0x47, 0x6F, 0x3C, 0xBF, | ||||
| 	        0x63, 0xE4, 0x9B, 0xD2, 0x9E, 0x5D, 0x2F, 0x54, 0x1B, 0x77, 0xC2, 0xAE, 0x70, 0x63, 0x4E, 0xF6, | ||||
| 	        0x8D, 0x0D, 0x0E, 0x74, 0x57, 0x13, 0x5B, 0xE7, 0x71, 0x16, 0x72, 0xF8, 0x5D, 0x7D, 0x53, 0xAF, | ||||
| 	        0x08, 0xCB, 0x40, 0x40, 0xCC, 0xE2, 0xB4, 0x4E, 0x6A, 0x46, 0xD2, 0x34, 0x84, 0xAF, 0x15, 0x01, | ||||
| 	        0x28, 0x04, 0xB0, 0xE1, 0x1D, 0x3A, 0x98, 0x95, 0xB4, 0x9F, 0xB8, 0x06, 0x48, 0xA0, 0x6E, 0xCE, | ||||
| 	        0x82, 0x3B, 0x3F, 0x6F, 0x82, 0xAB, 0x20, 0x35, 0x4B, 0x1D, 0x1A, 0x01, 0xF8, 0x27, 0x72, 0x27, | ||||
| 	        0xB1, 0x60, 0x15, 0x61, 0xDC, 0x3F, 0x93, 0xE7, 0x2B, 0x79, 0x3A, 0xBB, 0xBD, 0x25, 0x45, 0x34, | ||||
| 	        0xE1, 0x39, 0x88, 0xA0, 0x4B, 0x79, 0xCE, 0x51, 0xB7, 0xC9, 0x32, 0x2F, 0xC9, 0xBA, 0x1F, 0xA0, | ||||
| 	        0x7E, 0xC8, 0x1C, 0xE0, 0xF6, 0xD1, 0xC7, 0xBC, 0xC3, 0x11, 0x01, 0xCF, 0xC7, 0xAA, 0xE8, 0xA1, | ||||
| 	        0x49, 0x87, 0x90, 0x1A, 0x9A, 0xBD, 0x4F, 0xD4, 0xCB, 0xDE, 0xDA, 0xD0, 0x38, 0xDA, 0x0A, 0xD5, | ||||
| 	        0x2A, 0xC3, 0x39, 0x03, 0x67, 0x36, 0x91, 0xC6, 0x7C, 0x31, 0xF9, 0x8D, 0x4F, 0x2B, 0xB1, 0xE0, | ||||
| 	        0xB7, 0x59, 0x9E, 0xF7, 0x3A, 0xBB, 0xF5, 0x43, 0xFF, 0x19, 0xD5, 0xF2, 0x9C, 0x45, 0xD9, 0x27, | ||||
| 	        0x2C, 0x22, 0x97, 0xBF, 0x2A, 0xFC, 0xE6, 0x15, 0x71, 0xFC, 0x91, 0x0F, 0x25, 0x15, 0x94, 0x9B, | ||||
| 	        0x61, 0x93, 0xE5, 0xFA, 0xEB, 0x9C, 0xB6, 0xCE, 0x59, 0x64, 0xA8, 0xC2, 0xD1, 0xA8, 0xBA, 0x12, | ||||
| 	        0x5E, 0x07, 0xC1, 0xB6, 0x0C, 0x6A, 0x05, 0xE3, 0x65, 0x50, 0xD2, 0x10, 0x42, 0xA4, 0x03, 0xCB, | ||||
| 	        0x0E, 0x6E, 0xEC, 0xE0, 0x3B, 0xDB, 0x98, 0x16, 0xBE, 0xA0, 0x98, 0x4C, 0x64, 0xE9, 0x78, 0x32, | ||||
| 	        0x32, 0x95, 0x1F, 0x9F, 0xDF, 0x92, 0xD3, 0xE0, 0x2B, 0x34, 0xA0, 0xD3, 0x1E, 0xF2, 0x71, 0x89, | ||||
| 	        0x41, 0x74, 0x0A, 0x1B, 0x8C, 0x34, 0xA3, 0x4B, 0x20, 0x71, 0xBE, 0xC5, 0xD8, 0x32, 0x76, 0xC3, | ||||
| 	        0x8D, 0x9F, 0x35, 0xDF, 0x2E, 0x2F, 0x99, 0x9B, 0x47, 0x6F, 0x0B, 0xE6, 0x1D, 0xF1, 0xE3, 0x0F, | ||||
| 	        0x54, 0xDA, 0x4C, 0xE5, 0x91, 0xD8, 0xDA, 0x1E, 0xCF, 0x79, 0x62, 0xCE, 0x6F, 0x7E, 0x3E, 0xCD, | ||||
| 	        0x66, 0xB1, 0x18, 0x16, 0x05, 0x1D, 0x2C, 0xFD, 0xC5, 0xD2, 0x8F, 0x84, 0x99, 0x22, 0xFB, 0xF6, | ||||
| 	        0x57, 0xF3, 0x23, 0xF5, 0x23, 0x76, 0x32, 0xA6, 0x31, 0x35, 0xA8, 0x93, 0x02, 0xCD, 0xCC, 0x56, | ||||
| 	        0x62, 0x81, 0xF0, 0xAC, 0xB5, 0xEB, 0x75, 0x5A, 0x97, 0x36, 0x16, 0x6E, 0xCC, 0x73, 0xD2, 0x88, | ||||
| 	        0x92, 0x62, 0x96, 0xDE, 0xD0, 0x49, 0xB9, 0x81, 0x1B, 0x90, 0x50, 0x4C, 0x14, 0x56, 0xC6, 0x71, | ||||
| 	        0xBD, 0xC7, 0xC6, 0xE6, 0x0A, 0x14, 0x7A, 0x32, 0x06, 0xD0, 0xE1, 0x45, 0x9A, 0x7B, 0xF2, 0xC3, | ||||
| 	        0xFD, 0x53, 0xAA, 0xC9, 0x00, 0x0F, 0xA8, 0x62, 0xE2, 0xBF, 0x25, 0xBB, 0xF6, 0xD2, 0xBD, 0x35, | ||||
| 	        0x05, 0x69, 0x12, 0x71, 0x22, 0x02, 0x04, 0xB2, 0x7C, 0xCF, 0xCB, 0xB6, 0x2B, 0x9C, 0x76, 0xCD, | ||||
| 	        0xC0, 0x3E, 0x11, 0x53, 0xD3, 0xE3, 0x40, 0x16, 0x60, 0xBD, 0xAB, 0x38, 0xF0, 0xAD, 0x47, 0x25, | ||||
| 	        0x9C, 0x20, 0x38, 0xBA, 0x76, 0xCE, 0x46, 0xF7, 0xC5, 0xA1, 0xAF, 0x77, 0x60, 0x60, 0x75, 0x20, | ||||
| 	        0x4E, 0xFE, 0xCB, 0x85, 0xD8, 0x8D, 0xE8, 0x8A, 0xB0, 0xF9, 0xAA, 0x7A, 0x7E, 0xAA, 0xF9, 0x4C, | ||||
| 	        0x5C, 0xC2, 0x48, 0x19, 0x8C, 0x8A, 0xFB, 0x02, 0xE4, 0x6A, 0xC3, 0x01, 0xF9, 0xE1, 0xEB, 0xD6, | ||||
| 	        0x69, 0xF8, 0xD4, 0x90, 0xA0, 0xDE, 0x5C, 0xA6, 0x2D, 0x25, 0x09, 0x3F, 0x9F, 0xE6, 0x08, 0xC2, | ||||
| 	        0x32, 0x61, 0x4E, 0xB7, 0x5B, 0xE2, 0x77, 0xCE, 0xE3, 0xDF, 0x8F, 0x57, 0xE6, 0x72, 0xC3, 0x3A | ||||
|         }; | ||||
|  | ||||
|         #endregion | ||||
|  | ||||
|         public Blowfish(byte[] key) | ||||
|         { | ||||
|             initializeBlowfish(key); | ||||
|         } | ||||
|  | ||||
|         public void Encipher(byte[] data, int offset, int length) | ||||
|         { | ||||
|             if ((length - offset) % 8 != 0) | ||||
|                 throw new ArgumentException("Needs to be a multiple of 8"); | ||||
|  | ||||
|             for (int i = offset; i < offset + length; i += 8) | ||||
|             { | ||||
|                 uint xl = (uint)((data[i + 0]) | (data[i + 1] << 8) | (data[i + 2] << 16) | (data[i + 3] << 24)); | ||||
|                 uint xr = (uint)((data[i + 4]) | (data[i + 5] << 8) | (data[i + 6] << 16) | (data[i + 7] << 24)); | ||||
|                 blowfish_encipher(ref xl, ref xr); | ||||
|                 data[i + 0] = (byte)(xl >> 0); | ||||
|                 data[i + 1] = (byte)(xl >> 8); | ||||
|                 data[i + 2] = (byte)(xl >> 16); | ||||
|                 data[i + 3] = (byte)(xl >> 24); | ||||
|                 data[i + 4] = (byte)(xr >> 0); | ||||
|                 data[i + 5] = (byte)(xr >> 8); | ||||
|                 data[i + 6] = (byte)(xr >> 16); | ||||
|                 data[i + 7] = (byte)(xr >> 24); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public void Decipher(byte[] data, int offset, int length) | ||||
|         { | ||||
|             if ((length - offset) % 8 != 0) | ||||
|                 throw new ArgumentException("Needs to be a multiple of 8"); | ||||
|  | ||||
|             for (int i = offset; i < offset + length; i += 8) | ||||
|             { | ||||
|                 uint xl = (uint)((data[i + 0]) | (data[i + 1] << 8) | (data[i + 2] << 16) | (data[i + 3] << 24)); | ||||
|                 uint xr = (uint)((data[i + 4]) | (data[i + 5] << 8) | (data[i + 6] << 16) | (data[i + 7] << 24)); | ||||
|                 blowfish_decipher(ref xl, ref xr); | ||||
|                 data[i + 0] = (byte)(xl >> 0); | ||||
|                 data[i + 1] = (byte)(xl >> 8); | ||||
|                 data[i + 2] = (byte)(xl >> 16); | ||||
|                 data[i + 3] = (byte)(xl >> 24); | ||||
|                 data[i + 4] = (byte)(xr >> 0); | ||||
|                 data[i + 5] = (byte)(xr >> 8); | ||||
|                 data[i + 6] = (byte)(xr >> 16); | ||||
|                 data[i + 7] = (byte)(xr >> 24); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private UInt32 F(UInt32 x) | ||||
|         { | ||||
| 	        UInt16 a; | ||||
| 	        UInt16 b; | ||||
| 	        UInt16 c; | ||||
| 	        UInt16 d; | ||||
| 	        UInt32 y; | ||||
|  | ||||
| 	        d = (UInt16)(x & 0x00FF); | ||||
| 	        x >>= 8; | ||||
| 	        c = (UInt16)(x & 0x00FF); | ||||
| 	        x >>= 8; | ||||
| 	        b = (UInt16)(x & 0x00FF); | ||||
| 	        x >>= 8; | ||||
| 	        a = (UInt16)(x & 0x00FF); | ||||
| 	        //y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d]; | ||||
| 	        y = S[0,a] + S[1,b]; | ||||
| 	        y = y ^ S[2,c]; | ||||
| 	        y = y + S[3,d]; | ||||
|  | ||||
| 	        return y; | ||||
|         } | ||||
|  | ||||
|         private void blowfish_encipher(ref UInt32 xl, ref UInt32 xr) | ||||
|         { | ||||
| 	        UInt32  temp; | ||||
| 	        Int32          i; | ||||
|  | ||||
| 	        for (i = 0; i < N; ++i) { | ||||
| 		        xl = xl ^ P[i]; | ||||
| 		        xr = F(xl) ^ xr; | ||||
|  | ||||
| 		        temp = xl; | ||||
| 		        xl = xr; | ||||
| 		        xr = temp; | ||||
| 	        } | ||||
|  | ||||
| 	        temp = xl; | ||||
| 	        xl = xr; | ||||
| 	        xr = temp; | ||||
|  | ||||
| 	        xr = xr ^ P[N]; | ||||
| 	        xl = xl ^ P[N + 1]; | ||||
| 	       | ||||
|         } | ||||
|  | ||||
|         private void blowfish_decipher(ref UInt32 xl, ref UInt32 xr) | ||||
|         { | ||||
|             UInt32 temp; | ||||
|             Int32 i; | ||||
|  | ||||
| 	        for (i = N + 1; i > 1; --i) { | ||||
| 		        xl = xl ^ P[i]; | ||||
| 		        xr = F(xl) ^ xr; | ||||
|  | ||||
| 		        /* Exchange xl and xr */ | ||||
| 		        temp = xl; | ||||
| 		        xl = xr; | ||||
| 		        xr = temp; | ||||
| 	        } | ||||
|  | ||||
| 	        /* Exchange xl and xr */ | ||||
| 	        temp = xl; | ||||
| 	        xl = xr; | ||||
| 	        xr = temp; | ||||
|  | ||||
| 	        xr = xr ^ P[1]; | ||||
| 	        xl = xl ^ P[0]; | ||||
|  | ||||
|         } | ||||
|  | ||||
|         private int initializeBlowfish(byte [] key) | ||||
|         { | ||||
| 	        Int16          i; | ||||
|             Int16          j; | ||||
|             Int16          k; | ||||
|              | ||||
| 	        int  data; | ||||
| 	        uint  datal; | ||||
| 	        uint  datar; | ||||
|  | ||||
|             Buffer.BlockCopy(P_values, 0, P, 0, P_values.Length); | ||||
|             Buffer.BlockCopy(S_values, 0, S, 0, S_values.Length); | ||||
|  | ||||
| 	        j = 0; | ||||
| 	        for (i = 0; i < N + 2; ++i) | ||||
| 	        { | ||||
| 		        data = 0x00000000; | ||||
| 		        for (k = 0; k < 4; ++k) | ||||
| 		        { | ||||
| 			        data = (data << 8) | (SByte)key[j]; | ||||
| 			        j = (short)(j + 1); | ||||
| 			        if (j >= key.Length) | ||||
| 			        { | ||||
| 				        j = 0; | ||||
| 			        } | ||||
| 		        } | ||||
| 		        P[i] = P[i] ^ (uint)data; | ||||
| 	        } | ||||
|  | ||||
| 	        datal = 0x00000000; | ||||
| 	        datar = 0x00000000; | ||||
|  | ||||
| 	        for (i = 0; i < N + 2; i += 2) | ||||
| 	        { | ||||
| 		        blowfish_encipher(ref datal, ref datar); | ||||
|  | ||||
| 		        P[i] = datal; | ||||
| 		        P[i + 1] = datar; | ||||
| 	        } | ||||
|  | ||||
| 	        for (i = 0; i < 4; ++i) | ||||
| 	        { | ||||
| 		        for (j = 0; j < 256; j += 2) | ||||
| 		        { | ||||
| 			        blowfish_encipher(ref datal, ref datar); | ||||
| 			        S[i,j] = datal; | ||||
| 			        S[i,j + 1] = datar; | ||||
| 		        } | ||||
| 	        } | ||||
|  | ||||
| 	        return 0; | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
| @@ -1,158 +0,0 @@ | ||||
| using System; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.common | ||||
| { | ||||
|     namespace EfficientHashTables | ||||
|     { | ||||
|         public class Efficient64bitHashTable<T> | ||||
|         { | ||||
|             private class element | ||||
|             { | ||||
|                 public ulong _key; | ||||
|                 public T _value; | ||||
|             }; | ||||
|             private element[][] _buckets; | ||||
|             private uint _capacity; | ||||
|  | ||||
|             public Efficient64bitHashTable() | ||||
|             { | ||||
|                 _capacity = 214373;    // some prime number | ||||
|                 _buckets = new element[_capacity][]; | ||||
|             } | ||||
|             public Efficient64bitHashTable(uint capacity) | ||||
|             { | ||||
|                 _capacity = capacity; | ||||
|                 _buckets = new element[_capacity][]; | ||||
|             } | ||||
|  | ||||
|             public uint hash(ulong key) | ||||
|             { | ||||
|                 return (uint)(key % _capacity); | ||||
|             } | ||||
|  | ||||
|             public void Add(ulong key, T value) | ||||
|             { | ||||
|                 uint hsh = hash(key); | ||||
|                 element[] e; | ||||
|                 if (_buckets[hsh] == null) | ||||
|                     _buckets[hsh] = e = new element[1]; | ||||
|                 else | ||||
|                 { | ||||
|                     foreach (var elem in _buckets[hsh]) | ||||
|                         if (elem._key == key) | ||||
|                         { | ||||
|                             elem._value = value; | ||||
|                             return; | ||||
|                         } | ||||
|                     e = new element[_buckets[hsh].Length + 1]; | ||||
|                     Array.Copy(_buckets[hsh], 0, e, 1, _buckets[hsh].Length); | ||||
|                     _buckets[hsh] = e; | ||||
|                 } | ||||
|                 e[0] = new element { _key = key, _value = value }; | ||||
|             } | ||||
|  | ||||
|             public T Get(ulong key) | ||||
|             { | ||||
|                 uint hsh = hash(key); | ||||
|                 element[] e = _buckets[hsh]; | ||||
|                 if (e == null) return default(T); | ||||
|                 foreach (var f in e) | ||||
|                     if (f._key == key) | ||||
|                         return f._value; | ||||
|                 return default(T); | ||||
|             } | ||||
|  | ||||
|             public bool Has(ulong key) | ||||
|             { | ||||
|                 uint hsh = hash(key); | ||||
|                 element[] e = _buckets[hsh]; | ||||
|                 if (e == null) return false; | ||||
|                 foreach (var f in e) | ||||
|                     if (f._key == key) | ||||
|                         return true; | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
|             public int Count() | ||||
|             { | ||||
|                 int r = 0; | ||||
|                 foreach (var e in _buckets) | ||||
|                     if (e != null) | ||||
|                         r += e.Length; | ||||
|                 return r; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public class Efficient32bitHashTable<T> | ||||
|         { | ||||
|             private class element | ||||
|             { | ||||
|                 public uint _key; | ||||
|                 public T _value; | ||||
|             }; | ||||
|             private element[][] _buckets; | ||||
|             private uint _capacity; | ||||
|  | ||||
|             public Efficient32bitHashTable() | ||||
|             { | ||||
|                 _capacity = 463;    // some prime number | ||||
|                 _buckets = new element[_capacity][]; | ||||
|             } | ||||
|             public Efficient32bitHashTable(uint capacity) | ||||
|             { | ||||
|                 _capacity = capacity; | ||||
|                 _buckets = new element[_capacity][]; | ||||
|             } | ||||
|  | ||||
|             public uint hash(uint key) | ||||
|             { | ||||
|                 return (uint)(key % _capacity); | ||||
|             } | ||||
|  | ||||
|             public void Add(uint key, T value) | ||||
|             { | ||||
|                 uint hsh = hash(key); | ||||
|                 element[] e; | ||||
|                 if (_buckets[hsh] == null) | ||||
|                     _buckets[hsh] = e = new element[1]; | ||||
|                 else | ||||
|                 { | ||||
|                     foreach (var elem in _buckets[hsh]) | ||||
|                         if (elem._key == key) | ||||
|                         { | ||||
|                             elem._value = value; | ||||
|                             return; | ||||
|                         } | ||||
|                     e = new element[_buckets[hsh].Length + 1]; | ||||
|                     Array.Copy(_buckets[hsh], 0, e, 1, _buckets[hsh].Length); | ||||
|                     _buckets[hsh] = e; | ||||
|                 } | ||||
|                 e[0] = new element { _key = key, _value = value }; | ||||
|             }          | ||||
|  | ||||
|             public T Get(uint key) | ||||
|             { | ||||
|                 uint hsh = hash(key); | ||||
|                 element[] e = _buckets[hsh]; | ||||
|                 if (e == null) return default(T); | ||||
|                 foreach (var f in e) | ||||
|                     if (f._key == key) | ||||
|                         return f._value; | ||||
|                 return default(T); | ||||
|             } | ||||
|  | ||||
|             public int Count() | ||||
|             { | ||||
|                 int r = 0; | ||||
|                 foreach (var e in _buckets) | ||||
|                     if (e != null) | ||||
|                         r += e.Length; | ||||
|                 return r; | ||||
|             } | ||||
|              | ||||
|  | ||||
|  | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,72 +0,0 @@ | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Text; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.common | ||||
| { | ||||
|     class Log | ||||
|     { | ||||
|         public enum LogType | ||||
|         { | ||||
|             Status = ConsoleColor.Green, | ||||
|             Sql = ConsoleColor.Magenta, | ||||
|             Info = ConsoleColor.White, | ||||
|             Debug = ConsoleColor.Cyan, | ||||
|             Error = ConsoleColor.Red | ||||
|         } | ||||
|  | ||||
|         public static void Status(String message) | ||||
|         { | ||||
|             LogFile(message, LogType.Status); | ||||
|         } | ||||
|  | ||||
|         public static void Sql(String message) | ||||
|         { | ||||
|             LogFile(message, LogType.Sql); | ||||
|         } | ||||
|  | ||||
|         public static void Info(String message) | ||||
|         { | ||||
|             LogFile(message, LogType.Info); | ||||
|         } | ||||
|  | ||||
|         public static void Debug(String message) | ||||
|         { | ||||
| #if DEBUG | ||||
|             LogFile(message, LogType.Debug); | ||||
| #endif | ||||
|         } | ||||
|  | ||||
|         public static void Error(String message) | ||||
|         { | ||||
|             LogFile(message, LogType.Error); | ||||
|         } | ||||
|  | ||||
|         private static void LogFile(String message, LogType type) | ||||
|         { | ||||
|             string timestamp = String.Format("[{0}]", DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss")); | ||||
|             string messageType = String.Format("[{0}] ", type.ToString().ToUpper()); | ||||
|  | ||||
|             Console.Write(timestamp); | ||||
|             Console.ForegroundColor = (ConsoleColor)type; | ||||
|             Console.Write(messageType); | ||||
|             Console.ForegroundColor = ConsoleColor.Gray; | ||||
|             Console.WriteLine(message); | ||||
|  | ||||
|             StringBuilder sb = new StringBuilder(); | ||||
|  | ||||
|             sb.AppendLine(String.Format("{0}{1}{2}", timestamp, messageType, message)); | ||||
|  | ||||
|             if (!Directory.Exists(ConfigConstants.OPTIONS_LOGPATH)) | ||||
|             { | ||||
|                 Directory.CreateDirectory(ConfigConstants.OPTIONS_LOGPATH); | ||||
|             } | ||||
|  | ||||
|             using (FileStream fs = new FileStream(Path.Combine(ConfigConstants.OPTIONS_LOGPATH, ConfigConstants.OPTIONS_LOGFILE), FileMode.Append, FileAccess.Write)) | ||||
|             using (StreamWriter sw = new StreamWriter(fs)) | ||||
|             { | ||||
|                 sw.WriteLine(sb.ToString()); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,541 +0,0 @@ | ||||
| // ******************************* | ||||
| // *** INIFile class V2.1      *** | ||||
| // ******************************* | ||||
| // *** (C)2009-2013 S.T.A. snc *** | ||||
| // ******************************* | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Globalization; | ||||
| using System.IO; | ||||
| using System.Text; | ||||
|  | ||||
| namespace STA.Settings | ||||
| { | ||||
|  | ||||
| 	internal class INIFile | ||||
| 	{ | ||||
|  | ||||
| #region "Declarations" | ||||
|  | ||||
| 		// *** Lock for thread-safe access to file and local cache *** | ||||
| 		private object m_Lock = new object(); | ||||
|  | ||||
| 		// *** File name *** | ||||
| 		private string m_FileName = null; | ||||
| 		internal string FileName | ||||
| 		{ | ||||
| 			get | ||||
| 			{ | ||||
| 				return m_FileName; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// *** Lazy loading flag *** | ||||
| 		private bool m_Lazy = false; | ||||
|  | ||||
|         // *** Automatic flushing flag *** | ||||
|         private bool m_AutoFlush = false; | ||||
|  | ||||
| 		// *** Local cache *** | ||||
|         private Dictionary<string, Dictionary<string, string>> m_Sections = new Dictionary<string, Dictionary<string, string>>(); | ||||
|         private Dictionary<string, Dictionary<string, string>> m_Modified = new Dictionary<string, Dictionary<string, string>>();  | ||||
|  | ||||
| 		// *** Local cache modified flag *** | ||||
| 		private bool m_CacheModified = false; | ||||
|  | ||||
| #endregion | ||||
|  | ||||
| #region "Methods" | ||||
|  | ||||
| 		// *** Constructor *** | ||||
| 		public INIFile(string FileName) | ||||
| 		{ | ||||
| 			Initialize(FileName, false, false); | ||||
| 		} | ||||
|  | ||||
| 		public INIFile(string FileName, bool Lazy, bool AutoFlush) | ||||
| 		{ | ||||
|             Initialize(FileName, Lazy, AutoFlush); | ||||
| 		} | ||||
|  | ||||
| 		// *** Initialization *** | ||||
|         private void Initialize(string FileName, bool Lazy, bool AutoFlush) | ||||
| 		{ | ||||
| 			m_FileName = FileName; | ||||
| 			m_Lazy = Lazy; | ||||
|             m_AutoFlush = AutoFlush; | ||||
| 			if (!m_Lazy) Refresh(); | ||||
| 		} | ||||
|  | ||||
|         // *** Parse section name *** | ||||
|         private string ParseSectionName(string Line) | ||||
|         { | ||||
|             if (!Line.StartsWith("[")) return null; | ||||
|             if (!Line.EndsWith("]")) return null; | ||||
|             if (Line.Length < 3) return null; | ||||
|             return Line.Substring(1, Line.Length - 2); | ||||
|         } | ||||
|  | ||||
|         // *** Parse key+value pair *** | ||||
|         private bool ParseKeyValuePair(string Line, ref string Key, ref string Value) | ||||
|         { | ||||
|             // *** Check for key+value pair *** | ||||
|             int i; | ||||
|             if ((i = Line.IndexOf('=')) <= 0) return false; | ||||
|              | ||||
|             int j = Line.Length - i - 1; | ||||
|             Key = Line.Substring(0, i).Trim(); | ||||
|             if (Key.Length <= 0) return false; | ||||
|  | ||||
|             Value = (j > 0) ? (Line.Substring(i + 1, j).Trim()) : (""); | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
| 		// *** Read file contents into local cache *** | ||||
| 		internal void Refresh() | ||||
| 		{ | ||||
| 			lock (m_Lock) | ||||
| 			{ | ||||
| 				StreamReader sr = null; | ||||
| 				try | ||||
| 				{ | ||||
| 					// *** Clear local cache *** | ||||
| 					m_Sections.Clear(); | ||||
|                     m_Modified.Clear(); | ||||
|  | ||||
| 					// *** Open the INI file *** | ||||
| 					try | ||||
| 					{ | ||||
| 						sr = new StreamReader(m_FileName); | ||||
| 					} | ||||
| 					catch (FileNotFoundException) | ||||
| 					{ | ||||
| 						return; | ||||
| 					} | ||||
|  | ||||
| 					// *** Read up the file content *** | ||||
| 					Dictionary<string, string> CurrentSection = null; | ||||
| 					string s; | ||||
|                     string SectionName; | ||||
|                     string Key = null; | ||||
|                     string Value = null; | ||||
| 					while ((s = sr.ReadLine()) != null) | ||||
| 					{ | ||||
| 						s = s.Trim(); | ||||
| 						 | ||||
| 						// *** Check for section names *** | ||||
|                         SectionName = ParseSectionName(s); | ||||
|                         if (SectionName != null) | ||||
| 						{ | ||||
| 						    // *** Only first occurrence of a section is loaded *** | ||||
| 						    if (m_Sections.ContainsKey(SectionName)) | ||||
| 						    { | ||||
| 							    CurrentSection = null; | ||||
| 						    } | ||||
| 						    else | ||||
| 						    { | ||||
| 							    CurrentSection = new Dictionary<string, string>(); | ||||
|                                 m_Sections.Add(SectionName, CurrentSection); | ||||
| 						    } | ||||
| 						} | ||||
| 						else if (CurrentSection != null) | ||||
| 						{ | ||||
|                             // *** Check for key+value pair *** | ||||
|                             if (ParseKeyValuePair(s, ref Key, ref Value)) | ||||
|                             { | ||||
|                                 // *** Only first occurrence of a key is loaded *** | ||||
|                                 if (!CurrentSection.ContainsKey(Key)) | ||||
|                                 { | ||||
|                                     CurrentSection.Add(Key, Value); | ||||
|                                 } | ||||
|                             } | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				finally | ||||
| 				{ | ||||
| 					// *** Cleanup: close file *** | ||||
| 					if (sr != null) sr.Close(); | ||||
| 					sr = null; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		// *** Flush local cache content *** | ||||
| 		internal void Flush() | ||||
|         { | ||||
|             lock (m_Lock) | ||||
|             { | ||||
|                 PerformFlush(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void PerformFlush() | ||||
|         { | ||||
|             // *** If local cache was not modified, exit *** | ||||
|             if (!m_CacheModified) return; | ||||
|             m_CacheModified = false; | ||||
|  | ||||
|             // *** Check if original file exists *** | ||||
|             bool OriginalFileExists = File.Exists(m_FileName); | ||||
|  | ||||
|             // *** Get temporary file name *** | ||||
|             string TmpFileName = Path.ChangeExtension(m_FileName, "$n$"); | ||||
|  | ||||
|             // *** Copy content of original file to temporary file, replace modified values *** | ||||
|             StreamWriter sw = null; | ||||
|  | ||||
|             // *** Create the temporary file *** | ||||
|             sw = new StreamWriter(TmpFileName); | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 Dictionary<string, string> CurrentSection = null; | ||||
|                 if (OriginalFileExists) | ||||
|                 { | ||||
|                     StreamReader sr = null; | ||||
|                     try | ||||
|                     { | ||||
|                         // *** Open the original file *** | ||||
|                         sr = new StreamReader(m_FileName); | ||||
|  | ||||
|                         // *** Read the file original content, replace changes with local cache values *** | ||||
|                         string s; | ||||
|                         string SectionName; | ||||
|                         string Key = null; | ||||
|                         string Value = null; | ||||
|                         bool Unmodified; | ||||
|                         bool Reading = true; | ||||
|                         while (Reading) | ||||
|                         { | ||||
|                             s = sr.ReadLine(); | ||||
|                             Reading = (s != null); | ||||
|  | ||||
|                             // *** Check for end of file *** | ||||
|                             if (Reading) | ||||
|                             { | ||||
|                                 Unmodified = true; | ||||
|                                 s = s.Trim(); | ||||
|                                 SectionName = ParseSectionName(s); | ||||
|                             } | ||||
|                             else | ||||
|                             { | ||||
|                                 Unmodified = false; | ||||
|                                 SectionName = null; | ||||
|                             } | ||||
|  | ||||
|                             // *** Check for section names *** | ||||
|                             if ((SectionName != null) || (!Reading)) | ||||
|                             { | ||||
|                                 if (CurrentSection != null) | ||||
|                                 { | ||||
|                                     // *** Write all remaining modified values before leaving a section **** | ||||
|                                     if (CurrentSection.Count > 0) | ||||
|                                     { | ||||
|                                         foreach (string fkey in CurrentSection.Keys) | ||||
|                                         { | ||||
|                                             if (CurrentSection.TryGetValue(fkey, out Value)) | ||||
|                                             { | ||||
|                                                 sw.Write(fkey); | ||||
|                                                 sw.Write('='); | ||||
|                                                 sw.WriteLine(Value); | ||||
|                                             } | ||||
|                                         } | ||||
|                                         sw.WriteLine(); | ||||
|                                         CurrentSection.Clear(); | ||||
|                                     } | ||||
|                                 } | ||||
|  | ||||
|                                 if (Reading) | ||||
|                                 { | ||||
|                                     // *** Check if current section is in local modified cache *** | ||||
|                                     if (!m_Modified.TryGetValue(SectionName, out CurrentSection)) | ||||
|                                     { | ||||
|                                         CurrentSection = null; | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|                             else if (CurrentSection != null) | ||||
|                             { | ||||
|                                 // *** Check for key+value pair *** | ||||
|                                 if (ParseKeyValuePair(s, ref Key, ref Value)) | ||||
|                                 { | ||||
|                                     if (CurrentSection.TryGetValue(Key, out Value)) | ||||
|                                     { | ||||
|                                         // *** Write modified value to temporary file *** | ||||
|                                         Unmodified = false; | ||||
|                                         CurrentSection.Remove(Key); | ||||
|  | ||||
|                                         sw.Write(Key); | ||||
|                                         sw.Write('='); | ||||
|                                         sw.WriteLine(Value); | ||||
|                                     } | ||||
|                                 } | ||||
|                             } | ||||
|  | ||||
|                             // *** Write unmodified lines from the original file *** | ||||
|                             if (Unmodified) | ||||
|                             { | ||||
|                                 sw.WriteLine(s); | ||||
|                             } | ||||
|                         } | ||||
|  | ||||
|                         // *** Close the original file *** | ||||
|                         sr.Close(); | ||||
|                         sr = null; | ||||
|                     } | ||||
|                     finally | ||||
|                     { | ||||
|                         // *** Cleanup: close files ***                   | ||||
|                         if (sr != null) sr.Close(); | ||||
|                         sr = null; | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 // *** Cycle on all remaining modified values *** | ||||
|                 foreach (KeyValuePair<string, Dictionary<string, string>> SectionPair in m_Modified) | ||||
|                 { | ||||
|                     CurrentSection = SectionPair.Value; | ||||
|                     if (CurrentSection.Count > 0) | ||||
|                     { | ||||
|                         sw.WriteLine(); | ||||
|  | ||||
|                         // *** Write the section name *** | ||||
|                         sw.Write('['); | ||||
|                         sw.Write(SectionPair.Key); | ||||
|                         sw.WriteLine(']'); | ||||
|  | ||||
|                         // *** Cycle on all key+value pairs in the section *** | ||||
|                         foreach (KeyValuePair<string, string> ValuePair in CurrentSection) | ||||
|                         { | ||||
|                             // *** Write the key+value pair *** | ||||
|                             sw.Write(ValuePair.Key); | ||||
|                             sw.Write('='); | ||||
|                             sw.WriteLine(ValuePair.Value); | ||||
|                         } | ||||
|                         CurrentSection.Clear(); | ||||
|                     } | ||||
|                 } | ||||
|                 m_Modified.Clear(); | ||||
|  | ||||
|                 // *** Close the temporary file *** | ||||
|                 sw.Close(); | ||||
|                 sw = null; | ||||
|  | ||||
|                 // *** Rename the temporary file *** | ||||
|                 File.Copy(TmpFileName, m_FileName, true); | ||||
|  | ||||
|                 // *** Delete the temporary file *** | ||||
|                 File.Delete(TmpFileName); | ||||
|             } | ||||
|             finally | ||||
|             { | ||||
|                 // *** Cleanup: close files ***                   | ||||
|                 if (sw != null) sw.Close(); | ||||
|                 sw = null; | ||||
|             } | ||||
|         } | ||||
| 	 | ||||
| 		// *** Read a value from local cache *** | ||||
| 		internal string GetValue(string SectionName, string Key, string DefaultValue) | ||||
| 		{ | ||||
| 			// *** Lazy loading *** | ||||
| 			if (m_Lazy) | ||||
| 			{ | ||||
| 				m_Lazy = false; | ||||
| 				Refresh(); | ||||
| 			} | ||||
|  | ||||
| 			lock (m_Lock) | ||||
| 			{ | ||||
| 				// *** Check if the section exists *** | ||||
| 				Dictionary<string, string> Section; | ||||
| 				if (!m_Sections.TryGetValue(SectionName, out Section)) return DefaultValue; | ||||
|  | ||||
| 				// *** Check if the key exists *** | ||||
| 				string Value; | ||||
| 				if (!Section.TryGetValue(Key, out Value)) return DefaultValue; | ||||
| 			 | ||||
| 				// *** Return the found value *** | ||||
| 				return Value; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// *** Insert or modify a value in local cache *** | ||||
| 		internal void SetValue(string SectionName, string Key, string Value) | ||||
| 		{ | ||||
| 			// *** Lazy loading *** | ||||
| 			if (m_Lazy) | ||||
| 			{ | ||||
| 				m_Lazy = false; | ||||
| 				Refresh(); | ||||
| 			} | ||||
|  | ||||
| 			lock (m_Lock) | ||||
| 			{ | ||||
| 				// *** Flag local cache modification *** | ||||
| 				m_CacheModified = true; | ||||
|  | ||||
| 				// *** Check if the section exists *** | ||||
| 				Dictionary<string, string> Section; | ||||
| 				if (!m_Sections.TryGetValue(SectionName, out Section)) | ||||
| 				{ | ||||
| 					// *** If it doesn't, add it *** | ||||
| 					Section = new Dictionary<string, string>(); | ||||
| 					m_Sections.Add(SectionName,Section); | ||||
| 				} | ||||
|  | ||||
| 				// *** Modify the value *** | ||||
| 				if (Section.ContainsKey(Key)) Section.Remove(Key); | ||||
| 				Section.Add(Key, Value); | ||||
|  | ||||
|                 // *** Add the modified value to local modified values cache *** | ||||
|                 if (!m_Modified.TryGetValue(SectionName, out Section)) | ||||
|                 { | ||||
|                     Section = new Dictionary<string, string>(); | ||||
|                     m_Modified.Add(SectionName, Section); | ||||
|                 } | ||||
|  | ||||
|                 if (Section.ContainsKey(Key)) Section.Remove(Key); | ||||
|                 Section.Add(Key, Value); | ||||
|  | ||||
|                 // *** Automatic flushing : immediately write any modification to the file *** | ||||
|                 if (m_AutoFlush) PerformFlush(); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// *** Encode byte array *** | ||||
|         private string EncodeByteArray(byte[] Value) | ||||
|         { | ||||
|             if (Value == null) return null; | ||||
|  | ||||
|             StringBuilder sb = new StringBuilder(); | ||||
|             foreach (byte b in Value) | ||||
|             { | ||||
|                 string hex = Convert.ToString(b, 16); | ||||
|                 int l = hex.Length; | ||||
|                 if (l > 2) | ||||
|                 { | ||||
|                     sb.Append(hex.Substring(l - 2, 2)); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     if (l < 2) sb.Append("0"); | ||||
|                     sb.Append(hex); | ||||
|                 } | ||||
|             } | ||||
|             return sb.ToString(); | ||||
|         } | ||||
|  | ||||
| 		// *** Decode byte array *** | ||||
| 		private byte[] DecodeByteArray(string Value) | ||||
| 		{ | ||||
| 			if (Value == null) return null; | ||||
|  | ||||
| 			int l = Value.Length; | ||||
| 			if (l < 2) return new byte[] { }; | ||||
| 			 | ||||
| 			l /= 2; | ||||
| 			byte[] Result = new byte[l]; | ||||
|             for (int i = 0; i < l; i++) Result[i] = Convert.ToByte(Value.Substring(i * 2, 2), 16); | ||||
| 			return Result; | ||||
| 		} | ||||
|  | ||||
| 		// *** Getters for various types *** | ||||
| 		internal bool GetValue(string SectionName, string Key, bool DefaultValue) | ||||
| 		{ | ||||
|             string StringValue = GetValue(SectionName, Key, DefaultValue.ToString(System.Globalization.CultureInfo.InvariantCulture)); | ||||
| 			int Value; | ||||
| 			if (int.TryParse(StringValue, out Value)) return (Value != 0); | ||||
| 			return DefaultValue; | ||||
| 		} | ||||
|  | ||||
| 		internal int GetValue(string SectionName, string Key, int DefaultValue) | ||||
| 		{ | ||||
|             string StringValue = GetValue(SectionName, Key, DefaultValue.ToString(CultureInfo.InvariantCulture)); | ||||
| 			int Value; | ||||
| 			if (int.TryParse(StringValue, NumberStyles.Any, CultureInfo.InvariantCulture, out Value)) return Value; | ||||
|             return DefaultValue; | ||||
| 		} | ||||
|  | ||||
|         internal uint GetValue(string SectionName, string Key, uint DefaultValue) | ||||
|         { | ||||
|             string StringValue = GetValue(SectionName, Key, DefaultValue.ToString(CultureInfo.InvariantCulture)); | ||||
|             uint Value; | ||||
|             if (uint.TryParse(StringValue, NumberStyles.Any, CultureInfo.InvariantCulture, out Value)) return Value; | ||||
|             return DefaultValue; | ||||
|         } | ||||
|  | ||||
|         internal long GetValue(string SectionName, string Key, long DefaultValue) | ||||
|         { | ||||
|             string StringValue = GetValue(SectionName, Key, DefaultValue.ToString(CultureInfo.InvariantCulture)); | ||||
|             long Value; | ||||
|             if (long.TryParse(StringValue, NumberStyles.Any, CultureInfo.InvariantCulture, out Value)) return Value; | ||||
|             return DefaultValue; | ||||
|         } | ||||
|  | ||||
| 		internal double GetValue(string SectionName, string Key, double DefaultValue) | ||||
| 		{ | ||||
|             string StringValue = GetValue(SectionName, Key, DefaultValue.ToString(CultureInfo.InvariantCulture)); | ||||
| 			double Value; | ||||
| 			if (double.TryParse(StringValue, NumberStyles.Any, CultureInfo.InvariantCulture, out Value)) return Value; | ||||
| 			return DefaultValue; | ||||
| 		} | ||||
|  | ||||
| 		internal byte[] GetValue(string SectionName, string Key, byte[] DefaultValue) | ||||
| 		{ | ||||
| 			string StringValue = GetValue(SectionName, Key, EncodeByteArray(DefaultValue)); | ||||
| 			try | ||||
| 			{ | ||||
| 				return DecodeByteArray(StringValue); | ||||
| 			} | ||||
| 			catch (FormatException) | ||||
| 			{ | ||||
| 				return DefaultValue; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
|         internal DateTime GetValue(string SectionName, string Key, DateTime DefaultValue) | ||||
|         { | ||||
|             string StringValue = GetValue(SectionName, Key, DefaultValue.ToString(CultureInfo.InvariantCulture)); | ||||
|             DateTime Value; | ||||
|             if (DateTime.TryParse(StringValue, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.NoCurrentDateDefault | DateTimeStyles.AssumeLocal, out Value)) return Value; | ||||
|             return DefaultValue; | ||||
|         } | ||||
|  | ||||
| 		// *** Setters for various types *** | ||||
| 		internal void SetValue(string SectionName, string Key, bool Value) | ||||
| 		{ | ||||
| 			SetValue(SectionName, Key, (Value) ? ("1") : ("0")); | ||||
| 		} | ||||
|  | ||||
|         internal void SetValue(string SectionName, string Key, int Value) | ||||
|         { | ||||
|             SetValue(SectionName, Key, Value.ToString(CultureInfo.InvariantCulture)); | ||||
|         } | ||||
|  | ||||
|         internal void SetValue(string SectionName, string Key, long Value) | ||||
|         { | ||||
|             SetValue(SectionName, Key, Value.ToString(CultureInfo.InvariantCulture)); | ||||
|         } | ||||
|  | ||||
| 		internal void SetValue(string SectionName, string Key, double Value) | ||||
| 		{ | ||||
| 			SetValue(SectionName, Key, Value.ToString(CultureInfo.InvariantCulture)); | ||||
| 		} | ||||
|  | ||||
| 		internal void SetValue(string SectionName, string Key, byte[] Value) | ||||
| 		{ | ||||
| 			SetValue(SectionName, Key, EncodeByteArray(Value)); | ||||
| 		} | ||||
|  | ||||
|         internal void SetValue(string SectionName, string Key, DateTime Value) | ||||
|         { | ||||
|             SetValue(SectionName, Key, Value.ToString(CultureInfo.InvariantCulture)); | ||||
|         } | ||||
|  | ||||
| #endregion | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -1,346 +0,0 @@ | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Text; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.common | ||||
| { | ||||
|     static class Utils | ||||
|     { | ||||
|         private static readonly uint[] _lookup32 = CreateLookup32(); | ||||
|  | ||||
|         private static uint[] CreateLookup32() | ||||
|         { | ||||
|             var result = new uint[256]; | ||||
|             for (int i = 0; i < 256; i++) | ||||
|             { | ||||
|                 string s = i.ToString("X2"); | ||||
|                 result[i] = ((uint)s[0]) + ((uint)s[1] << 16); | ||||
|             } | ||||
|             return result; | ||||
|         } | ||||
|  | ||||
|         public static string ByteArrayToHex(byte[] bytes, int offset = 0, int bytesPerLine = 16) | ||||
|         { | ||||
|             if (bytes == null) | ||||
|             { | ||||
|                 return String.Empty; | ||||
|             } | ||||
|  | ||||
|             char[] hexChars = "0123456789ABCDEF".ToCharArray(); | ||||
|  | ||||
|             // 00000000   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | ||||
|             // 00000010   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................ | ||||
|             int offsetBlock = 8 + 3; | ||||
|             int byteBlock = offsetBlock + (bytesPerLine * 3) + ((bytesPerLine - 1) / 8) + 2; | ||||
|             int lineLength = byteBlock + bytesPerLine + Environment.NewLine.Length; | ||||
|  | ||||
|             char[] line = (new String(' ', lineLength - Environment.NewLine.Length) + Environment.NewLine).ToCharArray(); | ||||
|             int numLines = (bytes.Length + bytesPerLine - 1) / bytesPerLine; | ||||
|  | ||||
|             StringBuilder sb = new StringBuilder(numLines * lineLength); | ||||
|  | ||||
|             for (int i = 0; i < bytes.Length; i += bytesPerLine) | ||||
|             { | ||||
|                 int h = i + offset; | ||||
|  | ||||
|                 line[0] = hexChars[(h >> 28) & 0xF]; | ||||
|                 line[1] = hexChars[(h >> 24) & 0xF]; | ||||
|                 line[2] = hexChars[(h >> 20) & 0xF]; | ||||
|                 line[3] = hexChars[(h >> 16) & 0xF]; | ||||
|                 line[4] = hexChars[(h >> 12) & 0xF]; | ||||
|                 line[5] = hexChars[(h >> 8) & 0xF]; | ||||
|                 line[6] = hexChars[(h >> 4) & 0xF]; | ||||
|                 line[7] = hexChars[(h >> 0) & 0xF]; | ||||
|  | ||||
|                 int hexColumn = offsetBlock; | ||||
|                 int charColumn = byteBlock; | ||||
|  | ||||
|                 for (int j = 0; j < bytesPerLine; j++) | ||||
|                 { | ||||
|                     if (j > 0 && (j & 7) == 0) | ||||
|                     { | ||||
|                         hexColumn++; | ||||
|                     } | ||||
|  | ||||
|                     if (i + j >= bytes.Length) | ||||
|                     { | ||||
|                         line[hexColumn] = ' '; | ||||
|                         line[hexColumn + 1] = ' '; | ||||
|                         line[charColumn] = ' '; | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         byte by = bytes[i + j]; | ||||
|                         line[hexColumn] = hexChars[(by >> 4) & 0xF]; | ||||
|                         line[hexColumn + 1] = hexChars[by & 0xF]; | ||||
|                         line[charColumn] = (by < 32 ? '.' : (char)by); | ||||
|                     } | ||||
|  | ||||
|                     hexColumn += 3; | ||||
|                     charColumn++; | ||||
|                 } | ||||
|  | ||||
|                 sb.Append(line); | ||||
|             } | ||||
|  | ||||
|             return sb.ToString(); | ||||
|         } | ||||
|  | ||||
|         public static UInt32 UnixTimeStampUTC() | ||||
|         { | ||||
|             UInt32 unixTimeStamp; | ||||
|             DateTime currentTime = DateTime.Now; | ||||
|             DateTime zuluTime = currentTime.ToUniversalTime(); | ||||
|             DateTime unixEpoch = new DateTime(1970, 1, 1); | ||||
|             unixTimeStamp = (UInt32)(zuluTime.Subtract(unixEpoch)).TotalSeconds; | ||||
|  | ||||
|             return unixTimeStamp; | ||||
|         } | ||||
|  | ||||
|         public static UInt64 MilisUnixTimeStampUTC() | ||||
|         { | ||||
|             UInt64 unixTimeStamp; | ||||
|             DateTime currentTime = DateTime.Now; | ||||
|             DateTime zuluTime = currentTime.ToUniversalTime(); | ||||
|             DateTime unixEpoch = new DateTime(1970, 1, 1); | ||||
|             unixTimeStamp = (UInt64)(zuluTime.Subtract(unixEpoch)).TotalMilliseconds; | ||||
|  | ||||
|             return unixTimeStamp; | ||||
|         } | ||||
|  | ||||
|         public static ulong swapEndian(ulong input) | ||||
|         { | ||||
|             return ((0x00000000000000FF) & (input >> 56) | | ||||
|                     (0x000000000000FF00) & (input >> 40) | | ||||
|                     (0x0000000000FF0000) & (input >> 24) | | ||||
|                     (0x00000000FF000000) & (input >> 8) | | ||||
|                     (0x000000FF00000000) & (input << 8) | | ||||
|                     (0x0000FF0000000000) & (input << 24) | | ||||
|                     (0x00FF000000000000) & (input << 40) | | ||||
|                     (0xFF00000000000000) & (input << 56)); | ||||
|         } | ||||
|  | ||||
|         public static uint swapEndian(uint input) | ||||
|         { | ||||
|             return ((input >> 24) & 0xff) | | ||||
|                     ((input << 8) & 0xff0000) | | ||||
|                     ((input >> 8) & 0xff00) | | ||||
|                     ((input << 24) & 0xff000000); | ||||
|         } | ||||
|  | ||||
|         public static int swapEndian(int input) | ||||
|         { | ||||
|             uint inputAsUint = (uint)input; | ||||
|  | ||||
|             input = (int) | ||||
|                     (((inputAsUint >> 24) & 0xff) | | ||||
|                     ((inputAsUint << 8) & 0xff0000) | | ||||
|                     ((inputAsUint >> 8) & 0xff00) | | ||||
|                     ((inputAsUint << 24) & 0xff000000)); | ||||
|  | ||||
|             return input; | ||||
|         } | ||||
|  | ||||
|         public static uint MurmurHash2(string key, uint seed) | ||||
|         { | ||||
|             // 'm' and 'r' are mixing constants generated offline. | ||||
|             // They're not really 'magic', they just happen to work well. | ||||
|  | ||||
|             byte[] data = Encoding.ASCII.GetBytes(key); | ||||
|             const uint m = 0x5bd1e995; | ||||
|             const int r = 24; | ||||
|             int len = key.Length; | ||||
|             int dataIndex = len - 4; | ||||
|  | ||||
|             // Initialize the hash to a 'random' value | ||||
|  | ||||
|             uint h = seed ^ (uint)len; | ||||
|  | ||||
|             // Mix 4 bytes at a time into the hash | ||||
|  | ||||
|  | ||||
|             while (len >= 4) | ||||
|             { | ||||
|                 h *= m; | ||||
|  | ||||
|                 uint k = (uint)BitConverter.ToInt32(data, dataIndex); | ||||
|                 k = ((k >> 24) & 0xff) | // move byte 3 to byte 0 | ||||
|                         ((k << 8) & 0xff0000) | // move byte 1 to byte 2 | ||||
|                         ((k >> 8) & 0xff00) | // move byte 2 to byte 1 | ||||
|                         ((k << 24) & 0xff000000); // byte 0 to byte 3 | ||||
|  | ||||
|                 k *= m; | ||||
|                 k ^= k >> r; | ||||
|                 k *= m; | ||||
|  | ||||
|                 h ^= k; | ||||
|  | ||||
|                 dataIndex -= 4; | ||||
|                 len -= 4; | ||||
|             } | ||||
|  | ||||
|             // Handle the last few bytes of the input array | ||||
|             switch (len) | ||||
|             { | ||||
|                 case 3: | ||||
|                     h ^= (uint)data[0] << 16; goto case 2; | ||||
|                 case 2: | ||||
|                     h ^= (uint)data[len - 2] << 8; goto case 1; | ||||
|                 case 1: | ||||
|                     h ^= data[len - 1]; | ||||
|                     h *= m; | ||||
|                     break; | ||||
|             }; | ||||
|  | ||||
|             // Do a few final mixes of the hash to ensure the last few | ||||
|             // bytes are well-incorporated. | ||||
|  | ||||
|             h ^= h >> 13; | ||||
|             h *= m; | ||||
|             h ^= h >> 15; | ||||
|  | ||||
|             return h; | ||||
|         } | ||||
|  | ||||
|         public static byte[] ConvertBoolArrayToBinaryStream(bool[] array) | ||||
|         { | ||||
|             byte[] data = new byte[(array.Length / 8) + (array.Length % 8 != 0 ? 1 : 0)]; | ||||
|  | ||||
|             int dataCounter = 0; | ||||
|             for (int i = 0; i < array.Length; i += 8) | ||||
|             { | ||||
|                 for (int bitCount = 0; bitCount < 8; bitCount++) | ||||
|                 { | ||||
|                     if (i + bitCount >= array.Length) | ||||
|                         break; | ||||
|                     data[dataCounter] = (byte)(((array[i + bitCount] ? 1 : 0) << 7 - bitCount) | data[dataCounter]); | ||||
|                 } | ||||
|                 dataCounter++; | ||||
|             } | ||||
|  | ||||
|             return data; | ||||
|         } | ||||
|  | ||||
|         public static string FFXIVLoginStringDecodeBinary(string path) | ||||
|         { | ||||
|             Console.OutputEncoding = System.Text.Encoding.UTF8; | ||||
|             byte[] data = File.ReadAllBytes(path); | ||||
|             int offset = 0x5405a; | ||||
|             //int offset = 0x5425d; | ||||
|             //int offset = 0x53ea0; | ||||
|             while (true) | ||||
|             { | ||||
|                 string result = ""; | ||||
|                 uint key = (uint)data[offset + 0] << 8 | data[offset + 1]; | ||||
|                 uint key2 = data[offset + 2]; | ||||
|                 key = RotateRight(key, 1) & 0xFFFF; | ||||
|                 key -= 0x22AF; | ||||
|                 key &= 0xFFFF; | ||||
|                 key2 = key2 ^ key; | ||||
|                 key = RotateRight(key, 1) & 0xFFFF; | ||||
|                 key -= 0x22AF; | ||||
|                 key &= 0xFFFF; | ||||
|                 uint finalKey = key; | ||||
|                 key = data[offset + 3]; | ||||
|                 uint count = (key2 & 0xFF) << 8; | ||||
|                 key = key ^ finalKey; | ||||
|                 key &= 0xFF; | ||||
|                 count |= key; | ||||
|  | ||||
|                 int count2 = 0; | ||||
|                 while (count != 0) | ||||
|                 { | ||||
|                     uint encrypted = data[offset + 4 + count2]; | ||||
|                     finalKey = RotateRight(finalKey, 1) & 0xFFFF; | ||||
|                     finalKey -= 0x22AF; | ||||
|                     finalKey &= 0xFFFF; | ||||
|                     encrypted = encrypted ^ (finalKey & 0xFF); | ||||
|  | ||||
|                     result += (char)encrypted; | ||||
|                     count--; | ||||
|                     count2++; | ||||
|                 } | ||||
|  | ||||
|                 offset += 4 + count2; | ||||
|  | ||||
|                 Log.Debug(result); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public static string FFXIVLoginStringDecode(byte[] data) | ||||
|         { | ||||
|             string result = ""; | ||||
|             uint key = (uint)data[0] << 8 | data[1]; | ||||
|             uint key2 = data[2]; | ||||
|             key = RotateRight(key, 1) & 0xFFFF; | ||||
|             key -= 0x22AF; | ||||
|             key2 = key2 ^ key; | ||||
|             key = RotateRight(key, 1) & 0xFFFF; | ||||
|             key -= 0x22AF; | ||||
|             uint finalKey = key; | ||||
|             key = data[3]; | ||||
|             uint count = (key2 & 0xFF) << 8; | ||||
|             key = key ^ finalKey; | ||||
|             key &= 0xFF; | ||||
|             count |= key; | ||||
|  | ||||
|             int count2 = 0; | ||||
|             while (count != 0) | ||||
|             { | ||||
|                 uint encrypted = data[4 + count2]; | ||||
|                 finalKey = RotateRight(finalKey, 1) & 0xFFFF; | ||||
|                 finalKey -= 0x22AF; | ||||
|                 encrypted = encrypted ^ (finalKey & 0xFF); | ||||
|                 result += (char)encrypted; | ||||
|                 count--; | ||||
|                 count2++; | ||||
|             } | ||||
|  | ||||
|             return result; | ||||
|         } | ||||
|  | ||||
|         public static byte[] FFXIVLoginStringEncode(uint key, string text) | ||||
|         { | ||||
|             key = key & 0xFFFF; | ||||
|  | ||||
|             uint count = 0; | ||||
|             byte[] asciiBytes = Encoding.ASCII.GetBytes(text); | ||||
|             byte[] result = new byte[4 + text.Length]; | ||||
|             for (count = 0; count < text.Length; count++) | ||||
|             { | ||||
|                 result[result.Length - count - 1] = (byte)(asciiBytes[asciiBytes.Length - count - 1] ^ (key & 0xFF)); | ||||
|                 key += 0x22AF; | ||||
|                 key &= 0xFFFF; | ||||
|                 key = RotateLeft(key, 1) & 0xFFFF; | ||||
|             } | ||||
|  | ||||
|             count = count ^ key; | ||||
|             result[3] = (byte)(count & 0xFF); | ||||
|  | ||||
|             key += 0x22AF & 0xFFFF; | ||||
|             key = RotateLeft(key, 1) & 0xFFFF; | ||||
|  | ||||
|             result[2] = (byte)(key & 0xFF); | ||||
|  | ||||
|             key += 0x22AF & 0xFFFF; | ||||
|             key = RotateLeft(key, 1) & 0xFFFF; | ||||
|  | ||||
|  | ||||
|             result[1] = (byte)(key & 0xFF); | ||||
|             result[0] = (byte)((key >> 8) & 0xFF); | ||||
|  | ||||
|             return result; | ||||
|         } | ||||
|  | ||||
|         public static uint RotateLeft(uint value, int bits) | ||||
|         { | ||||
|             return (value << bits) | (value >> (16 - bits)); | ||||
|         } | ||||
|  | ||||
|         public static uint RotateRight(uint value, int bits) | ||||
|         { | ||||
|             return (value >> bits) | (value << (16 - bits)); | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using FFXIVClassic_Map_Server.Actors; | ||||
| using FFXIVClassic_Map_Server.lua; | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.packets; | ||||
| using FFXIVClassic_Map_Server.actors.director; | ||||
| using FFXIVClassic_Map_Server.Actors; | ||||
| @@ -217,7 +217,7 @@ namespace FFXIVClassic_Map_Server.lua | ||||
|             } | ||||
|             catch(SyntaxErrorException e) | ||||
|             { | ||||
|                 Log.Error(String.Format("LUAERROR: {0}.", e.DecoratedMessage)); | ||||
|                 Program.Log.Error(String.Format("LUAERROR: {0}.", e.DecoratedMessage)); | ||||
|                 return null; | ||||
|             } | ||||
|             return script; | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.Actors; | ||||
| using FFXIVClassic_Map_Server.lua; | ||||
| using MoonSharp.Interpreter; | ||||
|   | ||||
| @@ -2,8 +2,8 @@ | ||||
| using System.Collections.Generic; | ||||
| using System.Runtime.InteropServices; | ||||
| using System.Diagnostics; | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using System.IO; | ||||
| using FFXIVClassic.Common; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.packets | ||||
| { | ||||
| @@ -334,7 +334,7 @@ namespace FFXIVClassic_Map_Server.packets | ||||
| #if DEBUG | ||||
|             Console.BackgroundColor = ConsoleColor.DarkYellow; | ||||
|  | ||||
|             Log.Debug(String.Format("IsAuth: {0} IsEncrypted: {1}, Size: 0x{2:X}, NumSubpackets: {3}{4}{5}", header.isAuthenticated, header.isCompressed, header.packetSize, header.numSubpackets, Environment.NewLine, Utils.ByteArrayToHex(getHeaderBytes()))); | ||||
|             Program.Log.Debug(String.Format("IsAuth: {0} IsEncrypted: {1}, Size: 0x{2:X}, NumSubpackets: {3}{4}{5}", header.isAuthenticated, header.isCompressed, header.packetSize, header.numSubpackets, Environment.NewLine, Utils.ByteArrayToHex(getHeaderBytes()))); | ||||
|  | ||||
|             foreach (SubPacket sub in getSubpackets()) | ||||
|             { | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| using System; | ||||
| using System.Runtime.InteropServices; | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.packets | ||||
| { | ||||
| @@ -142,15 +142,15 @@ namespace FFXIVClassic_Map_Server.packets | ||||
| #if DEBUG | ||||
|             Console.BackgroundColor = ConsoleColor.DarkRed; | ||||
|  | ||||
|             Log.Debug(String.Format("Size: 0x{0:X}{1}{2}", header.subpacketSize, Environment.NewLine, Utils.ByteArrayToHex(getHeaderBytes()))); | ||||
|             Program.Log.Debug(String.Format("Size: 0x{0:X}{1}{2}", header.subpacketSize, Environment.NewLine, Utils.ByteArrayToHex(getHeaderBytes()))); | ||||
|              | ||||
|             if (header.type == 0x03) | ||||
|             { | ||||
|                 Log.Debug(String.Format("Opcode: 0x{0:X}{1}{2}", gameMessage.opcode, Environment.NewLine, Utils.ByteArrayToHex(getGameMessageBytes(), SUBPACKET_SIZE))); | ||||
|                 Program.Log.Debug(String.Format("Opcode: 0x{0:X}{1}{2}", gameMessage.opcode, Environment.NewLine, Utils.ByteArrayToHex(getGameMessageBytes(), SUBPACKET_SIZE))); | ||||
|  | ||||
|                 Console.BackgroundColor = ConsoleColor.DarkMagenta; | ||||
|  | ||||
|                 Log.Debug(String.Format("Data: {0}{1}", Environment.NewLine, Utils.ByteArrayToHex(data, SUBPACKET_SIZE + GAMEMESSAGE_SIZE))); | ||||
|                 Program.Log.Debug(String.Format("Data: {0}{1}", Environment.NewLine, Utils.ByteArrayToHex(data, SUBPACKET_SIZE + GAMEMESSAGE_SIZE))); | ||||
|             } | ||||
|  | ||||
|             Console.BackgroundColor = ConsoleColor.Black; | ||||
|   | ||||
| @@ -48,7 +48,7 @@ namespace FFXIVClassic_Map_Server.packets.receive.events | ||||
|                             error = ASCIIEncoding.ASCII.GetString(binReader.ReadBytes(0x80)).Replace("\0", ""); | ||||
|  | ||||
|                             if (errorIndex == 0) | ||||
|                                 Log.Error("LUA ERROR:");                             | ||||
|                                 Program.Log.Error("LUA ERROR:");                             | ||||
|  | ||||
|                             return; | ||||
|                         } | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using System.IO; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.packets.send.player | ||||
| @@ -36,7 +36,7 @@ namespace FFXIVClassic_Map_Server.packets.send.player | ||||
|                     if (binStream.Length <= PACKET_SIZE - 0x20) | ||||
|                         binWriter.Write(binStream); | ||||
|                     else                     | ||||
|                         Log.Error("Failed making SetCompletedAchievements packet. Bin Stream was too big!");                     | ||||
|                         Program.Log.Error("Failed making SetCompletedAchievements packet. Bin Stream was too big!");                     | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Text; | ||||
| @@ -81,7 +81,7 @@ namespace FFXIVClassic_Map_Server.packets.send.player | ||||
|                     if (binStream.Length <= PACKET_SIZE - 0x20) | ||||
|                         binWriter.Write(binStream); | ||||
|                     else | ||||
|                         Log.Error("Failed making SetCutsceneBook packet. Bin Stream was too big!"); | ||||
|                         Program.Log.Error("Failed making SetCutsceneBook packet. Bin Stream was too big!"); | ||||
|  | ||||
|                     binWriter.Seek(0x109, SeekOrigin.Begin); | ||||
|                     binWriter.Write(Encoding.ASCII.GetBytes(sNpcName), 0, Encoding.ASCII.GetByteCount(sNpcName) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(sNpcName)); | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using System; | ||||
|  | ||||
| namespace FFXIVClassic_Map_Server.utils | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| using FFXIVClassic_Map_Server.common; | ||||
| using FFXIVClassic.Common; | ||||
| using FFXIVClassic_Map_Server.packets.send.player; | ||||
| using MySql.Data.MySqlClient; | ||||
| using System; | ||||
| @@ -79,14 +79,14 @@ namespace FFXIVClassic_Map_Server.utils | ||||
|  | ||||
|                         cmd.Parameters["@placename"].Value = placenames[pId]; | ||||
|  | ||||
|                         Log.Debug(String.Format("Wrote: {0}", id)); | ||||
|                         Program.Log.Debug(String.Format("Wrote: {0}", id)); | ||||
|                         cmd.ExecuteNonQuery(); | ||||
|  | ||||
|                     } | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -137,14 +137,14 @@ namespace FFXIVClassic_Map_Server.utils | ||||
|                         cmd.Parameters["@id"].Value = id; | ||||
|                         cmd.Parameters["@displayNameId"].Value = nameId; | ||||
|  | ||||
|                         Log.Debug(String.Format("Wrote: {0} : {1}", id, nameId)); | ||||
|                         Program.Log.Debug(String.Format("Wrote: {0} : {1}", id, nameId)); | ||||
|                         cmd.ExecuteNonQuery(); | ||||
|  | ||||
|                     } | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -203,14 +203,14 @@ namespace FFXIVClassic_Map_Server.utils | ||||
|  | ||||
|                         cmd.Parameters["@id"].Value = id; | ||||
|  | ||||
|                         Log.Debug(String.Format("Wrote: {0}", id));                         | ||||
|                         Program.Log.Debug(String.Format("Wrote: {0}", id));                         | ||||
|                         cmd.ExecuteNonQuery(); | ||||
|  | ||||
|                     } | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -288,7 +288,7 @@ namespace FFXIVClassic_Map_Server.utils | ||||
|                         else if (id == 1500) | ||||
|                             otherId = SetCompletedAchievementsPacket.CATEGORY_GRAND_COMPANY; | ||||
|  | ||||
|                         Log.Debug(String.Format("Wrote: {0} : {1} : {2} : {3}", id, name, otherId, points)); | ||||
|                         Program.Log.Debug(String.Format("Wrote: {0} : {1} : {2} : {3}", id, name, otherId, points)); | ||||
|                         cmd.Parameters["@id"].Value = id; | ||||
|                         cmd.Parameters["@name"].Value = name; | ||||
|                         cmd.Parameters["@otherId"].Value = otherId;                         | ||||
| @@ -300,7 +300,7 @@ namespace FFXIVClassic_Map_Server.utils | ||||
|                 } | ||||
|                 catch (MySqlException e) | ||||
|                 { | ||||
|                     Log.Error(e.ToString()); | ||||
|                     Program.Log.Error(e.ToString()); | ||||
|                 } | ||||
|                 finally | ||||
|                 { | ||||
| @@ -338,7 +338,7 @@ namespace FFXIVClassic_Map_Server.utils | ||||
|  | ||||
|                             string output2 = String.Format("mStaticActors.Add(0x{0:x}, new {2}(0x{0:x}, \"{1}\"));", id, output.Substring(1 + output.LastIndexOf("/")), output.Split('/')[1]); | ||||
|  | ||||
|                             Log.Debug(output2); | ||||
|                             Program.Log.Debug(output2); | ||||
|                             w.WriteLine(output2); | ||||
|  | ||||
|                         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user