mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-16 18:52:22 +00:00
Remove trailing whitespace
This commit is contained in:
@@ -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
@@ -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.
|
||||
-->
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -21,6 +21,6 @@ namespace EQExtractor2
|
||||
e.Cancel = true;
|
||||
this.Hide();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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.
|
||||
-->
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
@@ -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;
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
@@ -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.");
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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]))) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ Zonv4Loader::~Zonv4Loader()
|
||||
|
||||
int Zonv4Loader::Open(char *base_path, char *zone_name, Archive *archive)
|
||||
{
|
||||
|
||||
|
||||
uchar *buffer;
|
||||
int position;
|
||||
int buf_len;
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
<input name="type" type="radio" value="account" <?if($type ne "char") { print "checked"; } ?> > Account Name
|
||||
<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") {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user