public void OnMessage(ACDEnterKnownMessage msg) { throw new NotImplementedException(); }
public void ReadAndSendMap() { ActorDB.Init(); //LoadMapChunkDatabase(); string filePath = D3Sharp.Net.Game.Config.Instance.Map; string line, line2; //avarage = double.Parse("0.0", NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture); bool versiondetermined = false; int version = 0; if (File.Exists(filePath)) { StreamReader file = null; try { System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(@"\s+"); file = new StreamReader(filePath); while ((line = file.ReadLine()) != null) { line = rx.Replace(line, @" "); string[] data = line.Split(' '); if (!versiondetermined) if (data.Length > 0) if (data[0].Equals("v")) { version = int.Parse(data[1]); Logger.Info("Map file version: " + version); } else { //reveal world here if fallback - updated map files have world reveal data #region Interstitial,RevealWorld,WorldStatus,EnterWorld Game.SendMessage(new RevealWorldMessage() { Id = 0x0037, Field0 = WorldID, Field1 = 0x000115EE, }); Game.SendMessage(new EnterWorldMessage() { Id = 0x0033, Field0 = new Vector3D() { Field0 = 3143.75f, Field1 = 2828.75f, Field2 = 59.07559f }, Field1 = WorldID, Field2 = 0x000115EE, }); #endregion } versiondetermined = true; if (version == 0) { //fallback to the original version of the text files because people WILL mix them with the new :( if ((line2 = file.ReadLine()) != null) { string[] data2 = line2.Split(' '); RevealSceneMessage r = new RevealSceneMessage(data, WorldID); MapRevealSceneMessage r2 = new MapRevealSceneMessage(data2, WorldID); posx = (r.SceneSpec.tCachedValues.Field3.Field0.Field0 + r.SceneSpec.tCachedValues.Field3.Field1.Field0) / 2.0f + r.Position.Field1.Field0; posy = (r.SceneSpec.tCachedValues.Field3.Field0.Field1 + r.SceneSpec.tCachedValues.Field3.Field1.Field1) / 2.0f + r.Position.Field1.Field1; posz = (r.SceneSpec.tCachedValues.Field3.Field0.Field2 + r.SceneSpec.tCachedValues.Field3.Field1.Field2) / 2.0f + r.Position.Field1.Field2; Game.SendMessage(r); Game.SendMessage(r2); } } else if (data.Length >= 1) //check only lines with data in them { //packet data if (data[0].Equals("p") && data.Length >= 2) { int packettype = int.Parse(data[1]); switch (packettype) { case 0x34: //revealscenemessage if (int.Parse(data[56]) == -1) Game.SendMessage(new RevealSceneMessage(data.Skip(2).ToArray(), WorldID)); break; case 0x33: //enterworldmessage WorldID = int.Parse(data[5]); Game.SendMessage(new EnterWorldMessage() { Id = 0x0033, Field0 = new Vector3D() { Field0 = float.Parse(data[2], System.Globalization.CultureInfo.InvariantCulture), Field1 = float.Parse(data[3], System.Globalization.CultureInfo.InvariantCulture), Field2 = float.Parse(data[4], System.Globalization.CultureInfo.InvariantCulture) }, Field1 = WorldID, Field2 = int.Parse(data[6]), }); break; case 0x37: //revealworldmessage Game.SendMessage(new RevealWorldMessage() { Id = 0x0037, Field0 = int.Parse(data[2]), Field1 = int.Parse(data[3]), }); break; case 0x3b: //acdenterknownmessage { ACDEnterKnownMessage wm = new ACDEnterKnownMessage(data.Skip(2).ToArray(), WorldID); if (!ActorDB.isBlackListed(wm.Field1)) { Game.SendMessage(wm); Logger.Info(String.Format("{0,7}", wm.Field1) + ": " + ActorDB.GetActorName(wm.Field1)); if (ActorDB.isNPC(wm.Field1)) { //SEND NPC DATA HERE CreateNPC(wm.Field0); } Game.FlushOutgoingBuffer(); } } break; case 0x44: //maprevealscenemessage Game.SendMessage(new MapRevealSceneMessage(data.Skip(2).ToArray(), WorldID)); break; default: Logger.Error("Unimplemented packet type encountered in map file: " + packettype); break; } } //spawn point if (data[0].Equals("s") && data.Length >= 4) { posx = float.Parse(data[1], System.Globalization.CultureInfo.InvariantCulture); posy = float.Parse(data[2], System.Globalization.CultureInfo.InvariantCulture); posz = float.Parse(data[3], System.Globalization.CultureInfo.InvariantCulture); } } } } catch (Exception e) { Logger.DebugException(e, "ReadAndSendMap"); } finally { if (file != null) file.Close(); } } else { Logger.Error("Map file {0} not found!", filePath); } }