Remove trailing whitespace

This commit is contained in:
j883376
2013-05-06 13:07:41 -04:00
parent 7a93966158
commit ffcff4aea1
548 changed files with 16397 additions and 16398 deletions
@@ -142,7 +142,7 @@ Derision: Redesigned the UI. Use the menu bar, or the following shortcuts:
Ctrl-V View Packets
Ctrl-A Dump AA
Ctrl-D Show Debug Window (hidden by default. Change in Options).
Ctrl-O Set Options (these settings persist across sessions).
Ctrl-O Set Options (these settings persist across sessions).
Derision: Added the ability to disable removal of redundant waypoints.
Derision: Added an option to only generate SQL for spawns whose name contains a given string.
@@ -153,7 +153,7 @@ Derision: Fixed crash when Debug log was closed rather than just hidden.
Derision: Replaced HexDump method with a considerably faster version.
==07/14/2010==
Derision: Renamed PatchTestJune242010Decoder to PatchJuly132010Decoder.
Derision: Renamed PatchTestJune242010Decoder to PatchJuly132010Decoder.
Derision: Updated patch_May12-2010.conf with current EQEmu patch_Live.conf. Updated version number to 2.0.5
==06/26/2010==
@@ -60,9 +60,9 @@ namespace EQApplicationLayer
// Put our supported patch version decoders into the list.
PatchList = new List<PatchSpecficDecoder>();
PatchList.Add(new PatchMay122010Decoder());
PatchList.Add(new PatchJuly132010Decoder());
PatchList.Add(new PatchTestSep012010Decoder());
@@ -92,7 +92,7 @@ namespace EQApplicationLayer
PatchList.Add(new PatchJuly132012Decoder());
PatchList.Add(new PatchAugust152012Decoder());
PatchList.Add(new PatchDecember102012Decoder());
PatchList.Add(new PatchJanuary162013Decoder());
@@ -106,10 +106,10 @@ namespace EQApplicationLayer
PatchList.Add(new PatchMarch132013Decoder());
PatchList.Add(new PatchApril152013Decoder());
PatchList.Add(new PatchSoD());
}
}
// This is called from the main form to tell us where the application was launched from (where to look for the .conf files)
// and also gives us the LogHandler method so we can send debug messages to the main form.
@@ -143,7 +143,7 @@ namespace EQApplicationLayer
}
public string GetDecoderVersion()
{
{
// We don't need to check if PatchDecoder is null, because it is always initialised to an instance of the base
// PatchSpecficDecoder class
return PatchDecoder.GetVersion();
@@ -156,7 +156,7 @@ namespace EQApplicationLayer
}
public bool DumpPackets(string FileName, bool ShowTimeStamps)
{
{
return PatchDecoder.DumpPackets(FileName, ShowTimeStamps);
}
@@ -187,7 +187,7 @@ namespace EQApplicationLayer
else if (TempStatus > Status)
Status = TempStatus;
}
return Status;
return Status;
}
// This is called by the main form when all the packets have been processed. It prompts us to pass the packets down
@@ -214,7 +214,7 @@ namespace EQApplicationLayer
{
return PatchDecoder.GetCaptureStartTime();
}
public string GetZoneName()
{
return PatchDecoder.GetZoneName();
@@ -255,13 +255,13 @@ namespace EQApplicationLayer
SQLOut("DELETE from doors where zone = '" + ZoneName + "' and doorid >= @BaseDoorID and doorid <= @BaseDoorID + " + UpperBound + " and version = " + SpawnVersion + ";");
foreach(Door d in DoorList)
{
{
if ((d.OpenType == 57) || (d.OpenType == 58))
{
{
ZonePoint? zp = GetZonePointNumber(d.DoorParam);
if (zp != null)
{
{
d.DestZone = ZoneNumberToName(zp.Value.TargetZoneID);
d.DestX = zp.Value.TargetX;
d.DestY = zp.Value.TargetY;
@@ -276,7 +276,7 @@ namespace EQApplicationLayer
SQLOut(DoorQuery);
}
}
}
public void GenerateSpawnSQL(bool GenerateSpawns, bool GenerateGrids, bool GenerateMerchants,
string ZoneName, UInt32 ZoneID, UInt32 SpawnVersion,
@@ -325,18 +325,18 @@ namespace EQApplicationLayer
NPCSpawnList NPCSL = new NPCSpawnList();
foreach(ZoneEntryStruct Spawn in ZoneSpawns)
{
{
if (NPCType.IsMount(Spawn.SpawnName))
continue;
if (!IncludeInvisibleMen && (Spawn.Race == 127))
continue;
Spawn.Findable = (FindableEntities.IndexOf(Spawn.SpawnID) >= 0);
if (Spawn.IsNPC != 1)
continue;
if (Spawn.PetOwnerID > 0)
continue;
@@ -346,9 +346,9 @@ namespace EQApplicationLayer
bool ColoursInUse = false;
for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot)
{
{
if (((Spawn.SlotColour[ColourSlot] & 0x00ffffff) != 0) && UseNPCTypesTint)
ColoursInUse = true;
ColoursInUse = true;
}
if (Spawn.IsMercenary > 0)
@@ -358,7 +358,7 @@ namespace EQApplicationLayer
Spawn.BodyType, Spawn.HairColor, Spawn.BeardColor, Spawn.EyeColor1, Spawn.EyeColor2, Spawn.HairStyle, Spawn.Beard,
Spawn.DrakkinHeritage, Spawn.DrakkinTattoo, Spawn.DrakkinDetails, Spawn.Deity, Spawn.Class, Spawn.EquipChest2,
Spawn.Helm, Spawn.LastName);
if (ExistingDBID == 0)
{
@@ -368,7 +368,7 @@ namespace EQApplicationLayer
Spawn.Helm, Spawn.LastName, Spawn.Findable, Spawn.MeleeTexture1, Spawn.MeleeTexture2, Spawn.ArmorTintRed, Spawn.ArmorTintGreen, Spawn.ArmorTintBlue, Spawn.SlotColour);
NPCTL.AddNPCType(NewNPCType);
ExistingDBID = NPCTypeDBID++;
UInt32 ArmorTintID = 0;
@@ -435,17 +435,17 @@ namespace EQApplicationLayer
string Spawn2EntryQuery = "INSERT INTO spawn2(`id`, `spawngroupID`, `zone`, `version`, `x`, `y`, `z`, `heading`, `respawntime`, `variance`, `pathgrid`, `_condition`, `cond_value`, `enabled`) VALUES(";
Spawn2EntryQuery += "@StartingSpawn2ID + " + Spawn2ID + ", @StartingSpawnGroupID + " + SpawnGroupID + ", '" + ZoneName + "', " + SpawnVersion + ", " + Spawn.XPos + ", " + Spawn.YPos + ", " + Spawn.ZPos + ", ";
Spawn2EntryQuery += Spawn.Heading + ", 640, 0, 0, 0, 1, 1);";
SpawnGroupID++;
SpawnEntryID++;
Spawn2ID++;
if (GenerateSpawns)
{
SQLOut(SpawnGroupQuery);
SQLOut(SpawnEntryQuery);
SQLOut(Spawn2EntryQuery);
}
}
}
if (UpdateExistingNPCTypes)
@@ -472,7 +472,7 @@ namespace EQApplicationLayer
for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot)
{
if (((n.SlotColour[ColourSlot] & 0x00ffffff) != 0) && UseNPCTypesTint)
ColoursInUse = true;
ColoursInUse = true;
}
if (ColoursInUse)
@@ -505,11 +505,11 @@ namespace EQApplicationLayer
}
if (GenerateGrids)
{
{
List<PositionUpdate> AllMovementUpdates = PatchDecoder.GetAllMovementUpdates();
foreach (PositionUpdate Update in AllMovementUpdates)
NPCSL.AddWaypoint(Update.SpawnID, Update.p, Update.HighRes);
foreach (PositionUpdate Update in AllMovementUpdates)
NPCSL.AddWaypoint(Update.SpawnID, Update.p, Update.HighRes);
SQLOut("--");
SQLOut("-- Grids");
@@ -520,24 +520,24 @@ namespace EQApplicationLayer
foreach (NPCSpawn ns in NPCSL._NPCSpawnList)
{
if (ns.Waypoints.Count > 1)
{
{
bool AllWaypointsTheSame = true;
for (int WPNumber = 0; WPNumber < ns.Waypoints.Count; ++WPNumber)
{
{
if (WPNumber == 0)
continue;
if ((ns.Waypoints[WPNumber].x != ns.Waypoints[WPNumber - 1].x) ||
(ns.Waypoints[WPNumber].y != ns.Waypoints[WPNumber - 1].y) ||
(ns.Waypoints[WPNumber].z != ns.Waypoints[WPNumber - 1].z))
{
AllWaypointsTheSame = false;
AllWaypointsTheSame = false;
}
}
if (AllWaypointsTheSame)
continue;
int WaypointsInserted = 0;
int WPNum = 1;
@@ -551,10 +551,10 @@ namespace EQApplicationLayer
for (int WPNumber = FirstUsableWaypoint; WPNumber < ns.Waypoints.Count; ++WPNumber)
{
Position p = ns.Waypoints[WPNumber];
Position p = ns.Waypoints[WPNumber];
if (CoalesceWaypoints)
{
{
if ((WPNumber > FirstUsableWaypoint) && (WPNumber < (ns.Waypoints.Count - 2)))
{
Position np = ns.Waypoints[WPNumber + 1];
@@ -579,14 +579,14 @@ namespace EQApplicationLayer
}
}
// If this is the last waypoint, and we haven't inserted any of the previous ones, then don't bother
// If this is the last waypoint, and we haven't inserted any of the previous ones, then don't bother
// with this one either.
if ((WPNumber == (ns.Waypoints.Count - 1)) && (WaypointsInserted == 0))
continue;
SQLOut("INSERT into grid_entries (`gridid`, `zoneid`, `number`, `x`, `y`, `z`, `heading`, `pause`) VALUES(@StartingGridID + " + GridDBID + ", " + ZoneID + ", " + (WPNum++) + ", " + p.x + ", " + p.y + ", " + p.z + ", " + p.heading + ", " + Pause + ");");
++WaypointsInserted;
++WaypointsInserted;
}
if (WaypointsInserted > 1)
{
@@ -598,7 +598,7 @@ namespace EQApplicationLayer
SQLOut("UPDATE spawn2 set x = " + ns.Waypoints[1].x + ", y = " + ns.Waypoints[1].y + ", z = " + ns.Waypoints[1].z + ", heading = " + ns.Waypoints[1].heading + " WHERE id = @StartingSpawn2ID + " + ns.Spawn2DBID + ";");
++GridDBID;
}
}
}
}
}
@@ -627,7 +627,7 @@ namespace EQApplicationLayer
continue;
UInt32 MerchantNPCTypeID = npc.NPCTypeID;
SQLOut("--");
SQLOut("-- " + npc.Name);
SQLOut("-- ");
@@ -639,7 +639,7 @@ namespace EQApplicationLayer
string Insert = "";
if (mi.Quantity >= 0)
{
{
if (!StartOfPlayerSoldItems)
{
StartOfPlayerSoldItems = true;
@@ -662,7 +662,7 @@ namespace EQApplicationLayer
SQLOut("UPDATE npc_types SET merchant_id = @StartingMerchantID + " + MerchantDBID + " WHERE id = @StartingNPCTypeID + " + MerchantNPCTypeID + ";");
++MerchantDBID;
}
}
}
public void GenerateZonePointSQL(string ZoneName, SQLDestination SQLOut)
@@ -671,13 +671,13 @@ namespace EQApplicationLayer
{
string Insert = String.Format("REPLACE into zone_points(`zone`, `number`, `y`, `x`, `z`, `heading`, `target_y`, `target_x`, `target_z`, `target_heading`, `zoneinst`, `target_zone_id`, `buffer`) VALUES('{0}', {1}, 0, 0, 0, 0, {2}, {3}, {4}, {5}, {6}, {7}, 0);", ZoneName, zp.Number, zp.y, zp.x, zp.z, zp.Heading, zp.Instance, zp.ZoneID);
SQLOut(Insert);
SQLOut(Insert);
}
}
public void GenerateZonePointList()
{
ZonePointList = PatchDecoder.GetZonePointList();
ZonePointList = PatchDecoder.GetZonePointList();
}
public ZonePoint? GetZonePointNumber(Int32 Number)
@@ -697,7 +697,7 @@ namespace EQApplicationLayer
{
UInt16 ZoneID = PatchDecoder.GetZoneNumber();
NewZoneStruct NewZone = PatchDecoder.GetZoneData();
NewZoneStruct NewZone = PatchDecoder.GetZoneData();
SQLOut("--");
SQLOut("-- Zone Config");
@@ -725,7 +725,7 @@ namespace EQApplicationLayer
public bool DumpAAs(string FileName)
{
return PatchDecoder.DumpAAs(FileName);
}
}
public void GenerateObjectSQL(bool DoGroundSpawns, bool DoObjects, UInt32 SpawnVersion, SQLDestination SQLOut)
{
@@ -794,7 +794,7 @@ namespace EQApplicationLayer
case "IT10802_ACTORDEF":
return 16;
case "IT10803_ACTORDEF":
return 15;
return 15;
case "IT10865_ACTORDEF":
return 15;
case "IT128_ACTORDEF":
@@ -215,7 +215,7 @@
<Content Include="ChangeLog.txt" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
+46 -46
View File
@@ -53,32 +53,32 @@
this.StatusBar = new System.Windows.Forms.ToolStripStatusLabel();
this.statusStrip1.SuspendLayout();
this.SuspendLayout();
//
//
// InputFileOpenDialog
//
//
this.InputFileOpenDialog.Filter = "Capture Files (*.pcap)|*.pcap|All files (*.*)|*.*";
//
//
// PacketDumpFileDialog
//
//
this.PacketDumpFileDialog.Filter = "Text Files (*.txt)|*.txt|All files (*.*)|*.*";
this.PacketDumpFileDialog.Title = "Dump Packets To File";
//
//
// ProgressBar
//
//
this.ProgressBar.Location = new System.Drawing.Point(2, 78);
this.ProgressBar.Name = "ProgressBar";
this.ProgressBar.Size = new System.Drawing.Size(627, 23);
this.ProgressBar.TabIndex = 35;
this.ProgressBar.Visible = false;
//
//
// mainMenu1
//
//
this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuFile,
this.menuView});
//
//
// menuFile
//
//
this.menuFile.Index = 0;
this.menuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuLoadPCAP,
@@ -88,131 +88,131 @@
this.menuViewPackets,
this.menuExit});
this.menuFile.Text = "File";
//
//
// menuLoadPCAP
//
//
this.menuLoadPCAP.Index = 0;
this.menuLoadPCAP.Shortcut = System.Windows.Forms.Shortcut.CtrlL;
this.menuLoadPCAP.Text = "Load PCAP";
this.menuLoadPCAP.Click += new System.EventHandler(this.menuLoadPCAP_Click);
//
//
// menuGenerateSQL
//
//
this.menuGenerateSQL.Enabled = false;
this.menuGenerateSQL.Index = 1;
this.menuGenerateSQL.Shortcut = System.Windows.Forms.Shortcut.CtrlS;
this.menuGenerateSQL.Text = "Generate SQL";
this.menuGenerateSQL.Click += new System.EventHandler(this.menuGenerateSQL_Click);
//
//
// menuPacketDump
//
//
this.menuPacketDump.Enabled = false;
this.menuPacketDump.Index = 2;
this.menuPacketDump.Shortcut = System.Windows.Forms.Shortcut.CtrlP;
this.menuPacketDump.Text = "Packet Dump";
this.menuPacketDump.Click += new System.EventHandler(this.menuPacketDump_Click);
//
//
// menuDumpAAs
//
//
this.menuDumpAAs.Enabled = false;
this.menuDumpAAs.Index = 3;
this.menuDumpAAs.Shortcut = System.Windows.Forms.Shortcut.CtrlA;
this.menuDumpAAs.Text = "Dump AAs";
this.menuDumpAAs.Click += new System.EventHandler(this.menuDumpAAs_Click);
//
//
// menuViewPackets
//
//
this.menuViewPackets.Enabled = false;
this.menuViewPackets.Index = 4;
this.menuViewPackets.Shortcut = System.Windows.Forms.Shortcut.CtrlV;
this.menuViewPackets.Text = "View Packets";
this.menuViewPackets.Click += new System.EventHandler(this.menuViewPackets_Click);
//
//
// menuExit
//
//
this.menuExit.Index = 5;
this.menuExit.Text = "Exit";
this.menuExit.Click += new System.EventHandler(this.menuExit_Click);
//
//
// menuView
//
//
this.menuView.Index = 1;
this.menuView.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuViewDebugLog,
this.menuOptions});
this.menuView.Text = "View";
this.menuView.Popup += new System.EventHandler(this.menuView_Popup);
//
//
// menuViewDebugLog
//
//
this.menuViewDebugLog.Index = 0;
this.menuViewDebugLog.Shortcut = System.Windows.Forms.Shortcut.CtrlD;
this.menuViewDebugLog.Text = "Debug Log";
this.menuViewDebugLog.Click += new System.EventHandler(this.menuViewDebugLog_Click);
//
//
// menuOptions
//
//
this.menuOptions.Index = 1;
this.menuOptions.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
this.menuOptions.Text = "Options";
this.menuOptions.Click += new System.EventHandler(this.menuOptions_Click);
//
//
// label1
//
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(92, 13);
this.label1.TabIndex = 36;
this.label1.Text = "EQ Client Version:";
//
//
// ClientVersionLabel
//
//
this.ClientVersionLabel.AutoSize = true;
this.ClientVersionLabel.Location = new System.Drawing.Point(116, 9);
this.ClientVersionLabel.Name = "ClientVersionLabel";
this.ClientVersionLabel.Size = new System.Drawing.Size(166, 13);
this.ClientVersionLabel.TabIndex = 37;
this.ClientVersionLabel.Text = ".PCAP file not loaded. Press Ctrl-L";
//
//
// label2
//
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(55, 37);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(49, 13);
this.label2.TabIndex = 38;
this.label2.Text = "Packets:";
//
//
// PacketCountLabel
//
//
this.PacketCountLabel.AutoSize = true;
this.PacketCountLabel.Location = new System.Drawing.Point(116, 37);
this.PacketCountLabel.Name = "PacketCountLabel";
this.PacketCountLabel.Size = new System.Drawing.Size(145, 13);
this.PacketCountLabel.TabIndex = 39;
this.PacketCountLabel.Text = " ";
//
//
// ZoneLabelText
//
//
this.ZoneLabelText.AutoSize = true;
this.ZoneLabelText.Location = new System.Drawing.Point(72, 62);
this.ZoneLabelText.Name = "ZoneLabelText";
this.ZoneLabelText.Size = new System.Drawing.Size(32, 13);
this.ZoneLabelText.TabIndex = 40;
this.ZoneLabelText.Text = "Zone";
//
//
// ZoneLabel
//
//
this.ZoneLabel.AutoSize = true;
this.ZoneLabel.Location = new System.Drawing.Point(116, 62);
this.ZoneLabel.Name = "ZoneLabel";
this.ZoneLabel.Size = new System.Drawing.Size(145, 13);
this.ZoneLabel.TabIndex = 41;
this.ZoneLabel.Text = " ";
//
//
// statusStrip1
//
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.StatusBar});
this.statusStrip1.Location = new System.Drawing.Point(0, 104);
@@ -220,15 +220,15 @@
this.statusStrip1.Size = new System.Drawing.Size(633, 22);
this.statusStrip1.TabIndex = 42;
this.statusStrip1.Text = "statusStrip1";
//
//
// StatusBar
//
//
this.StatusBar.Name = "StatusBar";
this.StatusBar.Size = new System.Drawing.Size(209, 17);
this.StatusBar.Text = "Ready. Press Ctrl-L to load a .PCAP file";
//
//
// EQExtractor2Form1
//
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(633, 126);
@@ -1,7 +1,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
using System;
using System.Collections.Generic;
@@ -11,7 +11,7 @@ using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using SharpPcap;
using SharpPcap;
using EQApplicationLayer;
namespace EQExtractor2
@@ -46,16 +46,16 @@ namespace EQExtractor2
Options.ShowTimeStamps.Checked = Properties.Settings.Default.DumpTimeStamps;
}
public void Log(string Message)
{
DebugLog.ConsoleWindow.Items.Add(Message);
DebugLog.ConsoleWindow.SelectedIndex = DebugLog.ConsoleWindow.Items.Count - 1;
Application.DoEvents();
}
private void device_OnPacketArrival(object sender, SharpPcap.CaptureEventArgs e)
{
{
if (e.Packet.LinkLayerType == PacketDotNet.LinkLayers.Ethernet)
{
PacketDotNet.Packet packet;
@@ -65,11 +65,11 @@ namespace EQExtractor2
++PacketsSeen;
if ((PacketsSeen > 0) && ((PacketsSeen % 10000) == 0))
{
{
DebugLog.ConsoleWindow.SelectedIndex = DebugLog.ConsoleWindow.Items.Count - 1;
int Progress = (int)((float)BytesRead / (float)CaptureFileSize * 100);
ProgressBar.Value = Progress;
Application.DoEvents();
}
@@ -91,7 +91,7 @@ namespace EQExtractor2
var ipPacket = (PacketDotNet.IpPacket)udpPacket.ParentPacket;
System.Net.IPAddress srcIp = ipPacket.SourceAddress;
System.Net.IPAddress dstIp = ipPacket.DestinationAddress;
byte[] Payload = udpPacket.PayloadData;
Int32 l = udpPacket.Length - udpPacket.Header.GetLength(0);
@@ -105,7 +105,7 @@ namespace EQExtractor2
}
}
}
public void WriteSQL(string Message)
{
SQLStream.WriteLine(Message);
@@ -121,7 +121,7 @@ namespace EQExtractor2
foreach (Control c in this.Controls)
{
if ((c is Button) || (c is TextBox) || (c is MaskedTextBox) || (c is CheckBox))
c.Enabled = false;
c.Enabled = false;
}
}
@@ -132,17 +132,17 @@ namespace EQExtractor2
c.Enabled = true;
menuGenerateSQL.Enabled = StreamProcessor.StreamRecognised() && StreamProcessor.SupportsSQLGeneration();
menuDumpAAs.Enabled = StreamProcessor.StreamRecognised();
menuDumpAAs.Enabled = StreamProcessor.StreamRecognised();
}
private void menuLoadPCAP_Click(object sender, EventArgs e)
{
if (InputFileOpenDialog.ShowDialog() != DialogResult.OK)
return;
menuGenerateSQL.Enabled = false;
menuGenerateSQL.Enabled = false;
menuPacketDump.Enabled = false;
menuViewPackets.Enabled = false;
menuViewPackets.Enabled = false;
menuDumpAAs.Enabled = false;
SharpPcap.OfflinePcapDevice device;
@@ -183,7 +183,7 @@ namespace EQExtractor2
Log("Failed to open netcode debug file for writing.");
Options.EQPacketDebugFilename.Text = "";
StreamProcessor.Packets.SetDebugLogHandler(null);
}
}
}
else
StreamProcessor.Packets.SetDebugLogHandler(null);
@@ -228,13 +228,13 @@ namespace EQExtractor2
menuPacketDump.Enabled = true;
menuViewPackets.Enabled = true;
Log("Stream recognised as " + StreamProcessor.GetDecoderVersion());
int PPLength = StreamProcessor.VerifyPlayerProfile();
ClientVersionLabel.Text = StreamProcessor.GetDecoderVersion();
if (PPLength == 0)
{
Log("Unable to find player profile packet, or packet not of correct size.");
@@ -252,9 +252,9 @@ namespace EQExtractor2
Log("Found player profile packet of the expected length (" + PPLength + ").");
if(StreamProcessor.SupportsSQLGeneration())
StatusBar.Text = "Client version recognised. Press Ctrl-S to Generate SQL";
StatusBar.Text = "Client version recognised. Press Ctrl-S to Generate SQL";
else
StatusBar.Text = "Client version recognised. *SQL GENERATION NOT SUPPORTED FOR THIS CLIENT*";
StatusBar.Text = "Client version recognised. *SQL GENERATION NOT SUPPORTED FOR THIS CLIENT*";
}
ZoneName = StreamProcessor.GetZoneName();
@@ -266,7 +266,7 @@ namespace EQExtractor2
Log("Zone number is " + ZoneNumber);
ZoneLabel.Text = StreamProcessor.GetZoneLongName() + " [" + StreamProcessor.GetZoneName() + "] (" + ZoneNumber.ToString() + ")";
SQLForm.ZoneIDTextBox.Text = ZoneNumber.ToString();
SQLForm.ZoneIDTextBox.Enabled = true;
SQLForm.DoorsTextBox.Enabled = true;
@@ -283,14 +283,14 @@ namespace EQExtractor2
menuPacketDump.Enabled = true;
menuViewPackets.Enabled = true;
menuDumpAAs.Enabled = true;
SQLForm.RecalculateBaseInsertIDs();
StreamProcessor.GenerateZonePointList();
}
private void menuGenerateSQL_Click(object sender, EventArgs e)
{
{
if (SQLForm.ShowDialog() != DialogResult.OK)
return;
@@ -325,7 +325,7 @@ namespace EQExtractor2
WriteSQL("-- SQL created by " + Version);
WriteSQL("--");
WriteSQL("-- Using Decoder: " + StreamProcessor.GetDecoderVersion());
WriteSQL("--");
WriteSQL("--");
WriteSQL("-- Packets captured on " + StreamProcessor.GetCaptureStartTime().ToString());
WriteSQL("--");
WriteSQL("-- Change these variables if required");
@@ -437,7 +437,7 @@ namespace EQExtractor2
{
menuViewDebugLog.Checked = true;
ShowDebugLog();
}
else
{
@@ -453,7 +453,7 @@ namespace EQExtractor2
Application.DoEvents();
string TextFileViewer = Properties.Settings.Default.TextFileViewer;
string TempFileName = Path.GetTempFileName();
if (StreamProcessor.DumpPackets(TempFileName, Properties.Settings.Default.DumpTimeStamps))
@@ -479,7 +479,7 @@ namespace EQExtractor2
if (Properties.Settings.Default.ShowDebugWindowOnStartup)
{
ShowDebugLog();
}
}
@@ -505,7 +505,7 @@ namespace EQExtractor2
Log("To generate SQL, press Ctrl-S and select the check boxes and set the starting SQL INSERT IDs as required.");
Log("Review the generated SQL before sourcing as DELETEs are auto-generated.");
Log("Press Ctrl-V to view packets, or Ctrl-D to dump them to a text file.");
Log("");
Log("");
}
private void menuOptions_Click(object sender, EventArgs e)
@@ -554,6 +554,6 @@ namespace EQExtractor2
{
menuViewDebugLog.Checked = DebugLog.Visible;
}
}
}
}
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
+35 -35
View File
@@ -1,7 +1,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
// This is the netcode for turning SOE protocol packets into EQ Application Packets
//
using System;
@@ -45,20 +45,20 @@ namespace EQPacket
public DateTime PacketTime;
public bool Locked = false;
}
public class PacketManager
{
bool DEBUG = false;
bool DUMPPACKETS = false;
private void Debug(string Message)
{
if (DebugLogger != null)
DebugLogger(Message);
DebugLogger(Message);
}
public bool ErrorsInStream = false;
const UInt32 OP_SessionRequest = 0x0001;
const UInt32 OP_SessionResponse = 0x0002;
const UInt32 OP_Combined = 0x0003;
@@ -74,7 +74,7 @@ namespace EQPacket
private int[] FragmentedPacketSize = {0, 0};
private int[] FragmentedBytesCollected = {0, 0};
private byte[][] Fragments = new byte [2][];
private System.Net.IPAddress ServerIP;
private ushort ServerPort = 0;
@@ -136,7 +136,7 @@ namespace EQPacket
PacketList.Add(Packet);
}
private struct CacheEntry
{
public int Seq;
@@ -152,7 +152,7 @@ namespace EQPacket
Payload = inPayload;
PacketTime = inPacketTime;
SubPacket = inSubPacket;
}
}
}
private List<CacheEntry> Cache = new List<CacheEntry>();
@@ -212,7 +212,7 @@ namespace EQPacket
int CacheElement;
CacheElement = FindCacheEntry(GetExpectedSeq(PacketDirection.ServerToClient), PacketDirection.ServerToClient);
while ( CacheElement >= 0)
{
if (DEBUG)
@@ -267,8 +267,8 @@ namespace EQPacket
++ExpectedClientSEQ;
else if (Direction == PacketDirection.ServerToClient)
++ExpectedServerSEQ;
}
}
public void ProcessPacket(System.Net.IPAddress srcIp, System.Net.IPAddress dstIp, ushort srcPort, ushort dstPort, byte[] Payload, DateTime PacketTime, bool SubPacket, bool Cached)
{
byte Flags = 0x00;
@@ -313,7 +313,7 @@ namespace EQPacket
ServerIP = dstIp;
ServerPort = dstPort;
Log("-- Locked onto EQ Stream. Client IP " + srcIp + ":" + srcPort + " Server IP " + dstIp + ":" + dstPort);
ExpectedClientSEQ = 0;
@@ -321,7 +321,7 @@ namespace EQPacket
ExpectedServerSEQ = 0;
CryptoFlag = 0;
break;
}
@@ -395,7 +395,7 @@ namespace EQPacket
{
if (DEBUG)
Debug("0xa5");
Uncompressed = new byte[Payload.Length - 5];
Array.Copy(Payload, 3, Uncompressed, 0, Payload.Length - 5);
@@ -436,12 +436,12 @@ namespace EQPacket
AdvanceSeq(Direction);
}
}
break;
}
else
AdvanceSeq(Direction);
bool Multi = ((Uncompressed[2] == 0x00) && (Uncompressed[3] == 0x19));
@@ -473,11 +473,11 @@ namespace EQPacket
++BufferPosition;
OpCodeBytes = 3;
}
AppOpCode += (Uncompressed[BufferPosition++] * 256);
ProcessAppPacket(srcIp, dstIp, srcPort, dstPort, AppOpCode, Size - OpCodeBytes, Uncompressed, BufferPosition, Direction, PacketTime);
BufferPosition = BufferPosition + (Size - OpCodeBytes);
}
}
@@ -494,7 +494,7 @@ namespace EQPacket
OpCodeBytes = 3;
}
AppOpCode += (Uncompressed[BufferPosition++] * 256);
AppOpCode += (Uncompressed[BufferPosition++] * 256);
ProcessAppPacket(srcIp, dstIp, srcPort, dstPort, AppOpCode, Uncompressed.Length - (2 + OpCodeBytes), Uncompressed, BufferPosition, Direction, PacketTime);
}
@@ -539,7 +539,7 @@ namespace EQPacket
{
Debug("Uncompressed data.");
Debug(Utils.HexDump(Uncompressed));
}
}
if (FragmentSeq[(int)Direction] == -1)
{
@@ -552,7 +552,7 @@ namespace EQPacket
Debug("FragmentSeq is " + FragmentSeq[(int)Direction] + " Expecting " + GetExpectedSeq(Direction));
if (FragmentSeq[(int)Direction] != GetExpectedSeq(Direction))
{
{
if (FragmentSeq[(int)Direction] > GetExpectedSeq(Direction))
{
if((FragmentSeq[(int)Direction] - GetExpectedSeq(Direction)) < 1000)
@@ -569,7 +569,7 @@ namespace EQPacket
}
}
FragmentSeq[(int)Direction] = -1;
break;
}
else
@@ -636,7 +636,7 @@ namespace EQPacket
FragmentSeq[(int)Direction] = -1;
}
}
}
break;
}
else
@@ -700,7 +700,7 @@ namespace EQPacket
AppOpCode += (Fragments[(int)Direction][BufferPosition++] * 256);
ProcessAppPacket(srcIp, dstIp, srcPort, dstPort, AppOpCode, Size - OpCodeBytes, Fragments[(int)Direction], BufferPosition, Direction, PacketTime);
BufferPosition = BufferPosition + (Size - OpCodeBytes);
}
}
@@ -721,7 +721,7 @@ namespace EQPacket
byte[] NewPacket = new byte[Fragments[(int)Direction].Length - OpCodeBytes];
Array.Copy(Fragments[(int)Direction], BufferPosition, NewPacket, 0, Fragments[(int)Direction].Length - OpCodeBytes);
ProcessAppPacket(srcIp, dstIp, srcPort, dstPort, AppOpCode, NewPacket.Length, NewPacket, 0, Direction, PacketTime);
}
if (DEBUG)
@@ -730,7 +730,7 @@ namespace EQPacket
FragmentSeq[(int)Direction] = -1;
}
}
break;
}
case OP_OutOfOrderAck:
@@ -750,7 +750,7 @@ namespace EQPacket
Seq = Payload[3] * 256 + Payload[4];
else
Seq = Payload[2] * 256 + Payload[3];
string DirectionString;
if(Direction == PacketDirection.ClientToServer)
@@ -763,7 +763,7 @@ namespace EQPacket
Debug("OP_Ack, Seq " + Seq + " " + DirectionString);
Debug(Utils.HexDump(Payload));
}
break;
}
default:
@@ -776,7 +776,7 @@ namespace EQPacket
Debug(Utils.HexDump(Payload));
Debug("-------------------");
}
int AppOpCode;
byte[] NewPacket;
@@ -791,7 +791,7 @@ namespace EQPacket
else
{
// This packet has a flag byte between the first and second bytes of the opcode, and also a CRC
Flags = Payload[1];
if (Flags == 0x5a)
@@ -837,7 +837,7 @@ namespace EQPacket
}
if (!Cached && !CacheEmpty())
ProcessCache();
ProcessCache();
}
public void ProcessAppPacket(System.Net.IPAddress srcIp, System.Net.IPAddress dstIp, ushort srcPort, ushort dstPort, int InOpCode, int BufferSize, byte[] Source, int Offset, PacketDirection Direction, DateTime PacketTime)
@@ -854,7 +854,7 @@ namespace EQPacket
PermaLocked = true;
}
Identified = (TempStatus == IdentificationStatus.Yes);
}
}
AddPacket(app);
}
@@ -885,7 +885,7 @@ namespace EQPacket
UncompressedSize = Payload.Length - (Offset - 1);
}
zs.Close();
zs.Dispose();
@@ -897,6 +897,6 @@ namespace EQPacket
Array.Resize(ref Uncompressed, UncompressedSize);
return Uncompressed;
}
}
}
}
+86 -86
View File
@@ -77,9 +77,9 @@
this.groupBox2.SuspendLayout();
this.MiscOptions.SuspendLayout();
this.SuspendLayout();
//
//
// groupBox1
//
//
this.groupBox1.Controls.Add(this.MerchantTextBox);
this.groupBox1.Controls.Add(this.MerchantLabel);
this.groupBox1.Controls.Add(this.GroundSpawnTextBox);
@@ -108,9 +108,9 @@
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Insert IDs";
//
//
// MerchantTextBox
//
//
this.MerchantTextBox.Enabled = false;
this.MerchantTextBox.HidePromptOnLeave = true;
this.MerchantTextBox.Location = new System.Drawing.Point(107, 302);
@@ -119,18 +119,18 @@
this.MerchantTextBox.PromptChar = ' ';
this.MerchantTextBox.Size = new System.Drawing.Size(61, 20);
this.MerchantTextBox.TabIndex = 34;
//
//
// MerchantLabel
//
//
this.MerchantLabel.AutoSize = true;
this.MerchantLabel.Location = new System.Drawing.Point(14, 306);
this.MerchantLabel.Name = "MerchantLabel";
this.MerchantLabel.Size = new System.Drawing.Size(76, 13);
this.MerchantLabel.TabIndex = 33;
this.MerchantLabel.Text = "Merchant Lists";
//
//
// GroundSpawnTextBox
//
//
this.GroundSpawnTextBox.Enabled = false;
this.GroundSpawnTextBox.HidePromptOnLeave = true;
this.GroundSpawnTextBox.Location = new System.Drawing.Point(107, 274);
@@ -139,18 +139,18 @@
this.GroundSpawnTextBox.PromptChar = ' ';
this.GroundSpawnTextBox.Size = new System.Drawing.Size(61, 20);
this.GroundSpawnTextBox.TabIndex = 32;
//
//
// GroundSpawnLabel
//
//
this.GroundSpawnLabel.AutoSize = true;
this.GroundSpawnLabel.Location = new System.Drawing.Point(7, 278);
this.GroundSpawnLabel.Name = "GroundSpawnLabel";
this.GroundSpawnLabel.Size = new System.Drawing.Size(83, 13);
this.GroundSpawnLabel.TabIndex = 31;
this.GroundSpawnLabel.Text = "Ground Spawns";
//
//
// ObjectTextBox
//
//
this.ObjectTextBox.Enabled = false;
this.ObjectTextBox.HidePromptOnLeave = true;
this.ObjectTextBox.Location = new System.Drawing.Point(107, 246);
@@ -159,18 +159,18 @@
this.ObjectTextBox.PromptChar = ' ';
this.ObjectTextBox.Size = new System.Drawing.Size(61, 20);
this.ObjectTextBox.TabIndex = 30;
//
//
// label1
//
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(47, 250);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(43, 13);
this.label1.TabIndex = 29;
this.label1.Text = "Objects";
//
//
// GridTextBox
//
//
this.GridTextBox.Enabled = false;
this.GridTextBox.HidePromptOnLeave = true;
this.GridTextBox.Location = new System.Drawing.Point(107, 218);
@@ -179,18 +179,18 @@
this.GridTextBox.PromptChar = ' ';
this.GridTextBox.Size = new System.Drawing.Size(61, 20);
this.GridTextBox.TabIndex = 28;
//
//
// GridLabel
//
//
this.GridLabel.AutoSize = true;
this.GridLabel.Location = new System.Drawing.Point(59, 222);
this.GridLabel.Name = "GridLabel";
this.GridLabel.Size = new System.Drawing.Size(31, 13);
this.GridLabel.TabIndex = 27;
this.GridLabel.Text = "Grids";
//
//
// Spawn2TextBox
//
//
this.Spawn2TextBox.Enabled = false;
this.Spawn2TextBox.HidePromptOnLeave = true;
this.Spawn2TextBox.Location = new System.Drawing.Point(107, 190);
@@ -199,18 +199,18 @@
this.Spawn2TextBox.PromptChar = ' ';
this.Spawn2TextBox.Size = new System.Drawing.Size(61, 20);
this.Spawn2TextBox.TabIndex = 26;
//
//
// Spawn2Label
//
//
this.Spawn2Label.AutoSize = true;
this.Spawn2Label.Location = new System.Drawing.Point(44, 194);
this.Spawn2Label.Name = "Spawn2Label";
this.Spawn2Label.Size = new System.Drawing.Size(46, 13);
this.Spawn2Label.TabIndex = 25;
this.Spawn2Label.Text = "Spawn2";
//
//
// SpawnEntryTextBox
//
//
this.SpawnEntryTextBox.Enabled = false;
this.SpawnEntryTextBox.HidePromptOnLeave = true;
this.SpawnEntryTextBox.Location = new System.Drawing.Point(107, 162);
@@ -219,18 +219,18 @@
this.SpawnEntryTextBox.PromptChar = ' ';
this.SpawnEntryTextBox.Size = new System.Drawing.Size(61, 20);
this.SpawnEntryTextBox.TabIndex = 24;
//
//
// SpawnEntryLabel
//
//
this.SpawnEntryLabel.AutoSize = true;
this.SpawnEntryLabel.Location = new System.Drawing.Point(26, 166);
this.SpawnEntryLabel.Name = "SpawnEntryLabel";
this.SpawnEntryLabel.Size = new System.Drawing.Size(64, 13);
this.SpawnEntryLabel.TabIndex = 23;
this.SpawnEntryLabel.Text = "SpawnEntry";
//
//
// SpawnGroupTextBox
//
//
this.SpawnGroupTextBox.Enabled = false;
this.SpawnGroupTextBox.HidePromptOnLeave = true;
this.SpawnGroupTextBox.Location = new System.Drawing.Point(107, 134);
@@ -239,18 +239,18 @@
this.SpawnGroupTextBox.PromptChar = ' ';
this.SpawnGroupTextBox.Size = new System.Drawing.Size(61, 20);
this.SpawnGroupTextBox.TabIndex = 22;
//
//
// SpawnGroupLabel
//
//
this.SpawnGroupLabel.AutoSize = true;
this.SpawnGroupLabel.Location = new System.Drawing.Point(21, 138);
this.SpawnGroupLabel.Name = "SpawnGroupLabel";
this.SpawnGroupLabel.Size = new System.Drawing.Size(69, 13);
this.SpawnGroupLabel.TabIndex = 21;
this.SpawnGroupLabel.Text = "SpawnGroup";
//
//
// NPCTypesTextBox
//
//
this.NPCTypesTextBox.Enabled = false;
this.NPCTypesTextBox.HidePromptOnLeave = true;
this.NPCTypesTextBox.Location = new System.Drawing.Point(107, 106);
@@ -259,18 +259,18 @@
this.NPCTypesTextBox.PromptChar = ' ';
this.NPCTypesTextBox.Size = new System.Drawing.Size(61, 20);
this.NPCTypesTextBox.TabIndex = 20;
//
//
// label3
//
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(32, 110);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(58, 13);
this.label3.TabIndex = 19;
this.label3.Text = "NPCTypes";
//
//
// DoorsTextBox
//
//
this.DoorsTextBox.Enabled = false;
this.DoorsTextBox.HidePromptOnLeave = true;
this.DoorsTextBox.Location = new System.Drawing.Point(107, 78);
@@ -279,18 +279,18 @@
this.DoorsTextBox.PromptChar = ' ';
this.DoorsTextBox.Size = new System.Drawing.Size(61, 20);
this.DoorsTextBox.TabIndex = 18;
//
//
// DoorsLabel
//
//
this.DoorsLabel.AutoSize = true;
this.DoorsLabel.Location = new System.Drawing.Point(55, 82);
this.DoorsLabel.Name = "DoorsLabel";
this.DoorsLabel.Size = new System.Drawing.Size(35, 13);
this.DoorsLabel.TabIndex = 17;
this.DoorsLabel.Text = "Doors";
//
//
// VersionSelector
//
//
this.VersionSelector.Enabled = false;
this.VersionSelector.Location = new System.Drawing.Point(107, 50);
this.VersionSelector.Maximum = new decimal(new int[] {
@@ -303,27 +303,27 @@
this.VersionSelector.TabIndex = 16;
this.VersionSelector.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.VersionSelector.ValueChanged += new System.EventHandler(this.VersionSelector_ValueChanged);
//
//
// VersionLabel
//
//
this.VersionLabel.AutoSize = true;
this.VersionLabel.Location = new System.Drawing.Point(48, 54);
this.VersionLabel.Name = "VersionLabel";
this.VersionLabel.Size = new System.Drawing.Size(42, 13);
this.VersionLabel.TabIndex = 15;
this.VersionLabel.Text = "Version";
//
//
// label4
//
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(44, 26);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(46, 13);
this.label4.TabIndex = 14;
this.label4.Text = "ZoneID:";
//
//
// ZoneIDTextBox
//
//
this.ZoneIDTextBox.Enabled = false;
this.ZoneIDTextBox.HidePromptOnLeave = true;
this.ZoneIDTextBox.Location = new System.Drawing.Point(107, 22);
@@ -333,9 +333,9 @@
this.ZoneIDTextBox.Size = new System.Drawing.Size(100, 20);
this.ZoneIDTextBox.TabIndex = 13;
this.ZoneIDTextBox.Validated += new System.EventHandler(this.ZoneIDTextBox_Validated);
//
//
// groupBox2
//
//
this.groupBox2.Controls.Add(this.InvisibleMenCheckBox);
this.groupBox2.Controls.Add(this.NPCTypesTintCheckBox);
this.groupBox2.Controls.Add(this.UpdateExistingNPCTypesCheckbox);
@@ -353,9 +353,9 @@
this.groupBox2.TabIndex = 1;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Include";
//
//
// NPCTypesTintCheckBox
//
//
this.NPCTypesTintCheckBox.AutoSize = true;
this.NPCTypesTintCheckBox.Location = new System.Drawing.Point(24, 233);
this.NPCTypesTintCheckBox.Name = "NPCTypesTintCheckBox";
@@ -365,9 +365,9 @@
this.toolTip1.SetToolTip(this.NPCTypesTintCheckBox, "Uses the npc_types_tint table instead of the tint columns in the npc_types table." +
"");
this.NPCTypesTintCheckBox.UseVisualStyleBackColor = true;
//
//
// UpdateExistingNPCTypesCheckbox
//
//
this.UpdateExistingNPCTypesCheckbox.AutoSize = true;
this.UpdateExistingNPCTypesCheckbox.Location = new System.Drawing.Point(24, 210);
this.UpdateExistingNPCTypesCheckbox.Name = "UpdateExistingNPCTypesCheckbox";
@@ -376,9 +376,9 @@
this.UpdateExistingNPCTypesCheckbox.Text = "Update existing NPC types";
this.UpdateExistingNPCTypesCheckbox.UseVisualStyleBackColor = true;
this.UpdateExistingNPCTypesCheckbox.CheckedChanged += new System.EventHandler(this.UpdateExistingNPCTypesCheckbox_CheckedChanged);
//
//
// ZonePointCheckBox
//
//
this.ZonePointCheckBox.AutoSize = true;
this.ZonePointCheckBox.Checked = true;
this.ZonePointCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -388,9 +388,9 @@
this.ZonePointCheckBox.TabIndex = 40;
this.ZonePointCheckBox.Text = "Zone Points";
this.ZonePointCheckBox.UseVisualStyleBackColor = true;
//
//
// ZoneCheckBox
//
//
this.ZoneCheckBox.AutoSize = true;
this.ZoneCheckBox.Checked = true;
this.ZoneCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -400,9 +400,9 @@
this.ZoneCheckBox.TabIndex = 39;
this.ZoneCheckBox.Text = "Zone Config";
this.ZoneCheckBox.UseVisualStyleBackColor = true;
//
//
// MerchantCheckBox
//
//
this.MerchantCheckBox.AutoSize = true;
this.MerchantCheckBox.Checked = true;
this.MerchantCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -412,9 +412,9 @@
this.MerchantCheckBox.TabIndex = 38;
this.MerchantCheckBox.Text = "Merchant Lists";
this.MerchantCheckBox.UseVisualStyleBackColor = true;
//
//
// GroundSpawnCheckBox
//
//
this.GroundSpawnCheckBox.AutoSize = true;
this.GroundSpawnCheckBox.Checked = true;
this.GroundSpawnCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -424,9 +424,9 @@
this.GroundSpawnCheckBox.TabIndex = 9;
this.GroundSpawnCheckBox.Text = "Ground Spawns";
this.GroundSpawnCheckBox.UseVisualStyleBackColor = true;
//
//
// ObjectCheckBox
//
//
this.ObjectCheckBox.AutoSize = true;
this.ObjectCheckBox.Checked = true;
this.ObjectCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -436,9 +436,9 @@
this.ObjectCheckBox.TabIndex = 8;
this.ObjectCheckBox.Text = "Objects";
this.ObjectCheckBox.UseVisualStyleBackColor = true;
//
//
// GridCheckBox
//
//
this.GridCheckBox.AutoSize = true;
this.GridCheckBox.Checked = true;
this.GridCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -448,9 +448,9 @@
this.GridCheckBox.TabIndex = 7;
this.GridCheckBox.Text = "Grids";
this.GridCheckBox.UseVisualStyleBackColor = true;
//
//
// SpawnCheckBox
//
//
this.SpawnCheckBox.AutoSize = true;
this.SpawnCheckBox.Checked = true;
this.SpawnCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -461,9 +461,9 @@
this.SpawnCheckBox.Text = "Spawns";
this.SpawnCheckBox.UseVisualStyleBackColor = true;
this.SpawnCheckBox.CheckedChanged += new System.EventHandler(this.SpawnCheckBox_CheckedChanged);
//
//
// DoorCheckBox
//
//
this.DoorCheckBox.AutoSize = true;
this.DoorCheckBox.Checked = true;
this.DoorCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -473,14 +473,14 @@
this.DoorCheckBox.TabIndex = 4;
this.DoorCheckBox.Text = "Doors";
this.DoorCheckBox.UseVisualStyleBackColor = true;
//
//
// SQLFileDialog
//
//
this.SQLFileDialog.Filter = "SQL Files (*.sql)|*.sql|Text Files (*.txt)|*.txt|All files (*.*)|*.*";
this.SQLFileDialog.Title = "Generate SQL and Save As";
//
//
// GenerateSQLButton
//
//
this.GenerateSQLButton.Location = new System.Drawing.Point(126, 474);
this.GenerateSQLButton.Name = "GenerateSQLButton";
this.GenerateSQLButton.Size = new System.Drawing.Size(100, 27);
@@ -488,9 +488,9 @@
this.GenerateSQLButton.Text = "Generate SQL";
this.GenerateSQLButton.UseVisualStyleBackColor = true;
this.GenerateSQLButton.Click += new System.EventHandler(this.GenerateSQLButton_Click);
//
//
// SQLCancelButton
//
//
this.SQLCancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.SQLCancelButton.Location = new System.Drawing.Point(305, 474);
this.SQLCancelButton.Name = "SQLCancelButton";
@@ -499,9 +499,9 @@
this.SQLCancelButton.Text = "Cancel";
this.SQLCancelButton.UseVisualStyleBackColor = true;
this.SQLCancelButton.Click += new System.EventHandler(this.SQLCancelButton_Click);
//
//
// MiscOptions
//
//
this.MiscOptions.Controls.Add(this.SpawnNameFilter);
this.MiscOptions.Controls.Add(this.label2);
this.MiscOptions.Controls.Add(this.CoalesceWaypoints);
@@ -511,25 +511,25 @@
this.MiscOptions.TabIndex = 2;
this.MiscOptions.TabStop = false;
this.MiscOptions.Text = "Misc. Options";
//
//
// SpawnNameFilter
//
//
this.SpawnNameFilter.Location = new System.Drawing.Point(229, 46);
this.SpawnNameFilter.Name = "SpawnNameFilter";
this.SpawnNameFilter.Size = new System.Drawing.Size(209, 20);
this.SpawnNameFilter.TabIndex = 5;
//
//
// label2
//
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(14, 49);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(209, 13);
this.label2.TabIndex = 4;
this.label2.Text = "Only include spawns that contain the string";
//
//
// CoalesceWaypoints
//
//
this.CoalesceWaypoints.AutoSize = true;
this.CoalesceWaypoints.Checked = true;
this.CoalesceWaypoints.CheckState = System.Windows.Forms.CheckState.Checked;
@@ -540,9 +540,9 @@
this.CoalesceWaypoints.Text = "Automatically coalesce waypoints";
this.toolTip1.SetToolTip(this.CoalesceWaypoints, "Remove redundant waypoints from generated SQL");
this.CoalesceWaypoints.UseVisualStyleBackColor = true;
//
//
// InvisibleMenCheckBox
//
//
this.InvisibleMenCheckBox.AutoSize = true;
this.InvisibleMenCheckBox.Location = new System.Drawing.Point(24, 256);
this.InvisibleMenCheckBox.Name = "InvisibleMenCheckBox";
@@ -551,9 +551,9 @@
this.InvisibleMenCheckBox.Text = "Include Invisible Men";
this.toolTip1.SetToolTip(this.InvisibleMenCheckBox, "Includes Race 127 NPCs");
this.InvisibleMenCheckBox.UseVisualStyleBackColor = true;
//
//
// GenerateSQLForm
//
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.SQLCancelButton;
@@ -96,8 +96,8 @@ namespace EQExtractor2
this.DialogResult = DialogResult.Cancel;
}
}
}
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@@ -1,7 +1,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
using System;
using System.Collections.Generic;
@@ -21,7 +21,7 @@ namespace EQExtractor2.InternalTypes
public UInt32 DropID;
public string Name;
public UInt16 ZoneID;
public UInt16 InstanceID;
public UInt16 InstanceID;
public float Heading;
public float y;
public float x;
@@ -64,7 +64,7 @@ namespace EQExtractor2.InternalTypes
public UInt16 ZoneID;
public UInt16 InstanceID;
public byte FallDamage;
public float FogDensity;
public float FogDensity;
}
public class ZoneEntryStruct
@@ -76,16 +76,16 @@ namespace EQExtractor2.InternalTypes
}
public string SpawnName;
public UInt32 SpawnID;
public UInt32 SpawnID;
public bool Findable;
public Byte Level;
public Byte IsNPC;
public Byte IsNPC;
public uint Showname;
public uint TargetableWithHotkey;
public uint Targetable;
public uint Targetable;
public uint ShowHelm;
public uint Gender;
public byte OtherData;
public byte OtherData;
public string DestructableString1;
public string DestructableString2;
public string DestructableString3;
@@ -120,21 +120,21 @@ namespace EQExtractor2.InternalTypes
public UInt32 DrakkinTattoo;
public UInt32 DrakkinDetails;
public UInt32 Deity;
public byte Class;
public byte EquipChest2;
public byte Class;
public byte EquipChest2;
public byte Helm;
public string LastName;
public UInt32 PetOwnerID;
public float YPos;
public float Heading;
public float XPos;
public float ZPos;
public float Heading;
public float XPos;
public float ZPos;
public UInt32[] SlotColour;
public byte ArmorTintRed;
public byte ArmorTintGreen;
public byte ArmorTintBlue;
public byte ArmorTintBlue;
public UInt32 MeleeTexture1;
public UInt32 MeleeTexture2;
public UInt32 MeleeTexture2;
public UInt32[] Equipment;
public string Title;
public string Suffix;
@@ -383,7 +383,7 @@ namespace EQExtractor2.InternalTypes
public UInt16 Instance;
public float x;
public float y;
public float z;
public float z;
public float TargetX;
public float TargetY;
public float TargetZ;
@@ -575,7 +575,7 @@ namespace EQExtractor2.InternalTypes
public Position p;
public bool HighRes;
public bool HighRes;
}
public class ExplorerSpawnRecord
@@ -632,7 +632,7 @@ namespace EQExtractor2.InternalTypes
public float DestY;
public float DestZ;
public float DestHeading;
}
class MerchantManager
{
+4 -4
View File
@@ -30,9 +30,9 @@
{
this.ConsoleWindow = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
//
// ConsoleWindow
//
//
this.ConsoleWindow.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
@@ -44,9 +44,9 @@
this.ConsoleWindow.Name = "ConsoleWindow";
this.ConsoleWindow.Size = new System.Drawing.Size(938, 326);
this.ConsoleWindow.TabIndex = 35;
//
//
// LogForm
//
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(962, 355);
+1 -1
View File
@@ -21,6 +21,6 @@ namespace EQExtractor2
e.Cancel = true;
this.Hide();
}
}
}
+27 -27
View File
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@@ -1,7 +1,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
using System;
using System.IO;
@@ -124,8 +124,8 @@ namespace EQExtractor2.OpCodes
public void ResetCounts()
{
foreach (OpCode oc in OpCodeList)
oc.Count = 0;
foreach (OpCode oc in OpCodeList)
oc.Count = 0;
}
public void RegisterExplorer(string Name, ExplorerMethod Explorer)
@@ -137,7 +137,7 @@ namespace EQExtractor2.OpCodes
oc.Explorer = Explorer;
return;
}
}
}
}
public void UnRegisterExplorer(string Name)
Binary file not shown.
@@ -14,8 +14,8 @@ namespace EQExtractor2.Patches
public PatchApril152013Decoder()
{
Version = "EQ Client Build Date April 15 2013.";
PatchConfFileName = "patch_April15-2013.conf";
PatchConfFileName = "patch_April15-2013.conf";
SupportsSQLGeneration = true;
}
@@ -204,7 +204,7 @@ namespace EQExtractor2.Patches
UInt32 Position4 = Buffer.ReadUInt32();
UInt32 Position5 = Buffer.ReadUInt32();
NewSpawn.YPos = Utils.EQ19ToFloat((Int32)((Position1 >> 12) & 0x7FFFF));
NewSpawn.ZPos = Utils.EQ19ToFloat((Int32)(Position2) & 0x7FFFF);
@@ -13,7 +13,7 @@ namespace EQExtractor2.Patches
public PatchAug042011Decoder()
{
Version = "EQ Client Build Date August 04 2011.";
ExpectedPPLength = 28496;
PPZoneIDOffset = 21164;
@@ -17,7 +17,7 @@ namespace EQExtractor2.Patches
ExpectedPPLength = 33904;
PPZoneIDOffset = 26572;
PatchConfFileName = "patch_August15-2012.conf";
}
@@ -28,10 +28,10 @@ namespace EQExtractor2.Patches
Item NewItem = new Item();
Buffer.SetPosition(30);
NewItem.MerchantSlot = Buffer.ReadByte();
NewItem.Price = Buffer.ReadUInt32();
NewItem.MerchantSlot = Buffer.ReadByte();
NewItem.Price = Buffer.ReadUInt32();
Buffer.SkipBytes(5);
NewItem.Quantity = Buffer.ReadInt32();
NewItem.Quantity = Buffer.ReadInt32();
Buffer.SetPosition(109);
// 109
NewItem.Name = Buffer.ReadString(true);
@@ -15,7 +15,7 @@ namespace EQExtractor2.Patches
Version = "EQ Client Build Date December 7 2010.";
PatchConfFileName = "patch_Dec7-2010.conf";
}
override public IdentificationStatus Identify(int OpCode, int Size, PacketDirection Direction)
{
@@ -31,7 +31,7 @@ namespace EQExtractor2.Patches
public override void RegisterExplorers()
{
//OpManager.RegisterExplorer("OP_ClientUpdate", ExploreClientUpdate);
//OpManager.RegisterExplorer("OP_ClientUpdate", ExploreClientUpdate);
}
public void ExploreClientUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
@@ -42,7 +42,7 @@ namespace EQExtractor2.Patches
float y = Buffer.ReadSingle();
Buffer.SkipBytes(12);
float z = Buffer.ReadSingle();
Buffer.SkipBytes(4);
UInt32 Temp = Buffer.ReadUInt32();
Temp = Temp & 0x3FFFFF;
@@ -18,7 +18,7 @@ namespace EQExtractor2.Patches
ExpectedPPLength = -1;
PPZoneIDOffset = -1;
PatchConfFileName = "patch_Dec10-2012.conf";
PacketsToMatch = new PacketToMatch[] {
@@ -31,7 +31,7 @@ namespace EQExtractor2.Patches
}
override public IdentificationStatus Identify(int OpCode, int Size, PacketDirection Direction)
{
{
if ((OpCode == OpManager.OpCodeNameToNumber(PacketsToMatch[WaitingForPacket].OPCodeName)) &&
(Direction == PacketsToMatch[WaitingForPacket].Direction))
{
@@ -42,7 +42,7 @@ namespace EQExtractor2.Patches
return IdentificationStatus.Yes;
WaitingForPacket++;
return IdentificationStatus.Tentative;
}
@@ -119,8 +119,8 @@ namespace EQExtractor2.Patches
ByteStream Buffer = new ByteStream(PlayerProfilePacket[0]);
Buffer.SkipBytes(24);
Buffer.SkipBytes(24);
UInt32 BindCount = Buffer.ReadUInt32();
for (int i = 0; i < BindCount; ++i)
@@ -129,7 +129,7 @@ namespace EQExtractor2.Patches
}
Buffer.SkipBytes(8); // Deity, intoxication
UInt32 SpellRefreshCount = Buffer.ReadUInt32();
UInt32 SpellRefreshCount = Buffer.ReadUInt32();
for (int i = 0; i < SpellRefreshCount; ++i)
{
@@ -137,20 +137,20 @@ namespace EQExtractor2.Patches
}
UInt32 EquipmentCount = Buffer.ReadUInt32();
for (int i = 0; i < EquipmentCount; ++i)
{
Buffer.SkipBytes(20);
}
UInt32 SomethingCount = Buffer.ReadUInt32();
UInt32 SomethingCount = Buffer.ReadUInt32();
for (int i = 0; i < SomethingCount; ++i)
{
Buffer.SkipBytes(20);
}
SomethingCount = Buffer.ReadUInt32();
SomethingCount = Buffer.ReadUInt32();
for (int i = 0; i < SomethingCount; ++i)
{
@@ -158,7 +158,7 @@ namespace EQExtractor2.Patches
}
SomethingCount = Buffer.ReadUInt32();
for (int i = 0; i < SomethingCount; ++i)
{
Buffer.SkipBytes(4);
@@ -169,25 +169,25 @@ namespace EQExtractor2.Patches
UInt32 Points = Buffer.ReadUInt32();
UInt32 Mana = Buffer.ReadUInt32();
UInt32 CurHP = Buffer.ReadUInt32();
Buffer.SkipBytes(28);
Buffer.SkipBytes(28);
UInt32 AACount = Buffer.ReadUInt32();
for (int i = 0; i < AACount; ++i)
{
Buffer.SkipBytes(12);
}
SomethingCount = Buffer.ReadUInt32();
for (int i = 0; i < SomethingCount; ++i)
{
Buffer.SkipBytes(4);
}
SomethingCount = Buffer.ReadUInt32();
for (int i = 0; i < SomethingCount; ++i)
{
Buffer.SkipBytes(4);
@@ -305,7 +305,7 @@ namespace EQExtractor2.Patches
UInt16 ZoneID = Buffer.ReadUInt16();
return ZoneID;
}
override public List<ZoneEntryStruct> GetSpawns()
@@ -335,7 +335,7 @@ namespace EQExtractor2.Patches
UInt32 Bitfield = Buffer.ReadUInt32();
NewSpawn.Gender = (Bitfield & 3);
Byte OtherData = Buffer.ReadByte();
Buffer.SkipBytes(8); // Skip 8 unknown bytes
@@ -367,7 +367,7 @@ namespace EQExtractor2.Patches
NewSpawn.BodyType = Buffer.ReadUInt32();
else
NewSpawn.BodyType = 0;
for (int j = 1; j < NewSpawn.PropCount; ++j)
Buffer.SkipBytes(4);
@@ -399,9 +399,9 @@ namespace EQExtractor2.Patches
NewSpawn.WalkSpeed = Buffer.ReadSingle();
NewSpawn.RunSpeed = Buffer.ReadSingle();
NewSpawn.Race = Buffer.ReadUInt32();
Buffer.SkipBytes(1); // Skip Holding
NewSpawn.Deity = Buffer.ReadUInt32();
@@ -411,9 +411,9 @@ namespace EQExtractor2.Patches
NewSpawn.Class = Buffer.ReadByte();
Buffer.SkipBytes(4); // Skip PVP, Standstate, Light, Flymode
NewSpawn.LastName = Buffer.ReadString(true);
Buffer.SkipBytes(6);
NewSpawn.PetOwnerID = Buffer.ReadUInt32();
@@ -421,7 +421,7 @@ namespace EQExtractor2.Patches
Buffer.SkipBytes(25);
NewSpawn.MeleeTexture1 = 0;
NewSpawn.MeleeTexture2 = 0;
NewSpawn.MeleeTexture2 = 0;
if ( (NewSpawn.IsNPC == 0) || NPCType.IsPlayableRace(NewSpawn.Race))
{
@@ -501,7 +501,7 @@ namespace EQExtractor2.Patches
NewSpawn.Heading = Utils.EQ19ToFloat((Int32)(Position5) & 0x7FFFF);
if ((OtherData & 16) > 0)
@@ -626,7 +626,7 @@ namespace EQExtractor2.Patches
DecodeItemPacket(OutputStream, Buffer, Direction);
}
}
@@ -669,7 +669,7 @@ namespace EQExtractor2.Patches
String Desc = Buffer.ReadString(false);
OutputStream.WriteLine("Duration: {0}, Unk4: {1:X}, StartTime: {2:X}", Duration, Unk4, StartTime);
OutputStream.WriteLine("Desc: {0}", Desc);
@@ -765,7 +765,7 @@ namespace EQExtractor2.Patches
}
OutputStream.WriteLine("");
//OutputStream.WriteLine("Offset is now: {0}", Buffer.GetPosition());
}
}
@@ -803,7 +803,7 @@ namespace EQExtractor2.Patches
//float DeltaHeading = Utils.EQ19ToFloat((int)(Word & 0x3FF));
}
}
@@ -843,11 +843,11 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("");
UInt32 BindCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: BindCount = {1}", Buffer.GetPosition() - 4, BindCount);
for (int i = 0; i < BindCount; ++i)
{
OutputStream.WriteLine("{0, -5}: Bind: {1} Zone: {2} XYZ: {3},{4},{5} Heading: {6}",
Buffer.GetPosition(), i, Buffer.ReadUInt32(), Buffer.ReadSingle(), Buffer.ReadSingle(),Buffer.ReadSingle(),Buffer.ReadSingle());
Buffer.GetPosition(), i, Buffer.ReadUInt32(), Buffer.ReadSingle(), Buffer.ReadSingle(),Buffer.ReadSingle(),Buffer.ReadSingle());
}
OutputStream.WriteLine("");
@@ -858,10 +858,10 @@ namespace EQExtractor2.Patches
//Buffer.SkipBytes(8); // Deity, intoxication
UInt32 UnknownCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Unknown Count = {1}", Buffer.GetPosition() - 4, UnknownCount);
for (int i = 0; i < UnknownCount; ++i)
{
@@ -872,7 +872,7 @@ namespace EQExtractor2.Patches
UInt32 EquipmentCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: EquipmentCount = {1}", Buffer.GetPosition() - 4, EquipmentCount);
for (int i = 0; i < EquipmentCount; ++i)
{
OutputStream.Write("{0, -5}: Equip: {1} Values: ", Buffer.GetPosition(), i);
@@ -901,7 +901,7 @@ namespace EQExtractor2.Patches
UInt32 TintCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: TintCount = {1}", Buffer.GetPosition() - 4, TintCount);
OutputStream.WriteLine("{0, -5}: TintCount = {1}", Buffer.GetPosition() - 4, TintCount);
for (int i = 0; i < TintCount; ++i)
{
@@ -976,8 +976,8 @@ namespace EQExtractor2.Patches
UInt32 AACount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: AA Count = {1}", Buffer.GetPosition() - 4, AACount);
OutputStream.WriteLine("{0, -5}: AA Count = {1}", Buffer.GetPosition() - 4, AACount);
for (int i = 0; i < AACount; ++i)
{
@@ -988,25 +988,25 @@ namespace EQExtractor2.Patches
UInt32 SkillCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Skill Count = {1}", Buffer.GetPosition() - 4, SkillCount);
for (int i = 0; i < SkillCount; ++i)
{
Buffer.SkipBytes(4);
}
UInt32 SomethingCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Something Count = {1}", Buffer.GetPosition() - 4, SomethingCount);
OutputStream.WriteLine("{0, -5}: Something Count = {1}", Buffer.GetPosition() - 4, SomethingCount);
for (int i = 0; i < SomethingCount; ++i)
{
Buffer.SkipBytes(4);
}
UInt32 DisciplineCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Discipline Count = {1}", Buffer.GetPosition() - 4, DisciplineCount);
for (int i = 0; i < DisciplineCount; ++i)
{
Buffer.SkipBytes(4);
@@ -1014,12 +1014,12 @@ namespace EQExtractor2.Patches
UInt32 TimeStampCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: TimeStamp Count = {1}", Buffer.GetPosition() - 4, TimeStampCount);
for (int i = 0; i < TimeStampCount; ++i)
{
Buffer.SkipBytes(4);
}
UInt32 RecastCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Recast Count = {1}", Buffer.GetPosition() - 4, RecastCount);
@@ -1037,11 +1037,11 @@ namespace EQExtractor2.Patches
Buffer.SkipBytes(4);
}
UInt32 SpellBookSlots = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: SpellBookSlot Count = {1}", Buffer.GetPosition() - 4, SpellBookSlots);
for (int i = 0; i < SpellBookSlots; ++i)
{
Buffer.SkipBytes(4);
@@ -1050,7 +1050,7 @@ namespace EQExtractor2.Patches
UInt32 SpellMemSlots = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Spell Mem Count = {1}", Buffer.GetPosition() - 4, SpellMemSlots);
for (int i = 0; i < SpellMemSlots; ++i)
{
Buffer.SkipBytes(4);
@@ -1059,18 +1059,18 @@ namespace EQExtractor2.Patches
SomethingCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Unknown Count = {1}", Buffer.GetPosition() - 4, SomethingCount);
for (int i = 0; i < SomethingCount; ++i)
{
Buffer.SkipBytes(4);
}
OutputStream.WriteLine("{0, -5}: Unknown = {1}", Buffer.GetPosition(), Buffer.ReadByte());
UInt32 BuffCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Buff Count = {1}", Buffer.GetPosition() - 4, BuffCount);
for (int i = 0; i < BuffCount; ++i)
{
Buffer.ReadByte();
@@ -1104,7 +1104,7 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("{0, -5}: Unknown = {1}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Thirst? = {1}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Hunger? = {1}", Buffer.GetPosition(), Buffer.ReadUInt32());
//Buffer.SkipBytes(20);
OutputStream.WriteLine("{0, -5}: AA Spent = {1}", Buffer.GetPosition(), Buffer.ReadUInt32());
@@ -1118,14 +1118,14 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("{0, -5}: AA Spent Special = {1}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: AA Unspent = {1}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Unknown", Buffer.GetPosition(), Buffer.ReadUInt16());
//Buffer.SkipBytes(30);
UInt32 BandolierCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Bandolier Count = {1}", Buffer.GetPosition() - 4, BandolierCount);
for (int i = 0; i < BandolierCount; ++i)
{
Buffer.ReadString(false);
@@ -1146,11 +1146,11 @@ namespace EQExtractor2.Patches
UInt32 PotionCount = Buffer.ReadUInt32();
OutputStream.WriteLine("{0, -5}: Potion Count = {1}", Buffer.GetPosition() - 4, PotionCount);
for (int i = 0; i < PotionCount; ++i)
{
Buffer.ReadString(false);
Buffer.SkipBytes(8);
Buffer.SkipBytes(8);
}
OutputStream.WriteLine("{0, -5}: Unknown {1}", Buffer.GetPosition(), Buffer.ReadInt32());
@@ -1186,7 +1186,7 @@ namespace EQExtractor2.Patches
int CurrentPosition = Buffer.GetPosition();
OutputStream.WriteLine("{0, -5}: Name: {1}", Buffer.GetPosition(), Buffer.ReadString(false));
Buffer.SetPosition(CurrentPosition + (int)NameLength);
UInt32 LastNameLength = Buffer.ReadUInt32();
@@ -1209,10 +1209,10 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("{0, -5}: Language Count = {1}", Buffer.GetPosition() - 4, LanguageCount);
for (int i = 0; i < LanguageCount; ++i)
{
{
Buffer.SkipBytes(1);
}
OutputStream.WriteLine("{0, -5}: Zone ID {1}", Buffer.GetPosition(), Buffer.ReadUInt16());
OutputStream.WriteLine("{0, -5}: Zone Instance {1}", Buffer.GetPosition(), Buffer.ReadUInt16());
OutputStream.WriteLine("{0, -5}: Y,X,Z {1},{2},{3} Heading: {4}",
@@ -1341,7 +1341,7 @@ namespace EQExtractor2.Patches
for(int i = 0; i < Unknown6; ++i)
OutputStream.WriteLine("{0, -5}: Unknown LDON? {1}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
@@ -1358,7 +1358,7 @@ namespace EQExtractor2.Patches
// Air remaining ?
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
// Next 7 could be PVP stats,
// Next 7 could be PVP stats,
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
@@ -1426,16 +1426,16 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("{0, -5}: Showhelm? {1}", Buffer.GetPosition(), Buffer.ReadByte());
OutputStream.WriteLine("{0, -5}: RestTimer? {1}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("Skipping 1028 bytes starting at offset {0}", Buffer.GetPosition());
Buffer.SkipBytes(1028);
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("Pointer is {0} bytes from end.", Buffer.Length() - Buffer.GetPosition());
}
@@ -1490,12 +1490,12 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("Properties = {0}, Offset now {1}", Properties, Buffer.GetPosition());
UInt32 BodyType = 0;
if(Properties > 0)
BodyType = Buffer.ReadUInt32();
OutputStream.WriteLine("Bodytype = {0}", BodyType);
if (Properties != 1)
OutputStream.WriteLine("XXXX Properties is {0}", Properties);
@@ -1552,7 +1552,7 @@ namespace EQExtractor2.Patches
{
UInt32 Equip3 = Buffer.ReadUInt32();
UInt32 Equipx = Buffer.ReadUInt32();
UInt32 Equipx = Buffer.ReadUInt32();
UInt32 Equip2 = Buffer.ReadUInt32();
@@ -1560,13 +1560,13 @@ namespace EQExtractor2.Patches
UInt32 Equip0 = Buffer.ReadUInt32();
OutputStream.WriteLine("Equip slot {0}: 0,1,2,x,3 is {1}, {2}, {3}, {4}, {5}", i,
OutputStream.WriteLine("Equip slot {0}: 0,1,2,x,3 is {1}, {2}, {3}, {4}, {5}", i,
Equip0, Equip1, Equip2, Equipx, Equip3);
}
}
else
@@ -1635,7 +1635,7 @@ namespace EQExtractor2.Patches
if (Buffer.Length() != Buffer.GetPosition())
OutputStream.WriteLine("PARSE ERROR");
@@ -44,7 +44,7 @@ namespace EQExtractor2.Patches
ByteStream Buffer = new ByteStream(PacketBuffer);
Item NewItem = new Item();
Buffer.SetPosition(30);
NewItem.MerchantSlot = Buffer.ReadByte(); // 13
NewItem.Price = Buffer.ReadUInt32(); // 14
@@ -14,10 +14,10 @@ namespace EQExtractor2.Patches
public PatchFebruary112013Decoder()
{
Version = "EQ Client Build Date February 11 2013.";
PatchConfFileName = "patch_Feb11-2013.conf";
PacketsToMatch = new PacketToMatch[] {
PacketsToMatch = new PacketToMatch[] {
new PacketToMatch { OPCodeName = "OP_ZoneEntry", Direction = PacketDirection.ClientToServer, RequiredSize = 76, VersionMatched = false },
new PacketToMatch { OPCodeName = "OP_PlayerProfile", Direction = PacketDirection.ServerToClient, RequiredSize = -1, VersionMatched = true },
};
@@ -691,7 +691,7 @@ namespace EQExtractor2.Patches
// Air remaining ?
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
// Next 7 could be PVP stats,
// Next 7 could be PVP stats,
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
OutputStream.WriteLine("{0, -5}: Unknown {1:X}", Buffer.GetPosition(), Buffer.ReadUInt32());
@@ -36,7 +36,7 @@ namespace EQExtractor2.Patches
{
return Version;
}
virtual public bool UnsupportedVersion()
{
return ExpectedPPLength == 0;
@@ -70,7 +70,7 @@ namespace EQExtractor2.Patches
{
return 0;
}
virtual public MerchantManager GetMerchantData(NPCSpawnList NPCSL)
{
return null;
@@ -128,7 +128,7 @@ namespace EQExtractor2.Patches
virtual public PositionUpdate Decode_OP_NPCMoveUpdate(byte[] UpdatePacket)
{
PositionUpdate PosUpdate = new PositionUpdate();
PositionUpdate PosUpdate = new PositionUpdate();
return PosUpdate;
}
@@ -165,12 +165,12 @@ namespace EQExtractor2.Patches
{
return "";
}
virtual public bool DumpAAs(string FileName)
{
return false;
}
public void GivePackets(PacketManager pm)
{
Packets = pm;
@@ -281,7 +281,7 @@ namespace EQExtractor2.Patches
return "";
}
protected PacketManager Packets;
public OpCodeManager OpManager;
@@ -14,8 +14,8 @@ namespace EQExtractor2.Patches
public PatchJanuary162013Decoder()
{
Version = "EQ Client Build Date January 16 2013.";
PatchConfFileName = "patch_Jan16-2013.conf";
PatchConfFileName = "patch_Jan16-2013.conf";
}
override public List<ZoneEntryStruct> GetSpawns()
@@ -240,7 +240,7 @@ namespace EQExtractor2.Patches
{
//OpManager.RegisterExplorer("OP_ZoneEntry", ExploreZoneEntry);
//OpManager.RegisterExplorer("OP_NPCMoveUpdate", ExploreNPCMoveUpdate);
//OpManager.RegisterExplorer("OP_MobUpdate", ExploreMobUpdate);
//OpManager.RegisterExplorer("OP_MobUpdate", ExploreMobUpdate);
}
public void ExploreNPCMoveUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
@@ -1,7 +1,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
using System;
using System.IO;
using System.Collections.Generic;
@@ -45,7 +45,7 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("Item: {0} at Slot: {1}", Name, Slot);
}
public void ExploreCastSpell(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
{
@@ -138,6 +138,6 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("\r\nBuffer position at end is {0}", Buffer.GetPosition());
OutputStream.WriteLine("");
}
}
}
@@ -17,8 +17,8 @@ namespace EQExtractor2.Patches
ExpectedPPLength = 33784;
PPZoneIDOffset = 26452;
PatchConfFileName = "patch_July13-2012.conf";
}
}
}
}
@@ -13,8 +13,8 @@ namespace EQExtractor2.Patches
public PatchJune252012Decoder()
{
Version = "EQ Client Build Date June 25 2012.";
PatchConfFileName = "patch_June25-2012.conf";
}
}
}
}
@@ -22,7 +22,7 @@ namespace EQExtractor2.Patches
}
public override void RegisterExplorers()
{
{
//OpManager.RegisterExplorer("OP_ZoneEntry", ExploreZoneEntry);
}
@@ -32,7 +32,7 @@ namespace EQExtractor2.Patches
return;
string SpawnName = Buffer.ReadString(true);
UInt32 SpawnID = Buffer.ReadUInt32();
byte Level = Buffer.ReadByte();
@@ -102,7 +102,7 @@ namespace EQExtractor2.Patches
Buffer.ReadByte();
}
OutputStream.WriteLine("Size starts at offset {0}", Buffer.GetPosition());
@@ -372,7 +372,7 @@ namespace EQExtractor2.Patches
NewSpawn.XPos = Utils.EQ19ToFloat((Int32)(Position4 >> 12) & 0x7FFFF);
NewSpawn.ZPos = Utils.EQ19ToFloat((Int32)(Position5 & 0x7FFFF));
NewSpawn.MeleeTexture1 = 0;
NewSpawn.MeleeTexture2 = 0;
@@ -14,12 +14,12 @@ namespace EQExtractor2.Patches
public PatchMarch132013Decoder()
{
Version = "EQ Client Build Date March 13 2013.";
PatchConfFileName = "patch_Mar13-2013.conf";
PatchConfFileName = "patch_Mar13-2013.conf";
SupportsSQLGeneration = true;
}
override public List<Door> GetDoors()
{
List<Door> DoorList = new List<Door>();
@@ -18,7 +18,7 @@ namespace EQExtractor2.Patches
ExpectedPPLength = 28536;
PPZoneIDOffset = 21204;
}
PPZoneIDOffset = 21204;
}
}
}
@@ -1,7 +1,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
using System;
using System.IO;
@@ -26,14 +26,14 @@ namespace EQExtractor2.Patches
public PatchMay122010Decoder()
{
Version = "EQ Client Build Date May 12 2010. (Valid up to and including Build Date June 8 2010)";
PatchConfFileName = "patch_May12-2010.conf";
ExpectedPPLength = 26632;
PPZoneIDOffset = 19396;
}
override public bool Init(string ConfDirectory, ref string ErrorMessage)
{
OpManager = new OpCodeManager();
@@ -94,7 +94,7 @@ namespace EQExtractor2.Patches
List<byte[]> PlayerProfilePacket = GetPacketsOfType("OP_PlayerProfile", PacketDirection.ServerToClient);
if (PlayerProfilePacket.Count == 0)
{
{
return 0;
}
else
@@ -107,7 +107,7 @@ namespace EQExtractor2.Patches
return BitConverter.ToUInt16(PlayerProfilePacket[0], PPZoneIDOffset);
}
override public List<Door> GetDoors()
{
List<Door> DoorList = new List<Door>();
@@ -159,7 +159,7 @@ namespace EQExtractor2.Patches
DoorParam, DestZone, 0, 0, 0, 0);
DoorList.Add(NewDoor);
}
return DoorList;
}
@@ -221,7 +221,7 @@ namespace EQExtractor2.Patches
{
ByteStream Buffer = new ByteStream(PacketBuffer);
Item NewItem = new Item();
Item NewItem = new Item();
NewItem.StackSize = Buffer.ReadUInt32();
Buffer.SkipBytes(4);
@@ -233,7 +233,7 @@ namespace EQExtractor2.Patches
NewItem.Name = Buffer.ReadString(true);
NewItem.Lore = Buffer.ReadString(true);
NewItem.IDFile = Buffer.ReadString(true);
NewItem.ID = Buffer.ReadUInt32();
NewItem.ID = Buffer.ReadUInt32();
return NewItem;
}
@@ -245,7 +245,7 @@ namespace EQExtractor2.Patches
List<byte[]> ZonePointPackets = GetPacketsOfType("OP_SendZonepoints", PacketDirection.ServerToClient);
if (ZonePointPackets.Count < 1)
{
{
return ZonePointList;
}
@@ -257,7 +257,7 @@ namespace EQExtractor2.Patches
if (Entries == 0)
return ZonePointList;
float x, y, z, Heading;
UInt32 Number;
@@ -284,14 +284,14 @@ namespace EQExtractor2.Patches
ZoneID = Buffer.ReadUInt16();
Instance = Buffer.ReadUInt16();
Buffer.SkipBytes(4); // Skip the last UInt32
ZonePoint NewZonePoint = new ZonePoint(Number, ZoneID, Instance, x, y, z, x, y, z, Heading, ZoneID);
ZonePointList.Add(NewZonePoint);
ZonePointList.Add(NewZonePoint);
}
return ZonePointList;
}
@@ -300,7 +300,7 @@ namespace EQExtractor2.Patches
NewZoneStruct NewZone = new NewZoneStruct();
List<byte[]> ZonePackets = GetPacketsOfType("OP_NewZone", PacketDirection.ServerToClient);
if (ZonePackets.Count < 1)
return NewZone;
@@ -316,7 +316,7 @@ namespace EQExtractor2.Patches
NewZone.LongName = Buffer.ReadFixedLengthString(278, true);
NewZone.Type = Buffer.ReadByte();
NewZone.Type = Buffer.ReadByte();
NewZone.FogRed = Buffer.ReadBytes(4);
@@ -325,7 +325,7 @@ namespace EQExtractor2.Patches
NewZone.FogBlue = Buffer.ReadBytes(4);
Buffer.SkipBytes(1); // Unknown
for (int i = 0; i < 4; ++i)
NewZone.FogMinClip[i] = Buffer.ReadSingle();
@@ -379,7 +379,7 @@ namespace EQExtractor2.Patches
NewZone.FogDensity = Buffer.ReadSingle();
// Everything else after this point in the packet is unknown.
return NewZone;
}
@@ -433,7 +433,7 @@ namespace EQExtractor2.Patches
// Destructable Objects. Not handled yet
//
//SQLOut(String.Format("-- OBJECT FOUND SpawnID {0}", SpawnID.ToString("x")));
NewSpawn.DestructableString1 = Buffer.ReadString(false);
NewSpawn.DestructableString2 = Buffer.ReadString(false);
@@ -524,7 +524,7 @@ namespace EQExtractor2.Patches
NewSpawn.EquipChest2 = Buffer.ReadByte();
bool UseWorn = (NewSpawn.EquipChest2 == 255);
Buffer.SkipBytes(2); // 2 Unknown bytes;
NewSpawn.Helm = Buffer.ReadByte();
@@ -554,7 +554,7 @@ namespace EQExtractor2.Patches
NewSpawn.XPos = Utils.EQ19ToFloat((Int32)(Position4 >> 12) & 0x7FFFF);
NewSpawn.ZPos = Utils.EQ19ToFloat((Int32)(Position5 & 0x7FFFF));
for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot)
NewSpawn.SlotColour[ColourSlot] = Buffer.ReadUInt32();
@@ -636,9 +636,9 @@ namespace EQExtractor2.Patches
List<byte[]> UpdatePackets = GetPacketsOfType("OP_NPCMoveUpdate", PacketDirection.ServerToClient);
foreach (byte[] UpdatePacket in UpdatePackets)
foreach (byte[] UpdatePacket in UpdatePackets)
Updates.Add(Decode_OP_NPCMoveUpdate(UpdatePacket));
return Updates;
}
@@ -671,9 +671,9 @@ namespace EQExtractor2.Patches
List<byte[]> UpdatePackets = GetPacketsOfType("OP_MobUpdate", PacketDirection.ServerToClient);
foreach (byte[] MobUpdatePacket in UpdatePackets)
foreach (byte[] MobUpdatePacket in UpdatePackets)
Updates.Add(Decode_OP_MobUpdate(MobUpdatePacket));
return Updates;
}
@@ -754,7 +754,7 @@ namespace EQExtractor2.Patches
List<EQApplicationPacket> PacketList = Packets.PacketList;
UInt32 OP_ClientUpdate = OpManager.OpCodeNameToNumber("OP_ClientUpdate");
foreach (EQApplicationPacket UpdatePacket in PacketList)
{
if ((UpdatePacket.OpCode != OP_ClientUpdate) || (UpdatePacket.Direction != PacketDirection.ClientToServer))
@@ -779,7 +779,7 @@ namespace EQExtractor2.Patches
Updates.Add(PosUpdate);
}
}
return Updates;
}
@@ -828,7 +828,7 @@ namespace EQExtractor2.Patches
List<UInt32> FindableSpawnList = new List<UInt32>();
List<byte[]> FindablePackets = GetPacketsOfType("OP_SendFindableNPCs", PacketDirection.ServerToClient);
if (FindablePackets.Count < 1)
return FindableSpawnList;
@@ -837,7 +837,7 @@ namespace EQExtractor2.Patches
if (BitConverter.ToUInt32(Packet, 0) == 0)
FindableSpawnList.Add(BitConverter.ToUInt32(Packet, 4));
}
return FindableSpawnList;
}
@@ -864,7 +864,7 @@ namespace EQExtractor2.Patches
//OpManager.RegisterExplorer("OP_HPUpdate", ExploreHPUpdate);
//OpManager.RegisterExplorer("OP_Animation", ExploreAnimation);
//OpManager.RegisterExplorer("OP_CharInventory", ExploreCharInventoryPacket);
}
public void ExploreZoneEntry(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
@@ -910,7 +910,7 @@ namespace EQExtractor2.Patches
if ((OtherData & 1) > 0)
{
// Destructable Objects.
DestructableString1 = Buffer.ReadString(false);
DestructableString2 = Buffer.ReadString(false);
@@ -956,9 +956,9 @@ namespace EQExtractor2.Patches
DestructableUnk9, DestructableByte);
}
Buffer.SkipBytes(17);
Buffer.SkipBytes(17);
byte PropCount = Buffer.ReadByte();
byte PropCount = Buffer.ReadByte();
if (PropCount >= 1)
{
@@ -991,8 +991,8 @@ namespace EQExtractor2.Patches
{
UInt32 CurrentHP = Buffer.ReadUInt32();
Int32 MaxHP = Buffer.ReadInt32();
UInt16 SpawnID = Buffer.ReadUInt16();
UInt16 SpawnID = Buffer.ReadUInt16();
string SpawnName = FindExplorerSpawn(SpawnID);
OutputStream.WriteLine("Spawn {0} {1} Current HP: {2} Max HP: {3}", SpawnID, SpawnName, CurrentHP, MaxHP);
@@ -1001,7 +1001,7 @@ namespace EQExtractor2.Patches
}
public void ExploreAnimation(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
{
{
UInt16 SpawnID = Buffer.ReadUInt16();
byte Action = Buffer.ReadByte();
byte Value = Buffer.ReadByte();
@@ -1324,7 +1324,7 @@ namespace EQExtractor2.Patches
Buffer.SkipBytes(4); // clickunk7
Buffer.SkipBytes(30); // Proc Effect Struct
Buffer.ReadString(true); // Proc Name
Buffer.SkipBytes(4); // unknown5
Buffer.SkipBytes(4); // unknown5
Buffer.SkipBytes(30); // Worn Effect Struct
Buffer.ReadString(true); // Worn Name
Buffer.SkipBytes(4); // unknown6
@@ -1336,7 +1336,7 @@ namespace EQExtractor2.Patches
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(30); // Worn Effect Struct
Buffer.ReadString(true); // Worn Name
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(103); // Item Quaternary Body Struct - 4 (we want to read the SubLength field at the end)
//UInt32 SubLengths = Buffer.ReadUInt32();
@@ -18,7 +18,7 @@ namespace EQExtractor2.Patches
ExpectedPPLength = 28536;
PPZoneIDOffset = 21204;
PPZoneIDOffset = 21204;
}
override public PositionUpdate Decode_OP_NPCMoveUpdate(byte[] UpdatePacket)
@@ -42,7 +42,7 @@ namespace EQExtractor2.Patches
PosUpdate.p.heading = (float)bs.readInt(12) / (float)(1 << 3);
PosUpdate.HighRes = true;
return PosUpdate;
}
@@ -245,20 +245,20 @@ namespace EQExtractor2.Patches
//base.RegisterExplorers();
//OpManager.RegisterExplorer("OP_SpawnDoor", ExploreSpawnDoor);
}
public void ExploreSpawnDoor(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
{
{
uint DoorCount = Buffer.Length() / 96;
OutputStream.WriteLine("Door Count: {0}", DoorCount);
for (int d = 0; d < DoorCount; ++d)
{
string DoorName = Buffer.ReadFixedLengthString(32, false);
float YPos = Buffer.ReadSingle();
float XPos = Buffer.ReadSingle();
@@ -288,9 +288,9 @@ namespace EQExtractor2.Patches
// Skip past the trailing unknowns in the door struct, moving to the next door in the packet.
Buffer.SkipBytes(28);
Buffer.SkipBytes(28);
}
}
}
}
@@ -13,10 +13,10 @@ namespace EQExtractor2.Patches
public PatchMay242011Decoder()
{
Version = "EQ Client Build Date May 24 2011.";
ExpectedPPLength = 28856;
PPZoneIDOffset = 21524;
}
PPZoneIDOffset = 21524;
}
}
}
@@ -274,7 +274,7 @@ namespace EQExtractor2.Patches
//OpManager.RegisterExplorer("OP_NPCMoveUpdate", ExploreNPCMoveUpdate);
//OpManager.RegisterExplorer("OP_MobUpdate", ExploreMobUpdate);
}
public void ExploreNPCMoveUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
@@ -365,7 +365,7 @@ namespace EQExtractor2.Patches
UInt32 Cost = Buffer.ReadUInt32();
UInt32 Seq = Buffer.ReadUInt32();
UInt32 CurrentLevel = Buffer.ReadUInt32();
UInt32 PreReqSkillCount = Buffer.ReadUInt32();
UInt32 [] PreReqSkills = new UInt32[PreReqSkillCount];
@@ -416,7 +416,7 @@ namespace EQExtractor2.Patches
OutputFile.Write("{0} ", PreReqMinPoints[i]);
OutputFile.WriteLine("");
OutputFile.WriteLine(" Type:\t\t" + Type);
OutputFile.WriteLine(" SpellID:\t" + SpellID);
OutputFile.WriteLine(" Unknown057:\t" + Unknown057);
+4 -4
View File
@@ -1,7 +1,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
//
// IMPORTANT NOTE: This decoder for SoD was developed purely as a cursory test of the multi-patch support and is not guaranteed
// to be 100% correct.
@@ -721,7 +721,7 @@ namespace EQExtractor2.Patches
GroundSpawn.Name = Buffer.ReadFixedLengthString(16, false);
Buffer.SkipBytes(20);
Buffer.SkipBytes(20);
GroundSpawn.ObjectType = Buffer.ReadUInt32();
@@ -760,11 +760,11 @@ namespace EQExtractor2.Patches
public override void RegisterExplorers()
{
OpManager.RegisterExplorer("OP_ZoneEntry", ExploreZoneEntry);
OpManager.RegisterExplorer("OP_ZoneEntry", ExploreZoneEntry);
//OpManager.RegisterExplorer("OP_RespawnWindow", ExploreRespawnWindow);
//OpManager.RegisterExplorer("OP_ZonePlayerToBind", ExploreZonePlayerToBind);
//OpManager.RegisterExplorer("OP_RequestClientZoneChange", ExploreRequestClientZoneChange);
//OpManager.RegisterExplorer("OP_DeleteSpawn", ExploreDeleteSpawn);
//OpManager.RegisterExplorer("OP_DeleteSpawn", ExploreDeleteSpawn);
OpManager.RegisterExplorer("OP_HPUpdate", ExploreHPUpdate);
}
@@ -1,7 +1,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
using System;
using System.IO;
using System.Collections.Generic;
@@ -25,15 +25,15 @@ namespace EQExtractor2.Patches
{
if((OpCode == OpManager.OpCodeNameToNumber("OP_ZoneEntry")) && (Direction == PacketDirection.ClientToServer))
return IdentificationStatus.Yes;
return IdentificationStatus.No;
}
}
override public Item DecodeItemPacket(byte[] PacketBuffer)
{
ByteStream Buffer = new ByteStream(PacketBuffer);
Item NewItem = new Item();
Item NewItem = new Item();
NewItem.StackSize = Buffer.ReadUInt32(); // 00
Buffer.SkipBytes(4);
@@ -55,12 +55,12 @@ namespace EQExtractor2.Patches
public override void RegisterExplorers()
{
base.RegisterExplorers();
//OpManager.RegisterExplorer("OP_CharInventory", ExploreCharInventoryPacket);
//OpManager.RegisterExplorer("OP_ItemPacket", ExploreItemPacket);
//OpManager.RegisterExplorer("OP_MercenaryPurchaseWindow", ExploreMercenaryPurchaseWindow);
}
public void ExploreCharInventoryPacket(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
{
UInt32 ItemCount = Buffer.ReadUInt32();
@@ -69,7 +69,7 @@ namespace EQExtractor2.Patches
for (int i = 0; i < ItemCount; ++i)
{
ExploreSubItem(OutputStream, ref Buffer);
ExploreSubItem(OutputStream, ref Buffer);
}
OutputStream.WriteLine("");
@@ -85,7 +85,7 @@ namespace EQExtractor2.Patches
}
void ExploreSubItem(StreamWriter OutputStream, ref ByteStream Buffer)
{
{
Buffer.SkipBytes(8);
byte Area = Buffer.ReadByte();
@@ -118,14 +118,14 @@ namespace EQExtractor2.Patches
break;
case 8:
AreaName = "Merchant";
break;
break;
}
OutputStream.WriteLine("Area: {0} {1} Main Slot {2,2} Sub Slot {3,3} Name {4}", Area, AreaName.PadRight(20), MainSlot, SubSlot, Name);
Buffer.ReadString(true); // Lore
Buffer.ReadString(true); // IDFile
//Buffer.SkipBytes(236); // Item Body Struct
UInt32 ID = Buffer.ReadUInt32();
@@ -229,7 +229,7 @@ namespace EQExtractor2.Patches
Buffer.SkipBytes(4); // clickunk7
Buffer.SkipBytes(30); // Proc Effect Struct
Buffer.ReadString(true); // Proc Name
Buffer.SkipBytes(4); // unknown5
Buffer.SkipBytes(4); // unknown5
Buffer.SkipBytes(30); // Worn Effect Struct
Buffer.ReadString(true); // Worn Name
Buffer.SkipBytes(4); // unknown6
@@ -241,15 +241,15 @@ namespace EQExtractor2.Patches
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(30); // Worn Effect Struct
Buffer.ReadString(true); // Worn Name
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(103); // Item Quaternary Body Struct - 4 (we want to read the SubLength field at the end)
UInt32 SubLengths = Buffer.ReadUInt32();
for (int i = 0; i < SubLengths; ++i)
{
Buffer.SkipBytes(4);
ExploreSubItem(OutputStream, ref Buffer);
ExploreSubItem(OutputStream, ref Buffer);
}
}
@@ -291,7 +291,7 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown3);
UInt32 Unknown4 = Buffer.ReadUInt32();
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown4);
byte Unknown5 = Buffer.ReadByte();
//OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint8, Buffer, {0}); // Unknown", Unknown5);
@@ -303,7 +303,7 @@ namespace EQExtractor2.Patches
//OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown8);
UInt32 StanceCount = Buffer.ReadUInt32();
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Number of Stances for this Merc", StanceCount);
UInt32 Unknown10 = Buffer.ReadUInt32();
@@ -311,8 +311,8 @@ namespace EQExtractor2.Patches
byte Unknown11 = Buffer.ReadByte();
//OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint8, Buffer, {0}); // Unknown", Unknown11);
//OutputStream.WriteLine(" Offset: {5} Unknown1: {0} DBStrings: {1} {2} Purchase: {3} Upkeep: {4}\r\n", Unknown1, DBStringID1, DBStringID2,
// PurchaseCost, UpkeepCost, Offset);
//OutputStream.WriteLine(" Unknowns: {0} {1} {2} {3} {4} {5} {6} {7} {8}\r\n",
@@ -336,6 +336,6 @@ namespace EQExtractor2.Patches
OutputStream.WriteLine("");
}
}
}
@@ -314,7 +314,7 @@ namespace EQExtractor2.Patches
Buffer.SkipBytes(4); // clickunk7
Buffer.SkipBytes(30); // Proc Effect Struct
Buffer.ReadString(true); // Proc Name
Buffer.SkipBytes(4); // unknown5
Buffer.SkipBytes(4); // unknown5
Buffer.SkipBytes(30); // Worn Effect Struct
Buffer.ReadString(true); // Worn Name
Buffer.SkipBytes(4); // unknown6
@@ -326,15 +326,15 @@ namespace EQExtractor2.Patches
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(30); // Worn Effect Struct
Buffer.ReadString(true); // Worn Name
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(4); // unknown6
Buffer.SkipBytes(103); // Item Quaternary Body Struct - 4 (we want to read the SubLength field at the end)
Buffer.SkipBytes(57); // HoT
OutputStream.WriteLine(" Reading sublengths from offset {0}", Buffer.GetPosition());
UInt32 SubLengths = Buffer.ReadUInt32();
for (int i = 0; i < SubLengths; ++i)
{
@@ -14,10 +14,10 @@ namespace EQExtractor2.Patches
public PatchTestServerFebruary52013Decoder()
{
Version = "EQ Client Build Date Test Server February 5 2013.";
PatchConfFileName = "patch_TestServer-Feb5-2013.conf";
SupportsSQLGeneration = false;
}
}
}
}
@@ -14,10 +14,10 @@ namespace EQExtractor2.Patches
public PatchTestServerJanuary162013Decoder()
{
Version = "EQ Client Build Date Test Server January 16 2013.";
PatchConfFileName = "patch_TestServer-Jan16-2013.conf";
SupportsSQLGeneration = false;
}
}
}
}
@@ -2,7 +2,7 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("EQExtractor2")]
@@ -14,8 +14,8 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
@@ -25,11 +25,11 @@ using System.Runtime.InteropServices;
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.0.0.0")]
@@ -10,8 +10,8 @@
namespace EQExtractor2.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
@@ -23,15 +23,15 @@ namespace EQExtractor2.Properties {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
@@ -45,7 +45,7 @@ namespace EQExtractor2.Properties {
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@@ -9,20 +9,20 @@
//------------------------------------------------------------------------------
namespace EQExtractor2.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("notepad.exe")]
@@ -34,7 +34,7 @@ namespace EQExtractor2.Properties {
this["TextFileViewer"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
@@ -46,7 +46,7 @@ namespace EQExtractor2.Properties {
this["ShowDebugWindowOnStartup"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
Binary file not shown.
+18 -18
View File
@@ -39,27 +39,27 @@
this.EQPacketDebugFilename = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
//
// label1
//
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(107, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Packet Dump Viewer";
//
//
// PacketDumpViewerProgram
//
//
this.PacketDumpViewerProgram.Location = new System.Drawing.Point(125, 6);
this.PacketDumpViewerProgram.Name = "PacketDumpViewerProgram";
this.PacketDumpViewerProgram.Size = new System.Drawing.Size(390, 20);
this.PacketDumpViewerProgram.TabIndex = 1;
this.toolTip1.SetToolTip(this.PacketDumpViewerProgram, "If not using notepad/wordpad include the full path, e.g. C:\\Program Files (x86)\\N" +
"otepad++\\notepad++.exe");
//
//
// ShowDebugWindowOnStartup
//
//
this.ShowDebugWindowOnStartup.AutoSize = true;
this.ShowDebugWindowOnStartup.Location = new System.Drawing.Point(15, 61);
this.ShowDebugWindowOnStartup.Name = "ShowDebugWindowOnStartup";
@@ -67,9 +67,9 @@
this.ShowDebugWindowOnStartup.TabIndex = 2;
this.ShowDebugWindowOnStartup.Text = "Show Debug Window On Startup";
this.ShowDebugWindowOnStartup.UseVisualStyleBackColor = true;
//
//
// ShowTimeStamps
//
//
this.ShowTimeStamps.AutoSize = true;
this.ShowTimeStamps.Location = new System.Drawing.Point(15, 84);
this.ShowTimeStamps.Name = "ShowTimeStamps";
@@ -77,9 +77,9 @@
this.ShowTimeStamps.TabIndex = 3;
this.ShowTimeStamps.Text = "Include Time Stamps In Packet Dump";
this.ShowTimeStamps.UseVisualStyleBackColor = true;
//
//
// OptionsOKButton
//
//
this.OptionsOKButton.Location = new System.Drawing.Point(125, 122);
this.OptionsOKButton.Name = "OptionsOKButton";
this.OptionsOKButton.Size = new System.Drawing.Size(75, 23);
@@ -87,9 +87,9 @@
this.OptionsOKButton.Text = "OK";
this.OptionsOKButton.UseVisualStyleBackColor = true;
this.OptionsOKButton.Click += new System.EventHandler(this.OptionsOKButton_Click);
//
//
// OptionsCancelButton
//
//
this.OptionsCancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.OptionsCancelButton.Location = new System.Drawing.Point(332, 122);
this.OptionsCancelButton.Name = "OptionsCancelButton";
@@ -98,17 +98,17 @@
this.OptionsCancelButton.Text = "Cancel";
this.OptionsCancelButton.UseVisualStyleBackColor = true;
this.OptionsCancelButton.Click += new System.EventHandler(this.OptionsCancelButton_Click);
//
//
// EQPacketDebugFilename
//
//
this.EQPacketDebugFilename.Location = new System.Drawing.Point(125, 32);
this.EQPacketDebugFilename.Name = "EQPacketDebugFilename";
this.EQPacketDebugFilename.Size = new System.Drawing.Size(390, 20);
this.EQPacketDebugFilename.TabIndex = 7;
this.toolTip1.SetToolTip(this.EQPacketDebugFilename, "Output file for low level netcode debugging");
//
//
// label2
//
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 35);
this.label2.Name = "label2";
@@ -116,9 +116,9 @@
this.label2.TabIndex = 6;
this.label2.Text = "Netcode Debug";
this.toolTip1.SetToolTip(this.label2, "Output file for low level netcode debugging");
//
//
// UserOptions
//
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.OptionsCancelButton;
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
+11 -11
View File
@@ -4,7 +4,7 @@
//
// ShowEQ Distributed under GPL
// http://www.sourceforge.net/projects/seq
//
//
// Copyright 2004 Zaphod (dohpaz@users.sourceforge.net).
//
// -----------------------------------------------------------
@@ -13,7 +13,7 @@
//
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
//
//
//
using System;
@@ -21,7 +21,7 @@ using System.Text;
namespace MyUtils
{
public class ByteStream
public class ByteStream
{
public ByteStream(byte[] NewBuffer)
{
@@ -93,7 +93,7 @@ namespace MyUtils
return Slice;
}
public void SkipBytes(int Count)
{
BufferPointer += Count;
@@ -149,7 +149,7 @@ namespace MyUtils
int BufferPointer;
}
class BitStream
{
public BitStream(byte[] Data, UInt32 Length)
@@ -182,7 +182,7 @@ namespace MyUtils
{
// Lead partial is a byte. So just put it in the middle.
leadPartialBitCount = 0;
}
}
if (leadPartialBitCount > bitCount)
{
@@ -216,7 +216,7 @@ namespace MyUtils
Out = (Out << 8) | m_data[currentByte];
currentByte++;
}
// And the end.
if (tailPartialBitCount > 0)
{
@@ -292,7 +292,7 @@ namespace MyUtils
{
StringBuilder CleanName = new StringBuilder();
foreach(char c in Name)
foreach(char c in Name)
if(!Char.IsDigit(c))
CleanName.Append(c);
@@ -300,15 +300,15 @@ namespace MyUtils
}
public static float EQ19ToFloat(Int32 EQ19Value)
{
{
if ((EQ19Value & 0x40000) > 0)
EQ19Value = -(0x7FFFF - EQ19Value + 1);
return (float)EQ19Value / (float)(1 << 3);
}
}
}
Binary file not shown.
@@ -650,4 +650,4 @@ OP_RAWOutOfSession=0x0000
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
OP_InitialHPUpdate=0x0000
OP_InitialHPUpdate=0x0000
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x5d32 #
OP_ApproveWorld=0x1f87 #
OP_LogServer=0x44ae #
@@ -49,33 +49,33 @@ OP_FloatListThing=0x33f2 #
# Reasons for Disconnect:
OP_ZoneUnavail=0x66e4 # This is not the right opcode. Produces a 'Your character is inaccessible' message.
OP_WorldClientReady=0x3f24 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 #
OP_ZoneEntry=0x02d6 #
OP_ReqNewZone=0x1c36 #
OP_NewZone=0x0254 #
OP_ZoneSpawns=0x0000 #
OP_ZoneSpawns=0x0000 #
OP_PlayerProfile=0x6022 #
OP_TimeOfDay=0x6015 #
OP_LevelUpdate=0x0000 #
OP_Stamina=0x0000 #
OP_RequestClientZoneChange=0x18ea #
OP_ZoneChange=0x5bd9 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x1a58 #
@@ -86,7 +86,7 @@ OP_TaskActivity=0x0000 #
OP_CompletedTasks=0x0000 #
OP_Weather=0x4658 #
OP_SendAATable=0x1d99 #
OP_UpdateAA=0x0000 #
OP_UpdateAA=0x0000 #
OP_RespondAA=0x0000 #
OP_ReqClientSpawn=0x47e7 #
OP_SpawnDoor=0x6cfe #
@@ -132,12 +132,12 @@ OP_GuildManageBanker=0x0000 #
OP_GuildBank=0x0000 #
OP_SetGuildRank=0x0000 #
OP_GuildUpdateURLAndChannel=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x0000 #
@@ -317,8 +317,8 @@ OP_VetRewardsAvaliable=0x0000 #
OP_VetClaimRequest=0x0000 #
OP_VetClaimReply=0x0000 #
OP_CrystalCountUpdate=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 #
OP_MobUpdate=0x4656 #
OP_NPCMoveUpdate=0x38e0 #
@@ -349,7 +349,7 @@ OP_ManaUpdate=0x0ff4 #
OP_EnduranceUpdate=0x0000 #
OP_MobManaUpdate=0x1912 #
OP_MobEnduranceUpdate=0x0000 #
# Looting
OP_LootRequest=0x0000 #
OP_EndLootRequest=0x0000 #
@@ -364,10 +364,10 @@ OP_TraderShop=0x0000 #
OP_Trader=0x0000 #
OP_TraderBuy=0x0000 #
OP_Barter=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x0000 #
@@ -416,10 +416,10 @@ OP_TributeItem=0x0000 #
OP_TributeMoney=0x0000 #
OP_TributeToggle=0x0000 #
OP_TributePointUpdate=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x0000 #
@@ -444,11 +444,11 @@ OP_AdventureLeaderboardReply=0x0000 #
OP_GroupDisband=0x0000 #
OP_GroupInvite=0x0000 #
OP_GroupFollow=0x0000 #
OP_GroupUpdate=0x0000 #
OP_GroupUpdateB=0x0000 #
OP_GroupUpdate=0x0000 #
OP_GroupUpdateB=0x0000 #
OP_GroupCancelInvite=0x0000 #
OP_GroupAcknowledge=0x0000 #
OP_GroupDelete=0x0000 #
OP_GroupDelete=0x0000 #
OP_CancelInvite=0x0000 #
OP_GroupFollow2=0x0000 #
OP_GroupInvite2=0x0000 #
@@ -464,20 +464,20 @@ OP_LFGGetMatchesResponse=0x0000 #
OP_LFPGetMatchesRequest=0x0000 #
OP_LFPGetMatchesResponse=0x0000 #
OP_LFPCommand=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x0000 #
OP_RaidUpdate=0x0000 #
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x0000 #
OP_CombatAbility=0x0000 #
OP_SenseTraps=0x0000 #
OP_PickPocket=0x0000 #
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x0000 #
OP_Sneak=0x0000 #
OP_Fishing=0x0000 #
@@ -495,7 +495,7 @@ OP_AcceptNewTask=0x0000 #
OP_TaskHistoryRequest=0x0000 #
OP_TaskHistoryReply=0x0000 #
OP_CancelTask=0x0000 #
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x0000 #
@@ -505,53 +505,53 @@ OP_SetTitle=0x0000 #
OP_SetTitleReply=0x0000 #
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -563,47 +563,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
File diff suppressed because it is too large Load Diff
@@ -648,4 +648,4 @@ OP_RAWOutOfSession=0x0000
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
OP_InitialHPUpdate=0x0000
OP_InitialHPUpdate=0x0000
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x6893 # was 0x2683
OP_ApproveWorld=0x115a # was 0x28a7
OP_LogServer=0x701f # was 0x224f
@@ -49,15 +49,15 @@ OP_FloatListThing=0x0000 # V
# Reasons for Disconnect:
OP_ZoneUnavail=0x0000 # C 0x0000
OP_WorldClientReady=0x399b # C 0x0000
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 # was 0x3594
@@ -71,11 +71,11 @@ OP_LevelUpdate=0x0000 # V
OP_Stamina=0x0000 # V
OP_RequestClientZoneChange=0x3fd2 # was 0x4178
OP_ZoneChange=0x0b93 # was 0x4a61
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x7b64 # V
@@ -86,13 +86,13 @@ OP_TaskActivity=0x0000 # C
OP_CompletedTasks=0x0000 # C 0x0000
OP_Weather=0x7ce4 # was 0x0ed5
OP_SendAATable=0x466c #
OP_UpdateAA=0x0000 # V
OP_UpdateAA=0x0000 # V
OP_RespondAA=0x0000 # C 0x0000
OP_ReqClientSpawn=0x54e8 # was 0x6618
OP_SpawnDoor=0x6cfe #
OP_GroundSpawn=0x5f0d # was 0x5f0d
OP_SendZonepoints=0x5f51 # was 0x0ff4
OP_SendAAStats=0x0000 # C
OP_SendAAStats=0x0000 # C
OP_WorldObjectsSent=0x7b73 # was 0x7b73
OP_BlockedBuffs=0x664a # was 0x4027
OP_SendExpZonein=0x2c27 # was 0x1436
@@ -132,12 +132,12 @@ OP_GuildManageBanker=0x0000 # C
OP_GuildBank=0x0000 # C
OP_SetGuildRank=0x0000 # C
OP_GuildUpdateURLAndChannel=0x0000 # C
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x0000 # C
@@ -317,8 +317,8 @@ OP_VetRewardsAvaliable=0x0000 # C Mispelled?
OP_VetClaimRequest=0x0000 # C
OP_VetClaimReply=0x0000 # C
OP_CrystalCountUpdate=0x0000 # C
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 # C OP_Damage?
OP_MobUpdate=0x4656 # was 0x4656
OP_NPCMoveUpdate=0x5bad #
@@ -349,7 +349,7 @@ OP_ManaUpdate=0x0000 # C
OP_EnduranceUpdate=0x0000 # C
OP_MobManaUpdate=0x0000 # C
OP_MobEnduranceUpdate=0x0000 # C
# Looting
OP_LootRequest=0x0000 # C
OP_EndLootRequest=0x0000 # C
@@ -364,10 +364,10 @@ OP_TraderShop=0x0000 # C
OP_Trader=0x0000 # C
OP_TraderBuy=0x0000 # C
OP_Barter=0x0000 # C
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x0000 # C
@@ -416,10 +416,10 @@ OP_TributeItem=0x0000 # C
OP_TributeMoney=0x0000 # C
OP_TributeToggle=0x0000 # C
OP_TributePointUpdate=0x0000 # C
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x0000 # C
@@ -444,11 +444,11 @@ OP_AdventureLeaderboardReply=0x0000 # C
OP_GroupDisband=0x0000 # C
OP_GroupInvite=0x0000 # C
OP_GroupFollow=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupCancelInvite=0x0000 # C - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x0000 # C
OP_GroupDelete=0x0000 #
OP_GroupDelete=0x0000 #
OP_CancelInvite=0x0000 # C
OP_GroupFollow2=0x0000 # C
OP_GroupInvite2=0x0000 # C
@@ -464,20 +464,20 @@ OP_LFGGetMatchesResponse=0x0000 # C
OP_LFPGetMatchesRequest=0x0000 # C
OP_LFPGetMatchesResponse=0x0000 # C
OP_LFPCommand=0x0000 # C
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x0000 # C
OP_RaidUpdate=0x0000 # C
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x0000 # C
OP_CombatAbility=0x0000 # C
OP_SenseTraps=0x0000 # C
OP_PickPocket=0x0000 # C
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x0000 # C
OP_Sneak=0x0000 # C
OP_Fishing=0x0000 # C
@@ -495,7 +495,7 @@ OP_AcceptNewTask=0x0000 # C
OP_TaskHistoryRequest=0x0000 # C
OP_TaskHistoryReply=0x0000 # C
OP_CancelTask=0x0000 # C
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x0000 # C
@@ -505,53 +505,53 @@ OP_SetTitle=0x0000 # C
OP_SetTitleReply=0x0000 # C
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -563,47 +563,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
@@ -650,4 +650,4 @@ OP_RAWOutOfSession=0x0000
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
OP_InitialHPUpdate=0x0000
OP_InitialHPUpdate=0x0000
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x6893 # was 0x2683
OP_ApproveWorld=0x115a # was 0x28a7
OP_LogServer=0x701f # was 0x224f
@@ -49,15 +49,15 @@ OP_FloatListThing=0x0000 # V
# Reasons for Disconnect:
OP_ZoneUnavail=0x0000 # C 0x0000
OP_WorldClientReady=0x399b # C 0x0000
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 # was 0x3594
@@ -71,11 +71,11 @@ OP_LevelUpdate=0x0000 # V
OP_Stamina=0x0000 # V
OP_RequestClientZoneChange=0x3fd2 # was 0x4178
OP_ZoneChange=0x0b93 # was 0x4a61
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x7b64 # V
@@ -86,13 +86,13 @@ OP_TaskActivity=0x0000 # C
OP_CompletedTasks=0x0000 # C 0x0000
OP_Weather=0x7ce4 # was 0x0ed5
OP_SendAATable=0x1b26 #
OP_UpdateAA=0x0000 # V
OP_UpdateAA=0x0000 # V
OP_RespondAA=0x0000 # C 0x0000
OP_ReqClientSpawn=0x54e8 # was 0x6618
OP_SpawnDoor=0x4849 #
OP_GroundSpawn=0x5f0d # was 0x5f0d
OP_SendZonepoints=0x5f51 # was 0x0ff4
OP_SendAAStats=0x0000 # C
OP_SendAAStats=0x0000 # C
OP_WorldObjectsSent=0x7b73 # was 0x7b73
OP_BlockedBuffs=0x664a # was 0x4027
OP_SendExpZonein=0x2c27 # was 0x1436
@@ -132,12 +132,12 @@ OP_GuildManageBanker=0x0000 # C
OP_GuildBank=0x0000 # C
OP_SetGuildRank=0x0000 # C
OP_GuildUpdateURLAndChannel=0x0000 # C
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x0000 # C
@@ -317,8 +317,8 @@ OP_VetRewardsAvaliable=0x0000 # C Mispelled?
OP_VetClaimRequest=0x0000 # C
OP_VetClaimReply=0x0000 # C
OP_CrystalCountUpdate=0x0000 # C
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 # C OP_Damage?
OP_MobUpdate=0x4656 # was 0x4656
OP_NPCMoveUpdate=0x5d24 #
@@ -349,7 +349,7 @@ OP_ManaUpdate=0x0000 # C
OP_EnduranceUpdate=0x0000 # C
OP_MobManaUpdate=0x0000 # C
OP_MobEnduranceUpdate=0x0000 # C
# Looting
OP_LootRequest=0x0000 # C
OP_EndLootRequest=0x0000 # C
@@ -364,10 +364,10 @@ OP_TraderShop=0x0000 # C
OP_Trader=0x0000 # C
OP_TraderBuy=0x0000 # C
OP_Barter=0x0000 # C
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x0000 # C
@@ -416,10 +416,10 @@ OP_TributeItem=0x0000 # C
OP_TributeMoney=0x0000 # C
OP_TributeToggle=0x0000 # C
OP_TributePointUpdate=0x0000 # C
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x0000 # C
@@ -444,11 +444,11 @@ OP_AdventureLeaderboardReply=0x0000 # C
OP_GroupDisband=0x0000 # C
OP_GroupInvite=0x0000 # C
OP_GroupFollow=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupCancelInvite=0x0000 # C - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x0000 # C
OP_GroupDelete=0x0000 #
OP_GroupDelete=0x0000 #
OP_CancelInvite=0x0000 # C
OP_GroupFollow2=0x0000 # C
OP_GroupInvite2=0x0000 # C
@@ -464,20 +464,20 @@ OP_LFGGetMatchesResponse=0x0000 # C
OP_LFPGetMatchesRequest=0x0000 # C
OP_LFPGetMatchesResponse=0x0000 # C
OP_LFPCommand=0x0000 # C
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x0000 # C
OP_RaidUpdate=0x0000 # C
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x0000 # C
OP_CombatAbility=0x0000 # C
OP_SenseTraps=0x0000 # C
OP_PickPocket=0x0000 # C
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x0000 # C
OP_Sneak=0x0000 # C
OP_Fishing=0x0000 # C
@@ -495,7 +495,7 @@ OP_AcceptNewTask=0x0000 # C
OP_TaskHistoryRequest=0x0000 # C
OP_TaskHistoryReply=0x0000 # C
OP_CancelTask=0x0000 # C
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x0000 # C
@@ -505,53 +505,53 @@ OP_SetTitle=0x0000 # C
OP_SetTitleReply=0x0000 # C
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -563,47 +563,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -650,4 +650,4 @@ OP_RAWOutOfSession=0x0000
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
OP_InitialHPUpdate=0x0000
OP_InitialHPUpdate=0x0000
File diff suppressed because it is too large Load Diff
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x6893 # was 0x2683
OP_ApproveWorld=0x115a # was 0x28a7
OP_LogServer=0x701f # was 0x224f
@@ -49,15 +49,15 @@ OP_FloatListThing=0x0000 # V
# Reasons for Disconnect:
OP_ZoneUnavail=0x0000 # C 0x0000
OP_WorldClientReady=0x399b # C 0x0000
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 # was 0x3594
@@ -71,11 +71,11 @@ OP_LevelUpdate=0x0000 # V
OP_Stamina=0x0000 # V
OP_RequestClientZoneChange=0x3fd2 # was 0x4178
OP_ZoneChange=0x0b93 # was 0x4a61
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x7b64 # V
@@ -86,13 +86,13 @@ OP_TaskActivity=0x0000 # C
OP_CompletedTasks=0x0000 # C 0x0000
OP_Weather=0x7ce4 # was 0x0ed5
OP_SendAATable=0x1b26 #
OP_UpdateAA=0x0000 # V
OP_UpdateAA=0x0000 # V
OP_RespondAA=0x0000 # C 0x0000
OP_ReqClientSpawn=0x54e8 # was 0x6618
OP_SpawnDoor=0x4849 #
OP_GroundSpawn=0x5f0d # was 0x5f0d
OP_SendZonepoints=0x5f51 # was 0x0ff4
OP_SendAAStats=0x0000 # C
OP_SendAAStats=0x0000 # C
OP_WorldObjectsSent=0x7b73 # was 0x7b73
OP_BlockedBuffs=0x664a # was 0x4027
OP_SendExpZonein=0x2c27 # was 0x1436
@@ -132,12 +132,12 @@ OP_GuildManageBanker=0x0000 # C
OP_GuildBank=0x0000 # C
OP_SetGuildRank=0x0000 # C
OP_GuildUpdateURLAndChannel=0x0000 # C
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x0000 # C
@@ -317,8 +317,8 @@ OP_VetRewardsAvaliable=0x0000 # C Mispelled?
OP_VetClaimRequest=0x0000 # C
OP_VetClaimReply=0x0000 # C
OP_CrystalCountUpdate=0x0000 # C
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 # C OP_Damage?
OP_MobUpdate=0x4656 # was 0x4656
OP_NPCMoveUpdate=0x3278 #
@@ -349,7 +349,7 @@ OP_ManaUpdate=0x0000 # C
OP_EnduranceUpdate=0x0000 # C
OP_MobManaUpdate=0x0000 # C
OP_MobEnduranceUpdate=0x0000 # C
# Looting
OP_LootRequest=0x0000 # C
OP_EndLootRequest=0x0000 # C
@@ -364,10 +364,10 @@ OP_TraderShop=0x0000 # C
OP_Trader=0x0000 # C
OP_TraderBuy=0x0000 # C
OP_Barter=0x0000 # C
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x0000 # C
@@ -416,10 +416,10 @@ OP_TributeItem=0x0000 # C
OP_TributeMoney=0x0000 # C
OP_TributeToggle=0x0000 # C
OP_TributePointUpdate=0x0000 # C
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x0000 # C
@@ -444,11 +444,11 @@ OP_AdventureLeaderboardReply=0x0000 # C
OP_GroupDisband=0x0000 # C
OP_GroupInvite=0x0000 # C
OP_GroupFollow=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupCancelInvite=0x0000 # C - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x0000 # C
OP_GroupDelete=0x0000 #
OP_GroupDelete=0x0000 #
OP_CancelInvite=0x0000 # C
OP_GroupFollow2=0x0000 # C
OP_GroupInvite2=0x0000 # C
@@ -464,20 +464,20 @@ OP_LFGGetMatchesResponse=0x0000 # C
OP_LFPGetMatchesRequest=0x0000 # C
OP_LFPGetMatchesResponse=0x0000 # C
OP_LFPCommand=0x0000 # C
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x0000 # C
OP_RaidUpdate=0x0000 # C
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x0000 # C
OP_CombatAbility=0x0000 # C
OP_SenseTraps=0x0000 # C
OP_PickPocket=0x0000 # C
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x0000 # C
OP_Sneak=0x0000 # C
OP_Fishing=0x0000 # C
@@ -495,7 +495,7 @@ OP_AcceptNewTask=0x0000 # C
OP_TaskHistoryRequest=0x0000 # C
OP_TaskHistoryReply=0x0000 # C
OP_CancelTask=0x0000 # C
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x0000 # C
@@ -505,53 +505,53 @@ OP_SetTitle=0x0000 # C
OP_SetTitleReply=0x0000 # C
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -563,47 +563,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x13da # V
OP_ApproveWorld=0x86c7 # C
OP_LogServer=0x6f79 # C
@@ -49,15 +49,15 @@ OP_FloatListThing=0x61ba # V
# Reasons for Disconnect:
OP_ZoneUnavail=0x3288 # C 0x1190
OP_WorldClientReady=0x7d05 # C 0x4786
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 # V
@@ -72,11 +72,11 @@ OP_Stamina=0x3d86 # V
OP_RequestClientZoneChange=0x18ea # C
OP_ZoneChange=0x6d37 # C
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x3e17 # V
@@ -86,14 +86,14 @@ OP_TaskDescription=0x156c # C
OP_TaskActivity=0x31f3 # C
OP_CompletedTasks=0x82d7 # C 0x6d27
OP_Weather=0x4658 # V
OP_SendAATable=0x6ef9 # V
OP_UpdateAA=0x7bf6 # V
OP_SendAATable=0x6ef9 # V
OP_UpdateAA=0x7bf6 # V
OP_RespondAA=0x1fbd # C 0x2bad
OP_ReqClientSpawn=0x69cd # V
OP_SpawnDoor=0x6f2b # V
OP_GroundSpawn=0x5c85 # V
OP_SendZonepoints=0x2370 # V
OP_SendAAStats=0x78b9 # C
OP_SendAAStats=0x78b9 # C
OP_WorldObjectsSent=0x7b73 # V
OP_BlockedBuffs=0x05d5 # V
OP_SendExpZonein=0x47e7 # V
@@ -133,12 +133,12 @@ OP_GuildManageBanker=0x1e4c # C
OP_GuildBank=0x0d8a # C
OP_SetGuildRank=0x4ffe # C
OP_GuildUpdateURLAndChannel=0x5232 # C
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x6989 # C
@@ -317,8 +317,8 @@ OP_VetRewardsAvaliable=0x0baa # C Mispelled?
OP_VetClaimRequest=0x34f8 # C
OP_VetClaimReply=0x6a5d # C
OP_CrystalCountUpdate=0x3fc8 # C
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 # C OP_Damage?
OP_MobUpdate=0x4656 # Same as OP_SpawnPositionUpdate
OP_NPCMoveUpdate=0x0f3e #
@@ -349,7 +349,7 @@ OP_ManaUpdate=0x0433 # C
OP_EnduranceUpdate=0x6b76 # C
OP_MobManaUpdate=0x7901 # C
OP_MobEnduranceUpdate=0x6c5f # C
# Looting
OP_LootRequest=0x6ad7 # C
OP_EndLootRequest=0x6546 # C
@@ -364,10 +364,10 @@ OP_TraderShop=0x2881 # C
OP_Trader=0x0c08 # C
OP_TraderBuy=0x3672 # C
OP_Barter=0x6db5 # C
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x7113 # C
@@ -416,10 +416,10 @@ OP_TributeItem=0x0b89 # C
OP_TributeMoney=0x314f # C
OP_TributeToggle=0x6dc3 # C
OP_TributePointUpdate=0x15a7 # C
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x3ed4 # C
@@ -444,11 +444,11 @@ OP_AdventureLeaderboardReply=0x4423 # C
OP_GroupDisband=0x54e8 # C
OP_GroupInvite=0x4f60 # C
OP_GroupFollow=0x7f2b # C
OP_GroupUpdate=0x5331 # C
OP_GroupUpdateB=0x0786 # C
OP_GroupUpdate=0x5331 # C
OP_GroupUpdateB=0x0786 # C
OP_GroupCancelInvite=0x2736 # C - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x3e22 # C
OP_GroupDelete=0x58e6 #
OP_GroupDelete=0x58e6 #
OP_CancelInvite=0x2736 # C
OP_GroupFollow2=0x6c16 # C
OP_GroupInvite2=0x5251 # C
@@ -464,20 +464,20 @@ OP_LFGGetMatchesResponse=0x7a16 # C
OP_LFPGetMatchesRequest=0x189e # C
OP_LFPGetMatchesResponse=0x589f # C
OP_LFPCommand=0x7429 # C
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x60b5 # C
OP_RaidUpdate=0x4d8b # C
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x30e2 # C
OP_CombatAbility=0x36f8 # C
OP_SenseTraps=0x7e45 # C
OP_PickPocket=0x5821 # C
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x6def # C
OP_Sneak=0x1d22 # C
OP_Fishing=0x7093 # C
@@ -495,7 +495,7 @@ OP_AcceptNewTask=0x17d5 # C
OP_TaskHistoryRequest=0x547c # C
OP_TaskHistoryReply=0x4524 # C
OP_CancelTask=0x3bf5 # C
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x4b49 # C
@@ -505,53 +505,53 @@ OP_SetTitle=0x675c # C
OP_SetTitleReply=0x75f5 # C
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -563,49 +563,49 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0001 #
OP_Login=0x0002 #
OP_ServerListRequest=0x0004 #
OP_PlayEverquestRequest=0x000d #
OP_PlayEverquestResponse=0x0021 #
OP_ChatMessage=0x0016 #
OP_LoginAccepted=0x0017 #
OP_ServerListResponse=0x0018 #
OP_Poll=0x0029 #
OP_EnterChat=0x000f #
OP_PollResponse=0x0011 #
OP_SessionReady=0x0001 #
OP_Login=0x0002 #
OP_ServerListRequest=0x0004 #
OP_PlayEverquestRequest=0x000d #
OP_PlayEverquestResponse=0x0021 #
OP_ChatMessage=0x0016 #
OP_LoginAccepted=0x0017 #
OP_ServerListResponse=0x0018 #
OP_Poll=0x0029 #
OP_EnterChat=0x000f #
OP_PollResponse=0x0011 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x6893 # was 0x2683
OP_ApproveWorld=0x115a # was 0x28a7
OP_LogServer=0x701f # was 0x224f
@@ -49,15 +49,15 @@ OP_FloatListThing=0x0000 # V
# Reasons for Disconnect:
OP_ZoneUnavail=0x0000 # C 0x0000
OP_WorldClientReady=0x399b # C 0x0000
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 # was 0x3594
@@ -71,11 +71,11 @@ OP_LevelUpdate=0x0000 # V
OP_Stamina=0x0000 # V
OP_RequestClientZoneChange=0x3fd2 # was 0x4178
OP_ZoneChange=0x0b93 # was 0x4a61
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x7b64 # V
@@ -86,13 +86,13 @@ OP_TaskActivity=0x0000 # C
OP_CompletedTasks=0x0000 # C 0x0000
OP_Weather=0x7ce4 # was 0x0ed5
OP_SendAATable=0x1d99 #
OP_UpdateAA=0x0000 # V
OP_UpdateAA=0x0000 # V
OP_RespondAA=0x0000 # C 0x0000
OP_ReqClientSpawn=0x54e8 # was 0x6618
OP_SpawnDoor=0x6cfe #
OP_GroundSpawn=0x442a # was 0x5f0d
OP_SendZonepoints=0x5851 # was 0x0ff4
OP_SendAAStats=0x0000 # C
OP_SendAAStats=0x0000 # C
OP_WorldObjectsSent=0x7b73 # was 0x7b73
OP_BlockedBuffs=0x664a # was 0x4027
OP_SendExpZonein=0x2c27 # was 0x1436
@@ -132,12 +132,12 @@ OP_GuildManageBanker=0x0000 # C
OP_GuildBank=0x0000 # C
OP_SetGuildRank=0x0000 # C
OP_GuildUpdateURLAndChannel=0x0000 # C
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x0000 # C
@@ -317,8 +317,8 @@ OP_VetRewardsAvaliable=0x0000 # C Mispelled?
OP_VetClaimRequest=0x0000 # C
OP_VetClaimReply=0x0000 # C
OP_CrystalCountUpdate=0x0000 # C
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 # C OP_Damage?
OP_MobUpdate=0x4656 # was 0x4656
OP_NPCMoveUpdate=0x38e0 #
@@ -349,7 +349,7 @@ OP_ManaUpdate=0x0000 # C
OP_EnduranceUpdate=0x0000 # C
OP_MobManaUpdate=0x0000 # C
OP_MobEnduranceUpdate=0x0000 # C
# Looting
OP_LootRequest=0x0000 # C
OP_EndLootRequest=0x0000 # C
@@ -364,10 +364,10 @@ OP_TraderShop=0x0000 # C
OP_Trader=0x0000 # C
OP_TraderBuy=0x0000 # C
OP_Barter=0x0000 # C
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x0000 # C
@@ -416,10 +416,10 @@ OP_TributeItem=0x0000 # C
OP_TributeMoney=0x0000 # C
OP_TributeToggle=0x0000 # C
OP_TributePointUpdate=0x0000 # C
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x0000 # C
@@ -444,11 +444,11 @@ OP_AdventureLeaderboardReply=0x0000 # C
OP_GroupDisband=0x0000 # C
OP_GroupInvite=0x0000 # C
OP_GroupFollow=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupCancelInvite=0x0000 # C - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x0000 # C
OP_GroupDelete=0x0000 #
OP_GroupDelete=0x0000 #
OP_CancelInvite=0x0000 # C
OP_GroupFollow2=0x0000 # C
OP_GroupInvite2=0x0000 # C
@@ -464,20 +464,20 @@ OP_LFGGetMatchesResponse=0x0000 # C
OP_LFPGetMatchesRequest=0x0000 # C
OP_LFPGetMatchesResponse=0x0000 # C
OP_LFPCommand=0x0000 # C
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x0000 # C
OP_RaidUpdate=0x0000 # C
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x0000 # C
OP_CombatAbility=0x0000 # C
OP_SenseTraps=0x0000 # C
OP_PickPocket=0x0000 # C
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x0000 # C
OP_Sneak=0x0000 # C
OP_Fishing=0x0000 # C
@@ -495,7 +495,7 @@ OP_AcceptNewTask=0x0000 # C
OP_TaskHistoryRequest=0x0000 # C
OP_TaskHistoryReply=0x0000 # C
OP_CancelTask=0x0000 # C
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x0000 # C
@@ -505,53 +505,53 @@ OP_SetTitle=0x0000 # C
OP_SetTitleReply=0x0000 # C
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -563,47 +563,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
@@ -4,11 +4,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x4d5c #c
OP_ApproveWorld=0x655c #c
OP_LogServer=0x1497 #c
@@ -40,33 +40,33 @@ OP_FloatListThing=0x45d7 #
# Reasons for Disconnect:
OP_ZoneUnavail=0x66e4 # This is not the right opcode. Produces a 'Your character is inaccessible' message.
OP_WorldClientReady=0x3f24 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 #
OP_ZoneEntry=0x5821 #
OP_ReqNewZone=0x1c36 #
OP_NewZone=0x4118 #
OP_ZoneSpawns=0x0000 #
OP_ZoneSpawns=0x0000 #
OP_PlayerProfile=0x6afd #c
OP_TimeOfDay=0x6015 #
OP_LevelUpdate=0x0000 #
OP_Stamina=0x0000 #
OP_RequestClientZoneChange=0x18ea #
OP_ZoneChange=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x3f55 #c
@@ -77,7 +77,7 @@ OP_TaskActivity=0x0000 #
OP_CompletedTasks=0x6d1f #c
OP_Weather=0x4658 #
OP_SendAATable=0x72f3 #
OP_UpdateAA=0x0000 #
OP_UpdateAA=0x0000 #
OP_RespondAA=0x0000 #
OP_ReqClientSpawn=0x47e7 #
OP_SpawnDoor=0x0e24 #
@@ -123,12 +123,12 @@ OP_GuildManageBanker=0x0000 #
OP_GuildBank=0x0000 #
OP_SetGuildRank=0x0000 #
OP_GuildUpdateURLAndChannel=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x0000 #
@@ -308,8 +308,8 @@ OP_VetRewardsAvaliable=0x0000 #
OP_VetClaimRequest=0x0000 #
OP_VetClaimReply=0x0000 #
OP_CrystalCountUpdate=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 #
OP_MobUpdate=0x4656 #
OP_NPCMoveUpdate=0x2339 #
@@ -340,7 +340,7 @@ OP_ManaUpdate=0x7c94 #c
OP_EnduranceUpdate=0x5851 #c
OP_MobManaUpdate=0x190c #c
OP_MobEnduranceUpdate=0x4d27 #c
# Looting
OP_LootRequest=0x0000 #
OP_EndLootRequest=0x0000 #
@@ -355,10 +355,10 @@ OP_TraderShop=0x0000 #
OP_Trader=0x0000 #
OP_TraderBuy=0x0000 #
OP_Barter=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x0000 #
@@ -407,10 +407,10 @@ OP_TributeItem=0x0000 #
OP_TributeMoney=0x0000 #
OP_TributeToggle=0x0000 #
OP_TributePointUpdate=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x0000 #
@@ -435,11 +435,11 @@ OP_AdventureLeaderboardReply=0x0000 #
OP_GroupDisband=0x0000 #
OP_GroupInvite=0x3671 #c
OP_GroupFollow=0x0000 #
OP_GroupUpdate=0x4b82 #c
OP_GroupUpdateB=0x44c2 #c
OP_GroupUpdate=0x4b82 #c
OP_GroupUpdateB=0x44c2 #c
OP_GroupCancelInvite=0x0000 #
OP_GroupAcknowledge=0x0000 #
OP_GroupDelete=0x0000 #
OP_GroupDelete=0x0000 #
OP_CancelInvite=0x0000 #
OP_GroupFollow2=0x0000 #
OP_GroupInvite2=0x0000 #
@@ -455,20 +455,20 @@ OP_LFGGetMatchesResponse=0x0000 #
OP_LFPGetMatchesRequest=0x0000 #
OP_LFPGetMatchesResponse=0x0000 #
OP_LFPCommand=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x0000 #
OP_RaidUpdate=0x0c08 #
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x0000 #
OP_CombatAbility=0x0000 #
OP_SenseTraps=0x0000 #
OP_PickPocket=0x0000 #
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x0000 #
OP_Sneak=0x0000 #
OP_Fishing=0x0000 #
@@ -486,7 +486,7 @@ OP_AcceptNewTask=0x0000 #
OP_TaskHistoryRequest=0x0000 #
OP_TaskHistoryReply=0x0000 #
OP_CancelTask=0x0000 #
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x0000 #
@@ -496,53 +496,53 @@ OP_SetTitle=0x0000 #
OP_SetTitleReply=0x0000 #
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -554,47 +554,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x2683 # V
OP_ApproveWorld=0x28a7 # C
OP_LogServer=0x224f # C
@@ -49,15 +49,15 @@ OP_FloatListThing=0x0000 # V
# Reasons for Disconnect:
OP_ZoneUnavail=0x0000 # C 0x0000
OP_WorldClientReady=0x399b # C 0x0000
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 # V
@@ -72,11 +72,11 @@ OP_Stamina=0x0000 # V
OP_RequestClientZoneChange=0x4178 # C
OP_ZoneChange=0x4a61 # C
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x0000 # V
@@ -86,14 +86,14 @@ OP_TaskDescription=0x0000 # C
OP_TaskActivity=0x0000 # C
OP_CompletedTasks=0x0000 # C 0x0000
OP_Weather=0x0ed5 # V
OP_SendAATable=0x6dc3 # V
OP_UpdateAA=0x0000 # V
OP_SendAATable=0x6dc3 # V
OP_UpdateAA=0x0000 # V
OP_RespondAA=0x0000 # C 0x0000
OP_ReqClientSpawn=0x6618 # V
OP_SpawnDoor=0x47ae # V
OP_GroundSpawn=0x5f0d # V
OP_SendZonepoints=0x0ff4 # V
OP_SendAAStats=0x0000 # C
OP_SendAAStats=0x0000 # C
OP_WorldObjectsSent=0x7b73 # V
OP_BlockedBuffs=0x4027 # V
OP_SendExpZonein=0x1436 # V
@@ -133,12 +133,12 @@ OP_GuildManageBanker=0x0000 # C
OP_GuildBank=0x0000 # C
OP_SetGuildRank=0x0000 # C
OP_GuildUpdateURLAndChannel=0x0000 # C
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x0000 # C
@@ -317,8 +317,8 @@ OP_VetRewardsAvaliable=0x0000 # C Mispelled?
OP_VetClaimRequest=0x0000 # C
OP_VetClaimReply=0x0000 # C
OP_CrystalCountUpdate=0x0000 # C
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 # C OP_Damage?
OP_MobUpdate=0x4656 # Same as OP_SpawnPositionUpdate
OP_NPCMoveUpdate=0x7adb #
@@ -349,7 +349,7 @@ OP_ManaUpdate=0x0000 # C
OP_EnduranceUpdate=0x0000 # C
OP_MobManaUpdate=0x0000 # C
OP_MobEnduranceUpdate=0x0000 # C
# Looting
OP_LootRequest=0x0000 # C
OP_EndLootRequest=0x0000 # C
@@ -364,10 +364,10 @@ OP_TraderShop=0x0000 # C
OP_Trader=0x0000 # C
OP_TraderBuy=0x0000 # C
OP_Barter=0x0000 # C
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x0000 # C
@@ -416,10 +416,10 @@ OP_TributeItem=0x0000 # C
OP_TributeMoney=0x0000 # C
OP_TributeToggle=0x0000 # C
OP_TributePointUpdate=0x0000 # C
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x0000 # C
@@ -444,11 +444,11 @@ OP_AdventureLeaderboardReply=0x0000 # C
OP_GroupDisband=0x0000 # C
OP_GroupInvite=0x0000 # C
OP_GroupFollow=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupCancelInvite=0x0000 # C - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x0000 # C
OP_GroupDelete=0x0000 #
OP_GroupDelete=0x0000 #
OP_CancelInvite=0x0000 # C
OP_GroupFollow2=0x0000 # C
OP_GroupInvite2=0x0000 # C
@@ -464,20 +464,20 @@ OP_LFGGetMatchesResponse=0x0000 # C
OP_LFPGetMatchesRequest=0x0000 # C
OP_LFPGetMatchesResponse=0x0000 # C
OP_LFPCommand=0x0000 # C
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x0000 # C
OP_RaidUpdate=0x0000 # C
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x0000 # C
OP_CombatAbility=0x0000 # C
OP_SenseTraps=0x0000 # C
OP_PickPocket=0x0000 # C
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x0000 # C
OP_Sneak=0x0000 # C
OP_Fishing=0x0000 # C
@@ -495,7 +495,7 @@ OP_AcceptNewTask=0x0000 # C
OP_TaskHistoryRequest=0x0000 # C
OP_TaskHistoryReply=0x0000 # C
OP_CancelTask=0x0000 # C
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x0000 # C
@@ -505,53 +505,53 @@ OP_SetTitle=0x0000 # C
OP_SetTitleReply=0x0000 # C
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -563,47 +563,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x6893 # was 0x2683
OP_ApproveWorld=0x115a # was 0x28a7
OP_LogServer=0x701f # was 0x224f
@@ -49,15 +49,15 @@ OP_FloatListThing=0x0000 # V
# Reasons for Disconnect:
OP_ZoneUnavail=0x0000 # C 0x0000
OP_WorldClientReady=0x399b # C 0x0000
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 # was 0x3594
@@ -72,11 +72,11 @@ OP_Stamina=0x0000 # V
OP_RequestClientZoneChange=0x3fd2 # was 0x4178
OP_ZoneChange=0x0b93 # was 0x4a61
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x7b64 # V
@@ -87,13 +87,13 @@ OP_TaskActivity=0x0000 # C
OP_CompletedTasks=0x0000 # C 0x0000
OP_Weather=0x7ce4 # was 0x0ed5
OP_SendAATable=0x1bd4 # was 0x6dc3
OP_UpdateAA=0x0000 # V
OP_UpdateAA=0x0000 # V
OP_RespondAA=0x0000 # C 0x0000
OP_ReqClientSpawn=0x54e8 # was 0x6618
OP_SpawnDoor=0x465e # was 0x47ae Need an Encode
OP_GroundSpawn=0x5f0d # was 0x5f0d
OP_SendZonepoints=0x5f51 # was 0x0ff4
OP_SendAAStats=0x0000 # C
OP_SendAAStats=0x0000 # C
OP_WorldObjectsSent=0x7b73 # was 0x7b73
OP_BlockedBuffs=0x664a # was 0x4027
OP_SendExpZonein=0x2c27 # was 0x1436
@@ -133,12 +133,12 @@ OP_GuildManageBanker=0x0000 # C
OP_GuildBank=0x0000 # C
OP_SetGuildRank=0x0000 # C
OP_GuildUpdateURLAndChannel=0x0000 # C
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x0000 # C
@@ -317,8 +317,8 @@ OP_VetRewardsAvaliable=0x0000 # C Mispelled?
OP_VetClaimRequest=0x0000 # C
OP_VetClaimReply=0x0000 # C
OP_CrystalCountUpdate=0x0000 # C
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_Action2=0x0000 # C OP_Damage?
OP_MobUpdate=0x4656 # was 0x4656
OP_NPCMoveUpdate=0x38f9 # was 0x7adb
@@ -349,7 +349,7 @@ OP_ManaUpdate=0x0000 # C
OP_EnduranceUpdate=0x0000 # C
OP_MobManaUpdate=0x0000 # C
OP_MobEnduranceUpdate=0x0000 # C
# Looting
OP_LootRequest=0x0000 # C
OP_EndLootRequest=0x0000 # C
@@ -364,10 +364,10 @@ OP_TraderShop=0x0000 # C
OP_Trader=0x0000 # C
OP_TraderBuy=0x0000 # C
OP_Barter=0x0000 # C
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_ShopItem=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_TraderItemUpdate=0x0000 #
# pc/npc trading
OP_TradeRequest=0x0000 # C
@@ -418,10 +418,10 @@ OP_TributeItem=0x0000 # C
OP_TributeMoney=0x0000 # C
OP_TributeToggle=0x0000 # C
OP_TributePointUpdate=0x0000 # C
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x0000 # C
@@ -446,11 +446,11 @@ OP_AdventureLeaderboardReply=0x0000 # C
OP_GroupDisband=0x0000 # C
OP_GroupInvite=0x0000 # C
OP_GroupFollow=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupUpdate=0x0000 # C
OP_GroupUpdateB=0x0000 # C
OP_GroupCancelInvite=0x0000 # C - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x0000 # C
OP_GroupDelete=0x0000 #
OP_GroupDelete=0x0000 #
OP_CancelInvite=0x0000 # C
OP_GroupFollow2=0x0000 # C
OP_GroupInvite2=0x0000 # C
@@ -466,20 +466,20 @@ OP_LFGGetMatchesResponse=0x0000 # C
OP_LFPGetMatchesRequest=0x0000 # C
OP_LFPGetMatchesResponse=0x0000 # C
OP_LFPCommand=0x0000 # C
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x0000 # C
OP_RaidUpdate=0x0000 # C
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x0000 # C
OP_CombatAbility=0x0000 # C
OP_SenseTraps=0x0000 # C
OP_PickPocket=0x0000 # C
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x0000 # C
OP_Sneak=0x0000 # C
OP_Fishing=0x0000 # C
@@ -497,7 +497,7 @@ OP_AcceptNewTask=0x0000 # C
OP_TaskHistoryRequest=0x0000 # C
OP_TaskHistoryReply=0x0000 # C
OP_CancelTask=0x0000 # C
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
# Title opcodes
OP_NewTitlesAvailable=0x0000 # C
@@ -507,53 +507,53 @@ OP_SetTitle=0x0000 # C
OP_SetTitleReply=0x0000 # C
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -565,47 +565,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
OP_SessionReady=0x0000 #
OP_Login=0x0000 #
OP_ServerListRequest=0x0000 #
OP_PlayEverquestRequest=0x0000 #
OP_PlayEverquestResponse=0x0000 #
OP_ChatMessage=0x0000 #
OP_LoginAccepted=0x0000 #
OP_ServerListResponse=0x0000 #
OP_Poll=0x0000 #
OP_EnterChat=0x0000 #
OP_PollResponse=0x0000 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
+118 -118
View File
@@ -13,11 +13,11 @@ OP_Unknown=0x0000
OP_ExploreUnknown=0x0000 # used for unknown explorer
# V = Verified correct
# C = Most likely correct
# C = Most likely correct
# U = Unsure, but should be correct or close
# world packets
# Required to reach Char Select:
# Required to reach Char Select:
OP_SendLoginInfo=0x0ff4 # C
OP_ApproveWorld=0x701f # C
OP_LogServer=0x4762 # C
@@ -49,15 +49,15 @@ OP_FloatListThing=0x10b5 # C
# Reasons for Disconnect:
OP_ZoneUnavail=0x7930 # C
OP_WorldClientReady=0x1a84 # C
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
OP_CharacterStillInZone=0x0000 #
OP_WorldChecksumFailure=0x0000 #
OP_WorldLoginFailed=0x0000 #
OP_WorldLogout=0x0000 #
OP_WorldLevelTooHigh=0x0000 #
OP_CharInacessable=0x0000 #
OP_UserCompInfo=0x0000 #
# OP_SendExeChecksum=0x0000 #
# OP_SendBaseDataChecksum=0x0000 #
# Zone in opcodes
OP_AckPacket=0x3594 # C
@@ -69,15 +69,15 @@ OP_PlayerProfile=0x6022 # C
OP_TimeOfDay=0x6015 # C
OP_LevelUpdate=0x6a99 # C
OP_Stamina=0x3e50 # C
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_LockoutTimerInfo=0x0000 #
OP_ZoneServerReady=0x0000 #
OP_RequestClientZoneChange=0x4885 # C
OP_ZoneChange=0x051b # C
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
OP_ZoneInUnknown=0x0000 #
OP_LogoutReply=0x0000 #
OP_PreLogoutReply=0x0000 #
# Required to fully log in
OP_SpawnAppearance=0x10b7 # C
@@ -87,14 +87,14 @@ OP_TaskDescription=0x7b77 # C
OP_TaskActivity=0x0525 # C
OP_CompletedTasks=0x5412 # C
OP_Weather=0x2641 # C
OP_SendAATable=0x322f # C
OP_UpdateAA=0x466c # C
OP_RespondAA=0x0142 # C
OP_SendAATable=0x322f # C
OP_UpdateAA=0x466c # C
OP_RespondAA=0x0142 # C
OP_ReqClientSpawn=0x1436 # C
OP_SpawnDoor=0x102f # C
OP_GroundSpawn=0x33e5 # C
OP_SendZonepoints=0x5821 # C
OP_SendAAStats=0x57a3 # C
OP_SendAAStats=0x57a3 # C
OP_WorldObjectsSent=0x7b73 # C
OP_BlockedBuffs=0x0baa # C
OP_SendExpZonein=0x69cd # C
@@ -134,12 +134,12 @@ OP_GuildManageBanker=0x11bc # C
OP_GuildBank=0x0fce # C
OP_SetGuildRank=0x4ffe # C
OP_GuildUpdateURLAndChannel=0x5422
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
OP_GuildMemberLevelUpdate=0x0000 #
OP_ZoneGuildList=0x0000 #
OP_GetGuildsList=0x0000 #
# OP_GuildManageRemove=0x0000 #
# OP_GuildManageAdd=0x0000 #
# OP_GuildManageStatus=0x0000 #
# GM/guide opcodes
OP_GMServers=0x6989 # C
@@ -319,18 +319,18 @@ OP_VetRewardsAvaliable=0x4e4e # C
OP_VetClaimRequest=0x771f # C
OP_VetClaimReply=0x2f95 # C
OP_CrystalCountUpdate=0x2d0e # C
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_DisciplineUpdate=0x0000 #
OP_BecomeCorpse=0x0000 #
OP_MobUpdate=0x4656 # Unused?
OP_NPCMoveUpdate=0x22a7 #
# New Opcodes
OP_SpawnPositionUpdate=0x4656 #
OP_SpawnPositionUpdate=0x4656 #
OP_ManaUpdate=0x4b61 #
OP_EnduranceUpdate=0x02d6 #
OP_EnduranceUpdate=0x02d6 #
OP_MobManaUpdate=0x2ac1 #
OP_MobEnduranceUpdate=0x6c5f #
# Looting
OP_LootRequest=0x2701 # C
@@ -343,13 +343,13 @@ OP_BazaarSearch=0x4675 # C
OP_TraderDelItem=0x63c8 # C
OP_BecomeTrader=0x528f # C
OP_TraderShop=0x7598 # C
OP_TraderItemUpdate=0x0000 #
OP_TraderItemUpdate=0x0000 #
OP_Trader=0x7092 # C
OP_ShopItem=0x0000 #
OP_ShopItem=0x0000 #
OP_TraderBuy=0x053a # C
OP_Barter=0x4b49 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_BazaarInspect=0x0000 #
OP_Bazaar=0x0000 #
OP_MarketPlace1=0x367b
OP_MarketPlace2=0x0e1d
@@ -400,10 +400,10 @@ OP_TributeItem=0x416b # C
OP_TributeMoney=0x0b89 # C
OP_TributeToggle=0x45b3 # C
OP_TributePointUpdate=0x7d05 # C
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
OP_TributeNPC=0x0000 #
OP_GuildTributeInfo=0x0000 #
OP_OpenTributeReply=0x0000 #
# OP_GuildTributeStatus=0x0000 #
# Adventure packets:
OP_LeaveAdventure=0x2ab6 # C
@@ -432,7 +432,7 @@ OP_GroupUpdate=0x21be
OP_GroupUpdateB=0x7351
OP_GroupCancelInvite=0x5251 # C - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x3e22 # C
OP_GroupDelete=0x58e6 #
OP_GroupDelete=0x58e6 #
OP_CancelInvite=0x5251 # C
OP_GroupFollow2=0x2736 # C
OP_GroupInvite2=0x548c # C
@@ -447,20 +447,20 @@ OP_LFGGetMatchesResponse=0x7d90 # C
OP_LFPGetMatchesRequest=0x0479 # C
OP_LFPGetMatchesResponse=0x16f5 # C
OP_LFPCommand=0x710e # C
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
OP_LFGAppearance=0x0000 #
OP_LFGResponse=0x0000 #
# Raid Opcodes
OP_RaidInvite=0x3b52 # C
OP_RaidUpdate=0x32c6 # C
OP_RaidJoin=0x0000 #
OP_RaidJoin=0x0000 #
# Button-push commands
OP_Taunt=0x1418 # C
OP_CombatAbility=0x24c5 # C
OP_SenseTraps=0x1e04 # C
OP_PickPocket=0x25f0 # C
OP_DisarmTraps=0x0000 #
OP_DisarmTraps=0x0000 #
OP_Disarm=0x6def # C
OP_Sneak=0x03e7 # C
OP_Fishing=0x7093 # C
@@ -478,7 +478,7 @@ OP_AcceptNewTask=0x5832 # C
OP_TaskHistoryRequest=0x29d7 # C
OP_TaskHistoryReply=0x3d2a # C
OP_CancelTask=0x726b # C
OP_DeclineAllTasks=0x0000 #
OP_DeclineAllTasks=0x0000 #
OP_Shroud=0x6d1f
OP_ShroudRemove=0x17f6
OP_ShroudUnknown1=0x169a
@@ -496,53 +496,53 @@ OP_SetTitle=0x698a # C
OP_SetTitleReply=0x4d3e # C
# mail opcodes
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
OP_Command=0x0000 #
OP_MailboxHeader=0x0000 #
OP_MailHeader=0x0000 #
OP_MailBody=0x0000 #
OP_NewMail=0x0000 #
OP_SentConfirm=0x0000 #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# # # # # # # # # # # Below this point should not be needed # # # # # # # # # # #
# This section are all unknown in Titanium
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
OP_ForceFindPerson=0x0000 #
OP_LocInfo=0x0000 #
OP_ReloadUI=0x0000 #
OP_ItemName=0x0000 #
OP_ItemLinkText=0x0000 #
OP_MultiLineMsg=0x0000 #
OP_MendHPUpdate=0x0000 #
OP_TargetReject=0x0000 #
OP_SafePoint=0x0000 #
OP_IncreaseStats=0x0000 #
OP_ApproveZone=0x0000 #
OP_ZoneComplete=0x0000 #
OP_ClientError=0x0000 #
OP_DumpName=0x0000 #
OP_Heartbeat=0x0000 #
OP_CrashDump=0x0000 #
OP_LoginComplete=0x0000 #
# discovered opcodes not yet used:
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_PickLockSuccess=0x0000 #
OP_PlayMP3=0x0000 #
OP_ReclaimCrystals=0x0000 #
OP_DynamicWall=0x0000 #
OP_OpenDiscordMerchant=0x0000 #
OP_DiscordMerchantInventory=0x0000 #
OP_GiveMoney=0x0000 #
OP_RequestKnowledgeBase=0x0000 #
OP_KnowledgeBase=0x0000 #
OP_SlashAdventure=0x0000 # /adventure
OP_BecomePVPPrompt=0x0000 #
OP_BecomePVPPrompt=0x0000 #
OP_MoveLogRequest=0x0000 # gone I think
OP_MoveLogDisregard=0x0000 # gone I think
# named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 #
OP_AnnoyingZoneUnknown=0x0000 #
OP_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
OP_QueryResponseThing=0x0000 #
OP_QueryResponseThing=0x0000 #
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
@@ -554,47 +554,47 @@ OP_PetitionSearch=0x0000 # search term for petition
OP_PetitionSearchResults=0x0000 # (list of?) matches from search
OP_PetitionSearchText=0x0000 # text results of search
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
OP_PetitionUpdate=0x0000 #
OP_PetitionCheckout=0x0000 #
OP_PetitionCheckIn=0x0000 #
OP_PetitionQue=0x0000 #
OP_PetitionUnCheckout=0x0000 #
OP_PetitionDelete=0x0000 #
OP_DeletePetition=0x0000 #
OP_PetitionResolve=0x0000 #
OP_PDeletePetition=0x0000 #
OP_PetitionBug=0x0000 #
OP_PetitionRefresh=0x0000 #
OP_PetitionCheckout2=0x0000 #
OP_PetitionViewPetition=0x0000 #
# Login opcodes
OP_SessionReady=0x0001 #
OP_Login=0x0002 #
OP_ServerListRequest=0x0004 #
OP_PlayEverquestRequest=0x000d #
OP_PlayEverquestResponse=0x0021 #
OP_ChatMessage=0x0016 #
OP_LoginAccepted=0x0017 #
OP_ServerListResponse=0x0018 #
OP_Poll=0x0029 #
OP_EnterChat=0x000f #
OP_PollResponse=0x0011 #
OP_SessionReady=0x0001 #
OP_Login=0x0002 #
OP_ServerListRequest=0x0004 #
OP_PlayEverquestRequest=0x000d #
OP_PlayEverquestResponse=0x0021 #
OP_ChatMessage=0x0016 #
OP_LoginAccepted=0x0017 #
OP_ServerListResponse=0x0018 #
OP_Poll=0x0029 #
OP_EnterChat=0x000f #
OP_PollResponse=0x0011 #
# raw opcodes
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
OP_RAWSessionRequest=0x0000 #
OP_RAWSessionResponse=0x0000 #
OP_RAWCombined=0x0000 #
OP_RAWSessionDisconnect=0x0000 #
OP_RAWKeepAlive=0x0000 #
OP_RAWSessionStatRequest=0x0000 #
OP_RAWSessionStatResponse=0x0000 #
OP_RAWPacket=0x0000 #
OP_RAWFragment=0x0000 #
OP_RAWOutOfOrderAck=0x0000 #
OP_RAWAck=0x0000 #
OP_RAWAppCombined=0x0000 #
OP_RAWOutOfSession=0x0000 #
# we need to document the differences between these packets to make identifying them easier
OP_Some3ByteHPUpdate=0x0000 # initial HP update for mobs
Binary file not shown.
+7 -7
View File
@@ -9,7 +9,7 @@ EQEmuErrorLog::EQEmuErrorLog()
mErrorLog = NULL;
mErrorLog = fopen(LOG_FILE_NAME, "w");
if(!mErrorLog) {
Log(eqEmuLogConsole,"Opening of %s for writing failed, debug output will be tied to console only.", LOG_FILE_NAME);
Log(eqEmuLogConsole,"Opening of %s for writing failed, debug output will be tied to console only.", LOG_FILE_NAME);
}
else
Log(eqEmuLogBoth, "EQEmuErrorLog Init Successful.");
@@ -26,11 +26,11 @@ EQEmuErrorLog::EQEmuErrorLog()
}
EQEmuErrorLog::~EQEmuErrorLog()
{
{
Log(eqEmuLogBoth, "EQEmuErrorLog Shutdown.");
if(mErrorLog) {
fclose(mErrorLog);
mErrorLog = NULL;
if(mErrorLog) {
fclose(mErrorLog);
mErrorLog = NULL;
}
}
@@ -47,7 +47,7 @@ void EQEmuErrorLog::Log(unsigned int mOutputType, const char *msg, ...)
struct tm *mTime;
time(&mClock);
mTime = localtime(&mClock);
if(mOutputType & eqEmuLogConsole){
printf("[Debug] [%02d.%02d.%02d - %02d:%02d:%02d] %s\n", mTime->tm_mon+1, mTime->tm_mday, mTime->tm_year%100, mTime->tm_hour, mTime->tm_min, mTime->tm_sec, buffer);
}
@@ -65,7 +65,7 @@ void EQEmuErrorLog::Log(unsigned int mOutputType, const char *msg, ...)
fprintf(mErrorLogSQL, "%s;\n\n", buffer);
}
}
if(buffer)
delete[] buffer;
}
+2 -2
View File
@@ -13,12 +13,12 @@ enum{
};
//log file output
#define LOG_FILE_NAME "debug.txt"
#define LOG_FILE_NAME "debug.txt"
#define SQL_LOG_FILE_NAME "sql_log.sql"
//max single log length
//same as a client:message() max len
#define MAX_LOG_LEN 4096
#define MAX_LOG_LEN 4096
//much simplified logging function, similar to the one used on the server (Tho much simpler)
class EQEmuErrorLog {
+3 -3
View File
@@ -5,7 +5,7 @@
#include "utility.h"
#include "base.h"
#include "ErrorLog.h"
using namespace std;
void MainFrame::ActivitiesListBoxSimpleSelect(wxCommandEvent& event)
@@ -129,7 +129,7 @@ void MainFrame::NewActivity(wxCommandEvent& event)
char * mActQuery = 0;
MakeAnyLenString(&mActQuery, "INSERT INTO `activities` (`taskid`,`activityid`,`step`,`activitytype`,`text1`,`text2`,`text3`,`goalid`,`goalmethod`,`goalcount`,`delivertonpc`,`zoneid`,`optional`) VALUES (%u,%u,%u,%u,'%s','%s','%s',%u,%u,%u,%u,%u,%u)",
newAct.id, newAct.activityId, newAct.step, newAct.activityType, newAct.text1, newAct.text2, newAct.text3, newAct.goalid, newAct.goalmethod, newAct.goalcount, newAct.deliverToNpc, newAct.zoneid, newAct.optional );
mErrorLog->Log(eqEmuLogSQL, "%s", mActQuery);
if (mysql_query(mMysql, mActQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
@@ -161,7 +161,7 @@ void MainFrame::DeleteActivity(wxCommandEvent& event)
eqtask_activity_id *selAct = (eqtask_activity_id*)ActivitiesSelectionList->GetClientData(ActivitiesSelectionList->GetSelection());
unsigned int aid = selAct->activityid;
unsigned int tid = selAct->id;
unsigned int tid = selAct->id;
if(selAct)
{
+8 -8
View File
@@ -113,7 +113,7 @@ MainFrame::MainFrame(const wxString& title,
BoxSizer1 = new wxBoxSizer(wxHORIZONTAL);
mErrorLog->Log(eqEmuLogBoth, "Creating Item List Box.");
ItemSelectionList = new wxListBox(this, LIST_Click, wxDefaultPosition, wxSize( -1,-1 ), 0, NULL, 0);
ItemSelectionList = new wxListBox(this, LIST_Click, wxDefaultPosition, wxSize( -1,-1 ), 0, NULL, 0);
mErrorLog->Log(eqEmuLogBoth, "Adding Item List Box to Sizer.");
BoxSizer1->Add(ItemSelectionList, 0, wxALIGN_TOP|wxALL|wxEXPAND, 5);
@@ -228,7 +228,7 @@ MainFrame::MainFrame(const wxString& title,
mActText1 = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(185,0), wxSize(180,20), wxTE_DONTWRAP);
mActText1->SetMaxLength(64);
mActText1->Disable();
mActText2Label = new wxStaticText(MainPanel2, -1, "Text 2:", wxPoint(105,22), wxDefaultSize);
mActText2 = new wxTextCtrl(MainPanel2, -1, wxT(""), wxPoint(185,20), wxSize(180,20), wxTE_DONTWRAP);
mActText2->SetMaxLength(64);
@@ -392,7 +392,7 @@ MainFrame::MainFrame(const wxString& title,
mErrorLog->Log(eqEmuLogBoth, "Adding Notebook to Sizer.");
BoxSizer1->Add(MainNotebookBack, 1, wxALIGN_TOP|wxEXPAND, 5);
mErrorLog->Log(eqEmuLogBoth, "Setting Frame Sizer.");
this->SetSizer(BoxSizer1);
mErrorLog->Log(eqEmuLogBoth, "Calculating Frame Layout.");
@@ -444,22 +444,22 @@ void MainFrame::Connect(wxCommandEvent& WXUNUSED(event))
mErrorLog->Log(eqEmuLogBoth, "Failed to load tasks, exiting.");
Close(TRUE);
return;
}
}
if(!LoadGoals()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load goals, exiting.");
Close(TRUE);
return;
}
}
if(!LoadActivities()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load activities, exiting.");
Close(TRUE);
return;
}
}
if(!LoadItems()){
mysql_close(mMysql);
mErrorLog->Log(eqEmuLogBoth, "Failed to load items, exiting.");
@@ -510,7 +510,7 @@ void MainFrame::ListBoxDoubleClick(wxCommandEvent& event)
Iter = taskList.begin();
Iter += openedIndex;
eqtask mTask = *Iter;
wxString mStr;
mStr.Printf("%s", mTask.title);
mTaskName->Clear();
+2 -2
View File
@@ -223,7 +223,7 @@ public:
enum
{
TEXT_Main = wxID_HIGHEST + 1,
TEXT_Main = wxID_HIGHEST + 1,
MENU_Connect,
MENU_Quit,
MENU_NewTask,
@@ -252,4 +252,4 @@ enum
LIST_Click_Proximity,
};
#endif
#endif
+8 -8
View File
@@ -12,7 +12,7 @@ using namespace std;
bool MainFrame::GetDatabaseSettings(){
FILE *mFile = NULL;
mFile = fopen("db.txt", "r");
//very little error checking
//we don't make sure the values in the file are valid
//or all there just that the file exists so:
@@ -81,7 +81,7 @@ bool MainFrame::LoadItems(){
itemsLoaded++;
}
mErrorLog->Log(eqEmuLogBoth, "%u Successfully Loaded Items", itemsLoaded);
mysql_free_result(res);
mysql_free_result(res);
}
else{
mErrorLog->Log(eqEmuLogBoth, "Mysql connection did not exist for item load.");
@@ -143,7 +143,7 @@ bool MainFrame::LoadZones()
zonesLoaded++;
}
mErrorLog->Log(eqEmuLogBoth, "%u Successfully Loaded Zones", zonesLoaded);
mysql_free_result(res);
mysql_free_result(res);
}
else{
mErrorLog->Log(eqEmuLogBoth, "Mysql connection did not exist for zone load.");
@@ -181,7 +181,7 @@ bool MainFrame::LoadTasks()
wxString str;
str.Printf("%d:%s", newT.id, newT.title);
ItemSelectionList->Append(str);
if(newT.id > highestIndex)
highestIndex = newT.id;
@@ -200,7 +200,7 @@ bool MainFrame::LoadTasks()
tasksLoaded++;
}
mErrorLog->Log(eqEmuLogBoth, "%u Successfully Loaded Tasks", tasksLoaded);
mysql_free_result(res);
mysql_free_result(res);
}
else{
mErrorLog->Log(eqEmuLogBoth, "Mysql connection did not exist for task load.");
@@ -232,7 +232,7 @@ bool MainFrame::LoadGoals()
goalsLoaded++;
}
mErrorLog->Log(eqEmuLogBoth, "%u Successfully Loaded Goals", goalsLoaded);
mysql_free_result(res);
mysql_free_result(res);
}
else{
mErrorLog->Log(eqEmuLogBoth, "Mysql connection did not exist for goal load.");
@@ -276,7 +276,7 @@ bool MainFrame::LoadActivities()
activitiesLoaded++;
}
mErrorLog->Log(eqEmuLogBoth, "%u Successfully Loaded Activities", activitiesLoaded);
mysql_free_result(res);
mysql_free_result(res);
}
else{
mErrorLog->Log(eqEmuLogBoth, "Mysql connection did not exist for activity load.");
@@ -315,7 +315,7 @@ bool MainFrame::LoadProximity()
proximitiesLoaded++;
}
mErrorLog->Log(eqEmuLogBoth, "%u Successfully Loaded Proximities", proximitiesLoaded);
mysql_free_result(res);
mysql_free_result(res);
}
else{
mErrorLog->Log(eqEmuLogBoth, "Mysql connection did not exist for proximity load.");
+2 -2
View File
@@ -67,7 +67,7 @@ void MainFrame::PopulateGoalValues(unsigned int goalid)
if((*Iter).id == goalid){
int *i = new int;
*i = (*Iter).value;
wxString curStr;
curStr.Clear();
curStr.Printf("%u", (*Iter).value);
@@ -333,7 +333,7 @@ void MainFrame::ChangeGoalValue(wxCommandEvent& event)
mErrorLog->Log(eqEmuLogBoth, "Modify goal value failed, goal values not active");
return;
}
if(GoalsValuesList->GetSelection() == wxNOT_FOUND)
{
mErrorLog->Log(eqEmuLogBoth, "Modify goal value failed, no selection found");
+6 -6
View File
@@ -32,7 +32,7 @@ void MainFrame::PopulateProximity()
prox->exploreid = eqt.exploreid;
prox->zoneid = eqt.zoneid;
wxString zoneName;
zoneName.Printf("Unknown Zone");
vector<eqtask_zones>::iterator ZoneIter;
@@ -115,7 +115,7 @@ void MainFrame::NewProximity(wxCommandEvent& event)
mErrorLog->Log(eqEmuLogBoth, "New proximity failed, not connected to db");
return;
}
int newID = wxGetNumberFromUser("", "Explore ID:", "Explore ID", 0, 0, 9999999);
int newZoneID = wxGetNumberFromUser("", "Zone ID:", "Zone ID", 0, 0, 9999999);
@@ -280,7 +280,7 @@ void MainFrame::SaveProximity(wxCommandEvent& event)
inStr.Clear();
inStr = mProxMinx->GetValue();
toSave.minx = atof(inStr.mb_str());
toSave.minx = atof(inStr.mb_str());
inStr.Clear();
inStr = mProxMaxx->GetValue();
@@ -368,9 +368,9 @@ void MainFrame::SaveProximity(wxCommandEvent& event)
if(canUpdate){
char * mQuery = 0;
MakeAnyLenString(&mQuery, "UPDATE proximities SET minx=%.4f, maxx=%.4f, miny=%.4f, maxy=%.4f, minz=%.4f, maxz=%.4f) WHERE zoneid=%u AND exploreid=%u",
MakeAnyLenString(&mQuery, "UPDATE proximities SET minx=%.4f, maxx=%.4f, miny=%.4f, maxy=%.4f, minz=%.4f, maxz=%.4f) WHERE zoneid=%u AND exploreid=%u",
toSave.minx, toSave.maxx, toSave.miny, toSave.maxy, toSave.minz, toSave.maxz, toSave.zoneid, toSave.exploreid);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
@@ -389,7 +389,7 @@ void MainFrame::SaveProximity(wxCommandEvent& event)
MakeAnyLenString(&mQuery, "INSERT INTO `proximities` (`zoneid`,`exploreid`,`minx`,`maxx`,`miny`,`maxy`,`minz`,`maxz`) VALUES (%u,%u,%.4f,%.4f,%.4f,%.4f,%.4f,%.4f)"
, toSave.zoneid, toSave.exploreid, toSave.minx, toSave.maxx, toSave.miny, toSave.maxy, toSave.minz, toSave.maxz);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
+3 -3
View File
@@ -250,7 +250,7 @@ void MainFrame::SaveTask(wxCommandEvent& event)
getStr = mRewardXP->GetValue();
ourTask.xpreward = atoi(getStr.mb_str());
getStr.Clear();
int * i = (int*)mStartZone->GetClientData(mStartZone->GetSelection());
ourTask.startzone = *i;
@@ -261,7 +261,7 @@ void MainFrame::SaveTask(wxCommandEvent& event)
char * mQuery = 0;
MakeAnyLenString(&mQuery, "UPDATE tasks SET duration=%u, title='%s', description='%s', reward='%s', rewardid=%u, cashreward=%u, xpreward=%i, rewardmethod=%u, startzone=%u, minlevel=%u, maxlevel=%u, repeatable=%u WHERE id=%u",
ourTask.duration, MakeStringSQLSafe(ourTask.title).mb_str(), MakeStringSQLSafe(ourTask.desc).mb_str(), MakeStringSQLSafe(ourTask.reward).mb_str(), ourTask.rewardid, ourTask.cashreward, ourTask.xpreward, ourTask.rewardmethod, ourTask.startzone, ourTask.level_min, ourTask.level_max, ourTask.repeatable, ourTask.id);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
@@ -278,7 +278,7 @@ void MainFrame::SaveTask(wxCommandEvent& event)
MakeAnyLenString(&mQuery, "INSERT INTO `tasks` (`id`,`duration`,`title`,`description`,`reward`,`rewardid`,`cashreward`,`xpreward`,`rewardmethod`,`startzone`, `minlevel`, `maxlevel`) VALUES (%u,%u,'%s','%s','%s',%u,%u,%u,%u,%u,%u,%u)",
ourTask.id, ourTask.duration, MakeStringSQLSafe(ourTask.title).mb_str(), MakeStringSQLSafe(ourTask.desc).mb_str(), MakeStringSQLSafe(ourTask.reward).mb_str(), ourTask.rewardid, ourTask.cashreward, ourTask.xpreward, ourTask.rewardmethod, ourTask.startzone, ourTask.level_min, ourTask.level_max);
mErrorLog->Log(eqEmuLogSQL, "%s", mQuery);
if (mysql_query(mMysql, mQuery)) {
mErrorLog->Log(eqEmuLogBoth, "MySQL Error: %s", mysql_error(mMysql));
+3 -3
View File
@@ -106,14 +106,14 @@ IF(MSVC)
SET(glmodelviewer_sources
GLModelViewer.cpp
)
SET(glmodelviewer_headers
GLModelViewer.h
)
ADD_EXECUTABLE(glmodelviewer WIN32 ${glmodelviewer_sources} ${glmodelviewer_headers})
TARGET_LINK_LIBRARIES(glmodelviewer azone_common debug ${MySQL_LIBRARY_DEBUG} optimized ${MySQL_LIBRARY_RELEASE} "opengl32.lib" "GLU32.lib" "Ws2_32.lib")
SET_TARGET_PROPERTIES(glmodelviewer PROPERTIES LINK_FLAGS_RELEASE "/OPT:REF /OPT:ICF")
SET(EXECUTABLE_OUTPUT_PATH ../../Bin)
ENDIF(MSVC)
+112 -112
View File
@@ -30,7 +30,7 @@ typedef struct _vertex{
float x;
float y;
float z;
}VERTEX;
void DrawEQModel(FileLoader *fileloader, int modnum);
@@ -43,10 +43,10 @@ HGLRC hRC=NULL;
HWND hWnd=NULL;
HINSTANCE hInstance;
bool keys[256];
bool keys[256];
char ch;
bool active=true;
GLuint base;
GLuint base;
int modelnum = 1; // The Number of the model we are currently displaying.
float angle = 0; // used to rotate the model. Updated by a timer
@@ -62,72 +62,72 @@ GLvoid BuildFont(GLvoid)
font = CreateFont(-24, 0, 0, 0, FW_BOLD, false, false, false, ANSI_CHARSET,
OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY,
FF_DONTCARE|DEFAULT_PITCH, "Courier New");
FF_DONTCARE|DEFAULT_PITCH, "Courier New");
oldfont = (HFONT)SelectObject(hDC, font);
wglUseFontBitmaps(hDC, 32, 96, base);
SelectObject(hDC, oldfont);
DeleteObject(font);
oldfont = (HFONT)SelectObject(hDC, font);
wglUseFontBitmaps(hDC, 32, 96, base);
SelectObject(hDC, oldfont);
DeleteObject(font);
}
GLvoid KillFont(GLvoid)
GLvoid KillFont(GLvoid)
{
glDeleteLists(base, 96);
glDeleteLists(base, 96);
}
GLvoid glPrint(const char *fmt, ...)
{
char text[256];
va_list ap;
va_list ap;
if (fmt == NULL) return;
if (fmt == NULL) return;
va_start(ap, fmt);
vsprintf(text, fmt, ap);
va_end(ap);
va_start(ap, fmt);
vsprintf(text, fmt, ap);
va_end(ap);
glPushAttrib(GL_LIST_BIT);
glListBase(base - 32);
glPushAttrib(GL_LIST_BIT);
glListBase(base - 32);
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
glPopAttrib();
glPopAttrib();
}
GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
{
if (height==0)height=1;
if (height==0)height=1;
glViewport(0,0,width,height);
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glLoadIdentity();
gluPerspective(60.0f,(GLfloat)width/(GLfloat)height,0.1f,12000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int InitGL(GLvoid)
int InitGL(GLvoid)
{
glShadeModel(GL_SMOOTH);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
BuildFont();
return true;
return true;
}
int DrawGLScene(char *ZoneFileName)
int DrawGLScene(char *ZoneFileName)
{
char textBuffer[100];
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glLoadIdentity();
if(mfileloader->model_data.models[modelnum])
DrawEQModel(mfileloader, modelnum);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-1.2f);
glTranslatef(0.0f,0.0f,-1.2f);
glColor3f(100.0f,0.0f,0.0f);
glRasterPos2f(-1.15f,0.56f);
@@ -139,17 +139,17 @@ int DrawGLScene(char *ZoneFileName)
else
sprintf(textBuffer," %s: Model Number %4d. Not Viewable (probably zone mesh).", ZoneFileName, modelnum);
glPrint(textBuffer);
glPrint(textBuffer);
sprintf(textBuffer," Use the + and - keys to cycle through models.");
glRasterPos2f(-1.15f,0.50f);
glPrint(textBuffer);
glPrint(textBuffer);
return true;
return true;
}
GLvoid KillGLWindow(GLvoid) {
if (hRC) {
if (hRC) {
if (!wglMakeCurrent(NULL,NULL)) {
MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
@@ -157,107 +157,107 @@ GLvoid KillGLWindow(GLvoid) {
if (!wglDeleteContext(hRC)) {
MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
}
hRC=NULL;
hRC=NULL;
}
if (hDC && !ReleaseDC(hWnd,hDC)) {
MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hDC=NULL;
hDC=NULL;
}
if (hWnd && !DestroyWindow(hWnd)) {
MessageBox(NULL,"Could Not Release hWnd.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hWnd=NULL;
hWnd=NULL;
}
if (!UnregisterClass("OpenGL",hInstance)) {
MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hInstance=NULL;
hInstance=NULL;
}
KillFont();
}
BOOL CreateGLWindow(char* title, int width, int height, int bits) {
GLuint PixelFormat;
WNDCLASS wc;
WNDCLASS wc;
DWORD dwExStyle;
DWORD dwStyle;
RECT WindowRect;
WindowRect.left=(long)0;
WindowRect.right=(long)width;
WindowRect.top=(long)0;
WindowRect.bottom=(long)height;
WindowRect.right=(long)width;
WindowRect.top=(long)0;
WindowRect.bottom=(long)height;
hInstance = GetModuleHandle(NULL);
hInstance = GetModuleHandle(NULL);
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "OpenGL";
if (!RegisterClass(&wc)) {
MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false;
return false;
}
dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
dwStyle=WS_OVERLAPPEDWINDOW;
dwStyle=WS_OVERLAPPEDWINDOW;
AdjustWindowRectEx(&WindowRect, dwStyle, false, dwExStyle);
if (!(hWnd=CreateWindowEx(dwExStyle, "OpenGL", title, dwStyle|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,
0, 0, WindowRect.right-WindowRect.left, WindowRect.bottom-WindowRect.top,
NULL, NULL, hInstance, NULL))) {
KillGLWindow();
KillGLWindow();
MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false;
return false;
}
static PIXELFORMATDESCRIPTOR pfd= {
sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA, bits, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, PFD_MAIN_PLANE,
0, 0, 0, 0
0, 0, 0, 0
};
if (!(hDC=GetDC(hWnd))) {
KillGLWindow();
KillGLWindow();
MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false;
}
if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) {
KillGLWindow();
KillGLWindow();
MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false;
return false;
}
if(!SetPixelFormat(hDC,PixelFormat,&pfd)) {
KillGLWindow();
KillGLWindow();
MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false;
return false;
}
if (!(hRC=wglCreateContext(hDC))) {
KillGLWindow();
KillGLWindow();
MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false;
return false;
}
if(!wglMakeCurrent(hDC,hRC)) {
KillGLWindow();
KillGLWindow();
MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false;
}
ShowWindow(hWnd,SW_SHOW);
SetForegroundWindow(hWnd);
SetFocus(hWnd);
SetForegroundWindow(hWnd);
SetFocus(hWnd);
ReSizeGLScene(width, height);
if (!InitGL()) {
@@ -268,17 +268,17 @@ BOOL CreateGLWindow(char* title, int width, int height, int bits) {
SetTimer(hWnd, 1, 50, (TIMERPROC) NULL);
return true;
return true;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_ACTIVATE:
if (!HIWORD(wParam)) active=true;
case WM_ACTIVATE:
if (!HIWORD(wParam)) active=true;
else
active=false;
return 0;
return 0;
case WM_SYSCOMMAND:
switch (wParam) {
case SC_SCREENSAVE:
@@ -288,19 +288,19 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
break;
case WM_CLOSE:
PostQuitMessage(0);
return 0;
return 0;
case WM_KEYDOWN:
keys[wParam] = true;
return 0;
return 0;
case WM_CHAR:
ch = wParam;
return 0;
case WM_KEYUP:
keys[wParam] = false;
return 0;
case WM_SIZE:
ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));
return 0;
case WM_KEYUP:
keys[wParam] = false;
return 0;
case WM_SIZE:
ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));
return 0;
case WM_TIMER:
angle = angle + 1;
if(angle>359) angle = 0;
@@ -327,7 +327,7 @@ void ScaleVertex(VERTEX &v, float XScale, float YScale, float ZScale) {
void DrawEQModel(FileLoader *fileloader, int modnum) {
Polygon *poly;
Vertex *verts[3];
VERTEX v1, v2, v3;
@@ -363,16 +363,16 @@ void DrawEQModel(FileLoader *fileloader, int modnum) {
if(maxz-minz>maxDimension) maxDimension = maxz-minz;
// Hack for very small models (e.g. spoons)
if(maxDimension>1)
glTranslatef(-1.5f,0.0f,-(maxDimension*2));
if(maxDimension>1)
glTranslatef(-1.5f,0.0f,-(maxDimension*2));
else
glTranslatef(-1.5f,0.0f,-10);
glTranslatef(-1.5f,0.0f,-10);
// angle is updated by a timer every 50ms.
glRotatef(angle, 1, 0, 0);
glRotatef(angle, 0, 1, 0);
glRotatef(angle, 0, 0, 1);
glBegin(GL_TRIANGLES);
for(int i = 0; i < model->poly_count; ++i) {
@@ -398,23 +398,23 @@ void DrawEQModel(FileLoader *fileloader, int modnum) {
ScaleVertex(v2, 10, 10, 10);
ScaleVertex(v3, 10, 10, 10);
}
// Assign a kind of random colour to each polygon
//glColor3b((i%50)+50,(i*5)%200,(i*10)%200);
float col = (float)(100 + ((i*10) % 150)) /250 * 1.0f;
glColor3f(col, col, col);
glVertex3f(v1.x, v1.z, v1.y);
glVertex3f(v2.x, v2.z, v2.y);
glVertex3f(v3.x, v3.z, v3.y);
}
glEnd();
}
bool ProcessZoneFile(const char *shortname) {
char bufs[96];
Archive *archive;
@@ -427,7 +427,7 @@ bool ProcessZoneFile(const char *shortname) {
archive = new PFSLoader();
fff = fopen(bufs, "rb");
if(fff != NULL)
if(fff != NULL)
FileType = S3D;
else {
sprintf(bufs, "%s.eqg", shortname);
@@ -443,15 +443,15 @@ bool ProcessZoneFile(const char *shortname) {
if(archive->Open(fff) == 0) {
MessageBox(NULL,"Unable to open container file","ERROR",MB_OK|MB_ICONEXCLAMATION);
return(false);
}
switch(FileType) {
case S3D:
case S3D:
mfileloader = new WLDLoader();
if(mfileloader->Open(NULL, (char *) shortname, archive) == 0) {
MessageBox(NULL,"Error reading WLD from container file","ERROR",MB_OK|MB_ICONEXCLAMATION);
return(false);
}
@@ -485,11 +485,11 @@ bool ProcessZoneFile(const char *shortname) {
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
MSG msg;
BOOL done=false;
FILE *fp;
FILE *fp;
for(int i=0;i<256;i++)
for(int i=0;i<256;i++)
keys[i] = false;
char* buf = (char *) new char[strlen(lpCmdLine) + 1] ;
char *pTmp = buf;
@@ -501,48 +501,48 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
}
strcpy(buf,lpCmdLine);
if(!ProcessZoneFile(buf)) return 0;
if (!CreateGLWindow("EQ Model Viewer",1280,768,16))
return 0;
return 0;
while(!done) {
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) {
if (msg.message==WM_QUIT)
done=true;
if (msg.message==WM_QUIT)
done=true;
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else {
if ((active && !DrawGLScene(buf)) || keys[VK_ESCAPE])
done=true;
if ((active && !DrawGLScene(buf)) || keys[VK_ESCAPE])
done=true;
else
SwapBuffers(hDC);
SwapBuffers(hDC);
// Use + and - to cycle through the models
if (toupper(ch)=='+') {
if(modelnum+1 < mfileloader->model_data.model_count)
if (toupper(ch)=='+') {
if(modelnum+1 < mfileloader->model_data.model_count)
modelnum++;
else
modelnum=0;
angle = 0;
}
if (toupper(ch)=='-') {
if (toupper(ch)=='-') {
if(modelnum>0)
modelnum--;
else
modelnum = mfileloader->model_data.model_count - 1;
angle = 0;
angle = 0;
}
ch = 0;
}
}
KillGLWindow();
return (msg.wParam);
return (msg.wParam);
}
+24 -24
View File
@@ -10,22 +10,22 @@
Father Nitwit's Zone to map conversion program.
Copyright (C) 2004 Father Nitwit (eqemu@8ass.com)
This thing uses code from freaku, so whatever license that comes under
is relavent, if you care.
the rest of it is GPL, even though I hate the GPL.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY except by those people which sell it, which
are required to give you total support for your newly bought product;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -76,7 +76,7 @@ long BSPCountNodes(BSP_Node *tree, long node_number);
int main(int argc, char *argv[]) {
long DefaultRegionType=RegionTypeWater;
if((argc < 2) ||
(argc > 3) ||
#ifndef WIN32
@@ -90,9 +90,9 @@ int main(int argc, char *argv[]) {
printf("\nIf -dl is omitted, untagged special regions will be marked as water\n");
return(1);
}
char bufm[250];
if(argc==3)
DefaultRegionType=RegionTypeLava;
sprintf(bufm, "%s.wtr", argv[argc-1]);
@@ -110,15 +110,15 @@ bool BuildWaterMap(const char *shortname, long DefaultRegionType) {
char bufs[96];
Archive *archive;
WLDLoader *fileloader;
long WaterOrLavaCount = 0;
long WaterOrLavaCount = 0;
//TODO: clean up a LOT of memory that the freaku code does not
sprintf(bufs, "%s.s3d", shortname);
archive = new PFSLoader();
FILE *s3df = fopen(bufs, "rb");
if(s3df == nullptr) {
// One day we may try EQG, but not today.
@@ -131,8 +131,8 @@ bool BuildWaterMap(const char *shortname, long DefaultRegionType) {
}
printf("Loading %s...\n", bufs);
fileloader = new WLDLoader();
fileloader = new WLDLoader();
if(fileloader->Open(nullptr, (char *) shortname, archive) == 0) {
printf("Error reading WLD from %s\n", bufs);
return(false);
@@ -152,7 +152,7 @@ bool BuildWaterMap(const char *shortname, long DefaultRegionType) {
case RegionTypeUnsupported: { printf("Unsupported\n"); break; }
case RegionTypeUntagged: {
printf("Untagged. We will set it to ");
if(DefaultRegionType==RegionTypeWater) {
if(DefaultRegionType==RegionTypeWater) {
printf("Water\n");
} else printf("Lava\n");
data29->region_type = DefaultRegionType;
@@ -172,7 +172,7 @@ bool BuildWaterMap(const char *shortname, long DefaultRegionType) {
}
if(tree==nullptr) {
printf("No BSP Tree. Bailing out\n");
return(false);
@@ -184,12 +184,12 @@ bool BuildWaterMap(const char *shortname, long DefaultRegionType) {
// Now we mark each leaf in the BSP tree that is in a 'special area' with what type the area is
// Water, Lava, Zoneline etc
for(int i=0; i<fileloader->fragcount; i++) {
if(fileloader->frags[i]->type == 0x29) {
data29 = (struct_Data29 *) fileloader->frags[i]->frag;
for(long j=0; j<data29->region_count; j++) {
BSPMarkRegion(tree, 1,data29->region_array[j]+1, data29->region_type);
BSPMarkRegion(tree, 1,data29->region_array[j]+1, data29->region_type);
}
}
}
@@ -268,7 +268,7 @@ long BSPCountNodes(BSP_Node *tree, long node_number) {
return(NodesInRightBranch + NodesInLeftBranch + 1);
}
long BSPFindRegion(BSP_Node *tree, long node_number, long region) {
//printf("Find Region %ld in node %ld\n", region, node_number);
@@ -281,7 +281,7 @@ long BSPFindRegion(BSP_Node *tree, long node_number, long region) {
if(tree[node_number-1].region==region) return node_number;
}
long retnode ;
if(tree[node_number-1].left!=0) {
retnode = BSPFindRegion(tree, tree[node_number-1].left, region);
@@ -303,15 +303,15 @@ long BSPFindNode(BSP_Node *tree, long node_number, float x, float y, float z) {
printf("BSP Find Node, currently in Node %ld\n", node_number);
// Are we at a leaf
if((tree[node_number-1].left==0)&&
(tree[node_number-1].right==0)) {
return tree[node_number-1].region;
}
// No, so determine which side of the split plane we are on
//
distance = (x * tree[node_number-1].normal[0]) +
(y * tree[node_number-1].normal[1]) +
(z * tree[node_number-1].normal[2]) +
@@ -341,7 +341,7 @@ long BSPFindNode(BSP_Node *tree, long node_number, float x, float y, float z) {
}
long BSPMarkRegion(BSP_Node *tree, long node_number, long region, int region_type) {
//printf("Find Region %ld in node %ld\n", region, node_number);
if(node_number<1) {
@@ -369,7 +369,7 @@ long BSPMarkRegion(BSP_Node *tree, long node_number, long region, int region_typ
return 0;
}
+24 -24
View File
@@ -38,7 +38,7 @@ using namespace std;
unsigned shorts are adequate because, worst case
even in a zone that is 6000x6000 with a small node
size of 30x30, there are only 40000 nodes.
quadrent definitions:
quad 1 (nodes[0]):
x>=0, y>=0
@@ -48,7 +48,7 @@ using namespace std;
x<0, y<0
quad 4 (nodes[3]):
x>=0, y<0
*/
#define MAX_POLY_VTX 24 //arbitrary, im too lazy to figure it out
//cut a triangle at most 6 times....
@@ -65,12 +65,12 @@ public:
GPoint();
GPoint(VERTEX &v);
GPoint(float x, float y, float z);
inline void operator()(float nx, float ny, float nz) { x = nx; y = ny; z = nz; }
GPoint cross(const GPoint &them) const;
float dot3(const GPoint &them) const;
float x;
float y;
float z;
@@ -83,13 +83,13 @@ public:
GVector();
GVector(const GPoint &them);
GVector(float x, float y, float z, float w = 1.0f);
inline void operator()(float nx, float ny, float nz, float nw) { x = nx; y = ny; z = nz; W = nw; }
float dot4(const GVector &them) const;
float dot4(const GPoint &them) const;
void normalize();
float length();
float W;
};
@@ -104,7 +104,7 @@ class QTBuilder {
public:
QTBuilder();
~QTBuilder();
bool build(const char *shortname);
bool build_eqg(const char *shortname);
void AddPlaceable(FileLoader *fileloader, char *ZoneFileName, bool ListPlaceable=false);
@@ -113,28 +113,28 @@ public:
void ScaleVertex(VERTEX &v, float XScale, float YScale, float ZScale);
void TranslateVertex(VERTEX &v, float XOffset, float YOffset, float ZOffset);
bool writeMap(const char *file);
bool FaceInNode(const QTNode *q, const FACE *f);
protected:
void AddFace(VERTEX &v1, VERTEX &v2, VERTEX &v3);
int ClipPolygon(POLYGON *poly, GVector *plane);
//dynamic during load
// vector<VERTEX> _VertexList;
vector<FACE> _FaceList;
//static once loaded
// unsigned long vertexCount;
unsigned long faceCount;
// VERTEX * vertexBlock;
FACE * faceBlock;
VERTEX tempvtx[MAX_POLY_VTX];
QTNode *_root;
static void NormalizeN(FACE *p);
#ifdef COUNT_MACTHES
@@ -151,28 +151,28 @@ class QTNode {
public:
QTNode(QTBuilder *builder, float Tminx, float Tmaxx, float Tminy, float Tmaxy);
~QTNode();
void clearNodes();
void doSplit();
void divideYourself(int depth);
void buildVertexes();
// bool writeFile(FILE *out);
unsigned long countNodes() const;
unsigned long countFacelists() const;
void fillBlocks(nodeHeader *heads, unsigned long *flist, unsigned long &hindex, unsigned long &findex);
float minx;
float miny;
float maxx;
float maxy;
unsigned long nfaces;
vector<FaceRecord> faces;
/*
quadrent definitions:
quad 1 (node1):
@@ -190,7 +190,7 @@ public:
QTNode *node4;
GPoint v[8];
bool final;
protected:
QTBuilder *builder;
};
+39 -39
View File
@@ -98,14 +98,14 @@ string GetToken(uchar *&Buffer, int &Position)
++Position;
}
++Position;
//printf("Returning %s\n", Token.c_str());
//printf("Returning %s\n", Token.c_str());
return Token;
}
int AddModelName(Content_3D *C3D, string ModelName)
{
vector<string>::iterator Iterator;
for(unsigned int i = 0; i < C3D->ModelNames.size(); ++i)
{
#ifndef WIN32
@@ -116,8 +116,8 @@ int AddModelName(Content_3D *C3D, string ModelName)
return i;
}
C3D->ModelNames.push_back(ModelName);
return C3D->ModelNames.size() - 1;
@@ -171,7 +171,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
if(filename != zone_name)
delete[] filename;
buf_start = buffer;
//TODO: Find out what these three unknowns are
@@ -341,10 +341,10 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
this->model_data.zone_model = new Zone_Model;
zm = this->model_data.zone_model;
zm->vert_count = QuadCount * TileCount * 4;
zm->poly_count = QuadCount * 2 * TileCount;
zm->verts = new Vertex *[zm->vert_count];
zm->polys = new Polygon *[zm->poly_count];
@@ -360,7 +360,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
for(int TileNumber = 0; TileNumber < TileCount; ++TileNumber)
{
int TileLNG = VARSTRUCT_DECODE_TYPE(uint32, buffer);
int TileLAT = VARSTRUCT_DECODE_TYPE(uint32, buffer);
int TileUNK = VARSTRUCT_DECODE_TYPE(uint32, buffer);
@@ -449,7 +449,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
int LayerCount = VARSTRUCT_DECODE_TYPE(uint32, buffer);
VARSTRUCT_DECODE_STRING(s, buffer);
int OverlayCount = 0;
for(int Layer = 1; Layer < LayerCount; ++Layer)
@@ -462,10 +462,10 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
{
uint8 Byte = VARSTRUCT_DECODE_TYPE(uint8, buffer);
}
++OverlayCount;
}
}
int Count1 = VARSTRUCT_DECODE_TYPE(uint32, buffer);
#ifdef DEBUGDAT
@@ -517,7 +517,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
printf("Model: %s LOC: %8.3f, %8.3f, %8.3f, ROT: %8.3f, %8.3f, %8.3f\n", ModelName, x, y, z, RotX, RotY, RotZ);
#endif
ObjectGroupEntry NewObjectGroup;
NewObjectGroup.FromTOG = false;
NewObjectGroup.y = y;
@@ -534,18 +534,18 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
// of another tile, which means based on the data for the tile we are processing, we should be unable to
// calculate the Z value for that object.
//
// By hand editing an .EQG, it was discovered that what the client appears to do is calculate the Z value
// By hand editing an .EQG, it was discovered that what the client appears to do is calculate the Z value
// for these objects by adjusting the x/y offsets by +/- (QuadsPerTile * UnitsPerVert) until the offsets
// are within this tiles boundaries and using the corresponding height values.
//
// For example, if a model has an offset of -157.5, -157.5 and QPT * UPV = 160, then the height value used
// For example, if a model has an offset of -157.5, -157.5 and QPT * UPV = 160, then the height value used
// would be the height at +2.5, +2.5 in this tile.
//
// This doesn't make a great deal of sense, but it is how the EQ graphics engine appears to do things.
//
// These 'Adjusted' x/y offsets are used only for determing the ground Z for the object. The actual placement
// of the object relative to the terrain uses the unadjusted offsets.
//
//
// For the record, as of SoF, this applies to the following zones and objects:
//
// arcstone: Model translations adjusted from -14.000, 219.000 to 146.000, 59.000
@@ -737,7 +737,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
float ZAdjust = VARSTRUCT_DECODE_TYPE(float, buffer);
#ifdef DEBUGDAT
printf("ZAdjust %8.3f\n", ZAdjust);
printf("ZAdjust %8.3f\n", ZAdjust);
#endif
char TogFileName[255];
@@ -764,7 +764,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
NewObjectGroup.TileY = TileXStart;
NewObjectGroup.TileZ = 0;
NewObjectGroup.RotX = RotX;
NewObjectGroup.RotY = RotY;
NewObjectGroup.RotZ = RotZ;
@@ -821,7 +821,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
NewObjectGroup.SubObjects.push_back(model_data.PlaceableList.size()-1);
}
if(Token == "*END_OBJECTGROUP")
{
{
#ifdef DEBUGDAT
printf("Pushing back new ObjectGroup\n");
printf(" Position : %8.3f, %8.3f, %8.3f\n", NewObjectGroup.x, NewObjectGroup.y, NewObjectGroup.z);
@@ -867,7 +867,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
float QuadVertex2X = QuadVertex1X + (QuadsPerTile * UnitsPerVertX);
float QuadVertex2Y = QuadVertex1Y;
float QuadVertex2Z = QuadVertex1Z;
float QuadVertex3X = QuadVertex2X;
float QuadVertex3Y = QuadVertex1Y + (QuadsPerTile * UnitsPerVertY);
float QuadVertex3Z = QuadVertex1Z;
@@ -875,7 +875,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
float QuadVertex4X = QuadVertex1X;
float QuadVertex4Y = QuadVertex3Y;
float QuadVertex4Z = QuadVertex1Z;
++VertexNumber;
@@ -903,7 +903,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
zm->polys[PolyNumber]->v1 = VertexNumber;
zm->polys[PolyNumber]->v2 = VertexNumber - 3;
zm->polys[PolyNumber]->v3 = VertexNumber - 2;
zm->polys[PolyNumber]->tex = -1;
zm->polys[PolyNumber]->tex = -1;
}
else
{
@@ -915,7 +915,7 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
{
if((Quad % QuadsPerTile) == 0)
++RowNumber;
// Other common values for this Byte are 0x80, 0x82. Setting them all to zero has no obvious visual
// effect.
if(Bytes[Quad] & 0x01) // Indicates Quad should not be included because an object will overlay it.
@@ -924,47 +924,47 @@ int DATLoader::Open(char *base_path, char *zone_name, Archive *archive) {
float QuadVertex1X = TileXStart + (RowNumber * UnitsPerVertX);
float QuadVertex1Y = TileYStart + (Quad % QuadsPerTile) * UnitsPerVertY;
float QuadVertex1Z = Floats[Quad + RowNumber];
float QuadVertex2X = QuadVertex1X + UnitsPerVertX;
float QuadVertex2Y = QuadVertex1Y;
float QuadVertex2Z = Floats[Quad + RowNumber + QuadsPerTile + 1];
float QuadVertex3X = QuadVertex1X + UnitsPerVertX;
float QuadVertex3Y = QuadVertex1Y + UnitsPerVertY;
float QuadVertex3Z = Floats[Quad + RowNumber + QuadsPerTile + 2];
float QuadVertex4X = QuadVertex1X;
float QuadVertex4Y = QuadVertex1Y + UnitsPerVertY;
float QuadVertex4Z = Floats[Quad + RowNumber + 1];
++VertexNumber;
zm->verts[VertexNumber++] = new Vertex(QuadVertex1Y, QuadVertex1X, QuadVertex1Z);
zm->verts[VertexNumber++] = new Vertex(QuadVertex2Y, QuadVertex2X, QuadVertex2Z);
zm->verts[VertexNumber++] = new Vertex(QuadVertex3Y, QuadVertex3X, QuadVertex3Z);
zm->verts[VertexNumber] = new Vertex(QuadVertex4Y, QuadVertex4X, QuadVertex4Z);
PolyNumber++;
zm->polys[PolyNumber] = new Polygon;
zm->polys[PolyNumber]->v1 = VertexNumber;
zm->polys[PolyNumber]->v2 = VertexNumber - 2;
zm->polys[PolyNumber]->v3 = VertexNumber - 1;
zm->polys[PolyNumber]->tex = -1;
PolyNumber++;
zm->polys[PolyNumber] = new Polygon;
zm->polys[PolyNumber]->v1 = VertexNumber;
zm->polys[PolyNumber]->v2 = VertexNumber - 3;
zm->polys[PolyNumber]->v3 = VertexNumber - 2;
zm->polys[PolyNumber]->tex = -1;
zm->polys[PolyNumber]->tex = -1;
}
}
zm->vert_count = VertexNumber + 1;
@@ -995,7 +995,7 @@ int DATLoader::Close() {
for(i = 0; i < zm->poly_count; ++i)
delete zm->polys[i];
delete[] zm->verts;
delete[] zm->polys;
+13 -13
View File
@@ -1,18 +1,18 @@
/*
List Placeable Objects in an S3D or EQG.
List Placeable Objects in an S3D or EQG.
By Derision, based on OpenEQ File Loaders by Daeken et al.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY except by those people which sell it, which
are required to give you total support for your newly bought product;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -48,29 +48,29 @@ enum EQFileType { S3D, EQG, UNKNOWN };
int main(int argc, char *argv[]) {
printf("LISTOBJ: List Placeable Objects in .S3D or .EQG zone files.\n");
if(argc != 2) {
printf("Usage: %s (zone short name)\n", argv[0]);
return(1);
}
return(ProcessZoneFile(argv[1]));
}
bool ProcessZoneFile(const char *shortname) {
char bufs[96];
Archive *archive;
FileLoader *fileloader;
Zone_Model *zm;
FILE *fff;
EQFileType FileType = UNKNOWN;
sprintf(bufs, "%s.s3d", shortname);
archive = new PFSLoader();
fff = fopen(bufs, "rb");
if(fff != nullptr)
if(fff != nullptr)
FileType = S3D;
else {
sprintf(bufs, "%s.eqg", shortname);
@@ -92,7 +92,7 @@ bool ProcessZoneFile(const char *shortname) {
bool V4Zone = false;
switch(FileType) {
case S3D:
case S3D:
fileloader = new WLDLoader();
if(fileloader->Open(nullptr, (char *) shortname, archive) == 0) {
printf("Error reading WLD from %s\n", bufs);
@@ -118,7 +118,7 @@ bool ProcessZoneFile(const char *shortname) {
zm = fileloader->model_data.zone_model;
if(!V4Zone)
ListPlaceable(fileloader, bufs);
else
@@ -137,11 +137,11 @@ void ListPlaceable(FileLoader *fileloader, char *ZoneFileName) {
fileloader->model_data.placeable[i]->x,
fileloader->model_data.placeable[i]->z,
fileloader->model_data.placeable[i]->model,
fileloader->model_data.models[fileloader->model_data.placeable[i]->model]->name);
fileloader->model_data.models[fileloader->model_data.placeable[i]->model]->name);
}
}
void ListPlaceableV4(FileLoader *fileloader, char *ZoneFileName)
{
@@ -175,7 +175,7 @@ void ListPlaceableV4(FileLoader *fileloader, char *ZoneFileName)
list<int>::iterator ModelIterator;
ModelIterator = (*Iterator).SubObjects.begin();
while(ModelIterator != (*Iterator).SubObjects.end())
{
int SubModel = (*ModelIterator);
+5 -5
View File
@@ -46,12 +46,12 @@ inline void decompress(char *p, char *p2, int len, int uLen) {
d_stream.zalloc = (alloc_func)0;
d_stream.zfree = (free_func)0;
d_stream.opaque = (voidpf)0;
d_stream.next_in = (Bytef *) p;
d_stream.avail_in = len;
d_stream.next_out = (Bytef *) p2;
d_stream.avail_out = uLen;
inflateInit(&d_stream);
status = inflate(&d_stream, Z_NO_FLUSH);
inflateEnd(&d_stream);
@@ -107,7 +107,7 @@ int PFSLoader::Open(FILE *fp)
fseek(fp, s3d_header.offset, SEEK_SET);
fread(&s3d_dir_header, sizeof(struct_directory_header), 1, fp);
this->count = s3d_dir_header.count - 1;
this->filenames = new char *[s3d_dir_header.count];
this->files = new uint32[s3d_dir_header.count - 1];
@@ -206,7 +206,7 @@ const char *PFSLoader::FindExtension(const char *ext) {
int i;
int elen = strlen(ext);
for(i = 0; i < this->count; ++i) {
int flen = strlen(this->filenames[i]);
if(flen <= elen)
@@ -234,7 +234,7 @@ int PFSLoader::GetFile(char *name, uchar **buf, int *len) {
fread(&s3d_dir, sizeof(struct_directory), 1, this->fp);
fseek(this->fp, s3d_dir.offset, SEEK_SET);
*buf = new uchar[s3d_dir.size];
inf = 0;
while(inf < (int)s3d_dir.size) {
fread(&s3d_data, sizeof(struct_data_block), 1, this->fp);
+10 -10
View File
@@ -105,17 +105,17 @@ int TERLoader::Open(char *base_path, char *zone_name, Archive *archive) {
this->model_data.zone_model = new Zone_Model;
zm = this->model_data.zone_model;
zm->vert_count = thdr->vert_count;
zm->poly_count = thdr->tri_count;
zm->verts = new Vertex *[zm->vert_count];
zm->polys = new Polygon *[zm->poly_count];
this->model_data.plac_count = 0;
this->model_data.model_count = 0;
buffer = ter_orig + thdr->list_len + sizeof(ter_header);
buffer = ter_orig + thdr->list_len + sizeof(ter_header);
if(thdr->magic[3] == 'M') buffer = buffer + 4;
#ifdef DEBUGTER
printf("Starting offset is %8X\n", buffer-ter_orig);
@@ -158,7 +158,7 @@ int TERLoader::Open(char *base_path, char *zone_name, Archive *archive) {
}
j = 0;
for(i = 0; i < (unsigned int)zm->poly_count; ++i) {
ttri = (ter_triangle *) buffer;
@@ -167,7 +167,7 @@ int TERLoader::Open(char *base_path, char *zone_name, Archive *archive) {
continue;
}
zm->polys[j] = new Polygon;
/*
/*
zm->polys[j]->v1 = ttri->v1;
zm->polys[j]->v2 = ttri->v2;
zm->polys[j]->v3 = ttri->v3;
@@ -201,15 +201,15 @@ int TERLoader::Open(char *base_path, char *zone_name, Archive *archive) {
#endif
zm->polys[j]->tex = ttri->group;
}
++j;
buffer += sizeof(ter_triangle);
}
zm->poly_count = j;
zm->tex_count = 0;
delete[] mlist;
delete [] ter_orig;
+16 -16
View File
@@ -150,11 +150,11 @@ FRAG_CONSTRUCTOR(Data21) {
}
}
FRAG_CONSTRUCTOR(Data22) {
int pos;
uchar *data6area ;
@@ -190,7 +190,7 @@ FRAG_CONSTRUCTOR(Data22) {
Frag36Ref = *((long *) (data6area+20));
//printf("Frag 36 reference?: %ld\n", *((long *) (data6area+20)));
}
@@ -198,7 +198,7 @@ FRAG_CONSTRUCTOR(Data22) {
}
FRAG_CONSTRUCTOR(Data29) {
long a,flags, numregions, lenstr;
struct_Data29 *data29 = (struct_Data29 *) malloc(sizeof(struct_Data29));
@@ -213,7 +213,7 @@ FRAG_CONSTRUCTOR(Data29) {
else if(!strncmp((char *) &wld->sHash[-frag_name], "VWA", 3)) data29->region_type = 7; // VWater ?
this->frag = (void *) data29;
flags = *buf;
numregions = *((long *)(buf+4));
data29->region_count = numregions ;
@@ -277,7 +277,7 @@ FRAG_CONSTRUCTOR(Data30) {
this->frag = (void *) tex;
return;
}
tex = (Texture *) wld->frags[ref - 1]->frag;
if(data->params1 & (1 << 1) || data->params1 & (1 << 2) || data->params1 & (1 << 3) || data->params1 & (1 << 4))
@@ -313,7 +313,7 @@ FRAG_CONSTRUCTOR(Data36) {
VertexNormal *vn;
Vert *v;
TexRef *tr;
@@ -393,7 +393,7 @@ FRAG_CONSTRUCTOR(Data36) {
for(i = 0; i < header->normalsCount; ++i) {
if(i<header->vertexCount) {
vn = (VertexNormal *) buf;
vert = model->verts[i];
@@ -419,7 +419,7 @@ FRAG_CONSTRUCTOR(Data36) {
// in the WLD loader in the stock azone, and has the effect of screwing up the normals,
// Changed to keep things consistent with prior versions.
poly->v1 = p->v1;
poly->v2 = p->v2;
poly->v2 = p->v2;
poly->v3 = p->v3;
#ifdef DEBUGWLD2
printf("Frag36: Polygon: %5d Vertices: %5d, %5d, %5d\n", i, poly->v1, poly->v2, poly->v3);
@@ -502,7 +502,7 @@ int WLDLoader::Open(char *base_path, char *zone_name, Archive *archive) {
return 0;
buffer += sizeof(struct_wld_header);
this->sHash = buffer;
decode(this->sHash, header->stringHashSize);
buffer += header->stringHashSize;
@@ -535,7 +535,7 @@ int WLDLoader::Open(char *base_path, char *zone_name, Archive *archive) {
case 0x30: FRAGMENT(Data30); break;
case 0x31: FRAGMENT(Data31); break;
case 0x36: FRAGMENT(Data36); break;
default: this->frags[i] = new Fragment; break;
}
@@ -545,7 +545,7 @@ int WLDLoader::Open(char *base_path, char *zone_name, Archive *archive) {
buffer += frag->size - 4;
}
if(!strcmp(&zone_name[strlen(zone_name) - 4], "_obj")) {
@@ -585,12 +585,12 @@ int WLDLoader::Open(char *base_path, char *zone_name, Archive *archive) {
}
zm->verts = new Vertex *[zm->vert_count];
zm->polys = new Polygon *[zm->poly_count];
vc = pc = 0;
for(i = 0; i < this->fragcount; ++i) {
if(this->frags[i]->type != 0x36)
continue;
@@ -714,7 +714,7 @@ int WLDLoader::Close() {
for(j = 0; j < zm->tex_count; ++j)
delete zm->tex[j];
delete[] zm->tex;
delete[] zm->verts;
delete[] zm->polys;
}
+1 -1
View File
@@ -33,7 +33,7 @@ class WLDLoader : public FileLoader {
public:
WLDLoader();
~WLDLoader();
virtual int Open(char *base_path, char *zone_name, Archive *archive);
virtual int Close();
+9 -9
View File
@@ -154,7 +154,7 @@ int ZonLoader::Open(char *base_path, char *zone_name, Archive *archive) {
// Derision: 23/06/08
// dranikcatacombsa.eqg has a couple of model names with a left parenthesis where there should
// be an underscore. E.g. OBP_DZ_Lbanner0)_00.MOD instead of OBP_DZ_Lbanner0__00.MOD
// This is the only zone I have seen this in, but is the reason for the follow code to replace
// This is the only zone I have seen this in, but is the reason for the follow code to replace
// the parenthesis with an underscore.
//
for(unsigned int i=0; i<strlen(model_names[ModelNumber]); i++)
@@ -173,7 +173,7 @@ int ZonLoader::Open(char *base_path, char *zone_name, Archive *archive) {
// Skip over the
// Skip over the
buffer = zon_orig + hdr->list_len + hdr->NumberOfModels * 4;
this->model_data.plac_count = hdr->obj_count - 1;
@@ -187,8 +187,8 @@ int ZonLoader::Open(char *base_path, char *zone_name, Archive *archive) {
#ifdef DEBUGPLAC
printf(" Placeable count is %d\n", this->model_data.plac_count);
#endif
this->model_data.placeable = new Placeable *[this->model_data.plac_count];
this->model_data.placeable = new Placeable *[this->model_data.plac_count];
plac = (zon_placeable *) buffer;
base[0] = plac->x;
base[1] = plac->y;
@@ -250,7 +250,7 @@ int ZonLoader::Open(char *base_path, char *zone_name, Archive *archive) {
long UnknownSize = *((long *)(buffer));
buffer = buffer + 4 + (UnknownSize * 4);
}
}
@@ -272,7 +272,7 @@ int ZonLoader::Open(char *base_path, char *zone_name, Archive *archive) {
}
// printf("Attempting to open MOD file %s\n", model_names[j]); fflush(stdout);
if(model_loaders[j].Open(nullptr, model_names[j], archive)) {
this->model_data.models[j] = new Model;
this->model_data.models[j]->vert_count = model_loaders[j].model_data.zone_model->vert_count;
this->model_data.models[j]->poly_count = model_loaders[j].model_data.zone_model->poly_count;
@@ -282,10 +282,10 @@ int ZonLoader::Open(char *base_path, char *zone_name, Archive *archive) {
this->model_data.models[j]->tex = model_loaders[j].model_data.zone_model->tex;
this->model_data.models[j]->name = new char[strlen(model_names[j])+1];
strcpy(this->model_data.models[j]->name, model_names[j]);
tex_tmp = 1;
// I think this is looking to see if the placeable model textures already exist in the zone model.
//
//
for(i = 0; i < this->model_data.models[j]->tex_count; ++i) {
tex_tmp = 1; // Derision
for(k = 0; k < this->model_data.zone_model->tex_count; ++k) {
@@ -310,7 +310,7 @@ int ZonLoader::Open(char *base_path, char *zone_name, Archive *archive) {
continue;
}
for(l = 0; l < this->model_data.models[k]->tex_count; ++l) {
if(this->model_data.models[k]->tex[l]->filenames[0] == this->model_data.models[j]->tex[i]->filenames[0] ||
if(this->model_data.models[k]->tex[l]->filenames[0] == this->model_data.models[j]->tex[i]->filenames[0] ||
(this->model_data.models[k]->tex[l]->filenames[0] &&
this->model_data.models[j]->tex[i]->filenames[0] &&
!strcmp(this->model_data.models[k]->tex[l]->filenames[0], this->model_data.models[j]->tex[i]->filenames[0]))) {
+1 -1
View File
@@ -35,7 +35,7 @@ class ZonLoader : public FileLoader {
public:
ZonLoader();
~ZonLoader();
virtual int Open(char *base_path, char *zone_name, Archive *archive);
virtual int Close();
+1 -1
View File
@@ -26,7 +26,7 @@ Zonv4Loader::~Zonv4Loader()
int Zonv4Loader::Open(char *base_path, char *zone_name, Archive *archive)
{
uchar *buffer;
int position;
int buf_len;
+1 -1
View File
@@ -31,7 +31,7 @@ class Zonv4Loader : public FileLoader {
public:
Zonv4Loader();
~Zonv4Loader();
virtual int Open(char *base_path, char *zone_name, Archive *archive);
virtual int Close();
+1 -1
View File
@@ -25,7 +25,7 @@
<!-- Sets the shared key used by zone/launcher to connect to world -->
<key>some long random string</key>
<!-- Enable and set the port for the HTTP service. Defaults are shown -->
<http port="9080" enabled="false" mimefile="mime.types" />
</world>
+15 -15
View File
@@ -3,24 +3,24 @@
# http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/extension-map.html
# for more details
application/postscript ai eps ps
application/rtf rtf
application/x-tex tex
application/x-texinfo texinfo texi
application/x-troff t tr roff
audio/basic au snd
application/postscript ai eps ps
application/rtf rtf
application/x-tex tex
application/x-texinfo texinfo texi
application/x-troff t tr roff
audio/basic au snd
audio/x-aiff aif aiff aifc
audio/x-wav wav
image/gif gif
image/ief ief
audio/x-wav wav
image/gif gif
image/ief ief
image/jpeg jpeg jpg jpe
image/tiff tiff tif
image/x-xwindowdump xwd
text/html html
image/tiff tiff tif
image/x-xwindowdump xwd
text/html html
text/plain txt c cc h
video/mpeg mpeg mpg mpe
video/quicktime qt mov
video/x-msvideo avi
video/mpeg mpeg mpg mpe
video/quicktime qt mov
video/x-msvideo avi
video/x-sgi-movie movie
text/css css
image/png png
+2 -2
View File
@@ -34,7 +34,7 @@ sub check_mq_handin {
return 1;
}
sub return_items {
sub return_items {
my $hashref = plugin::var('$itemcount');
my $client = plugin::val('$client');
my $items_returned = 0;
@@ -45,7 +45,7 @@ sub return_items {
2 => [ plugin::val('$item3'), plugin::val('$item3_charges'), plugin::val('$item3_attuned') ],
3 => [ plugin::val('$item4'), plugin::val('$item4_charges'), plugin::val('$item4_attuned') ],
);
foreach my $k (keys(%{$hashref}))
{
next if($k == 0);
+7 -7
View File
@@ -28,17 +28,17 @@
font-style: normal;
}
/* Since all menu items are links, the following can be equally important
* to your menu appearance.
/* Since all menu items are links, the following can be equally important
* to your menu appearance.
* The main thing you may want to change are the A:link and A:visited colors.
*/
*.tmenu0text A:link,*.tmenu1text A:link,*.tmenu2text A:link,*.tmenu3text A:link
*.tmenu0text A:link,*.tmenu1text A:link,*.tmenu2text A:link,*.tmenu3text A:link
{ text-decoration:none; color:#505080 }
*.tmenu0text A:visited,*.tmenu1text A:visited,*.tmenu2text A:visited,*.tmenu3text A:visited
*.tmenu0text A:visited,*.tmenu1text A:visited,*.tmenu2text A:visited,*.tmenu3text A:visited
{ text-decoration:none; color:#505080 }
*.tmenu0text A:active,*.tmenu1text A:active,*.tmenu2text A:active,*.tmenu3text A:active
*.tmenu0text A:active,*.tmenu1text A:active,*.tmenu2text A:active,*.tmenu3text A:active
{ text-decoration:none; color:#805050 }
*.tmenu0text A:hover,*.tmenu1text A:hover,*.tmenu2text A:hover,*.tmenu3text A:hover
*.tmenu0text A:hover,*.tmenu1text A:hover,*.tmenu2text A:hover,*.tmenu3text A:hover
{ text-decoration:underline; color:#FF0000 }
@@ -51,7 +51,7 @@
}
/* .tmenuSelected is used with linkSelectKey to highlight selected items */
.tmenuSelected {
.tmenuSelected {
background-color: yellow;
}
*.tmenuSelected A:link { text-decoration:none; color:#2020ff }
+52 -52
View File
@@ -12,7 +12,7 @@
// | notice, this list of conditions and the following disclaimer. |
// | o Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution.|
// | documentation and/or other materials provided with the distribution.|
// | o The names of the authors may not be used to endorse or promote |
// | products derived from this software without specific prior written |
// | permission. |
@@ -51,7 +51,7 @@
this.imgWidth = 20;
this.imgHeight = 20;
this.n = new Array();
this.branches = new Array();
this.branchStatus = new Array();
this.layerRelations = new Array();
@@ -79,10 +79,10 @@
newNode.lineImageWidth = this.imgWidth;
newNode.lineImageHeight = this.imgHeight;
this.n[newIndex] = newNode;
return this.n[newIndex];
}
TreeMenu.prototype.SetImageSize = function(w, h) {
this.imgWidth = w;
this.imgHeight = h;
@@ -96,15 +96,15 @@
var plustop = new Image; plustop.src = this.iconpath + '/plustop.gif';
var plusbottom = new Image; plusbottom.src = this.iconpath + '/plusbottom.gif';
var plus = new Image; plus.src = this.iconpath + '/plus.gif';
var minustop = new Image; minustop.src = this.iconpath + '/minustop.gif';
var minusbottom = new Image; minusbottom.src = this.iconpath + '/minusbottom.gif';
var minus = new Image; minus.src = this.iconpath + '/minus.gif';
var branchtop = new Image; branchtop.src = this.iconpath + '/branchtop.gif';
var branchbottom = new Image; branchbottom.src = this.iconpath + '/branchbottom.gif';
var branch = new Image; branch.src = this.iconpath + '/branch.gif';
var linebottom = new Image; linebottom.src = this.iconpath + '/linebottom.gif';
var line = new Image; line.src = this.iconpath + '/line.gif';
}
@@ -122,7 +122,7 @@
var modifier = '';
var layerID = '';
var parentLayerID = '';
/**
* Parse any optional arguments
*/
@@ -132,19 +132,19 @@
var expanded = arguments[3] ? arguments[3] : false;
var visibility = arguments[4] ? arguments[4] : 'inline';
var parentLayerID = arguments[5] ? arguments[5] : null;
var currentlevel = level.length;
for (var i=0; i<nodes.length; i++) {
level[currentlevel] = i+1;
layerID = this.myname + '_' + 'node_' + this.implode('_', level);
/**
* Store the child/parent relationship
*/
this.childParents[layerID] = parentLayerID;
/**
* Gif modifier
*/
@@ -155,25 +155,25 @@
} else {
modifier = "";
}
/**
* Single root branch is always expanded
*/
if (!this.doesMenu() || (parentLayerID == null && nodes.length == 1)) {
expanded = true;
} else if (nodes[i].expanded) {
expanded = true;
} else {
expanded = false;
}
/**
* Make sure visibility is correct based on parent status
*/
visibility = this.checkParentVisibility(layerID) ? visibility : 'none';
/**
* Setup branch status and build an indexed array
* of branch layer ids
@@ -182,7 +182,7 @@
this.branchStatus[layerID] = expanded;
this.branches[this.branches.length] = layerID;
}
/**
* Setup toggle relationship
*/
@@ -190,15 +190,15 @@
this.layerRelations[parentLayerID] = new Array();
}
this.layerRelations[parentLayerID][this.layerRelations[parentLayerID].length] = layerID;
/**
* Branch images
*/
var gifname = nodes[i].n.length && this.doesMenu() && nodes[i].isDynamic ? (expanded ? 'minus' : 'plus') : 'branch';
// cc 2002-11-12 variable image dimensions to line below
var iconimg = nodes[i].icon ? this.stringFormat('<img src="{0}/{1}" width="{2}" height="{3}" align="top">', this.iconpath, nodes[i].icon, nodes[i].iconImageWidth, nodes[i].iconImageHeight) : '';
/**
* Build the html to write to the document
* IMPORTANT:
@@ -210,14 +210,14 @@
var imgTag = this.stringFormat('<img src="{0}/{1}{2}.gif" width="{5}" height="{6}" align="top" border="0" name="img_{3}" {4}>', this.iconpath, gifname, modifier, layerID, onMDown, nodes[i].lineImageWidth, nodes[i].lineImageHeight);
var linkStart = nodes[i].link ? this.stringFormat('<a href="{0}" target="{1}">', nodes[i].link, this.linkTarget) : '';
var linkEnd = nodes[i].link ? '</a>' : '';
// cc 2002-11-12 All these are additions
var selectedStart = nodes[i].selected ? "<span class='"+nodes[i].selected+"'>" : '';
var selectedEnd = nodes[i].selected ? '</span>' : '';
var nobrStart = this.brOK ? '' : '<nobr>';
var nobrEnd = this.brOK ? '' : '</nobr>';
// cc 2002-11-12 modified
output = this.stringFormat('{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}<br></div>',
layerTag,
@@ -229,7 +229,7 @@
nodes[i].title,
linkEnd, selectedEnd,
nobrEnd);
/**
* Write out the HTML. Uses document.write for speed over layers and
* innerHTML. This however means no dynamic adding/removing nodes on
@@ -249,15 +249,15 @@
*/
if (parentLayerID == null && nodes.length == 1) {
var newPrepend = '';
} else if (i < (nodes.length - 1)) {
// cc 2002-11-12 Both lines, added image size parameters.
var newPrepend = prepend + this.stringFormat('<img src="{0}/line.gif" width="{1}" height="{2}" align="top">', this.iconpath, nodes[i].lineImageWidth, nodes[i].lineImageHeight);
} else {
var newPrepend = prepend + this.stringFormat('<img src="{0}/linebottom.gif" width="{1}" height="{2}" align="top">', this.iconpath, nodes[i].lineImageWidth, nodes[i].lineImageHeight);
}
this.drawMenu(nodes[i].n,
level,
newPrepend,
@@ -276,26 +276,26 @@
{
var currentDisplay = this.getLayer(layerID).style.display;
var newDisplay = (this.branchStatus[layerID] && currentDisplay == 'inline') ? 'none' : 'inline'
for (var i=0; i<this.layerRelations[layerID].length; i++) {
if (this.branchStatus[this.layerRelations[layerID][i]]) {
this.toggleBranch(this.layerRelations[layerID][i], false);
}
this.getLayer(this.layerRelations[layerID][i]).style.display = newDisplay;
}
if (updateStatus) {
this.branchStatus[layerID] = !this.branchStatus[layerID];
/**
* Persistence
*/
if (this.doesPersistence() && !arguments[2] && this.usePersistence) {
this.setExpandedStatusForCookie(layerID, this.branchStatus[layerID]);
}
// Swap image
this.swapImage(layerID);
}
@@ -307,10 +307,10 @@
TreeMenu.prototype.swapImage = function (layerID)
{
imgSrc = document.images['img_' + layerID].src;
re = /^(.*)(plus|minus)(bottom|top|single)?.gif$/
if (matches = imgSrc.match(re)) {
document.images['img_' + layerID].src = this.stringFormat('{0}{1}{2}{3}',
matches[1],
matches[2] == 'plus' ? 'minus' : 'plus',
@@ -342,10 +342,10 @@
{
if (is_ie4) {
return document.all(layerID);
} else if (document.getElementById(layerID)) {
return document.getElementById(layerID);
} else if (document.all(layerID)) {
return document.all(layerID);
}
@@ -401,7 +401,7 @@
cookieString[cookieString.length] = i;
}
}
document.cookie = 'TreeMenuBranchStatus=' + cookieString.join(':');
}
@@ -450,7 +450,7 @@
}
/**
* Checks whether a branch should be open
* Checks whether a branch should be open
* or not based on its parents' status
*/
TreeMenu.prototype.checkParentVisibility = function (layerID)
@@ -458,13 +458,13 @@
if (this.in_array(this.childParents[layerID], this.branches)
&& this.branchStatus[this.childParents[layerID]]
&& this.checkParentVisibility(this.childParents[layerID]) ) {
return true;
} else if (this.childParents[layerID] == null) {
return true;
}
return false;
}
@@ -474,13 +474,13 @@
TreeMenu.prototype.stringFormat = function (strInput)
{
var idx = 0;
for (var i=1; i<arguments.length; i++) {
while ((idx = strInput.indexOf('{' + (i - 1) + '}', idx)) != -1) { // cc 2002-11-12 fix 10<i<=100
strInput = strInput.substring(0, idx) + arguments[i] + strInput.substr(idx + (i<=10?3:4));
}
}
return strInput;
}
@@ -490,7 +490,7 @@
TreeMenu.prototype.implode = function (seperator, input)
{
var output = '';
for (var i=0; i<input.length; i++) {
if (i == 0) {
output += input[i];
@@ -498,7 +498,7 @@
output += seperator + input[i];
}
}
return output;
}
@@ -512,7 +512,7 @@
return true;
}
}
return false;
}
@@ -545,7 +545,7 @@
newNode.lineImageWidth = this.lineImageWidth;
newNode.lineImageHeight = this.lineImageHeight;
this.n[newIndex] = newNode;
return this.n[newIndex];
}
@@ -553,7 +553,7 @@
* That's the end of the tree classes. What follows is
* the browser detection code.
*/
//<!--
// Ultimate client-side JavaScript client sniff. Version 3.03
@@ -561,7 +561,7 @@
// Revised 17 May 99 to add is_nav5up and is_ie5up (see below).
// Revised 20 Dec 00 to add is_gecko and change is_nav5up to is_nav6up
// also added support for IE5.5 Opera4&5 HotJava3 AOLTV
// Revised 22 Feb 01 to correct Javascript Detection for IE 5.x, Opera 4,
// Revised 22 Feb 01 to correct Javascript Detection for IE 5.x, Opera 4,
// correct Opera 5 detection
// add support for winME and win2k
// synch with browser-type-oo.js
@@ -600,7 +600,7 @@
//
// Note: you don't want your Nav4 or IE4 code to "turn off" or
// stop working when new versions of browsers are released, so
// in conditional code forks, use is_ie5up ("IE 5.0 or greater")
// in conditional code forks, use is_ie5up ("IE 5.0 or greater")
// is_opera5up ("Opera 5.0 or greater") instead of is_ie5 or is_opera5
// to check version in code which you want to work on future
// versions.
+9 -9
View File
@@ -82,7 +82,7 @@ HTML
my $q;
$q = "SELECT name FROM account WHERE id=$accountid";
my $res2=$EQDB->query($q);
if ($res2) {
if ($res2) {
my $row5=$res2->fetch_row_hash;
print <<"CHAR";
<tr>
@@ -95,7 +95,7 @@ CHAR
print "Account Name query error.";
}
}
print "</table>";
print "</table>";
} else {
print "IP Address query error.";
}
@@ -104,9 +104,9 @@ CHAR
my $acctE = $EQDB->escape_string($acct);
my $q;
$q="select id,charname,sharedplat,status,revoked from account where name='$acctE'";
my $res=$EQDB->query($q);
if ($res) {
if ($res) {
my $row=$res->fetch_row_hash;
print <<"HTML";
<table border="1">
@@ -139,17 +139,17 @@ HTML
<td align="center">$row2->{zonename}</td>
<td align="center">
delete,
<a href="?name=$acct&action=move&charid=$row2->{id}&charname=$row2->{name}">move acct</a>,
<a href="?name=$acct&action=move&charid=$row2->{id}&charname=$row2->{name}">move acct</a>,
move zone
</td>
</tr>
CHAR
}
print "</table>";
print "</table>";
} else {
print "Char query error.";
}
$q="SELECT ip,count FROM account_ip WHERE accid=$row->{id}";
my $res3=$EQDB->query($q);
if($res3) {
@@ -166,7 +166,7 @@ HTML
<tr>
<td align="center"><a href="?name=$acct&action=listips&ipaddress=$row3->{ip}">$row3->{ip}</a></td>
<td align="center">$row3->{count}</td>
</tr>
</tr>
CHAR
}
print "</table>";
@@ -185,7 +185,7 @@ HTML
} else {
print "Query error.";
}
print "Actions: ban/unban, set status, set world password, delete chars, move chars, delete account and chars";
}
+3 -3
View File
@@ -18,7 +18,7 @@ $type = $request->get("type", "");
?>
<form method="get" action="accounts.html">
<b>Account Search:</b><br>
<input name="type" type="radio" value="account" <?if($type ne "char") { print "checked"; } ?> > Account Name &nbsp;
<input name="type" type="radio" value="account" <?if($type ne "char") { print "checked"; } ?> > Account Name &nbsp;
<input name="type" type="radio" value="char" <?if($type eq "char") { print "checked"; } ?> > Character Name
<br>
<input name="name" type="text" value="<?print $query;?>">
@@ -41,8 +41,8 @@ if ($query) {
}
my $res=$EQDB->query($q);
if ($res) {
if ($res) {
print "<table border=\"1\" cellspacing=\"2\" cellpadding=\"3\" class=\"zonelist\">\n";
print "\t<tr>\n";
if ($type eq "char") {
+1 -1
View File
@@ -12,7 +12,7 @@
my $id = $request->get("id", "0");
$EQW->ResolveBug($id);
}
$offset = $request->get("offset", "0");
$count = $EQW->CountBugs();
@bugs = $EQW->ListBugs($offset);
+1 -1
View File
@@ -37,7 +37,7 @@ if (defined($gets->{"update.x"})) {
my $i=0;
$q="select * from commands order by command";
my $res=$EQDB->query($q);
if ($res) {
if ($res) {
print "<table id=\"cmd_tab\" border=\"1\" cellspacing=\"2\" cellpadding=\"3\" class=\"zonelist\"><tr>\n";
printf "\t\t<th scope=\"col\" width=\"150\">Command</th>\n";
printf "\t\t<th scope=\"col\" width=\"70\">Access</th>\n";

Some files were not shown because too many files have changed in this diff Show More