mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-16 18:52:22 +00:00
svn -> git Migration
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual C# Express 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EQExtractor2", "EQExtractor2\EQExtractor2.csproj", "{621904C6-9028-439C-A0E6-1F856C88D238}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{621904C6-9028-439C-A0E6-1F856C88D238}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{621904C6-9028-439C-A0E6-1F856C88D238}.Debug|x86.Build.0 = Debug|x86
|
||||
{621904C6-9028-439C-A0E6-1F856C88D238}.Release|x86.ActiveCfg = Release|x86
|
||||
{621904C6-9028-439C-A0E6-1F856C88D238}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,310 @@
|
||||
EQExtractor2 Changelog. All changes since the 1.0 release.
|
||||
|
||||
==02/13/2013==
|
||||
Derision: Added decoder to support packet dumps from current Live client. SQL generation NOT SUPPORTED YET.
|
||||
Derision: Added boolean to patch decoders to indicate if they support SQL generation or not.
|
||||
|
||||
==02/10/2013==
|
||||
Derision: Added decoder to support packet dumps from for the current Test Server client. SQL generation not tested.
|
||||
|
||||
==01/30/2013==
|
||||
Derision: Added support in netcode for fragmented Client->Server packets.
|
||||
|
||||
==01/28/2013==
|
||||
Derision: Added decoder to support packet dumps from for the current Test Server client. SQL generation not tested.
|
||||
|
||||
==01/25/2013==
|
||||
Derision: Updated .conf files for RoF and current live client (Thanks Trevius).
|
||||
|
||||
==01/18/2013==
|
||||
Derision: Added support for January 16 2013 client (with help from posts on the SEQ boards).
|
||||
|
||||
==12/18/2012==
|
||||
Derision: Fixed crash when generating SQL for a spawn that is a destructible object that has no 'bodytype' field.
|
||||
|
||||
==12/17/2012==
|
||||
Derision: Support for December 10 2012 client.
|
||||
|
||||
==08/22/2012==
|
||||
Derision: Changed Base1/Base2 in AA dump to signed Int32
|
||||
|
||||
==08/17/2012==
|
||||
Derision: Support for August 15 2012 client.
|
||||
|
||||
==07/19/2012==
|
||||
Derision: Support for July 13 2012 client.
|
||||
|
||||
==06/30/2012==
|
||||
Derision: Support for June 25 2012 client.
|
||||
|
||||
==03/24/2012==
|
||||
Derision: Corrected spawn packet parsing per post by Razzle on ShowEQ forums.
|
||||
|
||||
==03/19/2012==
|
||||
Derision: Support for March 15 2012 client. Credit to fransick and Newby on the ShowEQ forums for the PP and most of the opcode changes.
|
||||
|
||||
==12/03/2011==
|
||||
Derision: Support for November 17 2011 client.
|
||||
Derision: Added checkbox on SQL generation form to include invisible NPCs (race 127), default is false.
|
||||
|
||||
==08/06/2011==
|
||||
Derision: Support for August 04 2011 client (currently on test).
|
||||
|
||||
==05/25/2011==
|
||||
Derision: Support for May 24 2011 client.
|
||||
|
||||
==05/16/2011==
|
||||
Derision: Fixed DumpAA option for May 12 client. There are two new uint32s in the SendAATable struct, one after Current Level and one after SpellType.
|
||||
|
||||
==05/15/2011==
|
||||
Derision: Support for May 12 2011 client. Based on info by posters on the ShowEQ forums.
|
||||
|
||||
==03/21/2011==
|
||||
Derision: Support for March 15 2011 client
|
||||
|
||||
==02/10/2011==
|
||||
Derision: Support for Feb 8 2011 client
|
||||
Derision: Corrected Identifier for Feb 8 2011 patch
|
||||
Derision: Corrected OP_SendAATable for Feb 8 2011 patch
|
||||
|
||||
==01/29/2011==
|
||||
Derision: Doors with opentype 57 are no longer automatically changed to type 58.
|
||||
Derision: Handling of opcodes with zero low-byte (e.g. 0x4200).
|
||||
Derision: Band-aid for crash when parsing OP_ZoneEntry for player with Otherdata & 0x01 set.
|
||||
|
||||
==12/25/2010==
|
||||
Derision: Heading appears to be multiplied by 2 in ZonePoint packets.
|
||||
|
||||
==12/21/2010==
|
||||
Derision: OP_SendFindableNPCS
|
||||
|
||||
==12/08/2010==
|
||||
Derision: Added support for client Dec 7 2010 14:04:53
|
||||
|
||||
==11/22/2010==
|
||||
Derision: Netcode fix highlighted by live patch supplied by robregen.
|
||||
Derision: Handled spawns with otherdata & 2 set the same as otherdata & 1 (destructable object data present), based on live patch supplied
|
||||
by robregen.
|
||||
|
||||
==10/23/2010==
|
||||
Derision: Support for 20th October Live patch.
|
||||
|
||||
==09/23/2010==
|
||||
Derision: Support for 22nd September Test Server client. Don't think I have OP_ShopEnd correct.
|
||||
|
||||
==09/17/2010==
|
||||
Derision: Passed packet direction to Explorers.
|
||||
|
||||
==09/11/2010==
|
||||
Derision: Identified a few more 'Area' IDs for the new Item slot numbering system.
|
||||
Derision: Explorer methods are now called with the packet payload as a ByteStream rather than byte[]
|
||||
|
||||
==09/10/2010==
|
||||
Derision: Addded ability to call 'Explorer' methods during Packet Dump for use while figuring out packet formats.
|
||||
|
||||
==09/08/2010==
|
||||
Derision: Moved item packet decode into a separate method.
|
||||
|
||||
==09/03/2010==
|
||||
Derision: Added support for version currently on test server (seems like a lot of opcodes have changed values).
|
||||
Derision: Fixed item Quantity field for Sep 1 patch. Fixed typo in patch .conf file
|
||||
Derision: Debug text box now resizes with it's parent form.
|
||||
|
||||
==08/29/2010==
|
||||
Derision: Added handling of unencapsulated application packets with flags which were previously being interpreted as unknown opcodes.
|
||||
(Seems to only have affects position update packets).
|
||||
|
||||
Derision: Construct grids from both OP_NPCMoveUpdate and OP_MobUpdate packets. Previously, if OP_NPCMoveUpdate packets were sent for a mob,
|
||||
i.e. high-resolution updates, any OP_MobUpdate packets for that mob where ignored.
|
||||
|
||||
Derision: Added facility in Options to specify a file to write low level netcode debug information to.
|
||||
Derision: Decoded Crypto flag from OP_SessionRequest to identify and ignore compressed UCS stream.
|
||||
Derision: Added error checking when opening netcode debug file.
|
||||
|
||||
==08/27/2010==
|
||||
Derision: Redesigned the UI. Use the menu bar, or the following shortcuts:
|
||||
|
||||
Ctrl-L Load .PCAP file
|
||||
Ctrl-S Generate SQL
|
||||
Ctrl-P Dump Packets
|
||||
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).
|
||||
|
||||
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.
|
||||
Derision: Added optional timestamps to packet dump. Added capture date to SQL output.
|
||||
Derision: Fixed crash when Debug log was closed rather than just hidden.
|
||||
|
||||
==07/16/2010==
|
||||
Derision: Replaced HexDump method with a considerably faster version.
|
||||
|
||||
==07/14/2010==
|
||||
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==
|
||||
Derision: Removed the need to duplicate certain methods when deriving a new decoder.
|
||||
Derision: Moved patch specific variable setting (PPLength, Name etc.) into the decoder constructor
|
||||
|
||||
==06/25/2010==
|
||||
Derision: Added support for current Test Server version (only PP length appears to have changed, no OPCode changes).
|
||||
|
||||
==06/12/2010==
|
||||
|
||||
Derision: Updated version to 2.0 SVN
|
||||
Derision: Fixed a bug in GenerateZoneSQL where it was using the ZoneID from the NewZone packet rather than from the PP.
|
||||
|
||||
------------------------------------------------------------------------------------------------------------
|
||||
==06/11/2010==
|
||||
|
||||
More refactoring. Should be possible to support .pcaps generated from mulitple client versions.
|
||||
Refactoring and cleanup about as done as I can be bothered to before releasing the source :)
|
||||
|
||||
Merchant items that have a quantity other than -1 (mostly player sold items) are included in the SQL, but commented out.
|
||||
|
||||
==06/10/2010==
|
||||
|
||||
More refactoring.
|
||||
|
||||
==06/08/2010==
|
||||
|
||||
More refactoring.
|
||||
Began to move code that may change with EQClient patch versions out into a separate class to allow easier handling of new patches.
|
||||
|
||||
==06/07/2010==
|
||||
|
||||
Changed GenerateSpawnsSQL to use BitConverter instead of memory streams;
|
||||
Refactored some code.
|
||||
|
||||
Initial implementation of ByteStream class.
|
||||
|
||||
==06/06/2010==
|
||||
|
||||
For doors of opentype 57 and 58 (ports), the destination zone and coordinates are populated in the doors table, if a matching
|
||||
zone point exists with the door param of that door. Doortype 57 is also changed to 58 if a matching zp is found.
|
||||
|
||||
Processing a capture file which was started while already in a zone and then zoning *should* now process packets for the
|
||||
second zone correctly.
|
||||
|
||||
Released as version 1.9
|
||||
|
||||
==06/05/2010==
|
||||
|
||||
Reset expected sequence numbers when switching streams.
|
||||
|
||||
|
||||
==06/05/2010==
|
||||
|
||||
Permalocked onto stream using C->S OP_ZoneEntry to reduce chance of multi-boxing messing the collect up.
|
||||
Version clause is appended to query when updating existing npc_types.
|
||||
Selecting the update existing npc types option will automatically uncheck all other options.
|
||||
Reworked texture/helm parsing, so hopefully NPCs should look as close as possible to live now (as close as we can without having textures for each armor slot in npc_types).
|
||||
Added 'experimental option to add texture colors to npc_types_tint so that different armor slots can have different colors.
|
||||
|
||||
Released as version 1.8
|
||||
|
||||
-------------------------------
|
||||
|
||||
==06/04/2010==
|
||||
|
||||
Fixed bug introduced in v1.6 that broke merchant SQL generation.
|
||||
Gender is now updated for existing npc_types.
|
||||
Guard races are now included when updating existing npc_types.
|
||||
Obtained the ZoneID number from the Player Profile instead of the NewZone_Struct.
|
||||
|
||||
Released as version 1.7
|
||||
|
||||
-------------------------------
|
||||
|
||||
==06/03/2010==
|
||||
|
||||
The zone long name should no longer be truncated at 32 characters.
|
||||
Apostrophes in the zone long name are escaped, i.e. Dranik's Hollows should be Dranik\'s Hollows.
|
||||
The 'Update Existing NPC Types' option is now available. If selected, the following columns:
|
||||
|
||||
texture, helmtexture, size, face, luclin_hairstyle, luclin_haircolor, luclin_eyecolor, luclin_eyecolor2, luclin_beardcolor,
|
||||
luclin_beard, drakkin_heritage, drakkin_tattoo, drakkin_details, armortint_red, armortint_green, armortint_blue,
|
||||
d_meele_texture1, d_meele_texture2, findable
|
||||
|
||||
will be updated for existing rows in the npc_types table that meet the following criteria:
|
||||
|
||||
Their ID falls within the range specified.
|
||||
The NPC is a playable race (Race <= 12 || Race == 128 || Race == 130 || Race == 330 || Race == 522)
|
||||
The NPC name is unique in the sense that only one NPC with the given first name was seen in the packet collect.
|
||||
|
||||
Released as version 1.6
|
||||
|
||||
|
||||
==06/02/2010==
|
||||
|
||||
Implemented in 1.5 but not mentioned in changelog: Player mounts no longer included in SQL.
|
||||
|
||||
----------------------
|
||||
|
||||
==06/02/2010==
|
||||
|
||||
Fixed bug which caused the first spawn to always be skipped.
|
||||
Update generated for fog_density column in zone table.
|
||||
Populated Drakkin specific fields in npc_types.
|
||||
Did some work on updating existing npc_types but left it disabled until an issue is resolved.
|
||||
|
||||
Released as version 1.5
|
||||
|
||||
==06/01/2010==
|
||||
|
||||
Changed doors and object/ground spawn extractors to use Bitconverter instead of memory streams.
|
||||
|
||||
==05/31/2010==
|
||||
|
||||
If zone config and/or zone points are selected, the generated SQL will no longer be commented out.
|
||||
---------------------------------
|
||||
|
||||
==05/31/2010==
|
||||
Populated Melee texture columns.
|
||||
For playable races, equip_chest2 is set based on the equipped chest item, if one is equipped.
|
||||
Set armour tint columns based on the colour field for the chest slot.
|
||||
|
||||
The starting IDs for database inserts are now set as variables at the top of the SQL:
|
||||
Note the Door ID has changed meaning. Instead of being the value for the id column in the doors table,
|
||||
it is now the base value for the doorid column. The id column will just use the next autoincrement id.
|
||||
|
||||
If the version number is none-zero, The base doorid = Version * 1000 and all other insert IDs are
|
||||
set to ZoneID * 1000 + (Version * 100).
|
||||
|
||||
If the version number is none-zero, deletes for npc_types and the spawn tables will only be generated from
|
||||
the starting InsertID to starting ID + 99.
|
||||
|
||||
Moved the Version NumericUpDown control to before the InsertID textboxes as changing the version will
|
||||
auto-change the InsertIDs.
|
||||
|
||||
Corrected a bug where IT10805 objects were flagged as ovens instead of brew barrels.
|
||||
Added checkboxes (default unchecked) for zone config (fog, safe point, etc) and zone points.
|
||||
|
||||
Released as version 1.4
|
||||
------------------------------------
|
||||
|
||||
==05/30/2010==
|
||||
Added ZonePoint SQL generation.
|
||||
Added generation of SQL to update zone table.
|
||||
Obtained ZoneID from the OP_NewZone packet instead of from a lookup table.
|
||||
Set findable column in npc_types based on OP_SendFindableNPCs packets from server.
|
||||
Added Version field to UI which is used to populate the version column in the doors, npc_types, spawn2, ground_spawns and object tables.
|
||||
Released as version 1.1
|
||||
-------------------------------------------
|
||||
|
||||
Added apostrophes around short name in zone UPDATE statement.
|
||||
Added Dump AA button to dump AA info.
|
||||
FogDensity is reported along with the other OP_NewZone stuff
|
||||
Released as version 1.2
|
||||
|
||||
-------------------------------------------
|
||||
Fixed bug where incorrect Insert IDs were being using for spawngroups
|
||||
Version 1.3
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,217 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{621904C6-9028-439C-A0E6-1F856C88D238}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>EQExtractor2</RootNamespace>
|
||||
<AssemblyName>EQExtractor2</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkProfile>
|
||||
</TargetFrameworkProfile>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject />
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="PacketDotNet">
|
||||
<HintPath>.\PacketDotNet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SharpPcap">
|
||||
<HintPath>.\SharpPcap.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="zlib.net">
|
||||
<HintPath>.\zlib.net.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="GenerateSQLForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GenerateSQLForm.Designer.cs">
|
||||
<DependentUpon>GenerateSQLForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="LogForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="LogForm.Designer.cs">
|
||||
<DependentUpon>LogForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="OpcodeManager.cs" />
|
||||
<Compile Include="PatchAug04-2011.cs" />
|
||||
<Compile Include="PatchAugust15-2012.cs" />
|
||||
<Compile Include="PatchDec7-2010.cs" />
|
||||
<Compile Include="PatchDecember10-2012.cs" />
|
||||
<Compile Include="PatchFeb8-2011.cs" />
|
||||
<Compile Include="PatchFebruary11-2013.cs" />
|
||||
<Compile Include="PatchGeneric.cs" />
|
||||
<Compile Include="EQApplicationLayer.cs" />
|
||||
<Compile Include="EQPacket.cs" />
|
||||
<Compile Include="EQExtractor2Form1.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="EQExtractor2Form1.Designer.cs">
|
||||
<DependentUpon>EQExtractor2Form1.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="InternalTypes.cs" />
|
||||
<Compile Include="PatchJanuary16-2013.cs" />
|
||||
<Compile Include="PatchJuly13-2012.cs" />
|
||||
<Compile Include="PatchJune25-2012.cs" />
|
||||
<Compile Include="PatchMar15-2012.cs" />
|
||||
<Compile Include="PatchMarch15-2011.cs" />
|
||||
<Compile Include="PatchMay12-2010.cs" />
|
||||
<Compile Include="PatchMay12-2011.cs" />
|
||||
<Compile Include="PatchMay24-2011.cs" />
|
||||
<Compile Include="PatchNov17-2011.cs" />
|
||||
<Compile Include="PatchOct20-2010.cs" />
|
||||
<Compile Include="PatchSoD.cs" />
|
||||
<Compile Include="PatchJuly13-2010.cs" />
|
||||
<Compile Include="PatchTestSep1-2010.cs" />
|
||||
<Compile Include="PatchTestSep22-2010.cs" />
|
||||
<Compile Include="PatchTestServerFebruary5-2013.cs" />
|
||||
<Compile Include="PatchTestServerJanuary16-2013.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="UserOptions.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UserOptions.Designer.cs">
|
||||
<DependentUpon>UserOptions.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Utils.cs" />
|
||||
<EmbeddedResource Include="EQExtractor2Form1.resx">
|
||||
<DependentUpon>EQExtractor2Form1.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GenerateSQLForm.resx">
|
||||
<DependentUpon>GenerateSQLForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="LogForm.resx">
|
||||
<DependentUpon>LogForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="UserOptions.resx">
|
||||
<DependentUpon>UserOptions.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<None Include="app.config" />
|
||||
<None Include="patch_Aug04-2011.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_August15-2012.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Dec10-2012.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Dec7-2010.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Feb11-2013.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Feb8-2011.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Jan16-2013.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_July13-2012.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_June25-2012.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Mar15-2012.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_March15-2011.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_May12-2011.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Nov17-2011.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Sep01-2010.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_May12-2010.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_Sep22-2010.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_SoD.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_TestServer-Feb5-2013.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="patch_TestServer-Jan16-2013.conf">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<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.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
@@ -0,0 +1,280 @@
|
||||
namespace EQExtractor2
|
||||
{
|
||||
partial class EQExtractor2Form1
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.InputFileOpenDialog = new System.Windows.Forms.OpenFileDialog();
|
||||
this.PacketDumpFileDialog = new System.Windows.Forms.SaveFileDialog();
|
||||
this.ProgressBar = new System.Windows.Forms.ProgressBar();
|
||||
this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);
|
||||
this.menuFile = new System.Windows.Forms.MenuItem();
|
||||
this.menuLoadPCAP = new System.Windows.Forms.MenuItem();
|
||||
this.menuGenerateSQL = new System.Windows.Forms.MenuItem();
|
||||
this.menuPacketDump = new System.Windows.Forms.MenuItem();
|
||||
this.menuDumpAAs = new System.Windows.Forms.MenuItem();
|
||||
this.menuViewPackets = new System.Windows.Forms.MenuItem();
|
||||
this.menuExit = new System.Windows.Forms.MenuItem();
|
||||
this.menuView = new System.Windows.Forms.MenuItem();
|
||||
this.menuViewDebugLog = new System.Windows.Forms.MenuItem();
|
||||
this.menuOptions = new System.Windows.Forms.MenuItem();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.ClientVersionLabel = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.PacketCountLabel = new System.Windows.Forms.Label();
|
||||
this.ZoneLabelText = new System.Windows.Forms.Label();
|
||||
this.ZoneLabel = new System.Windows.Forms.Label();
|
||||
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||
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,
|
||||
this.menuGenerateSQL,
|
||||
this.menuPacketDump,
|
||||
this.menuDumpAAs,
|
||||
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);
|
||||
this.statusStrip1.Name = "statusStrip1";
|
||||
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);
|
||||
this.Controls.Add(this.statusStrip1);
|
||||
this.Controls.Add(this.ZoneLabel);
|
||||
this.Controls.Add(this.ZoneLabelText);
|
||||
this.Controls.Add(this.PacketCountLabel);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.ClientVersionLabel);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.ProgressBar);
|
||||
this.Menu = this.mainMenu1;
|
||||
this.Name = "EQExtractor2Form1";
|
||||
this.Text = "EQExtractor2";
|
||||
this.Load += new System.EventHandler(this.EQExtractor2Form1_Load);
|
||||
this.statusStrip1.ResumeLayout(false);
|
||||
this.statusStrip1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.OpenFileDialog InputFileOpenDialog;
|
||||
private System.Windows.Forms.SaveFileDialog PacketDumpFileDialog;
|
||||
private System.Windows.Forms.ProgressBar ProgressBar;
|
||||
private System.Windows.Forms.MainMenu mainMenu1;
|
||||
private System.Windows.Forms.MenuItem menuFile;
|
||||
private System.Windows.Forms.MenuItem menuLoadPCAP;
|
||||
private System.Windows.Forms.MenuItem menuGenerateSQL;
|
||||
private System.Windows.Forms.MenuItem menuPacketDump;
|
||||
private System.Windows.Forms.MenuItem menuDumpAAs;
|
||||
private System.Windows.Forms.MenuItem menuExit;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label ClientVersionLabel;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label PacketCountLabel;
|
||||
private System.Windows.Forms.Label ZoneLabelText;
|
||||
private System.Windows.Forms.Label ZoneLabel;
|
||||
private System.Windows.Forms.MenuItem menuView;
|
||||
private System.Windows.Forms.MenuItem menuViewDebugLog;
|
||||
private System.Windows.Forms.StatusStrip statusStrip1;
|
||||
private System.Windows.Forms.ToolStripStatusLabel StatusBar;
|
||||
private System.Windows.Forms.MenuItem menuViewPackets;
|
||||
private System.Windows.Forms.MenuItem menuOptions;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,559 @@
|
||||
//
|
||||
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
|
||||
//
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using SharpPcap;
|
||||
using EQApplicationLayer;
|
||||
|
||||
namespace EQExtractor2
|
||||
{
|
||||
public partial class EQExtractor2Form1 : Form
|
||||
{
|
||||
string Version = "EQExtractor2 Version 2.6.0 SVN";
|
||||
|
||||
static int PacketsSeen = 0;
|
||||
static long BytesRead = 0;
|
||||
static long CaptureFileSize = 0;
|
||||
string ZoneName;
|
||||
string SpawnNameFilter = "";
|
||||
bool CoalesceWaypoints = true;
|
||||
|
||||
GenerateSQLForm SQLForm = new GenerateSQLForm();
|
||||
LogForm DebugLog = new LogForm();
|
||||
UserOptions Options = new UserOptions();
|
||||
|
||||
StreamWriter SQLStream;
|
||||
StreamWriter PacketDebugStream;
|
||||
|
||||
EQStreamProcessor StreamProcessor;
|
||||
|
||||
public EQExtractor2Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
DisplayUsageInfo();
|
||||
|
||||
Options.PacketDumpViewerProgram.Text = Properties.Settings.Default.TextFileViewer;
|
||||
Options.ShowDebugWindowOnStartup.Checked = Properties.Settings.Default.ShowDebugWindowOnStartup;
|
||||
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;
|
||||
|
||||
long TotalPacketSize = e.Packet.Data.Length;
|
||||
BytesRead += TotalPacketSize;
|
||||
++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();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
packet = PacketDotNet.Packet.ParsePacket(e.Packet);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var ethernetPacket = (PacketDotNet.EthernetPacket)packet;
|
||||
|
||||
var udpPacket = PacketDotNet.UdpPacket.GetEncapsulated(packet);
|
||||
|
||||
if (udpPacket != null)
|
||||
{
|
||||
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);
|
||||
|
||||
if (l > 0)
|
||||
{
|
||||
Array.Resize(ref Payload, l);
|
||||
|
||||
StreamProcessor.ProcessPacket(srcIp, dstIp, udpPacket.SourcePort, udpPacket.DestinationPort, Payload, packet.Timeval.Date);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void WriteSQL(string Message)
|
||||
{
|
||||
SQLStream.WriteLine(Message);
|
||||
}
|
||||
|
||||
public void PacketDebugLogger(string Message)
|
||||
{
|
||||
PacketDebugStream.WriteLine(Message);
|
||||
}
|
||||
|
||||
private void DisableAllControls()
|
||||
{
|
||||
foreach (Control c in this.Controls)
|
||||
{
|
||||
if ((c is Button) || (c is TextBox) || (c is MaskedTextBox) || (c is CheckBox))
|
||||
c.Enabled = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void EnableAllControls()
|
||||
{
|
||||
foreach (Control c in this.Controls)
|
||||
c.Enabled = true;
|
||||
|
||||
menuGenerateSQL.Enabled = StreamProcessor.StreamRecognised() && StreamProcessor.SupportsSQLGeneration();
|
||||
menuDumpAAs.Enabled = StreamProcessor.StreamRecognised();
|
||||
}
|
||||
|
||||
private void menuLoadPCAP_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (InputFileOpenDialog.ShowDialog() != DialogResult.OK)
|
||||
return;
|
||||
|
||||
menuGenerateSQL.Enabled = false;
|
||||
menuPacketDump.Enabled = false;
|
||||
menuViewPackets.Enabled = false;
|
||||
menuDumpAAs.Enabled = false;
|
||||
|
||||
SharpPcap.OfflinePcapDevice device;
|
||||
|
||||
try
|
||||
{
|
||||
string CapFile = InputFileOpenDialog.FileName;
|
||||
|
||||
device = new SharpPcap.OfflinePcapDevice(CapFile);
|
||||
|
||||
device.Open();
|
||||
}
|
||||
catch
|
||||
{
|
||||
StatusBar.Text = "Error: File does not exist or not in .pcap format.";
|
||||
Log("Error: File does not exist or not in .pcap format.");
|
||||
return;
|
||||
}
|
||||
|
||||
StreamProcessor = new EQStreamProcessor();
|
||||
|
||||
if (!StreamProcessor.Init(Application.StartupPath, this.Log))
|
||||
{
|
||||
Log("Fatal error initialising Stream Processor. No decoders could be initialised (mostly likely misplaced patch_XXXX.conf files.");
|
||||
StatusBar.Text = "Fatal error initialising Stream Processor. No decoders could be initialised (mostly likely misplaced patch_XXXX.conf files.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (Options.EQPacketDebugFilename.Text.Length > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
PacketDebugStream = new StreamWriter(Options.EQPacketDebugFilename.Text);
|
||||
StreamProcessor.Packets.SetDebugLogHandler(PacketDebugLogger);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Log("Failed to open netcode debug file for writing.");
|
||||
Options.EQPacketDebugFilename.Text = "";
|
||||
StreamProcessor.Packets.SetDebugLogHandler(null);
|
||||
}
|
||||
}
|
||||
else
|
||||
StreamProcessor.Packets.SetDebugLogHandler(null);
|
||||
|
||||
StatusBar.Text = "Reading packets from " + InputFileOpenDialog.FileName + ". Please wait...";
|
||||
|
||||
device.OnPacketArrival +=
|
||||
new PacketArrivalEventHandler(device_OnPacketArrival);
|
||||
|
||||
BytesRead = 0;
|
||||
PacketsSeen = 0;
|
||||
|
||||
DebugLog.ConsoleWindow.Items.Add("-- Capturing from '" + InputFileOpenDialog.FileName);
|
||||
ProgressBar.Value = 0;
|
||||
ProgressBar.Show();
|
||||
|
||||
menuFile.Enabled = false;
|
||||
|
||||
CaptureFileSize = device.FileSize;
|
||||
|
||||
device.Capture();
|
||||
|
||||
device.Close();
|
||||
|
||||
Log("End of file reached. Processed " + PacketsSeen + " packets and " + BytesRead + " bytes.");
|
||||
|
||||
ProgressBar.Hide();
|
||||
|
||||
if (Options.EQPacketDebugFilename.Text.Length > 0)
|
||||
PacketDebugStream.Close();
|
||||
|
||||
PacketCountLabel.Text = PacketsSeen.ToString();
|
||||
if (StreamProcessor.Packets.ErrorsInStream)
|
||||
Log("There were errors encountered in the packet stream. Data may be incomplete.");
|
||||
|
||||
DebugLog.ConsoleWindow.SelectedIndex = DebugLog.ConsoleWindow.Items.Count - 1;
|
||||
|
||||
menuFile.Enabled = true;
|
||||
|
||||
StreamProcessor.PCAPFileReadFinished();
|
||||
|
||||
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.");
|
||||
menuDumpAAs.Enabled = false;
|
||||
menuGenerateSQL.Enabled = false;
|
||||
ClientVersionLabel.ForeColor = Color.Red;
|
||||
ZoneLabel.Text = "";
|
||||
PacketCountLabel.Text = "";
|
||||
StatusBar.Text = "Unrecognised EQ Client Version. Press Ctrl-P to dump, or Ctrl-V to view packets.";
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
ClientVersionLabel.ForeColor = Color.Green;
|
||||
Log("Found player profile packet of the expected length (" + PPLength + ").");
|
||||
|
||||
if(StreamProcessor.SupportsSQLGeneration())
|
||||
StatusBar.Text = "Client version recognised. Press Ctrl-S to Generate SQL";
|
||||
else
|
||||
StatusBar.Text = "Client version recognised. *SQL GENERATION NOT SUPPORTED FOR THIS CLIENT*";
|
||||
}
|
||||
|
||||
ZoneName = StreamProcessor.GetZoneName();
|
||||
|
||||
UInt32 ZoneNumber = StreamProcessor.GetZoneNumber();
|
||||
|
||||
Log("Zonename is " + StreamProcessor.GetZoneName());
|
||||
|
||||
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;
|
||||
SQLForm.NPCTypesTextBox.Enabled = true;
|
||||
SQLForm.SpawnEntryTextBox.Enabled = true;
|
||||
SQLForm.SpawnGroupTextBox.Enabled = true;
|
||||
SQLForm.Spawn2TextBox.Enabled = true;
|
||||
SQLForm.GridTextBox.Enabled = true;
|
||||
SQLForm.ObjectTextBox.Enabled = true;
|
||||
SQLForm.GroundSpawnTextBox.Enabled = true;
|
||||
SQLForm.MerchantTextBox.Enabled = true;
|
||||
SQLForm.VersionSelector.Enabled = true;
|
||||
menuGenerateSQL.Enabled = StreamProcessor.SupportsSQLGeneration();
|
||||
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;
|
||||
|
||||
string SQLFile = SQLForm.FileName;
|
||||
|
||||
try
|
||||
{
|
||||
SQLStream = new StreamWriter(SQLFile);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Log("Unable to open file " + SQLFile + " for writing.");
|
||||
StatusBar.Text = "Unable to open file " + SQLFile + " for writing.";
|
||||
return;
|
||||
}
|
||||
|
||||
UInt32 SpawnDBID = Convert.ToUInt32(SQLForm.NPCTypesTextBox.Text);
|
||||
UInt32 SpawnGroupID = Convert.ToUInt32(SQLForm.SpawnGroupTextBox.Text);
|
||||
UInt32 SpawnEntryID = Convert.ToUInt32(SQLForm.SpawnEntryTextBox.Text);
|
||||
UInt32 Spawn2ID = Convert.ToUInt32(SQLForm.Spawn2TextBox.Text);
|
||||
UInt32 GridDBID = Convert.ToUInt32(SQLForm.GridTextBox.Text);
|
||||
UInt32 MerchantDBID = Convert.ToUInt32(SQLForm.MerchantTextBox.Text);
|
||||
int DoorDBID = Convert.ToInt32(SQLForm.DoorsTextBox.Text);
|
||||
UInt32 GroundSpawnDBID = Convert.ToUInt32(SQLForm.GroundSpawnTextBox.Text);
|
||||
UInt32 ObjectDBID = Convert.ToUInt32(SQLForm.ObjectTextBox.Text);
|
||||
|
||||
UInt32 ZoneID = Convert.ToUInt32(SQLForm.ZoneIDTextBox.Text);
|
||||
|
||||
SpawnNameFilter = SQLForm.SpawnNameFilter.Text;
|
||||
CoalesceWaypoints = SQLForm.CoalesceWaypoints.Checked;
|
||||
|
||||
WriteSQL("-- SQL created by " + Version);
|
||||
WriteSQL("--");
|
||||
WriteSQL("-- Using Decoder: " + StreamProcessor.GetDecoderVersion());
|
||||
WriteSQL("--");
|
||||
WriteSQL("-- Packets captured on " + StreamProcessor.GetCaptureStartTime().ToString());
|
||||
WriteSQL("--");
|
||||
WriteSQL("-- Change these variables if required");
|
||||
WriteSQL("--");
|
||||
WriteSQL("set @StartingNPCTypeID = " + SpawnDBID + ";");
|
||||
WriteSQL("set @StartingSpawnGroupID = " + SpawnGroupID + ";");
|
||||
WriteSQL("set @StartingSpawnEntryID = " + SpawnEntryID + ";");
|
||||
WriteSQL("set @StartingSpawn2ID = " + Spawn2ID + ";");
|
||||
WriteSQL("set @StartingGridID = " + GridDBID + ";");
|
||||
WriteSQL("set @StartingMerchantID = " + MerchantDBID + ";");
|
||||
WriteSQL("set @BaseDoorID = " + DoorDBID + ";");
|
||||
WriteSQL("set @StartingGroundSpawnID = " + GroundSpawnDBID + ";");
|
||||
WriteSQL("set @StartingObjectID = " + ObjectDBID + ";");
|
||||
WriteSQL("--");
|
||||
WriteSQL("--");
|
||||
|
||||
if (SQLForm.ZoneCheckBox.Checked)
|
||||
StreamProcessor.GenerateZoneSQL(this.WriteSQL);
|
||||
|
||||
if (SQLForm.ZonePointCheckBox.Checked)
|
||||
StreamProcessor.GenerateZonePointSQL(ZoneName, this.WriteSQL);
|
||||
|
||||
UInt32 SpawnVersion = (UInt32)SQLForm.VersionSelector.Value;
|
||||
|
||||
if (SQLForm.DoorCheckBox.Checked)
|
||||
{
|
||||
Log("Starting to generate SQL for Doors.");
|
||||
StreamProcessor.GenerateDoorsSQL(ZoneName, DoorDBID, SpawnVersion, this.WriteSQL);
|
||||
Log("Finished generating SQL for Doors.");
|
||||
}
|
||||
|
||||
Log("Starting to generate SQL for Spawns and/or Grids.");
|
||||
|
||||
StreamProcessor.GenerateSpawnSQL(SQLForm.SpawnCheckBox.Checked, SQLForm.GridCheckBox.Checked, SQLForm.MerchantCheckBox.Checked, ZoneName, ZoneID, SpawnVersion, SQLForm.UpdateExistingNPCTypesCheckbox.Checked, SQLForm.NPCTypesTintCheckBox.Checked, SpawnNameFilter, CoalesceWaypoints, SQLForm.InvisibleMenCheckBox.Checked, this.WriteSQL);
|
||||
|
||||
Log("Finished generating SQL for Spawns and/or Grids.");
|
||||
|
||||
if (SQLForm.GroundSpawnCheckBox.Checked || SQLForm.ObjectCheckBox.Checked)
|
||||
{
|
||||
Log("Starting to generate SQL for Ground Spawns and/or Objects.");
|
||||
|
||||
StreamProcessor.GenerateObjectSQL(SQLForm.GroundSpawnCheckBox.Checked, SQLForm.ObjectCheckBox.Checked, SpawnVersion, this.WriteSQL);
|
||||
|
||||
Log("Finished generating SQL for Ground Spawns and/or Objects.");
|
||||
}
|
||||
|
||||
StatusBar.Text = "SQL written to " + SQLFile;
|
||||
SQLStream.Close();
|
||||
}
|
||||
|
||||
private void menuPacketDump_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (PacketDumpFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
StatusBar.Text = "Packet dump in progress. Please wait...";
|
||||
Log("Packets dump in progress...");
|
||||
|
||||
DisableAllControls();
|
||||
|
||||
Application.DoEvents();
|
||||
|
||||
if (StreamProcessor.DumpPackets(PacketDumpFileDialog.FileName, Properties.Settings.Default.DumpTimeStamps))
|
||||
{
|
||||
StatusBar.Text = "Packets dumped successfully.";
|
||||
Log("Packets dumped successfully.");
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusBar.Text = "Packet dump failed.";
|
||||
Log("Packet dump failed.");
|
||||
}
|
||||
|
||||
EnableAllControls();
|
||||
}
|
||||
}
|
||||
|
||||
private void menuDumpAAs_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (PacketDumpFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
Log("AA dump in progress...");
|
||||
|
||||
DisableAllControls();
|
||||
|
||||
if (StreamProcessor.DumpAAs(PacketDumpFileDialog.FileName))
|
||||
{
|
||||
StatusBar.Text = "AAs dumped successfully.";
|
||||
Log("AAs dumped successfully.");
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusBar.Text = "AA dumped failed.";
|
||||
Log("AA dump failed.");
|
||||
}
|
||||
EnableAllControls();
|
||||
}
|
||||
}
|
||||
|
||||
private void menuExit_Click(object sender, EventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
private void menuViewDebugLog_Click(object sender, EventArgs e)
|
||||
{
|
||||
menuViewDebugLog.Checked = DebugLog.Visible;
|
||||
|
||||
if (!menuViewDebugLog.Checked)
|
||||
{
|
||||
menuViewDebugLog.Checked = true;
|
||||
ShowDebugLog();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
menuViewDebugLog.Checked = false;
|
||||
DebugLog.Hide();
|
||||
}
|
||||
}
|
||||
|
||||
private void menuViewPackets_Click(object sender, EventArgs e)
|
||||
{
|
||||
DisableAllControls();
|
||||
|
||||
Application.DoEvents();
|
||||
|
||||
string TextFileViewer = Properties.Settings.Default.TextFileViewer;
|
||||
|
||||
string TempFileName = Path.GetTempFileName();
|
||||
|
||||
if (StreamProcessor.DumpPackets(TempFileName, Properties.Settings.Default.DumpTimeStamps))
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Diagnostics.Process.Start(TextFileViewer, TempFileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
StatusBar.Text = "Unable to launch " + TextFileViewer;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusBar.Text = "Unexpected error while generating temporary file.";
|
||||
}
|
||||
EnableAllControls();
|
||||
}
|
||||
|
||||
private void EQExtractor2Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (Properties.Settings.Default.ShowDebugWindowOnStartup)
|
||||
{
|
||||
ShowDebugLog();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void DisplayUsageInfo()
|
||||
{
|
||||
#if DEBUG
|
||||
Version += " (Debug Build)";
|
||||
#else
|
||||
Version += " (Release Build)";
|
||||
#endif
|
||||
Text = Version;
|
||||
|
||||
Log(Version + " Initialised.");
|
||||
|
||||
Log("");
|
||||
Log("Instructions:");
|
||||
Log("Generate a .pcap file using Wireshark. To do this, park a character in the zone you want to collect in.");
|
||||
Log("Camp to character select. Start Wireshark capturing. Zone your character in and just sit around for a");
|
||||
Log("while, or go and inspect merchant inventories if you want to collect those. When finished, stop the");
|
||||
Log("Wireshark capture and save it (File/Save As).");
|
||||
Log("");
|
||||
Log("Load the .pcap file into this program by pressing Ctrl-L.");
|
||||
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("");
|
||||
}
|
||||
|
||||
private void menuOptions_Click(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult d = Options.ShowDialog();
|
||||
|
||||
if (d == DialogResult.OK)
|
||||
{
|
||||
Properties.Settings.Default.TextFileViewer = Options.PacketDumpViewerProgram.Text;
|
||||
Properties.Settings.Default.ShowDebugWindowOnStartup = Options.ShowDebugWindowOnStartup.Checked;
|
||||
Properties.Settings.Default.DumpTimeStamps = Options.ShowTimeStamps.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
if (Properties.Settings.Default.ShowDebugWindowOnStartup)
|
||||
{
|
||||
if (!DebugLog.Visible)
|
||||
ShowDebugLog();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DebugLog.Visible)
|
||||
{
|
||||
DebugLog.Hide();
|
||||
menuViewDebugLog.Checked = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Options.PacketDumpViewerProgram.Text = Properties.Settings.Default.TextFileViewer;
|
||||
Options.ShowDebugWindowOnStartup.Checked = Properties.Settings.Default.ShowDebugWindowOnStartup;
|
||||
Options.ShowTimeStamps.Checked = Properties.Settings.Default.DumpTimeStamps;
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowDebugLog()
|
||||
{
|
||||
DebugLog.Left = this.Location.X;
|
||||
DebugLog.Top = this.Location.Y + this.Height;
|
||||
DebugLog.Show();
|
||||
menuViewDebugLog.Checked = true;
|
||||
this.Focus();
|
||||
}
|
||||
|
||||
private void menuView_Popup(object sender, EventArgs e)
|
||||
{
|
||||
menuViewDebugLog.Checked = DebugLog.Visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
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
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<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
|
||||
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
|
||||
mimetype set.
|
||||
|
||||
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
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
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
|
||||
: 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
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="InputFileOpenDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="PacketDumpFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>308, 17</value>
|
||||
</metadata>
|
||||
<metadata name="mainMenu1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>580, 17</value>
|
||||
</metadata>
|
||||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>697, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -0,0 +1,902 @@
|
||||
//
|
||||
// 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;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using zlib;
|
||||
using MyUtils;
|
||||
using EQExtractor2.Patches;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQApplicationLayer;
|
||||
|
||||
namespace EQPacket
|
||||
{
|
||||
public enum PacketDirection {ClientToServer, ServerToClient, Unknown };
|
||||
|
||||
public class EQApplicationPacket
|
||||
{
|
||||
public EQApplicationPacket(System.Net.IPAddress srcIp, System.Net.IPAddress dstIp, ushort srcPort, ushort dstPort, int OpCode, int BufferSize, byte[] Source, int Offset, PacketDirection Direction, DateTime PacketTime)
|
||||
{
|
||||
this.OpCode = OpCode;
|
||||
|
||||
this.Direction = Direction;
|
||||
|
||||
this.PacketTime = PacketTime;
|
||||
|
||||
if (BufferSize < 0)
|
||||
{
|
||||
//Log("OPCode " + OpCode.ToString("x") + ", Buffer Size " + BufferSize + " Buffer Size < 0 !");
|
||||
return;
|
||||
}
|
||||
|
||||
Buffer = new byte[BufferSize];
|
||||
|
||||
Array.Copy(Source, Offset, Buffer, 0, BufferSize);
|
||||
}
|
||||
|
||||
public byte[] Buffer;
|
||||
public int OpCode;
|
||||
public PacketDirection Direction;
|
||||
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);
|
||||
}
|
||||
|
||||
public bool ErrorsInStream = false;
|
||||
|
||||
const UInt32 OP_SessionRequest = 0x0001;
|
||||
const UInt32 OP_SessionResponse = 0x0002;
|
||||
const UInt32 OP_Combined = 0x0003;
|
||||
const UInt32 OP_Packet = 0x0009;
|
||||
const UInt32 OP_Fragment = 0x000d;
|
||||
const UInt32 OP_OutOfOrderAck = 0x0011;
|
||||
const UInt32 OP_Ack = 0x0015;
|
||||
|
||||
private bool PermaLocked = false;
|
||||
private bool Identified = false;
|
||||
|
||||
private int[] FragmentSeq = {-1, -1};
|
||||
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;
|
||||
private int ExpectedServerSEQ = 0;
|
||||
|
||||
private System.Net.IPAddress ClientIP;
|
||||
private ushort ClientPort = 0;
|
||||
private int ExpectedClientSEQ = 0;
|
||||
|
||||
private ushort CryptoFlag = 0;
|
||||
|
||||
StreamIdentifier Identifier = null;
|
||||
|
||||
public DateTime LastPacketTime = DateTime.Now;
|
||||
|
||||
public List<EQApplicationPacket> PacketList = new List<EQApplicationPacket>();
|
||||
|
||||
LogHandler Logger = null;
|
||||
LogHandler DebugLogger = null;
|
||||
|
||||
public void SetLogHandler(LogHandler Logger)
|
||||
{
|
||||
this.Logger = Logger;
|
||||
}
|
||||
|
||||
public void SetDebugLogHandler(LogHandler Logger)
|
||||
{
|
||||
this.DebugLogger = Logger;
|
||||
DEBUG = (Logger != null);
|
||||
DUMPPACKETS = (Logger != null);
|
||||
}
|
||||
|
||||
void Log(string Message)
|
||||
{
|
||||
if(Logger != null)
|
||||
Logger(Message);
|
||||
}
|
||||
|
||||
public delegate IdentificationStatus StreamIdentifier(int OPCode, int Size, PacketDirection Direction);
|
||||
|
||||
public void SetVersionIdentifierMethod(StreamIdentifier Identifier)
|
||||
{
|
||||
this.Identifier = Identifier;
|
||||
}
|
||||
|
||||
public void AddPacket(EQApplicationPacket Packet)
|
||||
{
|
||||
#pragma warning disable 0162
|
||||
|
||||
if (DUMPPACKETS)
|
||||
{
|
||||
Debug("[OPCode: 0x" + Packet.OpCode.ToString("x") + "] [Size: " + Packet.Buffer.Length + "]");
|
||||
Debug(Utils.HexDump(Packet.Buffer));
|
||||
}
|
||||
|
||||
#pragma warning restore 0162
|
||||
|
||||
Packet.Locked = PermaLocked;
|
||||
|
||||
PacketList.Add(Packet);
|
||||
}
|
||||
|
||||
private struct CacheEntry
|
||||
{
|
||||
public int Seq;
|
||||
public PacketDirection Direction;
|
||||
public byte[] Payload;
|
||||
public DateTime PacketTime;
|
||||
public bool SubPacket;
|
||||
|
||||
public CacheEntry(int inSeq, PacketDirection inDirection, byte[] inPayload, DateTime inPacketTime, bool inSubPacket)
|
||||
{
|
||||
Seq = inSeq;
|
||||
Direction = inDirection;
|
||||
Payload = inPayload;
|
||||
PacketTime = inPacketTime;
|
||||
SubPacket = inSubPacket;
|
||||
}
|
||||
}
|
||||
|
||||
private List<CacheEntry> Cache = new List<CacheEntry>();
|
||||
|
||||
private void AddToCache(int Seq, PacketDirection Direction, byte[] Payload, DateTime PacketTime, bool SubPacket)
|
||||
{
|
||||
if(DEBUG)
|
||||
Debug("Adding packet with Seq " + Seq + " to cache.");
|
||||
|
||||
foreach(CacheEntry Existing in Cache)
|
||||
{
|
||||
if((Existing.Direction == Direction) && (Existing.Seq == Seq))
|
||||
return;
|
||||
}
|
||||
CacheEntry ce = new CacheEntry(Seq, Direction, Payload, PacketTime, SubPacket);
|
||||
|
||||
Cache.Add(ce);
|
||||
}
|
||||
|
||||
private bool CacheEmpty()
|
||||
{
|
||||
return (Cache.Count == 0);
|
||||
}
|
||||
|
||||
public void DumpCache()
|
||||
{
|
||||
Log("Cache has " + Cache.Count + " elements.");
|
||||
for (int i = 0; i < Cache.Count; ++i)
|
||||
{
|
||||
string Direction;
|
||||
|
||||
if (Cache[i].Direction == PacketDirection.ClientToServer)
|
||||
Direction = "Client to Server";
|
||||
else if (Cache[i].Direction == PacketDirection.ServerToClient)
|
||||
Direction = "Server to Client";
|
||||
else
|
||||
Direction = "Unknown";
|
||||
|
||||
Log("Cache Entry Seq " + Cache[i].Seq + ", Direction:" + Direction);
|
||||
}
|
||||
}
|
||||
|
||||
private int FindCacheEntry(int Seq, PacketDirection Direction)
|
||||
{
|
||||
for(int i = 0; i < Cache.Count; ++i)
|
||||
{
|
||||
CacheEntry ce = Cache[i];
|
||||
|
||||
if ((ce.Seq == Seq) && (ce.Direction == Direction))
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
private void ProcessCache()
|
||||
{
|
||||
int CacheElement;
|
||||
|
||||
CacheElement = FindCacheEntry(GetExpectedSeq(PacketDirection.ServerToClient), PacketDirection.ServerToClient);
|
||||
|
||||
while ( CacheElement >= 0)
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("Processing packet with seq " + Cache[CacheElement].Seq + " from cache.");
|
||||
|
||||
ProcessPacket(ServerIP, ClientIP, ServerPort, ClientPort, Cache[CacheElement].Payload, Cache[CacheElement].PacketTime, Cache[CacheElement].SubPacket, true);
|
||||
|
||||
Cache.RemoveRange(CacheElement, 1);
|
||||
|
||||
if (DEBUG)
|
||||
Debug("Cache now has " + Cache.Count + " elements.");
|
||||
|
||||
CacheElement = FindCacheEntry(GetExpectedSeq(PacketDirection.ServerToClient), PacketDirection.ServerToClient);
|
||||
}
|
||||
|
||||
CacheElement = FindCacheEntry(GetExpectedSeq(PacketDirection.ClientToServer), PacketDirection.ClientToServer);
|
||||
|
||||
while (CacheElement >= 0)
|
||||
{
|
||||
ProcessPacket(ClientIP, ServerIP, ClientPort, ServerPort, Cache[CacheElement].Payload, Cache[CacheElement].PacketTime, Cache[CacheElement].SubPacket, true);
|
||||
|
||||
Cache.RemoveRange(CacheElement, 1);
|
||||
|
||||
CacheElement = FindCacheEntry(GetExpectedSeq(PacketDirection.ServerToClient), PacketDirection.ServerToClient);
|
||||
}
|
||||
}
|
||||
|
||||
private PacketDirection GetDirection(System.Net.IPAddress srcIp, System.Net.IPAddress dstIp, ushort srcPort, ushort dstPort)
|
||||
{
|
||||
if ((srcIp.Equals(ServerIP)) && (srcPort == ServerPort) && (dstIp.Equals(ClientIP)) && (dstPort == ClientPort))
|
||||
return PacketDirection.ServerToClient;
|
||||
|
||||
if ((srcIp.Equals(ClientIP)) && (srcPort == ClientPort) && (dstIp.Equals(ServerIP)) && (dstPort == ServerPort))
|
||||
return PacketDirection.ClientToServer;
|
||||
|
||||
return PacketDirection.Unknown;
|
||||
}
|
||||
|
||||
private int GetExpectedSeq(PacketDirection Direction)
|
||||
{
|
||||
if (Direction == PacketDirection.ClientToServer)
|
||||
return ExpectedClientSEQ;
|
||||
else if (Direction == PacketDirection.ServerToClient)
|
||||
return ExpectedServerSEQ;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void AdvanceSeq(PacketDirection Direction)
|
||||
{
|
||||
if (Direction == PacketDirection.ClientToServer)
|
||||
++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;
|
||||
|
||||
UInt32 OpCode = (UInt32)(Payload[0] * 256 + Payload[1]);
|
||||
|
||||
PacketDirection Direction = GetDirection(srcIp, dstIp, srcPort, dstPort);
|
||||
|
||||
if ((Direction == PacketDirection.Unknown) && (OpCode != OP_SessionRequest))
|
||||
return;
|
||||
|
||||
// Check if this is a UCS connection and if so, skip packets until we see another OP_SessionRequest
|
||||
|
||||
if (((CryptoFlag & 4) > 0) && (OpCode != OP_SessionRequest))
|
||||
return;
|
||||
|
||||
if (Direction == PacketDirection.ClientToServer)
|
||||
Debug("Client -> Server");
|
||||
else
|
||||
Debug("Server -> Client");
|
||||
|
||||
Debug("Delta: " + (PacketTime - LastPacketTime));
|
||||
|
||||
TimeSpan Elapsed = PacketTime - LastPacketTime;
|
||||
|
||||
//if (Elapsed.Seconds > 1)
|
||||
// Debug("*** More than 1 second elapsed ***");
|
||||
|
||||
LastPacketTime = PacketTime;
|
||||
|
||||
switch (OpCode)
|
||||
{
|
||||
case OP_SessionRequest:
|
||||
{
|
||||
if (PermaLocked)
|
||||
break;
|
||||
|
||||
ClientIP = srcIp;
|
||||
|
||||
ClientPort = srcPort;
|
||||
|
||||
ServerIP = dstIp;
|
||||
|
||||
ServerPort = dstPort;
|
||||
|
||||
Log("-- Locked onto EQ Stream. Client IP " + srcIp + ":" + srcPort + " Server IP " + dstIp + ":" + dstPort);
|
||||
|
||||
ExpectedClientSEQ = 0;
|
||||
|
||||
ExpectedServerSEQ = 0;
|
||||
|
||||
CryptoFlag = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case OP_SessionResponse:
|
||||
{
|
||||
CryptoFlag = (ushort)(Payload[11] + (Payload[12] * 256));
|
||||
Log("Stream Crypto Flag is 0x" + CryptoFlag.ToString("x4"));
|
||||
break;
|
||||
}
|
||||
|
||||
case OP_Combined:
|
||||
{
|
||||
if (DEBUG)
|
||||
{
|
||||
Debug("OP_Combined, Direction " + (Direction == PacketDirection.ClientToServer ? "Client->Server" : "Server->Client"));
|
||||
Debug(Utils.HexDump(Payload));
|
||||
}
|
||||
|
||||
byte[] Uncompressed;
|
||||
|
||||
if (!SubPacket && (Payload[2] == 0x5a))
|
||||
{
|
||||
Uncompressed = DecompressPacket(Payload, 3);
|
||||
}
|
||||
else if (!SubPacket && (Payload[2] == 0xa5))
|
||||
{
|
||||
Uncompressed = new byte[Payload.Length - 3];
|
||||
|
||||
Array.Copy(Payload, 3, Uncompressed, 0, Payload.Length - 3);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Uncompressed = new byte[Payload.Length - 2];
|
||||
|
||||
Array.Copy(Payload, 2, Uncompressed, 0, Payload.Length - 2);
|
||||
}
|
||||
|
||||
int BufferPosition = 0;
|
||||
|
||||
while (BufferPosition < Uncompressed.Length - 2)
|
||||
{
|
||||
int SubPacketSize = Uncompressed[BufferPosition++];
|
||||
|
||||
byte[] NewPacket = new byte[SubPacketSize];
|
||||
|
||||
Array.Copy(Uncompressed, BufferPosition, NewPacket, 0, SubPacketSize);
|
||||
|
||||
BufferPosition += SubPacketSize;
|
||||
|
||||
ProcessPacket(srcIp, dstIp, srcPort, dstPort, NewPacket, PacketTime, true, Cached);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case OP_Packet:
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("OP_Packet, Subpacket = "+ SubPacket);
|
||||
|
||||
byte[] Uncompressed;
|
||||
|
||||
if (!SubPacket && (Payload[2] == 0x5a))
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("Compressed");
|
||||
|
||||
Uncompressed = DecompressPacket(Payload, 3);
|
||||
}
|
||||
else if (!SubPacket && (Payload[2] == 0xa5))
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("0xa5");
|
||||
|
||||
Uncompressed = new byte[Payload.Length - 5];
|
||||
|
||||
Array.Copy(Payload, 3, Uncompressed, 0, Payload.Length - 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("Uncompressed");
|
||||
|
||||
Uncompressed = new byte[Payload.Length - 2];
|
||||
|
||||
Array.Copy(Payload, 2, Uncompressed, 0, Payload.Length - 2);
|
||||
}
|
||||
if (DEBUG)
|
||||
{
|
||||
//Debug("Raw payload is:");
|
||||
//Debug(Utils.HexDump(Payload));
|
||||
//Debug("Uncompressed data is:");
|
||||
//Debug(Utils.HexDump(Uncompressed));
|
||||
}
|
||||
|
||||
int Seq = Uncompressed[0] * 256 + Uncompressed[1];
|
||||
Debug("Seq is " + Seq + " Expected " + GetExpectedSeq(Direction));
|
||||
if (Seq != GetExpectedSeq(Direction))
|
||||
{
|
||||
if (Seq > GetExpectedSeq(Direction))
|
||||
{
|
||||
if ((Seq - GetExpectedSeq(Direction) < 1000))
|
||||
AddToCache(Seq, Direction, Payload, PacketTime, SubPacket);
|
||||
else
|
||||
{
|
||||
Log("Giving up on seeing expected fragment.");
|
||||
|
||||
ErrorsInStream = true;
|
||||
|
||||
FragmentSeq[(int)Direction] = -1;
|
||||
|
||||
AdvanceSeq(Direction);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
else
|
||||
AdvanceSeq(Direction);
|
||||
|
||||
|
||||
bool Multi = ((Uncompressed[2] == 0x00) && (Uncompressed[3] == 0x19));
|
||||
|
||||
if (Multi)
|
||||
{
|
||||
int BufferPosition = 4;
|
||||
|
||||
while (BufferPosition < (Uncompressed.Length - 2))
|
||||
{
|
||||
int Size = 0;
|
||||
|
||||
if (Uncompressed[BufferPosition] == 0xff)
|
||||
{
|
||||
if (Uncompressed[BufferPosition + 1] == 0x01)
|
||||
Size = 256 + Uncompressed[BufferPosition + 2];
|
||||
else
|
||||
Size = Uncompressed[BufferPosition + 2];
|
||||
|
||||
BufferPosition += 3;
|
||||
}
|
||||
else
|
||||
Size = Uncompressed[BufferPosition++];
|
||||
|
||||
int OpCodeBytes = 2;
|
||||
int AppOpCode = Uncompressed[BufferPosition++];
|
||||
|
||||
if (AppOpCode == 0)
|
||||
{
|
||||
++BufferPosition;
|
||||
OpCodeBytes = 3;
|
||||
}
|
||||
|
||||
AppOpCode += (Uncompressed[BufferPosition++] * 256);
|
||||
|
||||
ProcessAppPacket(srcIp, dstIp, srcPort, dstPort, AppOpCode, Size - OpCodeBytes, Uncompressed, BufferPosition, Direction, PacketTime);
|
||||
|
||||
BufferPosition = BufferPosition + (Size - OpCodeBytes);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int BufferPosition = 2;
|
||||
|
||||
int OpCodeBytes = 2;
|
||||
int AppOpCode = Uncompressed[BufferPosition++];
|
||||
|
||||
if (AppOpCode == 0)
|
||||
{
|
||||
++BufferPosition;
|
||||
OpCodeBytes = 3;
|
||||
}
|
||||
|
||||
AppOpCode += (Uncompressed[BufferPosition++] * 256);
|
||||
|
||||
ProcessAppPacket(srcIp, dstIp, srcPort, dstPort, AppOpCode, Uncompressed.Length - (2 + OpCodeBytes), Uncompressed, BufferPosition, Direction, PacketTime);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case OP_Fragment:
|
||||
{
|
||||
if (DEBUG)
|
||||
{
|
||||
Debug("OP_Fragment");
|
||||
Debug("Raw Data");
|
||||
Debug(Utils.HexDump(Payload));
|
||||
}
|
||||
|
||||
byte[] Uncompressed;
|
||||
|
||||
if (!SubPacket && (Payload[2] == 0x5a))
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("Compressed");
|
||||
|
||||
Uncompressed = DecompressPacket(Payload, 3);
|
||||
}
|
||||
else if (!SubPacket && (Payload[2] == 0xa5))
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("0xa5");
|
||||
|
||||
Uncompressed = new byte[Payload.Length - 5];
|
||||
|
||||
Array.Copy(Payload, 3, Uncompressed, 0, Payload.Length - 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
Uncompressed = new byte[Payload.Length - 2];
|
||||
|
||||
Array.Copy(Payload, 2, Uncompressed, 0, Payload.Length - 2);
|
||||
}
|
||||
if (DEBUG)
|
||||
{
|
||||
Debug("Uncompressed data.");
|
||||
Debug(Utils.HexDump(Uncompressed));
|
||||
}
|
||||
|
||||
if (FragmentSeq[(int)Direction] == -1)
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("First fragment.");
|
||||
|
||||
FragmentSeq[(int)Direction] = (Uncompressed[0] * 256) + Uncompressed[1];
|
||||
|
||||
if (DEBUG)
|
||||
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)
|
||||
AddToCache(FragmentSeq[(int)Direction], Direction, Payload, PacketTime, SubPacket);
|
||||
else
|
||||
{
|
||||
Log("Giving up on seeing expected fragment.");
|
||||
|
||||
ErrorsInStream = true;
|
||||
|
||||
FragmentSeq[(int)Direction] = -1;
|
||||
|
||||
AdvanceSeq(Direction);
|
||||
}
|
||||
}
|
||||
FragmentSeq[(int)Direction] = -1;
|
||||
|
||||
break;
|
||||
}
|
||||
else
|
||||
AdvanceSeq(Direction);
|
||||
|
||||
FragmentedPacketSize[(int)Direction] = Uncompressed[2] * 0x1000000 + Uncompressed[3] * 0x10000 + Uncompressed[4] * 0x100 + Uncompressed[5];
|
||||
|
||||
if((FragmentedPacketSize[(int)Direction] == 0) || (FragmentedPacketSize[(int)Direction] > 1000000))
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("Got a fragmented packet of size " + FragmentedPacketSize[(int)Direction] + ". Discarding.");
|
||||
|
||||
ErrorsInStream = true;
|
||||
|
||||
FragmentSeq[(int)Direction] = -1;
|
||||
|
||||
break;
|
||||
}
|
||||
FragmentedBytesCollected[(int)Direction] = Uncompressed.Length - 6;
|
||||
|
||||
if (DEBUG)
|
||||
Debug("Total packet size is " + FragmentedPacketSize[(int)Direction]);
|
||||
|
||||
if((Uncompressed.Length - 6) > FragmentedPacketSize[(int)Direction])
|
||||
{
|
||||
Log("Mangled fragment.");
|
||||
|
||||
ErrorsInStream = true;
|
||||
|
||||
FragmentSeq[(int)Direction] = -1;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
Fragments[(int)Direction] = new byte[FragmentedPacketSize[(int)Direction]];
|
||||
|
||||
if (DEBUG)
|
||||
Debug("Copying " + (Uncompressed.Length - 6) + " bytes to Fragments starting at index 0");
|
||||
|
||||
Array.Copy(Uncompressed, 6, Fragments[(int)Direction], 0, Uncompressed.Length - 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
int LastSeq = FragmentSeq[(int)Direction];
|
||||
|
||||
FragmentSeq[(int)Direction] = (Uncompressed[0] * 256) + Uncompressed[1];
|
||||
|
||||
if (DEBUG)
|
||||
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)
|
||||
AddToCache(FragmentSeq[(int)Direction], Direction, Payload, PacketTime, SubPacket);
|
||||
else
|
||||
{
|
||||
Log("Giving up on seeing expected fragment.");
|
||||
|
||||
ErrorsInStream = true;
|
||||
|
||||
AdvanceSeq(Direction);
|
||||
|
||||
FragmentSeq[(int)Direction] = -1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
AdvanceSeq(Direction);
|
||||
|
||||
if (DEBUG)
|
||||
Debug("Copying " + (Uncompressed.Length - 2) + " bytes from Uncompressed to Fragments starting at " + FragmentedBytesCollected[(int)Direction]);
|
||||
|
||||
if ((Uncompressed.Length - 2) > (Fragments[(int)Direction].Length - FragmentedBytesCollected[(int)Direction]))
|
||||
{
|
||||
Log("Mangled fragment. Discarding.");
|
||||
|
||||
ErrorsInStream = true;
|
||||
|
||||
FragmentSeq[(int)Direction] = -1;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
Array.Copy(Uncompressed, 2, Fragments[(int)Direction], FragmentedBytesCollected[(int)Direction], Uncompressed.Length - 2);
|
||||
|
||||
FragmentedBytesCollected[(int)Direction] += Uncompressed.Length - 2;
|
||||
|
||||
if (FragmentedBytesCollected[(int)Direction] == FragmentedPacketSize[(int)Direction])
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("Got whole packet.");
|
||||
|
||||
if ((Fragments[(int)Direction][0] == 0x00) && (Fragments[1][(int)Direction] == 0x019))
|
||||
{
|
||||
if (DEBUG)
|
||||
Debug("Multi packet.");
|
||||
|
||||
int BufferPosition = 2;
|
||||
|
||||
while (BufferPosition < Fragments[(int)Direction].Length)
|
||||
{
|
||||
int Size = 0;
|
||||
|
||||
if (Fragments[(int)Direction][BufferPosition] == 0xff)
|
||||
{
|
||||
if (Fragments[(int)Direction][BufferPosition + 1] == 0x01)
|
||||
Size = 256 + Fragments[(int)Direction][BufferPosition + 2];
|
||||
else
|
||||
Size = Fragments[(int)Direction][BufferPosition + 2];
|
||||
|
||||
BufferPosition += 3;
|
||||
}
|
||||
else
|
||||
Size = Fragments[(int)Direction][BufferPosition++];
|
||||
|
||||
int OpCodeBytes = 2;
|
||||
int AppOpCode = Fragments[(int)Direction][BufferPosition++];
|
||||
|
||||
if (AppOpCode == 0)
|
||||
{
|
||||
++BufferPosition;
|
||||
OpCodeBytes = 3;
|
||||
}
|
||||
|
||||
AppOpCode += (Fragments[(int)Direction][BufferPosition++] * 256);
|
||||
|
||||
ProcessAppPacket(srcIp, dstIp, srcPort, dstPort, AppOpCode, Size - OpCodeBytes, Fragments[(int)Direction], BufferPosition, Direction, PacketTime);
|
||||
|
||||
BufferPosition = BufferPosition + (Size - OpCodeBytes);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int BufferPosition = 0;
|
||||
int OpCodeBytes = 2;
|
||||
int AppOpCode = Fragments[(int)Direction][BufferPosition++];
|
||||
|
||||
if (AppOpCode == 0)
|
||||
{
|
||||
++BufferPosition;
|
||||
OpCodeBytes = 3;
|
||||
}
|
||||
|
||||
AppOpCode += (Fragments[(int)Direction][BufferPosition++] * 256);
|
||||
|
||||
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)
|
||||
Debug("Reseting FragmentSeq to -1");
|
||||
|
||||
FragmentSeq[(int)Direction] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case OP_OutOfOrderAck:
|
||||
{
|
||||
int Seq = Payload[2] * 256 + Payload[3];
|
||||
|
||||
if (DEBUG)
|
||||
Debug("OP_OutOfOrder " + Seq);
|
||||
|
||||
break;
|
||||
}
|
||||
case OP_Ack:
|
||||
{
|
||||
int Seq;
|
||||
|
||||
if(Payload.Length > 4)
|
||||
Seq = Payload[3] * 256 + Payload[4];
|
||||
else
|
||||
Seq = Payload[2] * 256 + Payload[3];
|
||||
|
||||
string DirectionString;
|
||||
|
||||
if(Direction == PacketDirection.ClientToServer)
|
||||
DirectionString = "Client to Server";
|
||||
else
|
||||
DirectionString = "Server to Client";
|
||||
|
||||
if (DEBUG)
|
||||
{
|
||||
Debug("OP_Ack, Seq " + Seq + " " + DirectionString);
|
||||
Debug(Utils.HexDump(Payload));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
if (OpCode > 0xff)
|
||||
{
|
||||
if (DEBUG)
|
||||
{
|
||||
Debug("Unencapsulated EQ Application OpCode. Subpacket is " + SubPacket.ToString());
|
||||
Debug("--- Raw payload ---");
|
||||
Debug(Utils.HexDump(Payload));
|
||||
Debug("-------------------");
|
||||
}
|
||||
|
||||
int AppOpCode;
|
||||
byte[] NewPacket;
|
||||
|
||||
if (SubPacket)
|
||||
{
|
||||
AppOpCode = Payload[1] * 256 + Payload[0];
|
||||
|
||||
NewPacket = new byte[Payload.Length - 2];
|
||||
|
||||
Array.Copy(Payload, 2, NewPacket, 0, Payload.Length - 2);
|
||||
}
|
||||
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)
|
||||
{
|
||||
if(DEBUG)
|
||||
Debug("Compressed unencapsulated packet.");
|
||||
|
||||
byte[] NewPayload = new byte[Payload.Length - 4];
|
||||
Array.Copy(Payload, 2, NewPayload, 0, Payload.Length - 4);
|
||||
byte[] Uncompressed = DecompressPacket(NewPayload, 0);
|
||||
|
||||
if (DEBUG)
|
||||
{
|
||||
Debug("Uncompressed Payload:");
|
||||
Debug(Utils.HexDump(Uncompressed));
|
||||
}
|
||||
// Opcode is first byte of compressed payload and first byte of uncompressed data
|
||||
AppOpCode = Uncompressed[0] * 256 + Payload[0];
|
||||
NewPacket = new byte[Uncompressed.Length - 1];
|
||||
Array.Copy(Uncompressed, 1, NewPacket, 0, Uncompressed.Length - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
AppOpCode = Payload[2] * 256 + Payload[0];
|
||||
|
||||
NewPacket = new byte[Payload.Length - 5];
|
||||
|
||||
Array.Copy(Payload, 3, NewPacket, 0, Payload.Length - 5);
|
||||
}
|
||||
}
|
||||
|
||||
ProcessAppPacket(srcIp, dstIp, srcPort, dstPort, AppOpCode, NewPacket.Length, NewPacket, 0, Direction, PacketTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DEBUG)
|
||||
{
|
||||
Debug("OP_Unknown (" + OpCode.ToString("x") + ")");
|
||||
Debug(Utils.HexDump(Payload));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!Cached && !CacheEmpty())
|
||||
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)
|
||||
{
|
||||
EQApplicationPacket app = new EQApplicationPacket(srcIp, dstIp, srcPort, dstPort, InOpCode, BufferSize, Source, Offset, Direction, PacketTime);
|
||||
|
||||
if (!Identified)
|
||||
{
|
||||
IdentificationStatus TempStatus = Identifier(InOpCode, BufferSize, Direction);
|
||||
|
||||
if (!PermaLocked && (TempStatus > IdentificationStatus.No))
|
||||
{
|
||||
Log("-- Permalocking to this stream.");
|
||||
PermaLocked = true;
|
||||
}
|
||||
Identified = (TempStatus == IdentificationStatus.Yes);
|
||||
}
|
||||
AddPacket(app);
|
||||
}
|
||||
|
||||
public byte[] DecompressPacket(byte[] Payload, int Offset)
|
||||
{
|
||||
MemoryStream ms = new MemoryStream(Payload.GetUpperBound(0) - Offset);
|
||||
|
||||
ms.Write(Payload, Offset, Payload.GetUpperBound(0) - Offset);
|
||||
|
||||
ms.Seek(0, System.IO.SeekOrigin.Begin);
|
||||
|
||||
ZInputStream zs = new ZInputStream(ms);
|
||||
|
||||
int UncompressedSize;
|
||||
|
||||
byte[] Uncompressed = new byte[4096];
|
||||
|
||||
try
|
||||
{
|
||||
UncompressedSize = zs.read(Uncompressed, 0, 4096);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if(DEBUG)
|
||||
Debug("DECOMPRESSION FAILURE");
|
||||
|
||||
Array.Copy(Payload, Offset - 1, Uncompressed, 0, Payload.Length - (Offset - 1));
|
||||
|
||||
UncompressedSize = Payload.Length - (Offset - 1);
|
||||
}
|
||||
|
||||
zs.Close();
|
||||
|
||||
zs.Dispose();
|
||||
|
||||
ms.Close();
|
||||
|
||||
ms.Dispose();
|
||||
|
||||
Array.Resize(ref Uncompressed, UncompressedSize);
|
||||
|
||||
return Uncompressed;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,625 @@
|
||||
namespace EQExtractor2
|
||||
{
|
||||
partial class GenerateSQLForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.MerchantTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.MerchantLabel = new System.Windows.Forms.Label();
|
||||
this.GroundSpawnTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.GroundSpawnLabel = new System.Windows.Forms.Label();
|
||||
this.ObjectTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.GridTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.GridLabel = new System.Windows.Forms.Label();
|
||||
this.Spawn2TextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.Spawn2Label = new System.Windows.Forms.Label();
|
||||
this.SpawnEntryTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.SpawnEntryLabel = new System.Windows.Forms.Label();
|
||||
this.SpawnGroupTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.SpawnGroupLabel = new System.Windows.Forms.Label();
|
||||
this.NPCTypesTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.DoorsTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.DoorsLabel = new System.Windows.Forms.Label();
|
||||
this.VersionSelector = new System.Windows.Forms.NumericUpDown();
|
||||
this.VersionLabel = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.ZoneIDTextBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.NPCTypesTintCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.UpdateExistingNPCTypesCheckbox = new System.Windows.Forms.CheckBox();
|
||||
this.ZonePointCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.ZoneCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.MerchantCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.GroundSpawnCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.ObjectCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.GridCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.SpawnCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.DoorCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.SQLFileDialog = new System.Windows.Forms.SaveFileDialog();
|
||||
this.GenerateSQLButton = new System.Windows.Forms.Button();
|
||||
this.SQLCancelButton = new System.Windows.Forms.Button();
|
||||
this.MiscOptions = new System.Windows.Forms.GroupBox();
|
||||
this.SpawnNameFilter = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.CoalesceWaypoints = new System.Windows.Forms.CheckBox();
|
||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.InvisibleMenCheckBox = new System.Windows.Forms.CheckBox();
|
||||
this.groupBox1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.VersionSelector)).BeginInit();
|
||||
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);
|
||||
this.groupBox1.Controls.Add(this.GroundSpawnLabel);
|
||||
this.groupBox1.Controls.Add(this.ObjectTextBox);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
this.groupBox1.Controls.Add(this.GridTextBox);
|
||||
this.groupBox1.Controls.Add(this.GridLabel);
|
||||
this.groupBox1.Controls.Add(this.Spawn2TextBox);
|
||||
this.groupBox1.Controls.Add(this.Spawn2Label);
|
||||
this.groupBox1.Controls.Add(this.SpawnEntryTextBox);
|
||||
this.groupBox1.Controls.Add(this.SpawnEntryLabel);
|
||||
this.groupBox1.Controls.Add(this.SpawnGroupTextBox);
|
||||
this.groupBox1.Controls.Add(this.SpawnGroupLabel);
|
||||
this.groupBox1.Controls.Add(this.NPCTypesTextBox);
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.DoorsTextBox);
|
||||
this.groupBox1.Controls.Add(this.DoorsLabel);
|
||||
this.groupBox1.Controls.Add(this.VersionSelector);
|
||||
this.groupBox1.Controls.Add(this.VersionLabel);
|
||||
this.groupBox1.Controls.Add(this.label4);
|
||||
this.groupBox1.Controls.Add(this.ZoneIDTextBox);
|
||||
this.groupBox1.Location = new System.Drawing.Point(12, 12);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(262, 345);
|
||||
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);
|
||||
this.MerchantTextBox.Mask = "0000000000";
|
||||
this.MerchantTextBox.Name = "MerchantTextBox";
|
||||
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);
|
||||
this.GroundSpawnTextBox.Mask = "0000000000";
|
||||
this.GroundSpawnTextBox.Name = "GroundSpawnTextBox";
|
||||
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);
|
||||
this.ObjectTextBox.Mask = "0000000000";
|
||||
this.ObjectTextBox.Name = "ObjectTextBox";
|
||||
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);
|
||||
this.GridTextBox.Mask = "0000000000";
|
||||
this.GridTextBox.Name = "GridTextBox";
|
||||
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);
|
||||
this.Spawn2TextBox.Mask = "0000000000";
|
||||
this.Spawn2TextBox.Name = "Spawn2TextBox";
|
||||
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);
|
||||
this.SpawnEntryTextBox.Mask = "0000000000";
|
||||
this.SpawnEntryTextBox.Name = "SpawnEntryTextBox";
|
||||
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);
|
||||
this.SpawnGroupTextBox.Mask = "0000000000";
|
||||
this.SpawnGroupTextBox.Name = "SpawnGroupTextBox";
|
||||
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);
|
||||
this.NPCTypesTextBox.Mask = "0000000000";
|
||||
this.NPCTypesTextBox.Name = "NPCTypesTextBox";
|
||||
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);
|
||||
this.DoorsTextBox.Mask = "0000000000";
|
||||
this.DoorsTextBox.Name = "DoorsTextBox";
|
||||
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[] {
|
||||
999,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.VersionSelector.Name = "VersionSelector";
|
||||
this.VersionSelector.Size = new System.Drawing.Size(39, 20);
|
||||
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);
|
||||
this.ZoneIDTextBox.Mask = "0000000";
|
||||
this.ZoneIDTextBox.Name = "ZoneIDTextBox";
|
||||
this.ZoneIDTextBox.PromptChar = ' ';
|
||||
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);
|
||||
this.groupBox2.Controls.Add(this.ZonePointCheckBox);
|
||||
this.groupBox2.Controls.Add(this.ZoneCheckBox);
|
||||
this.groupBox2.Controls.Add(this.MerchantCheckBox);
|
||||
this.groupBox2.Controls.Add(this.GroundSpawnCheckBox);
|
||||
this.groupBox2.Controls.Add(this.ObjectCheckBox);
|
||||
this.groupBox2.Controls.Add(this.GridCheckBox);
|
||||
this.groupBox2.Controls.Add(this.SpawnCheckBox);
|
||||
this.groupBox2.Controls.Add(this.DoorCheckBox);
|
||||
this.groupBox2.Location = new System.Drawing.Point(298, 12);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(200, 345);
|
||||
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";
|
||||
this.NPCTypesTintCheckBox.Size = new System.Drawing.Size(117, 17);
|
||||
this.NPCTypesTintCheckBox.TabIndex = 42;
|
||||
this.NPCTypesTintCheckBox.Text = "Use npc_types_tint";
|
||||
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";
|
||||
this.UpdateExistingNPCTypesCheckbox.Size = new System.Drawing.Size(152, 17);
|
||||
this.UpdateExistingNPCTypesCheckbox.TabIndex = 41;
|
||||
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;
|
||||
this.ZonePointCheckBox.Location = new System.Drawing.Point(24, 187);
|
||||
this.ZonePointCheckBox.Name = "ZonePointCheckBox";
|
||||
this.ZonePointCheckBox.Size = new System.Drawing.Size(83, 17);
|
||||
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;
|
||||
this.ZoneCheckBox.Location = new System.Drawing.Point(24, 164);
|
||||
this.ZoneCheckBox.Name = "ZoneCheckBox";
|
||||
this.ZoneCheckBox.Size = new System.Drawing.Size(84, 17);
|
||||
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;
|
||||
this.MerchantCheckBox.Location = new System.Drawing.Point(24, 141);
|
||||
this.MerchantCheckBox.Name = "MerchantCheckBox";
|
||||
this.MerchantCheckBox.Size = new System.Drawing.Size(95, 17);
|
||||
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;
|
||||
this.GroundSpawnCheckBox.Location = new System.Drawing.Point(24, 118);
|
||||
this.GroundSpawnCheckBox.Name = "GroundSpawnCheckBox";
|
||||
this.GroundSpawnCheckBox.Size = new System.Drawing.Size(102, 17);
|
||||
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;
|
||||
this.ObjectCheckBox.Location = new System.Drawing.Point(24, 95);
|
||||
this.ObjectCheckBox.Name = "ObjectCheckBox";
|
||||
this.ObjectCheckBox.Size = new System.Drawing.Size(62, 17);
|
||||
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;
|
||||
this.GridCheckBox.Location = new System.Drawing.Point(24, 72);
|
||||
this.GridCheckBox.Name = "GridCheckBox";
|
||||
this.GridCheckBox.Size = new System.Drawing.Size(50, 17);
|
||||
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;
|
||||
this.SpawnCheckBox.Location = new System.Drawing.Point(24, 49);
|
||||
this.SpawnCheckBox.Name = "SpawnCheckBox";
|
||||
this.SpawnCheckBox.Size = new System.Drawing.Size(64, 17);
|
||||
this.SpawnCheckBox.TabIndex = 5;
|
||||
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;
|
||||
this.DoorCheckBox.Location = new System.Drawing.Point(24, 26);
|
||||
this.DoorCheckBox.Name = "DoorCheckBox";
|
||||
this.DoorCheckBox.Size = new System.Drawing.Size(54, 17);
|
||||
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);
|
||||
this.GenerateSQLButton.TabIndex = 3;
|
||||
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";
|
||||
this.SQLCancelButton.Size = new System.Drawing.Size(100, 27);
|
||||
this.SQLCancelButton.TabIndex = 4;
|
||||
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);
|
||||
this.MiscOptions.Location = new System.Drawing.Point(12, 368);
|
||||
this.MiscOptions.Name = "MiscOptions";
|
||||
this.MiscOptions.Size = new System.Drawing.Size(486, 76);
|
||||
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;
|
||||
this.CoalesceWaypoints.Location = new System.Drawing.Point(17, 19);
|
||||
this.CoalesceWaypoints.Name = "CoalesceWaypoints";
|
||||
this.CoalesceWaypoints.Size = new System.Drawing.Size(184, 17);
|
||||
this.CoalesceWaypoints.TabIndex = 3;
|
||||
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";
|
||||
this.InvisibleMenCheckBox.Size = new System.Drawing.Size(126, 17);
|
||||
this.InvisibleMenCheckBox.TabIndex = 43;
|
||||
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;
|
||||
this.ClientSize = new System.Drawing.Size(514, 513);
|
||||
this.Controls.Add(this.MiscOptions);
|
||||
this.Controls.Add(this.SQLCancelButton);
|
||||
this.Controls.Add(this.GenerateSQLButton);
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Name = "GenerateSQLForm";
|
||||
this.Text = "Generate SQL";
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.VersionSelector)).EndInit();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.MiscOptions.ResumeLayout(false);
|
||||
this.MiscOptions.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.Label VersionLabel;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Label DoorsLabel;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label SpawnGroupLabel;
|
||||
private System.Windows.Forms.Label SpawnEntryLabel;
|
||||
private System.Windows.Forms.Label Spawn2Label;
|
||||
private System.Windows.Forms.Label GridLabel;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label GroundSpawnLabel;
|
||||
private System.Windows.Forms.Label MerchantLabel;
|
||||
public System.Windows.Forms.NumericUpDown VersionSelector;
|
||||
public System.Windows.Forms.MaskedTextBox ZoneIDTextBox;
|
||||
public System.Windows.Forms.MaskedTextBox DoorsTextBox;
|
||||
public System.Windows.Forms.MaskedTextBox NPCTypesTextBox;
|
||||
public System.Windows.Forms.MaskedTextBox SpawnGroupTextBox;
|
||||
public System.Windows.Forms.MaskedTextBox SpawnEntryTextBox;
|
||||
public System.Windows.Forms.MaskedTextBox Spawn2TextBox;
|
||||
public System.Windows.Forms.MaskedTextBox GridTextBox;
|
||||
public System.Windows.Forms.MaskedTextBox ObjectTextBox;
|
||||
public System.Windows.Forms.MaskedTextBox GroundSpawnTextBox;
|
||||
public System.Windows.Forms.MaskedTextBox MerchantTextBox;
|
||||
public System.Windows.Forms.CheckBox SpawnCheckBox;
|
||||
public System.Windows.Forms.CheckBox DoorCheckBox;
|
||||
public System.Windows.Forms.CheckBox GroundSpawnCheckBox;
|
||||
public System.Windows.Forms.CheckBox ObjectCheckBox;
|
||||
public System.Windows.Forms.CheckBox GridCheckBox;
|
||||
public System.Windows.Forms.CheckBox ZonePointCheckBox;
|
||||
public System.Windows.Forms.CheckBox ZoneCheckBox;
|
||||
public System.Windows.Forms.CheckBox MerchantCheckBox;
|
||||
public System.Windows.Forms.CheckBox NPCTypesTintCheckBox;
|
||||
public System.Windows.Forms.CheckBox UpdateExistingNPCTypesCheckbox;
|
||||
private System.Windows.Forms.SaveFileDialog SQLFileDialog;
|
||||
private System.Windows.Forms.Button GenerateSQLButton;
|
||||
private System.Windows.Forms.Button SQLCancelButton;
|
||||
private System.Windows.Forms.GroupBox MiscOptions;
|
||||
public System.Windows.Forms.CheckBox CoalesceWaypoints;
|
||||
public System.Windows.Forms.TextBox SpawnNameFilter;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.ToolTip toolTip1;
|
||||
public System.Windows.Forms.CheckBox InvisibleMenCheckBox;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace EQExtractor2
|
||||
{
|
||||
public partial class GenerateSQLForm : Form
|
||||
{
|
||||
public string FileName = "";
|
||||
|
||||
public GenerateSQLForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void RecalculateBaseInsertIDs()
|
||||
{
|
||||
UInt32 ZoneNumber = Convert.ToUInt32(ZoneIDTextBox.Text);
|
||||
|
||||
NPCTypesTextBox.Text = ((ZoneNumber * 1000) + (VersionSelector.Value * 100)).ToString();
|
||||
SpawnEntryTextBox.Text = NPCTypesTextBox.Text;
|
||||
SpawnGroupTextBox.Text = NPCTypesTextBox.Text;
|
||||
Spawn2TextBox.Text = NPCTypesTextBox.Text;
|
||||
GridTextBox.Text = NPCTypesTextBox.Text;
|
||||
ObjectTextBox.Text = NPCTypesTextBox.Text;
|
||||
GroundSpawnTextBox.Text = NPCTypesTextBox.Text;
|
||||
MerchantTextBox.Text = NPCTypesTextBox.Text;
|
||||
DoorsTextBox.Text = ((VersionSelector.Value * 1000)).ToString();
|
||||
}
|
||||
|
||||
private void VersionSelector_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
RecalculateBaseInsertIDs();
|
||||
}
|
||||
|
||||
private void ZoneIDTextBox_Validated(object sender, EventArgs e)
|
||||
{
|
||||
RecalculateBaseInsertIDs();
|
||||
}
|
||||
|
||||
private void SpawnCheckBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!SpawnCheckBox.Checked)
|
||||
{
|
||||
GridCheckBox.Checked = false;
|
||||
GridCheckBox.Enabled = false;
|
||||
}
|
||||
else
|
||||
GridCheckBox.Enabled = true;
|
||||
}
|
||||
|
||||
private void UpdateExistingNPCTypesCheckbox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (UpdateExistingNPCTypesCheckbox.Checked)
|
||||
{
|
||||
SpawnCheckBox.Checked = false;
|
||||
SpawnCheckBox.Enabled = false;
|
||||
GridCheckBox.Checked = false;
|
||||
GridCheckBox.Enabled = false;
|
||||
MerchantCheckBox.Checked = false;
|
||||
MerchantCheckBox.Enabled = false;
|
||||
ZoneCheckBox.Checked = false;
|
||||
ZonePointCheckBox.Checked = false;
|
||||
GridCheckBox.Checked = false;
|
||||
DoorCheckBox.Checked = false;
|
||||
ObjectCheckBox.Checked = false;
|
||||
GroundSpawnCheckBox.Checked = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
SpawnCheckBox.Enabled = true;
|
||||
GridCheckBox.Enabled = true;
|
||||
MerchantCheckBox.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void GenerateSQLButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (SQLFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
FileName = SQLFileDialog.FileName;
|
||||
this.DialogResult = DialogResult.OK;
|
||||
//Close();
|
||||
//return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void SQLCancelButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
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
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<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
|
||||
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
|
||||
mimetype set.
|
||||
|
||||
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
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
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
|
||||
: 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
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>580, 17</value>
|
||||
</metadata>
|
||||
<metadata name="SQLFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -0,0 +1,691 @@
|
||||
//
|
||||
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
|
||||
//
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace EQExtractor2.InternalTypes
|
||||
{
|
||||
class Constants
|
||||
{
|
||||
public const UInt32 MATERIAL_HEAD = 0;
|
||||
public const UInt32 MATERIAL_CHEST = 1;
|
||||
public const UInt32 MATERIAL_PRIMARY = 7;
|
||||
public const UInt32 MATERIAL_SECONDARY = 8;
|
||||
}
|
||||
|
||||
class GroundSpawnStruct
|
||||
{
|
||||
public UInt32 DropID;
|
||||
public string Name;
|
||||
public UInt16 ZoneID;
|
||||
public UInt16 InstanceID;
|
||||
public float Heading;
|
||||
public float y;
|
||||
public float x;
|
||||
public float z;
|
||||
public UInt32 ObjectType;
|
||||
}
|
||||
|
||||
public class NewZoneStruct
|
||||
{
|
||||
public NewZoneStruct()
|
||||
{
|
||||
FogRed = new byte[4];
|
||||
FogGreen = new byte[4];
|
||||
FogBlue = new byte[4];
|
||||
FogMinClip = new float[4];
|
||||
FogMaxClip = new float[4];
|
||||
}
|
||||
|
||||
public string ShortName;
|
||||
public string LongName;
|
||||
public byte Type;
|
||||
public byte[] FogRed;
|
||||
public byte[] FogGreen;
|
||||
public byte[] FogBlue;
|
||||
public float[] FogMinClip;
|
||||
public float[] FogMaxClip;
|
||||
public float Gravity;
|
||||
public byte TimeType;
|
||||
public byte Sky;
|
||||
public float ZEM;
|
||||
public float SafeY;
|
||||
public float SafeX;
|
||||
public float SafeZ;
|
||||
public float MinZ;
|
||||
public float MaxZ;
|
||||
public float UnderWorld;
|
||||
public float MinClip;
|
||||
public float MaxClip;
|
||||
public string ShortName2;
|
||||
public UInt16 ZoneID;
|
||||
public UInt16 InstanceID;
|
||||
public byte FallDamage;
|
||||
public float FogDensity;
|
||||
}
|
||||
|
||||
public class ZoneEntryStruct
|
||||
{
|
||||
public ZoneEntryStruct()
|
||||
{
|
||||
SlotColour = new UInt32[9];
|
||||
Equipment = new UInt32[9];
|
||||
}
|
||||
|
||||
public string SpawnName;
|
||||
public UInt32 SpawnID;
|
||||
public bool Findable;
|
||||
public Byte Level;
|
||||
public Byte IsNPC;
|
||||
public uint Showname;
|
||||
public uint TargetableWithHotkey;
|
||||
public uint Targetable;
|
||||
public uint ShowHelm;
|
||||
public uint Gender;
|
||||
public byte OtherData;
|
||||
public string DestructableString1;
|
||||
public string DestructableString2;
|
||||
public string DestructableString3;
|
||||
public UInt32 DestructableUnk1;
|
||||
public UInt32 DestructableUnk2;
|
||||
public UInt32 DestructableID1;
|
||||
public UInt32 DestructableID2;
|
||||
public UInt32 DestructableID3;
|
||||
public UInt32 DestructableID4;
|
||||
public UInt32 DestructableUnk3;
|
||||
public UInt32 DestructableUnk4;
|
||||
public UInt32 DestructableUnk5;
|
||||
public UInt32 DestructableUnk6;
|
||||
public UInt32 DestructableUnk7;
|
||||
public UInt32 DestructableUnk8;
|
||||
public UInt32 DestructableUnk9;
|
||||
public byte DestructableByte;
|
||||
public float Size;
|
||||
public byte Face;
|
||||
public float WalkSpeed;
|
||||
public float RunSpeed;
|
||||
public UInt32 Race;
|
||||
public byte PropCount;
|
||||
public UInt32 BodyType;
|
||||
public byte HairColor;
|
||||
public byte BeardColor;
|
||||
public byte EyeColor1;
|
||||
public byte EyeColor2;
|
||||
public byte HairStyle;
|
||||
public byte Beard;
|
||||
public UInt32 DrakkinHeritage;
|
||||
public UInt32 DrakkinTattoo;
|
||||
public UInt32 DrakkinDetails;
|
||||
public UInt32 Deity;
|
||||
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 UInt32[] SlotColour;
|
||||
public byte ArmorTintRed;
|
||||
public byte ArmorTintGreen;
|
||||
public byte ArmorTintBlue;
|
||||
public UInt32 MeleeTexture1;
|
||||
public UInt32 MeleeTexture2;
|
||||
public UInt32[] Equipment;
|
||||
public string Title;
|
||||
public string Suffix;
|
||||
public byte IsMercenary;
|
||||
public UInt32 Padding5;
|
||||
public UInt32 Padding7;
|
||||
public UInt32 Padding26;
|
||||
|
||||
}
|
||||
|
||||
public class NPCSpawn
|
||||
{
|
||||
public NPCSpawn(UInt32 SpawnID, UInt32 Spawn2DBID, UInt32 NPCTypeID, string Name)
|
||||
{
|
||||
this.SpawnID = SpawnID;
|
||||
this.Spawn2DBID = Spawn2DBID;
|
||||
this.NPCTypeID = NPCTypeID;
|
||||
this.Name = Name;
|
||||
}
|
||||
|
||||
public bool DoesHaveHighResWaypoints()
|
||||
{
|
||||
return HasHighResWaypoints;
|
||||
}
|
||||
|
||||
public void SetHasHighResWaypoints()
|
||||
{
|
||||
HasHighResWaypoints = true;
|
||||
}
|
||||
|
||||
public void AddWaypoint(Position p, bool HighRes)
|
||||
{
|
||||
Waypoints.Add(p);
|
||||
if (HighRes)
|
||||
HasHighResWaypoints = true;
|
||||
}
|
||||
|
||||
public UInt32 SpawnID;
|
||||
public UInt32 Spawn2DBID;
|
||||
public UInt32 NPCTypeID;
|
||||
public string Name;
|
||||
bool HasHighResWaypoints = false;
|
||||
public List<Position> Waypoints = new List<Position>();
|
||||
}
|
||||
|
||||
public class NPCTypeList
|
||||
{
|
||||
List<NPCType> _NPCTypeList = new List<NPCType>();
|
||||
|
||||
public void AddNPCType(NPCType NewNPC)
|
||||
{
|
||||
_NPCTypeList.Add(NewNPC);
|
||||
}
|
||||
|
||||
public List<NPCType> GetUniqueSpawns()
|
||||
{
|
||||
foreach (NPCType n in _NPCTypeList)
|
||||
{
|
||||
if (NPCType.IsPlayableRace(n.Race) || NPCType.IsGuardRace(n.Race))
|
||||
n.Unique = true;
|
||||
else
|
||||
n.Unique = false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < _NPCTypeList.Count; ++i)
|
||||
{
|
||||
for (int j = 0; j < _NPCTypeList.Count; ++j)
|
||||
{
|
||||
if ((i != j) && (_NPCTypeList[i].Name == _NPCTypeList[j].Name))
|
||||
{
|
||||
_NPCTypeList[i].Unique = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<NPCType> Results = new List<NPCType>();
|
||||
|
||||
foreach (NPCType n in _NPCTypeList)
|
||||
if (n.Unique)
|
||||
Results.Add(n);
|
||||
|
||||
return Results;
|
||||
}
|
||||
|
||||
|
||||
public UInt32 FindNPCType(string Name, Byte Level, uint Gender, float Size, Byte Face, float WalkSpeed, float RunSpeed, UInt32 Race,
|
||||
UInt32 BodyType, Byte HairColor, Byte BeardColor, Byte EyeColor1, Byte EyeColor2, Byte HairStyle, Byte Beard,
|
||||
UInt32 DrakkinHeritage, UInt32 DrakkinTattoo, UInt32 DrakkinDetails, UInt32 Deity, Byte Class, Byte EquipChest2,
|
||||
Byte Helm, string LastName)
|
||||
{
|
||||
foreach (NPCType n in _NPCTypeList)
|
||||
{
|
||||
if (n.Name != Name)
|
||||
continue;
|
||||
|
||||
if (n.Level != Level)
|
||||
continue;
|
||||
|
||||
if (n.Gender != Gender)
|
||||
continue;
|
||||
|
||||
if (n.Size != Size)
|
||||
continue;
|
||||
|
||||
if (n.Face != Face)
|
||||
continue;
|
||||
|
||||
if (n.WalkSpeed != WalkSpeed)
|
||||
continue;
|
||||
|
||||
if (n.RunSpeed != RunSpeed)
|
||||
continue;
|
||||
|
||||
if (n.Race != Race)
|
||||
continue;
|
||||
|
||||
if (n.BodyType != BodyType)
|
||||
continue;
|
||||
|
||||
if (n.HairColor != HairColor)
|
||||
continue;
|
||||
|
||||
if (n.BeardColor != BeardColor)
|
||||
continue;
|
||||
|
||||
if (n.EyeColor1 != EyeColor1)
|
||||
continue;
|
||||
|
||||
if (n.EyeColor2 != EyeColor2)
|
||||
continue;
|
||||
|
||||
if (n.HairStyle != HairStyle)
|
||||
continue;
|
||||
|
||||
if (n.Beard != Beard)
|
||||
continue;
|
||||
|
||||
if (n.DrakkinHeritage != DrakkinHeritage)
|
||||
continue;
|
||||
|
||||
if (n.DrakkinTattoo != DrakkinTattoo)
|
||||
continue;
|
||||
|
||||
if (n.DrakkinDetails != DrakkinDetails)
|
||||
continue;
|
||||
|
||||
if (n.Deity != Deity)
|
||||
continue;
|
||||
|
||||
if (n.Class != Class)
|
||||
continue;
|
||||
|
||||
if (n.EquipChest2 != EquipChest2)
|
||||
continue;
|
||||
|
||||
if (n.Helm != Helm)
|
||||
continue;
|
||||
|
||||
if (n.LastName != LastName)
|
||||
continue;
|
||||
|
||||
//Console.WriteLine("Found NPCType already in list, returning {0}", n.DBID);
|
||||
|
||||
return n.DBID;
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public class NPCSpawnList
|
||||
{
|
||||
public List<NPCSpawn> _NPCSpawnList = new List<NPCSpawn>();
|
||||
|
||||
public NPCSpawn GetNPC(UInt32 SpawnID)
|
||||
{
|
||||
foreach (NPCSpawn s in _NPCSpawnList)
|
||||
{
|
||||
if (s.SpawnID == SpawnID)
|
||||
return s;
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public bool DoesHaveHighResWaypoints(UInt32 SpawnID)
|
||||
{
|
||||
foreach (NPCSpawn s in _NPCSpawnList)
|
||||
{
|
||||
if (s.SpawnID == SpawnID)
|
||||
{
|
||||
if (s.DoesHaveHighResWaypoints())
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void AddNPCSpawn(UInt32 DBID, UInt32 SpawnID, UInt32 NPCTypeID, string Name)
|
||||
{
|
||||
NPCSpawn NewSpawn = new NPCSpawn(DBID, SpawnID, NPCTypeID, Name);
|
||||
|
||||
_NPCSpawnList.Add(NewSpawn);
|
||||
}
|
||||
|
||||
|
||||
public void AddWaypoint(UInt32 SpawnID, Position p, bool HighRes)
|
||||
{
|
||||
foreach (NPCSpawn n in _NPCSpawnList)
|
||||
{
|
||||
if (n.SpawnID == SpawnID)
|
||||
{
|
||||
n.AddWaypoint(p, HighRes);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public struct ZonePoint
|
||||
{
|
||||
|
||||
public ZonePoint(UInt32 Number, UInt16 ZoneID, UInt16 Instance, float x, float y, float z,
|
||||
float TargetX, float TargetY, float TargetZ, float Heading, UInt32 TargetZoneID)
|
||||
{
|
||||
this.Number = Number;
|
||||
this.ZoneID = ZoneID;
|
||||
this.Instance = Instance;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.TargetX = TargetX;
|
||||
this.TargetY = TargetY;
|
||||
this.TargetZ = TargetZ;
|
||||
this.Heading = Heading;
|
||||
this.TargetZoneID = TargetZoneID;
|
||||
|
||||
}
|
||||
|
||||
public UInt32 Number;
|
||||
public UInt16 ZoneID;
|
||||
public UInt16 Instance;
|
||||
public float x;
|
||||
public float y;
|
||||
public float z;
|
||||
public float TargetX;
|
||||
public float TargetY;
|
||||
public float TargetZ;
|
||||
public float Heading;
|
||||
public UInt32 TargetZoneID;
|
||||
};
|
||||
|
||||
struct Item
|
||||
{
|
||||
public UInt32 StackSize;
|
||||
public UInt32 Slot;
|
||||
public UInt32 MerchantSlot;
|
||||
public UInt32 Price;
|
||||
public Int32 Quantity;
|
||||
public string Name;
|
||||
public string Lore;
|
||||
public string IDFile;
|
||||
public UInt32 ID;
|
||||
};
|
||||
|
||||
struct MerchantItem
|
||||
{
|
||||
public MerchantItem(UInt32 ItemID, string Name, UInt32 Slot, int Quantity)
|
||||
{
|
||||
this.ItemID = ItemID;
|
||||
this.Name = Name;
|
||||
this.Slot = Slot;
|
||||
this.Quantity = Quantity;
|
||||
}
|
||||
|
||||
public UInt32 ItemID;
|
||||
public string Name;
|
||||
public UInt32 Slot;
|
||||
public int Quantity;
|
||||
}
|
||||
|
||||
struct Merchant
|
||||
{
|
||||
public Merchant(UInt32 SpawnID)
|
||||
{
|
||||
this.SpawnID = SpawnID;
|
||||
this.Items = new List<MerchantItem>();
|
||||
|
||||
}
|
||||
|
||||
public UInt32 SpawnID;
|
||||
public List<MerchantItem> Items;
|
||||
}
|
||||
|
||||
public class NPCType
|
||||
{
|
||||
public NPCType(UInt32 DBID, string Name, Byte Level, uint Gender, float Size, Byte Face, float WalkSpeed, float RunSpeed, UInt32 Race,
|
||||
UInt32 BodyType, Byte HairColor, Byte BeardColor, Byte EyeColor1, Byte EyeColor2, Byte HairStyle, Byte Beard,
|
||||
UInt32 DrakkinHeritage, UInt32 DrakkinTattoo, UInt32 DrakkinDetails, UInt32 Deity, Byte Class, Byte EquipChest2,
|
||||
Byte Helm, string LastName, bool Findable, UInt32 MeleeTexture1, UInt32 MeleeTexture2,
|
||||
UInt32 ArmorTintRed, UInt32 ArmorTintGreen, UInt32 ArmorTintBlue, UInt32[] SlotColour)
|
||||
{
|
||||
this.DBID = DBID;
|
||||
this.Name = Name;
|
||||
this.Level = Level;
|
||||
this.Gender = Gender;
|
||||
this.Size = Size;
|
||||
this.Face = Face;
|
||||
this.WalkSpeed = WalkSpeed;
|
||||
this.RunSpeed = RunSpeed;
|
||||
this.Race = Race;
|
||||
this.BodyType = BodyType;
|
||||
this.HairColor = HairColor;
|
||||
this.BeardColor = BeardColor;
|
||||
this.EyeColor1 = EyeColor1;
|
||||
this.EyeColor2 = EyeColor2;
|
||||
this.HairStyle = HairStyle;
|
||||
this.Beard = Beard;
|
||||
this.DrakkinHeritage = DrakkinHeritage;
|
||||
this.DrakkinTattoo = DrakkinTattoo;
|
||||
this.DrakkinDetails = DrakkinDetails;
|
||||
this.Deity = Deity;
|
||||
this.Class = Class;
|
||||
this.EquipChest2 = EquipChest2;
|
||||
this.Helm = Helm;
|
||||
this.LastName = LastName;
|
||||
this.Findable = Findable;
|
||||
this.MeleeTexture1 = MeleeTexture1;
|
||||
this.MeleeTexture2 = MeleeTexture2;
|
||||
this.ArmorTintRed = ArmorTintRed;
|
||||
this.ArmorTintGreen = ArmorTintGreen;
|
||||
this.ArmorTintBlue = ArmorTintBlue;
|
||||
this.SlotColour = SlotColour;
|
||||
this.Unique = true;
|
||||
|
||||
|
||||
}
|
||||
public static bool IsPlayableRace(UInt32 Race)
|
||||
{
|
||||
if (Race <= 12 || Race == 128 || Race == 130 || Race == 330 || Race == 522)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static UInt32[] GuardRaces = { 44, 67, 71, 77, 78, 81, 90, 92, 93, 94, 106, 112, 139, 183, 239 };
|
||||
|
||||
public static bool IsGuardRace(UInt32 Race)
|
||||
{
|
||||
if (Array.IndexOf(GuardRaces, Race) >= 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsMount(string Name)
|
||||
{
|
||||
if (Name.IndexOf("`s_Mount") >= 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public UInt32 DBID;
|
||||
public string Name = "";
|
||||
public Byte Level = 0;
|
||||
public uint Gender = 0;
|
||||
public float Size = 0;
|
||||
public Byte Face = 0;
|
||||
public float WalkSpeed = 0;
|
||||
public float RunSpeed = 0;
|
||||
public UInt32 Race = 0;
|
||||
public UInt32 BodyType = 0;
|
||||
public Byte HairColor = 0;
|
||||
public Byte BeardColor = 0;
|
||||
public Byte EyeColor1 = 0;
|
||||
public Byte EyeColor2 = 0;
|
||||
public Byte HairStyle = 0;
|
||||
public Byte Beard = 0;
|
||||
public UInt32 DrakkinHeritage = 0;
|
||||
public UInt32 DrakkinTattoo = 0;
|
||||
public UInt32 DrakkinDetails = 0;
|
||||
public UInt32 Deity = 0;
|
||||
public Byte Class = 0;
|
||||
public Byte EquipChest2 = 0;
|
||||
public Byte Helm = 0;
|
||||
public string LastName = "";
|
||||
public bool Findable = false;
|
||||
public UInt32 MeleeTexture1 = 0;
|
||||
public UInt32 MeleeTexture2 = 0;
|
||||
public UInt32 ArmorTintRed = 0;
|
||||
public UInt32 ArmorTintGreen = 0;
|
||||
public UInt32 ArmorTintBlue = 0;
|
||||
public UInt32[] SlotColour;
|
||||
|
||||
public bool Unique = true;
|
||||
}
|
||||
|
||||
public class Position
|
||||
{
|
||||
public Position()
|
||||
{
|
||||
}
|
||||
|
||||
public Position(float x, float y, float z, float heading, DateTime TimeStamp)
|
||||
{
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.heading = heading;
|
||||
this.TimeStamp = TimeStamp;
|
||||
}
|
||||
|
||||
public double Distance(Position p)
|
||||
{
|
||||
float XDiff = this.x - p.x;
|
||||
float YDiff = this.y - p.y;
|
||||
|
||||
return Math.Sqrt((XDiff * XDiff) + (YDiff * YDiff));
|
||||
}
|
||||
|
||||
public float x, y, z, heading;
|
||||
public DateTime TimeStamp;
|
||||
}
|
||||
|
||||
public class PositionUpdate
|
||||
{
|
||||
public PositionUpdate()
|
||||
{
|
||||
p = new Position();
|
||||
}
|
||||
|
||||
public UInt32 SpawnID;
|
||||
|
||||
public Position p;
|
||||
|
||||
public bool HighRes;
|
||||
}
|
||||
|
||||
public class ExplorerSpawnRecord
|
||||
{
|
||||
public ExplorerSpawnRecord(UInt32 ID, string Name)
|
||||
{
|
||||
this.ID = ID;
|
||||
this.Name = Name;
|
||||
}
|
||||
|
||||
public UInt32 ID;
|
||||
public string Name;
|
||||
}
|
||||
|
||||
public class Door
|
||||
{
|
||||
public Door(string Name, float YPos, float XPos, float ZPos, float Heading, UInt32 Incline, Int32 Size, Byte ID, Byte OpenType,
|
||||
Byte StateAtSpawn, Byte InvertState, Int32 DoorParam, string DestZone, float DestX, float DestY, float DestZ,
|
||||
float DestHeading)
|
||||
{
|
||||
this.Name = Name;
|
||||
this.YPos = YPos;
|
||||
this.XPos = XPos;
|
||||
this.ZPos = ZPos;
|
||||
this.Heading = Heading;
|
||||
this.Incline = Incline;
|
||||
this.Size = Size;
|
||||
this.ID = ID;
|
||||
this.OpenType = OpenType;
|
||||
this.StateAtSpawn = StateAtSpawn;
|
||||
this.InvertState = InvertState;
|
||||
this.DoorParam = DoorParam;
|
||||
this.DestZone = DestZone;
|
||||
this.DestX = DestX;
|
||||
this.DestY = DestY;
|
||||
this.DestZ = DestZ;
|
||||
this.DestHeading = DestHeading;
|
||||
}
|
||||
|
||||
public string Name;
|
||||
public float YPos;
|
||||
public float XPos;
|
||||
public float ZPos;
|
||||
public float Heading;
|
||||
public UInt32 Incline;
|
||||
public Int32 Size;
|
||||
public Byte ID;
|
||||
public Byte OpenType;
|
||||
public Byte StateAtSpawn;
|
||||
public Byte InvertState;
|
||||
public Int32 DoorParam;
|
||||
public string DestZone;
|
||||
public float DestX;
|
||||
public float DestY;
|
||||
public float DestZ;
|
||||
public float DestHeading;
|
||||
|
||||
}
|
||||
class MerchantManager
|
||||
{
|
||||
public bool AddMerchant(UInt32 SpawnID)
|
||||
{
|
||||
foreach (Merchant m in MerchantList)
|
||||
{
|
||||
if (m.SpawnID == SpawnID)
|
||||
return false;
|
||||
}
|
||||
|
||||
Merchant nm = new Merchant(SpawnID);
|
||||
|
||||
MerchantList.Add(nm);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public int FindMerchant(UInt32 SpawnID)
|
||||
{
|
||||
for (int i = 0; i < MerchantList.Count; ++i)
|
||||
{
|
||||
if (MerchantList[i].SpawnID == SpawnID)
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public bool AddMerchantItem(UInt32 SpawnID, UInt32 ItemID, string Name, UInt32 Slot, int Quantity)
|
||||
{
|
||||
|
||||
int i = FindMerchant(SpawnID);
|
||||
|
||||
|
||||
if (i < 0)
|
||||
return false;
|
||||
|
||||
for (int j = 0; j < MerchantList[i].Items.Count; ++j)
|
||||
if (MerchantList[i].Items[j].ItemID == ItemID)
|
||||
return false;
|
||||
|
||||
MerchantItem NewItem = new MerchantItem(ItemID, Name, Slot, Quantity);
|
||||
|
||||
MerchantList[i].Items.Add(NewItem);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public List<Merchant> MerchantList = new List<Merchant>();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
namespace EQExtractor2
|
||||
{
|
||||
partial class LogForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
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)));
|
||||
this.ConsoleWindow.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.ConsoleWindow.FormattingEnabled = true;
|
||||
this.ConsoleWindow.HorizontalScrollbar = true;
|
||||
this.ConsoleWindow.ItemHeight = 14;
|
||||
this.ConsoleWindow.Location = new System.Drawing.Point(12, 12);
|
||||
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);
|
||||
this.Controls.Add(this.ConsoleWindow);
|
||||
this.Name = "LogForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||
this.Text = "EQExtractor2 Debug Log";
|
||||
this.Closing += new System.ComponentModel.CancelEventHandler(this.LogForm_FormClosing);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public System.Windows.Forms.ListBox ConsoleWindow;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace EQExtractor2
|
||||
{
|
||||
public partial class LogForm : Form
|
||||
{
|
||||
public LogForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void LogForm_FormClosing(Object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
e.Cancel = true;
|
||||
this.Hide();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
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
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<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
|
||||
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
|
||||
mimetype set.
|
||||
|
||||
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
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
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
|
||||
: 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
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@@ -0,0 +1,161 @@
|
||||
//
|
||||
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
|
||||
//
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.OpCodes
|
||||
{
|
||||
public class OpCode
|
||||
{
|
||||
public UInt32 Value;
|
||||
public string Name;
|
||||
public ExplorerMethod Explorer;
|
||||
public UInt32 Count;
|
||||
|
||||
public OpCode(string inName, UInt32 inValue)
|
||||
{
|
||||
Name = inName;
|
||||
Value = inValue;
|
||||
Explorer = null;
|
||||
Count = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void ExplorerMethod(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction);
|
||||
|
||||
public class OpCodeManager
|
||||
{
|
||||
public List<OpCode> OpCodeList = new List<OpCode>();
|
||||
|
||||
public bool Init(string ConfFile, ref string ErrorMessage)
|
||||
{
|
||||
StreamReader sr;
|
||||
|
||||
string PatchFile = ConfFile;
|
||||
|
||||
try
|
||||
{
|
||||
sr = new StreamReader(PatchFile);
|
||||
}
|
||||
catch
|
||||
{
|
||||
ErrorMessage = "Unable to open opcode file " + PatchFile;
|
||||
return false;
|
||||
}
|
||||
|
||||
string Line;
|
||||
|
||||
while ((Line = sr.ReadLine()) != null)
|
||||
{
|
||||
if (Line.Length == 0)
|
||||
continue;
|
||||
if (Line[0] == '#')
|
||||
continue;
|
||||
|
||||
int EqualsSign = Line.IndexOf("=");
|
||||
|
||||
if (EqualsSign < 0)
|
||||
continue;
|
||||
string OPCodeName = Line.Substring(0, EqualsSign);
|
||||
string OPCodeValue = Line.Substring(EqualsSign + 1, 6);
|
||||
UInt32 OPCodeNumber = 0;
|
||||
try
|
||||
{
|
||||
OPCodeNumber = Convert.ToUInt32(OPCodeValue, 16);
|
||||
}
|
||||
catch
|
||||
{
|
||||
ErrorMessage = "Malformed OPCode value for " + OPCodeName;
|
||||
OPCodeNumber = 0;
|
||||
}
|
||||
|
||||
if (OPCodeNumber > 0)
|
||||
AddOpCode(OPCodeName, OPCodeNumber);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void AddOpCode(string OpCodeName, UInt32 OpCodeValue)
|
||||
{
|
||||
OpCode NewOpCode = new OpCode(OpCodeName, OpCodeValue);
|
||||
OpCodeList.Add(NewOpCode);
|
||||
|
||||
}
|
||||
|
||||
public string OpCodeToName(int OpCodeValue)
|
||||
{
|
||||
foreach (OpCode oc in OpCodeList)
|
||||
{
|
||||
if (oc.Value == OpCodeValue)
|
||||
return oc.Name;
|
||||
}
|
||||
|
||||
return "OP_Unknown";
|
||||
}
|
||||
|
||||
public OpCode GetOpCodeByNumber(int OpCodeValue)
|
||||
{
|
||||
foreach (OpCode oc in OpCodeList)
|
||||
{
|
||||
if (oc.Value == OpCodeValue)
|
||||
return oc;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public UInt32 OpCodeNameToNumber(string Name)
|
||||
{
|
||||
foreach (OpCode oc in OpCodeList)
|
||||
{
|
||||
if (oc.Name == Name)
|
||||
return oc.Value;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void ResetCounts()
|
||||
{
|
||||
foreach (OpCode oc in OpCodeList)
|
||||
oc.Count = 0;
|
||||
}
|
||||
|
||||
public void RegisterExplorer(string Name, ExplorerMethod Explorer)
|
||||
{
|
||||
foreach (OpCode oc in OpCodeList)
|
||||
{
|
||||
if (oc.Name == Name)
|
||||
{
|
||||
oc.Explorer = Explorer;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void UnRegisterExplorer(string Name)
|
||||
{
|
||||
// Designed to be used when a decoder wants to use some of it's base classes explorers, but some need to be UnRegistered
|
||||
// as they are incompatible with the current patch version.
|
||||
// i.e.
|
||||
// base.RegisterExplorers();
|
||||
// UnRegisterExplorer("OP_NotCompatible");
|
||||
//
|
||||
foreach (OpCode oc in OpCodeList)
|
||||
{
|
||||
if (oc.Name == Name)
|
||||
{
|
||||
oc.Explorer = null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,112 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchAug042011Decoder : PatchMay242011Decoder
|
||||
{
|
||||
public PatchAug042011Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date August 04 2011.";
|
||||
|
||||
ExpectedPPLength = 28496;
|
||||
|
||||
PPZoneIDOffset = 21164;
|
||||
|
||||
PatchConfFileName = "patch_Aug04-2011.conf";
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
//OpManager.RegisterExplorer("OP_MercenaryDataResponse", ExploreMercenaryDataResponse);
|
||||
}
|
||||
|
||||
public void ExploreMercenaryDataResponse(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt32 TypeCount = Buffer.ReadUInt32();
|
||||
|
||||
//OutputStream.WriteLine("Type Count: {0}\r\n", TypeCount);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Number of Types (Journeyman and Apprentice in this case\r\n", TypeCount);
|
||||
for (int i = 0; i < TypeCount; ++i)
|
||||
{
|
||||
UInt32 TypeDBStringID = Buffer.ReadUInt32();
|
||||
//OutputStream.WriteLine(" Type {0} DBStringID {1}", i, TypeDBStringID);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID for Type {1}", TypeDBStringID, i);
|
||||
}
|
||||
|
||||
UInt32 Count2 = Buffer.ReadUInt32();
|
||||
|
||||
//OutputStream.WriteLine(" Count 2 is {0}", Count2);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Count of Sub-types that follow", Count2);
|
||||
|
||||
for (int i = 0; i < Count2; ++i)
|
||||
{
|
||||
int Offset = Buffer.GetPosition();
|
||||
|
||||
UInt32 Unknown1 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown1);
|
||||
UInt32 DBStringID1 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID of Type", DBStringID1);
|
||||
UInt32 DBStringID2 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID of Sub-Type", DBStringID2);
|
||||
UInt32 PurchaseCost = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Purchase Cost", PurchaseCost);
|
||||
UInt32 UpkeepCost = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Upkeep Cost", UpkeepCost);
|
||||
UInt32 Unknown2 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown2);
|
||||
UInt32 Unknown3 = Buffer.ReadUInt32();
|
||||
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);
|
||||
|
||||
UInt32 Unknown6 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown6);
|
||||
UInt32 Unknown7 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown7);
|
||||
UInt32 Unknown8 = Buffer.ReadUInt32();
|
||||
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();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown10);
|
||||
|
||||
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",
|
||||
// Unknown2, Unknown3, Unknown4, Unknown5, Unknown6, Unknown7, Unknown8, Unknown10, Unknown11);
|
||||
|
||||
//OutputStream.WriteLine(" Stance Count: {0}", StanceCount);
|
||||
|
||||
for (int j = 0; j < StanceCount; ++j)
|
||||
{
|
||||
UInt32 StanceNum = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Stance Number", StanceNum);
|
||||
UInt32 StanceType = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Stance DBStringID (1 = Passive, 2 = Balanced etc.", StanceType);
|
||||
|
||||
//OutputStream.WriteLine(" {0}: {1}", StanceNum, StanceType);
|
||||
}
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
OutputStream.WriteLine("\r\nBuffer position at end is {0}", Buffer.GetPosition());
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchAugust152012Decoder : PatchJuly132012Decoder
|
||||
{
|
||||
public PatchAugust152012Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date August 15 2012.";
|
||||
|
||||
ExpectedPPLength = 33904;
|
||||
|
||||
PPZoneIDOffset = 26572;
|
||||
|
||||
PatchConfFileName = "patch_August15-2012.conf";
|
||||
}
|
||||
|
||||
override public Item DecodeItemPacket(byte[] PacketBuffer)
|
||||
{
|
||||
ByteStream Buffer = new ByteStream(PacketBuffer);
|
||||
|
||||
Item NewItem = new Item();
|
||||
|
||||
Buffer.SetPosition(30);
|
||||
NewItem.MerchantSlot = Buffer.ReadByte();
|
||||
NewItem.Price = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(5);
|
||||
NewItem.Quantity = Buffer.ReadInt32();
|
||||
Buffer.SetPosition(109);
|
||||
// 109
|
||||
NewItem.Name = Buffer.ReadString(true);
|
||||
NewItem.Lore = Buffer.ReadString(true);
|
||||
NewItem.IDFile = Buffer.ReadString(true);
|
||||
Buffer.SkipBytes(1);
|
||||
NewItem.ID = Buffer.ReadUInt32();
|
||||
|
||||
return NewItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchDec072010Decoder : PatchOct202010Decoder
|
||||
{
|
||||
public PatchDec072010Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date December 7 2010.";
|
||||
|
||||
PatchConfFileName = "patch_Dec7-2010.conf";
|
||||
|
||||
}
|
||||
override public IdentificationStatus Identify(int OpCode, int Size, PacketDirection Direction)
|
||||
{
|
||||
if ((OpCode == OpManager.OpCodeNameToNumber("OP_ZoneEntry")) && (Direction == PacketDirection.ClientToServer))
|
||||
return IdentificationStatus.Tentative;
|
||||
|
||||
if ((OpCode == OpManager.OpCodeNameToNumber("OP_SendAATable")) && (Direction == PacketDirection.ServerToClient) &&
|
||||
(Size == 120))
|
||||
return IdentificationStatus.Yes;
|
||||
|
||||
return IdentificationStatus.No;
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
//OpManager.RegisterExplorer("OP_ClientUpdate", ExploreClientUpdate);
|
||||
}
|
||||
|
||||
public void ExploreClientUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt16 SpawnID = Buffer.ReadUInt16();
|
||||
Buffer.SkipBytes(6);
|
||||
float x = Buffer.ReadSingle();
|
||||
float y = Buffer.ReadSingle();
|
||||
Buffer.SkipBytes(12);
|
||||
float z = Buffer.ReadSingle();
|
||||
|
||||
Buffer.SkipBytes(4);
|
||||
UInt32 Temp = Buffer.ReadUInt32();
|
||||
Temp = Temp & 0x3FFFFF;
|
||||
Temp = Temp >> 10;
|
||||
float heading = Utils.EQ19ToFloat((Int32)(Temp));
|
||||
|
||||
OutputStream.WriteLine("Loc: {0}, {1}, {2} Heading: {3}", x, y, z, heading);
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchFeb082011Decoder : PatchDec072010Decoder
|
||||
{
|
||||
public PatchFeb082011Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date February 8 2011.";
|
||||
|
||||
PatchConfFileName = "patch_Feb8-2011.conf";
|
||||
|
||||
ExpectedPPLength = 28176;
|
||||
|
||||
PPZoneIDOffset = 20844;
|
||||
}
|
||||
|
||||
override public IdentificationStatus Identify(int OpCode, int Size, PacketDirection Direction)
|
||||
{
|
||||
if ((OpCode == OpManager.OpCodeNameToNumber("OP_ZoneEntry")) && (Direction == PacketDirection.ClientToServer))
|
||||
{
|
||||
IDStatus = IdentificationStatus.Tentative;
|
||||
return IdentificationStatus.Tentative;
|
||||
}
|
||||
|
||||
if (IDStatus != IdentificationStatus.Tentative)
|
||||
return IdentificationStatus.No;
|
||||
|
||||
if ((OpCode == OpManager.OpCodeNameToNumber("OP_PlayerProfile")) && (Direction == PacketDirection.ServerToClient) &&
|
||||
(Size == ExpectedPPLength))
|
||||
return IdentificationStatus.Yes;
|
||||
|
||||
return IdentificationStatus.No;
|
||||
}
|
||||
|
||||
override public Item DecodeItemPacket(byte[] PacketBuffer)
|
||||
{
|
||||
ByteStream Buffer = new ByteStream(PacketBuffer);
|
||||
|
||||
Item NewItem = new Item();
|
||||
|
||||
Buffer.SetPosition(30);
|
||||
NewItem.MerchantSlot = Buffer.ReadByte(); // 13
|
||||
NewItem.Price = Buffer.ReadUInt32(); // 14
|
||||
Buffer.SkipBytes(5);
|
||||
NewItem.Quantity = Buffer.ReadInt32(); // 23
|
||||
Buffer.SetPosition(97);
|
||||
NewItem.Name = Buffer.ReadString(true);
|
||||
NewItem.Lore = Buffer.ReadString(true);
|
||||
NewItem.IDFile = Buffer.ReadString(true);
|
||||
Buffer.SkipBytes(1);
|
||||
NewItem.ID = Buffer.ReadUInt32();
|
||||
|
||||
return NewItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchFebruary112013Decoder : PatchJanuary162013Decoder
|
||||
{
|
||||
public PatchFebruary112013Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date February 11 2013.";
|
||||
|
||||
PatchConfFileName = "patch_Feb11-2013.conf";
|
||||
|
||||
SupportsSQLGeneration = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,307 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
public enum IdentificationStatus { No, Tentative, Yes };
|
||||
|
||||
class PatchSpecficDecoder
|
||||
{
|
||||
protected class PacketToMatch
|
||||
{
|
||||
public String OPCodeName;
|
||||
public PacketDirection Direction;
|
||||
public Int32 RequiredSize;
|
||||
public bool VersionMatched;
|
||||
};
|
||||
|
||||
|
||||
|
||||
public PatchSpecficDecoder()
|
||||
{
|
||||
Version = "Unsupported Client Version";
|
||||
ExpectedPPLength = 0;
|
||||
PPZoneIDOffset = 0;
|
||||
PatchConfFileName = "";
|
||||
IDStatus = IdentificationStatus.No;
|
||||
SupportsSQLGeneration = true;
|
||||
}
|
||||
|
||||
public string GetVersion()
|
||||
{
|
||||
return Version;
|
||||
}
|
||||
|
||||
virtual public bool UnsupportedVersion()
|
||||
{
|
||||
return ExpectedPPLength == 0;
|
||||
}
|
||||
|
||||
virtual public bool Init(string ConfDirectory, ref string ErrorMessage)
|
||||
{
|
||||
OpManager = new OpCodeManager();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual public IdentificationStatus Identify(int OpCode, int Size, PacketDirection Direction)
|
||||
{
|
||||
return IdentificationStatus.No;
|
||||
}
|
||||
|
||||
virtual public List<Door> GetDoors()
|
||||
{
|
||||
List<Door> DoorList = new List<Door>();
|
||||
|
||||
return DoorList;
|
||||
}
|
||||
|
||||
virtual public UInt16 GetZoneNumber()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual public int VerifyPlayerProfile()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual public MerchantManager GetMerchantData(NPCSpawnList NPCSL)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
virtual public Item DecodeItemPacket(byte[] PacketBuffer)
|
||||
{
|
||||
Item NewItem = new Item();
|
||||
|
||||
return NewItem;
|
||||
}
|
||||
|
||||
|
||||
virtual public List<ZonePoint> GetZonePointList()
|
||||
{
|
||||
List<ZonePoint> ZonePointList = new List<ZonePoint>();
|
||||
|
||||
return ZonePointList;
|
||||
}
|
||||
|
||||
virtual public NewZoneStruct GetZoneData()
|
||||
{
|
||||
NewZoneStruct NewZone = new NewZoneStruct();
|
||||
|
||||
return NewZone;
|
||||
}
|
||||
|
||||
virtual public List<ZoneEntryStruct> GetSpawns()
|
||||
{
|
||||
List<ZoneEntryStruct> ZoneSpawns = new List<ZoneEntryStruct>();
|
||||
|
||||
return ZoneSpawns;
|
||||
}
|
||||
|
||||
virtual public List<PositionUpdate> GetHighResolutionMovementUpdates()
|
||||
{
|
||||
List<PositionUpdate> Updates = new List<PositionUpdate>();
|
||||
|
||||
return Updates;
|
||||
}
|
||||
|
||||
virtual public List<PositionUpdate> GetLowResolutionMovementUpdates()
|
||||
{
|
||||
List<PositionUpdate> Updates = new List<PositionUpdate>();
|
||||
|
||||
return Updates;
|
||||
}
|
||||
|
||||
virtual public List<PositionUpdate> GetAllMovementUpdates()
|
||||
{
|
||||
List<PositionUpdate> Updates = new List<PositionUpdate>();
|
||||
|
||||
return Updates;
|
||||
}
|
||||
|
||||
virtual public PositionUpdate Decode_OP_NPCMoveUpdate(byte[] UpdatePacket)
|
||||
{
|
||||
PositionUpdate PosUpdate = new PositionUpdate();
|
||||
|
||||
return PosUpdate;
|
||||
}
|
||||
|
||||
virtual public PositionUpdate Decode_OP_MobUpdate(byte[] MobUpdatePacket)
|
||||
{
|
||||
PositionUpdate PosUpdate = new PositionUpdate();
|
||||
|
||||
return PosUpdate;
|
||||
}
|
||||
|
||||
virtual public List<PositionUpdate> GetClientMovementUpdates()
|
||||
{
|
||||
List<PositionUpdate> Updates = new List<PositionUpdate>();
|
||||
|
||||
return Updates;
|
||||
}
|
||||
|
||||
virtual public List<GroundSpawnStruct> GetGroundSpawns()
|
||||
{
|
||||
List<GroundSpawnStruct> GroundSpawns = new List<GroundSpawnStruct>();
|
||||
|
||||
return GroundSpawns;
|
||||
}
|
||||
|
||||
virtual public List<UInt32> GetFindableSpawns()
|
||||
{
|
||||
List<UInt32> FindableSpawnList = new List<UInt32>();
|
||||
|
||||
return FindableSpawnList;
|
||||
}
|
||||
|
||||
virtual public string GetZoneName()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
virtual public bool DumpAAs(string FileName)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void GivePackets(PacketManager pm)
|
||||
{
|
||||
Packets = pm;
|
||||
}
|
||||
|
||||
virtual public void RegisterExplorers()
|
||||
{
|
||||
}
|
||||
|
||||
public List<byte[]> GetPacketsOfType(string OpCodeName, PacketDirection Direction)
|
||||
{
|
||||
List<byte[]> ReturnList = new List<byte[]>();
|
||||
|
||||
if (OpManager == null)
|
||||
return ReturnList;
|
||||
|
||||
UInt32 OpCodeNumber = OpManager.OpCodeNameToNumber(OpCodeName);
|
||||
|
||||
foreach (EQApplicationPacket app in Packets.PacketList)
|
||||
{
|
||||
if ((app.OpCode == OpCodeNumber) && (app.Direction == Direction) && (app.Locked))
|
||||
ReturnList.Add(app.Buffer);
|
||||
}
|
||||
|
||||
return ReturnList;
|
||||
}
|
||||
|
||||
public DateTime GetCaptureStartTime()
|
||||
{
|
||||
if (Packets.PacketList.Count > 0)
|
||||
{
|
||||
return Packets.PacketList[0].PacketTime;
|
||||
}
|
||||
return DateTime.MinValue;
|
||||
}
|
||||
|
||||
public bool DumpPackets(string FileName, bool ShowTimeStamps)
|
||||
{
|
||||
|
||||
StreamWriter PacketDumpStream;
|
||||
|
||||
try
|
||||
{
|
||||
PacketDumpStream = new StreamWriter(FileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
string Direction = "";
|
||||
|
||||
foreach (EQApplicationPacket p in Packets.PacketList)
|
||||
{
|
||||
if(ShowTimeStamps)
|
||||
PacketDumpStream.WriteLine(p.PacketTime.ToString());
|
||||
|
||||
if (p.Direction == PacketDirection.ServerToClient)
|
||||
Direction = "[Server->Client]";
|
||||
else
|
||||
Direction = "[Client->Server]";
|
||||
|
||||
OpCode oc = OpManager.GetOpCodeByNumber(p.OpCode);
|
||||
|
||||
string OpCodeName = (oc != null) ? oc.Name : "OP_Unknown";
|
||||
|
||||
PacketDumpStream.WriteLine("[OPCode: 0x" + p.OpCode.ToString("x4") + "] " + OpCodeName + " " + Direction + " [Size: " + p.Buffer.Length + "]");
|
||||
PacketDumpStream.WriteLine(Utils.HexDump(p.Buffer));
|
||||
|
||||
if ((oc != null) && (oc.Explorer != null))
|
||||
oc.Explorer(PacketDumpStream, new ByteStream(p.Buffer), p.Direction);
|
||||
}
|
||||
|
||||
PacketDumpStream.Close();
|
||||
|
||||
return true;
|
||||
}
|
||||
public int PacketTypeCountByName(string OPCodeName)
|
||||
{
|
||||
UInt32 OpCodeNumber = OpManager.OpCodeNameToNumber(OPCodeName);
|
||||
|
||||
int Count = 0;
|
||||
|
||||
foreach (EQApplicationPacket app in Packets.PacketList)
|
||||
{
|
||||
if (app.OpCode == OpCodeNumber)
|
||||
++Count;
|
||||
}
|
||||
|
||||
|
||||
return Count;
|
||||
}
|
||||
|
||||
protected void AddExplorerSpawn(UInt32 ID, string Name)
|
||||
{
|
||||
ExplorerSpawnRecord e = new ExplorerSpawnRecord(ID, Name);
|
||||
|
||||
ExplorerSpawns.Add(e);
|
||||
}
|
||||
|
||||
protected string FindExplorerSpawn(UInt32 ID)
|
||||
{
|
||||
foreach(ExplorerSpawnRecord s in ExplorerSpawns)
|
||||
{
|
||||
if (s.ID == ID)
|
||||
return s.Name;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
protected PacketManager Packets;
|
||||
|
||||
public OpCodeManager OpManager;
|
||||
|
||||
protected string Version;
|
||||
|
||||
protected int ExpectedPPLength;
|
||||
|
||||
protected int PPZoneIDOffset;
|
||||
|
||||
protected string PatchConfFileName;
|
||||
|
||||
protected PacketToMatch[] PacketsToMatch;
|
||||
|
||||
protected UInt32 WaitingForPacket;
|
||||
|
||||
protected IdentificationStatus IDStatus;
|
||||
|
||||
private List<ExplorerSpawnRecord> ExplorerSpawns = new List<ExplorerSpawnRecord>();
|
||||
|
||||
public bool SupportsSQLGeneration;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,467 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchJanuary162013Decoder : PatchDecember102012Decoder
|
||||
{
|
||||
public PatchJanuary162013Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date January 16 2013.";
|
||||
|
||||
PatchConfFileName = "patch_Jan16-2013.conf";
|
||||
}
|
||||
|
||||
override public List<ZoneEntryStruct> GetSpawns()
|
||||
{
|
||||
List<ZoneEntryStruct> ZoneSpawns = new List<ZoneEntryStruct>();
|
||||
|
||||
List<byte[]> SpawnPackets = GetPacketsOfType("OP_ZoneEntry", PacketDirection.ServerToClient);
|
||||
|
||||
foreach (byte[] SpawnPacket in SpawnPackets)
|
||||
{
|
||||
ZoneEntryStruct NewSpawn = new ZoneEntryStruct();
|
||||
|
||||
ByteStream Buffer = new ByteStream(SpawnPacket);
|
||||
|
||||
NewSpawn.SpawnName = Buffer.ReadString(true);
|
||||
|
||||
NewSpawn.SpawnName = Utils.MakeCleanName(NewSpawn.SpawnName);
|
||||
|
||||
NewSpawn.SpawnID = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.Level = Buffer.ReadByte();
|
||||
|
||||
float UnkSize = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.IsNPC = Buffer.ReadByte();
|
||||
|
||||
UInt32 Bitfield = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.Gender = (Bitfield & 3);
|
||||
|
||||
Byte OtherData = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip 8 unknown bytes
|
||||
|
||||
NewSpawn.DestructableString1 = "";
|
||||
NewSpawn.DestructableString2 = "";
|
||||
NewSpawn.DestructableString3 = "";
|
||||
|
||||
if ((NewSpawn.IsNPC > 0) && ((OtherData & 1) > 0))
|
||||
{
|
||||
// Destructable Objects
|
||||
NewSpawn.DestructableString1 = Buffer.ReadString(false);
|
||||
NewSpawn.DestructableString2 = Buffer.ReadString(false);
|
||||
NewSpawn.DestructableString3 = Buffer.ReadString(false);
|
||||
Buffer.SkipBytes(53);
|
||||
}
|
||||
|
||||
if ((OtherData & 4) > 0)
|
||||
{
|
||||
// Auras
|
||||
Buffer.ReadString(false);
|
||||
Buffer.ReadString(false);
|
||||
Buffer.SkipBytes(54);
|
||||
}
|
||||
|
||||
NewSpawn.PropCount = Buffer.ReadByte();
|
||||
|
||||
if (NewSpawn.PropCount > 0)
|
||||
NewSpawn.BodyType = Buffer.ReadUInt32();
|
||||
else
|
||||
NewSpawn.BodyType = 0;
|
||||
|
||||
|
||||
for (int j = 1; j < NewSpawn.PropCount; ++j)
|
||||
Buffer.SkipBytes(4);
|
||||
|
||||
Buffer.SkipBytes(1); // Skip HP %
|
||||
NewSpawn.HairColor = Buffer.ReadByte();
|
||||
NewSpawn.BeardColor = Buffer.ReadByte();
|
||||
NewSpawn.EyeColor1 = Buffer.ReadByte();
|
||||
NewSpawn.EyeColor2 = Buffer.ReadByte();
|
||||
NewSpawn.HairStyle = Buffer.ReadByte();
|
||||
NewSpawn.Beard = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.DrakkinHeritage = Buffer.ReadUInt32();
|
||||
NewSpawn.DrakkinTattoo = Buffer.ReadUInt32();
|
||||
NewSpawn.DrakkinDetails = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.EquipChest2 = Buffer.ReadByte();
|
||||
|
||||
bool UseWorn = (NewSpawn.EquipChest2 == 255);
|
||||
|
||||
Buffer.SkipBytes(2); // 2 Unknown bytes;
|
||||
|
||||
NewSpawn.Helm = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.Size = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.Face = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.WalkSpeed = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.RunSpeed = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.Race = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(1); // Skip Holding
|
||||
|
||||
NewSpawn.Deity = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip GuildID and GuildRank
|
||||
|
||||
NewSpawn.Class = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(4); // Skip PVP, Standstate, Light, Flymode
|
||||
|
||||
NewSpawn.LastName = Buffer.ReadString(true);
|
||||
|
||||
Buffer.SkipBytes(6);
|
||||
|
||||
NewSpawn.PetOwnerID = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(25);
|
||||
|
||||
NewSpawn.MeleeTexture1 = 0;
|
||||
NewSpawn.MeleeTexture2 = 0;
|
||||
|
||||
if ((NewSpawn.IsNPC == 0) || NPCType.IsPlayableRace(NewSpawn.Race))
|
||||
{
|
||||
for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot)
|
||||
NewSpawn.SlotColour[ColourSlot] = Buffer.ReadUInt32();
|
||||
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
NewSpawn.Equipment[i] = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip3 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip0 = Buffer.ReadUInt32();
|
||||
}
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_CHEST] > 0)
|
||||
{
|
||||
NewSpawn.EquipChest2 = (byte)NewSpawn.Equipment[Constants.MATERIAL_CHEST];
|
||||
|
||||
}
|
||||
|
||||
NewSpawn.ArmorTintRed = (byte)((NewSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 16) & 0xff);
|
||||
|
||||
NewSpawn.ArmorTintGreen = (byte)((NewSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 8) & 0xff);
|
||||
|
||||
NewSpawn.ArmorTintBlue = (byte)(NewSpawn.SlotColour[Constants.MATERIAL_CHEST] & 0xff);
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_PRIMARY] > 0)
|
||||
NewSpawn.MeleeTexture1 = NewSpawn.Equipment[Constants.MATERIAL_PRIMARY];
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_SECONDARY] > 0)
|
||||
NewSpawn.MeleeTexture2 = NewSpawn.Equipment[Constants.MATERIAL_SECONDARY];
|
||||
|
||||
if (UseWorn)
|
||||
NewSpawn.Helm = (byte)NewSpawn.Equipment[Constants.MATERIAL_HEAD];
|
||||
else
|
||||
NewSpawn.Helm = 0;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Non playable race
|
||||
|
||||
Buffer.SkipBytes(20);
|
||||
|
||||
NewSpawn.MeleeTexture1 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(16);
|
||||
NewSpawn.MeleeTexture2 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(16);
|
||||
}
|
||||
|
||||
if (NewSpawn.EquipChest2 == 255)
|
||||
NewSpawn.EquipChest2 = 0;
|
||||
|
||||
if (NewSpawn.Helm == 255)
|
||||
NewSpawn.Helm = 0;
|
||||
|
||||
UInt32 Position1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position3 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position4 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position5 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.YPos = Utils.EQ19ToFloat((Int32)((Position4 >> 13) & 0x7FFFF));
|
||||
|
||||
NewSpawn.ZPos = Utils.EQ19ToFloat((Int32)(Position5 >> 10) & 0x7FFFF);
|
||||
|
||||
NewSpawn.XPos = Utils.EQ19ToFloat((Int32)(Position2 >> 10) & 0x7FFFF);
|
||||
|
||||
NewSpawn.Heading = Utils.EQ19ToFloat((Int32)(Position3) & 0xFFF);
|
||||
|
||||
if ((OtherData & 16) > 0)
|
||||
{
|
||||
NewSpawn.Title = Buffer.ReadString(false);
|
||||
}
|
||||
|
||||
if ((OtherData & 32) > 0)
|
||||
{
|
||||
NewSpawn.Suffix = Buffer.ReadString(false);
|
||||
}
|
||||
|
||||
// unknowns
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
NewSpawn.IsMercenary = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(54);
|
||||
|
||||
Debug.Assert(Buffer.GetPosition() == Buffer.Length(), "Length mismatch while parsing zone spawns");
|
||||
|
||||
ZoneSpawns.Add(NewSpawn);
|
||||
}
|
||||
|
||||
return ZoneSpawns;
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
//OpManager.RegisterExplorer("OP_ZoneEntry", ExploreZoneEntry);
|
||||
//OpManager.RegisterExplorer("OP_NPCMoveUpdate", ExploreNPCMoveUpdate);
|
||||
//OpManager.RegisterExplorer("OP_MobUpdate", ExploreMobUpdate);
|
||||
}
|
||||
|
||||
public void ExploreNPCMoveUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
PositionUpdate PosUpdate;
|
||||
|
||||
PosUpdate = Decode_OP_NPCMoveUpdate(Buffer.Buffer);
|
||||
|
||||
OutputStream.WriteLine("SpawnID: {0}, X = {1}, Y = {2}, Z = {3}, Heading = {4}", PosUpdate.SpawnID, PosUpdate.p.x, PosUpdate.p.y, PosUpdate.p.z, PosUpdate.p.heading);
|
||||
}
|
||||
|
||||
public void ExploreMobUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
PositionUpdate PosUpdate;
|
||||
|
||||
PosUpdate = Decode_OP_MobUpdate(Buffer.Buffer);
|
||||
|
||||
OutputStream.WriteLine("SpawnID: {0}, X = {1}, Y = {2}, Z = {3}, Heading = {4}", PosUpdate.SpawnID, PosUpdate.p.x, PosUpdate.p.y, PosUpdate.p.z, PosUpdate.p.heading);
|
||||
}
|
||||
|
||||
public void ExploreZoneEntry(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
if (Direction != PacketDirection.ServerToClient)
|
||||
return;
|
||||
|
||||
string FirstName = Buffer.ReadString(false);
|
||||
|
||||
OutputStream.WriteLine("Name = {0}", FirstName);
|
||||
|
||||
UInt32 SpawnID = Buffer.ReadUInt32();
|
||||
|
||||
OutputStream.WriteLine("SpawnID = {0}", SpawnID);
|
||||
|
||||
byte Level = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine("Level = {0}", Level);
|
||||
|
||||
Buffer.SkipBytes(4);
|
||||
|
||||
byte IsNPC = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine("IsNPC = {0}", IsNPC);
|
||||
|
||||
UInt32 Bitfield = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("Name: {0}, Bitfield: {1}", FirstName, Convert.ToString(Bitfield, 2));
|
||||
|
||||
byte OtherData = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine("OtherData = {0}", OtherData);
|
||||
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
if ((OtherData & 1) > 0)
|
||||
{
|
||||
OutputStream.WriteLine("OD: {0}", Buffer.ReadString(false));
|
||||
OutputStream.WriteLine("OD: {0}", Buffer.ReadString(false));
|
||||
OutputStream.WriteLine("OD: {0}", Buffer.ReadString(false));
|
||||
Buffer.SkipBytes(53);
|
||||
}
|
||||
|
||||
if ((OtherData & 4) > 0)
|
||||
{
|
||||
OutputStream.WriteLine("Aura: {0}", Buffer.ReadString(false));
|
||||
OutputStream.WriteLine("Aura: {0}", Buffer.ReadString(false));
|
||||
Buffer.SkipBytes(54);
|
||||
}
|
||||
|
||||
byte Properties = Buffer.ReadByte();
|
||||
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);
|
||||
|
||||
for (int i = 1; i < Properties; ++i)
|
||||
OutputStream.WriteLine(" Prop: {0}", Buffer.ReadUInt32());
|
||||
|
||||
OutputStream.WriteLine("Position is now {0}", Buffer.GetPosition());
|
||||
|
||||
byte HP = Buffer.ReadByte();
|
||||
byte HairColor = Buffer.ReadByte();
|
||||
byte BeardColor = Buffer.ReadByte();
|
||||
byte Eye1 = Buffer.ReadByte();
|
||||
byte Eye2 = Buffer.ReadByte();
|
||||
byte HairStyle = Buffer.ReadByte();
|
||||
byte BeardStyle = Buffer.ReadByte();
|
||||
OutputStream.WriteLine("Beardstyle is {0}", BeardStyle);
|
||||
|
||||
Buffer.SkipBytes(12); // Drakkin stuff
|
||||
byte EquipChest2 = Buffer.ReadByte();
|
||||
Buffer.SkipBytes(2);
|
||||
byte Helm = Buffer.ReadByte();
|
||||
|
||||
|
||||
float Size = Buffer.ReadSingle();
|
||||
|
||||
byte Face = Buffer.ReadByte();
|
||||
|
||||
float WalkSpeed = Buffer.ReadSingle();
|
||||
|
||||
float RunSpeed = Buffer.ReadSingle();
|
||||
|
||||
UInt32 Race = Buffer.ReadUInt32();
|
||||
|
||||
OutputStream.WriteLine("Size: {0}, Face: {1}, Walkspeed: {2}, RunSpeed: {3}, Race: {4}", Size, Face, WalkSpeed, RunSpeed, Race);
|
||||
|
||||
Buffer.SkipBytes(18);
|
||||
|
||||
Buffer.ReadString(false);
|
||||
|
||||
Buffer.SkipBytes(35);
|
||||
|
||||
|
||||
if ((IsNPC == 0) || NPCType.IsPlayableRace(Race))
|
||||
{
|
||||
for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot)
|
||||
OutputStream.WriteLine("Color {0} is {1}", ColourSlot, Buffer.ReadUInt32());
|
||||
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
UInt32 Equip3 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equipx = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip0 = Buffer.ReadUInt32();
|
||||
|
||||
OutputStream.WriteLine("Equip slot {0}: 0,1,2,x,3 is {1}, {2}, {3}, {4}, {5}", i,
|
||||
Equip0, Equip1, Equip2, Equipx, Equip3);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Non playable race
|
||||
// Melee Texture 1 is 20 bytes in
|
||||
// Melee Texture 1 is 40 bytes in
|
||||
// This whole segment is 28 + 24 + 8 = 60
|
||||
// Skip 20, Read m1, skip 16, read m2, skip 16
|
||||
/*
|
||||
OutputStream.WriteLine("None playable race, offset now {0}", Buffer.GetPosition());
|
||||
Buffer.SkipBytes(28);
|
||||
|
||||
UInt32 MeleeTexture1 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(12);
|
||||
UInt32 MeleeTexture2 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(12);
|
||||
*/
|
||||
OutputStream.WriteLine("None playable race, offset now {0}", Buffer.GetPosition());
|
||||
Buffer.SkipBytes(20);
|
||||
|
||||
UInt32 MeleeTexture1 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(16);
|
||||
UInt32 MeleeTexture2 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(16);
|
||||
}
|
||||
|
||||
OutputStream.WriteLine("Position starts at offset {0}", Buffer.GetPosition());
|
||||
|
||||
UInt32 Position1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position3 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position4 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position5 = Buffer.ReadUInt32();
|
||||
|
||||
float YPos = Utils.EQ19ToFloat((Int32)((Position4 >> 13) & 0x7FFFF));
|
||||
|
||||
float ZPos = Utils.EQ19ToFloat((Int32)(Position5 >> 10) & 0x7FFFF);
|
||||
|
||||
float XPos = Utils.EQ19ToFloat((Int32)(Position2 >> 10) & 0x7FFFF);
|
||||
|
||||
//float Heading = Utils.EQ19ToFloat((Int32)(Position1 >> 13) & 0x3FF);
|
||||
//float Heading = Utils.EQ19ToFloat((Int32)(Position2) & 0x3FF);
|
||||
float Heading = Utils.EQ19ToFloat((Int32)(Position3) & 0x3FF);
|
||||
|
||||
//for(int i = 0; i < 32; ++i)
|
||||
// OutputStream.WriteLine("Pos3 << {0} = {1}", i, Utils.EQ19ToFloat((Int32)(Position3 >> i) & 0x3FF));
|
||||
|
||||
OutputStream.WriteLine("(X,Y,Z) = {0}, {1}, {2}, Heading = {3}", XPos, YPos, ZPos, Heading);
|
||||
|
||||
if ((OtherData & 16) > 1)
|
||||
OutputStream.WriteLine("Title: {0}", Buffer.ReadString(false));
|
||||
|
||||
if ((OtherData & 32) > 1)
|
||||
OutputStream.WriteLine("Suffix: {0}", Buffer.ReadString(false));
|
||||
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
byte IsMerc = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine("IsMerc: {0}", IsMerc);
|
||||
|
||||
Buffer.SkipBytes(54);
|
||||
|
||||
OutputStream.WriteLine("Buffer Length: {0}, Current Position: {1}", Buffer.Length(), Buffer.GetPosition());
|
||||
|
||||
if (Buffer.Length() != Buffer.GetPosition())
|
||||
OutputStream.WriteLine("PARSE ERROR");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
//
|
||||
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
|
||||
//
|
||||
//
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchJuly132010Decoder : PatchMay122010Decoder
|
||||
{
|
||||
public PatchJuly132010Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date July 13 2010. (Including Test Server June 24 to July 8 2010).";
|
||||
|
||||
ExpectedPPLength = 26640;
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
base.RegisterExplorers();
|
||||
|
||||
//OpManager.RegisterExplorer("OP_ZoneEntry", ExploreZoneEntry);
|
||||
//OpManager.RegisterExplorer("OP_CastSpell", ExploreCastSpell);
|
||||
//OpManager.RegisterExplorer("OP_SpawnAppearance", ExploreSpawnAppearance);
|
||||
//OpManager.RegisterExplorer("OP_ItemPacket", ExploreItemPacket);
|
||||
}
|
||||
|
||||
public void ExploreItemPacket(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt32 StackSize = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(4);
|
||||
UInt32 Slot = Buffer.ReadUInt32();
|
||||
UInt32 MerchantSlot = Buffer.ReadUInt32();
|
||||
UInt32 Price = Buffer.ReadUInt32();
|
||||
Int32 Quantity = Buffer.ReadInt32();
|
||||
Buffer.SetPosition(68);
|
||||
string Name = Buffer.ReadString(true);
|
||||
|
||||
OutputStream.WriteLine("Item: {0} at Slot: {1}", Name, Slot);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void ExploreCastSpell(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt32 Slot = Buffer.ReadUInt32();
|
||||
UInt32 SpellID = Buffer.ReadUInt32();
|
||||
|
||||
OutputStream.WriteLine("Casting spell {0} from slot {1}", SpellID, Slot);
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
public void ExploreMercenaryDataResponse(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt32 TypeCount = Buffer.ReadUInt32();
|
||||
|
||||
//OutputStream.WriteLine("Type Count: {0}\r\n", TypeCount);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Number of Types (Journeyman and Apprentice in this case\r\n", TypeCount);
|
||||
for (int i = 0; i < TypeCount; ++i)
|
||||
{
|
||||
UInt32 TypeDBStringID = Buffer.ReadUInt32();
|
||||
//OutputStream.WriteLine(" Type {0} DBStringID {1}", i, TypeDBStringID);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID for Type {1}", TypeDBStringID, i);
|
||||
}
|
||||
|
||||
UInt32 Count2 = Buffer.ReadUInt32();
|
||||
|
||||
//OutputStream.WriteLine(" Count 2 is {0}", Count2);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Count of Sub-types that follow", Count2);
|
||||
|
||||
for (int i = 0; i < Count2; ++i)
|
||||
{
|
||||
int Offset = Buffer.GetPosition();
|
||||
|
||||
UInt32 Unknown1 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown1);
|
||||
UInt32 DBStringID1 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID of Type", DBStringID1);
|
||||
UInt32 DBStringID2 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID of Sub-Type", DBStringID2);
|
||||
UInt32 PurchaseCost = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Purchase Cost", PurchaseCost);
|
||||
UInt32 UpkeepCost = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Upkeep Cost", UpkeepCost);
|
||||
UInt32 Unknown2 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown2);
|
||||
UInt32 Unknown3 = Buffer.ReadUInt32();
|
||||
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);
|
||||
|
||||
UInt32 Unknown6 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown6);
|
||||
UInt32 Unknown7 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown7);
|
||||
UInt32 Unknown8 = Buffer.ReadUInt32();
|
||||
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();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown10);
|
||||
|
||||
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",
|
||||
// Unknown2, Unknown3, Unknown4, Unknown5, Unknown6, Unknown7, Unknown8, Unknown10, Unknown11);
|
||||
|
||||
//OutputStream.WriteLine(" Stance Count: {0}", StanceCount);
|
||||
|
||||
for (int j = 0; j < StanceCount; ++j)
|
||||
{
|
||||
UInt32 StanceNum = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Stance Number", StanceNum);
|
||||
UInt32 StanceType = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Stance DBStringID (1 = Passive, 2 = Balanced etc.", StanceType);
|
||||
|
||||
//OutputStream.WriteLine(" {0}: {1}", StanceNum, StanceType);
|
||||
}
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
OutputStream.WriteLine("\r\nBuffer position at end is {0}", Buffer.GetPosition());
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchJuly132012Decoder : PatchJune252012Decoder
|
||||
{
|
||||
public PatchJuly132012Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date July 13 2012.";
|
||||
|
||||
ExpectedPPLength = 33784;
|
||||
|
||||
PPZoneIDOffset = 26452;
|
||||
|
||||
PatchConfFileName = "patch_July13-2012.conf";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchJune252012Decoder : PatchMar152012Decoder
|
||||
{
|
||||
public PatchJune252012Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date June 25 2012.";
|
||||
|
||||
PatchConfFileName = "patch_June25-2012.conf";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,458 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchMar152012Decoder : PatchNov172011Decoder
|
||||
{
|
||||
public PatchMar152012Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date March 15 2012.";
|
||||
|
||||
ExpectedPPLength = 29688;
|
||||
|
||||
PPZoneIDOffset = 22356;
|
||||
|
||||
PatchConfFileName = "patch_Mar15-2012.conf";
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
//OpManager.RegisterExplorer("OP_ZoneEntry", ExploreZoneEntry);
|
||||
}
|
||||
|
||||
public void ExploreZoneEntry(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
if (Direction != PacketDirection.ServerToClient)
|
||||
return;
|
||||
|
||||
string SpawnName = Buffer.ReadString(true);
|
||||
|
||||
UInt32 SpawnID = Buffer.ReadUInt32();
|
||||
|
||||
byte Level = Buffer.ReadByte();
|
||||
|
||||
float UnkSize = Buffer.ReadSingle();
|
||||
|
||||
byte IsNPC = Buffer.ReadByte();
|
||||
|
||||
UInt32 Bitfield = Buffer.ReadUInt32();
|
||||
/*
|
||||
NewSpawn.Showname = (Bitfield >> 28) & 1;
|
||||
NewSpawn.TargetableWithHotkey = (Bitfield >> 27) & 1;
|
||||
NewSpawn.Targetable = (Bitfield >> 26) & 1;
|
||||
|
||||
NewSpawn.ShowHelm = (Bitfield >> 24) & 1;
|
||||
NewSpawn.Gender = (Bitfield >> 20) & 3;
|
||||
|
||||
NewSpawn.Padding5 = (Bitfield >> 4) & 1;
|
||||
NewSpawn.Padding7 = (Bitfield >> 6) & 2047;
|
||||
NewSpawn.Padding26 = (Bitfield >> 25) & 1;
|
||||
*/
|
||||
Byte OtherData = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip 8 unknown bytes
|
||||
|
||||
//NewSpawn.DestructableString1 = "";
|
||||
//NewSpawn.DestructableString2 = "";
|
||||
//NewSpawn.DestructableString3 = "";
|
||||
|
||||
if ((IsNPC > 0) && ((OtherData & 3) > 0))
|
||||
{
|
||||
// Destructable Objects. Not handled yet
|
||||
//
|
||||
//SQLOut(String.Format("-- OBJECT FOUND SpawnID {0}", SpawnID.ToString("x")));
|
||||
|
||||
Buffer.ReadString(false);
|
||||
|
||||
Buffer.ReadString(false);
|
||||
|
||||
Buffer.ReadString(false);
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadUInt32();
|
||||
|
||||
Buffer.ReadByte();
|
||||
|
||||
|
||||
}
|
||||
OutputStream.WriteLine("Size starts at offset {0}", Buffer.GetPosition());
|
||||
|
||||
float Size = Buffer.ReadSingle();
|
||||
|
||||
byte Face = Buffer.ReadByte();
|
||||
|
||||
float WalkSpeed = Buffer.ReadSingle();
|
||||
|
||||
float RunSpeed = Buffer.ReadSingle();
|
||||
|
||||
UInt32 Race = Buffer.ReadUInt32();
|
||||
|
||||
byte PropCount = Buffer.ReadByte();
|
||||
|
||||
UInt32 BodyType = 0;
|
||||
|
||||
if (PropCount >= 1)
|
||||
{
|
||||
BodyType = Buffer.ReadUInt32();
|
||||
|
||||
for (int j = 1; j < PropCount; ++j)
|
||||
Buffer.SkipBytes(4);
|
||||
}
|
||||
|
||||
Buffer.SkipBytes(1); // Skip HP %
|
||||
|
||||
byte HairColor = Buffer.ReadByte();
|
||||
byte BeardColor = Buffer.ReadByte();
|
||||
byte EyeColor1 = Buffer.ReadByte();
|
||||
byte EyeColor2 = Buffer.ReadByte();
|
||||
byte HairStyle = Buffer.ReadByte();
|
||||
byte Beard = Buffer.ReadByte();
|
||||
|
||||
UInt32 DrakkinHeritage = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 DrakkinTattoo = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 DrakkinDetails = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(1); // Skip Holding
|
||||
|
||||
UInt32 Deity = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip GuildID and GuildRank
|
||||
|
||||
byte Class = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(4); // Skip PVP, Standstate, Light, Flymode
|
||||
|
||||
byte EquipChest2 = Buffer.ReadByte();
|
||||
|
||||
bool UseWorn = (EquipChest2 == 255);
|
||||
|
||||
Buffer.SkipBytes(2); // 2 Unknown bytes;
|
||||
|
||||
byte Helm = Buffer.ReadByte();
|
||||
|
||||
string LastName = Buffer.ReadString(true);
|
||||
|
||||
Buffer.SkipBytes(5); // AATitle + unknown byte
|
||||
|
||||
UInt32 PetOwnerID = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(26); // Unknown byte + 6 unknown uint32
|
||||
|
||||
OutputStream.WriteLine("Position starts at offset {0}", Buffer.GetPosition());
|
||||
|
||||
UInt32 Position1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position3 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position4 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position5 = Buffer.ReadUInt32();
|
||||
|
||||
float YPos = Utils.EQ19ToFloat((Int32)(Position3 & 0x7FFFF));
|
||||
|
||||
float Heading = Utils.EQ19ToFloat((Int32)(Position4 & 0xFFF));
|
||||
|
||||
float XPos = Utils.EQ19ToFloat((Int32)(Position4 >> 12) & 0x7FFFF);
|
||||
|
||||
float ZPos = Utils.EQ19ToFloat((Int32)(Position5 & 0x7FFFF));
|
||||
|
||||
OutputStream.WriteLine("(X,Y,Z) = {0}, {1}, {2}, Heading = {3}", XPos, YPos, ZPos, Heading);
|
||||
|
||||
if (NPCType.IsPlayableRace(Race))
|
||||
{
|
||||
for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot)
|
||||
OutputStream.WriteLine("Color {0} is {1}", ColourSlot, Buffer.ReadUInt32());
|
||||
}
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
|
||||
}
|
||||
|
||||
override public List<ZoneEntryStruct> GetSpawns()
|
||||
{
|
||||
List<ZoneEntryStruct> ZoneSpawns = new List<ZoneEntryStruct>();
|
||||
|
||||
List<byte[]> SpawnPackets = GetPacketsOfType("OP_ZoneEntry", PacketDirection.ServerToClient);
|
||||
|
||||
foreach (byte[] SpawnPacket in SpawnPackets)
|
||||
{
|
||||
ZoneEntryStruct NewSpawn = new ZoneEntryStruct();
|
||||
|
||||
ByteStream Buffer = new ByteStream(SpawnPacket);
|
||||
|
||||
NewSpawn.SpawnName = Buffer.ReadString(true);
|
||||
|
||||
NewSpawn.SpawnName = Utils.MakeCleanName(NewSpawn.SpawnName);
|
||||
|
||||
NewSpawn.SpawnID = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.Level = Buffer.ReadByte();
|
||||
|
||||
float UnkSize = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.IsNPC = Buffer.ReadByte();
|
||||
|
||||
UInt32 Bitfield = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.Showname = (Bitfield >> 28) & 1;
|
||||
NewSpawn.TargetableWithHotkey = (Bitfield >> 27) & 1;
|
||||
NewSpawn.Targetable = (Bitfield >> 26) & 1;
|
||||
|
||||
NewSpawn.ShowHelm = (Bitfield >> 24) & 1;
|
||||
NewSpawn.Gender = (Bitfield >> 20) & 3;
|
||||
|
||||
NewSpawn.Padding5 = (Bitfield >> 4) & 1;
|
||||
NewSpawn.Padding7 = (Bitfield >> 6) & 2047;
|
||||
NewSpawn.Padding26 = (Bitfield >> 25) & 1;
|
||||
|
||||
Byte OtherData = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip 8 unknown bytes
|
||||
|
||||
NewSpawn.DestructableString1 = "";
|
||||
NewSpawn.DestructableString2 = "";
|
||||
NewSpawn.DestructableString3 = "";
|
||||
|
||||
if ((NewSpawn.IsNPC > 0) && ((OtherData & 3) > 0))
|
||||
{
|
||||
// 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);
|
||||
|
||||
NewSpawn.DestructableString3 = Buffer.ReadString(false);
|
||||
|
||||
NewSpawn.DestructableUnk1 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk2 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID1 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID2 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID3 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID4 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk3 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk4 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk5 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk6 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk7 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk8 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk9 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableByte = Buffer.ReadByte();
|
||||
|
||||
//SQLOut(String.Format("-- DES: {0,8:x} {1,8:x} {2,8:d} {3,8:d} {4,8:d} {5,8:d} {6,8:x} {7,8:x} {8,8:x} {9,8:x} {10,8:x} {11,8:x} {12,8:x} {13,2:x} {14} {15} {16}",
|
||||
// DestructableUnk1, DestructableUnk2, DestructableID1, DestructableID2, DestructableID3, DestructableID4,
|
||||
// DestructableUnk3, DestructableUnk4, DestructableUnk5, DestructableUnk6, DestructableUnk7, DestructableUnk8,
|
||||
// DestructableUnk9, DestructableByte, DestructableString1, DestructableString2, DestructableString3));
|
||||
}
|
||||
|
||||
NewSpawn.Size = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.Face = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.WalkSpeed = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.RunSpeed = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.Race = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.PropCount = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.BodyType = 0;
|
||||
|
||||
if (NewSpawn.PropCount >= 1)
|
||||
{
|
||||
NewSpawn.BodyType = Buffer.ReadUInt32();
|
||||
|
||||
for (int j = 1; j < NewSpawn.PropCount; ++j)
|
||||
Buffer.SkipBytes(4);
|
||||
}
|
||||
|
||||
Buffer.SkipBytes(1); // Skip HP %
|
||||
|
||||
NewSpawn.HairColor = Buffer.ReadByte();
|
||||
NewSpawn.BeardColor = Buffer.ReadByte();
|
||||
NewSpawn.EyeColor1 = Buffer.ReadByte();
|
||||
NewSpawn.EyeColor2 = Buffer.ReadByte();
|
||||
NewSpawn.HairStyle = Buffer.ReadByte();
|
||||
NewSpawn.Beard = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.DrakkinHeritage = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DrakkinTattoo = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DrakkinDetails = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(1); // Skip Holding
|
||||
|
||||
NewSpawn.Deity = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip GuildID and GuildRank
|
||||
|
||||
NewSpawn.Class = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(4); // Skip PVP, Standstate, Light, Flymode
|
||||
|
||||
NewSpawn.EquipChest2 = Buffer.ReadByte();
|
||||
|
||||
bool UseWorn = (NewSpawn.EquipChest2 == 255);
|
||||
|
||||
Buffer.SkipBytes(2); // 2 Unknown bytes;
|
||||
|
||||
NewSpawn.Helm = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.LastName = Buffer.ReadString(true);
|
||||
|
||||
Buffer.SkipBytes(5); // AATitle + unknown byte
|
||||
|
||||
NewSpawn.PetOwnerID = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(26); // Unknown byte + 6 unknown uint32
|
||||
|
||||
UInt32 Position1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position3 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position4 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position5 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.YPos = Utils.EQ19ToFloat((Int32)(Position3 & 0x7FFFF));
|
||||
|
||||
NewSpawn.Heading = Utils.EQ19ToFloat((Int32)(Position4 & 0xFFF));
|
||||
|
||||
NewSpawn.XPos = Utils.EQ19ToFloat((Int32)(Position4 >> 12) & 0x7FFFF);
|
||||
|
||||
NewSpawn.ZPos = Utils.EQ19ToFloat((Int32)(Position5 & 0x7FFFF));
|
||||
|
||||
NewSpawn.MeleeTexture1 = 0;
|
||||
NewSpawn.MeleeTexture2 = 0;
|
||||
|
||||
if (NPCType.IsPlayableRace(NewSpawn.Race))
|
||||
{
|
||||
for (int ColourSlot = 0; ColourSlot < 9; ++ColourSlot)
|
||||
NewSpawn.SlotColour[ColourSlot] = Buffer.ReadUInt32();
|
||||
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
NewSpawn.Equipment[i] = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip0 = Buffer.ReadUInt32();
|
||||
}
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_CHEST] > 0)
|
||||
{
|
||||
NewSpawn.EquipChest2 = (byte)NewSpawn.Equipment[Constants.MATERIAL_CHEST];
|
||||
|
||||
}
|
||||
|
||||
NewSpawn.ArmorTintRed = (byte)((NewSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 16) & 0xff);
|
||||
|
||||
NewSpawn.ArmorTintGreen = (byte)((NewSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 8) & 0xff);
|
||||
|
||||
NewSpawn.ArmorTintBlue = (byte)(NewSpawn.SlotColour[Constants.MATERIAL_CHEST] & 0xff);
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_PRIMARY] > 0)
|
||||
NewSpawn.MeleeTexture1 = NewSpawn.Equipment[Constants.MATERIAL_PRIMARY];
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_SECONDARY] > 0)
|
||||
NewSpawn.MeleeTexture2 = NewSpawn.Equipment[Constants.MATERIAL_SECONDARY];
|
||||
|
||||
if (UseWorn)
|
||||
NewSpawn.Helm = (byte)NewSpawn.Equipment[Constants.MATERIAL_HEAD];
|
||||
else
|
||||
NewSpawn.Helm = 0;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Non playable race
|
||||
|
||||
Buffer.SkipBytes(16);
|
||||
|
||||
NewSpawn.MeleeTexture1 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(12);
|
||||
NewSpawn.MeleeTexture2 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(12);
|
||||
}
|
||||
|
||||
if (NewSpawn.EquipChest2 == 255)
|
||||
NewSpawn.EquipChest2 = 0;
|
||||
|
||||
if (NewSpawn.Helm == 255)
|
||||
NewSpawn.Helm = 0;
|
||||
|
||||
if ((OtherData & 4) > 0)
|
||||
{
|
||||
NewSpawn.Title = Buffer.ReadString(false);
|
||||
}
|
||||
|
||||
if ((OtherData & 8) > 0)
|
||||
{
|
||||
NewSpawn.Suffix = Buffer.ReadString(false);
|
||||
}
|
||||
|
||||
// unknowns
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
NewSpawn.IsMercenary = Buffer.ReadByte();
|
||||
|
||||
ZoneSpawns.Add(NewSpawn);
|
||||
}
|
||||
|
||||
return ZoneSpawns;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchMarch152011Decoder : PatchFeb082011Decoder
|
||||
{
|
||||
public PatchMarch152011Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date March 2011.";
|
||||
|
||||
PatchConfFileName = "patch_March15-2011.conf";
|
||||
|
||||
ExpectedPPLength = 28536;
|
||||
|
||||
PPZoneIDOffset = 21204;
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,296 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchMay122011Decoder : PatchMarch152011Decoder
|
||||
{
|
||||
public PatchMay122011Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date May 12 2011.";
|
||||
|
||||
PatchConfFileName = "patch_May12-2011.conf";
|
||||
|
||||
ExpectedPPLength = 28536;
|
||||
|
||||
PPZoneIDOffset = 21204;
|
||||
}
|
||||
|
||||
override public PositionUpdate Decode_OP_NPCMoveUpdate(byte[] UpdatePacket)
|
||||
{
|
||||
PositionUpdate PosUpdate = new PositionUpdate();
|
||||
|
||||
BitStream bs = new BitStream(UpdatePacket, (uint)UpdatePacket.Length);
|
||||
|
||||
PosUpdate.SpawnID = bs.readUInt(16);
|
||||
|
||||
UInt32 Unknown = bs.readUInt(16);
|
||||
|
||||
UInt32 VFlags = bs.readUInt(6);
|
||||
|
||||
PosUpdate.p.y = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
PosUpdate.p.x = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
PosUpdate.p.z = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
PosUpdate.p.heading = (float)bs.readInt(12) / (float)(1 << 3);
|
||||
|
||||
PosUpdate.HighRes = true;
|
||||
|
||||
return PosUpdate;
|
||||
}
|
||||
|
||||
override public PositionUpdate Decode_OP_MobUpdate(byte[] MobUpdatePacket)
|
||||
{
|
||||
PositionUpdate PosUpdate = new PositionUpdate();
|
||||
|
||||
ByteStream Buffer = new ByteStream(MobUpdatePacket);
|
||||
|
||||
PosUpdate.SpawnID = Buffer.ReadUInt16();
|
||||
|
||||
Buffer.SkipBytes(2);
|
||||
|
||||
UInt32 Word1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Word2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt16 Word3 = Buffer.ReadUInt16();
|
||||
|
||||
PosUpdate.p.y = Utils.EQ19ToFloat((Int32)(Word1 & 0x7FFFF));
|
||||
|
||||
// Z is in the top 13 bits of Word1 and the bottom 6 of Word2
|
||||
|
||||
UInt32 ZPart1 = Word1 >> 19; // ZPart1 now has low order bits of Z in bottom 13 bits
|
||||
UInt32 ZPart2 = Word2 & 0x3F; // ZPart2 now has high order bits of Z in bottom 6 bits
|
||||
|
||||
ZPart2 = ZPart2 << 13;
|
||||
|
||||
PosUpdate.p.z = Utils.EQ19ToFloat((Int32)(ZPart1 | ZPart2));
|
||||
|
||||
PosUpdate.p.x = Utils.EQ19ToFloat((Int32)(Word2 >> 6) & 0x7FFFF);
|
||||
|
||||
PosUpdate.p.heading = Utils.EQ19ToFloat((Int32)(Word3 & 0xFFF));
|
||||
|
||||
PosUpdate.HighRes = false;
|
||||
|
||||
return PosUpdate;
|
||||
}
|
||||
|
||||
override public List<ZonePoint> GetZonePointList()
|
||||
{
|
||||
List<ZonePoint> ZonePointList = new List<ZonePoint>();
|
||||
|
||||
List<byte[]> ZonePointPackets = GetPacketsOfType("OP_SendZonepoints", PacketDirection.ServerToClient);
|
||||
|
||||
if (ZonePointPackets.Count < 1)
|
||||
{
|
||||
return ZonePointList;
|
||||
}
|
||||
|
||||
// Assume there is only 1 packet and process the first one.
|
||||
|
||||
ByteStream Buffer = new ByteStream(ZonePointPackets[0]);
|
||||
|
||||
UInt32 Entries = Buffer.ReadUInt32();
|
||||
|
||||
if (Entries == 0)
|
||||
return ZonePointList;
|
||||
|
||||
float x, y, z, Heading;
|
||||
|
||||
UInt32 Number;
|
||||
|
||||
UInt16 ZoneID, Instance;
|
||||
|
||||
ZonePointList = new List<ZonePoint>();
|
||||
|
||||
for (int i = 0; i < Entries; ++i)
|
||||
{
|
||||
Number = Buffer.ReadUInt32();
|
||||
|
||||
y = Buffer.ReadSingle();
|
||||
|
||||
x = Buffer.ReadSingle();
|
||||
|
||||
z = Buffer.ReadSingle();
|
||||
|
||||
Heading = Buffer.ReadSingle();
|
||||
|
||||
if (Heading != 999)
|
||||
Heading = Heading / 2;
|
||||
|
||||
ZoneID = Buffer.ReadUInt16();
|
||||
|
||||
Instance = Buffer.ReadUInt16();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip the last UInt32
|
||||
|
||||
ZonePoint NewZonePoint = new ZonePoint(Number, ZoneID, Instance, x, y, z, x, y, z, Heading, ZoneID);
|
||||
|
||||
ZonePointList.Add(NewZonePoint);
|
||||
}
|
||||
|
||||
return ZonePointList;
|
||||
}
|
||||
override public bool DumpAAs(string FileName)
|
||||
{
|
||||
List<byte[]> AAPackets = GetPacketsOfType("OP_SendAATable", PacketDirection.ServerToClient);
|
||||
|
||||
|
||||
if (AAPackets.Count < 1)
|
||||
return false;
|
||||
|
||||
StreamWriter OutputFile;
|
||||
|
||||
try
|
||||
{
|
||||
OutputFile = new StreamWriter(FileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
OutputFile.WriteLine("-- There are " + AAPackets.Count + " OP_SendAATable packets.");
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
foreach (byte[] Packet in AAPackets)
|
||||
{
|
||||
UInt32 AAID = BitConverter.ToUInt32(Packet, 0);
|
||||
UInt32 Unknown004 = BitConverter.ToUInt32(Packet, 4);
|
||||
UInt32 HotKeySID = BitConverter.ToUInt32(Packet, 5);
|
||||
UInt32 HotKeySID2 = BitConverter.ToUInt32(Packet, 9);
|
||||
UInt32 TitleSID = BitConverter.ToUInt32(Packet, 13);
|
||||
UInt32 DescSID = BitConverter.ToUInt32(Packet, 17);
|
||||
UInt32 ClassType = BitConverter.ToUInt32(Packet, 21);
|
||||
UInt32 Cost = BitConverter.ToUInt32(Packet, 25);
|
||||
UInt32 Seq = BitConverter.ToUInt32(Packet, 29);
|
||||
UInt32 CurrentLevel = BitConverter.ToUInt32(Packet, 33);
|
||||
UInt32 Unknown037 = BitConverter.ToUInt32(Packet, 37);
|
||||
UInt32 PrereqSkill = BitConverter.ToUInt32(Packet, 41);
|
||||
UInt32 PrereqMinpoints = BitConverter.ToUInt32(Packet, 45);
|
||||
UInt32 Type = BitConverter.ToUInt32(Packet, 49);
|
||||
UInt32 SpellID = BitConverter.ToUInt32(Packet, 53);
|
||||
UInt32 Unknown057 = BitConverter.ToUInt32(Packet, 57);
|
||||
UInt32 SpellType = BitConverter.ToUInt32(Packet, 61);
|
||||
UInt32 SpellRefresh = BitConverter.ToUInt32(Packet, 65);
|
||||
UInt16 Classes = BitConverter.ToUInt16(Packet, 69);
|
||||
UInt16 Berserker = BitConverter.ToUInt16(Packet, 71);
|
||||
UInt32 MaxLevel = BitConverter.ToUInt32(Packet, 73);
|
||||
UInt32 LastID = BitConverter.ToUInt32(Packet, 77);
|
||||
UInt32 NextID = BitConverter.ToUInt32(Packet, 81);
|
||||
UInt32 Cost2 = BitConverter.ToUInt32(Packet, 85);
|
||||
UInt32 AAExpansion = BitConverter.ToUInt32(Packet, 96);
|
||||
UInt32 SpecialCategory = BitConverter.ToUInt32(Packet, 100);
|
||||
UInt32 TotalAbilities = BitConverter.ToUInt32(Packet, 108);
|
||||
|
||||
OutputFile.WriteLine(String.Format("AAID: {0}", AAID));
|
||||
OutputFile.WriteLine(" Unknown004:\t" + Unknown004);
|
||||
OutputFile.WriteLine(" HotkeySID:\t" + HotKeySID);
|
||||
OutputFile.WriteLine(" HotkeySID2:\t" + HotKeySID2);
|
||||
OutputFile.WriteLine(" TitleSID:\t" + TitleSID);
|
||||
OutputFile.WriteLine(" DescSID:\t" + DescSID);
|
||||
OutputFile.WriteLine(" ClassType:\t" + ClassType);
|
||||
OutputFile.WriteLine(" Cost:\t\t" + Cost);
|
||||
OutputFile.WriteLine(" Seq:\t\t" + Seq);
|
||||
OutputFile.WriteLine(" CurrentLevel:\t" + CurrentLevel);
|
||||
OutputFile.WriteLine(" Unknown037:\t" + Unknown037);
|
||||
OutputFile.WriteLine(" PrereqSkill:\t" + PrereqSkill);
|
||||
OutputFile.WriteLine(" PrereqMinPt:\t" + PrereqMinpoints);
|
||||
OutputFile.WriteLine(" Type:\t\t" + Type);
|
||||
OutputFile.WriteLine(" SpellID:\t" + SpellID);
|
||||
OutputFile.WriteLine(" Unknown057:\t" + Unknown057);
|
||||
OutputFile.WriteLine(" SpellType:\t" + SpellType);
|
||||
OutputFile.WriteLine(" SpellRefresh:\t" + SpellRefresh);
|
||||
OutputFile.WriteLine(" Classes:\t" + Classes);
|
||||
OutputFile.WriteLine(" Berserker:\t" + Berserker);
|
||||
OutputFile.WriteLine(" MaxLevel:\t" + MaxLevel);
|
||||
OutputFile.WriteLine(" LastID:\t" + LastID);
|
||||
OutputFile.WriteLine(" NextID:\t" + NextID);
|
||||
OutputFile.WriteLine(" Cost2:\t\t" + Cost2);
|
||||
OutputFile.WriteLine(" AAExpansion:\t" + AAExpansion);
|
||||
OutputFile.WriteLine(" SpecialCat:\t" + SpecialCategory);
|
||||
OutputFile.WriteLine("");
|
||||
OutputFile.WriteLine(" TotalAbilities:\t" + TotalAbilities);
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
for (int i = 0; i < TotalAbilities; ++i)
|
||||
{
|
||||
UInt32 Ability = BitConverter.ToUInt32(Packet, 112 + (i * 16));
|
||||
Int32 Base1 = BitConverter.ToInt32(Packet, 116 + (i * 16));
|
||||
Int32 Base2 = BitConverter.ToInt32(Packet, 120 + (i * 16));
|
||||
UInt32 Slot = BitConverter.ToUInt32(Packet, 124 + (i * 16));
|
||||
|
||||
OutputFile.WriteLine(String.Format(" Ability:\t{0}\tBase1:\t{1}\tBase2:\t{2}\tSlot:\t{3}", Ability, Base1, Base2, Slot));
|
||||
|
||||
}
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
}
|
||||
|
||||
OutputFile.Close();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
//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();
|
||||
|
||||
float ZPos = Buffer.ReadSingle();
|
||||
|
||||
float Heading = Buffer.ReadSingle();
|
||||
|
||||
UInt32 Incline = Buffer.ReadUInt32();
|
||||
|
||||
Int32 Size = Buffer.ReadInt32();
|
||||
|
||||
Buffer.SkipBytes(4); // Skip Unknown
|
||||
|
||||
Byte DoorID = Buffer.ReadByte();
|
||||
|
||||
Byte OpenType = Buffer.ReadByte();
|
||||
|
||||
Byte StateAtSpawn = Buffer.ReadByte();
|
||||
|
||||
Byte InvertState = Buffer.ReadByte();
|
||||
|
||||
Int32 DoorParam = Buffer.ReadInt32();
|
||||
|
||||
OutputStream.WriteLine(" Name: {0} ID: {1} OT: {2} SAS: {3} IS: {4} DP: {5}",
|
||||
DoorName, DoorID, OpenType, StateAtSpawn, InvertState, DoorParam);
|
||||
|
||||
// Skip past the trailing unknowns in the door struct, moving to the next door in the packet.
|
||||
|
||||
Buffer.SkipBytes(28);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchMay242011Decoder : PatchMay122011Decoder
|
||||
{
|
||||
public PatchMay242011Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date May 24 2011.";
|
||||
|
||||
ExpectedPPLength = 28856;
|
||||
|
||||
PPZoneIDOffset = 21524;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,456 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchNov172011Decoder : PatchAug042011Decoder
|
||||
{
|
||||
public PatchNov172011Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date November 17 2011.";
|
||||
|
||||
ExpectedPPLength = 29560;
|
||||
|
||||
PPZoneIDOffset = 22228;
|
||||
|
||||
PatchConfFileName = "patch_Nov17-2011.conf";
|
||||
}
|
||||
|
||||
override public List<ZoneEntryStruct> GetSpawns()
|
||||
{
|
||||
List<ZoneEntryStruct> ZoneSpawns = new List<ZoneEntryStruct>();
|
||||
|
||||
List<byte[]> SpawnPackets = GetPacketsOfType("OP_ZoneEntry", PacketDirection.ServerToClient);
|
||||
|
||||
foreach (byte[] SpawnPacket in SpawnPackets)
|
||||
{
|
||||
ZoneEntryStruct NewSpawn = new ZoneEntryStruct();
|
||||
|
||||
ByteStream Buffer = new ByteStream(SpawnPacket);
|
||||
|
||||
NewSpawn.SpawnName = Buffer.ReadString(true);
|
||||
|
||||
NewSpawn.SpawnName = Utils.MakeCleanName(NewSpawn.SpawnName);
|
||||
|
||||
NewSpawn.SpawnID = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.Level = Buffer.ReadByte();
|
||||
|
||||
float UnkSize = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.IsNPC = Buffer.ReadByte();
|
||||
|
||||
UInt32 Bitfield = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.Showname = (Bitfield >> 28) & 1;
|
||||
NewSpawn.TargetableWithHotkey = (Bitfield >> 27) & 1;
|
||||
NewSpawn.Targetable = (Bitfield >> 26) & 1;
|
||||
|
||||
NewSpawn.ShowHelm = (Bitfield >> 24) & 1;
|
||||
NewSpawn.Gender = (Bitfield >> 20) & 3;
|
||||
|
||||
NewSpawn.Padding5 = (Bitfield >> 4) & 1;
|
||||
NewSpawn.Padding7 = (Bitfield >> 6) & 2047;
|
||||
NewSpawn.Padding26 = (Bitfield >> 25) & 1;
|
||||
|
||||
Byte OtherData = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip 8 unknown bytes
|
||||
|
||||
NewSpawn.DestructableString1 = "";
|
||||
NewSpawn.DestructableString2 = "";
|
||||
NewSpawn.DestructableString3 = "";
|
||||
|
||||
if ((NewSpawn.IsNPC == 1) && ((OtherData & 3) > 0))
|
||||
{
|
||||
// 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);
|
||||
|
||||
NewSpawn.DestructableString3 = Buffer.ReadString(false);
|
||||
|
||||
NewSpawn.DestructableUnk1 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk2 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID1 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID2 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID3 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID4 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk3 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk4 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk5 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk6 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk7 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk8 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk9 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableByte = Buffer.ReadByte();
|
||||
|
||||
//SQLOut(String.Format("-- DES: {0,8:x} {1,8:x} {2,8:d} {3,8:d} {4,8:d} {5,8:d} {6,8:x} {7,8:x} {8,8:x} {9,8:x} {10,8:x} {11,8:x} {12,8:x} {13,2:x} {14} {15} {16}",
|
||||
// DestructableUnk1, DestructableUnk2, DestructableID1, DestructableID2, DestructableID3, DestructableID4,
|
||||
// DestructableUnk3, DestructableUnk4, DestructableUnk5, DestructableUnk6, DestructableUnk7, DestructableUnk8,
|
||||
// DestructableUnk9, DestructableByte, DestructableString1, DestructableString2, DestructableString3));
|
||||
}
|
||||
|
||||
NewSpawn.Size = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.Face = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.WalkSpeed = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.RunSpeed = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.Race = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.PropCount = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.BodyType = 0;
|
||||
|
||||
if (NewSpawn.PropCount >= 1)
|
||||
{
|
||||
NewSpawn.BodyType = Buffer.ReadUInt32();
|
||||
|
||||
for (int j = 1; j < NewSpawn.PropCount; ++j)
|
||||
Buffer.SkipBytes(4);
|
||||
}
|
||||
|
||||
Buffer.SkipBytes(1); // Skip HP %
|
||||
|
||||
NewSpawn.HairColor = Buffer.ReadByte();
|
||||
NewSpawn.BeardColor = Buffer.ReadByte();
|
||||
NewSpawn.EyeColor1 = Buffer.ReadByte();
|
||||
NewSpawn.EyeColor2 = Buffer.ReadByte();
|
||||
NewSpawn.HairStyle = Buffer.ReadByte();
|
||||
NewSpawn.Beard = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.DrakkinHeritage = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DrakkinTattoo = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DrakkinDetails = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(1); // Skip Holding
|
||||
|
||||
NewSpawn.Deity = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip GuildID and GuildRank
|
||||
|
||||
NewSpawn.Class = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(4); // Skip PVP, Standstate, Light, Flymode
|
||||
|
||||
NewSpawn.EquipChest2 = Buffer.ReadByte();
|
||||
|
||||
bool UseWorn = (NewSpawn.EquipChest2 == 255);
|
||||
|
||||
Buffer.SkipBytes(2); // 2 Unknown bytes;
|
||||
|
||||
NewSpawn.Helm = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.LastName = Buffer.ReadString(false);
|
||||
|
||||
Buffer.SkipBytes(5); // AATitle + unknown byte
|
||||
|
||||
NewSpawn.PetOwnerID = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(26); // Unknown byte + 6 unknown uint32
|
||||
|
||||
UInt32 Position1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position3 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position4 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position5 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.YPos = Utils.EQ19ToFloat((Int32)(Position3 & 0x7FFFF));
|
||||
|
||||
NewSpawn.Heading = Utils.EQ19ToFloat((Int32)(Position4 & 0xFFF));
|
||||
|
||||
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();
|
||||
|
||||
NewSpawn.MeleeTexture1 = 0;
|
||||
NewSpawn.MeleeTexture2 = 0;
|
||||
|
||||
if (NPCType.IsPlayableRace(NewSpawn.Race))
|
||||
{
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
NewSpawn.Equipment[i] = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip0 = Buffer.ReadUInt32();
|
||||
}
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_CHEST] > 0)
|
||||
{
|
||||
NewSpawn.EquipChest2 = (byte)NewSpawn.Equipment[Constants.MATERIAL_CHEST];
|
||||
|
||||
}
|
||||
|
||||
NewSpawn.ArmorTintRed = (byte)((NewSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 16) & 0xff);
|
||||
|
||||
NewSpawn.ArmorTintGreen = (byte)((NewSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 8) & 0xff);
|
||||
|
||||
NewSpawn.ArmorTintBlue = (byte)(NewSpawn.SlotColour[Constants.MATERIAL_CHEST] & 0xff);
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_PRIMARY] > 0)
|
||||
NewSpawn.MeleeTexture1 = NewSpawn.Equipment[Constants.MATERIAL_PRIMARY];
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_SECONDARY] > 0)
|
||||
NewSpawn.MeleeTexture2 = NewSpawn.Equipment[Constants.MATERIAL_SECONDARY];
|
||||
|
||||
if (UseWorn)
|
||||
NewSpawn.Helm = (byte)NewSpawn.Equipment[Constants.MATERIAL_HEAD];
|
||||
else
|
||||
NewSpawn.Helm = 0;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Non playable race
|
||||
NewSpawn.MeleeTexture1 = NewSpawn.SlotColour[3];
|
||||
NewSpawn.MeleeTexture2 = NewSpawn.SlotColour[6];
|
||||
}
|
||||
|
||||
if (NewSpawn.EquipChest2 == 255)
|
||||
NewSpawn.EquipChest2 = 0;
|
||||
|
||||
if (NewSpawn.Helm == 255)
|
||||
NewSpawn.Helm = 0;
|
||||
|
||||
if ((OtherData & 4) > 0)
|
||||
{
|
||||
NewSpawn.Title = Buffer.ReadString(false);
|
||||
}
|
||||
|
||||
if ((OtherData & 8) > 0)
|
||||
{
|
||||
NewSpawn.Suffix = Buffer.ReadString(false);
|
||||
}
|
||||
|
||||
// unknowns
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
NewSpawn.IsMercenary = Buffer.ReadByte();
|
||||
|
||||
ZoneSpawns.Add(NewSpawn);
|
||||
}
|
||||
|
||||
return ZoneSpawns;
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
//base.RegisterExplorers();
|
||||
|
||||
//OpManager.RegisterExplorer("OP_NPCMoveUpdate", ExploreNPCMoveUpdate);
|
||||
//OpManager.RegisterExplorer("OP_MobUpdate", ExploreMobUpdate);
|
||||
|
||||
}
|
||||
|
||||
public void ExploreNPCMoveUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
BitStream bs = new BitStream(Buffer.Buffer, Buffer.Length());
|
||||
|
||||
UInt32 SpawnID = bs.readUInt(16);
|
||||
|
||||
UInt32 Unknown = bs.readUInt(16);
|
||||
|
||||
UInt32 VFlags = bs.readUInt(6);
|
||||
|
||||
float y = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
float x = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
float z = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
float heading = (float)bs.readInt(12) / (float)(1 << 3);
|
||||
|
||||
OutputStream.WriteLine("Spawn: {0} Flags: {1}, XYZ: {2}, {3}, {4}, Heading: {5}", SpawnID, VFlags, x, y, z, heading);
|
||||
}
|
||||
|
||||
public void ExploreMobUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt32 SpawnID = Buffer.ReadUInt16();
|
||||
|
||||
Buffer.SkipBytes(2);
|
||||
|
||||
UInt32 Word1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Word2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt16 Word3 = Buffer.ReadUInt16();
|
||||
|
||||
float y = Utils.EQ19ToFloat((Int32)(Word1 & 0x7FFFF));
|
||||
|
||||
// Z is in the top 13 bits of Word1 and the bottom 6 of Word2
|
||||
|
||||
UInt32 ZPart1 = Word1 >> 19; // ZPart1 now has low order bits of Z in bottom 13 bits
|
||||
UInt32 ZPart2 = Word2 & 0x3F; // ZPart2 now has high order bits of Z in bottom 6 bits
|
||||
|
||||
ZPart2 = ZPart2 << 13;
|
||||
|
||||
float z = Utils.EQ19ToFloat((Int32)(ZPart1 | ZPart2));
|
||||
|
||||
float x = Utils.EQ19ToFloat((Int32)(Word2 >> 6) & 0x7FFFF);
|
||||
|
||||
float heading = Utils.EQ19ToFloat((Int32)(Word3 & 0xFFF));
|
||||
|
||||
OutputStream.WriteLine("Spawn: {0} XYZ: {1}, {2}, {3}, Heading: {4}", SpawnID, x, y, z, heading);
|
||||
}
|
||||
|
||||
override public bool DumpAAs(string FileName)
|
||||
{
|
||||
List<byte[]> AAPackets = GetPacketsOfType("OP_SendAATable", PacketDirection.ServerToClient);
|
||||
|
||||
|
||||
if (AAPackets.Count < 1)
|
||||
return false;
|
||||
|
||||
StreamWriter OutputFile;
|
||||
|
||||
try
|
||||
{
|
||||
OutputFile = new StreamWriter(FileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
OutputFile.WriteLine("-- There are " + AAPackets.Count + " OP_SendAATable packets.");
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
foreach (byte[] Packet in AAPackets)
|
||||
{
|
||||
ByteStream Buffer = new ByteStream(Packet);
|
||||
|
||||
UInt32 AAID = Buffer.ReadUInt32();
|
||||
byte Unknown004 = Buffer.ReadByte();
|
||||
UInt32 HotKeySID = Buffer.ReadUInt32();
|
||||
UInt32 HotKeySID2 = Buffer.ReadUInt32();
|
||||
UInt32 TitleSID = Buffer.ReadUInt32();
|
||||
UInt32 DescSID = Buffer.ReadUInt32();
|
||||
UInt32 ClassType = Buffer.ReadUInt32();
|
||||
UInt32 Cost = Buffer.ReadUInt32();
|
||||
UInt32 Seq = Buffer.ReadUInt32();
|
||||
UInt32 CurrentLevel = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 PreReqSkillCount = Buffer.ReadUInt32();
|
||||
UInt32 [] PreReqSkills = new UInt32[PreReqSkillCount];
|
||||
|
||||
for(int i = 0; i < PreReqSkillCount; ++i)
|
||||
PreReqSkills[i] = Buffer.ReadUInt32(); // The SEQ value of the AA packet containing the pre-req AA
|
||||
|
||||
UInt32 PreReqMinPointCount = Buffer.ReadUInt32();
|
||||
UInt32[] PreReqMinPoints = new UInt32[PreReqMinPointCount];
|
||||
|
||||
for (int i = 0; i < PreReqMinPointCount; ++i)
|
||||
PreReqMinPoints[i] = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Type = Buffer.ReadUInt32();
|
||||
UInt32 SpellID = Buffer.ReadUInt32();
|
||||
UInt32 Unknown057 = Buffer.ReadUInt32();
|
||||
UInt32 SpellType = Buffer.ReadUInt32();
|
||||
UInt32 SpellRefresh = Buffer.ReadUInt32();
|
||||
UInt16 Classes = Buffer.ReadUInt16();
|
||||
UInt16 Berserker = Buffer.ReadUInt16();
|
||||
UInt32 MaxLevel = Buffer.ReadUInt32();
|
||||
UInt32 LastID = Buffer.ReadUInt32();
|
||||
UInt32 NextID = Buffer.ReadUInt32();
|
||||
UInt32 Cost2 = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(7);
|
||||
UInt32 AAExpansion = Buffer.ReadUInt32();
|
||||
UInt32 SpecialCategory = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(4);
|
||||
UInt32 TotalAbilities = Buffer.ReadUInt32();
|
||||
|
||||
OutputFile.WriteLine(String.Format("AAID: {0}", AAID));
|
||||
OutputFile.WriteLine(" Unknown004:\t" + Unknown004);
|
||||
OutputFile.WriteLine(" HotkeySID:\t" + HotKeySID);
|
||||
OutputFile.WriteLine(" HotkeySID2:\t" + HotKeySID2);
|
||||
OutputFile.WriteLine(" TitleSID:\t" + TitleSID);
|
||||
OutputFile.WriteLine(" DescSID:\t" + DescSID);
|
||||
OutputFile.WriteLine(" ClassType:\t" + ClassType);
|
||||
OutputFile.WriteLine(" Cost:\t\t" + Cost);
|
||||
OutputFile.WriteLine(" Seq:\t\t" + Seq);
|
||||
OutputFile.WriteLine(" CurrentLevel:\t" + CurrentLevel);
|
||||
OutputFile.Write(" PreReqSkills (SEQs):\t");
|
||||
for (int i = 0; i < PreReqSkillCount; ++i)
|
||||
OutputFile.Write("{0} ", PreReqSkills[i]);
|
||||
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
OutputFile.Write(" PreReqSkills MinPoints:\t");
|
||||
for (int i = 0; i < PreReqMinPointCount; ++i)
|
||||
OutputFile.Write("{0} ", PreReqMinPoints[i]);
|
||||
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
OutputFile.WriteLine(" Type:\t\t" + Type);
|
||||
OutputFile.WriteLine(" SpellID:\t" + SpellID);
|
||||
OutputFile.WriteLine(" Unknown057:\t" + Unknown057);
|
||||
OutputFile.WriteLine(" SpellType:\t" + SpellType);
|
||||
OutputFile.WriteLine(" SpellRefresh:\t" + SpellRefresh);
|
||||
OutputFile.WriteLine(" Classes:\t" + Classes);
|
||||
OutputFile.WriteLine(" Berserker:\t" + Berserker);
|
||||
OutputFile.WriteLine(" MaxLevel:\t" + MaxLevel);
|
||||
OutputFile.WriteLine(" LastID:\t" + LastID);
|
||||
OutputFile.WriteLine(" NextID:\t" + NextID);
|
||||
OutputFile.WriteLine(" Cost2:\t\t" + Cost2);
|
||||
OutputFile.WriteLine(" AAExpansion:\t" + AAExpansion);
|
||||
OutputFile.WriteLine(" SpecialCat:\t" + SpecialCategory);
|
||||
OutputFile.WriteLine("");
|
||||
OutputFile.WriteLine(" TotalAbilities:\t" + TotalAbilities);
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
for (int i = 0; i < TotalAbilities; ++i)
|
||||
{
|
||||
UInt32 Ability = Buffer.ReadUInt32();
|
||||
Int32 Base1 = Buffer.ReadInt32();
|
||||
Int32 Base2 = Buffer.ReadInt32();
|
||||
UInt32 Slot = Buffer.ReadUInt32();
|
||||
|
||||
OutputFile.WriteLine(String.Format(" Ability:\t{0}\tBase1:\t{1}\tBase2:\t{2}\tSlot:\t{3}", Ability, Base1, Base2, Slot));
|
||||
|
||||
}
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
}
|
||||
|
||||
OutputFile.Close();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchOct202010Decoder : PatchTestSep222010Decoder
|
||||
{
|
||||
public PatchOct202010Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date October 20 2010.";
|
||||
|
||||
ExpectedPPLength = 27816;
|
||||
|
||||
PPZoneIDOffset = 20484;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,991 @@
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchSoD : PatchSpecficDecoder
|
||||
{
|
||||
public PatchSoD()
|
||||
{
|
||||
Version = "Seeds of Destruction";
|
||||
|
||||
PatchConfFileName = "patch_SoD.conf";
|
||||
|
||||
ExpectedPPLength = 23488;
|
||||
|
||||
PPZoneIDOffset = 16452;
|
||||
}
|
||||
|
||||
override public bool Init(string ConfDirectory, ref string ErrorMessage)
|
||||
{
|
||||
OpManager = new OpCodeManager();
|
||||
|
||||
if (!OpManager.Init(ConfDirectory + "\\" + PatchConfFileName, ref ErrorMessage))
|
||||
return false;
|
||||
|
||||
RegisterExplorers();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
override public IdentificationStatus Identify(int OpCode, int Size, PacketDirection Direction)
|
||||
{
|
||||
if ((OpCode == OpManager.OpCodeNameToNumber("OP_ZoneEntry")) && (Direction == PacketDirection.ClientToServer))
|
||||
return IdentificationStatus.Tentative;
|
||||
|
||||
if ((OpCode == OpManager.OpCodeNameToNumber("OP_PlayerProfile")) && (Direction == PacketDirection.ServerToClient) &&
|
||||
(Size == ExpectedPPLength))
|
||||
return IdentificationStatus.Yes;
|
||||
|
||||
|
||||
return IdentificationStatus.No;
|
||||
}
|
||||
|
||||
override public int VerifyPlayerProfile()
|
||||
{
|
||||
List<byte[]> PlayerProfilePacket = GetPacketsOfType("OP_PlayerProfile", PacketDirection.ServerToClient);
|
||||
|
||||
if (PlayerProfilePacket.Count == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PlayerProfilePacket[0].Length != ExpectedPPLength)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return ExpectedPPLength;
|
||||
}
|
||||
|
||||
override public UInt16 GetZoneNumber()
|
||||
{
|
||||
List<byte[]> PlayerProfilePacket = GetPacketsOfType("OP_PlayerProfile", PacketDirection.ServerToClient);
|
||||
|
||||
if (PlayerProfilePacket.Count == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PlayerProfilePacket[0].Length != ExpectedPPLength)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return BitConverter.ToUInt16(PlayerProfilePacket[0], PPZoneIDOffset);
|
||||
}
|
||||
|
||||
override public List<Door> GetDoors()
|
||||
{
|
||||
List<Door> DoorList = new List<Door>();
|
||||
|
||||
List<byte[]> SpawnDoorPacket = GetPacketsOfType("OP_SpawnDoor", PacketDirection.ServerToClient);
|
||||
|
||||
if ((SpawnDoorPacket.Count == 0) || (SpawnDoorPacket[0].Length == 0))
|
||||
return DoorList;
|
||||
|
||||
int DoorCount = SpawnDoorPacket[0].Length / 92;
|
||||
|
||||
ByteStream Buffer = new ByteStream(SpawnDoorPacket[0]);
|
||||
|
||||
for (int d = 0; d < DoorCount; ++d)
|
||||
{
|
||||
string DoorName = Buffer.ReadFixedLengthString(32, false);
|
||||
|
||||
float YPos = Buffer.ReadSingle();
|
||||
|
||||
float XPos = Buffer.ReadSingle();
|
||||
|
||||
float ZPos = Buffer.ReadSingle();
|
||||
|
||||
float Heading = Buffer.ReadSingle();
|
||||
|
||||
UInt32 Incline = Buffer.ReadUInt32();
|
||||
|
||||
Int32 Size = Buffer.ReadInt32();
|
||||
|
||||
Buffer.SkipBytes(4); // Skip Unknown
|
||||
|
||||
Byte DoorID = Buffer.ReadByte();
|
||||
|
||||
Byte OpenType = Buffer.ReadByte();
|
||||
|
||||
Byte StateAtSpawn = Buffer.ReadByte();
|
||||
|
||||
Byte InvertState = Buffer.ReadByte();
|
||||
|
||||
Int32 DoorParam = Buffer.ReadInt32();
|
||||
|
||||
// Skip past the trailing unknowns in the door struct, moving to the next door in the packet.
|
||||
|
||||
Buffer.SkipBytes(24);
|
||||
|
||||
string DestZone = "NONE";
|
||||
|
||||
Door NewDoor = new Door(DoorName, YPos, XPos, ZPos, Heading, Incline, Size, DoorID, OpenType, StateAtSpawn, InvertState,
|
||||
DoorParam, DestZone, 0, 0, 0, 0);
|
||||
|
||||
DoorList.Add(NewDoor);
|
||||
|
||||
}
|
||||
return DoorList;
|
||||
}
|
||||
|
||||
override public MerchantManager GetMerchantData(NPCSpawnList NPCSL)
|
||||
{
|
||||
List<EQApplicationPacket> PacketList = Packets.PacketList;
|
||||
|
||||
UInt32 OP_ShopRequest = OpManager.OpCodeNameToNumber("OP_ShopRequest");
|
||||
|
||||
UInt32 OP_ShopEnd = OpManager.OpCodeNameToNumber("OP_ShopEnd");
|
||||
|
||||
UInt32 OP_ItemPacket = OpManager.OpCodeNameToNumber("OP_ItemPacket");
|
||||
|
||||
MerchantManager mm = new MerchantManager();
|
||||
|
||||
for (int i = 0; i < PacketList.Count; ++i)
|
||||
{
|
||||
EQApplicationPacket p = PacketList[i];
|
||||
|
||||
if ((p.Direction == PacketDirection.ServerToClient) && (p.OpCode == OP_ShopRequest))
|
||||
{
|
||||
ByteStream Buffer = new ByteStream(p.Buffer);
|
||||
|
||||
UInt32 MerchantSpawnID = Buffer.ReadUInt32();
|
||||
|
||||
NPCSpawn npc = NPCSL.GetNPC(MerchantSpawnID);
|
||||
|
||||
UInt32 NPCTypeID;
|
||||
|
||||
if (npc != null)
|
||||
NPCTypeID = npc.NPCTypeID;
|
||||
else
|
||||
NPCTypeID = 0;
|
||||
|
||||
mm.AddMerchant(MerchantSpawnID);
|
||||
|
||||
for (int j = i + 1; j < PacketList.Count; ++j)
|
||||
{
|
||||
p = PacketList[j];
|
||||
|
||||
if (p.OpCode == OP_ShopEnd)
|
||||
break;
|
||||
|
||||
|
||||
if (p.OpCode == OP_ItemPacket)
|
||||
{
|
||||
Buffer = new ByteStream(p.Buffer);
|
||||
|
||||
UInt32 StackSize = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(4);
|
||||
|
||||
UInt32 Slot = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 MerchantSlot = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Price = Buffer.ReadUInt32();
|
||||
|
||||
Int32 Quantity = Buffer.ReadInt32();
|
||||
|
||||
Buffer.SetPosition(68); // Point to item name
|
||||
|
||||
string ItemName = Buffer.ReadString(true);
|
||||
|
||||
string Lore = Buffer.ReadString(true);
|
||||
|
||||
string IDFile = Buffer.ReadString(true);
|
||||
|
||||
|
||||
UInt32 ItemID = Buffer.ReadUInt32();
|
||||
|
||||
//if (Quantity == -1)
|
||||
mm.AddMerchantItem(MerchantSpawnID, ItemID, ItemName, MerchantSlot, Quantity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return mm;
|
||||
}
|
||||
|
||||
override public List<ZonePoint> GetZonePointList()
|
||||
{
|
||||
List<ZonePoint> ZonePointList = new List<ZonePoint>();
|
||||
|
||||
List<byte[]> ZonePointPackets = GetPacketsOfType("OP_SendZonepoints", PacketDirection.ServerToClient);
|
||||
|
||||
if (ZonePointPackets.Count < 1)
|
||||
{
|
||||
ZonePointList = null;
|
||||
|
||||
return ZonePointList;
|
||||
}
|
||||
|
||||
// Assume there is only 1 packet and process the first one.
|
||||
|
||||
ByteStream Buffer = new ByteStream(ZonePointPackets[0]);
|
||||
|
||||
UInt32 Entries = Buffer.ReadUInt32();
|
||||
|
||||
if (Entries == 0)
|
||||
return ZonePointList;
|
||||
|
||||
float x, y, z, Heading;
|
||||
|
||||
UInt32 Number;
|
||||
|
||||
UInt16 ZoneID, Instance;
|
||||
|
||||
ZonePointList = new List<ZonePoint>();
|
||||
|
||||
for (int i = 0; i < Entries; ++i)
|
||||
{
|
||||
Number = Buffer.ReadUInt32();
|
||||
|
||||
y = Buffer.ReadSingle();
|
||||
|
||||
x = Buffer.ReadSingle();
|
||||
|
||||
z = Buffer.ReadSingle();
|
||||
|
||||
Heading = Buffer.ReadSingle();
|
||||
|
||||
if (Heading != 999)
|
||||
Heading = Heading / 2;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
return ZonePointList;
|
||||
}
|
||||
|
||||
override public NewZoneStruct GetZoneData()
|
||||
{
|
||||
NewZoneStruct NewZone = new NewZoneStruct();
|
||||
|
||||
List<byte[]> ZonePackets = GetPacketsOfType("OP_NewZone", PacketDirection.ServerToClient);
|
||||
|
||||
if (ZonePackets.Count < 1)
|
||||
return NewZone;
|
||||
|
||||
// Assume there is only 1 packet and process the first one.
|
||||
|
||||
ByteStream Buffer = new ByteStream(ZonePackets[0]);
|
||||
|
||||
string CharName = Buffer.ReadFixedLengthString(64, false);
|
||||
|
||||
NewZone.ShortName = Buffer.ReadFixedLengthString(32, false);
|
||||
|
||||
Buffer.SkipBytes(96); // Skip Unknown
|
||||
|
||||
NewZone.LongName = Buffer.ReadFixedLengthString(278, true);
|
||||
|
||||
NewZone.Type = Buffer.ReadByte();
|
||||
|
||||
NewZone.FogRed = Buffer.ReadBytes(4);
|
||||
|
||||
NewZone.FogGreen = Buffer.ReadBytes(4);
|
||||
|
||||
NewZone.FogBlue = Buffer.ReadBytes(4);
|
||||
|
||||
Buffer.SkipBytes(1); // Unknown
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
NewZone.FogMinClip[i] = Buffer.ReadSingle();
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
NewZone.FogMaxClip[i] = Buffer.ReadSingle();
|
||||
|
||||
NewZone.Gravity = Buffer.ReadSingle();
|
||||
|
||||
NewZone.TimeType = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(49); // Unknown
|
||||
|
||||
NewZone.Sky = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(13); // Unknown
|
||||
|
||||
NewZone.ZEM = Buffer.ReadSingle();
|
||||
|
||||
NewZone.SafeY = Buffer.ReadSingle();
|
||||
|
||||
NewZone.SafeX = Buffer.ReadSingle();
|
||||
|
||||
NewZone.SafeZ = Buffer.ReadSingle();
|
||||
|
||||
NewZone.MinZ = Buffer.ReadSingle();
|
||||
|
||||
NewZone.MaxZ = Buffer.ReadSingle();
|
||||
|
||||
NewZone.UnderWorld = Buffer.ReadSingle();
|
||||
|
||||
NewZone.MinClip = Buffer.ReadSingle();
|
||||
|
||||
NewZone.MaxClip = Buffer.ReadSingle();
|
||||
|
||||
Buffer.SkipBytes(84); // Unknown
|
||||
|
||||
NewZone.ShortName2 = Buffer.ReadFixedLengthString(96, false);
|
||||
|
||||
Buffer.SkipBytes(52); // Unknown
|
||||
|
||||
NewZone.ZoneID = Buffer.ReadUInt16();
|
||||
|
||||
NewZone.InstanceID = Buffer.ReadUInt16();
|
||||
|
||||
Buffer.SkipBytes(38); // Unknown
|
||||
|
||||
NewZone.FallDamage = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(21); // Unknown
|
||||
|
||||
NewZone.FogDensity = Buffer.ReadSingle();
|
||||
|
||||
// Everything else after this point in the packet is unknown.
|
||||
|
||||
return NewZone;
|
||||
}
|
||||
|
||||
override public List<ZoneEntryStruct> GetSpawns()
|
||||
{
|
||||
List<ZoneEntryStruct> ZoneSpawns = new List<ZoneEntryStruct>();
|
||||
|
||||
List<byte[]> SpawnPackets = GetPacketsOfType("OP_ZoneEntry", PacketDirection.ServerToClient);
|
||||
|
||||
foreach (byte[] SpawnPacket in SpawnPackets)
|
||||
{
|
||||
ZoneEntryStruct NewSpawn = new ZoneEntryStruct();
|
||||
|
||||
ByteStream Buffer = new ByteStream(SpawnPacket);
|
||||
|
||||
NewSpawn.SpawnName = Buffer.ReadString(true);
|
||||
|
||||
NewSpawn.SpawnName = Utils.MakeCleanName(NewSpawn.SpawnName);
|
||||
|
||||
NewSpawn.SpawnID = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.Level = Buffer.ReadByte();
|
||||
|
||||
float UnkSize = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.IsNPC = Buffer.ReadByte();
|
||||
|
||||
UInt32 Bitfield = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.Showname = (Bitfield >> 28) & 1;
|
||||
NewSpawn.TargetableWithHotkey = (Bitfield >> 27) & 1;
|
||||
NewSpawn.Targetable = (Bitfield >> 26) & 1;
|
||||
|
||||
NewSpawn.ShowHelm = (Bitfield >> 24) & 1;
|
||||
NewSpawn.Gender = (Bitfield >> 20) & 3;
|
||||
|
||||
Byte OtherData = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip 8 unknown bytes
|
||||
|
||||
NewSpawn.DestructableString1 = "";
|
||||
NewSpawn.DestructableString2 = "";
|
||||
NewSpawn.DestructableString3 = "";
|
||||
|
||||
if ((OtherData & 1) > 0)
|
||||
{
|
||||
//SQLOut(String.Format("-- OBJECT FOUND SpawnID {0}", SpawnID.ToString("x")));
|
||||
//Console.WriteLine("Otherdata is {0} Skipping Stuff.", OtherData.ToString("x"));
|
||||
NewSpawn.DestructableString1 = Buffer.ReadString(false);
|
||||
|
||||
NewSpawn.DestructableString2 = Buffer.ReadString(false);
|
||||
|
||||
NewSpawn.DestructableString3 = Buffer.ReadString(false);
|
||||
|
||||
NewSpawn.DestructableUnk1 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk2 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID1 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID2 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID3 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableID4 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk3 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk4 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk5 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk6 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk7 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk8 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableUnk9 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DestructableByte = Buffer.ReadByte();
|
||||
|
||||
//SQLOut(String.Format("-- DES: {0,8:x} {1,8:x} {2,8:d} {3,8:d} {4,8:d} {5,8:d} {6,8:x} {7,8:x} {8,8:x} {9,8:x} {10,8:x} {11,8:x} {12,8:x} {13,2:x} {14} {15} {16}",
|
||||
// DestructableUnk1, DestructableUnk2, DestructableID1, DestructableID2, DestructableID3, DestructableID4,
|
||||
// DestructableUnk3, DestructableUnk4, DestructableUnk5, DestructableUnk6, DestructableUnk7, DestructableUnk8,
|
||||
// DestructableUnk9, DestructableByte, DestructableString1, DestructableString2, DestructableString3));
|
||||
}
|
||||
|
||||
NewSpawn.Size = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.Face = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.WalkSpeed = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.RunSpeed = Buffer.ReadSingle();
|
||||
|
||||
NewSpawn.Race = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.PropCount = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.BodyType = 0;
|
||||
|
||||
if (NewSpawn.PropCount >= 1)
|
||||
{
|
||||
NewSpawn.BodyType = Buffer.ReadUInt32();
|
||||
|
||||
for (int j = 1; j < NewSpawn.PropCount; ++j)
|
||||
Buffer.SkipBytes(4);
|
||||
}
|
||||
|
||||
Buffer.SkipBytes(1); // Skip HP %
|
||||
|
||||
NewSpawn.HairColor = Buffer.ReadByte();
|
||||
NewSpawn.BeardColor = Buffer.ReadByte();
|
||||
NewSpawn.EyeColor1 = Buffer.ReadByte();
|
||||
NewSpawn.EyeColor2 = Buffer.ReadByte();
|
||||
NewSpawn.HairStyle = Buffer.ReadByte();
|
||||
NewSpawn.Beard = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.DrakkinHeritage = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DrakkinTattoo = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.DrakkinDetails = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(1); // Skip Holding
|
||||
|
||||
NewSpawn.Deity = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip GuildID and GuildRank
|
||||
|
||||
NewSpawn.Class = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(4); // Skip PVP, Standstate, Light, Flymode
|
||||
|
||||
NewSpawn.EquipChest2 = Buffer.ReadByte();
|
||||
|
||||
bool UseWorn = (NewSpawn.EquipChest2 == 255);
|
||||
|
||||
Buffer.SkipBytes(2); // 2 Unknown bytes;
|
||||
|
||||
NewSpawn.Helm = Buffer.ReadByte();
|
||||
|
||||
NewSpawn.LastName = Buffer.ReadString(false);
|
||||
|
||||
Buffer.SkipBytes(5); // AATitle + unknown byte
|
||||
|
||||
NewSpawn.PetOwnerID = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(25); // Unknown byte + 6 unknown uint32
|
||||
|
||||
UInt32 Position1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position3 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position4 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Position5 = Buffer.ReadUInt32();
|
||||
|
||||
NewSpawn.YPos = Utils.EQ19ToFloat((Int32)(Position3 & 0x7FFFF));
|
||||
|
||||
NewSpawn.Heading = Utils.EQ19ToFloat((Int32)(Position4 & 0xFFF));
|
||||
|
||||
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();
|
||||
|
||||
NewSpawn.MeleeTexture1 = 0;
|
||||
NewSpawn.MeleeTexture2 = 0;
|
||||
|
||||
if (NPCType.IsPlayableRace(NewSpawn.Race))
|
||||
{
|
||||
for (int i = 0; i < 9; ++i)
|
||||
{
|
||||
NewSpawn.Equipment[i] = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Equip0 = Buffer.ReadUInt32();
|
||||
}
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_CHEST] > 0)
|
||||
{
|
||||
NewSpawn.EquipChest2 = (byte)NewSpawn.Equipment[Constants.MATERIAL_CHEST];
|
||||
|
||||
}
|
||||
|
||||
NewSpawn.ArmorTintRed = (byte)((NewSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 16) & 0xff);
|
||||
|
||||
NewSpawn.ArmorTintGreen = (byte)((NewSpawn.SlotColour[Constants.MATERIAL_CHEST] >> 8) & 0xff);
|
||||
|
||||
NewSpawn.ArmorTintBlue = (byte)(NewSpawn.SlotColour[Constants.MATERIAL_CHEST] & 0xff);
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_PRIMARY] > 0)
|
||||
NewSpawn.MeleeTexture1 = NewSpawn.Equipment[Constants.MATERIAL_PRIMARY];
|
||||
|
||||
if (NewSpawn.Equipment[Constants.MATERIAL_SECONDARY] > 0)
|
||||
NewSpawn.MeleeTexture2 = NewSpawn.Equipment[Constants.MATERIAL_SECONDARY];
|
||||
|
||||
if (UseWorn)
|
||||
NewSpawn.Helm = (byte)NewSpawn.Equipment[Constants.MATERIAL_HEAD];
|
||||
else
|
||||
NewSpawn.Helm = 0;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Non playable race
|
||||
NewSpawn.MeleeTexture1 = NewSpawn.SlotColour[3];
|
||||
NewSpawn.MeleeTexture2 = NewSpawn.SlotColour[6];
|
||||
|
||||
}
|
||||
|
||||
if (NewSpawn.EquipChest2 == 255)
|
||||
NewSpawn.EquipChest2 = 0;
|
||||
|
||||
if (NewSpawn.Helm == 255)
|
||||
NewSpawn.Helm = 0;
|
||||
|
||||
if ((OtherData & 4) > 0)
|
||||
{
|
||||
NewSpawn.Title = Buffer.ReadString(false);
|
||||
}
|
||||
|
||||
if ((OtherData & 8) > 0)
|
||||
{
|
||||
NewSpawn.Suffix = Buffer.ReadString(false);
|
||||
}
|
||||
|
||||
// unknowns
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
NewSpawn.IsMercenary = Buffer.ReadByte();
|
||||
|
||||
ZoneSpawns.Add(NewSpawn);
|
||||
}
|
||||
|
||||
return ZoneSpawns;
|
||||
}
|
||||
|
||||
override public List<PositionUpdate> GetHighResolutionMovementUpdates()
|
||||
{
|
||||
List<PositionUpdate> Updates = new List<PositionUpdate>();
|
||||
|
||||
List<byte[]> UpdatePackets = GetPacketsOfType("OP_NPCMoveUpdate", PacketDirection.ServerToClient);
|
||||
|
||||
foreach (byte[] UpdatePacket in UpdatePackets)
|
||||
{
|
||||
PositionUpdate PosUpdate = new PositionUpdate();
|
||||
|
||||
BitStream bs = new BitStream(UpdatePacket, 13);
|
||||
|
||||
PosUpdate.SpawnID = bs.readUInt(16);
|
||||
|
||||
UInt32 VFlags = bs.readUInt(6);
|
||||
|
||||
PosUpdate.p.y = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
PosUpdate.p.x = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
PosUpdate.p.z = (float)bs.readInt(19) / (float)(1 << 3);
|
||||
|
||||
PosUpdate.p.heading = (float)bs.readInt(12) / (float)(1 << 3);
|
||||
|
||||
Updates.Add(PosUpdate);
|
||||
}
|
||||
|
||||
return Updates;
|
||||
}
|
||||
|
||||
override public List<PositionUpdate> GetLowResolutionMovementUpdates()
|
||||
{
|
||||
List<PositionUpdate> Updates = new List<PositionUpdate>();
|
||||
|
||||
List<byte[]> UpdatePackets = GetPacketsOfType("OP_MobUpdate", PacketDirection.ServerToClient);
|
||||
|
||||
foreach (byte[] MobUpdatePacket in UpdatePackets)
|
||||
{
|
||||
PositionUpdate PosUpdate = new PositionUpdate();
|
||||
|
||||
ByteStream Buffer = new ByteStream(MobUpdatePacket);
|
||||
|
||||
PosUpdate.SpawnID = Buffer.ReadUInt16();
|
||||
|
||||
UInt32 Word1 = Buffer.ReadUInt32();
|
||||
|
||||
UInt32 Word2 = Buffer.ReadUInt32();
|
||||
|
||||
UInt16 Word3 = Buffer.ReadUInt16();
|
||||
|
||||
PosUpdate.p.y = Utils.EQ19ToFloat((Int32)(Word1 & 0x7FFFF));
|
||||
|
||||
// Z is in the top 13 bits of Word1 and the bottom 6 of Word2
|
||||
|
||||
UInt32 ZPart1 = Word1 >> 19; // ZPart1 now has low order bits of Z in bottom 13 bits
|
||||
UInt32 ZPart2 = Word2 & 0x3F; // ZPart2 now has low order bits of Z in bottom 6 bits
|
||||
|
||||
ZPart2 = ZPart2 << 13;
|
||||
|
||||
PosUpdate.p.z = Utils.EQ19ToFloat((Int32)(ZPart1 | ZPart2));
|
||||
|
||||
PosUpdate.p.x = Utils.EQ19ToFloat((Int32)(Word2 >> 6) & 0x7FFFF);
|
||||
|
||||
PosUpdate.p.heading = Utils.EQ19ToFloat((Int32)(Word3 & 0xFFF));
|
||||
|
||||
Updates.Add(PosUpdate);
|
||||
}
|
||||
|
||||
return Updates;
|
||||
}
|
||||
|
||||
override public List<GroundSpawnStruct> GetGroundSpawns()
|
||||
{
|
||||
List<GroundSpawnStruct> GroundSpawns = new List<GroundSpawnStruct>();
|
||||
|
||||
List<byte[]> GroundSpawnPackets = GetPacketsOfType("OP_GroundSpawn", PacketDirection.ServerToClient);
|
||||
|
||||
foreach (byte[] GroundSpawnPacket in GroundSpawnPackets)
|
||||
{
|
||||
GroundSpawnStruct GroundSpawn = new GroundSpawnStruct();
|
||||
|
||||
ByteStream Buffer = new ByteStream(GroundSpawnPacket);
|
||||
|
||||
Buffer.SkipBytes(12);
|
||||
|
||||
GroundSpawn.DropID = Buffer.ReadUInt32();
|
||||
|
||||
GroundSpawn.ZoneID = Buffer.ReadUInt16();
|
||||
|
||||
GroundSpawn.InstanceID = Buffer.ReadUInt16();
|
||||
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
GroundSpawn.Heading = Buffer.ReadSingle();
|
||||
|
||||
Buffer.SkipBytes(12);
|
||||
|
||||
GroundSpawn.z = Buffer.ReadSingle();
|
||||
|
||||
GroundSpawn.x = Buffer.ReadSingle();
|
||||
|
||||
GroundSpawn.y = Buffer.ReadSingle();
|
||||
|
||||
GroundSpawn.Name = Buffer.ReadFixedLengthString(16, false);
|
||||
|
||||
Buffer.SkipBytes(20);
|
||||
|
||||
GroundSpawn.ObjectType = Buffer.ReadUInt32();
|
||||
|
||||
GroundSpawns.Add(GroundSpawn);
|
||||
}
|
||||
return GroundSpawns;
|
||||
}
|
||||
|
||||
override public List<UInt32> GetFindableSpawns()
|
||||
{
|
||||
List<UInt32> FindableSpawnList = new List<UInt32>();
|
||||
|
||||
List<byte[]> FindablePackets = GetPacketsOfType("OP_SendFindableNPCs", PacketDirection.ServerToClient);
|
||||
|
||||
if (FindablePackets.Count < 1)
|
||||
return FindableSpawnList;
|
||||
|
||||
foreach (byte[] Packet in FindablePackets)
|
||||
{
|
||||
if (BitConverter.ToUInt32(Packet, 0) == 0)
|
||||
FindableSpawnList.Add(BitConverter.ToUInt32(Packet, 4));
|
||||
}
|
||||
|
||||
return FindableSpawnList;
|
||||
}
|
||||
|
||||
override public string GetZoneName()
|
||||
{
|
||||
List<byte[]> NewZonePacket = GetPacketsOfType("OP_NewZone", PacketDirection.ServerToClient);
|
||||
|
||||
if (NewZonePacket.Count != 1)
|
||||
return "";
|
||||
|
||||
return Utils.ReadNullTerminatedString(NewZonePacket[0], 704, 96, false);
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
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_HPUpdate", ExploreHPUpdate);
|
||||
|
||||
}
|
||||
|
||||
public void ExploreZoneEntry(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
if (Direction != PacketDirection.ServerToClient)
|
||||
return;
|
||||
|
||||
string Name = Buffer.ReadString(false);
|
||||
UInt32 SpawnID = Buffer.ReadUInt32();
|
||||
byte Level = Buffer.ReadByte();
|
||||
Buffer.SkipBytes(4);
|
||||
bool IsNPC = (Buffer.ReadByte() != 0);
|
||||
UInt32 Bitfield = Buffer.ReadUInt32();
|
||||
|
||||
string DestructableString1;
|
||||
string DestructableString2;
|
||||
string DestructableString3;
|
||||
UInt32 DestructableUnk1;
|
||||
UInt32 DestructableUnk2;
|
||||
UInt32 DestructableID1;
|
||||
UInt32 DestructableID2;
|
||||
UInt32 DestructableID3;
|
||||
UInt32 DestructableID4;
|
||||
UInt32 DestructableUnk3;
|
||||
UInt32 DestructableUnk4;
|
||||
UInt32 DestructableUnk5;
|
||||
UInt32 DestructableUnk6;
|
||||
UInt32 DestructableUnk7;
|
||||
UInt32 DestructableUnk8;
|
||||
UInt32 DestructableUnk9;
|
||||
byte DestructableByte;
|
||||
|
||||
Byte OtherData = Buffer.ReadByte();
|
||||
|
||||
Buffer.SkipBytes(8); // Skip 8 unknown bytes
|
||||
|
||||
DestructableString1 = "";
|
||||
DestructableString2 = "";
|
||||
DestructableString3 = "";
|
||||
|
||||
OutputStream.WriteLine("Spawn Name: {0} ID: {1} Level: {2} {3}\r\n", Name, SpawnID, Level, IsNPC ? "NPC" : "Player");
|
||||
|
||||
if ((OtherData & 1) > 0)
|
||||
{
|
||||
// Destructable Objects.
|
||||
|
||||
DestructableString1 = Buffer.ReadString(false);
|
||||
|
||||
DestructableString2 = Buffer.ReadString(false);
|
||||
|
||||
DestructableString3 = Buffer.ReadString(false);
|
||||
|
||||
DestructableUnk1 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableUnk2 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableID1 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableID2 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableID3 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableID4 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableUnk3 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableUnk4 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableUnk5 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableUnk6 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableUnk7 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableUnk8 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableUnk9 = Buffer.ReadUInt32();
|
||||
|
||||
DestructableByte = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine("DESTRUCTABLE OBJECT:\r\n");
|
||||
OutputStream.WriteLine(" String1: {0}", DestructableString1);
|
||||
OutputStream.WriteLine(" String2: {0}", DestructableString2);
|
||||
OutputStream.WriteLine(" String3: {0}\r\n", DestructableString3);
|
||||
|
||||
OutputStream.WriteLine(" Unk1: {0,8:x} Unk2: {1,8:x}\r\n ID1 : {2,8:x} ID2 : {3,8:x} ID3 : {4,8:x} ID4 : {5,8:x}\r\n Unk3: {6,8:x} Unk4: {7,8:x} Unk5: {8,8:x} Unk6: {9,8:x}\r\n Unk7: {10,8:x} Unk8: {11,8:x} Unk9: {12,8:x}\r\n UnkByte: {13,2:x}",
|
||||
DestructableUnk1, DestructableUnk2, DestructableID1, DestructableID2, DestructableID3, DestructableID4,
|
||||
DestructableUnk3, DestructableUnk4, DestructableUnk5, DestructableUnk6, DestructableUnk7, DestructableUnk8,
|
||||
DestructableUnk9, DestructableByte);
|
||||
}
|
||||
|
||||
Buffer.SkipBytes(17);
|
||||
|
||||
byte PropCount = Buffer.ReadByte();
|
||||
|
||||
if (PropCount >= 1)
|
||||
{
|
||||
Buffer.SkipBytes(4);
|
||||
|
||||
for (int j = 1; j < PropCount; ++j)
|
||||
Buffer.SkipBytes(4);
|
||||
}
|
||||
|
||||
byte HP = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine("HP% is {0}\r\n", HP);
|
||||
|
||||
AddExplorerSpawn(SpawnID, Name);
|
||||
}
|
||||
|
||||
public void ExploreHPUpdate(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt32 CurrentHP = Buffer.ReadUInt32();
|
||||
Int32 MaxHP = Buffer.ReadInt32();
|
||||
UInt16 SpawnID = Buffer.ReadUInt16();
|
||||
|
||||
string SpawnName = FindExplorerSpawn(SpawnID);
|
||||
|
||||
OutputStream.WriteLine("Spawn {0} {1} Current HP: {2} Max HP: {3}", SpawnID, SpawnName, CurrentHP, MaxHP);
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
override public bool DumpAAs(string FileName)
|
||||
{
|
||||
List<byte[]> AAPackets = GetPacketsOfType("OP_SendAATable", PacketDirection.ServerToClient);
|
||||
|
||||
|
||||
if (AAPackets.Count < 1)
|
||||
return false;
|
||||
|
||||
StreamWriter OutputFile;
|
||||
|
||||
try
|
||||
{
|
||||
OutputFile = new StreamWriter(FileName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
OutputFile.WriteLine("-- There are " + AAPackets.Count + " OP_SendAATable packets.");
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
foreach (byte[] Packet in AAPackets)
|
||||
{
|
||||
UInt32 AAID = BitConverter.ToUInt32(Packet, 0);
|
||||
UInt32 Unknown004 = BitConverter.ToUInt32(Packet, 4);
|
||||
UInt32 HotKeySID = BitConverter.ToUInt32(Packet, 5);
|
||||
UInt32 HotKeySID2 = BitConverter.ToUInt32(Packet, 9);
|
||||
UInt32 TitleSID = BitConverter.ToUInt32(Packet, 13);
|
||||
UInt32 DescSID = BitConverter.ToUInt32(Packet, 17);
|
||||
UInt32 ClassType = BitConverter.ToUInt32(Packet, 21);
|
||||
UInt32 Cost = BitConverter.ToUInt32(Packet, 25);
|
||||
UInt32 Seq = BitConverter.ToUInt32(Packet, 29);
|
||||
UInt32 CurrentLevel = BitConverter.ToUInt32(Packet, 33);
|
||||
UInt32 PrereqSkill = BitConverter.ToUInt32(Packet, 37);
|
||||
UInt32 PrereqMinpoints = BitConverter.ToUInt32(Packet, 41);
|
||||
UInt32 Type = BitConverter.ToUInt32(Packet, 45);
|
||||
UInt32 SpellID = BitConverter.ToUInt32(Packet, 49);
|
||||
UInt32 SpellType = BitConverter.ToUInt32(Packet, 53);
|
||||
UInt32 SpellRefresh = BitConverter.ToUInt32(Packet, 57);
|
||||
UInt16 Classes = BitConverter.ToUInt16(Packet, 61);
|
||||
UInt16 Berserker = BitConverter.ToUInt16(Packet, 63);
|
||||
UInt32 MaxLevel = BitConverter.ToUInt32(Packet, 65);
|
||||
UInt32 LastID = BitConverter.ToUInt32(Packet, 69);
|
||||
UInt32 NextID = BitConverter.ToUInt32(Packet, 73);
|
||||
UInt32 Cost2 = BitConverter.ToUInt32(Packet, 77);
|
||||
UInt32 AAExpansion = BitConverter.ToUInt32(Packet, 88);
|
||||
UInt32 SpecialCategory = BitConverter.ToUInt32(Packet, 92);
|
||||
UInt32 TotalAbilities = BitConverter.ToUInt32(Packet, 100);
|
||||
|
||||
OutputFile.WriteLine(String.Format("AAID: {0}", AAID));
|
||||
OutputFile.WriteLine(" Unknown004:\t" + Unknown004);
|
||||
OutputFile.WriteLine(" HotkeySID:\t" + HotKeySID);
|
||||
OutputFile.WriteLine(" HotkeySID2:\t" + HotKeySID2);
|
||||
OutputFile.WriteLine(" TitleSID:\t" + TitleSID);
|
||||
OutputFile.WriteLine(" DescSID:\t" + DescSID);
|
||||
OutputFile.WriteLine(" ClassType:\t" + ClassType);
|
||||
OutputFile.WriteLine(" Cost:\t\t" + Cost);
|
||||
OutputFile.WriteLine(" Seq:\t\t" + Seq);
|
||||
OutputFile.WriteLine(" CurrentLevel:\t" + CurrentLevel);
|
||||
OutputFile.WriteLine(" PrereqSkill:\t" + PrereqSkill);
|
||||
OutputFile.WriteLine(" PrereqMinPt:\t" + PrereqMinpoints);
|
||||
OutputFile.WriteLine(" Type:\t\t" + Type);
|
||||
OutputFile.WriteLine(" SpellID:\t" + SpellID);
|
||||
OutputFile.WriteLine(" SpellType:\t" + SpellType);
|
||||
OutputFile.WriteLine(" SpellRefresh:\t" + SpellRefresh);
|
||||
OutputFile.WriteLine(" Classes:\t" + Classes);
|
||||
OutputFile.WriteLine(" Berserker:\t" + Berserker);
|
||||
OutputFile.WriteLine(" MaxLevel:\t" + MaxLevel);
|
||||
OutputFile.WriteLine(" LastID:\t" + LastID);
|
||||
OutputFile.WriteLine(" NextID:\t" + NextID);
|
||||
OutputFile.WriteLine(" Cost2:\t\t" + Cost2);
|
||||
OutputFile.WriteLine(" AAExpansion:\t" + AAExpansion);
|
||||
OutputFile.WriteLine(" SpecialCat:\t" + SpecialCategory);
|
||||
OutputFile.WriteLine("");
|
||||
OutputFile.WriteLine(" TotalAbilities:\t" + TotalAbilities);
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
for (int i = 0; i < TotalAbilities; ++i)
|
||||
{
|
||||
UInt32 Ability = BitConverter.ToUInt32(Packet, 104 + (i * 16));
|
||||
Int32 Base1 = BitConverter.ToInt32(Packet, 108 + (i * 16));
|
||||
Int32 Base2 = BitConverter.ToInt32(Packet, 112 + (i * 16));
|
||||
UInt32 Slot = BitConverter.ToUInt32(Packet, 116 + (i * 16));
|
||||
|
||||
OutputFile.WriteLine(String.Format(" Ability:\t{0}\tBase1:\t{1}\tBase2:\t{2}\tSlot:\t{3}", Ability, Base1, Base2, Slot));
|
||||
|
||||
}
|
||||
OutputFile.WriteLine("");
|
||||
|
||||
}
|
||||
|
||||
OutputFile.Close();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,341 @@
|
||||
//
|
||||
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
|
||||
//
|
||||
//
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchTestSep012010Decoder : PatchJuly132010Decoder
|
||||
{
|
||||
public PatchTestSep012010Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date Test Server September 1 2010.";
|
||||
|
||||
PatchConfFileName = "patch_Sep01-2010.conf";
|
||||
}
|
||||
|
||||
override public IdentificationStatus Identify(int OpCode, int Size, PacketDirection Direction)
|
||||
{
|
||||
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();
|
||||
|
||||
NewItem.StackSize = Buffer.ReadUInt32(); // 00
|
||||
Buffer.SkipBytes(4);
|
||||
NewItem.Slot = Buffer.ReadUInt32(); // 08
|
||||
Buffer.SkipBytes(1);
|
||||
NewItem.MerchantSlot = Buffer.ReadByte(); // 13
|
||||
NewItem.Price = Buffer.ReadUInt32(); // 14
|
||||
Buffer.SkipBytes(5);
|
||||
NewItem.Quantity = Buffer.ReadInt32(); // 23
|
||||
Buffer.SetPosition(71);
|
||||
NewItem.Name = Buffer.ReadString(true);
|
||||
NewItem.Lore = Buffer.ReadString(true);
|
||||
NewItem.IDFile = Buffer.ReadString(true);
|
||||
NewItem.ID = Buffer.ReadUInt32();
|
||||
|
||||
return NewItem;
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
OutputStream.WriteLine("There are {0} items in the inventory.\r\n", ItemCount );
|
||||
|
||||
for (int i = 0; i < ItemCount; ++i)
|
||||
{
|
||||
ExploreSubItem(OutputStream, ref Buffer);
|
||||
}
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
public void ExploreItemPacket(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
Buffer.SkipBytes(4); // Skip type field.
|
||||
|
||||
ExploreSubItem(OutputStream, ref Buffer);
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
void ExploreSubItem(StreamWriter OutputStream, ref ByteStream Buffer)
|
||||
{
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
byte Area = Buffer.ReadByte();
|
||||
UInt16 MainSlot = Buffer.ReadUInt16();
|
||||
Int16 SubSlot = Buffer.ReadInt16();
|
||||
Buffer.SkipBytes(54);
|
||||
string Name = Buffer.ReadString(true);
|
||||
|
||||
if (SubSlot >= 0)
|
||||
OutputStream.Write(" ");
|
||||
|
||||
string AreaName = "Unknown";
|
||||
|
||||
switch (Area)
|
||||
{
|
||||
case 0:
|
||||
AreaName = "Personal Inventory";
|
||||
break;
|
||||
case 1:
|
||||
AreaName = "Bank";
|
||||
break;
|
||||
case 2:
|
||||
AreaName = "Shared Bank";
|
||||
break;
|
||||
case 6:
|
||||
AreaName = "Personal Tribute";
|
||||
break;
|
||||
case 7:
|
||||
AreaName = "Guild Tribute";
|
||||
break;
|
||||
case 8:
|
||||
AreaName = "Merchant";
|
||||
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();
|
||||
byte Weight = Buffer.ReadByte();
|
||||
byte NoRent = Buffer.ReadByte();
|
||||
byte NoDrop = Buffer.ReadByte();
|
||||
byte Attune = Buffer.ReadByte();
|
||||
byte Size = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine(" ID: {0} Weight: {1} NoRent: {2} NoDrop: {3} Attune {4} Size {5}", ID, Weight, NoRent, NoDrop, Attune, Size);
|
||||
|
||||
UInt32 Slots = Buffer.ReadUInt32();
|
||||
UInt32 Price = Buffer.ReadUInt32();
|
||||
UInt32 Icon = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(2);
|
||||
UInt32 BenefitFlags = Buffer.ReadUInt32();
|
||||
byte Tradeskills = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine(" Slots: {0} Price: {1} Icon: {2} BenefitFlags {3} Tradeskills: {4}", Slots, Price, Icon, BenefitFlags, Tradeskills);
|
||||
|
||||
byte CR = Buffer.ReadByte();
|
||||
byte DR = Buffer.ReadByte();
|
||||
byte PR = Buffer.ReadByte();
|
||||
byte MR = Buffer.ReadByte();
|
||||
byte FR = Buffer.ReadByte();
|
||||
byte SVC = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine(" CR: {0} DR: {1} PR: {2} MR: {3} FR: {4} SVC: {5}", CR, DR, PR, MR, FR, SVC);
|
||||
|
||||
byte AStr = Buffer.ReadByte();
|
||||
byte ASta = Buffer.ReadByte();
|
||||
byte AAgi = Buffer.ReadByte();
|
||||
byte ADex = Buffer.ReadByte();
|
||||
byte ACha = Buffer.ReadByte();
|
||||
byte AInt = Buffer.ReadByte();
|
||||
byte AWis = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine(" AStr: {0} ASta: {1} AAgi: {2} ADex: {3} ACha: {4} AInt: {5} AWis: {6}", AStr, ASta, AAgi, ADex, ACha, AInt, AWis);
|
||||
|
||||
Int32 HP = Buffer.ReadInt32();
|
||||
Int32 Mana = Buffer.ReadInt32();
|
||||
UInt32 Endurance = Buffer.ReadUInt32();
|
||||
Int32 AC = Buffer.ReadInt32();
|
||||
Int32 Regen = Buffer.ReadInt32();
|
||||
Int32 ManaRegen = Buffer.ReadInt32();
|
||||
Int32 EndRegen = Buffer.ReadInt32();
|
||||
UInt32 Classes = Buffer.ReadUInt32();
|
||||
UInt32 Races = Buffer.ReadUInt32();
|
||||
UInt32 Deity = Buffer.ReadUInt32();
|
||||
Int32 SkillModValue = Buffer.ReadInt32();
|
||||
Buffer.SkipBytes(4);
|
||||
UInt32 SkillModType = Buffer.ReadUInt32();
|
||||
UInt32 BaneDamageRace = Buffer.ReadUInt32();
|
||||
UInt32 BaneDamageBody = Buffer.ReadUInt32();
|
||||
UInt32 BaneDamageRaceAmount = Buffer.ReadUInt32();
|
||||
Int32 BaneDamageAmount = Buffer.ReadInt32();
|
||||
byte Magic = Buffer.ReadByte();
|
||||
Int32 CastTime = Buffer.ReadInt32();
|
||||
UInt32 ReqLevel = Buffer.ReadUInt32();
|
||||
UInt32 RecLevel = Buffer.ReadUInt32();
|
||||
UInt32 ReqSkill = Buffer.ReadUInt32();
|
||||
UInt32 BardType = Buffer.ReadUInt32();
|
||||
Int32 BardValue = Buffer.ReadInt32();
|
||||
byte Light = Buffer.ReadByte();
|
||||
byte Delay = Buffer.ReadByte();
|
||||
byte ElemDamageAmount = Buffer.ReadByte();
|
||||
byte ElemDamageType = Buffer.ReadByte();
|
||||
byte Range = Buffer.ReadByte();
|
||||
UInt32 Damage = Buffer.ReadUInt32();
|
||||
UInt32 Color = Buffer.ReadUInt32();
|
||||
byte ItemType = Buffer.ReadByte();
|
||||
UInt32 Material = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(4);
|
||||
UInt32 EliteMaterial = Buffer.ReadUInt32();
|
||||
float SellRate = Buffer.ReadSingle();
|
||||
Int32 CombatEffects = Buffer.ReadInt32();
|
||||
Int32 Shielding = Buffer.ReadInt32();
|
||||
Int32 StunResist = Buffer.ReadInt32();
|
||||
Int32 StrikeThrough = Buffer.ReadInt32();
|
||||
Int32 ExtraDamageSkill = Buffer.ReadInt32();
|
||||
Int32 ExtraDamageAmount = Buffer.ReadInt32();
|
||||
Int32 SpellShield = Buffer.ReadInt32();
|
||||
Int32 Avoidance = Buffer.ReadInt32();
|
||||
Int32 Accuracy = Buffer.ReadInt32();
|
||||
UInt32 CharmFileID = Buffer.ReadUInt32();
|
||||
UInt32 FactionMod1 = Buffer.ReadUInt32();
|
||||
Int32 FactionAmount1 = Buffer.ReadInt32();
|
||||
UInt32 FactionMod2 = Buffer.ReadUInt32();
|
||||
Int32 FactionAmount2 = Buffer.ReadInt32();
|
||||
UInt32 FactionMod3 = Buffer.ReadUInt32();
|
||||
Int32 FactionAmount3 = Buffer.ReadInt32();
|
||||
UInt32 FactionMod4 = Buffer.ReadUInt32();
|
||||
Int32 FactionAmount4 = Buffer.ReadInt32();
|
||||
|
||||
Buffer.ReadString(true); // Charm File
|
||||
Buffer.SkipBytes(64); // Item Secondary Body Struct
|
||||
Buffer.ReadString(true); // Filename
|
||||
Buffer.SkipBytes(76); // Item Tertiary Body Struct
|
||||
Buffer.SkipBytes(30); // Click Effect Struct
|
||||
Buffer.ReadString(true); // Clickname
|
||||
Buffer.SkipBytes(4); // clickunk7
|
||||
Buffer.SkipBytes(30); // Proc Effect Struct
|
||||
Buffer.ReadString(true); // Proc Name
|
||||
Buffer.SkipBytes(4); // unknown5
|
||||
Buffer.SkipBytes(30); // Worn Effect Struct
|
||||
Buffer.ReadString(true); // Worn Name
|
||||
Buffer.SkipBytes(4); // unknown6
|
||||
Buffer.SkipBytes(30); // Worn Effect Struct
|
||||
Buffer.ReadString(true); // Worn Name
|
||||
Buffer.SkipBytes(4); // unknown6
|
||||
Buffer.SkipBytes(30); // Worn Effect Struct
|
||||
Buffer.ReadString(true); // Worn Name
|
||||
Buffer.SkipBytes(4); // unknown6
|
||||
Buffer.SkipBytes(30); // Worn Effect Struct
|
||||
Buffer.ReadString(true); // Worn Name
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
public void ExploreMercenaryPurchaseWindow(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt32 TypeCount = Buffer.ReadUInt32();
|
||||
|
||||
//OutputStream.WriteLine("Type Count: {0}\r\n", TypeCount);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Number of Types (Journeyman and Apprentice in this case\r\n", TypeCount);
|
||||
for (int i = 0; i < TypeCount; ++i)
|
||||
{
|
||||
UInt32 TypeDBStringID = Buffer.ReadUInt32();
|
||||
//OutputStream.WriteLine(" Type {0} DBStringID {1}", i, TypeDBStringID);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID for Type {1}", TypeDBStringID, i);
|
||||
}
|
||||
|
||||
UInt32 Count2 = Buffer.ReadUInt32();
|
||||
|
||||
//OutputStream.WriteLine(" Count 2 is {0}", Count2);
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Count of Sub-types that follow", Count2);
|
||||
|
||||
for (int i = 0; i < Count2; ++i)
|
||||
{
|
||||
int Offset = Buffer.GetPosition();
|
||||
|
||||
UInt32 Unknown1 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown1);
|
||||
UInt32 DBStringID1 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID of Type", DBStringID1);
|
||||
UInt32 DBStringID2 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // DBStringID of Sub-Type", DBStringID2);
|
||||
UInt32 PurchaseCost = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Purchase Cost", PurchaseCost);
|
||||
UInt32 UpkeepCost = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Upkeep Cost", UpkeepCost);
|
||||
UInt32 Unknown2 = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown2);
|
||||
UInt32 Unknown3 = Buffer.ReadUInt32();
|
||||
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);
|
||||
|
||||
UInt32 Unknown6 = Buffer.ReadUInt32();
|
||||
//OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown6);
|
||||
UInt32 Unknown7 = Buffer.ReadUInt32();
|
||||
//OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown7);
|
||||
UInt32 Unknown8 = Buffer.ReadUInt32();
|
||||
//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();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Unknown", Unknown10);
|
||||
|
||||
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",
|
||||
// Unknown2, Unknown3, Unknown4, Unknown5, Unknown6, Unknown7, Unknown8, Unknown10, Unknown11);
|
||||
|
||||
//OutputStream.WriteLine(" Stance Count: {0}", StanceCount);
|
||||
|
||||
for (int j = 0; j < StanceCount; ++j)
|
||||
{
|
||||
UInt32 StanceNum = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Stance Number", StanceNum);
|
||||
UInt32 StanceType = Buffer.ReadUInt32();
|
||||
OutputStream.WriteLine("VARSTRUCT_ENCODE_TYPE(uint32, Buffer, {0}); // Stance DBStringID (1 = Passive, 2 = Balanced etc.", StanceType);
|
||||
|
||||
//OutputStream.WriteLine(" {0}: {1}", StanceNum, StanceType);
|
||||
}
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
OutputStream.WriteLine("\r\nBuffer position at end is {0}", Buffer.GetPosition());
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,349 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchTestSep222010Decoder : PatchTestSep012010Decoder
|
||||
{
|
||||
public PatchTestSep222010Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date Test Server September 22 2010.";
|
||||
|
||||
PatchConfFileName = "patch_Sep22-2010.conf";
|
||||
|
||||
ExpectedPPLength = 26728;
|
||||
}
|
||||
|
||||
override public IdentificationStatus Identify(int OpCode, int Size, PacketDirection Direction)
|
||||
{
|
||||
if ((OpCode == OpManager.OpCodeNameToNumber("OP_ZoneEntry")) && (Direction == PacketDirection.ClientToServer))
|
||||
return IdentificationStatus.Tentative;
|
||||
|
||||
if ((OpCode == OpManager.OpCodeNameToNumber("OP_PlayerProfile")) && (Direction == PacketDirection.ServerToClient) &&
|
||||
(Size == ExpectedPPLength))
|
||||
return IdentificationStatus.Yes;
|
||||
|
||||
return IdentificationStatus.No;
|
||||
}
|
||||
|
||||
override public List<Door> GetDoors()
|
||||
{
|
||||
List<Door> DoorList = new List<Door>();
|
||||
|
||||
List<byte[]> SpawnDoorPacket = GetPacketsOfType("OP_SpawnDoor", PacketDirection.ServerToClient);
|
||||
|
||||
if ((SpawnDoorPacket.Count == 0) || (SpawnDoorPacket[0].Length == 0))
|
||||
return DoorList;
|
||||
|
||||
int DoorCount = SpawnDoorPacket[0].Length / 96;
|
||||
|
||||
ByteStream Buffer = new ByteStream(SpawnDoorPacket[0]);
|
||||
|
||||
for (int d = 0; d < DoorCount; ++d)
|
||||
{
|
||||
string DoorName = Buffer.ReadFixedLengthString(32, false);
|
||||
|
||||
float YPos = Buffer.ReadSingle();
|
||||
|
||||
float XPos = Buffer.ReadSingle();
|
||||
|
||||
float ZPos = Buffer.ReadSingle();
|
||||
|
||||
float Heading = Buffer.ReadSingle();
|
||||
|
||||
UInt32 Incline = Buffer.ReadUInt32();
|
||||
|
||||
Int32 Size = Buffer.ReadInt32();
|
||||
|
||||
Buffer.SkipBytes(4); // Skip Unknown
|
||||
|
||||
Byte DoorID = Buffer.ReadByte();
|
||||
|
||||
Byte OpenType = Buffer.ReadByte();
|
||||
|
||||
Byte StateAtSpawn = Buffer.ReadByte();
|
||||
|
||||
Byte InvertState = Buffer.ReadByte();
|
||||
|
||||
Int32 DoorParam = Buffer.ReadInt32();
|
||||
|
||||
// Skip past the trailing unknowns in the door struct, moving to the next door in the packet.
|
||||
|
||||
Buffer.SkipBytes(28);
|
||||
|
||||
string DestZone = "NONE";
|
||||
|
||||
Door NewDoor = new Door(DoorName, YPos, XPos, ZPos, Heading, Incline, Size, DoorID, OpenType, StateAtSpawn, InvertState,
|
||||
DoorParam, DestZone, 0, 0, 0, 0);
|
||||
|
||||
DoorList.Add(NewDoor);
|
||||
|
||||
}
|
||||
return DoorList;
|
||||
}
|
||||
|
||||
override public Item DecodeItemPacket(byte[] PacketBuffer)
|
||||
{
|
||||
ByteStream Buffer = new ByteStream(PacketBuffer);
|
||||
|
||||
Item NewItem = new Item();
|
||||
|
||||
//NewItem.StackSize = Buffer.ReadUInt32(); // 00
|
||||
//Buffer.SkipBytes(4);
|
||||
//NewItem.Slot = Buffer.ReadUInt32(); // 08
|
||||
//Buffer.SkipBytes(1);
|
||||
Buffer.SetPosition(30);
|
||||
NewItem.MerchantSlot = Buffer.ReadByte(); // 13
|
||||
NewItem.Price = Buffer.ReadUInt32(); // 14
|
||||
Buffer.SkipBytes(5);
|
||||
NewItem.Quantity = Buffer.ReadInt32(); // 23
|
||||
Buffer.SetPosition(96);
|
||||
NewItem.Name = Buffer.ReadString(true);
|
||||
NewItem.Lore = Buffer.ReadString(true);
|
||||
NewItem.IDFile = Buffer.ReadString(true);
|
||||
NewItem.ID = Buffer.ReadUInt32();
|
||||
|
||||
return NewItem;
|
||||
}
|
||||
|
||||
public override void RegisterExplorers()
|
||||
{
|
||||
base.RegisterExplorers();
|
||||
|
||||
//OpManager.RegisterExplorer("OP_CharInventory", ExploreCharInventoryPacket);
|
||||
//OpManager.RegisterExplorer("OP_ItemPacket", ExploreItemPacket);
|
||||
}
|
||||
|
||||
public void ExploreCharInventoryPacket(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
UInt32 ItemCount = Buffer.ReadUInt32();
|
||||
|
||||
OutputStream.WriteLine("There are {0} items in the inventory.\r\n", ItemCount);
|
||||
|
||||
for (int i = 0; i < ItemCount; ++i)
|
||||
{
|
||||
ExploreSubItem(OutputStream, ref Buffer);
|
||||
}
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
public void ExploreItemPacket(StreamWriter OutputStream, ByteStream Buffer, PacketDirection Direction)
|
||||
{
|
||||
Buffer.SkipBytes(4); // Skip type field.
|
||||
|
||||
ExploreSubItem(OutputStream, ref Buffer);
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
void ExploreSubItem(StreamWriter OutputStream, ref ByteStream Buffer)
|
||||
{
|
||||
Buffer.SkipBytes(17);
|
||||
Buffer.SkipBytes(8);
|
||||
|
||||
byte Area = Buffer.ReadByte();
|
||||
UInt16 MainSlot = Buffer.ReadUInt16();
|
||||
Int16 SubSlot = Buffer.ReadInt16();
|
||||
Buffer.SkipBytes(62);
|
||||
string Name = Buffer.ReadString(true);
|
||||
|
||||
if (SubSlot >= 0)
|
||||
OutputStream.Write(" ");
|
||||
|
||||
string AreaName = "Unknown";
|
||||
|
||||
switch (Area)
|
||||
{
|
||||
case 0:
|
||||
AreaName = "Personal Inventory";
|
||||
break;
|
||||
case 1:
|
||||
AreaName = "Bank";
|
||||
break;
|
||||
case 2:
|
||||
AreaName = "Shared Bank";
|
||||
break;
|
||||
case 6:
|
||||
AreaName = "Personal Tribute";
|
||||
break;
|
||||
case 7:
|
||||
AreaName = "Guild Tribute";
|
||||
break;
|
||||
case 8:
|
||||
AreaName = "Merchant";
|
||||
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();
|
||||
byte Weight = Buffer.ReadByte();
|
||||
Buffer.SkipBytes(3);
|
||||
byte NoRent = Buffer.ReadByte();
|
||||
byte NoDrop = Buffer.ReadByte();
|
||||
byte Attune = Buffer.ReadByte();
|
||||
byte Size = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine(" ID: {0} Weight: {1} NoRent: {2} NoDrop: {3} Attune {4} Size {5}", ID, Weight, NoRent, NoDrop, Attune, Size);
|
||||
|
||||
UInt32 Slots = Buffer.ReadUInt32();
|
||||
UInt32 Price = Buffer.ReadUInt32();
|
||||
UInt32 Icon = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(2);
|
||||
UInt32 BenefitFlags = Buffer.ReadUInt32();
|
||||
byte Tradeskills = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine(" Slots: {0} Price: {1} Icon: {2} BenefitFlags {3} Tradeskills: {4}", Slots, Price, Icon, BenefitFlags, Tradeskills);
|
||||
|
||||
byte CR = Buffer.ReadByte();
|
||||
byte DR = Buffer.ReadByte();
|
||||
byte PR = Buffer.ReadByte();
|
||||
byte MR = Buffer.ReadByte();
|
||||
byte FR = Buffer.ReadByte();
|
||||
byte SVC = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine(" CR: {0} DR: {1} PR: {2} MR: {3} FR: {4} SVC: {5}", CR, DR, PR, MR, FR, SVC);
|
||||
|
||||
byte AStr = Buffer.ReadByte();
|
||||
byte ASta = Buffer.ReadByte();
|
||||
byte AAgi = Buffer.ReadByte();
|
||||
byte ADex = Buffer.ReadByte();
|
||||
byte ACha = Buffer.ReadByte();
|
||||
byte AInt = Buffer.ReadByte();
|
||||
byte AWis = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine(" AStr: {0} ASta: {1} AAgi: {2} ADex: {3} ACha: {4} AInt: {5} AWis: {6}", AStr, ASta, AAgi, ADex, ACha, AInt, AWis);
|
||||
|
||||
Int32 HP = Buffer.ReadInt32();
|
||||
Int32 Mana = Buffer.ReadInt32();
|
||||
UInt32 Endurance = Buffer.ReadUInt32();
|
||||
Int32 AC = Buffer.ReadInt32();
|
||||
Int32 Regen = Buffer.ReadInt32();
|
||||
Int32 ManaRegen = Buffer.ReadInt32();
|
||||
Int32 EndRegen = Buffer.ReadInt32();
|
||||
UInt32 Classes = Buffer.ReadUInt32();
|
||||
UInt32 Races = Buffer.ReadUInt32();
|
||||
UInt32 Deity = Buffer.ReadUInt32();
|
||||
Int32 SkillModValue = Buffer.ReadInt32();
|
||||
Buffer.SkipBytes(4);
|
||||
UInt32 SkillModType = Buffer.ReadUInt32();
|
||||
UInt32 BaneDamageRace = Buffer.ReadUInt32();
|
||||
UInt32 BaneDamageBody = Buffer.ReadUInt32();
|
||||
UInt32 BaneDamageRaceAmount = Buffer.ReadUInt32();
|
||||
Int32 BaneDamageAmount = Buffer.ReadInt32();
|
||||
byte Magic = Buffer.ReadByte();
|
||||
Int32 CastTime = Buffer.ReadInt32();
|
||||
UInt32 ReqLevel = Buffer.ReadUInt32();
|
||||
UInt32 RecLevel = Buffer.ReadUInt32();
|
||||
UInt32 ReqSkill = Buffer.ReadUInt32();
|
||||
UInt32 BardType = Buffer.ReadUInt32();
|
||||
Int32 BardValue = Buffer.ReadInt32();
|
||||
byte Light = Buffer.ReadByte();
|
||||
byte Delay = Buffer.ReadByte();
|
||||
byte ElemDamageAmount = Buffer.ReadByte();
|
||||
byte ElemDamageType = Buffer.ReadByte();
|
||||
byte Range = Buffer.ReadByte();
|
||||
UInt32 Damage = Buffer.ReadUInt32();
|
||||
UInt32 Color = Buffer.ReadUInt32();
|
||||
byte ItemType = Buffer.ReadByte();
|
||||
UInt32 Material = Buffer.ReadUInt32();
|
||||
Buffer.SkipBytes(4);
|
||||
UInt32 EliteMaterial = Buffer.ReadUInt32();
|
||||
float SellRate = Buffer.ReadSingle();
|
||||
Int32 CombatEffects = Buffer.ReadInt32();
|
||||
Int32 Shielding = Buffer.ReadInt32();
|
||||
Int32 StunResist = Buffer.ReadInt32();
|
||||
Int32 StrikeThrough = Buffer.ReadInt32();
|
||||
Int32 ExtraDamageSkill = Buffer.ReadInt32();
|
||||
Int32 ExtraDamageAmount = Buffer.ReadInt32();
|
||||
Int32 SpellShield = Buffer.ReadInt32();
|
||||
Int32 Avoidance = Buffer.ReadInt32();
|
||||
Int32 Accuracy = Buffer.ReadInt32();
|
||||
UInt32 CharmFileID = Buffer.ReadUInt32();
|
||||
UInt32 FactionMod1 = Buffer.ReadUInt32();
|
||||
Int32 FactionAmount1 = Buffer.ReadInt32();
|
||||
UInt32 FactionMod2 = Buffer.ReadUInt32();
|
||||
Int32 FactionAmount2 = Buffer.ReadInt32();
|
||||
UInt32 FactionMod3 = Buffer.ReadUInt32();
|
||||
Int32 FactionAmount3 = Buffer.ReadInt32();
|
||||
UInt32 FactionMod4 = Buffer.ReadUInt32();
|
||||
Int32 FactionAmount4 = Buffer.ReadInt32();
|
||||
|
||||
Buffer.ReadString(true); // Charm File
|
||||
|
||||
//Buffer.SkipBytes(64); // Item Secondary Body Struct
|
||||
|
||||
UInt32 AugType = Buffer.ReadUInt32();
|
||||
UInt32 AugRestrict = Buffer.ReadUInt32();
|
||||
|
||||
Buffer.SkipBytes(30); // Augslot stuff
|
||||
|
||||
UInt32 LDONPointType = Buffer.ReadUInt32();
|
||||
UInt32 LDONTheme = Buffer.ReadUInt32();
|
||||
UInt32 LDONPrice = Buffer.ReadUInt32();
|
||||
UInt32 LDONSellBackRate = Buffer.ReadUInt32();
|
||||
UInt32 LDONSold = Buffer.ReadUInt32();
|
||||
|
||||
byte BagType = Buffer.ReadByte();
|
||||
byte BagSlots = Buffer.ReadByte();
|
||||
byte BagSize = Buffer.ReadByte();
|
||||
byte BagWeightReduction = Buffer.ReadByte();
|
||||
|
||||
byte Book = Buffer.ReadByte();
|
||||
byte BookType = Buffer.ReadByte();
|
||||
|
||||
OutputStream.WriteLine("\r\n BagType: {0} BagSlots: {1} BagSize: {2} BagWR: {3}", BagType, BagSlots, BagSize, BagWeightReduction);
|
||||
|
||||
|
||||
|
||||
Buffer.ReadString(true); // Filename
|
||||
Buffer.SkipBytes(76); // Item Tertiary Body Struct
|
||||
Buffer.SkipBytes(30); // Click Effect Struct
|
||||
Buffer.ReadString(true); // Clickname
|
||||
Buffer.SkipBytes(4); // clickunk7
|
||||
Buffer.SkipBytes(30); // Proc Effect Struct
|
||||
Buffer.ReadString(true); // Proc Name
|
||||
Buffer.SkipBytes(4); // unknown5
|
||||
Buffer.SkipBytes(30); // Worn Effect Struct
|
||||
Buffer.ReadString(true); // Worn Name
|
||||
Buffer.SkipBytes(4); // unknown6
|
||||
Buffer.SkipBytes(30); // Worn Effect Struct
|
||||
Buffer.ReadString(true); // Worn Name
|
||||
Buffer.SkipBytes(4); // unknown6
|
||||
Buffer.SkipBytes(30); // Worn Effect Struct
|
||||
Buffer.ReadString(true); // Worn Name
|
||||
Buffer.SkipBytes(4); // unknown6
|
||||
Buffer.SkipBytes(30); // Worn Effect Struct
|
||||
Buffer.ReadString(true); // Worn Name
|
||||
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)
|
||||
{
|
||||
Buffer.SkipBytes(4);
|
||||
ExploreSubItem(OutputStream, ref Buffer);
|
||||
}
|
||||
|
||||
OutputStream.WriteLine("");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchTestServerFebruary52013Decoder : PatchJanuary162013Decoder
|
||||
{
|
||||
public PatchTestServerFebruary52013Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date Test Server February 5 2013.";
|
||||
|
||||
PatchConfFileName = "patch_TestServer-Feb5-2013.conf";
|
||||
|
||||
SupportsSQLGeneration = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Collections.Generic;
|
||||
using EQExtractor2.InternalTypes;
|
||||
using EQExtractor2.OpCodes;
|
||||
using EQPacket;
|
||||
using MyUtils;
|
||||
|
||||
namespace EQExtractor2.Patches
|
||||
{
|
||||
class PatchTestServerJanuary162013Decoder : PatchJanuary162013Decoder
|
||||
{
|
||||
public PatchTestServerJanuary162013Decoder()
|
||||
{
|
||||
Version = "EQ Client Build Date Test Server January 16 2013.";
|
||||
|
||||
PatchConfFileName = "patch_TestServer-Jan16-2013.conf";
|
||||
|
||||
SupportsSQLGeneration = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace EQExtractor2
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new EQExtractor2Form1());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 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")]
|
||||
[assembly: AssemblyDescription("EQExtractor2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("EQEmu Team")]
|
||||
[assembly: AssemblyProduct("EQExtractor2")]
|
||||
[assembly: AssemblyCopyright("Copyright © EQEmu Team 2010")]
|
||||
[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
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("31d666b6-5caf-47af-b8a7-b74ce016c77d")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// 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")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.1
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace EQExtractor2.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[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>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EQExtractor2.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
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
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<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
|
||||
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
|
||||
mimetype set.
|
||||
|
||||
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
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
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
|
||||
: 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
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@@ -0,0 +1,62 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.1
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
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")]
|
||||
public string TextFileViewer {
|
||||
get {
|
||||
return ((string)(this["TextFileViewer"]));
|
||||
}
|
||||
set {
|
||||
this["TextFileViewer"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool ShowDebugWindowOnStartup {
|
||||
get {
|
||||
return ((bool)(this["ShowDebugWindowOnStartup"]));
|
||||
}
|
||||
set {
|
||||
this["ShowDebugWindowOnStartup"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool DumpTimeStamps {
|
||||
get {
|
||||
return ((bool)(this["DumpTimeStamps"]));
|
||||
}
|
||||
set {
|
||||
this["DumpTimeStamps"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="EQExtractor2.Properties" GeneratedClassName="Settings">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="TextFileViewer" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">notepad.exe</Value>
|
||||
</Setting>
|
||||
<Setting Name="ShowDebugWindowOnStartup" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="DumpTimeStamps" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
File diff suppressed because it is too large
Load Diff
+153
@@ -0,0 +1,153 @@
|
||||
namespace EQExtractor2
|
||||
{
|
||||
partial class UserOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.PacketDumpViewerProgram = new System.Windows.Forms.TextBox();
|
||||
this.ShowDebugWindowOnStartup = new System.Windows.Forms.CheckBox();
|
||||
this.ShowTimeStamps = new System.Windows.Forms.CheckBox();
|
||||
this.OptionsOKButton = new System.Windows.Forms.Button();
|
||||
this.OptionsCancelButton = new System.Windows.Forms.Button();
|
||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||
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";
|
||||
this.ShowDebugWindowOnStartup.Size = new System.Drawing.Size(184, 17);
|
||||
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";
|
||||
this.ShowTimeStamps.Size = new System.Drawing.Size(205, 17);
|
||||
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);
|
||||
this.OptionsOKButton.TabIndex = 4;
|
||||
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";
|
||||
this.OptionsCancelButton.Size = new System.Drawing.Size(75, 23);
|
||||
this.OptionsCancelButton.TabIndex = 5;
|
||||
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";
|
||||
this.label2.Size = new System.Drawing.Size(83, 13);
|
||||
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;
|
||||
this.ClientSize = new System.Drawing.Size(527, 166);
|
||||
this.Controls.Add(this.EQPacketDebugFilename);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.OptionsCancelButton);
|
||||
this.Controls.Add(this.OptionsOKButton);
|
||||
this.Controls.Add(this.ShowTimeStamps);
|
||||
this.Controls.Add(this.ShowDebugWindowOnStartup);
|
||||
this.Controls.Add(this.PacketDumpViewerProgram);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Name = "UserOptions";
|
||||
this.Text = "Options";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Button OptionsOKButton;
|
||||
private System.Windows.Forms.Button OptionsCancelButton;
|
||||
public System.Windows.Forms.TextBox PacketDumpViewerProgram;
|
||||
public System.Windows.Forms.CheckBox ShowDebugWindowOnStartup;
|
||||
public System.Windows.Forms.CheckBox ShowTimeStamps;
|
||||
private System.Windows.Forms.ToolTip toolTip1;
|
||||
public System.Windows.Forms.TextBox EQPacketDebugFilename;
|
||||
private System.Windows.Forms.Label label2;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace EQExtractor2
|
||||
{
|
||||
public partial class UserOptions : Form
|
||||
{
|
||||
public UserOptions()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void OptionsOKButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
}
|
||||
|
||||
private void OptionsCancelButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
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
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<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
|
||||
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
|
||||
mimetype set.
|
||||
|
||||
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
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
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
|
||||
: 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
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -0,0 +1,314 @@
|
||||
//
|
||||
// The BitStream class is a direct C# translation of the class of the same name in the ShowEQ source, so the following
|
||||
// Copyright notice applies to that:
|
||||
//
|
||||
// ShowEQ Distributed under GPL
|
||||
// http://www.sourceforge.net/projects/seq
|
||||
//
|
||||
// Copyright 2004 Zaphod (dohpaz@users.sourceforge.net).
|
||||
//
|
||||
// -----------------------------------------------------------
|
||||
//
|
||||
// All other code:
|
||||
//
|
||||
// Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net). Distributed under GPL version 2.
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace MyUtils
|
||||
{
|
||||
public class ByteStream
|
||||
{
|
||||
public ByteStream(byte[] NewBuffer)
|
||||
{
|
||||
Buffer = NewBuffer;
|
||||
|
||||
BufferPointer = 0;
|
||||
}
|
||||
|
||||
public uint Length()
|
||||
{
|
||||
return (uint)Buffer.Length;
|
||||
}
|
||||
|
||||
public UInt32 ReadUInt32()
|
||||
{
|
||||
UInt32 Value = BitConverter.ToUInt32(Buffer, BufferPointer);
|
||||
|
||||
BufferPointer += 4;
|
||||
|
||||
return Value;
|
||||
}
|
||||
|
||||
public Int32 ReadInt32()
|
||||
{
|
||||
Int32 Value = BitConverter.ToInt32(Buffer, BufferPointer);
|
||||
|
||||
BufferPointer += 4;
|
||||
|
||||
return Value;
|
||||
}
|
||||
|
||||
public float ReadSingle()
|
||||
{
|
||||
float Value = BitConverter.ToSingle(Buffer, BufferPointer);
|
||||
|
||||
BufferPointer += 4;
|
||||
|
||||
return Value;
|
||||
}
|
||||
public UInt16 ReadUInt16()
|
||||
{
|
||||
UInt16 Value = BitConverter.ToUInt16(Buffer, BufferPointer);
|
||||
|
||||
BufferPointer += 2;
|
||||
|
||||
return Value;
|
||||
}
|
||||
|
||||
public Int16 ReadInt16()
|
||||
{
|
||||
Int16 Value = BitConverter.ToInt16(Buffer, BufferPointer);
|
||||
|
||||
BufferPointer += 2;
|
||||
|
||||
return Value;
|
||||
}
|
||||
public byte ReadByte()
|
||||
{
|
||||
return Buffer[BufferPointer++];
|
||||
}
|
||||
|
||||
public byte[] ReadBytes(int Count)
|
||||
{
|
||||
byte[] Slice = new byte[Count];
|
||||
|
||||
Array.Copy(Buffer, BufferPointer, Slice, 0, Count);
|
||||
|
||||
BufferPointer += Count;
|
||||
|
||||
return Slice;
|
||||
}
|
||||
|
||||
public void SkipBytes(int Count)
|
||||
{
|
||||
BufferPointer += Count;
|
||||
}
|
||||
|
||||
public string ReadString(bool Escape)
|
||||
{
|
||||
string Result = "";
|
||||
|
||||
while(Buffer[BufferPointer] != 0)
|
||||
{
|
||||
if (Escape && ((char)Buffer[BufferPointer] == '\''))
|
||||
Result += '\\';
|
||||
|
||||
Result += (char)Buffer[BufferPointer++];
|
||||
}
|
||||
|
||||
++BufferPointer;
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
public string ReadFixedLengthString(int Length, bool Escape)
|
||||
{
|
||||
int StartingPosition = BufferPointer;
|
||||
|
||||
string Result = "";
|
||||
|
||||
while (Buffer[BufferPointer] != 0)
|
||||
{
|
||||
if (Escape && ((char)Buffer[BufferPointer] == '\''))
|
||||
Result += '\\';
|
||||
|
||||
Result += (char)Buffer[BufferPointer++];
|
||||
}
|
||||
|
||||
BufferPointer = StartingPosition + Length;
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
public void SetPosition(int NewPosition)
|
||||
{
|
||||
BufferPointer = NewPosition;
|
||||
}
|
||||
|
||||
public int GetPosition()
|
||||
{
|
||||
return BufferPointer;
|
||||
}
|
||||
|
||||
public byte[] Buffer;
|
||||
|
||||
int BufferPointer;
|
||||
}
|
||||
|
||||
class BitStream
|
||||
{
|
||||
public BitStream(byte[] Data, UInt32 Length)
|
||||
{
|
||||
m_data = Data;
|
||||
TotalBits = Length * 8;
|
||||
Reset();
|
||||
}
|
||||
public void Reset()
|
||||
{
|
||||
CurrentBit = 0;
|
||||
}
|
||||
public UInt32 readUInt(int bitCount)
|
||||
{
|
||||
// Make sure we have the bits first.
|
||||
if (CurrentBit + bitCount > TotalBits)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
UInt32 currentByte = (CurrentBit >> 3);
|
||||
UInt32 Out = 0;
|
||||
|
||||
// Partial bytes in the lead and end. Full bytes in the middle.
|
||||
Int32 leadPartialBitCount = 8 - ((Int32)CurrentBit % 8);
|
||||
UInt32 middleByteCount;
|
||||
Int32 tailPartialBitCount;
|
||||
|
||||
if (leadPartialBitCount == 8)
|
||||
{
|
||||
// Lead partial is a byte. So just put it in the middle.
|
||||
leadPartialBitCount = 0;
|
||||
}
|
||||
|
||||
if (leadPartialBitCount > bitCount)
|
||||
{
|
||||
// All the bits we need are in the lead partial. Note that when
|
||||
// the lead partial is byte aligned, this won't process it. Instead
|
||||
// it will be handled by the tailPartialBitCount.
|
||||
Out = m_data[currentByte] & (((UInt32)1 << leadPartialBitCount) - 1);
|
||||
CurrentBit += (UInt32)bitCount;
|
||||
|
||||
return Out >> (leadPartialBitCount - bitCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Spanning multiple bytes. leadPartialBitCount is correct.
|
||||
// Calculate middle and tail.
|
||||
middleByteCount = ((UInt32)bitCount - (UInt32)leadPartialBitCount) / 8;
|
||||
tailPartialBitCount =
|
||||
bitCount - ((Int32)leadPartialBitCount + (Int32)middleByteCount*8);
|
||||
}
|
||||
|
||||
if (leadPartialBitCount > 0)
|
||||
{
|
||||
// Pull in partial from the lead byte
|
||||
Out |= m_data[currentByte] & (UInt32)((1 << leadPartialBitCount) - 1);
|
||||
currentByte++;
|
||||
}
|
||||
|
||||
// Middle
|
||||
for (int i=0; i<middleByteCount; i++)
|
||||
{
|
||||
Out = (Out << 8) | m_data[currentByte];
|
||||
currentByte++;
|
||||
}
|
||||
|
||||
// And the end.
|
||||
if (tailPartialBitCount > 0)
|
||||
{
|
||||
Out = (UInt32)((Out << tailPartialBitCount) |
|
||||
(m_data[currentByte] >> (8 - tailPartialBitCount)));
|
||||
}
|
||||
|
||||
// Update the current bit
|
||||
CurrentBit += (UInt32)bitCount;
|
||||
|
||||
return Out;
|
||||
}
|
||||
|
||||
public Int32 readInt(Int32 bitCount)
|
||||
{
|
||||
// Sign
|
||||
UInt32 sign = readUInt(1);
|
||||
Int32 retval = (Int32)readUInt(bitCount - 1);
|
||||
|
||||
return retval * ((sign == 1) ? -1 : 1);
|
||||
}
|
||||
|
||||
|
||||
private byte[] m_data;
|
||||
private UInt32 TotalBits;
|
||||
private UInt32 CurrentBit;
|
||||
|
||||
}
|
||||
class Utils
|
||||
{
|
||||
public static string HexDump(byte[] bytes)
|
||||
{
|
||||
StringBuilder Dump = new StringBuilder();
|
||||
|
||||
string Hex = "", Ascii = "";
|
||||
|
||||
int Offset = 0, i = 0, Length = bytes.Length;
|
||||
|
||||
while (i < Length)
|
||||
{
|
||||
Hex += bytes[i].ToString("x2") + " ";
|
||||
|
||||
Ascii += (((bytes[i] >= 32) && (bytes[i] <= 126)) ? ((char)bytes[i]).ToString() : ".");
|
||||
|
||||
if (((++i % 16) == 0) || (i == Length))
|
||||
{
|
||||
Dump.AppendFormat("{0:000} | {1} | {2}\r\n", Offset, Hex.PadRight(48), Ascii);
|
||||
|
||||
Hex = Ascii = "";
|
||||
|
||||
Offset = i;
|
||||
}
|
||||
}
|
||||
return Dump.ToString();
|
||||
}
|
||||
|
||||
public static string ReadNullTerminatedString(byte[] Buffer, int Offset, int MaxSize, bool Escape)
|
||||
{
|
||||
string Result = "";
|
||||
|
||||
for (int i = 0; i < MaxSize && Buffer[Offset + i] != 0; ++i)
|
||||
{
|
||||
if(Escape && ((char)Buffer[Offset + i] == '\''))
|
||||
Result += '\\';
|
||||
|
||||
Result += (char)Buffer[Offset + i];
|
||||
}
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
public static string MakeCleanName(string Name)
|
||||
{
|
||||
StringBuilder CleanName = new StringBuilder();
|
||||
|
||||
foreach(char c in Name)
|
||||
if(!Char.IsDigit(c))
|
||||
CleanName.Append(c);
|
||||
|
||||
return CleanName.ToString();
|
||||
}
|
||||
|
||||
public static float EQ19ToFloat(Int32 EQ19Value)
|
||||
{
|
||||
if ((EQ19Value & 0x40000) > 0)
|
||||
EQ19Value = -(0x7FFFF - EQ19Value + 1);
|
||||
|
||||
return (float)EQ19Value / (float)(1 << 3);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
||||
<section name="EQExtractor2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup><userSettings>
|
||||
<EQExtractor2.Properties.Settings>
|
||||
<setting name="TextFileViewer" serializeAs="String">
|
||||
<value>notepad.exe</value>
|
||||
</setting>
|
||||
<setting name="ShowDebugWindowOnStartup" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="DumpTimeStamps" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</EQExtractor2.Properties.Settings>
|
||||
</userSettings>
|
||||
</configuration>
|
||||
@@ -0,0 +1,616 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x0000a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x5d32 #
|
||||
OP_ApproveWorld=0x1f87 #
|
||||
OP_LogServer=0x44ae #
|
||||
OP_SendCharInfo=0x1513 #
|
||||
OP_ExpansionInfo=0x1771 #
|
||||
OP_GuildsList=0x5b0b #
|
||||
OP_EnterWorld=0x1190 #
|
||||
OP_PostEnterWorld=0x4d5c #
|
||||
OP_World_Client_CRC1=0x4552 #
|
||||
OP_World_Client_CRC2=0x3e50 #
|
||||
OP_SendSpellChecksum=0x0000 #
|
||||
OP_SendSkillCapsChecksum=0x0000 #
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 #
|
||||
OP_CharacterCreateRequest=0x0000 #
|
||||
OP_CharacterCreate=0x0000 #
|
||||
OP_RandomNameGenerator=0x0000 #
|
||||
OP_ApproveName=0x0000 #
|
||||
|
||||
OP_MOTD=0x097f #
|
||||
OP_SetChatServer=0x0360 #
|
||||
OP_SetChatServer2=0x4399 #
|
||||
OP_ZoneServerInfo=0x710e #
|
||||
OP_WorldComplete=0x3aef #
|
||||
OP_WorldUnknown001=0x0000 #
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 #
|
||||
OP_ZoneEntry=0x02d6 #
|
||||
OP_ReqNewZone=0x1c36 #
|
||||
OP_NewZone=0x0254 #
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x1a58 #
|
||||
OP_TributeUpdate=0x4895 #
|
||||
OP_TributeTimer=0x0000 #
|
||||
OP_TaskDescription=0x0000 #
|
||||
OP_TaskActivity=0x0000 #
|
||||
OP_CompletedTasks=0x0000 #
|
||||
OP_Weather=0x4658 #
|
||||
OP_SendAATable=0x1d99 #
|
||||
OP_UpdateAA=0x0000 #
|
||||
OP_RespondAA=0x0000 #
|
||||
OP_ReqClientSpawn=0x47e7 #
|
||||
OP_SpawnDoor=0x6cfe #
|
||||
OP_GroundSpawn=0x442a #
|
||||
OP_SendZonepoints=0x5851 #
|
||||
OP_SendAAStats=0x0000 #
|
||||
OP_WorldObjectsSent=0x7b73 #
|
||||
OP_BlockedBuffs=0x664a #
|
||||
OP_SendExpZonein=0x54e8 #
|
||||
OP_SendTributes=0x0000 #
|
||||
OP_TributeInfo=0x0000 #
|
||||
OP_SendGuildTributes=0x0000 #
|
||||
OP_AAExpUpdate=0x0000 #
|
||||
OP_ExpUpdate=0x0000 #
|
||||
OP_HPUpdate=0x6967 # Was 0x6967 - Causing crash ?
|
||||
OP_ManaChange=0x0000 #
|
||||
OP_TGB=0x0000 #
|
||||
OP_SpecialMesg=0x156c #
|
||||
OP_GuildMemberList=0x51bc #
|
||||
OP_GuildMOTD=0x0000 #
|
||||
OP_CharInventory=0x307d #
|
||||
OP_WearChange=0x0000 #
|
||||
OP_ClientUpdate=0x7062 #
|
||||
OP_ClientReady=0x6cdc #
|
||||
OP_SetServerFilter=0x0000 #
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 #
|
||||
OP_GetGuildMOTDReply=0x0000 #
|
||||
OP_GuildMemberUpdate=0x0000 #
|
||||
OP_GuildInvite=0x0000 #
|
||||
OP_GuildRemove=0x0000 #
|
||||
OP_GuildPeace=0x0000 #
|
||||
OP_SetGuildMOTD=0x0000 #
|
||||
OP_GuildList=0x5b0b #
|
||||
OP_GuildWar=0x0000 #
|
||||
OP_GuildLeader=0x0000 #
|
||||
OP_GuildDelete=0x0000 #
|
||||
OP_GuildInviteAccept=0x0000 #
|
||||
OP_GuildDemote=0x0000 #
|
||||
OP_GuildPublicNote=0x0000 #
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 #
|
||||
OP_GMBecomeNPC=0x0000 #
|
||||
OP_GMZoneRequest=0x6f79 #
|
||||
OP_GMZoneRequest2=0x02d6 #
|
||||
OP_GMGoto=0x0000 #
|
||||
OP_GMSearchCorpse=0x0000 #
|
||||
OP_GMHideMe=0x0000 #
|
||||
OP_GMDelCorpse=0x0000 #
|
||||
OP_GMApproval=0x0000 #
|
||||
OP_GMToggle=0x0000 #
|
||||
OP_GMSummon=0x0000 #
|
||||
OP_GMEmoteZone=0x0000 #
|
||||
OP_GMEmoteWorld=0x0000 #
|
||||
OP_GMFind=0x0000 #
|
||||
OP_GMKick=0x0000 #
|
||||
OP_GMKill=0x0000 #
|
||||
OP_GMNameChange=0x0000 #
|
||||
OP_GMLastName=0x0000 #
|
||||
|
||||
OP_InspectAnswer=0x0000 #
|
||||
OP_BeginCast=0x0d5a #
|
||||
OP_BuffFadeMsg=0x50c2 #
|
||||
OP_ConsentResponse=0x0000 #
|
||||
OP_MemorizeSpell=0x0000 #
|
||||
OP_SwapSpell=0x0000 #
|
||||
OP_CastSpell=0x7286 #
|
||||
OP_Consider=0x0000 #
|
||||
OP_FormattedMessage=0x32c6 #
|
||||
OP_SimpleMessage=0x0000 # C 0x0000
|
||||
OP_Buff=0x0000 #
|
||||
OP_Illusion=0x0000 #
|
||||
OP_MoneyOnCorpse=0x0000 #
|
||||
OP_RandomReply=0x0000 #
|
||||
OP_DenyResponse=0x0000 #
|
||||
OP_SkillUpdate=0x0000 #
|
||||
OP_GMTrainSkillConfirm=0x0000 #
|
||||
OP_RandomReq=0x0000 #
|
||||
OP_Death=0x49b6 #
|
||||
OP_Bind_Wound=0x0000 #
|
||||
OP_GMTraining=0x0000 #
|
||||
OP_GMEndTraining=0x0000 #
|
||||
OP_GMTrainSkill=0x0000 #
|
||||
OP_Animation=0x3ea4 # Was 0x0000
|
||||
OP_Begging=0x0000 #
|
||||
OP_Consent=0x0000 #
|
||||
OP_ConsentDeny=0x0000 #
|
||||
OP_AutoFire=0x0000 #
|
||||
OP_PetCommands=0x0000 #
|
||||
OP_DeleteSpell=0x0000 #
|
||||
OP_Surname=0x0000 #
|
||||
OP_ClearSurname=0x0000 #
|
||||
OP_FaceChange=0x0000 #
|
||||
OP_SenseHeading=0x0000 #
|
||||
OP_Action=0x4200 # 0x4200
|
||||
OP_ConsiderCorpse=0x0000 #
|
||||
OP_HideCorpse=0x0000 #
|
||||
OP_Bug=0x0000 #
|
||||
OP_Feedback=0x0000 #
|
||||
OP_Report=0x0000 #
|
||||
OP_Damage=0x7519 #
|
||||
OP_ChannelMessage=0x2e79 #
|
||||
OP_Assist=0x0000 #
|
||||
OP_AssistGroup=0x0000 #
|
||||
OP_MoveCoin=0x0000 #
|
||||
OP_ZonePlayerToBind=0x0000 #
|
||||
OP_KeyRing=0x0000 #
|
||||
OP_WhoAllRequest=0x0000 #
|
||||
OP_WhoAllResponse=0x0000 #
|
||||
OP_FriendsWho=0x0000 #
|
||||
OP_ConfirmDelete=0x0000 #
|
||||
OP_Logout=0x517b #
|
||||
OP_Rewind=0x0000 #
|
||||
OP_TargetCommand=0x0000 #
|
||||
OP_InspectRequest=0x0000 #
|
||||
OP_Hide=0x0000 #
|
||||
OP_Jump=0x0000 #
|
||||
OP_Camp=0x0a1d # Was 0x1436
|
||||
OP_Emote=0x0000 #
|
||||
OP_SetRunMode=0x0000 #
|
||||
OP_BankerChange=0x0000 #
|
||||
OP_TargetMouse=0x5f5e #
|
||||
OP_MobHealth=0x0000 #
|
||||
OP_InitialMobHealth=0x0000 #
|
||||
OP_TargetHoTT=0x0000 #
|
||||
OP_TargetBuffs=0x0000 #
|
||||
OP_BuffCreate=0x0000
|
||||
OP_DeleteSpawn=0x725a #
|
||||
OP_AutoAttack=0x1df9 #
|
||||
OP_AutoAttack2=0x0000 #
|
||||
OP_Consume=0x0000 #
|
||||
OP_MoveItem=0x0000 #
|
||||
OP_DeleteItem=0x0000 #
|
||||
OP_DeleteCharge=0x0000 #
|
||||
OP_ItemPacket=0x7c87 #
|
||||
OP_ItemLinkResponse=0x0000 #
|
||||
OP_ItemLinkClick=0x0000 #
|
||||
OP_NewSpawn=0x0000 #
|
||||
OP_Track=0x0000 #
|
||||
OP_TrackTarget=0x0000 #
|
||||
OP_TrackUnknown=0x0000 #
|
||||
OP_ClickDoor=0x3154 #
|
||||
OP_MoveDoor=0x470e #
|
||||
OP_EnvDamage=0x0000 #
|
||||
OP_BoardBoat=0x0000 #
|
||||
OP_Forage=0x0000 #
|
||||
OP_LeaveBoat=0x0000 #
|
||||
OP_ControlBoat=0x0000 #
|
||||
OP_SafeFallSuccess=0x0000 #
|
||||
OP_RezzComplete=0x0000 #
|
||||
OP_RezzRequest=0x0000 #
|
||||
OP_RezzAnswer=0x0000 #
|
||||
OP_Shielding=0x0000 #
|
||||
OP_RequestDuel=0x0000 #
|
||||
OP_MobRename=0x0000 #
|
||||
OP_AugmentItem=0x0000 #
|
||||
OP_WeaponEquip1=0x0000 #
|
||||
OP_WeaponEquip2=0x0000 #
|
||||
OP_WeaponUnequip2=0x0000 #
|
||||
OP_ApplyPoison=0x0000 #
|
||||
OP_Save=0x1436 #
|
||||
OP_TestBuff=0x0000 #
|
||||
OP_CustomTitles=0x0000 #
|
||||
OP_Split=0x0000 #
|
||||
OP_YellForHelp=0x0000 #
|
||||
OP_LoadSpellSet=0x0000 #
|
||||
OP_Bandolier=0x0000 #
|
||||
OP_PotionBelt=0x0000 #
|
||||
OP_DuelResponse=0x0000 #
|
||||
OP_DuelResponse2=0x0000 #
|
||||
OP_SaveOnZoneReq=0x2913 #
|
||||
OP_ReadBook=0x0000 #
|
||||
OP_Dye=0x0000 #
|
||||
OP_InterruptCast=0x0000 #
|
||||
OP_AAAction=0x0000 #
|
||||
OP_LeadershipExpToggle=0x0000 #
|
||||
OP_LeadershipExpUpdate=0x0000 #
|
||||
OP_PurchaseLeadershipAA=0x0000 #
|
||||
OP_UpdateLeadershipAA=0x0000 #
|
||||
OP_MarkNPC=0x0000 #
|
||||
OP_ClearNPCMarks=0x0000 #
|
||||
OP_DoGroupLeadershipAbility=0x0000 #
|
||||
OP_GroupLeadershipAAUpdate=0x0000 #
|
||||
OP_DelegateAbility=0x0000 #
|
||||
OP_SetGroupTarget=0x0000 #
|
||||
OP_Charm=0x0000 #
|
||||
OP_Stun=0x0000 #
|
||||
OP_SendFindableNPCs=0x0786 #
|
||||
OP_FindPersonRequest=0x0000 #
|
||||
OP_FindPersonReply=0x0000 #
|
||||
OP_Sound=0x0000 #
|
||||
OP_PetBuffWindow=0x0000 #
|
||||
OP_LevelAppearance=0x0000 #
|
||||
OP_Translocate=0x0000 #
|
||||
OP_Sacrifice=0x0000 #
|
||||
OP_PopupResponse=0x0000 #
|
||||
OP_OnLevelMessage=0x0000 #
|
||||
OP_AugmentInfo=0x0000 #
|
||||
OP_Petition=0x0000 #
|
||||
OP_SomeItemPacketMaybe=0x4200 #
|
||||
OP_SomeItemPacketMaybe=0x0000 #
|
||||
OP_PVPStats=0x0000 #
|
||||
OP_PVPLeaderBoardRequest=0x0000 #
|
||||
OP_PVPLeaderBoardReply=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 #
|
||||
OP_RestState=0x0000 #
|
||||
OP_RespawnWindow=0x0000 #
|
||||
OP_DisciplineTimer=0x0000 #
|
||||
OP_LDoNButton=0x0000 #
|
||||
OP_SetStartCity=0x0000 #
|
||||
OP_VoiceMacroIn=0x0000 #
|
||||
OP_VoiceMacroOut=0x0000 #
|
||||
OP_ItemViewUnknown=0x0000 #
|
||||
OP_VetRewardsAvaliable=0x0000 #
|
||||
OP_VetClaimRequest=0x0000 #
|
||||
OP_VetClaimReply=0x0000 #
|
||||
OP_CrystalCountUpdate=0x0000 #
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 #
|
||||
OP_MobUpdate=0x4656 #
|
||||
OP_NPCMoveUpdate=0x38e0 #
|
||||
OP_CameraEffect=0x0000 #
|
||||
OP_SpellEffect=0x0000 #
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 #
|
||||
OP_ManaUpdate=0x0ff4 #
|
||||
OP_EnduranceUpdate=0x0000 #
|
||||
OP_MobManaUpdate=0x1912 #
|
||||
OP_MobEnduranceUpdate=0x0000 #
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x0000 #
|
||||
OP_EndLootRequest=0x0000 #
|
||||
OP_LootItem=0x0000 #
|
||||
OP_LootComplete=0x0000 #
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 #
|
||||
OP_TraderDelItem=0x0000 #
|
||||
OP_BecomeTrader=0x0000 #
|
||||
OP_TraderShop=0x0000 #
|
||||
OP_Trader=0x0000 #
|
||||
OP_TraderBuy=0x0000 #
|
||||
OP_Barter=0x0000 #
|
||||
OP_ShopItem=0x0000 #
|
||||
OP_BazaarInspect=0x0000 #
|
||||
OP_Bazaar=0x0000 #
|
||||
OP_TraderItemUpdate=0x0000 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 #
|
||||
OP_TradeAcceptClick=0x0000 #
|
||||
OP_TradeRequestAck=0x0000 #
|
||||
OP_TradeCoins=0x0000 #
|
||||
OP_FinishTrade=0x0000 #
|
||||
OP_CancelTrade=0x0000 #
|
||||
OP_TradeMoneyUpdate=0x0000 #
|
||||
OP_MoneyUpdate=0x0000 #
|
||||
OP_TradeBusy=0x0000 #
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 #
|
||||
OP_FinishWindow2=0x0000 #
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 #
|
||||
OP_ItemVerifyReply=0x0000 #
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 #
|
||||
OP_ShopRequest=0x58c5 #
|
||||
OP_ShopEnd=0x3753 #
|
||||
OP_ShopEndConfirm=0x0000 #
|
||||
OP_ShopPlayerBuy=0x0000 #
|
||||
OP_ShopDelItem=0x0000 #
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 #
|
||||
OP_ClickObjectAction=0x0000 #
|
||||
OP_ClearObject=0x0000 #
|
||||
OP_RecipeDetails=0x0000 #
|
||||
OP_RecipesFavorite=0x0000 #
|
||||
OP_RecipesSearch=0x0000 #
|
||||
OP_RecipeReply=0x0000 #
|
||||
OP_RecipeAutoCombine=0x0000 #
|
||||
OP_TradeSkillCombine=0x0000 #
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 #
|
||||
OP_OpenTributeMaster=0x0000 #
|
||||
OP_SelectTribute=0x0000 #
|
||||
OP_TributeItem=0x0000 #
|
||||
OP_TributeMoney=0x0000 #
|
||||
OP_TributeToggle=0x0000 #
|
||||
OP_TributePointUpdate=0x0000 #
|
||||
OP_TributeNPC=0x0000 #
|
||||
OP_GuildTributeInfo=0x0000 #
|
||||
OP_OpenTributeReply=0x0000 #
|
||||
# OP_GuildTributeStatus=0x0000 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 #
|
||||
OP_AdventureFinish=0x0000 #
|
||||
OP_AdventureInfoRequest=0x0000 #
|
||||
OP_AdventureInfo=0x0000 #
|
||||
OP_AdventureRequest=0x0000 #
|
||||
OP_AdventureDetails=0x0000 #
|
||||
OP_AdventureData=0x0000 #
|
||||
OP_AdventureUpdate=0x0000 #
|
||||
OP_AdventureMerchantRequest=0x0000 #
|
||||
OP_AdventureMerchantResponse=0x0000 #
|
||||
OP_AdventureMerchantPurchase=0x0000 #
|
||||
OP_AdventureMerchantSell=0x0000 #
|
||||
OP_AdventurePointsUpdate=0x0000 #
|
||||
OP_AdventureStatsRequest=0x0000 #
|
||||
OP_AdventureStatsReply=0x0000 #
|
||||
OP_AdventureLeaderboardRequest=0x0000 #
|
||||
OP_AdventureLeaderboardReply=0x0000 #
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 #
|
||||
OP_GroupInvite=0x0000 #
|
||||
OP_GroupFollow=0x0000 #
|
||||
OP_GroupUpdate=0x0000 #
|
||||
OP_GroupUpdateB=0x0000 #
|
||||
OP_GroupCancelInvite=0x0000 #
|
||||
OP_GroupAcknowledge=0x0000 #
|
||||
OP_GroupDelete=0x0000 #
|
||||
OP_CancelInvite=0x0000 #
|
||||
OP_GroupFollow2=0x0000 #
|
||||
OP_GroupInvite2=0x0000 #
|
||||
OP_GroupDisbandYou=0x0000 #
|
||||
OP_GroupDisbandOther=0x0000 #
|
||||
OP_GroupLeaderChange=0x0000 #
|
||||
OP_GroupRoles=0x0000 #
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 #
|
||||
OP_LFGGetMatchesRequest=0x0000 #
|
||||
OP_LFGGetMatchesResponse=0x0000 #
|
||||
OP_LFPGetMatchesRequest=0x0000 #
|
||||
OP_LFPGetMatchesResponse=0x0000 #
|
||||
OP_LFPCommand=0x0000 #
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 #
|
||||
OP_RaidUpdate=0x0000 #
|
||||
OP_RaidJoin=0x0000 #
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x0000 #
|
||||
OP_CombatAbility=0x0000 #
|
||||
OP_SenseTraps=0x0000 #
|
||||
OP_PickPocket=0x0000 #
|
||||
OP_DisarmTraps=0x0000 #
|
||||
OP_Disarm=0x0000 #
|
||||
OP_Sneak=0x0000 #
|
||||
OP_Fishing=0x0000 #
|
||||
OP_InstillDoubt=0x0000 #
|
||||
OP_FeignDeath=0x0000 #
|
||||
OP_Mend=0x0000 #
|
||||
OP_LDoNOpen=0x0000 #
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 #
|
||||
OP_TaskMemberList=0x0000 #
|
||||
OP_OpenNewTasksWindow=0x0000 #
|
||||
OP_AvaliableTask=0x0000 #
|
||||
OP_AcceptNewTask=0x0000 #
|
||||
OP_TaskHistoryRequest=0x0000 #
|
||||
OP_TaskHistoryReply=0x0000 #
|
||||
OP_CancelTask=0x0000 #
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 #
|
||||
OP_RequestTitles=0x0000 #
|
||||
OP_SendTitleList=0x0000 #
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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_MercenaryDataRequest=0x367f
|
||||
OP_MercenaryDataResponse=0x6a9b
|
||||
OP_MercenaryHire=0x3671
|
||||
OP_MercenaryAssign=0x4be6
|
||||
OP_MercenaryTimer=0x6364
|
||||
OP_MercenaryUnknown1=0x2ef8
|
||||
@@ -0,0 +1,633 @@
|
||||
# OPCodes not used by EQExtractor2 are most likely not correct.
|
||||
#
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x0000 #
|
||||
OP_ApproveWorld=0x0000 #
|
||||
OP_LogServer=0x0000 #
|
||||
OP_SendCharInfo=0x0000 #
|
||||
OP_ExpansionInfo=0x0000 #
|
||||
OP_GuildsList=0x0000 #
|
||||
OP_EnterWorld=0x0000 #
|
||||
OP_PostEnterWorld=0x0000 #
|
||||
OP_World_Client_CRC1=0x0000 #
|
||||
OP_World_Client_CRC2=0x0000 #
|
||||
OP_SendSpellChecksum=0x0000 #
|
||||
OP_SendSkillCapsChecksum=0x0000 #
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 #
|
||||
OP_CharacterCreateRequest=0x0000 #
|
||||
OP_CharacterCreate=0x0000 #
|
||||
OP_RandomNameGenerator=0x0000 #
|
||||
OP_ApproveName=0x0000 #
|
||||
|
||||
OP_MOTD=0x0000 #
|
||||
OP_SetChatServer=0x0000 #
|
||||
OP_SetChatServer2=0x0000 #
|
||||
OP_ZoneServerInfo=0x0000 #
|
||||
OP_WorldComplete=0x0000 #
|
||||
OP_WorldUnknown001=0x0000 #
|
||||
OP_FloatListThing=0x0000 #
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x0000 #
|
||||
OP_WorldClientReady=0x0000 # Testing VoA 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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 #
|
||||
OP_ZoneEntry=0x4938 #
|
||||
OP_ReqNewZone=0x0000 #
|
||||
OP_NewZone=0x3401 #
|
||||
OP_ZoneSpawns=0x0000 #
|
||||
OP_PlayerProfile=0x078e #
|
||||
OP_TimeOfDay=0x0000 #
|
||||
OP_LevelUpdate=0x0000 #
|
||||
OP_Stamina=0x0000 #
|
||||
OP_RequestClientZoneChange=0x0000 #
|
||||
OP_ZoneChange=0x0000 #
|
||||
|
||||
OP_LockoutTimerInfo=0x0000 #
|
||||
OP_ZoneServerReady=0x0000 #
|
||||
OP_ZoneInUnknown=0x0000 #
|
||||
OP_LogoutReply=0x0000 #
|
||||
OP_PreLogoutReply=0x0000 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x0000 #
|
||||
OP_ChangeSize=0x0000 #
|
||||
OP_TributeUpdate=0x0000 #
|
||||
OP_TributeTimer=0x0000 # Testing VoA 0x1525
|
||||
OP_TaskDescription=0x0000 #
|
||||
OP_TaskActivity=0x0000 #
|
||||
OP_CompletedTasks=0x0000 #
|
||||
OP_Weather=0x0000 #
|
||||
OP_SendAATable=0x40e8 # Testing VoA 0x6a7e
|
||||
OP_UpdateAA=0x0000 # Testing VoA 0x5363
|
||||
OP_RespondAA=0x0000 # Testing VoA 0x0643 or maybe 0x7bf6
|
||||
OP_ReqClientSpawn=0x0000 #
|
||||
OP_SpawnDoor=0x0e71 #
|
||||
OP_GroundSpawn=0x6618 #
|
||||
OP_SendZonepoints=0x0c54 #
|
||||
OP_SendAAStats=0x0000 #
|
||||
OP_WorldObjectsSent=0x0000 #
|
||||
OP_BlockedBuffs=0x0000 #
|
||||
OP_RemoveBlockedBuffs=0x0000 #
|
||||
OP_ClearBlockedBuffs=0x0000 #
|
||||
OP_SendExpZonein=0x0000 #
|
||||
OP_SendTributes=0x0000 #
|
||||
OP_TributeInfo=0x0000 #
|
||||
OP_SendGuildTributes=0x0000 #
|
||||
OP_AAExpUpdate=0x0000 #
|
||||
OP_ExpUpdate=0x0000 # Testing VoA 0x0555
|
||||
OP_HPUpdate=0x0000 #
|
||||
OP_ManaChange=0x0000 #
|
||||
OP_TGB=0x0000 #
|
||||
OP_SpecialMesg=0x0000 #
|
||||
OP_GuildMemberList=0x0000 #
|
||||
OP_GuildMOTD=0x0000 # Testing VoA 0x0a1d
|
||||
OP_CharInventory=0x0000 # Testing VoA 0x6cfe
|
||||
OP_WearChange=0x0000 #
|
||||
OP_ClientUpdate=0x0000 #
|
||||
OP_ClientReady=0x0000 #
|
||||
OP_SetServerFilter=0x0000 #
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 #
|
||||
OP_GetGuildMOTDReply=0x0000 #
|
||||
OP_GuildMemberUpdate=0x0000 #
|
||||
OP_GuildInvite=0x0000 #
|
||||
OP_GuildRemove=0x0000 #
|
||||
OP_GuildPeace=0x0000 #
|
||||
OP_SetGuildMOTD=0x0000 #
|
||||
OP_GuildList=0x0000 #
|
||||
OP_GuildWar=0x0000 #
|
||||
OP_GuildLeader=0x0000 #
|
||||
OP_GuildDelete=0x0000 #
|
||||
OP_GuildInviteAccept=0x0000 #
|
||||
OP_GuildDemote=0x0000 #
|
||||
OP_GuildPublicNote=0x0000 #
|
||||
OP_GuildManageBanker=0x0000 #
|
||||
OP_GuildBank=0x0000 #
|
||||
OP_SetGuildRank=0x0000 #
|
||||
OP_GuildUpdateURLAndChannel=0x0000 #
|
||||
OP_GuildMemberLevelUpdate=0x0000 #
|
||||
OP_ZoneGuildList=0x0000 #
|
||||
OP_GetGuildsList=0x0000 #
|
||||
OP_GuildStatus=0x0000 #
|
||||
OP_GuildCreate=0x0000 #
|
||||
# OP_GuildManageRemove=0x0000 #
|
||||
# OP_GuildManageAdd=0x0000 #
|
||||
# OP_GuildManageStatus=0x0000 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 #
|
||||
OP_GMBecomeNPC=0x0000 #
|
||||
OP_GMZoneRequest=0x0000 #
|
||||
OP_GMZoneRequest2=0x0000 #
|
||||
OP_GMGoto=0x0000 #
|
||||
OP_GMSearchCorpse=0x0000 #
|
||||
OP_GMHideMe=0x0000 #
|
||||
OP_GMDelCorpse=0x0000 #
|
||||
OP_GMApproval=0x0000 #
|
||||
OP_GMToggle=0x0000 #
|
||||
OP_GMSummon=0x0000 #
|
||||
OP_GMEmoteZone=0x0000 #
|
||||
OP_GMEmoteWorld=0x0000 #
|
||||
OP_GMFind=0x0000 #
|
||||
OP_GMKick=0x0000 #
|
||||
OP_GMKill=0x0000 #
|
||||
OP_GMNameChange=0x0000 #
|
||||
OP_GMLastName=0x0000 #
|
||||
|
||||
OP_InspectAnswer=0x0000 #
|
||||
OP_BeginCast=0x0000 #
|
||||
OP_BuffFadeMsg=0x0000 #
|
||||
OP_ConsentResponse=0x0000 #
|
||||
OP_MemorizeSpell=0x0000 #
|
||||
OP_SwapSpell=0x0000 #
|
||||
OP_CastSpell=0x0000 #
|
||||
OP_Consider=0x0000 #
|
||||
OP_FormattedMessage=0x0000 #
|
||||
OP_SimpleMessage=0x0000 #
|
||||
OP_Buff=0x0000 #
|
||||
OP_Illusion=0x0000 #
|
||||
OP_MoneyOnCorpse=0x0000 #
|
||||
OP_RandomReply=0x0000 #
|
||||
OP_DenyResponse=0x0000 #
|
||||
OP_SkillUpdate=0x0000 #
|
||||
OP_GMTrainSkillConfirm=0x0000 #
|
||||
OP_RandomReq=0x0000 #
|
||||
OP_Death=0x0000 #
|
||||
OP_Bind_Wound=0x0000 #
|
||||
OP_GMTraining=0x0000 #
|
||||
OP_GMEndTraining=0x0000 #
|
||||
OP_GMTrainSkill=0x0000 #
|
||||
OP_Animation=0x0000 #
|
||||
OP_Begging=0x0000 #
|
||||
OP_Consent=0x0000 #
|
||||
OP_ConsentDeny=0x0000 #
|
||||
OP_AutoFire=0x0000 #
|
||||
OP_PetCommands=0x0000 #
|
||||
OP_DeleteSpell=0x0000 #
|
||||
OP_Surname=0x0000 #
|
||||
OP_ClearSurname=0x0000 #
|
||||
OP_FaceChange=0x0000 #
|
||||
OP_SenseHeading=0x0000 #
|
||||
OP_Action=0x0000 #
|
||||
OP_ConsiderCorpse=0x0000 #
|
||||
OP_HideCorpse=0x0000 #
|
||||
OP_CorpseDrag=0x0000 #
|
||||
OP_CorpseDrop=0x0000 #
|
||||
OP_Bug=0x0000 #
|
||||
OP_Feedback=0x0000 #
|
||||
OP_Report=0x0000 #
|
||||
OP_Damage=0x0000 #
|
||||
OP_ChannelMessage=0x0000 #
|
||||
OP_Assist=0x0000 #
|
||||
OP_AssistGroup=0x0000 #
|
||||
OP_MoveCoin=0x0000 #
|
||||
OP_ZonePlayerToBind=0x0000 #
|
||||
OP_KeyRing=0x0000 #
|
||||
OP_WhoAllRequest=0x0000 #
|
||||
OP_WhoAllResponse=0x0000 #
|
||||
OP_FriendsWho=0x0000 #
|
||||
OP_ConfirmDelete=0x0000 #
|
||||
OP_Logout=0x0000 #
|
||||
OP_Rewind=0x0000 #
|
||||
OP_TargetCommand=0x0000 #
|
||||
OP_InspectRequest=0x0000 #
|
||||
OP_Hide=0x0000 #
|
||||
OP_Jump=0x0000 #
|
||||
OP_Camp=0x0000 #
|
||||
OP_Emote=0x0000 #
|
||||
OP_SetRunMode=0x0000 #
|
||||
OP_BankerChange=0x0000 #
|
||||
OP_TargetMouse=0x0000 #
|
||||
OP_MobHealth=0x0000 #
|
||||
OP_InitialMobHealth=0x0000 #
|
||||
OP_TargetHoTT=0x0000 #
|
||||
OP_TargetBuffs=0x0000 #
|
||||
OP_BuffCreate=0x0000 #
|
||||
OP_BuffRemoveRequest=0x0000
|
||||
OP_DeleteSpawn=0x0000 #
|
||||
OP_AutoAttack=0x0000 #
|
||||
OP_AutoAttack2=0x0000 #
|
||||
OP_Consume=0x0000 #
|
||||
OP_MoveItem=0x0000 #
|
||||
OP_DeleteItem=0x0000 #
|
||||
OP_DeleteCharge=0x0000 #
|
||||
OP_ItemPacket=0x38b0 #
|
||||
OP_ItemLinkResponse=0x0000 #
|
||||
OP_ItemLinkClick=0x0000 #
|
||||
OP_NewSpawn=0x0000 #
|
||||
OP_Track=0x0000 #
|
||||
OP_TrackTarget=0x0000 #
|
||||
OP_TrackUnknown=0x0000 #
|
||||
OP_ClickDoor=0x0000 #
|
||||
OP_MoveDoor=0x0000 #
|
||||
OP_RemoveAllDoors=0x0000 #
|
||||
OP_EnvDamage=0x0000 #
|
||||
OP_BoardBoat=0x0000 #
|
||||
OP_Forage=0x0000 #
|
||||
OP_LeaveBoat=0x0000 #
|
||||
OP_ControlBoat=0x0000 #
|
||||
OP_SafeFallSuccess=0x0000 #
|
||||
OP_RezzComplete=0x0000 #
|
||||
OP_RezzRequest=0x0000 #
|
||||
OP_RezzAnswer=0x0000 #
|
||||
OP_Shielding=0x0000 #
|
||||
OP_RequestDuel=0x0000 #
|
||||
OP_MobRename=0x0000 #
|
||||
OP_AugmentItem=0x0000 #
|
||||
OP_WeaponEquip1=0x0000 #
|
||||
OP_WeaponEquip2=0x0000 #
|
||||
OP_WeaponUnequip2=0x0000 #
|
||||
OP_ApplyPoison=0x0000 #
|
||||
OP_Save=0x0000 #
|
||||
OP_TestBuff=0x0000 #
|
||||
OP_CustomTitles=0x0000 #
|
||||
OP_Split=0x0000 #
|
||||
OP_YellForHelp=0x0000 #
|
||||
OP_LoadSpellSet=0x0000 #
|
||||
OP_Bandolier=0x0000 #
|
||||
OP_PotionBelt=0x0000 #
|
||||
OP_DuelResponse=0x0000 #
|
||||
OP_DuelResponse2=0x0000 #
|
||||
OP_SaveOnZoneReq=0x0000 #
|
||||
OP_ReadBook=0x0000 #
|
||||
OP_Dye=0x0000 #
|
||||
OP_InterruptCast=0x0000 #
|
||||
OP_AAAction=0x0000 #
|
||||
OP_LeadershipExpToggle=0x0000 #
|
||||
OP_LeadershipExpUpdate=0x0000 #
|
||||
OP_PurchaseLeadershipAA=0x0000 #
|
||||
OP_UpdateLeadershipAA=0x0000 #
|
||||
OP_MarkNPC=0x0000 #
|
||||
OP_ClearNPCMarks=0x0000 #
|
||||
OP_DoGroupLeadershipAbility=0x0000 #
|
||||
OP_GroupLeadershipAAUpdate=0x0000 #
|
||||
OP_DelegateAbility=0x0000 #
|
||||
OP_SetGroupTarget=0x0000 #
|
||||
OP_Charm=0x0000 #
|
||||
OP_Stun=0x0000 #
|
||||
OP_SendFindableNPCs=0x6c36 #
|
||||
OP_FindPersonRequest=0x0000 #
|
||||
OP_FindPersonReply=0x0000 #
|
||||
OP_Sound=0x0000 #
|
||||
OP_PetBuffWindow=0x0000 #
|
||||
OP_LevelAppearance=0x0000 #
|
||||
OP_Translocate=0x0000 #
|
||||
OP_Sacrifice=0x0000 #
|
||||
OP_PopupResponse=0x0000 #
|
||||
OP_OnLevelMessage=0x0000 #
|
||||
OP_AugmentInfo=0x0000 #
|
||||
OP_Petition=0x0000 #
|
||||
OP_SomeItemPacketMaybe=0x0000 #
|
||||
OP_PVPStats=0x0000 #
|
||||
OP_PVPLeaderBoardRequest=0x0000 #
|
||||
OP_PVPLeaderBoardReply=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 #
|
||||
OP_RestState=0x0000 #
|
||||
OP_RespawnWindow=0x0000 #
|
||||
OP_DisciplineTimer=0x0000 #
|
||||
OP_LDoNButton=0x0000 #
|
||||
OP_SetStartCity=0x0000 #
|
||||
OP_VoiceMacroIn=0x0000 #
|
||||
OP_VoiceMacroOut=0x0000 #
|
||||
OP_ItemViewUnknown=0x0000 #
|
||||
OP_VetRewardsAvaliable=0x0000 #
|
||||
OP_VetClaimRequest=0x0000 #
|
||||
OP_VetClaimReply=0x0000 #
|
||||
OP_CrystalCountUpdate=0x0000 #
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 #
|
||||
OP_MobUpdate=0x68da #
|
||||
OP_NPCMoveUpdate=0x226b #
|
||||
OP_CameraEffect=0x0000 #
|
||||
OP_SpellEffect=0x0000 #
|
||||
OP_RemoveNimbusEffect=0x0000 #
|
||||
OP_AltCurrency=0x0000
|
||||
OP_AltCurrencyMerchantRequest=0x0000
|
||||
OP_AltCurrencyMerchantReply=0x0000
|
||||
OP_AltCurrencyPurchase=0x0000
|
||||
OP_AltCurrencySell=0x0000
|
||||
OP_AltCurrencySellSelection=0x0000
|
||||
OP_AltCurrencyReclaim=0x0000
|
||||
OP_CrystalReclaim=0x0000
|
||||
OP_CrystalCreate=0x0000
|
||||
OP_Untargetable=0x0000
|
||||
OP_IncreaseStats=0x0000
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 #
|
||||
OP_ManaUpdate=0x0000 #
|
||||
OP_EnduranceUpdate=0x0000 #
|
||||
OP_MobManaUpdate=0x0000 #
|
||||
OP_MobEnduranceUpdate=0x0000 #
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x0000 #
|
||||
OP_EndLootRequest=0x0000 #
|
||||
OP_LootItem=0x0000 #
|
||||
OP_LootComplete=0x0000 #
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 #
|
||||
OP_TraderDelItem=0x0000 #
|
||||
OP_BecomeTrader=0x0000 #
|
||||
OP_TraderShop=0x0000 #
|
||||
OP_Trader=0x0000 #
|
||||
OP_TraderBuy=0x0000 #
|
||||
OP_Barter=0x0000 #
|
||||
OP_ShopItem=0x0000 #
|
||||
OP_BazaarInspect=0x0000 #
|
||||
OP_Bazaar=0x0000 #
|
||||
OP_TraderItemUpdate=0x0000 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 #
|
||||
OP_TradeAcceptClick=0x0000 #
|
||||
OP_TradeRequestAck=0x0000 #
|
||||
OP_TradeCoins=0x0000 #
|
||||
OP_FinishTrade=0x0000 #
|
||||
OP_CancelTrade=0x0000 #
|
||||
OP_TradeMoneyUpdate=0x0000 #
|
||||
OP_MoneyUpdate=0x0000 #
|
||||
OP_TradeBusy=0x0000 #
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 #
|
||||
OP_FinishWindow2=0x0000 #
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 #
|
||||
OP_ItemVerifyReply=0x0000 #
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 #
|
||||
OP_ShopRequest=0x5f0d #
|
||||
OP_ShopEnd=0x537c #
|
||||
OP_ShopEndConfirm=0x0000 #
|
||||
OP_ShopPlayerBuy=0x0000 #
|
||||
OP_ShopDelItem=0x0000 #
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 #
|
||||
OP_ClickObjectAction=0x0000 #
|
||||
OP_ClearObject=0x0000 #
|
||||
OP_RecipeDetails=0x0000 #
|
||||
OP_RecipesFavorite=0x0000 #
|
||||
OP_RecipesSearch=0x0000 #
|
||||
OP_RecipeReply=0x0000 #
|
||||
OP_RecipeAutoCombine=0x0000 #
|
||||
OP_TradeSkillCombine=0x0000 #
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 #
|
||||
OP_OpenTributeMaster=0x0000 #
|
||||
OP_SelectTribute=0x0000 #
|
||||
OP_TributeItem=0x0000 #
|
||||
OP_TributeMoney=0x0000 #
|
||||
OP_TributeToggle=0x0000 #
|
||||
OP_TributePointUpdate=0x0000 #
|
||||
OP_TributeNPC=0x0000 #
|
||||
OP_GuildTributeInfo=0x0000 #
|
||||
OP_OpenTributeReply=0x0000 #
|
||||
# OP_GuildTributeStatus=0x0000 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 #
|
||||
OP_AdventureFinish=0x0000 #
|
||||
OP_AdventureInfoRequest=0x0000 #
|
||||
OP_AdventureInfo=0x0000 #
|
||||
OP_AdventureRequest=0x0000 #
|
||||
OP_AdventureDetails=0x0000 #
|
||||
OP_AdventureData=0x0000 #
|
||||
OP_AdventureUpdate=0x0000 #
|
||||
OP_AdventureMerchantRequest=0x0000 #
|
||||
OP_AdventureMerchantResponse=0x0000 #
|
||||
OP_AdventureMerchantPurchase=0x0000 #
|
||||
OP_AdventureMerchantSell=0x0000 #
|
||||
OP_AdventurePointsUpdate=0x0000 #
|
||||
OP_AdventureStatsRequest=0x0000 #
|
||||
OP_AdventureStatsReply=0x0000 #
|
||||
OP_AdventureLeaderboardRequest=0x0000 #
|
||||
OP_AdventureLeaderboardReply=0x0000 #
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 #
|
||||
OP_GroupInvite=0x0000 #
|
||||
OP_GroupFollow=0x0000 #
|
||||
OP_GroupUpdate=0x0000 #
|
||||
OP_GroupUpdateB=0x0000 #
|
||||
OP_GroupCancelInvite=0x0000 #
|
||||
OP_GroupAcknowledge=0x0000 #
|
||||
OP_GroupDelete=0x0000 #
|
||||
OP_CancelInvite=0x0000 #
|
||||
OP_GroupFollow2=0x0000 #
|
||||
OP_GroupInvite2=0x0000 #
|
||||
OP_GroupDisbandYou=0x0000 #
|
||||
OP_GroupDisbandOther=0x0000 #
|
||||
OP_GroupLeaderChange=0x0000 #
|
||||
OP_GroupRoles=0x0000 #
|
||||
OP_GroupMakeLeader=0x0000
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 #
|
||||
OP_LFGGetMatchesRequest=0x0000 #
|
||||
OP_LFGGetMatchesResponse=0x0000 #
|
||||
OP_LFPGetMatchesRequest=0x0000 #
|
||||
OP_LFPGetMatchesResponse=0x0000 #
|
||||
OP_LFPCommand=0x0000 #
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 #
|
||||
OP_RaidUpdate=0x0000 # Testing VoA 0x0c08
|
||||
OP_RaidJoin=0x0000 #
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x0000 #
|
||||
OP_CombatAbility=0x0000 #
|
||||
OP_SenseTraps=0x0000 #
|
||||
OP_PickPocket=0x0000 #
|
||||
OP_DisarmTraps=0x0000 #
|
||||
OP_Disarm=0x0000 #
|
||||
OP_Sneak=0x0000 #
|
||||
OP_Fishing=0x0000 #
|
||||
OP_InstillDoubt=0x0000 #
|
||||
OP_FeignDeath=0x0000 #
|
||||
OP_Mend=0x0000 #
|
||||
OP_LDoNOpen=0x0000 #
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 #
|
||||
OP_TaskMemberList=0x0000 #
|
||||
OP_OpenNewTasksWindow=0x0000 #
|
||||
OP_AvaliableTask=0x0000 #
|
||||
OP_AcceptNewTask=0x0000 #
|
||||
OP_TaskHistoryRequest=0x0000 #
|
||||
OP_TaskHistoryReply=0x0000 #
|
||||
OP_CancelTask=0x0000 #
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 #
|
||||
OP_RequestTitles=0x0000 #
|
||||
OP_SendTitleList=0x0000 #
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
@@ -0,0 +1,651 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 used for unknown explorer
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x11b6
|
||||
OP_ApproveWorld=0x7e47
|
||||
OP_LogServer=0x19ab
|
||||
OP_SendCharInfo=0x06a2
|
||||
OP_ExpansionInfo=0x711a
|
||||
OP_GuildsList=0x2d38
|
||||
OP_EnterWorld=0x57c3
|
||||
OP_PostEnterWorld=0x0c3d
|
||||
OP_World_Client_CRC1=0x0044
|
||||
OP_World_Client_CRC2=0x26df
|
||||
OP_SendSpellChecksum=0x0000
|
||||
OP_SendSkillCapsChecksum=0x0000
|
||||
|
||||
# Character Select Related:
|
||||
OP_SendMaxCharacters=0x5349
|
||||
OP_SendMembership=0x03b2
|
||||
OP_SendMembershipDetails=0x0b1f
|
||||
OP_CharacterCreateRequest=0x006b
|
||||
OP_CharacterCreate=0x0afc
|
||||
OP_DeleteCharacter=0x0ab4
|
||||
OP_RandomNameGenerator=0x4453
|
||||
OP_ApproveName=0x213a
|
||||
OP_MOTD=0x1ae3
|
||||
OP_SetChatServer=0x2a81
|
||||
OP_SetChatServer2=0x4099
|
||||
OP_ZoneServerInfo=0x49d9
|
||||
OP_WorldComplete=0x12d4
|
||||
OP_WorldUnknown001=0x6be3
|
||||
OP_FloatListThing=0x7a19
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x6281
|
||||
OP_WorldClientReady=0x43b0
|
||||
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=0x47a6
|
||||
OP_ZoneEntry=0x1665
|
||||
OP_ReqNewZone=0x3dec
|
||||
OP_NewZone=0x7fff
|
||||
OP_ZoneSpawns=0x0980
|
||||
OP_PlayerProfile=0x46bb
|
||||
OP_TimeOfDay=0x3be2
|
||||
OP_LevelUpdate=0x7ce0
|
||||
OP_Stamina=0x1949
|
||||
OP_RequestClientZoneChange=0x647a
|
||||
OP_ZoneChange=0x1eb4
|
||||
OP_LockoutTimerInfo=0x0000
|
||||
OP_ZoneServerReady=0x0000
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_LogoutReply=0x0000
|
||||
OP_PreLogoutReply=0x0000
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x7360
|
||||
OP_ChangeSize=0x355c
|
||||
OP_TributeUpdate=0x2691
|
||||
OP_TributeTimer=0x3294
|
||||
OP_SendTributes=0x0a1c
|
||||
OP_SendGuildTributes=0x1781
|
||||
OP_TributeInfo=0x5dd2
|
||||
OP_Weather=0x0bd7
|
||||
OP_ReqClientSpawn=0x5a4f
|
||||
OP_SpawnDoor=0x7b6c
|
||||
OP_GroundSpawn=0x4286
|
||||
OP_SendZonepoints=0x7922
|
||||
OP_BlockedBuffs=0x5a71
|
||||
OP_RemoveBlockedBuffs=0x78ba
|
||||
OP_ClearBlockedBuffs=0x5d3c
|
||||
OP_WorldObjectsSent=0x7fa8
|
||||
OP_SendExpZonein=0x25ab
|
||||
OP_SendAATable=0x7791
|
||||
OP_RespondAA=0x379d
|
||||
OP_UpdateAA=0x504f
|
||||
OP_SendAAStats=0x3d1c
|
||||
OP_AAExpUpdate=0x25c5
|
||||
OP_ExpUpdate=0x47e3
|
||||
OP_HPUpdate=0x07b8
|
||||
OP_ManaChange=0x1e3b
|
||||
OP_TGB=0x10a6
|
||||
OP_SpecialMesg=0x362c
|
||||
OP_GuildMemberList=0x4053
|
||||
OP_GuildMOTD=0x0561
|
||||
OP_CharInventory=0x786e
|
||||
OP_WearChange=0x1ad3
|
||||
OP_ClientUpdate=0x455d
|
||||
OP_ClientReady=0x3f83 # 0x422d
|
||||
OP_SetServerFilter=0x5b27
|
||||
|
||||
# Guild Opcodes - Disabled until crashes are resolved in RoF
|
||||
OP_GetGuildMOTD=0x7ba3 # Was 0x35dc
|
||||
OP_GetGuildMOTDReply=0x42a2 # Was 0x4586
|
||||
OP_GuildMemberUpdate=0x0048 # Was 0x5643
|
||||
OP_GuildInvite=0x5f8e
|
||||
OP_GuildRemove=0x296d
|
||||
OP_GuildPeace=0x17eb
|
||||
OP_SetGuildMOTD=0x44d0
|
||||
OP_GuildList=0x2d38
|
||||
OP_GuildWar=0x395a
|
||||
OP_GuildLeader=0x7c6f
|
||||
OP_GuildDelete=0x241b
|
||||
OP_GuildInviteAccept=0x78a5
|
||||
OP_GuildDemote=0x3100
|
||||
OP_GuildPublicNote=0x3c2c
|
||||
OP_GuildManageBanker=0x096d # Was 0x0737
|
||||
OP_GuildBank=0x2ab0 # Was 0x10c3
|
||||
OP_SetGuildRank=0x3599
|
||||
OP_GuildUpdateURLAndChannel=0x7851
|
||||
OP_GuildStatus=0x25a5
|
||||
OP_GuildCreate=0xd2d1 # or maybe 0x086e
|
||||
OP_GuildMemberLevelUpdate=0x0000 # Unused?
|
||||
OP_ZoneGuildList=0x0000 # Unused?
|
||||
OP_GetGuildsList=0x0000 # Unused?
|
||||
OP_LFGuild=0x0000
|
||||
OP_GuildManageRemove=0x0000
|
||||
OP_GuildManageAdd=0x0000
|
||||
OP_GuildManageStatus=0x0000
|
||||
|
||||
# GM/Guide Opcodes
|
||||
OP_GMServers=0x2612
|
||||
OP_GMBecomeNPC=0x5201
|
||||
OP_GMZoneRequest=0x69e5
|
||||
OP_GMZoneRequest2=0x65d6
|
||||
OP_GMGoto=0x0345
|
||||
OP_GMSearchCorpse=0x5bed
|
||||
OP_GMHideMe=0x4c65
|
||||
OP_GMDelCorpse=0x6034
|
||||
OP_GMApproval=0x0e37
|
||||
OP_GMToggle=0x1276
|
||||
OP_GMSummon=0x0655 # Was 0x684f
|
||||
OP_GMEmoteZone=0x1b39 # Was 0x0655
|
||||
OP_GMEmoteWorld=0x1f8c # Was 0x1935
|
||||
OP_GMFind=0x6160
|
||||
OP_GMKick=0x5646
|
||||
OP_GMKill=0x507e
|
||||
OP_GMNameChange=0x4434 # Was 0x51f7
|
||||
OP_GMLastName=0x3077 # Was 0x4dd7
|
||||
|
||||
# Misc Opcodes
|
||||
OP_InspectRequest=0x23f1
|
||||
OP_InspectAnswer=0x5794
|
||||
OP_InspectMessageUpdate=0x3064
|
||||
OP_BeginCast=0x17ff
|
||||
OP_BuffFadeMsg=0x41cb
|
||||
OP_ConsentResponse=0x183d
|
||||
OP_MemorizeSpell=0x2fac
|
||||
OP_SwapSpell=0x4736
|
||||
OP_CastSpell=0x1cb5
|
||||
OP_Consider=0x4d8d
|
||||
OP_FormattedMessage=0x6afe
|
||||
OP_SimpleMessage=0x02a5
|
||||
OP_Buff=0x08ed
|
||||
OP_Illusion=0x6c43
|
||||
OP_MoneyOnCorpse=0x1837
|
||||
OP_RandomReply=0x6525
|
||||
OP_DenyResponse=0x344a
|
||||
OP_SkillUpdate=0x52c6
|
||||
OP_GMTrainSkillConfirm=0x35cc # 0x3960
|
||||
OP_RandomReq=0x59db
|
||||
OP_Death=0x3a65
|
||||
OP_GMTraining=0x6e8f
|
||||
OP_GMEndTraining=0x7ffe
|
||||
OP_GMTrainSkill=0x444c
|
||||
OP_Animation=0x5e0c
|
||||
OP_Begging=0x54ac
|
||||
OP_Consent=0x400e
|
||||
OP_ConsentDeny=0x34c1
|
||||
OP_AutoFire=0x314e
|
||||
OP_PetCommands=0x0093
|
||||
OP_DeleteSpell=0x05dc
|
||||
OP_Surname=0x1a87
|
||||
OP_ClearSurname=0x17b6
|
||||
OP_FaceChange=0x5b06
|
||||
OP_SenseHeading=0x46c8
|
||||
OP_Action=0x0ea7
|
||||
OP_ConsiderCorpse=0x06c5
|
||||
OP_HideCorpse=0x3c4b
|
||||
OP_CorpseDrag=0x0be7
|
||||
OP_CorpseDrop=0xdf77
|
||||
OP_Bug=0x0c07
|
||||
OP_Feedback=0x45ca
|
||||
OP_Report=0x6d94
|
||||
OP_Damage=0x5428
|
||||
OP_ChannelMessage=0x33bc
|
||||
OP_Assist=0x4cd1
|
||||
OP_AssistGroup=0x63df
|
||||
OP_MoveCoin=0x765a
|
||||
OP_ZonePlayerToBind=0x7f99
|
||||
OP_KeyRing=0x04ba
|
||||
OP_WhoAllRequest=0x78eb
|
||||
OP_WhoAllResponse=0x3393
|
||||
OP_FriendsWho=0x3dac
|
||||
OP_ConfirmDelete=0x78e0
|
||||
OP_Logout=0x64bd
|
||||
OP_Rewind=0x5521
|
||||
OP_TargetCommand=0x000a
|
||||
OP_Hide=0x2da1
|
||||
OP_Jump=0x1d47
|
||||
OP_Camp=0x41cd
|
||||
OP_Emote=0x37fd
|
||||
OP_SetRunMode=0x2ce6
|
||||
OP_BankerChange=0x4e20
|
||||
OP_TargetMouse=0x0e25
|
||||
OP_MobHealth=0x218d
|
||||
OP_InitialMobHealth=0x0000 # Unused?
|
||||
OP_TargetHoTT=0x3af5
|
||||
OP_XTargetResponse=0x7f64
|
||||
OP_XTargetRequest=0x6753
|
||||
OP_XTargetAutoAddHaters=0x5f51
|
||||
OP_TargetBuffs=0x1c71
|
||||
OP_BuffCreate=0x71f5
|
||||
OP_BuffRemoveRequest=0x7efd
|
||||
OP_DeleteSpawn=0x3b06
|
||||
OP_AutoAttack=0x0d14
|
||||
OP_AutoAttack2=0x3912
|
||||
OP_Consume=0x4692
|
||||
OP_MoveItem=0x62a2
|
||||
OP_DeleteItem=0x3eb5
|
||||
OP_DeleteCharge=0x2d5b
|
||||
OP_ItemPacket=0x5e0e
|
||||
OP_ItemLinkResponse=0x2fdb
|
||||
OP_ItemLinkClick=0x0353
|
||||
OP_ItemPreview=0x05cf
|
||||
OP_NewSpawn=0x3f5b
|
||||
OP_Track=0x7d43
|
||||
OP_TrackTarget=0x4c42
|
||||
OP_TrackUnknown=0x2395
|
||||
OP_ClickDoor=0x7cc0
|
||||
OP_MoveDoor=0x5611
|
||||
OP_RemoveAllDoors=0x39c9
|
||||
OP_EnvDamage=0x52e9
|
||||
OP_BoardBoat=0x2731
|
||||
OP_Forage=0x416d
|
||||
OP_LeaveBoat=0x6cc1
|
||||
OP_ControlBoat=0x4aa0
|
||||
OP_SafeFallSuccess=0x6d27
|
||||
OP_RezzComplete=0x3297
|
||||
OP_RezzRequest=0x521b
|
||||
OP_RezzAnswer=0x004e
|
||||
OP_Shielding=0x17d9
|
||||
OP_RequestDuel=0x1ea9
|
||||
OP_MobRename=0x5040
|
||||
OP_AugmentItem=0x1627 # Was 0x37cb
|
||||
OP_WeaponEquip1=0x35c3
|
||||
OP_WeaponEquip2=0x012f # Was 0x6022
|
||||
OP_WeaponUnequip2=0x1076 # Was 0x0110
|
||||
OP_ApplyPoison=0x1499
|
||||
OP_Save=0x2e6f
|
||||
OP_TestBuff=0x046e # Was 0x3772
|
||||
OP_CustomTitles=0x471a
|
||||
OP_Split=0x269e
|
||||
OP_YellForHelp=0x0017
|
||||
OP_LoadSpellSet=0x38b4
|
||||
OP_Bandolier=0x2b6f
|
||||
OP_PotionBelt=0x2d1b # Was 0x4d3b
|
||||
OP_DuelResponse=0x0dee
|
||||
OP_DuelResponse2=0x5e04
|
||||
OP_SaveOnZoneReq=0x36b1
|
||||
OP_ReadBook=0x383c
|
||||
OP_Dye=0x62d8
|
||||
OP_InterruptCast=0x7470
|
||||
OP_AAAction=0x719a
|
||||
OP_LeadershipExpToggle=0x3ea6
|
||||
OP_LeadershipExpUpdate=0x6922
|
||||
OP_PurchaseLeadershipAA=0x1962
|
||||
OP_UpdateLeadershipAA=0x56aa
|
||||
OP_MarkNPC=0x2d9f
|
||||
OP_ClearNPCMarks=0x0d2d
|
||||
OP_DelegateAbility=0x7820
|
||||
OP_SetGroupTarget=0x118a
|
||||
OP_Charm=0x7118
|
||||
OP_Stun=0x53c0
|
||||
OP_SendFindableNPCs=0x34c3
|
||||
OP_FindPersonRequest=0x2f3b
|
||||
OP_FindPersonReply=0x44f7
|
||||
OP_Sound=0x3cec
|
||||
OP_PetBuffWindow=0x7197
|
||||
OP_LevelAppearance=0x7c4d
|
||||
OP_Translocate=0x6f01
|
||||
OP_Sacrifice=0x76ab
|
||||
OP_PopupResponse=0x2fa1
|
||||
OP_OnLevelMessage=0x09cd
|
||||
OP_AugmentInfo=0x7812
|
||||
OP_Petition=0x2885
|
||||
OP_SomeItemPacketMaybe=0x11a0
|
||||
OP_PVPStats=0x3034 # Unsure
|
||||
OP_PVPLeaderBoardRequest=0x1bce
|
||||
OP_PVPLeaderBoardReply=0x3e78
|
||||
OP_PVPLeaderBoardDetailsRequest=0x46f4
|
||||
OP_PVPLeaderBoardDetailsReply=0x6a60
|
||||
OP_RestState=0x3ad5
|
||||
OP_RespawnWindow=0x7767
|
||||
OP_LDoNButton=0x596e
|
||||
OP_SetStartCity=0x7936 # Was 0x2d1b
|
||||
OP_VoiceMacroIn=0x202e
|
||||
OP_VoiceMacroOut=0x3920
|
||||
OP_ItemViewUnknown=0x0b64
|
||||
OP_VetRewardsAvaliable=0x05d9
|
||||
OP_VetClaimRequest=0xcdde
|
||||
OP_VetClaimReply=0x361b
|
||||
OP_DisciplineUpdate=0x2483 # Was 0x2f05
|
||||
OP_DisciplineTimer=0x4933 # Was 0x5e3f
|
||||
OP_BecomeCorpse=0x0000 # Unused?
|
||||
OP_Action2=0x0000 # Unused?
|
||||
OP_MobUpdate=0x6b5a
|
||||
OP_NPCMoveUpdate=0x5bd9
|
||||
OP_CameraEffect=0x5712
|
||||
OP_SpellEffect=0x72b6
|
||||
OP_RemoveNimbusEffect=0x3ba7
|
||||
OP_AltCurrency=0x8fcb
|
||||
OP_AltCurrencyMerchantRequest=0x7e3e
|
||||
OP_AltCurrencyMerchantReply=0x0b60
|
||||
OP_AltCurrencyPurchase=0x74a8
|
||||
OP_AltCurrencySell=0x3167
|
||||
OP_AltCurrencySellSelection=0x3c47
|
||||
OP_AltCurrencyReclaim=0x46ed
|
||||
OP_CrystalCountUpdate=0x5a82 # Was 0x3f60
|
||||
OP_CrystalCreate=0x7616 # Was 0x5a82
|
||||
OP_CrystalReclaim=0x73db # Was 0x7616
|
||||
OP_Untargetable=0x7717
|
||||
OP_IncreaseStats=0x0711
|
||||
OP_Weblink=0x7cce
|
||||
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
|
||||
OP_OpenContainer=0x654f
|
||||
|
||||
OP_DzQuit=0x5fc8
|
||||
OP_DzListTimers=0x67b9
|
||||
OP_DzAddPlayer=0x5ca2
|
||||
OP_DzRemovePlayer=0x0dc1
|
||||
OP_DzSwapPlayer=0x4995
|
||||
OP_DzMakeLeader=0x17b2
|
||||
OP_DzPlayerList=0x1aff
|
||||
OP_DzJoinExpeditionConfirm=0x30df
|
||||
OP_DzJoinExpeditionReply=0x15d4
|
||||
OP_DzExpeditionInfo=0x3861
|
||||
OP_DzExpeditionList=0x0b3b
|
||||
OP_DzMemberStatus=0x26c2
|
||||
OP_DzLeaderStatus=0x4021
|
||||
OP_DzExpeditionEndsWarning=0x32eb
|
||||
OP_DzMemberList=0x348f
|
||||
OP_DzCompass=0x0e01 # Was 0x4f09
|
||||
OP_DzChooseZone=0x0000 # Maybe 0x29d6
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
OP_ManaUpdate=0x6675
|
||||
OP_EnduranceUpdate=0x71fb
|
||||
OP_MobManaUpdate=0x48b5
|
||||
OP_MobEnduranceUpdate=0x7cb5
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataUpdateRequest=0x6774
|
||||
OP_MercenaryDataUpdate=0x5a7c
|
||||
OP_MercenaryDataRequest=0x612e
|
||||
OP_MercenaryDataResponse=0x0768
|
||||
OP_MercenaryHire=0x18ba
|
||||
OP_MercenaryDismiss=0x7ff4
|
||||
OP_MercenaryTimerRequest=0x4326
|
||||
OP_MercenaryUnknown1=0x7db4
|
||||
OP_MercenaryCommand=0x7b21
|
||||
OP_MercenarySuspendRequest=0x61b3
|
||||
OP_MercenarySuspendResponse=0x5975
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x43a7
|
||||
OP_EndLootRequest=0x3d8c
|
||||
OP_LootItem=0x515b
|
||||
OP_LootComplete=0x256d
|
||||
|
||||
# bazaar trader stuff:
|
||||
OP_BazaarSearch=0x2ad2
|
||||
OP_TraderDelItem=0x63c8
|
||||
OP_BecomeTrader=0x74bc
|
||||
OP_TraderShop=0x0a5e
|
||||
OP_Trader=0x6790
|
||||
OP_TraderBuy=0x0000
|
||||
OP_Barter=0x6854
|
||||
OP_ShopItem=0x0000
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_Bazaar=0x0000
|
||||
OP_TraderItemUpdate=0x0000
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x5f9e
|
||||
OP_TradeAcceptClick=0x13db
|
||||
OP_TradeRequestAck=0x6852
|
||||
OP_TradeCoins=0x584d
|
||||
OP_FinishTrade=0x3fbf
|
||||
OP_CancelTrade=0x0234
|
||||
OP_TradeMoneyUpdate=0x65f6
|
||||
OP_MoneyUpdate=0x6e42
|
||||
OP_TradeBusy=0x7c6d
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x1939
|
||||
OP_FinishWindow2=0x68df
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x2c0c
|
||||
OP_ItemVerifyReply=0x40de
|
||||
|
||||
# merchant stuff
|
||||
OP_ShopPlayerSell=0x6b4d
|
||||
OP_ShopRequest=0x16ba
|
||||
OP_ShopEnd=0x0d07
|
||||
OP_ShopEndConfirm=0x1860
|
||||
OP_ShopPlayerBuy=0x3bab
|
||||
OP_ShopDelItem=0x509c
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x7992
|
||||
OP_ClickObjectAction=0x5507
|
||||
OP_ClearObject=0x2ead
|
||||
OP_RecipeDetails=0x7ad0
|
||||
OP_RecipesFavorite=0x6960
|
||||
OP_RecipesSearch=0x30f7
|
||||
OP_RecipeReply=0x544e
|
||||
OP_RecipeAutoCombine=0x46a4
|
||||
OP_TradeSkillCombine=0x7447
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x107b
|
||||
OP_OpenTributeMaster=0x6fed # Was 0x40f5
|
||||
OP_SelectTribute=0x5513
|
||||
OP_TributeItem=0x105b
|
||||
OP_TributeMoney=0x4b6d # Was 0x6fed
|
||||
OP_TributeToggle=0x1f50
|
||||
OP_TributePointUpdate=0x01ec
|
||||
OP_TributeNPC=0x0000
|
||||
OP_GuildTributeInfo=0x0000
|
||||
OP_OpenTributeReply=0x0000
|
||||
OP_GuildTributeStatus=0x0000
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x18b3
|
||||
OP_AdventureFinish=0x3d8b
|
||||
OP_AdventureInfoRequest=0x38db
|
||||
OP_AdventureInfo=0x1036
|
||||
OP_AdventureRequest=0x325c
|
||||
OP_AdventureDetails=0x4975
|
||||
OP_AdventureData=0x729b
|
||||
OP_AdventureUpdate=0x2df4
|
||||
OP_AdventureMerchantRequest=0x2aa0 # Was 654d
|
||||
OP_AdventureMerchantResponse=0x5aed # Was 7949
|
||||
OP_AdventureMerchantPurchase=0x725e # Was 155a
|
||||
OP_AdventureMerchantSell=0x7882 # Was 389c
|
||||
OP_AdventurePointsUpdate=0x37cb # Was 7589
|
||||
OP_AdventureStatsRequest=0x68c2
|
||||
OP_AdventureStatsReply=0x62fa
|
||||
OP_AdventureLeaderboardRequest=0x577a
|
||||
OP_AdventureLeaderboardReply=0x2533
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x1ed0
|
||||
OP_GroupInvite=0x1602
|
||||
OP_GroupFollow=0x2789
|
||||
OP_GroupUpdate=0x0ba4
|
||||
OP_GroupUpdateB=0x5a07
|
||||
OP_GroupCancelInvite=0x2b26
|
||||
OP_GroupAcknowledge=0x5fae
|
||||
OP_GroupDelete=0x33ca
|
||||
OP_CancelInvite=0x2b26
|
||||
OP_GroupFollow2=0x4964
|
||||
OP_GroupInvite2=0x6e80
|
||||
OP_GroupDisbandYou=0x623d
|
||||
OP_GroupDisbandOther=0x74fa
|
||||
OP_GroupLeaderChange=0x46fc
|
||||
OP_GroupRoles=0x047c
|
||||
OP_GroupMakeLeader=0x4129
|
||||
OP_DoGroupLeadershipAbility=0x17d7
|
||||
OP_GroupLeadershipAAUpdate=0x6567
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x4463
|
||||
OP_LFGGetMatchesRequest=0x1373
|
||||
OP_LFGGetMatchesResponse=0x31d8
|
||||
OP_LFPGetMatchesRequest=0x7fd9
|
||||
OP_LFPGetMatchesResponse=0x4111
|
||||
OP_LFPCommand=0x6e8b
|
||||
OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x1bd1
|
||||
OP_RaidUpdate=0x548e
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x0af6
|
||||
OP_CombatAbility=0x6e4c
|
||||
OP_SenseTraps=0x7462 # Was 0x2ee0
|
||||
OP_PickPocket=0x047b
|
||||
OP_DisarmTraps=0x0000
|
||||
OP_Disarm=0x70a9
|
||||
OP_Sneak=0x62f4
|
||||
OP_Fishing=0x53c2
|
||||
OP_InstillDoubt=0x63a5
|
||||
OP_FeignDeath=0x677d
|
||||
OP_Mend=0x324f
|
||||
OP_Bind_Wound=0x585d
|
||||
OP_LDoNOpen=0x3567
|
||||
|
||||
# Task packets
|
||||
OP_TaskDescription=0x2294
|
||||
OP_TaskActivity=0x7181
|
||||
OP_CompletedTasks=0x9495
|
||||
OP_TaskActivityComplete=0x71cd
|
||||
OP_AcceptNewTask=0x394d
|
||||
OP_CancelTask=0x0c7f
|
||||
OP_TaskMemberList=0x748e # Was 0x1656
|
||||
OP_OpenNewTasksWindow=0x436c # Was 0x11de
|
||||
OP_AvaliableTask=0x2bf8 # Was 0x2377
|
||||
OP_TaskHistoryRequest=0x6cf6
|
||||
OP_TaskHistoryReply=0x25eb
|
||||
OP_DeclineAllTasks=0x0000
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x45d1
|
||||
OP_RequestTitles=0x1b5a
|
||||
OP_SendTitleList=0x0d64
|
||||
OP_SetTitle=0x0bfc
|
||||
OP_SetTitleReply=0x7e20
|
||||
|
||||
# mail opcodes
|
||||
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 ###########
|
||||
|
||||
# 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
@@ -0,0 +1,611 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x0000a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x6893 # was 0x2683
|
||||
OP_ApproveWorld=0x115a # was 0x28a7
|
||||
OP_LogServer=0x701f # was 0x224f
|
||||
OP_SendCharInfo=0x1b85 # was 0x2c27
|
||||
OP_ExpansionInfo=0x1771 # Same
|
||||
OP_GuildsList=0x5b0b # Same
|
||||
OP_EnterWorld=0x3288 # was 0x4f60
|
||||
OP_PostEnterWorld=0x2f2c # was 0x570c
|
||||
OP_World_Client_CRC1=0x0000 # C
|
||||
OP_World_Client_CRC2=0x0000 # C
|
||||
OP_SendSpellChecksum=0x0000 # C
|
||||
OP_SendSkillCapsChecksum=0x0000 # C
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 # C
|
||||
OP_CharacterCreateRequest=0x0000 # C
|
||||
OP_CharacterCreate=0x0000 # C
|
||||
OP_RandomNameGenerator=0x0000 # C 0x0000
|
||||
OP_ApproveName=0x0000 # C
|
||||
|
||||
OP_MOTD=0x7312 # C 0x0000
|
||||
OP_SetChatServer=0x698a #
|
||||
OP_SetChatServer2=0x0000 # Not sent any more ?
|
||||
OP_ZoneServerInfo=0x0479 # was 0x03cc
|
||||
OP_WorldComplete=0x0d98 #
|
||||
OP_WorldUnknown001=0x0000 # C 0x0000
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 # was 0x3594
|
||||
OP_ZoneEntry=0x002b # was 0x538f
|
||||
OP_ReqNewZone=0x5ca5 # was 0x5ca5
|
||||
OP_NewZone=0x0254 # was 0x0254
|
||||
OP_ZoneSpawns=0x0000 # ?
|
||||
OP_PlayerProfile=0x6022 # was 0x6022
|
||||
OP_TimeOfDay=0x6015 # was 0x6015
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x7b64 # V
|
||||
OP_TributeUpdate=0x4895 #
|
||||
OP_TributeTimer=0x0000 # C
|
||||
OP_TaskDescription=0x0000 # C
|
||||
OP_TaskActivity=0x0000 # C
|
||||
OP_CompletedTasks=0x0000 # C 0x0000
|
||||
OP_Weather=0x7ce4 # was 0x0ed5
|
||||
OP_SendAATable=0x466c #
|
||||
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_WorldObjectsSent=0x7b73 # was 0x7b73
|
||||
OP_BlockedBuffs=0x664a # was 0x4027
|
||||
OP_SendExpZonein=0x2c27 # was 0x1436
|
||||
OP_SendTributes=0x0000 # V
|
||||
OP_TributeInfo=0x0000 # V
|
||||
OP_SendGuildTributes=0x0000 # C 0x0000
|
||||
OP_AAExpUpdate=0x0000 # V
|
||||
OP_ExpUpdate=0x0000 # V
|
||||
OP_HPUpdate=0x0000 # V
|
||||
OP_ManaChange=0x0000 # C
|
||||
OP_TGB=0x0000 # C
|
||||
OP_SpecialMesg=0x3bf5 # was 0x14ff
|
||||
OP_GuildMemberList=0x0000 # C
|
||||
OP_GuildMOTD=0x0000 # V
|
||||
OP_CharInventory=0x307d #
|
||||
OP_WearChange=0x0000 # V
|
||||
OP_ClientUpdate=0x7062 # was 0x7062
|
||||
OP_ClientReady=0x6cdc # was 0x6cdc
|
||||
OP_SetServerFilter=0x0000 # V
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 # C
|
||||
OP_GetGuildMOTDReply=0x0000 # C
|
||||
OP_GuildMemberUpdate=0x0000 # C
|
||||
OP_GuildInvite=0x0000 # C
|
||||
OP_GuildRemove=0x0000 # C
|
||||
OP_GuildPeace=0x0000 # C
|
||||
OP_SetGuildMOTD=0x0000 # C
|
||||
OP_GuildList=0x0000 # C
|
||||
OP_GuildWar=0x0000 # C
|
||||
OP_GuildLeader=0x0000 # C
|
||||
OP_GuildDelete=0x0000 # C
|
||||
OP_GuildInviteAccept=0x0000 # C
|
||||
OP_GuildDemote=0x0000 # C
|
||||
OP_GuildPublicNote=0x0000 # C
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 # C
|
||||
OP_GMBecomeNPC=0x0000 # C
|
||||
OP_GMZoneRequest=0x6f79 # was 0x18ea
|
||||
OP_GMZoneRequest2=0x02d6 # was 0x3ad9
|
||||
OP_GMGoto=0x0000 # C
|
||||
OP_GMSearchCorpse=0x0000 # C
|
||||
OP_GMHideMe=0x0000 # C
|
||||
OP_GMDelCorpse=0x0000 # C
|
||||
OP_GMApproval=0x0000 # C
|
||||
OP_GMToggle=0x0000 # C 0x0000
|
||||
OP_GMSummon=0x0000 # C
|
||||
OP_GMEmoteZone=0x0000 # C
|
||||
OP_GMEmoteWorld=0x0000 # C
|
||||
OP_GMFind=0x0000 # C
|
||||
OP_GMKick=0x0000 # C
|
||||
OP_GMKill=0x0000 # C
|
||||
OP_GMNameChange=0x0000 # C
|
||||
OP_GMLastName=0x0000 # C
|
||||
|
||||
OP_InspectAnswer=0x0000 # C
|
||||
OP_BeginCast=0x0000 # C
|
||||
OP_BuffFadeMsg=0x50c2 # C
|
||||
OP_ConsentResponse=0x0000 # C
|
||||
OP_MemorizeSpell=0x0000 # C
|
||||
OP_SwapSpell=0x0000 # C
|
||||
OP_CastSpell=0x7286 # C
|
||||
OP_Consider=0x0000 # C
|
||||
OP_FormattedMessage=0x0000 # C
|
||||
OP_SimpleMessage=0x0000 # C 0x0000
|
||||
OP_Buff=0x0000 # C
|
||||
OP_Illusion=0x0000 # C
|
||||
OP_MoneyOnCorpse=0x0000 # C
|
||||
OP_RandomReply=0x0000 # C
|
||||
OP_DenyResponse=0x0000 # C
|
||||
OP_SkillUpdate=0x0000 # C
|
||||
OP_GMTrainSkillConfirm=0x0000 # C
|
||||
OP_RandomReq=0x0000 # C
|
||||
OP_Death=0x0000 # C
|
||||
OP_Bind_Wound=0x0000 # C
|
||||
OP_GMTraining=0x0000 # C
|
||||
OP_GMEndTraining=0x0000 # C
|
||||
OP_GMTrainSkill=0x0000 # C
|
||||
OP_Animation=0x0000 # Was 0x0000
|
||||
OP_Begging=0x0000 # C
|
||||
OP_Consent=0x0000 # C
|
||||
OP_ConsentDeny=0x0000 # C
|
||||
OP_AutoFire=0x0000 # C
|
||||
OP_PetCommands=0x0000 # C
|
||||
OP_DeleteSpell=0x0000 # C
|
||||
OP_Surname=0x0000 # C
|
||||
OP_ClearSurname=0x0000 # C
|
||||
OP_FaceChange=0x0000 # C
|
||||
OP_SenseHeading=0x0000 # C
|
||||
OP_Action=0x1513 # C
|
||||
OP_ConsiderCorpse=0x0000 # C
|
||||
OP_HideCorpse=0x0000 # C 0x0000
|
||||
OP_Bug=0x0000 # C
|
||||
OP_Feedback=0x0000 # C
|
||||
OP_Report=0x0000 # C
|
||||
OP_Damage=0x7519 # C or OP_Action2?
|
||||
OP_ChannelMessage=0x2e79 # was 0x2e79
|
||||
OP_Assist=0x0000 # C
|
||||
OP_AssistGroup=0x0000 # C
|
||||
OP_MoveCoin=0x0000 # C
|
||||
OP_ZonePlayerToBind=0x0000 # C
|
||||
OP_KeyRing=0x0000 # C
|
||||
OP_WhoAllRequest=0x0000 # C
|
||||
OP_WhoAllResponse=0x0000 # C
|
||||
OP_FriendsWho=0x0000 # C
|
||||
OP_ConfirmDelete=0x0000 # V
|
||||
OP_Logout=0x44ae # was 0x64ec
|
||||
OP_Rewind=0x0000 # C
|
||||
OP_TargetCommand=0x0000 # C Was 0x0000
|
||||
OP_InspectRequest=0x0000 # C
|
||||
OP_Hide=0x0000 # C
|
||||
OP_Jump=0x0000 # C
|
||||
OP_Camp=0x42ef # C
|
||||
OP_Emote=0x0000 # C
|
||||
OP_SetRunMode=0x0000 # C
|
||||
OP_BankerChange=0x0000 # C
|
||||
OP_TargetMouse=0x36f8 # C 0x0000
|
||||
OP_MobHealth=0x0000 # C
|
||||
OP_InitialMobHealth=0x0000 # C
|
||||
OP_TargetHoTT=0x0000 # C
|
||||
OP_TargetBuffs=0x0000 # C
|
||||
OP_BuffCreate=0x6bfb # V
|
||||
OP_DeleteSpawn=0x7434 # was 0x7434
|
||||
OP_AutoAttack=0x0000 # C
|
||||
OP_AutoAttack2=0x0000 # C
|
||||
OP_Consume=0x0000 # V
|
||||
OP_MoveItem=0x0000 # C
|
||||
OP_DeleteItem=0x0000 # C
|
||||
OP_DeleteCharge=0x0000 # C
|
||||
OP_ItemPacket=0x7c87 #
|
||||
OP_ItemLinkResponse=0x0000 # C
|
||||
OP_ItemLinkClick=0x0000 # C
|
||||
OP_NewSpawn=0x0000 # C
|
||||
OP_Track=0x0000 # C
|
||||
OP_TrackTarget=0x0000 # C
|
||||
OP_TrackUnknown=0x0000 # C
|
||||
OP_ClickDoor=0x470e # was 0x4f1f
|
||||
OP_MoveDoor=0x48f9 # was 0x1516
|
||||
OP_EnvDamage=0x0000 # C
|
||||
OP_BoardBoat=0x0000 # C
|
||||
OP_Forage=0x0000 # C
|
||||
OP_LeaveBoat=0x0000 # C
|
||||
OP_ControlBoat=0x0000 # C
|
||||
OP_SafeFallSuccess=0x0000 # C
|
||||
OP_RezzComplete=0x0000 # C
|
||||
OP_RezzRequest=0x0000 # C
|
||||
OP_RezzAnswer=0x0000 # C
|
||||
OP_Shielding=0x0000 # C
|
||||
OP_RequestDuel=0x0000 # C
|
||||
OP_MobRename=0x0000 # C
|
||||
OP_AugmentItem=0x0000 # C
|
||||
OP_WeaponEquip1=0x0000 # C
|
||||
OP_WeaponEquip2=0x0000 # C
|
||||
OP_WeaponUnequip2=0x0000 # C
|
||||
OP_ApplyPoison=0x0000 # C
|
||||
OP_Save=0x0000 # C
|
||||
OP_TestBuff=0x0000 # C
|
||||
OP_CustomTitles=0x0000 # C
|
||||
OP_Split=0x0000 # C
|
||||
OP_YellForHelp=0x0000 # C
|
||||
OP_LoadSpellSet=0x0000 # C
|
||||
OP_Bandolier=0x0000 # C
|
||||
OP_PotionBelt=0x0000 # C
|
||||
OP_DuelResponse=0x0000 # C
|
||||
OP_DuelResponse2=0x0000 # C
|
||||
OP_SaveOnZoneReq=0x2913 # was 0x2913
|
||||
OP_ReadBook=0x0000 # C
|
||||
OP_Dye=0x0000 # C
|
||||
OP_InterruptCast=0x0000 # C
|
||||
OP_AAAction=0x0000 # C
|
||||
OP_LeadershipExpToggle=0x0000 # C
|
||||
OP_LeadershipExpUpdate=0x0000 # C
|
||||
OP_PurchaseLeadershipAA=0x0000 # C
|
||||
OP_UpdateLeadershipAA=0x0000 # C
|
||||
OP_MarkNPC=0x0000 # C
|
||||
OP_ClearNPCMarks=0x0000 # C
|
||||
OP_DoGroupLeadershipAbility=0x0000 # C
|
||||
OP_GroupLeadershipAAUpdate=0x0000 # C
|
||||
OP_DelegateAbility=0x0000 # C
|
||||
OP_SetGroupTarget=0x0000 # C
|
||||
OP_Charm=0x0000 # C
|
||||
OP_Stun=0x0000 # C
|
||||
OP_SendFindableNPCs=0x49f6 # C
|
||||
OP_FindPersonRequest=0x0000 # C
|
||||
OP_FindPersonReply=0x0000 # C
|
||||
OP_Sound=0x0000 # C
|
||||
OP_PetBuffWindow=0x0000 # C
|
||||
OP_LevelAppearance=0x0000 # C
|
||||
OP_Translocate=0x0000 # C
|
||||
OP_Sacrifice=0x0000 # C
|
||||
OP_PopupResponse=0x0000 # C
|
||||
OP_OnLevelMessage=0x0000 # C
|
||||
OP_AugmentInfo=0x0000 # C
|
||||
OP_Petition=0x0000 # C
|
||||
OP_SomeItemPacketMaybe=0x4200 # C
|
||||
OP_SomeItemPacketMaybe=0x0000 # C
|
||||
OP_PVPStats=0x0000 # C
|
||||
OP_PVPLeaderBoardRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardReply=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 # C
|
||||
OP_RestState=0x0000 # C
|
||||
OP_RespawnWindow=0x0000 # C
|
||||
OP_DisciplineTimer=0x0000 # C
|
||||
OP_LDoNButton=0x0000 # C
|
||||
OP_SetStartCity=0x0000 # C
|
||||
OP_VoiceMacroIn=0x0000 # C
|
||||
OP_VoiceMacroOut=0x0000 # C
|
||||
OP_ItemViewUnknown=0x0000 # C
|
||||
OP_VetRewardsAvaliable=0x0000 # C Mispelled?
|
||||
OP_VetClaimRequest=0x0000 # C
|
||||
OP_VetClaimReply=0x0000 # C
|
||||
OP_CrystalCountUpdate=0x0000 # C
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 # C OP_Damage?
|
||||
OP_MobUpdate=0x4656 # was 0x4656
|
||||
OP_NPCMoveUpdate=0x5bad #
|
||||
OP_CameraEffect=0x0000 # V
|
||||
OP_SpellEffect=0x0000 # V
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # C
|
||||
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
|
||||
OP_LootItem=0x0000 # C
|
||||
OP_LootComplete=0x0000 # C
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 # C
|
||||
OP_TraderDelItem=0x0000 # C
|
||||
OP_BecomeTrader=0x0000 # C
|
||||
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 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 # C
|
||||
OP_TradeAcceptClick=0x0000 # C
|
||||
OP_TradeRequestAck=0x0000 # C
|
||||
OP_TradeCoins=0x0000 # C
|
||||
OP_FinishTrade=0x0000 # C
|
||||
OP_CancelTrade=0x0000 # C
|
||||
OP_TradeMoneyUpdate=0x0000 # C
|
||||
OP_MoneyUpdate=0x0000 # C
|
||||
OP_TradeBusy=0x0000 # C
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 # C
|
||||
OP_FinishWindow2=0x0000 # C
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 # C
|
||||
OP_ItemVerifyReply=0x0000 # C
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 # C
|
||||
OP_ShopRequest=0x1044 # was 0x1044
|
||||
OP_ShopEnd=0x3753 # was 0x3753
|
||||
OP_ShopEndConfirm=0x0000 # C
|
||||
OP_ShopPlayerBuy=0x0000 # C
|
||||
OP_ShopDelItem=0x0000 # C
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 # V
|
||||
OP_ClickObjectAction=0x0000 # V
|
||||
OP_ClearObject=0x0000 # C
|
||||
OP_RecipeDetails=0x0000 # C
|
||||
OP_RecipesFavorite=0x0000 # C
|
||||
OP_RecipesSearch=0x0000 # C
|
||||
OP_RecipeReply=0x0000 # C
|
||||
OP_RecipeAutoCombine=0x0000 # C
|
||||
OP_TradeSkillCombine=0x0000 # C
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 # C
|
||||
OP_OpenTributeMaster=0x0000 # C
|
||||
OP_SelectTribute=0x0000 # C
|
||||
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 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 # C
|
||||
OP_AdventureFinish=0x0000 # C
|
||||
OP_AdventureInfoRequest=0x0000 # C
|
||||
OP_AdventureInfo=0x0000 # C
|
||||
OP_AdventureRequest=0x0000 # C
|
||||
OP_AdventureDetails=0x0000 # C
|
||||
OP_AdventureData=0x0000 # C
|
||||
OP_AdventureUpdate=0x0000 # C
|
||||
OP_AdventureMerchantRequest=0x0000 # C
|
||||
OP_AdventureMerchantResponse=0x0000 # C
|
||||
OP_AdventureMerchantPurchase=0x0000 # C
|
||||
OP_AdventureMerchantSell=0x0000 # C
|
||||
OP_AdventurePointsUpdate=0x0000 # C
|
||||
OP_AdventureStatsRequest=0x0000 # C
|
||||
OP_AdventureStatsReply=0x0000 # C
|
||||
OP_AdventureLeaderboardRequest=0x0000 # C
|
||||
OP_AdventureLeaderboardReply=0x0000 # C
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 # C
|
||||
OP_GroupInvite=0x0000 # C
|
||||
OP_GroupFollow=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_CancelInvite=0x0000 # C
|
||||
OP_GroupFollow2=0x0000 # C
|
||||
OP_GroupInvite2=0x0000 # C
|
||||
OP_GroupDisbandYou=0x0000 # C
|
||||
OP_GroupDisbandOther=0x0000 # C
|
||||
OP_GroupLeaderChange=0x0000 # C
|
||||
OP_GroupRoles=0x0000 # C
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 # C
|
||||
OP_LFGGetMatchesRequest=0x0000 # C
|
||||
OP_LFGGetMatchesResponse=0x0000 # C
|
||||
OP_LFPGetMatchesRequest=0x0000 # C
|
||||
OP_LFPGetMatchesResponse=0x0000 # C
|
||||
OP_LFPCommand=0x0000 # C
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 # C
|
||||
OP_RaidUpdate=0x0000 # C
|
||||
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_Disarm=0x0000 # C
|
||||
OP_Sneak=0x0000 # C
|
||||
OP_Fishing=0x0000 # C
|
||||
OP_InstillDoubt=0x0000 # C
|
||||
OP_FeignDeath=0x0000 # C
|
||||
OP_Mend=0x0000 # C
|
||||
OP_LDoNOpen=0x0000 # C
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 # C
|
||||
OP_TaskMemberList=0x0000 # C
|
||||
OP_OpenNewTasksWindow=0x0000 # C
|
||||
OP_AvaliableTask=0x0000 # C Mispelled?
|
||||
OP_AcceptNewTask=0x0000 # C
|
||||
OP_TaskHistoryRequest=0x0000 # C
|
||||
OP_TaskHistoryReply=0x0000 # C
|
||||
OP_CancelTask=0x0000 # C
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 # C
|
||||
OP_RequestTitles=0x0000 # C
|
||||
OP_SendTitleList=0x0000 # C
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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_OPCode2511=0x2511
|
||||
@@ -0,0 +1,653 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 used for unknown explorer
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x5e9e
|
||||
OP_ApproveWorld=0x5a47
|
||||
OP_LogServer=0x0c30
|
||||
OP_SendCharInfo=0x03cc
|
||||
OP_ExpansionInfo=0x3c7a
|
||||
OP_GuildsList=0x12bc
|
||||
OP_EnterWorld=0x74de
|
||||
OP_PostEnterWorld=0x6e03
|
||||
OP_World_Client_CRC1=0x2625
|
||||
OP_World_Client_CRC2=0x0799
|
||||
OP_SendSpellChecksum=0x0000
|
||||
OP_SendSkillCapsChecksum=0x0000
|
||||
|
||||
# Character Select Related:
|
||||
OP_SendMaxCharacters=0x11be
|
||||
OP_SendMembership=0x76f8
|
||||
OP_SendMembershipDetails=0x7475
|
||||
OP_CharacterCreateRequest=0x37c2
|
||||
OP_CharacterCreate=0x56aa
|
||||
OP_DeleteCharacter=0x4572
|
||||
OP_RandomNameGenerator=0x045b
|
||||
OP_ApproveName=0x077e
|
||||
OP_MOTD=0x4c33
|
||||
OP_SetChatServer=0x5b4c
|
||||
OP_SetChatServer2=0x70b3
|
||||
OP_ZoneServerInfo=0x559f
|
||||
OP_WorldComplete=0x0d7c
|
||||
OP_WorldUnknown001=0x0b85
|
||||
OP_FloatListThing=0x15f4
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x4a6f
|
||||
OP_WorldClientReady=0x27f4
|
||||
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=0x5ee8
|
||||
OP_ZoneEntry=0x2cbe
|
||||
OP_ReqNewZone=0x724c
|
||||
OP_NewZone=0x082d
|
||||
OP_ZoneSpawns=0x173c
|
||||
OP_PlayerProfile=0x6725
|
||||
OP_TimeOfDay=0x2d98
|
||||
OP_LevelUpdate=0x698e
|
||||
OP_Stamina=0x54fb
|
||||
OP_RequestClientZoneChange=0x029d
|
||||
OP_ZoneChange=0x499e
|
||||
OP_LockoutTimerInfo=0x0000
|
||||
OP_ZoneServerReady=0x0000
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_LogoutReply=0x0000
|
||||
OP_PreLogoutReply=0x0000
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x6087
|
||||
OP_ChangeSize=0x0aad
|
||||
OP_TributeUpdate=0x5026
|
||||
OP_TributeTimer=0x2027
|
||||
OP_SendTributes=0x38ef
|
||||
OP_SendGuildTributes=0x115f
|
||||
OP_TributeInfo=0x7097
|
||||
OP_Weather=0x1a00
|
||||
OP_ReqClientSpawn=0x6cd1
|
||||
OP_SpawnDoor=0x0e70
|
||||
OP_GroundSpawn=0x11ef
|
||||
OP_SendZonepoints=0x0a1d
|
||||
OP_BlockedBuffs=0x6095
|
||||
OP_RemoveBlockedBuffs=0x02cc
|
||||
OP_ClearBlockedBuffs=0x1b26
|
||||
OP_WorldObjectsSent=0x3f13
|
||||
OP_SendExpZonein=0x7303
|
||||
OP_SendAATable=0x6b93
|
||||
OP_RespondAA=0x5a5c
|
||||
OP_UpdateAA=0x1820
|
||||
OP_SendAAStats=0x6c5d
|
||||
OP_AAExpUpdate=0x0eae
|
||||
OP_ExpUpdate=0x7814
|
||||
OP_HPUpdate=0x069e
|
||||
OP_ManaChange=0x0a79
|
||||
OP_TGB=0x2f0a
|
||||
OP_SpecialMesg=0x7d12
|
||||
OP_GuildMemberList=0x210b
|
||||
OP_GuildMOTD=0x7864
|
||||
OP_CharInventory=0x4cd2
|
||||
OP_WearChange=0x6a1a
|
||||
OP_ClientUpdate=0x6cc2
|
||||
OP_ClientReady=0x2bd4 # 0x422d
|
||||
OP_SetServerFilter=0x59ab
|
||||
|
||||
# Guild Opcodes - Disabled until crashes are resolved in RoF
|
||||
OP_GetGuildMOTD=0x58dd # Was 0x35dc
|
||||
OP_GetGuildMOTDReply=0x45d5 # Was 0x4586
|
||||
OP_GuildMemberUpdate=0x6719 # Was 0x5643
|
||||
OP_GuildInvite=0x37d8
|
||||
OP_GuildRemove=0x0e16
|
||||
OP_GuildPeace=0x25c1
|
||||
OP_SetGuildMOTD=0x0b26
|
||||
OP_GuildList=0x0000
|
||||
OP_GuildWar=0x56fd
|
||||
OP_GuildLeader=0x38cf
|
||||
OP_GuildDelete=0x7135
|
||||
OP_GuildInviteAccept=0x3277
|
||||
OP_GuildDemote=0x3798
|
||||
OP_GuildPublicNote=0x36e2
|
||||
OP_GuildManageBanker=0x3ff3 # Was 0x0737
|
||||
OP_GuildBank=0x372e # Was 0x10c3
|
||||
OP_SetGuildRank=0x3d22
|
||||
OP_GuildUpdateURLAndChannel=0x6f0c
|
||||
OP_GuildStatus=0x423b
|
||||
OP_GuildCreate=0x057e # or maybe 0x086e
|
||||
OP_GuildMemberLevelUpdate=0x0000 # Unused?
|
||||
OP_ZoneGuildList=0x0000 # Unused?
|
||||
OP_GetGuildsList=0x0000 # Unused?
|
||||
OP_LFGuild=0x0000
|
||||
OP_GuildManageRemove=0x0000
|
||||
OP_GuildManageAdd=0x0000
|
||||
OP_GuildManageStatus=0x0000
|
||||
|
||||
# GM/Guide Opcodes
|
||||
OP_GMServers=0x362a
|
||||
OP_GMBecomeNPC=0x783b
|
||||
OP_GMZoneRequest=0x6028
|
||||
OP_GMZoneRequest2=0x4cc5
|
||||
OP_GMGoto=0x4234
|
||||
OP_GMSearchCorpse=0x0ac5
|
||||
OP_GMHideMe=0x39a2
|
||||
OP_GMDelCorpse=0x2885
|
||||
OP_GMApproval=0x5e62
|
||||
OP_GMToggle=0x1c2c
|
||||
OP_GMSummon=0x1b2a # Was 0x684f
|
||||
OP_GMEmoteZone=0x54da # Was 0x0655
|
||||
OP_GMEmoteWorld=0x32ee # Was 0x1935
|
||||
OP_GMFind=0x3f2c
|
||||
OP_GMKick=0x4bd5
|
||||
OP_GMKill=0x2591
|
||||
OP_GMNameChange=0x1e00 # Was 0x4434
|
||||
OP_GMLastName=0x0c17 # Was 0x3077
|
||||
|
||||
# Misc Opcodes
|
||||
OP_InspectRequest=0x5440
|
||||
OP_InspectAnswer=0x31e3
|
||||
OP_InspectMessageUpdate=0x351a
|
||||
OP_BeginCast=0x0b2b
|
||||
OP_BuffFadeMsg=0x0076
|
||||
OP_ConsentResponse=0x7903
|
||||
OP_MemorizeSpell=0x5dbc
|
||||
OP_SwapSpell=0x2642
|
||||
OP_CastSpell=0x0e18
|
||||
OP_Consider=0x0fcd
|
||||
OP_FormattedMessage=0x748e
|
||||
OP_SimpleMessage=0x3ecd
|
||||
OP_Buff=0x1a9b
|
||||
OP_Illusion=0x359a
|
||||
OP_MoneyOnCorpse=0x1107
|
||||
OP_RandomReply=0x5cc5
|
||||
OP_DenyResponse=0x3c2d
|
||||
OP_SkillUpdate=0x7eb4
|
||||
OP_GMTrainSkillConfirm=0x157c # 0x3960
|
||||
OP_RandomReq=0x4fd0
|
||||
OP_Death=0x62bd
|
||||
OP_GMTraining=0x6f12
|
||||
OP_GMEndTraining=0x6f0a
|
||||
OP_GMTrainSkill=0x2082
|
||||
OP_Animation=0x62f1
|
||||
OP_Begging=0x1a49
|
||||
OP_Consent=0x5b9e
|
||||
OP_ConsentDeny=0x56ae
|
||||
OP_AutoFire=0x479d
|
||||
OP_PetCommands=0x46a0
|
||||
OP_DeleteSpell=0x27da
|
||||
OP_Surname=0x5dd0
|
||||
OP_ClearSurname=0x5900
|
||||
OP_FaceChange=0x474e
|
||||
OP_SenseHeading=0x2a34
|
||||
OP_Action=0x16a5
|
||||
OP_ConsiderCorpse=0x1683
|
||||
OP_HideCorpse=0x1102
|
||||
OP_CorpseDrag=0x32cc
|
||||
OP_CorpseDrop=0x1224
|
||||
OP_Bug=0x41ac
|
||||
OP_Feedback=0x3c4a
|
||||
OP_Report=0x1b2f
|
||||
OP_Damage=0x1375
|
||||
OP_ChannelMessage=0x0cf4
|
||||
OP_Assist=0x50c5
|
||||
OP_AssistGroup=0x7f67
|
||||
OP_MoveCoin=0x6928
|
||||
OP_ZonePlayerToBind=0x5a82
|
||||
OP_KeyRing=0x566e
|
||||
OP_WhoAllRequest=0x0033
|
||||
OP_WhoAllResponse=0x68f6
|
||||
OP_FriendsWho=0x5988
|
||||
OP_ConfirmDelete=0x51d3
|
||||
OP_Logout=0x627f
|
||||
OP_Rewind=0x29c7
|
||||
OP_TargetCommand=0x6952
|
||||
OP_Hide=0x5d4d
|
||||
OP_Jump=0x7611
|
||||
OP_Camp=0x4863
|
||||
OP_Emote=0x0bff
|
||||
OP_SetRunMode=0x26b3
|
||||
OP_BankerChange=0x36a6
|
||||
OP_TargetMouse=0x02f7
|
||||
OP_MobHealth=0x217a
|
||||
OP_InitialMobHealth=0x0000 # Unused?
|
||||
OP_TargetHoTT=0x1fd6
|
||||
OP_XTargetResponse=0x6d47
|
||||
OP_XTargetRequest=0x2603
|
||||
OP_XTargetAutoAddHaters=0x5fe3
|
||||
OP_TargetBuffs=0x4c77
|
||||
OP_BuffCreate=0x20ee
|
||||
OP_BuffRemoveRequest=0x7ca3
|
||||
OP_DeleteSpawn=0x0ead
|
||||
OP_AutoAttack=0x12fb
|
||||
OP_AutoAttack2=0x1763
|
||||
OP_Consume=0x6aa6
|
||||
OP_MoveItem=0x68a2
|
||||
OP_DeleteItem=0x46c4
|
||||
OP_DeleteCharge=0x6933
|
||||
OP_ItemPacket=0x5ae8
|
||||
OP_ItemLinkResponse=0x2d88
|
||||
OP_ItemLinkClick=0x7404
|
||||
OP_ItemPreview=0x198c
|
||||
OP_NewSpawn=0x56e9
|
||||
OP_Track=0x3089
|
||||
OP_TrackTarget=0x31d4
|
||||
OP_TrackUnknown=0x50b2
|
||||
OP_ClickDoor=0x0cc4
|
||||
OP_MoveDoor=0x3162
|
||||
OP_RemoveAllDoors=0x0712
|
||||
OP_EnvDamage=0x4a49
|
||||
OP_BoardBoat=0x10b0
|
||||
OP_Forage=0x02ed
|
||||
OP_LeaveBoat=0x398e
|
||||
OP_ControlBoat=0x1793
|
||||
OP_SafeFallSuccess=0x1c7e
|
||||
OP_RezzComplete=0x62d6
|
||||
OP_RezzRequest=0x095b
|
||||
OP_RezzAnswer=0x4b2c
|
||||
OP_Shielding=0x2b69
|
||||
OP_RequestDuel=0x24d4
|
||||
OP_MobRename=0x7658
|
||||
OP_AugmentItem=0x7ba5 # Was 0x37cb
|
||||
OP_WeaponEquip1=0x34bc
|
||||
OP_WeaponEquip2=0x6f7e # Was 0x6022
|
||||
OP_WeaponUnequip2=0x1343 # Was 0x0110
|
||||
OP_ApplyPoison=0x7d23
|
||||
OP_Save=0x27d9
|
||||
OP_TestBuff=0x61f9 # Was 0x3772
|
||||
OP_CustomTitles=0x475f
|
||||
OP_Split=0x5e9a
|
||||
OP_YellForHelp=0x0696
|
||||
OP_LoadSpellSet=0x6208
|
||||
OP_Bandolier=0x7cf8
|
||||
OP_PotionBelt=0x3cf9 # Was 0x4d3b
|
||||
OP_DuelResponse=0x4f58
|
||||
OP_DuelResponse2=0x3455
|
||||
OP_SaveOnZoneReq=0x0070
|
||||
OP_ReadBook=0x25b0
|
||||
OP_Dye=0x11a8
|
||||
OP_InterruptCast=0x14b2
|
||||
OP_AAAction=0x183b
|
||||
OP_LeadershipExpToggle=0x75b0
|
||||
OP_LeadershipExpUpdate=0x0e8f
|
||||
OP_PurchaseLeadershipAA=0x4269
|
||||
OP_UpdateLeadershipAA=0x4fc0
|
||||
OP_MarkNPC=0x13d3
|
||||
OP_ClearNPCMarks=0x1593
|
||||
OP_DelegateAbility=0x100f
|
||||
OP_SetGroupTarget=0x2de8
|
||||
OP_Charm=0x5978
|
||||
OP_Stun=0x04bd
|
||||
OP_SendFindableNPCs=0x7b8a
|
||||
OP_FindPersonRequest=0x5d79
|
||||
OP_FindPersonReply=0x2b23
|
||||
OP_Sound=0x03fa
|
||||
OP_PetBuffWindow=0x1e1c
|
||||
OP_LevelAppearance=0x0442
|
||||
OP_Translocate=0x2e84
|
||||
OP_Sacrifice=0x0d88
|
||||
OP_PopupResponse=0x04f7
|
||||
OP_OnLevelMessage=0x6a6b
|
||||
OP_AugmentInfo=0x1fce
|
||||
OP_Petition=0x152e
|
||||
OP_SomeItemPacketMaybe=0x6ce8
|
||||
OP_PVPStats=0x125a # Unsure
|
||||
OP_PVPLeaderBoardRequest=0x673e
|
||||
OP_PVPLeaderBoardReply=0x66fd
|
||||
OP_PVPLeaderBoardDetailsRequest=0x6bbf
|
||||
OP_PVPLeaderBoardDetailsReply=0x78bd
|
||||
OP_RestState=0x0812
|
||||
OP_RespawnWindow=0x3594
|
||||
OP_LDoNButton=0x1071
|
||||
OP_SetStartCity=0x2f81 # Was 0x2d1b
|
||||
OP_VoiceMacroIn=0x7ed5
|
||||
OP_VoiceMacroOut=0x72ed
|
||||
OP_ItemViewUnknown=0x1915
|
||||
OP_VetRewardsAvaliable=0xbdf1
|
||||
OP_VetClaimRequest=0x1711
|
||||
OP_VetClaimReply=0x7497
|
||||
OP_DisciplineUpdate=0x594d # Was 0x2f05
|
||||
OP_DisciplineTimer=0x2dab # Was 0x5e3f
|
||||
OP_BecomeCorpse=0x0000 # Unused?
|
||||
OP_Action2=0x0000 # Unused?
|
||||
OP_MobUpdate=0x282a
|
||||
OP_NPCMoveUpdate=0x7342
|
||||
OP_CameraEffect=0x1cee
|
||||
OP_SpellEffect=0x2a61
|
||||
OP_RemoveNimbusEffect=0x4f63
|
||||
OP_AltCurrency=0x0852
|
||||
OP_AltCurrencyMerchantRequest=0x2efc
|
||||
OP_AltCurrencyMerchantReply=0x13fb
|
||||
OP_AltCurrencyPurchase=0x3e5a
|
||||
OP_AltCurrencySell=0x24b3
|
||||
OP_AltCurrencySellSelection=0x0019
|
||||
OP_AltCurrencyReclaim=0x7f65
|
||||
OP_CrystalCountUpdate=0x0a13 # Was 0x3f60
|
||||
OP_CrystalCreate=0x1e17 # Was 0x5a82
|
||||
OP_CrystalReclaim=0x22f6 # Was 0x7616
|
||||
OP_Untargetable=0x46e0
|
||||
OP_IncreaseStats=0x598c
|
||||
OP_Weblink=0x6f7f
|
||||
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
|
||||
OP_OpenContainer=0x0000
|
||||
|
||||
OP_DzQuit=0x4839
|
||||
OP_DzListTimers=0x0e73
|
||||
OP_DzAddPlayer=0x3b05
|
||||
OP_DzRemovePlayer=0x68e7
|
||||
OP_DzSwapPlayer=0x75ee
|
||||
OP_DzMakeLeader=0x7703
|
||||
OP_DzPlayerList=0x76bb
|
||||
OP_DzJoinExpeditionConfirm=0x3c5b
|
||||
OP_DzJoinExpeditionReply=0x7410
|
||||
OP_DzExpeditionInfo=0x6ba0
|
||||
OP_DzExpeditionList=0x1d95
|
||||
OP_DzMemberStatus=0x23b6
|
||||
OP_DzLeaderStatus=0x6835
|
||||
OP_DzExpeditionEndsWarning=0x75ea
|
||||
OP_DzMemberList=0x1a45
|
||||
OP_DzCompass=0x188f # Was 0x4f09
|
||||
OP_DzChooseZone=0x0000 # Maybe 0x29d6
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
OP_ManaUpdate=0x0396
|
||||
OP_EnduranceUpdate=0x7b61
|
||||
OP_MobManaUpdate=0x0247
|
||||
OP_MobEnduranceUpdate=0x7902
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataUpdateRequest=0x65fc
|
||||
OP_MercenaryDataUpdate=0x23de
|
||||
OP_MercenaryDataRequest=0x306a
|
||||
OP_MercenaryDataResponse=0xbdb8
|
||||
OP_MercenaryHire=0x0453
|
||||
OP_MercenaryDismiss=0x3cfc
|
||||
OP_MercenaryTimerRequest=0x1357
|
||||
OP_MercenaryTimer=0x54f5
|
||||
OP_MercenaryUnknown1=0x319c
|
||||
OP_MercenaryCommand=0x6d04
|
||||
OP_MercenarySuspendRequest=0x3a36
|
||||
OP_MercenarySuspendResponse=0x4f8a
|
||||
OP_MercenaryUnsuspendResponse=0x295a
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x27fb
|
||||
OP_EndLootRequest=0x29e7
|
||||
OP_LootItem=0x1aea
|
||||
OP_LootComplete=0x917c
|
||||
|
||||
# bazaar trader stuff:
|
||||
OP_BazaarSearch=0x4fa8
|
||||
OP_TraderDelItem=0x0000
|
||||
OP_BecomeTrader=0x6a33
|
||||
OP_TraderShop=0x1faa
|
||||
OP_Trader=0x27c6 # Was 0x6790
|
||||
OP_TraderBuy=0x0000
|
||||
OP_Barter=0x760c
|
||||
OP_ShopItem=0x0000
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_Bazaar=0x0000
|
||||
OP_TraderItemUpdate=0x0000
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0b3f
|
||||
OP_TradeAcceptClick=0x1ac5
|
||||
OP_TradeRequestAck=0x3aa1
|
||||
OP_TradeCoins=0x0ef7
|
||||
OP_FinishTrade=0x0e46
|
||||
OP_CancelTrade=0x7edb
|
||||
OP_TradeMoneyUpdate=0x3755
|
||||
OP_MoneyUpdate=0x325f
|
||||
OP_TradeBusy=0x31c2
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x3b51
|
||||
OP_FinishWindow2=0x0f8e
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x6089
|
||||
OP_ItemVerifyReply=0x73fc
|
||||
|
||||
# merchant stuff
|
||||
OP_ShopPlayerSell=0x1456
|
||||
OP_ShopRequest=0x1799
|
||||
OP_ShopEnd=0x1a56
|
||||
OP_ShopEndConfirm=0x5628
|
||||
OP_ShopPlayerBuy=0xad00
|
||||
OP_ShopDelItem=0x4420
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x7f78
|
||||
OP_ClickObjectAction=0x7283
|
||||
OP_ClearObject=0x10ea
|
||||
OP_RecipeDetails=0x2251
|
||||
OP_RecipesFavorite=0x1665
|
||||
OP_RecipesSearch=0x11d6
|
||||
OP_RecipeReply=0x1045
|
||||
OP_RecipeAutoCombine=0x588f
|
||||
OP_TradeSkillCombine=0x556b
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x57e4
|
||||
OP_OpenTributeMaster=0x472d # Was 0x40f5
|
||||
OP_SelectTribute=0x75e3
|
||||
OP_TributeItem=0x5789
|
||||
OP_TributeMoney=0x7d50 # Was 0x6fed
|
||||
OP_TributeToggle=0x0e59
|
||||
OP_TributePointUpdate=0x0dff
|
||||
OP_TributeNPC=0x0000
|
||||
OP_GuildTributeInfo=0x0000
|
||||
OP_OpenTributeReply=0x0000
|
||||
OP_GuildTributeStatus=0x0000
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x7d78
|
||||
OP_AdventureFinish=0x2ddc
|
||||
OP_AdventureInfoRequest=0x1780
|
||||
OP_AdventureInfo=0x099a
|
||||
OP_AdventureRequest=0x101b
|
||||
OP_AdventureDetails=0x3a56
|
||||
OP_AdventureData=0x18d0
|
||||
OP_AdventureUpdate=0x255c
|
||||
OP_AdventureMerchantRequest=0x4383 # Was 654d
|
||||
OP_AdventureMerchantResponse=0x0975 # Was 7949
|
||||
OP_AdventureMerchantPurchase=0x2681 # Was 155a
|
||||
OP_AdventureMerchantSell=0x0529 # Was 389c
|
||||
OP_AdventurePointsUpdate=0x75cb # Was 7589
|
||||
OP_AdventureStatsRequest=0x7451
|
||||
OP_AdventureStatsReply=0x1595
|
||||
OP_AdventureLeaderboardRequest=0x1099
|
||||
OP_AdventureLeaderboardReply=0x1f56
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x351e
|
||||
OP_GroupInvite=0x7cd7
|
||||
OP_GroupFollow=0x352b
|
||||
OP_GroupUpdate=0x2244
|
||||
OP_GroupUpdateB=0x20d5
|
||||
OP_GroupCancelInvite=0x0000
|
||||
OP_GroupAcknowledge=0x3391
|
||||
OP_GroupDelete=0x3e4c
|
||||
OP_CancelInvite=0x5e6d
|
||||
OP_GroupFollow2=0x63b4
|
||||
OP_GroupInvite2=0x33e8
|
||||
OP_GroupDisbandYou=0x79d6
|
||||
OP_GroupDisbandOther=0x65c0
|
||||
OP_GroupLeaderChange=0x626d
|
||||
OP_GroupRoles=0x3438
|
||||
OP_GroupMakeLeader=0x3188
|
||||
OP_DoGroupLeadershipAbility=0x302d
|
||||
OP_GroupLeadershipAAUpdate=0x71bd
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x4fed
|
||||
OP_LFGGetMatchesRequest=0x236c
|
||||
OP_LFGGetMatchesResponse=0x18fb
|
||||
OP_LFPGetMatchesRequest=0x1a28
|
||||
OP_LFPGetMatchesResponse=0x5daa
|
||||
OP_LFPCommand=0x6751
|
||||
OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x7383
|
||||
OP_RaidUpdate=0x0594
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x56df
|
||||
OP_CombatAbility=0x31f9
|
||||
OP_SenseTraps=0x555b # Was 0x2ee0
|
||||
OP_PickPocket=0x3f61
|
||||
OP_DisarmTraps=0x0000
|
||||
OP_Disarm=0x0efe
|
||||
OP_Sneak=0x4631
|
||||
OP_Fishing=0x46e3
|
||||
OP_InstillDoubt=0x2980
|
||||
OP_FeignDeath=0x6a76
|
||||
OP_Mend=0x54fe
|
||||
OP_Bind_Wound=0x5066
|
||||
OP_LDoNOpen=0x0173
|
||||
|
||||
# Task packets
|
||||
OP_TaskDescription=0x0736
|
||||
OP_TaskActivity=0x74a1
|
||||
OP_CompletedTasks=0x7392
|
||||
OP_TaskActivityComplete=0x44a6
|
||||
OP_AcceptNewTask=0x1bbf
|
||||
OP_CancelTask=0x590b
|
||||
OP_TaskMemberList=0x0e5c # Was 0x1656
|
||||
OP_OpenNewTasksWindow=0x22ac # Was 0x11de
|
||||
OP_AvaliableTask=0x12cd # Was 0x2377
|
||||
OP_TaskHistoryRequest=0x1489
|
||||
OP_TaskHistoryReply=0x2d43
|
||||
OP_DeclineAllTasks=0x0000
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x21d0
|
||||
OP_RequestTitles=0x6b48
|
||||
OP_SendTitleList=0x6af1
|
||||
OP_SetTitle=0x6d7b
|
||||
OP_SetTitleReply=0x41ef
|
||||
|
||||
# mail opcodes
|
||||
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 ###########
|
||||
|
||||
# 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
@@ -0,0 +1,611 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x0000a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x6893 # was 0x2683
|
||||
OP_ApproveWorld=0x115a # was 0x28a7
|
||||
OP_LogServer=0x701f # was 0x224f
|
||||
OP_SendCharInfo=0x1b85 # was 0x2c27
|
||||
OP_ExpansionInfo=0x1771 # Same
|
||||
OP_GuildsList=0x5b0b # Same
|
||||
OP_EnterWorld=0x3288 # was 0x4f60
|
||||
OP_PostEnterWorld=0x2f2c # was 0x570c
|
||||
OP_World_Client_CRC1=0x0000 # C
|
||||
OP_World_Client_CRC2=0x0000 # C
|
||||
OP_SendSpellChecksum=0x0000 # C
|
||||
OP_SendSkillCapsChecksum=0x0000 # C
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 # C
|
||||
OP_CharacterCreateRequest=0x0000 # C
|
||||
OP_CharacterCreate=0x0000 # C
|
||||
OP_RandomNameGenerator=0x0000 # C 0x0000
|
||||
OP_ApproveName=0x0000 # C
|
||||
|
||||
OP_MOTD=0x7312 # C 0x0000
|
||||
OP_SetChatServer=0x698a #
|
||||
OP_SetChatServer2=0x0000 # Not sent any more ?
|
||||
OP_ZoneServerInfo=0x0479 # was 0x03cc
|
||||
OP_WorldComplete=0x510c #
|
||||
OP_WorldUnknown001=0x0000 # C 0x0000
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 # was 0x3594
|
||||
OP_ZoneEntry=0x002b # was 0x538f
|
||||
OP_ReqNewZone=0x5ca5 # was 0x5ca5
|
||||
OP_NewZone=0x0254 # was 0x0254
|
||||
OP_ZoneSpawns=0x0000 # ?
|
||||
OP_PlayerProfile=0x6022 # was 0x6022
|
||||
OP_TimeOfDay=0x6015 # was 0x6015
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x7b64 # V
|
||||
OP_TributeUpdate=0x4895 #
|
||||
OP_TributeTimer=0x0000 # C
|
||||
OP_TaskDescription=0x0000 # C
|
||||
OP_TaskActivity=0x0000 # C
|
||||
OP_CompletedTasks=0x0000 # C 0x0000
|
||||
OP_Weather=0x7ce4 # was 0x0ed5
|
||||
OP_SendAATable=0x1b26 #
|
||||
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_WorldObjectsSent=0x7b73 # was 0x7b73
|
||||
OP_BlockedBuffs=0x664a # was 0x4027
|
||||
OP_SendExpZonein=0x2c27 # was 0x1436
|
||||
OP_SendTributes=0x0000 # V
|
||||
OP_TributeInfo=0x0000 # V
|
||||
OP_SendGuildTributes=0x0000 # C 0x0000
|
||||
OP_AAExpUpdate=0x0000 # V
|
||||
OP_ExpUpdate=0x0000 # V
|
||||
OP_HPUpdate=0x0000 # V
|
||||
OP_ManaChange=0x0000 # C
|
||||
OP_TGB=0x0000 # C
|
||||
OP_SpecialMesg=0x3bf5 # was 0x14ff
|
||||
OP_GuildMemberList=0x0000 # C
|
||||
OP_GuildMOTD=0x0000 # V
|
||||
OP_CharInventory=0x465e #
|
||||
OP_WearChange=0x0000 # V
|
||||
OP_ClientUpdate=0x7062 # was 0x7062
|
||||
OP_ClientReady=0x6cdc # was 0x6cdc
|
||||
OP_SetServerFilter=0x0000 # V
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 # C
|
||||
OP_GetGuildMOTDReply=0x0000 # C
|
||||
OP_GuildMemberUpdate=0x0000 # C
|
||||
OP_GuildInvite=0x0000 # C
|
||||
OP_GuildRemove=0x0000 # C
|
||||
OP_GuildPeace=0x0000 # C
|
||||
OP_SetGuildMOTD=0x0000 # C
|
||||
OP_GuildList=0x0000 # C
|
||||
OP_GuildWar=0x0000 # C
|
||||
OP_GuildLeader=0x0000 # C
|
||||
OP_GuildDelete=0x0000 # C
|
||||
OP_GuildInviteAccept=0x0000 # C
|
||||
OP_GuildDemote=0x0000 # C
|
||||
OP_GuildPublicNote=0x0000 # C
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 # C
|
||||
OP_GMBecomeNPC=0x0000 # C
|
||||
OP_GMZoneRequest=0x6f79 # was 0x18ea
|
||||
OP_GMZoneRequest2=0x02d6 # was 0x3ad9
|
||||
OP_GMGoto=0x0000 # C
|
||||
OP_GMSearchCorpse=0x0000 # C
|
||||
OP_GMHideMe=0x0000 # C
|
||||
OP_GMDelCorpse=0x0000 # C
|
||||
OP_GMApproval=0x0000 # C
|
||||
OP_GMToggle=0x0000 # C 0x0000
|
||||
OP_GMSummon=0x0000 # C
|
||||
OP_GMEmoteZone=0x0000 # C
|
||||
OP_GMEmoteWorld=0x0000 # C
|
||||
OP_GMFind=0x0000 # C
|
||||
OP_GMKick=0x0000 # C
|
||||
OP_GMKill=0x0000 # C
|
||||
OP_GMNameChange=0x0000 # C
|
||||
OP_GMLastName=0x0000 # C
|
||||
|
||||
OP_InspectAnswer=0x0000 # C
|
||||
OP_BeginCast=0x0000 # C
|
||||
OP_BuffFadeMsg=0x50c2 # C
|
||||
OP_ConsentResponse=0x0000 # C
|
||||
OP_MemorizeSpell=0x0000 # C
|
||||
OP_SwapSpell=0x0000 # C
|
||||
OP_CastSpell=0x7286 # C
|
||||
OP_Consider=0x0000 # C
|
||||
OP_FormattedMessage=0x0000 # C
|
||||
OP_SimpleMessage=0x0000 # C 0x0000
|
||||
OP_Buff=0x0000 # C
|
||||
OP_Illusion=0x0000 # C
|
||||
OP_MoneyOnCorpse=0x0000 # C
|
||||
OP_RandomReply=0x0000 # C
|
||||
OP_DenyResponse=0x0000 # C
|
||||
OP_SkillUpdate=0x0000 # C
|
||||
OP_GMTrainSkillConfirm=0x0000 # C
|
||||
OP_RandomReq=0x0000 # C
|
||||
OP_Death=0x0000 # C
|
||||
OP_Bind_Wound=0x0000 # C
|
||||
OP_GMTraining=0x0000 # C
|
||||
OP_GMEndTraining=0x0000 # C
|
||||
OP_GMTrainSkill=0x0000 # C
|
||||
OP_Animation=0x0000 # Was 0x0000
|
||||
OP_Begging=0x0000 # C
|
||||
OP_Consent=0x0000 # C
|
||||
OP_ConsentDeny=0x0000 # C
|
||||
OP_AutoFire=0x0000 # C
|
||||
OP_PetCommands=0x0000 # C
|
||||
OP_DeleteSpell=0x0000 # C
|
||||
OP_Surname=0x0000 # C
|
||||
OP_ClearSurname=0x0000 # C
|
||||
OP_FaceChange=0x0000 # C
|
||||
OP_SenseHeading=0x0000 # C
|
||||
OP_Action=0x1513 # C
|
||||
OP_ConsiderCorpse=0x0000 # C
|
||||
OP_HideCorpse=0x0000 # C 0x0000
|
||||
OP_Bug=0x0000 # C
|
||||
OP_Feedback=0x0000 # C
|
||||
OP_Report=0x0000 # C
|
||||
OP_Damage=0x7519 # C or OP_Action2?
|
||||
OP_ChannelMessage=0x2e79 # was 0x2e79
|
||||
OP_Assist=0x0000 # C
|
||||
OP_AssistGroup=0x0000 # C
|
||||
OP_MoveCoin=0x0000 # C
|
||||
OP_ZonePlayerToBind=0x0000 # C
|
||||
OP_KeyRing=0x0000 # C
|
||||
OP_WhoAllRequest=0x0000 # C
|
||||
OP_WhoAllResponse=0x0000 # C
|
||||
OP_FriendsWho=0x0000 # C
|
||||
OP_ConfirmDelete=0x0000 # V
|
||||
OP_Logout=0x44ae # was 0x64ec
|
||||
OP_Rewind=0x0000 # C
|
||||
OP_TargetCommand=0x0000 # C Was 0x0000
|
||||
OP_InspectRequest=0x0000 # C
|
||||
OP_Hide=0x0000 # C
|
||||
OP_Jump=0x0000 # C
|
||||
OP_Camp=0x42ef # C
|
||||
OP_Emote=0x0000 # C
|
||||
OP_SetRunMode=0x0000 # C
|
||||
OP_BankerChange=0x0000 # C
|
||||
OP_TargetMouse=0x36f8 # C 0x0000
|
||||
OP_MobHealth=0x0000 # C
|
||||
OP_InitialMobHealth=0x0000 # C
|
||||
OP_TargetHoTT=0x0000 # C
|
||||
OP_TargetBuffs=0x0000 # C
|
||||
OP_BuffCreate=0x6bfb # V
|
||||
OP_DeleteSpawn=0x7434 # was 0x7434
|
||||
OP_AutoAttack=0x0000 # C
|
||||
OP_AutoAttack2=0x0000 # C
|
||||
OP_Consume=0x0000 # V
|
||||
OP_MoveItem=0x0000 # C
|
||||
OP_DeleteItem=0x0000 # C
|
||||
OP_DeleteCharge=0x0000 # C
|
||||
OP_ItemPacket=0x35b2 #
|
||||
OP_ItemLinkResponse=0x0000 # C
|
||||
OP_ItemLinkClick=0x0000 # C
|
||||
OP_NewSpawn=0x0000 # C
|
||||
OP_Track=0x0000 # C
|
||||
OP_TrackTarget=0x0000 # C
|
||||
OP_TrackUnknown=0x0000 # C
|
||||
OP_ClickDoor=0x470e # was 0x4f1f
|
||||
OP_MoveDoor=0x48f9 # was 0x1516
|
||||
OP_EnvDamage=0x0000 # C
|
||||
OP_BoardBoat=0x0000 # C
|
||||
OP_Forage=0x0000 # C
|
||||
OP_LeaveBoat=0x0000 # C
|
||||
OP_ControlBoat=0x0000 # C
|
||||
OP_SafeFallSuccess=0x0000 # C
|
||||
OP_RezzComplete=0x0000 # C
|
||||
OP_RezzRequest=0x0000 # C
|
||||
OP_RezzAnswer=0x0000 # C
|
||||
OP_Shielding=0x0000 # C
|
||||
OP_RequestDuel=0x0000 # C
|
||||
OP_MobRename=0x0000 # C
|
||||
OP_AugmentItem=0x0000 # C
|
||||
OP_WeaponEquip1=0x0000 # C
|
||||
OP_WeaponEquip2=0x0000 # C
|
||||
OP_WeaponUnequip2=0x0000 # C
|
||||
OP_ApplyPoison=0x0000 # C
|
||||
OP_Save=0x0000 # C
|
||||
OP_TestBuff=0x0000 # C
|
||||
OP_CustomTitles=0x0000 # C
|
||||
OP_Split=0x0000 # C
|
||||
OP_YellForHelp=0x0000 # C
|
||||
OP_LoadSpellSet=0x0000 # C
|
||||
OP_Bandolier=0x0000 # C
|
||||
OP_PotionBelt=0x0000 # C
|
||||
OP_DuelResponse=0x0000 # C
|
||||
OP_DuelResponse2=0x0000 # C
|
||||
OP_SaveOnZoneReq=0x2913 # was 0x2913
|
||||
OP_ReadBook=0x0000 # C
|
||||
OP_Dye=0x0000 # C
|
||||
OP_InterruptCast=0x0000 # C
|
||||
OP_AAAction=0x0000 # C
|
||||
OP_LeadershipExpToggle=0x0000 # C
|
||||
OP_LeadershipExpUpdate=0x0000 # C
|
||||
OP_PurchaseLeadershipAA=0x0000 # C
|
||||
OP_UpdateLeadershipAA=0x0000 # C
|
||||
OP_MarkNPC=0x0000 # C
|
||||
OP_ClearNPCMarks=0x0000 # C
|
||||
OP_DoGroupLeadershipAbility=0x0000 # C
|
||||
OP_GroupLeadershipAAUpdate=0x0000 # C
|
||||
OP_DelegateAbility=0x0000 # C
|
||||
OP_SetGroupTarget=0x0000 # C
|
||||
OP_Charm=0x0000 # C
|
||||
OP_Stun=0x0000 # C
|
||||
OP_SendFindableNPCs=0x7eeb # C
|
||||
OP_FindPersonRequest=0x0000 # C
|
||||
OP_FindPersonReply=0x0000 # C
|
||||
OP_Sound=0x0000 # C
|
||||
OP_PetBuffWindow=0x0000 # C
|
||||
OP_LevelAppearance=0x0000 # C
|
||||
OP_Translocate=0x0000 # C
|
||||
OP_Sacrifice=0x0000 # C
|
||||
OP_PopupResponse=0x0000 # C
|
||||
OP_OnLevelMessage=0x0000 # C
|
||||
OP_AugmentInfo=0x0000 # C
|
||||
OP_Petition=0x0000 # C
|
||||
OP_SomeItemPacketMaybe=0x4200 # C
|
||||
OP_SomeItemPacketMaybe=0x0000 # C
|
||||
OP_PVPStats=0x0000 # C
|
||||
OP_PVPLeaderBoardRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardReply=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 # C
|
||||
OP_RestState=0x0000 # C
|
||||
OP_RespawnWindow=0x0000 # C
|
||||
OP_DisciplineTimer=0x0000 # C
|
||||
OP_LDoNButton=0x0000 # C
|
||||
OP_SetStartCity=0x0000 # C
|
||||
OP_VoiceMacroIn=0x0000 # C
|
||||
OP_VoiceMacroOut=0x0000 # C
|
||||
OP_ItemViewUnknown=0x0000 # C
|
||||
OP_VetRewardsAvaliable=0x0000 # C Mispelled?
|
||||
OP_VetClaimRequest=0x0000 # C
|
||||
OP_VetClaimReply=0x0000 # C
|
||||
OP_CrystalCountUpdate=0x0000 # C
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 # C OP_Damage?
|
||||
OP_MobUpdate=0x4656 # was 0x4656
|
||||
OP_NPCMoveUpdate=0x5d24 #
|
||||
OP_CameraEffect=0x0000 # V
|
||||
OP_SpellEffect=0x0000 # V
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # C
|
||||
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
|
||||
OP_LootItem=0x0000 # C
|
||||
OP_LootComplete=0x0000 # C
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 # C
|
||||
OP_TraderDelItem=0x0000 # C
|
||||
OP_BecomeTrader=0x0000 # C
|
||||
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 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 # C
|
||||
OP_TradeAcceptClick=0x0000 # C
|
||||
OP_TradeRequestAck=0x0000 # C
|
||||
OP_TradeCoins=0x0000 # C
|
||||
OP_FinishTrade=0x0000 # C
|
||||
OP_CancelTrade=0x0000 # C
|
||||
OP_TradeMoneyUpdate=0x0000 # C
|
||||
OP_MoneyUpdate=0x0000 # C
|
||||
OP_TradeBusy=0x0000 # C
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 # C
|
||||
OP_FinishWindow2=0x0000 # C
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 # C
|
||||
OP_ItemVerifyReply=0x0000 # C
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 # C
|
||||
OP_ShopRequest=0x1044 # was 0x1044
|
||||
OP_ShopEnd=0x3753 # was 0x3753
|
||||
OP_ShopEndConfirm=0x0000 # C
|
||||
OP_ShopPlayerBuy=0x0000 # C
|
||||
OP_ShopDelItem=0x0000 # C
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 # V
|
||||
OP_ClickObjectAction=0x0000 # V
|
||||
OP_ClearObject=0x0000 # C
|
||||
OP_RecipeDetails=0x0000 # C
|
||||
OP_RecipesFavorite=0x0000 # C
|
||||
OP_RecipesSearch=0x0000 # C
|
||||
OP_RecipeReply=0x0000 # C
|
||||
OP_RecipeAutoCombine=0x0000 # C
|
||||
OP_TradeSkillCombine=0x0000 # C
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 # C
|
||||
OP_OpenTributeMaster=0x0000 # C
|
||||
OP_SelectTribute=0x0000 # C
|
||||
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 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 # C
|
||||
OP_AdventureFinish=0x0000 # C
|
||||
OP_AdventureInfoRequest=0x0000 # C
|
||||
OP_AdventureInfo=0x0000 # C
|
||||
OP_AdventureRequest=0x0000 # C
|
||||
OP_AdventureDetails=0x0000 # C
|
||||
OP_AdventureData=0x0000 # C
|
||||
OP_AdventureUpdate=0x0000 # C
|
||||
OP_AdventureMerchantRequest=0x0000 # C
|
||||
OP_AdventureMerchantResponse=0x0000 # C
|
||||
OP_AdventureMerchantPurchase=0x0000 # C
|
||||
OP_AdventureMerchantSell=0x0000 # C
|
||||
OP_AdventurePointsUpdate=0x0000 # C
|
||||
OP_AdventureStatsRequest=0x0000 # C
|
||||
OP_AdventureStatsReply=0x0000 # C
|
||||
OP_AdventureLeaderboardRequest=0x0000 # C
|
||||
OP_AdventureLeaderboardReply=0x0000 # C
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 # C
|
||||
OP_GroupInvite=0x0000 # C
|
||||
OP_GroupFollow=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_CancelInvite=0x0000 # C
|
||||
OP_GroupFollow2=0x0000 # C
|
||||
OP_GroupInvite2=0x0000 # C
|
||||
OP_GroupDisbandYou=0x0000 # C
|
||||
OP_GroupDisbandOther=0x0000 # C
|
||||
OP_GroupLeaderChange=0x0000 # C
|
||||
OP_GroupRoles=0x0000 # C
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 # C
|
||||
OP_LFGGetMatchesRequest=0x0000 # C
|
||||
OP_LFGGetMatchesResponse=0x0000 # C
|
||||
OP_LFPGetMatchesRequest=0x0000 # C
|
||||
OP_LFPGetMatchesResponse=0x0000 # C
|
||||
OP_LFPCommand=0x0000 # C
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 # C
|
||||
OP_RaidUpdate=0x0000 # C
|
||||
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_Disarm=0x0000 # C
|
||||
OP_Sneak=0x0000 # C
|
||||
OP_Fishing=0x0000 # C
|
||||
OP_InstillDoubt=0x0000 # C
|
||||
OP_FeignDeath=0x0000 # C
|
||||
OP_Mend=0x0000 # C
|
||||
OP_LDoNOpen=0x0000 # C
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 # C
|
||||
OP_TaskMemberList=0x0000 # C
|
||||
OP_OpenNewTasksWindow=0x0000 # C
|
||||
OP_AvaliableTask=0x0000 # C Mispelled?
|
||||
OP_AcceptNewTask=0x0000 # C
|
||||
OP_TaskHistoryRequest=0x0000 # C
|
||||
OP_TaskHistoryReply=0x0000 # C
|
||||
OP_CancelTask=0x0000 # C
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 # C
|
||||
OP_RequestTitles=0x0000 # C
|
||||
OP_SendTitleList=0x0000 # C
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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_OPCode2511=0x2511
|
||||
@@ -0,0 +1,653 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 used for unknown explorer
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x7b72
|
||||
OP_ApproveWorld=0x11fe
|
||||
OP_LogServer=0x055d
|
||||
OP_SendCharInfo=0x58ca
|
||||
OP_ExpansionInfo=0x323b
|
||||
OP_GuildsList=0x5c3a
|
||||
OP_EnterWorld=0x4e2b
|
||||
OP_PostEnterWorld=0x3931
|
||||
OP_World_Client_CRC1=0x67bb
|
||||
OP_World_Client_CRC2=0x08ea
|
||||
OP_SendSpellChecksum=0x0000
|
||||
OP_SendSkillCapsChecksum=0x0000
|
||||
|
||||
# Character Select Related:
|
||||
OP_SendMaxCharacters=0x2960
|
||||
OP_SendMembership=0x46d8
|
||||
OP_SendMembershipDetails=0x1af8
|
||||
OP_CharacterCreateRequest=0x1a95
|
||||
OP_CharacterCreate=0x74c4
|
||||
OP_DeleteCharacter=0x63ba
|
||||
OP_RandomNameGenerator=0x0528
|
||||
OP_ApproveName=0x5ae0
|
||||
OP_MOTD=0x5cc4
|
||||
OP_SetChatServer=0x07c6
|
||||
OP_SetChatServer2=0x421b
|
||||
OP_ZoneServerInfo=0x1cfa
|
||||
OP_WorldComplete=0x06f2
|
||||
OP_WorldUnknown001=0x39de
|
||||
OP_FloatListThing=0x62d2
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x5047
|
||||
OP_WorldClientReady=0x0b02
|
||||
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=0x08d6
|
||||
OP_ZoneEntry=0x60a8
|
||||
OP_ReqNewZone=0x0010
|
||||
OP_NewZone=0x18cd
|
||||
OP_ZoneSpawns=0x20da
|
||||
OP_PlayerProfile=0x5772
|
||||
OP_TimeOfDay=0x5824
|
||||
OP_LevelUpdate=0x427d
|
||||
OP_Stamina=0x4932
|
||||
OP_RequestClientZoneChange=0x70f9
|
||||
OP_ZoneChange=0xb646
|
||||
OP_LockoutTimerInfo=0x0000
|
||||
OP_ZoneServerReady=0x0000
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_LogoutReply=0x0000
|
||||
OP_PreLogoutReply=0x0000
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x201a
|
||||
OP_ChangeSize=0x27b3
|
||||
OP_TributeUpdate=0x42e0
|
||||
OP_TributeTimer=0x5008
|
||||
OP_SendTributes=0x3cca
|
||||
OP_SendGuildTributes=0x36e4
|
||||
OP_TributeInfo=0xde3a
|
||||
OP_Weather=0x7fca
|
||||
OP_ReqClientSpawn=0x0ed4
|
||||
OP_SpawnDoor=0x31ed
|
||||
OP_GroundSpawn=0x56b2
|
||||
OP_SendZonepoints=0x0d72
|
||||
OP_BlockedBuffs=0x2b96
|
||||
OP_RemoveBlockedBuffs=0x1702
|
||||
OP_ClearBlockedBuffs=0x53eb
|
||||
OP_WorldObjectsSent=0x59c9
|
||||
OP_SendExpZonein=0x17b6
|
||||
OP_SendAATable=0x7017
|
||||
OP_RespondAA=0x4f1a
|
||||
OP_UpdateAA=0x7eb4
|
||||
OP_SendAAStats=0x46af
|
||||
OP_AAExpUpdate=0x4212
|
||||
OP_ExpUpdate=0x4ecc
|
||||
OP_HPUpdate=0x65e7
|
||||
OP_ManaChange=0x7d4d
|
||||
OP_TGB=0x32ec
|
||||
OP_SpecialMesg=0x7d26
|
||||
OP_GuildMemberList=0x183b
|
||||
OP_GuildMOTD=0x5531
|
||||
OP_CharInventory=0x44db
|
||||
OP_WearChange=0x32fb
|
||||
OP_ClientUpdate=0x0be5
|
||||
OP_ClientReady=0x7aa4 # 0x422d
|
||||
OP_SetServerFilter=0x7958
|
||||
|
||||
# Guild Opcodes - Disabled until crashes are resolved in RoF
|
||||
OP_GetGuildMOTD=0x7332 # Was 0x35dc
|
||||
OP_GetGuildMOTDReply=0x74dd # Was 0x4586
|
||||
OP_GuildMemberUpdate=0x24da # Was 0x5643
|
||||
OP_GuildInvite=0x15e1
|
||||
OP_GuildRemove=0x45ae
|
||||
OP_GuildPeace=0x01fc
|
||||
OP_SetGuildMOTD=0x4467
|
||||
OP_GuildList=0x0000
|
||||
OP_GuildWar=0x2ab7
|
||||
OP_GuildLeader=0x0b1a
|
||||
OP_GuildDelete=0x16ff
|
||||
OP_GuildInviteAccept=0x2fe8
|
||||
OP_GuildDemote=0x52de
|
||||
OP_GuildPublicNote=0x3838
|
||||
OP_GuildManageBanker=0x0116 # Was 0x0737
|
||||
OP_GuildBank=0x2c0e # Was 0x10c3
|
||||
OP_SetGuildRank=0x3894
|
||||
OP_GuildUpdateURLAndChannel=0x11b1
|
||||
OP_GuildStatus=0x3002
|
||||
OP_GuildCreate=0x1246 # or maybe 0x086e
|
||||
OP_GuildMemberLevelUpdate=0x0000 # Unused?
|
||||
OP_ZoneGuildList=0x0000 # Unused?
|
||||
OP_GetGuildsList=0x0000 # Unused?
|
||||
OP_LFGuild=0x0000
|
||||
OP_GuildManageRemove=0x0000
|
||||
OP_GuildManageAdd=0x0000
|
||||
OP_GuildManageStatus=0x0000
|
||||
|
||||
# GM/Guide Opcodes
|
||||
OP_GMServers=0x6c9b
|
||||
OP_GMBecomeNPC=0x5efb
|
||||
OP_GMZoneRequest=0x05db
|
||||
OP_GMZoneRequest2=0x0b6f
|
||||
OP_GMGoto=0x4cf4
|
||||
OP_GMSearchCorpse=0x7628
|
||||
OP_GMHideMe=0x0f7c
|
||||
OP_GMDelCorpse=0x6175
|
||||
OP_GMApproval=0x2151
|
||||
OP_GMToggle=0x352d
|
||||
OP_GMSummon=0x62f8 # Was 0x684f
|
||||
OP_GMEmoteZone=0x5833 # Was 0x0655
|
||||
OP_GMEmoteWorld=0x2643 # Was 0x1935
|
||||
OP_GMFind=0x3450
|
||||
OP_GMKick=0x6dd9
|
||||
OP_GMKill=0x5501
|
||||
OP_GMNameChange=0x7202 # Was 0x51f7
|
||||
OP_GMLastName=0x72c5 # Was 0x4dd7
|
||||
|
||||
# Misc Opcodes
|
||||
OP_InspectRequest=0x0853
|
||||
OP_InspectAnswer=0x3d94
|
||||
OP_InspectMessageUpdate=0x1562
|
||||
OP_BeginCast=0x7ec6
|
||||
OP_BuffFadeMsg=0x193a
|
||||
OP_ConsentResponse=0x130b
|
||||
OP_MemorizeSpell=0x72a0
|
||||
OP_SwapSpell=0x30c2
|
||||
OP_CastSpell=0x6bd3
|
||||
OP_Consider=0x1184
|
||||
OP_FormattedMessage=0x1bc4
|
||||
OP_SimpleMessage=0x4926
|
||||
OP_Buff=0x3526
|
||||
OP_Illusion=0x02e6
|
||||
OP_MoneyOnCorpse=0x2a0f
|
||||
OP_RandomReply=0x0b4b
|
||||
OP_DenyResponse=0x414c
|
||||
OP_SkillUpdate=0x2389
|
||||
OP_GMTrainSkillConfirm=0x1eb6 # 0x3960
|
||||
OP_RandomReq=0x5d57
|
||||
OP_Death=0x2c22
|
||||
OP_GMTraining=0x7e86
|
||||
OP_GMEndTraining=0x0fcc
|
||||
OP_GMTrainSkill=0x4478
|
||||
OP_Animation=0x26b3
|
||||
OP_Begging=0x1185
|
||||
OP_Consent=0x3292
|
||||
OP_ConsentDeny=0x722b
|
||||
OP_AutoFire=0x03eb
|
||||
OP_PetCommands=0x4e66
|
||||
OP_DeleteSpell=0x7dc1
|
||||
OP_Surname=0x3388
|
||||
OP_ClearSurname=0x31d9
|
||||
OP_FaceChange=0x2729
|
||||
OP_SenseHeading=0x3b65
|
||||
OP_Action=0x31b6
|
||||
OP_ConsiderCorpse=0x1837
|
||||
OP_HideCorpse=0x177c
|
||||
OP_CorpseDrag=0x4bc7
|
||||
OP_CorpseDrop=0x4857
|
||||
OP_Bug=0x7866
|
||||
OP_Feedback=0x240f
|
||||
OP_Report=0x15bb
|
||||
OP_Damage=0x4598
|
||||
OP_ChannelMessage=0x7aba
|
||||
OP_Assist=0x454e
|
||||
OP_AssistGroup=0x8a9a
|
||||
OP_MoveCoin=0x7944
|
||||
OP_ZonePlayerToBind=0x1698
|
||||
OP_KeyRing=0x07da
|
||||
OP_WhoAllRequest=0x037d
|
||||
OP_WhoAllResponse=0x72e8
|
||||
OP_FriendsWho=0x4640
|
||||
OP_ConfirmDelete=0x594e
|
||||
OP_Logout=0x4739
|
||||
OP_Rewind=0x21b8
|
||||
OP_TargetCommand=0x717e
|
||||
OP_Hide=0x6d0d
|
||||
OP_Jump=0x7c8d
|
||||
OP_Camp=0x6958
|
||||
OP_Emote=0x50d6
|
||||
OP_SetRunMode=0x20fd
|
||||
OP_BankerChange=0x1d10
|
||||
OP_TargetMouse=0x0a2d
|
||||
OP_MobHealth=0x05c3
|
||||
OP_InitialMobHealth=0x0000 # Unused?
|
||||
OP_TargetHoTT=0x43ec
|
||||
OP_XTargetResponse=0x18c5
|
||||
OP_XTargetRequest=0x47bc
|
||||
OP_XTargetAutoAddHaters=0x48f8
|
||||
OP_TargetBuffs=0x0a99
|
||||
OP_BuffCreate=0x1cc2
|
||||
OP_BuffRemoveRequest=0x1338
|
||||
OP_DeleteSpawn=0x781f
|
||||
OP_AutoAttack=0x1740
|
||||
OP_AutoAttack2=0x78de
|
||||
OP_Consume=0x678e
|
||||
OP_MoveItem=0x76c9
|
||||
OP_DeleteItem=0x1362
|
||||
OP_DeleteCharge=0x1721
|
||||
OP_ItemPacket=0x82a7
|
||||
OP_ItemLinkResponse=0x636e
|
||||
OP_ItemLinkClick=0x234b
|
||||
OP_ItemPreview=0x504d
|
||||
OP_NewSpawn=0x3aa6
|
||||
OP_Track=0x01d5
|
||||
OP_TrackTarget=0x1bb5
|
||||
OP_TrackUnknown=0x5c41
|
||||
OP_ClickDoor=0x07be
|
||||
OP_MoveDoor=0x45fe
|
||||
OP_RemoveAllDoors=0x60cd
|
||||
OP_EnvDamage=0x0518
|
||||
OP_BoardBoat=0x3097
|
||||
OP_Forage=0x0ec5
|
||||
OP_LeaveBoat=0x1180
|
||||
OP_ControlBoat=0x6e81
|
||||
OP_SafeFallSuccess=0x4cb2
|
||||
OP_RezzComplete=0x2cb3
|
||||
OP_RezzRequest=0x375e
|
||||
OP_RezzAnswer=0x71c2
|
||||
OP_Shielding=0x75a5
|
||||
OP_RequestDuel=0x17ab
|
||||
OP_MobRename=0x6ebb
|
||||
OP_AugmentItem=0x3b4b # Was 0x37cb
|
||||
OP_WeaponEquip1=0x7480
|
||||
OP_WeaponEquip2=0x6f55 # Was 0x6022
|
||||
OP_WeaponUnequip2=0x1d1e # Was 0x0110
|
||||
OP_ApplyPoison=0x3a21
|
||||
OP_Save=0x296a
|
||||
OP_TestBuff=0x3296 # Was 0x3772
|
||||
OP_CustomTitles=0x26eb
|
||||
OP_Split=0x1ee0
|
||||
OP_YellForHelp=0x4c55
|
||||
OP_LoadSpellSet=0x0994
|
||||
OP_Bandolier=0x6d0e
|
||||
OP_PotionBelt=0x0e8e # Was 0x4d3b
|
||||
OP_DuelResponse=0x6f44
|
||||
OP_DuelResponse2=0x4868
|
||||
OP_SaveOnZoneReq=0x317d
|
||||
OP_ReadBook=0x5671
|
||||
OP_Dye=0x0b0d
|
||||
OP_InterruptCast=0x6adf
|
||||
OP_AAAction=0x7d94
|
||||
OP_LeadershipExpToggle=0x7a6b
|
||||
OP_LeadershipExpUpdate=0x1499
|
||||
OP_PurchaseLeadershipAA=0x15aa
|
||||
OP_UpdateLeadershipAA=0x0bcd
|
||||
OP_MarkNPC=0x08d3
|
||||
OP_ClearNPCMarks=0x7bb8
|
||||
OP_DelegateAbility=0x2bb5
|
||||
OP_SetGroupTarget=0x49f2
|
||||
OP_Charm=0x7bea
|
||||
OP_Stun=0x7f7e
|
||||
OP_SendFindableNPCs=0x5de1
|
||||
OP_FindPersonRequest=0x4150
|
||||
OP_FindPersonReply=0x65f0
|
||||
OP_Sound=0x797b
|
||||
OP_PetBuffWindow=0x12cd
|
||||
OP_LevelAppearance=0x34b9
|
||||
OP_Translocate=0x7121
|
||||
OP_Sacrifice=0x609b
|
||||
OP_PopupResponse=0x3c2d
|
||||
OP_OnLevelMessage=0x0648
|
||||
OP_AugmentInfo=0x0000
|
||||
OP_Petition=0x4aad
|
||||
OP_SomeItemPacketMaybe=0x1334
|
||||
OP_PVPStats=0x51fd # Unsure
|
||||
OP_PVPLeaderBoardRequest=0x38cc
|
||||
OP_PVPLeaderBoardReply=0x2ac0
|
||||
OP_PVPLeaderBoardDetailsRequest=0x4efd
|
||||
OP_PVPLeaderBoardDetailsReply=0x4497
|
||||
OP_RestState=0x7496
|
||||
OP_RespawnWindow=0x2e76
|
||||
OP_LDoNButton=0x1589
|
||||
OP_SetStartCity=0x17d5 # Was 0x2d1b
|
||||
OP_VoiceMacroIn=0x31f8
|
||||
OP_VoiceMacroOut=0x7f45
|
||||
OP_ItemViewUnknown=0x1aca
|
||||
OP_VetRewardsAvaliable=0x786e
|
||||
OP_VetClaimRequest=0x380d
|
||||
OP_VetClaimReply=0x5899
|
||||
OP_DisciplineUpdate=0x47a9 # Was 0x2f05
|
||||
OP_DisciplineTimer=0x6394 # Was 0x5e3f
|
||||
OP_BecomeCorpse=0x0000 # Unused?
|
||||
OP_Action2=0x0000 # Unused?
|
||||
OP_MobUpdate=0x142c
|
||||
OP_NPCMoveUpdate=0x4788
|
||||
OP_CameraEffect=0x3056
|
||||
OP_SpellEffect=0x4d15
|
||||
OP_RemoveNimbusEffect=0x1455
|
||||
OP_AltCurrency=0x2044
|
||||
OP_AltCurrencyMerchantRequest=0x0fc1
|
||||
OP_AltCurrencyMerchantReply=0x57ee
|
||||
OP_AltCurrencyPurchase=0x13bf
|
||||
OP_AltCurrencySell=0x41c3
|
||||
OP_AltCurrencySellSelection=0x0a3a
|
||||
OP_AltCurrencyReclaim=0x4097
|
||||
OP_CrystalCountUpdate=0x5307 # Was 0x3f60
|
||||
OP_CrystalCreate=0x6668 # Was 0x5a82
|
||||
OP_CrystalReclaim=0x00de # Was 0x7616
|
||||
OP_Untargetable=0x3210
|
||||
OP_IncreaseStats=0x5148
|
||||
OP_Weblink=0x5e65
|
||||
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
|
||||
OP_OpenContainer=0x0000
|
||||
|
||||
OP_DzQuit=0x7514
|
||||
OP_DzListTimers=0x572d
|
||||
OP_DzAddPlayer=0x5aab
|
||||
OP_DzRemovePlayer=0x4e78
|
||||
OP_DzSwapPlayer=0x14a4
|
||||
OP_DzMakeLeader=0x15d7
|
||||
OP_DzPlayerList=0x2dcd
|
||||
OP_DzJoinExpeditionConfirm=0x0f30
|
||||
OP_DzJoinExpeditionReply=0x3b67
|
||||
OP_DzExpeditionInfo=0x24be
|
||||
OP_DzExpeditionList=0x1ce9
|
||||
OP_DzMemberStatus=0x1bfc
|
||||
OP_DzLeaderStatus=0x04bf
|
||||
OP_DzExpeditionEndsWarning=0x5dea
|
||||
OP_DzMemberList=0x2ef6
|
||||
OP_DzCompass=0x331d # Was 0x4f09
|
||||
OP_DzChooseZone=0x0000 # Maybe 0x29d6
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
OP_ManaUpdate=0x089f
|
||||
OP_EnduranceUpdate=0x3a7c
|
||||
OP_MobManaUpdate=0x1013
|
||||
OP_MobEnduranceUpdate=0x68a5
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataUpdateRequest=0x1919
|
||||
OP_MercenaryDataUpdate=0x27a5
|
||||
OP_MercenaryDataRequest=0x6278
|
||||
OP_MercenaryDataResponse=0x5c06
|
||||
OP_MercenaryHire=0x18f9
|
||||
OP_MercenaryDismiss=0x9d9a
|
||||
OP_MercenaryTimerRequest=0x39a1
|
||||
OP_MercenaryTimer=0x6f9e
|
||||
OP_MercenaryUnknown1=0x6e0e
|
||||
OP_MercenaryCommand=0x564f
|
||||
OP_MercenarySuspendRequest=0x1d98
|
||||
OP_MercenarySuspendResponse=0x205c
|
||||
OP_MercenaryUnsuspendResponse=0x4ab4
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x760c
|
||||
OP_EndLootRequest=0x0c45
|
||||
OP_LootItem=0x29e8
|
||||
OP_LootComplete=0x2dc2
|
||||
|
||||
# bazaar trader stuff:
|
||||
OP_BazaarSearch=0x37a5
|
||||
OP_TraderDelItem=0x0000
|
||||
OP_BecomeTrader=0x7d0b
|
||||
OP_TraderShop=0x5137
|
||||
OP_Trader=0x7e2b
|
||||
OP_TraderBuy=0x0000
|
||||
OP_Barter=0x0e48
|
||||
OP_ShopItem=0x0000
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_Bazaar=0x0000
|
||||
OP_TraderItemUpdate=0x0000
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x743e
|
||||
OP_TradeAcceptClick=0x262a
|
||||
OP_TradeRequestAck=0x02b0
|
||||
OP_TradeCoins=0x2eef
|
||||
OP_FinishTrade=0x22b6
|
||||
OP_CancelTrade=0x4cd1
|
||||
OP_TradeMoneyUpdate=0x6d8c
|
||||
OP_MoneyUpdate=0x4ae9
|
||||
OP_TradeBusy=0x7dcf
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x16fb
|
||||
OP_FinishWindow2=0x6c2b
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x2e3a
|
||||
OP_ItemVerifyReply=0x3b26
|
||||
|
||||
# merchant stuff
|
||||
OP_ShopPlayerSell=0x51fb
|
||||
OP_ShopRequest=0x49f3
|
||||
OP_ShopEnd=0x36ac
|
||||
OP_ShopEndConfirm=0x6b28
|
||||
OP_ShopPlayerBuy=0x639e
|
||||
OP_ShopDelItem=0x19fd
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x607d
|
||||
OP_ClickObjectAction=0x553d
|
||||
OP_ClearObject=0x0e78
|
||||
OP_RecipeDetails=0x59b7
|
||||
OP_RecipesFavorite=0x56b5
|
||||
OP_RecipesSearch=0x0000
|
||||
OP_RecipeReply=0x57c9
|
||||
OP_RecipeAutoCombine=0x7cc0
|
||||
OP_TradeSkillCombine=0x1f0f
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x31a7
|
||||
OP_OpenTributeMaster=0x0212 # Was 0x40f5
|
||||
OP_SelectTribute=0x7604
|
||||
OP_TributeItem=0x72bc
|
||||
OP_TributeMoney=0x7415 # Was 0x6fed
|
||||
OP_TributeToggle=0x3046
|
||||
OP_TributePointUpdate=0x7203
|
||||
OP_TributeNPC=0x0000
|
||||
OP_GuildTributeInfo=0x0000
|
||||
OP_OpenTributeReply=0x0000
|
||||
OP_GuildTributeStatus=0x0000
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x18f7
|
||||
OP_AdventureFinish=0x29ea
|
||||
OP_AdventureInfoRequest=0x26a5
|
||||
OP_AdventureInfo=0x51f0
|
||||
OP_AdventureRequest=0x3eae
|
||||
OP_AdventureDetails=0x44e5
|
||||
OP_AdventureData=0x22cf
|
||||
OP_AdventureUpdate=0x5a41
|
||||
OP_AdventureMerchantRequest=0x2c46 # Was 654d
|
||||
OP_AdventureMerchantResponse=0x8000 # Was 7949
|
||||
OP_AdventureMerchantPurchase=0x7ee6 # Was 155a
|
||||
OP_AdventureMerchantSell=0x4faa # Was 389c
|
||||
OP_AdventurePointsUpdate=0x30c0 # Was 7589
|
||||
OP_AdventureStatsRequest=0x730a
|
||||
OP_AdventureStatsReply=0x3f32
|
||||
OP_AdventureLeaderboardRequest=0x1f8a
|
||||
OP_AdventureLeaderboardReply=0x37f3
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x559d
|
||||
OP_GroupInvite=0x3877
|
||||
OP_GroupFollow=0x7842
|
||||
OP_GroupUpdate=0x35cc
|
||||
OP_GroupUpdateB=0x2aca
|
||||
OP_GroupCancelInvite=0x0000
|
||||
OP_GroupAcknowledge=0x7b5a
|
||||
OP_GroupDelete=0x7102
|
||||
OP_CancelInvite=0x1afc
|
||||
OP_GroupFollow2=0x269f
|
||||
OP_GroupInvite2=0x4b77
|
||||
OP_GroupDisbandYou=0x23eb
|
||||
OP_GroupDisbandOther=0x7862
|
||||
OP_GroupLeaderChange=0x07d8
|
||||
OP_GroupRoles=0x139a
|
||||
OP_GroupMakeLeader=0x7056
|
||||
OP_DoGroupLeadershipAbility=0x6637
|
||||
OP_GroupLeadershipAAUpdate=0x0400
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x6b5a
|
||||
OP_LFGGetMatchesRequest=0x3153
|
||||
OP_LFGGetMatchesResponse=0x1ed6
|
||||
OP_LFPGetMatchesRequest=0x5de8
|
||||
OP_LFPGetMatchesResponse=0x62bc
|
||||
OP_LFPCommand=0x403e
|
||||
OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x3ab1
|
||||
OP_RaidUpdate=0x20a4
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x01ed
|
||||
OP_CombatAbility=0x1f8e
|
||||
OP_SenseTraps=0x5ccf # Was 0x2ee0
|
||||
OP_PickPocket=0x7876
|
||||
OP_DisarmTraps=0x0000
|
||||
OP_Disarm=0x4422
|
||||
OP_Sneak=0x117d
|
||||
OP_Fishing=0x0cbd
|
||||
OP_InstillDoubt=0x0734
|
||||
OP_FeignDeath=0x2321
|
||||
OP_Mend=0x5651
|
||||
OP_Bind_Wound=0x4ab2
|
||||
OP_LDoNOpen=0x1dfc
|
||||
|
||||
# Task packets
|
||||
OP_TaskDescription=0x5c2a
|
||||
OP_TaskActivity=0x902b
|
||||
OP_CompletedTasks=0x2a6f
|
||||
OP_TaskActivityComplete=0x2459
|
||||
OP_AcceptNewTask=0x0b03
|
||||
OP_CancelTask=0x4c3f
|
||||
OP_TaskMemberList=0x2f78 # Was 0x1656
|
||||
OP_OpenNewTasksWindow=0xd63f # Was 0x11de
|
||||
OP_AvaliableTask=0x5f3e # Was 0x2377
|
||||
OP_TaskHistoryRequest=0x03fe
|
||||
OP_TaskHistoryReply=0x2b9f
|
||||
OP_DeclineAllTasks=0x0000
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x7c32
|
||||
OP_RequestTitles=0x1c5f
|
||||
OP_SendTitleList=0x0d6c
|
||||
OP_SetTitle=0x7660
|
||||
OP_SetTitleReply=0x5525
|
||||
|
||||
# mail opcodes
|
||||
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 ###########
|
||||
|
||||
# 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
@@ -0,0 +1,633 @@
|
||||
# OPCodes not used by EQExtractor2 are most likely not correct.
|
||||
#
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x4d5c #
|
||||
OP_ApproveWorld=0x655c #
|
||||
OP_LogServer=0x1497 #
|
||||
OP_SendCharInfo=0x7f9e #
|
||||
OP_ExpansionInfo=0x2c8f #
|
||||
OP_GuildsList=0x5b0b #
|
||||
OP_EnterWorld=0x710e #
|
||||
OP_PostEnterWorld=0x7930 #
|
||||
OP_World_Client_CRC1=0x7ce4 #
|
||||
OP_World_Client_CRC2=0x7705 #
|
||||
OP_SendSpellChecksum=0x0000 #
|
||||
OP_SendSkillCapsChecksum=0x0000 #
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x5ca5 #
|
||||
OP_CharacterCreateRequest=0x4eba #
|
||||
OP_CharacterCreate=0x3237 #
|
||||
OP_RandomNameGenerator=0x26aa #
|
||||
OP_ApproveName=0x3154 #
|
||||
|
||||
OP_MOTD=0x0b80 #
|
||||
OP_SetChatServer=0x2c38 #
|
||||
OP_SetChatServer2=0x441c #
|
||||
OP_ZoneServerInfo=0x16f5 #
|
||||
OP_WorldComplete=0x6c63 #
|
||||
OP_WorldUnknown001=0x4274 #
|
||||
OP_FloatListThing=0x1910 #
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x20bc #
|
||||
OP_WorldClientReady=0x0b89 # Testing VoA 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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 #
|
||||
OP_ZoneEntry=0x6087 #
|
||||
OP_ReqNewZone=0x0000 #
|
||||
OP_NewZone=0x51ae #
|
||||
OP_ZoneSpawns=0x5f5e #
|
||||
OP_PlayerProfile=0x537c #
|
||||
OP_TimeOfDay=0x6015 #
|
||||
OP_LevelUpdate=0x6e1c #
|
||||
OP_Stamina=0x7686 #
|
||||
OP_RequestClientZoneChange=0x224f #
|
||||
OP_ZoneChange=0x28c8 #
|
||||
|
||||
OP_LockoutTimerInfo=0x0000 #
|
||||
OP_ZoneServerReady=0x0000 #
|
||||
OP_ZoneInUnknown=0x0000 #
|
||||
OP_LogoutReply=0x0000 #
|
||||
OP_PreLogoutReply=0x0000 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x3f55 #
|
||||
OP_ChangeSize=0x0000 #
|
||||
OP_TributeUpdate=0x0000 #
|
||||
OP_TributeTimer=0x0000 # Testing VoA 0x1525
|
||||
OP_TaskDescription=0x2e4f #
|
||||
OP_TaskActivity=0x512b #
|
||||
OP_CompletedTasks=0x3141 #
|
||||
OP_Weather=0x3e50 #
|
||||
OP_SendAATable=0x6db5 # Testing VoA 0x6a7e
|
||||
OP_UpdateAA=0x5363 # Testing VoA 0x5363
|
||||
OP_RespondAA=0x7bf6 # Testing VoA 0x0643 or maybe 0x7bf6
|
||||
OP_ReqClientSpawn=0x2c27 #
|
||||
OP_SpawnDoor=0x3604 #
|
||||
OP_GroundSpawn=0x1436 #
|
||||
OP_SendZonepoints=0x13da #
|
||||
OP_SendAAStats=0x4e22 #
|
||||
OP_WorldObjectsSent=0x7b73 #
|
||||
OP_BlockedBuffs=0x1681 #
|
||||
OP_RemoveBlockedBuffs=0x6a86 #
|
||||
OP_ClearBlockedBuffs=0x7ae1 #
|
||||
OP_SendExpZonein=0x0f14 #
|
||||
OP_SendTributes=0x010d #
|
||||
OP_TributeInfo=0x047c #
|
||||
OP_SendGuildTributes=0x0000 #
|
||||
OP_AAExpUpdate=0x1318 #
|
||||
OP_ExpUpdate=0x221a # Testing VoA 0x0555
|
||||
OP_HPUpdate=0x2369 #
|
||||
OP_ManaChange=0x3887 #
|
||||
OP_TGB=0x3672 #
|
||||
OP_SpecialMesg=0x039d #
|
||||
OP_GuildMemberList=0x51bc #
|
||||
OP_GuildMOTD=0x0a1d # Testing VoA 0x0a1d
|
||||
OP_CharInventory=0x6cfe # Testing VoA 0x6cfe
|
||||
OP_WearChange=0x1a58 #
|
||||
OP_ClientUpdate=0x7062 #
|
||||
OP_ClientReady=0x1272 #
|
||||
OP_SetServerFilter=0x053a #
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x3415 #
|
||||
OP_GetGuildMOTDReply=0x709d #
|
||||
OP_GuildMemberUpdate=0x589f #
|
||||
OP_GuildInvite=0x5488 #
|
||||
OP_GuildRemove=0x47d3 #
|
||||
OP_GuildPeace=0x1d22 #
|
||||
OP_SetGuildMOTD=0x5f85 #
|
||||
OP_GuildList=0x0000 #
|
||||
OP_GuildWar=0x0598 #
|
||||
OP_GuildLeader=0x67c8 #
|
||||
OP_GuildDelete=0x230e #
|
||||
OP_GuildInviteAccept=0x2b5a #
|
||||
OP_GuildDemote=0x1899 #
|
||||
OP_GuildPublicNote=0x2dbd #
|
||||
OP_GuildManageBanker=0x0000 #
|
||||
OP_GuildBank=0x0000 #
|
||||
OP_SetGuildRank=0x4ffe #
|
||||
OP_GuildUpdateURLAndChannel=0x03d1 #
|
||||
OP_GuildMemberLevelUpdate=0x0000 #
|
||||
OP_ZoneGuildList=0x0000 #
|
||||
OP_GetGuildsList=0x0000 #
|
||||
OP_GuildStatus=0x6916 #
|
||||
OP_GuildCreate=0x0000 #
|
||||
# OP_GuildManageRemove=0x0000 #
|
||||
# OP_GuildManageAdd=0x0000 #
|
||||
# OP_GuildManageStatus=0x0000 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x6989 #
|
||||
OP_GMBecomeNPC=0x7093 #
|
||||
OP_GMZoneRequest=0x701f #
|
||||
OP_GMZoneRequest2=0x01 #
|
||||
OP_GMGoto=0x15a1 #
|
||||
OP_GMSearchCorpse=0x2bff #
|
||||
OP_GMHideMe=0x7e4d #
|
||||
OP_GMDelCorpse=0x072f #
|
||||
OP_GMApproval=0x481f #
|
||||
OP_GMToggle=0x2042 #
|
||||
OP_GMSummon=0x6e47 #
|
||||
OP_GMEmoteZone=0x307d #
|
||||
OP_GMEmoteWorld=0x0c2d #
|
||||
OP_GMFind=0x6e27 #
|
||||
OP_GMKick=0x5a56 #
|
||||
OP_GMKill=0x51fe #
|
||||
OP_GMNameChange=0x0000 #
|
||||
OP_GMLastName=0x1055 #
|
||||
|
||||
OP_InspectAnswer=0x0c54 #
|
||||
OP_BeginCast=0x0d5a #
|
||||
OP_BuffFadeMsg=0x1b8a #
|
||||
OP_ConsentResponse=0x35c6 #
|
||||
OP_MemorizeSpell=0x569e #
|
||||
OP_SwapSpell=0x28a7 #
|
||||
OP_CastSpell=0x8543 #
|
||||
OP_Consider=0x70c6 #
|
||||
OP_FormattedMessage=0x4675 #
|
||||
OP_SimpleMessage=0x0698 #
|
||||
OP_Buff=0x4658 #
|
||||
OP_Illusion=0x10b7 #
|
||||
OP_MoneyOnCorpse=0x4074 #
|
||||
OP_RandomReply=0x07fb #
|
||||
OP_DenyResponse=0x0370 #
|
||||
OP_SkillUpdate=0x7f01 #
|
||||
OP_GMTrainSkillConfirm=0x0000 #
|
||||
OP_RandomReq=0x303e #
|
||||
OP_Death=0x6685 #
|
||||
OP_Bind_Wound=0x7b64 #
|
||||
OP_GMTraining=0x5960 #
|
||||
OP_GMEndTraining=0x4a61 #
|
||||
OP_GMTrainSkill=0x4885 #
|
||||
OP_Animation=0x0b93 #
|
||||
OP_Begging=0x0ca5 #
|
||||
OP_Consent=0x6bb9 #
|
||||
OP_ConsentDeny=0x6b7f #
|
||||
OP_AutoFire=0x23fc #
|
||||
OP_PetCommands=0x7312 #
|
||||
OP_DeleteSpell=0x0142 #
|
||||
OP_Surname=0x777c #
|
||||
OP_ClearSurname=0x0000 #
|
||||
OP_FaceChange=0x0507 #
|
||||
OP_SenseHeading=0x1dad #
|
||||
OP_Action=0x1b85 #
|
||||
OP_ConsiderCorpse=0x0e94 #
|
||||
OP_HideCorpse=0x0000 #
|
||||
OP_CorpseDrag=0x0000 #
|
||||
OP_CorpseDrop=0x0000 #
|
||||
OP_Bug=0x3365 #
|
||||
OP_Feedback=0x52b5 #
|
||||
OP_Report=0x211a #
|
||||
OP_Damage=0x45d6 #
|
||||
OP_ChannelMessage=0x2e79 #
|
||||
OP_Assist=0x5658 #
|
||||
OP_AssistGroup=0x43bc #
|
||||
OP_MoveCoin=0x1418 #
|
||||
OP_ZonePlayerToBind=0x2480 #
|
||||
OP_KeyRing=0x3b85 #
|
||||
OP_WhoAllRequest=0x177a #
|
||||
OP_WhoAllResponse=0x15de #
|
||||
OP_FriendsWho=0x73d6 #
|
||||
OP_ConfirmDelete=0x604d #
|
||||
OP_Logout=0x6275 #
|
||||
OP_Rewind=0x09e3 #
|
||||
OP_TargetCommand=0x3088 #
|
||||
OP_InspectRequest=0x0000 #
|
||||
OP_Hide=0x2913 #
|
||||
OP_Jump=0x243b #
|
||||
OP_Camp=0x3cd6 #
|
||||
OP_Emote=0x0000 #
|
||||
OP_SetRunMode=0x59c3 #
|
||||
OP_BankerChange=0x0000 #
|
||||
OP_TargetMouse=0x3edc #
|
||||
OP_MobHealth=0x5cb0 #
|
||||
OP_InitialMobHealth=0x0000 #
|
||||
OP_TargetHoTT=0x460e #
|
||||
OP_TargetBuffs=0x7c24 #
|
||||
OP_BuffCreate=0x0c98 #
|
||||
OP_BuffRemoveRequest=0x3567
|
||||
OP_DeleteSpawn=0x3164 #
|
||||
OP_AutoAttack=0x2257 #
|
||||
OP_AutoAttack2=0x0000 #
|
||||
OP_Consume=0x2ee2 #
|
||||
OP_MoveItem=0x2963 #
|
||||
OP_DeleteItem=0x7547 #
|
||||
OP_DeleteCharge=0x6a90 #
|
||||
OP_ItemPacket=0x38b0 #
|
||||
OP_ItemLinkResponse=0x6948 #
|
||||
OP_ItemLinkClick=0x3c66 #
|
||||
OP_NewSpawn=0x016c #
|
||||
OP_Track=0x2444 #
|
||||
OP_TrackTarget=0x538f #
|
||||
OP_TrackUnknown=0x10fa #
|
||||
OP_ClickDoor=0x48f9 #
|
||||
OP_MoveDoor=0x231f #
|
||||
OP_RemoveAllDoors=0x24a3 #
|
||||
OP_EnvDamage=0x2730 #
|
||||
OP_BoardBoat=0x50c2 #
|
||||
OP_Forage=0x3c02 #
|
||||
OP_LeaveBoat=0x569a #
|
||||
OP_ControlBoat=0x2641 #
|
||||
OP_SafeFallSuccess=0x1dc6 #
|
||||
OP_RezzComplete=0x7108 #
|
||||
OP_RezzRequest=0x66c5 #
|
||||
OP_RezzAnswer=0x71eb #
|
||||
OP_Shielding=0x7598 #
|
||||
OP_RequestDuel=0x0e71 #
|
||||
OP_MobRename=0x6884 #
|
||||
OP_AugmentItem=0x4cc6 #
|
||||
OP_WeaponEquip1=0x11bc #
|
||||
OP_WeaponEquip2=0x2121 #
|
||||
OP_WeaponUnequip2=0x7b87 #
|
||||
OP_ApplyPoison=0x3582 #
|
||||
OP_Save=0x47e7 #
|
||||
OP_TestBuff=0x712b #
|
||||
OP_CustomTitles=0x6ade #
|
||||
OP_Split=0x3a18 #
|
||||
OP_YellForHelp=0x1f87 #
|
||||
OP_LoadSpellSet=0x440f #
|
||||
OP_Bandolier=0x3ad1 #
|
||||
OP_PotionBelt=0x7b7f #
|
||||
OP_DuelResponse=0x1df9 #
|
||||
OP_DuelResponse2=0x36f8 #
|
||||
OP_SaveOnZoneReq=0x5408 #
|
||||
OP_ReadBook=0x41b5 #
|
||||
OP_Dye=0x32c6 #
|
||||
OP_InterruptCast=0x7706 #
|
||||
OP_AAAction=0x55dd #
|
||||
OP_LeadershipExpToggle=0x69d0 #
|
||||
OP_LeadershipExpUpdate=0x3703 #
|
||||
OP_PurchaseLeadershipAA=0x6e58 #
|
||||
OP_UpdateLeadershipAA=0x0297 #
|
||||
OP_MarkNPC=0x6b9e #
|
||||
OP_ClearNPCMarks=0x074f #
|
||||
OP_DoGroupLeadershipAbility=0x0000 #
|
||||
OP_GroupLeadershipAAUpdate=0x0000 #
|
||||
OP_DelegateAbility=0x105b #
|
||||
OP_SetGroupTarget=0x42c7 #
|
||||
OP_Charm=0x17f7 #
|
||||
OP_Stun=0x41a6 #
|
||||
OP_SendFindableNPCs=0x50c1 #
|
||||
OP_FindPersonRequest=0x19a8 #
|
||||
OP_FindPersonReply=0x7e45 #
|
||||
OP_Sound=0x2d1d #
|
||||
OP_PetBuffWindow=0x4895 #
|
||||
OP_LevelAppearance=0x78b9 #
|
||||
OP_Translocate=0x42ef #
|
||||
OP_Sacrifice=0x2dc6 #
|
||||
OP_PopupResponse=0x0000 #
|
||||
OP_OnLevelMessage=0x0000 #
|
||||
OP_AugmentInfo=0x0000 #
|
||||
OP_Petition=0x31d1 #
|
||||
OP_SomeItemPacketMaybe=0x1513 #
|
||||
OP_PVPStats=0x0000 #
|
||||
OP_PVPLeaderBoardRequest=0x0000 #
|
||||
OP_PVPLeaderBoardReply=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 #
|
||||
OP_RestState=0x0000 #
|
||||
OP_RespawnWindow=0x435b #
|
||||
OP_DisciplineTimer=0x74ca #
|
||||
OP_LDoNButton=0x597d #
|
||||
OP_SetStartCity=0x179d #
|
||||
OP_VoiceMacroIn=0x0fce #
|
||||
OP_VoiceMacroOut=0x1c36 #
|
||||
OP_ItemViewUnknown=0x0000 #
|
||||
OP_VetRewardsAvaliable=0x3637 #
|
||||
OP_VetClaimRequest=0x032b #
|
||||
OP_VetClaimReply=0x7b6e #
|
||||
OP_CrystalCountUpdate=0x0000 #
|
||||
OP_DisciplineUpdate=0x0d8d #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 #
|
||||
OP_MobUpdate=0x5a05 #
|
||||
OP_NPCMoveUpdate=0x5a4c #
|
||||
OP_CameraEffect=0x6812 #
|
||||
OP_SpellEffect=0x0989 #
|
||||
OP_RemoveNimbusEffect=0x0000 #
|
||||
OP_AltCurrency=0x2536
|
||||
OP_AltCurrencyMerchantRequest=0x5aac
|
||||
OP_AltCurrencyMerchantReply=0x17c7
|
||||
OP_AltCurrencyPurchase=0x6efe
|
||||
OP_AltCurrencySell=0x32d9
|
||||
OP_AltCurrencySellSelection=0x7eac
|
||||
OP_AltCurrencyReclaim=0x1560
|
||||
OP_CrystalReclaim=0x0000
|
||||
OP_CrystalCreate=0x0000
|
||||
OP_Untargetable=0x101e
|
||||
OP_IncreaseStats=0x3fdc
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 #
|
||||
OP_ManaUpdate=0x7c94 #
|
||||
OP_EnduranceUpdate=0x5851 #
|
||||
OP_MobManaUpdate=0x4d27 #
|
||||
OP_MobEnduranceUpdate=0x190c #
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x1d85 #
|
||||
OP_EndLootRequest=0x0bc #
|
||||
OP_LootItem=0x5bd9 #
|
||||
OP_LootComplete=0x4ca1 #
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x2881 #
|
||||
OP_TraderDelItem=0x0000 #
|
||||
OP_BecomeTrader=0x358a #
|
||||
OP_TraderShop=0x49f4 #
|
||||
OP_Trader=0x058c #
|
||||
OP_TraderBuy=0x783c #
|
||||
OP_Barter=0x766f #
|
||||
OP_ShopItem=0x0000 #
|
||||
OP_BazaarInspect=0x0000 #
|
||||
OP_Bazaar=0x0000 #
|
||||
OP_TraderItemUpdate=0x0000 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0c24 #
|
||||
OP_TradeAcceptClick=0x064a #
|
||||
OP_TradeRequestAck=0x606a #
|
||||
OP_TradeCoins=0x0149 #
|
||||
OP_FinishTrade=0x3ff6 #
|
||||
OP_CancelTrade=0x527e #
|
||||
OP_TradeMoneyUpdate=0x1ebb #
|
||||
OP_MoneyUpdate=0x528f #
|
||||
OP_TradeBusy=0x2c03 #
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x3c27 #
|
||||
OP_FinishWindow2=0x2c6d #
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 #
|
||||
OP_ItemVerifyReply=0x0000 #
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0b27 #
|
||||
OP_ShopRequest=0x33e5 #
|
||||
OP_ShopEnd=0x2244 #
|
||||
OP_ShopEndConfirm=0x4762 #
|
||||
OP_ShopPlayerBuy=0x436a #
|
||||
OP_ShopDelItem=0x537c #
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x5f0d #
|
||||
OP_ClickObjectAction=0x29df #
|
||||
OP_ClearObject=0x38d1 #
|
||||
OP_RecipeDetails=0x068 #
|
||||
OP_RecipesFavorite=0x0000 #
|
||||
OP_RecipesSearch=0x0239 #
|
||||
OP_RecipeReply=0x1ecf #
|
||||
OP_RecipeAutoCombine=0x66bf #
|
||||
OP_TradeSkillCombine=0x4212 #
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 #
|
||||
OP_OpenTributeMaster=0x3ba3 #
|
||||
OP_SelectTribute=0x314f #
|
||||
OP_TributeItem=0x0000 #
|
||||
OP_TributeMoney=0x1772 #
|
||||
OP_TributeToggle=0x0000 #
|
||||
OP_TributePointUpdate=0x0000 #
|
||||
OP_TributeNPC=0x0000 #
|
||||
OP_GuildTributeInfo=0x0000 #
|
||||
OP_OpenTributeReply=0x0000 #
|
||||
# OP_GuildTributeStatus=0x0000 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x771f #
|
||||
OP_AdventureFinish=0x3168 #
|
||||
OP_AdventureInfoRequest=0x05d8 #
|
||||
OP_AdventureInfo=0x164b #
|
||||
OP_AdventureRequest=0x3a75 #
|
||||
OP_AdventureDetails=0x05 #
|
||||
OP_AdventureData=0x21df #
|
||||
OP_AdventureUpdate=0x6129 #
|
||||
OP_AdventureMerchantRequest=0x0000 #
|
||||
OP_AdventureMerchantResponse=0x0000 #
|
||||
OP_AdventureMerchantPurchase=0x0000 #
|
||||
OP_AdventureMerchantSell=0x0000 #
|
||||
OP_AdventurePointsUpdate=0x7d05 #
|
||||
OP_AdventureStatsRequest=0x0000 #
|
||||
OP_AdventureStatsReply=0x15a7 #
|
||||
OP_AdventureLeaderboardRequest=0x0000 #
|
||||
OP_AdventureLeaderboardReply=0x6bfb #
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x4200 #
|
||||
OP_GroupInvite=0x3288 #
|
||||
OP_GroupFollow=0x1190 #
|
||||
OP_GroupUpdate=0x0000 #
|
||||
OP_GroupUpdateB=0x0000 #
|
||||
OP_GroupCancelInvite=0x0000 #
|
||||
OP_GroupAcknowledge=0x0000 #
|
||||
OP_GroupDelete=0x0000 #
|
||||
OP_CancelInvite=0x132f #
|
||||
OP_GroupFollow2=0x3519 #
|
||||
OP_GroupInvite2=0x083b #
|
||||
OP_GroupDisbandYou=0x0000 #
|
||||
OP_GroupDisbandOther=0x0000 #
|
||||
OP_GroupLeaderChange=0x0000 #
|
||||
OP_GroupRoles=0x0000 #
|
||||
OP_GroupMakeLeader=0x0000
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x457d #
|
||||
OP_LFGGetMatchesRequest=0x49e7 #
|
||||
OP_LFGGetMatchesResponse=0x4817 #
|
||||
OP_LFPGetMatchesRequest=0x5fc7 #
|
||||
OP_LFPGetMatchesResponse=0x3d0c #
|
||||
OP_LFPCommand=0x20c6 #
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x550f #
|
||||
OP_RaidUpdate=0x0000 # Testing VoA 0x0c08
|
||||
OP_RaidJoin=0x0000 #
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x732c #
|
||||
OP_CombatAbility=0x16a5 #
|
||||
OP_SenseTraps=0x416b #
|
||||
OP_PickPocket=0x13bd #
|
||||
OP_DisarmTraps=0x0000 #
|
||||
OP_Disarm=0x6def #
|
||||
OP_Sneak=0x6eff #
|
||||
OP_Fishing=0x0555 #
|
||||
OP_InstillDoubt=0x4acf #
|
||||
OP_FeignDeath=0x6145 #
|
||||
OP_Mend=0x7fbc #
|
||||
OP_LDoNOpen=0x7c87 #
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 #
|
||||
OP_TaskMemberList=0x0000 #
|
||||
OP_OpenNewTasksWindow=0x0000 #
|
||||
OP_AvaliableTask=0x0000 #
|
||||
OP_AcceptNewTask=0x0000 #
|
||||
OP_TaskHistoryRequest=0x6d1f #
|
||||
OP_TaskHistoryReply=0x189b #
|
||||
OP_CancelTask=0x47ea #
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x6d95 #
|
||||
OP_RequestTitles=0x7e3d #
|
||||
OP_SendTitleList=0x3aef #
|
||||
OP_SetTitle=0x725b #
|
||||
OP_SetTitleReply=0x38e8 #
|
||||
|
||||
# mail opcodes
|
||||
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 # # # # # # # # # # #
|
||||
|
||||
# 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
@@ -0,0 +1,633 @@
|
||||
# OPCodes not used by EQExtractor2 are most likely not correct.
|
||||
#
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x4d5c #
|
||||
OP_ApproveWorld=0x655c #
|
||||
OP_LogServer=0x1497 #
|
||||
OP_SendCharInfo=0x7f9e #
|
||||
OP_ExpansionInfo=0x2c8f #
|
||||
OP_GuildsList=0x5b0b #
|
||||
OP_EnterWorld=0x710e #
|
||||
OP_PostEnterWorld=0x7930 #
|
||||
OP_World_Client_CRC1=0x7ce4 #
|
||||
OP_World_Client_CRC2=0x7705 #
|
||||
OP_SendSpellChecksum=0x0000 #
|
||||
OP_SendSkillCapsChecksum=0x0000 #
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x5ca5 #
|
||||
OP_CharacterCreateRequest=0x4eba #
|
||||
OP_CharacterCreate=0x3237 #
|
||||
OP_RandomNameGenerator=0x26aa #
|
||||
OP_ApproveName=0x3154 #
|
||||
|
||||
OP_MOTD=0x0b80 #
|
||||
OP_SetChatServer=0x2c38 #
|
||||
OP_SetChatServer2=0x441c #
|
||||
OP_ZoneServerInfo=0x16f5 #
|
||||
OP_WorldComplete=0x6c63 #
|
||||
OP_WorldUnknown001=0x4274 #
|
||||
OP_FloatListThing=0x1910 #
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x20bc #
|
||||
OP_WorldClientReady=0x0b89 # Testing VoA 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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 #
|
||||
OP_ZoneEntry=0x4892 #
|
||||
OP_ReqNewZone=0x0000 #
|
||||
OP_NewZone=0x4118 #
|
||||
OP_ZoneSpawns=0x5f5e #
|
||||
OP_PlayerProfile=0x6afd #
|
||||
OP_TimeOfDay=0x6015 #
|
||||
OP_LevelUpdate=0x6e1c #
|
||||
OP_Stamina=0x7686 #
|
||||
OP_RequestClientZoneChange=0x224f #
|
||||
OP_ZoneChange=0x28c8 #
|
||||
|
||||
OP_LockoutTimerInfo=0x0000 #
|
||||
OP_ZoneServerReady=0x0000 #
|
||||
OP_ZoneInUnknown=0x0000 #
|
||||
OP_LogoutReply=0x0000 #
|
||||
OP_PreLogoutReply=0x0000 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x3f55 #
|
||||
OP_ChangeSize=0x0000 #
|
||||
OP_TributeUpdate=0x0000 #
|
||||
OP_TributeTimer=0x0000 # Testing VoA 0x1525
|
||||
OP_TaskDescription=0x2e4f #
|
||||
OP_TaskActivity=0x512b #
|
||||
OP_CompletedTasks=0x3141 #
|
||||
OP_Weather=0x3e50 #
|
||||
OP_SendAATable=0x0d98 # Testing VoA 0x6a7e
|
||||
OP_UpdateAA=0x5363 # Testing VoA 0x5363
|
||||
OP_RespondAA=0x7bf6 # Testing VoA 0x0643 or maybe 0x7bf6
|
||||
OP_ReqClientSpawn=0x2c27 #
|
||||
OP_SpawnDoor=0x5a55 #
|
||||
OP_GroundSpawn=0x5c85 #
|
||||
OP_SendZonepoints=0x2683 #
|
||||
OP_SendAAStats=0x4e22 #
|
||||
OP_WorldObjectsSent=0x7b73 #
|
||||
OP_BlockedBuffs=0x1681 #
|
||||
OP_RemoveBlockedBuffs=0x6a86 #
|
||||
OP_ClearBlockedBuffs=0x7ae1 #
|
||||
OP_SendExpZonein=0x0f14 #
|
||||
OP_SendTributes=0x010d #
|
||||
OP_TributeInfo=0x047c #
|
||||
OP_SendGuildTributes=0x0000 #
|
||||
OP_AAExpUpdate=0x1318 #
|
||||
OP_ExpUpdate=0x221a # Testing VoA 0x0555
|
||||
OP_HPUpdate=0x2369 #
|
||||
OP_ManaChange=0x3887 #
|
||||
OP_TGB=0x3672 #
|
||||
OP_SpecialMesg=0x039d #
|
||||
OP_GuildMemberList=0x51bc #
|
||||
OP_GuildMOTD=0x0a1d # Testing VoA 0x0a1d
|
||||
OP_CharInventory=0x6cfe # Testing VoA 0x6cfe
|
||||
OP_WearChange=0x1a58 #
|
||||
OP_ClientUpdate=0x7062 #
|
||||
OP_ClientReady=0x1272 #
|
||||
OP_SetServerFilter=0x053a #
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x3415 #
|
||||
OP_GetGuildMOTDReply=0x709d #
|
||||
OP_GuildMemberUpdate=0x589f #
|
||||
OP_GuildInvite=0x5488 #
|
||||
OP_GuildRemove=0x47d3 #
|
||||
OP_GuildPeace=0x1d22 #
|
||||
OP_SetGuildMOTD=0x5f85 #
|
||||
OP_GuildList=0x0000 #
|
||||
OP_GuildWar=0x0598 #
|
||||
OP_GuildLeader=0x67c8 #
|
||||
OP_GuildDelete=0x230e #
|
||||
OP_GuildInviteAccept=0x2b5a #
|
||||
OP_GuildDemote=0x1899 #
|
||||
OP_GuildPublicNote=0x2dbd #
|
||||
OP_GuildManageBanker=0x0000 #
|
||||
OP_GuildBank=0x0000 #
|
||||
OP_SetGuildRank=0x4ffe #
|
||||
OP_GuildUpdateURLAndChannel=0x03d1 #
|
||||
OP_GuildMemberLevelUpdate=0x0000 #
|
||||
OP_ZoneGuildList=0x0000 #
|
||||
OP_GetGuildsList=0x0000 #
|
||||
OP_GuildStatus=0x6916 #
|
||||
OP_GuildCreate=0x0000 #
|
||||
# OP_GuildManageRemove=0x0000 #
|
||||
# OP_GuildManageAdd=0x0000 #
|
||||
# OP_GuildManageStatus=0x0000 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x6989 #
|
||||
OP_GMBecomeNPC=0x7093 #
|
||||
OP_GMZoneRequest=0x701f #
|
||||
OP_GMZoneRequest2=0x01 #
|
||||
OP_GMGoto=0x15a1 #
|
||||
OP_GMSearchCorpse=0x2bff #
|
||||
OP_GMHideMe=0x7e4d #
|
||||
OP_GMDelCorpse=0x072f #
|
||||
OP_GMApproval=0x481f #
|
||||
OP_GMToggle=0x2042 #
|
||||
OP_GMSummon=0x6e47 #
|
||||
OP_GMEmoteZone=0x307d #
|
||||
OP_GMEmoteWorld=0x0c2d #
|
||||
OP_GMFind=0x6e27 #
|
||||
OP_GMKick=0x5a56 #
|
||||
OP_GMKill=0x51fe #
|
||||
OP_GMNameChange=0x0000 #
|
||||
OP_GMLastName=0x1055 #
|
||||
|
||||
OP_InspectAnswer=0x0c54 #
|
||||
OP_BeginCast=0x0d5a #
|
||||
OP_BuffFadeMsg=0x1b8a #
|
||||
OP_ConsentResponse=0x35c6 #
|
||||
OP_MemorizeSpell=0x569e #
|
||||
OP_SwapSpell=0x28a7 #
|
||||
OP_CastSpell=0x8543 #
|
||||
OP_Consider=0x70c6 #
|
||||
OP_FormattedMessage=0x4675 #
|
||||
OP_SimpleMessage=0x0698 #
|
||||
OP_Buff=0x4658 #
|
||||
OP_Illusion=0x10b7 #
|
||||
OP_MoneyOnCorpse=0x4074 #
|
||||
OP_RandomReply=0x07fb #
|
||||
OP_DenyResponse=0x0370 #
|
||||
OP_SkillUpdate=0x7f01 #
|
||||
OP_GMTrainSkillConfirm=0x0000 #
|
||||
OP_RandomReq=0x303e #
|
||||
OP_Death=0x6685 #
|
||||
OP_Bind_Wound=0x7b64 #
|
||||
OP_GMTraining=0x5960 #
|
||||
OP_GMEndTraining=0x4a61 #
|
||||
OP_GMTrainSkill=0x4885 #
|
||||
OP_Animation=0x0b93 #
|
||||
OP_Begging=0x0ca5 #
|
||||
OP_Consent=0x6bb9 #
|
||||
OP_ConsentDeny=0x6b7f #
|
||||
OP_AutoFire=0x23fc #
|
||||
OP_PetCommands=0x7312 #
|
||||
OP_DeleteSpell=0x0142 #
|
||||
OP_Surname=0x777c #
|
||||
OP_ClearSurname=0x0000 #
|
||||
OP_FaceChange=0x0507 #
|
||||
OP_SenseHeading=0x1dad #
|
||||
OP_Action=0x1b85 #
|
||||
OP_ConsiderCorpse=0x0e94 #
|
||||
OP_HideCorpse=0x0000 #
|
||||
OP_CorpseDrag=0x0000 #
|
||||
OP_CorpseDrop=0x0000 #
|
||||
OP_Bug=0x3365 #
|
||||
OP_Feedback=0x52b5 #
|
||||
OP_Report=0x211a #
|
||||
OP_Damage=0x45d6 #
|
||||
OP_ChannelMessage=0x2e79 #
|
||||
OP_Assist=0x5658 #
|
||||
OP_AssistGroup=0x43bc #
|
||||
OP_MoveCoin=0x1418 #
|
||||
OP_ZonePlayerToBind=0x2480 #
|
||||
OP_KeyRing=0x3b85 #
|
||||
OP_WhoAllRequest=0x177a #
|
||||
OP_WhoAllResponse=0x15de #
|
||||
OP_FriendsWho=0x73d6 #
|
||||
OP_ConfirmDelete=0x604d #
|
||||
OP_Logout=0x6275 #
|
||||
OP_Rewind=0x09e3 #
|
||||
OP_TargetCommand=0x3088 #
|
||||
OP_InspectRequest=0x0000 #
|
||||
OP_Hide=0x2913 #
|
||||
OP_Jump=0x243b #
|
||||
OP_Camp=0x3cd6 #
|
||||
OP_Emote=0x0000 #
|
||||
OP_SetRunMode=0x59c3 #
|
||||
OP_BankerChange=0x0000 #
|
||||
OP_TargetMouse=0x3edc #
|
||||
OP_MobHealth=0x5cb0 #
|
||||
OP_InitialMobHealth=0x0000 #
|
||||
OP_TargetHoTT=0x460e #
|
||||
OP_TargetBuffs=0x7c24 #
|
||||
OP_BuffCreate=0x0c98 #
|
||||
OP_BuffRemoveRequest=0x3567
|
||||
OP_DeleteSpawn=0x3164 #
|
||||
OP_AutoAttack=0x2257 #
|
||||
OP_AutoAttack2=0x0000 #
|
||||
OP_Consume=0x2ee2 #
|
||||
OP_MoveItem=0x2963 #
|
||||
OP_DeleteItem=0x7547 #
|
||||
OP_DeleteCharge=0x6a90 #
|
||||
OP_ItemPacket=0x399b #
|
||||
OP_ItemLinkResponse=0x6948 #
|
||||
OP_ItemLinkClick=0x3c66 #
|
||||
OP_NewSpawn=0x016c #
|
||||
OP_Track=0x2444 #
|
||||
OP_TrackTarget=0x538f #
|
||||
OP_TrackUnknown=0x10fa #
|
||||
OP_ClickDoor=0x48f9 #
|
||||
OP_MoveDoor=0x231f #
|
||||
OP_RemoveAllDoors=0x24a3 #
|
||||
OP_EnvDamage=0x2730 #
|
||||
OP_BoardBoat=0x50c2 #
|
||||
OP_Forage=0x3c02 #
|
||||
OP_LeaveBoat=0x569a #
|
||||
OP_ControlBoat=0x2641 #
|
||||
OP_SafeFallSuccess=0x1dc6 #
|
||||
OP_RezzComplete=0x7108 #
|
||||
OP_RezzRequest=0x66c5 #
|
||||
OP_RezzAnswer=0x71eb #
|
||||
OP_Shielding=0x7598 #
|
||||
OP_RequestDuel=0x0e71 #
|
||||
OP_MobRename=0x6884 #
|
||||
OP_AugmentItem=0x4cc6 #
|
||||
OP_WeaponEquip1=0x11bc #
|
||||
OP_WeaponEquip2=0x2121 #
|
||||
OP_WeaponUnequip2=0x7b87 #
|
||||
OP_ApplyPoison=0x3582 #
|
||||
OP_Save=0x47e7 #
|
||||
OP_TestBuff=0x712b #
|
||||
OP_CustomTitles=0x6ade #
|
||||
OP_Split=0x3a18 #
|
||||
OP_YellForHelp=0x1f87 #
|
||||
OP_LoadSpellSet=0x440f #
|
||||
OP_Bandolier=0x3ad1 #
|
||||
OP_PotionBelt=0x7b7f #
|
||||
OP_DuelResponse=0x1df9 #
|
||||
OP_DuelResponse2=0x36f8 #
|
||||
OP_SaveOnZoneReq=0x5408 #
|
||||
OP_ReadBook=0x41b5 #
|
||||
OP_Dye=0x32c6 #
|
||||
OP_InterruptCast=0x7706 #
|
||||
OP_AAAction=0x55dd #
|
||||
OP_LeadershipExpToggle=0x69d0 #
|
||||
OP_LeadershipExpUpdate=0x3703 #
|
||||
OP_PurchaseLeadershipAA=0x6e58 #
|
||||
OP_UpdateLeadershipAA=0x0297 #
|
||||
OP_MarkNPC=0x6b9e #
|
||||
OP_ClearNPCMarks=0x074f #
|
||||
OP_DoGroupLeadershipAbility=0x0000 #
|
||||
OP_GroupLeadershipAAUpdate=0x0000 #
|
||||
OP_DelegateAbility=0x105b #
|
||||
OP_SetGroupTarget=0x42c7 #
|
||||
OP_Charm=0x17f7 #
|
||||
OP_Stun=0x41a6 #
|
||||
OP_SendFindableNPCs=0x099e #
|
||||
OP_FindPersonRequest=0x19a8 #
|
||||
OP_FindPersonReply=0x7e45 #
|
||||
OP_Sound=0x2d1d #
|
||||
OP_PetBuffWindow=0x4895 #
|
||||
OP_LevelAppearance=0x78b9 #
|
||||
OP_Translocate=0x42ef #
|
||||
OP_Sacrifice=0x2dc6 #
|
||||
OP_PopupResponse=0x0000 #
|
||||
OP_OnLevelMessage=0x0000 #
|
||||
OP_AugmentInfo=0x0000 #
|
||||
OP_Petition=0x31d1 #
|
||||
OP_SomeItemPacketMaybe=0x1513 #
|
||||
OP_PVPStats=0x0000 #
|
||||
OP_PVPLeaderBoardRequest=0x0000 #
|
||||
OP_PVPLeaderBoardReply=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 #
|
||||
OP_RestState=0x0000 #
|
||||
OP_RespawnWindow=0x435b #
|
||||
OP_DisciplineTimer=0x74ca #
|
||||
OP_LDoNButton=0x597d #
|
||||
OP_SetStartCity=0x179d #
|
||||
OP_VoiceMacroIn=0x0fce #
|
||||
OP_VoiceMacroOut=0x1c36 #
|
||||
OP_ItemViewUnknown=0x0000 #
|
||||
OP_VetRewardsAvaliable=0x3637 #
|
||||
OP_VetClaimRequest=0x032b #
|
||||
OP_VetClaimReply=0x7b6e #
|
||||
OP_CrystalCountUpdate=0x0000 #
|
||||
OP_DisciplineUpdate=0x0d8d #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 #
|
||||
OP_MobUpdate=0x4656 #
|
||||
OP_NPCMoveUpdate=0x4f35 #
|
||||
OP_CameraEffect=0x6812 #
|
||||
OP_SpellEffect=0x0989 #
|
||||
OP_RemoveNimbusEffect=0x0000 #
|
||||
OP_AltCurrency=0x2536
|
||||
OP_AltCurrencyMerchantRequest=0x5aac
|
||||
OP_AltCurrencyMerchantReply=0x17c7
|
||||
OP_AltCurrencyPurchase=0x6efe
|
||||
OP_AltCurrencySell=0x32d9
|
||||
OP_AltCurrencySellSelection=0x7eac
|
||||
OP_AltCurrencyReclaim=0x1560
|
||||
OP_CrystalReclaim=0x0000
|
||||
OP_CrystalCreate=0x0000
|
||||
OP_Untargetable=0x101e
|
||||
OP_IncreaseStats=0x3fdc
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 #
|
||||
OP_ManaUpdate=0x7c94 #
|
||||
OP_EnduranceUpdate=0x5851 #
|
||||
OP_MobManaUpdate=0x4d27 #
|
||||
OP_MobEnduranceUpdate=0x190c #
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x1d85 #
|
||||
OP_EndLootRequest=0x0bc #
|
||||
OP_LootItem=0x5bd9 #
|
||||
OP_LootComplete=0x4ca1 #
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x2881 #
|
||||
OP_TraderDelItem=0x0000 #
|
||||
OP_BecomeTrader=0x358a #
|
||||
OP_TraderShop=0x49f4 #
|
||||
OP_Trader=0x058c #
|
||||
OP_TraderBuy=0x783c #
|
||||
OP_Barter=0x766f #
|
||||
OP_ShopItem=0x0000 #
|
||||
OP_BazaarInspect=0x0000 #
|
||||
OP_Bazaar=0x0000 #
|
||||
OP_TraderItemUpdate=0x0000 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0c24 #
|
||||
OP_TradeAcceptClick=0x064a #
|
||||
OP_TradeRequestAck=0x606a #
|
||||
OP_TradeCoins=0x0149 #
|
||||
OP_FinishTrade=0x3ff6 #
|
||||
OP_CancelTrade=0x527e #
|
||||
OP_TradeMoneyUpdate=0x1ebb #
|
||||
OP_MoneyUpdate=0x528f #
|
||||
OP_TradeBusy=0x2c03 #
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x3c27 #
|
||||
OP_FinishWindow2=0x2c6d #
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 #
|
||||
OP_ItemVerifyReply=0x0000 #
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0b27 #
|
||||
OP_ShopRequest=0x442a #
|
||||
OP_ShopEnd=0x078e #
|
||||
OP_ShopEndConfirm=0x4762 #
|
||||
OP_ShopPlayerBuy=0x436a #
|
||||
OP_ShopDelItem=0x537c #
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x5f0d #
|
||||
OP_ClickObjectAction=0x29df #
|
||||
OP_ClearObject=0x38d1 #
|
||||
OP_RecipeDetails=0x068 #
|
||||
OP_RecipesFavorite=0x0000 #
|
||||
OP_RecipesSearch=0x0239 #
|
||||
OP_RecipeReply=0x1ecf #
|
||||
OP_RecipeAutoCombine=0x66bf #
|
||||
OP_TradeSkillCombine=0x4212 #
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 #
|
||||
OP_OpenTributeMaster=0x3ba3 #
|
||||
OP_SelectTribute=0x314f #
|
||||
OP_TributeItem=0x0000 #
|
||||
OP_TributeMoney=0x1772 #
|
||||
OP_TributeToggle=0x0000 #
|
||||
OP_TributePointUpdate=0x0000 #
|
||||
OP_TributeNPC=0x0000 #
|
||||
OP_GuildTributeInfo=0x0000 #
|
||||
OP_OpenTributeReply=0x0000 #
|
||||
# OP_GuildTributeStatus=0x0000 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x771f #
|
||||
OP_AdventureFinish=0x3168 #
|
||||
OP_AdventureInfoRequest=0x05d8 #
|
||||
OP_AdventureInfo=0x164b #
|
||||
OP_AdventureRequest=0x3a75 #
|
||||
OP_AdventureDetails=0x05 #
|
||||
OP_AdventureData=0x21df #
|
||||
OP_AdventureUpdate=0x6129 #
|
||||
OP_AdventureMerchantRequest=0x0000 #
|
||||
OP_AdventureMerchantResponse=0x0000 #
|
||||
OP_AdventureMerchantPurchase=0x0000 #
|
||||
OP_AdventureMerchantSell=0x0000 #
|
||||
OP_AdventurePointsUpdate=0x7d05 #
|
||||
OP_AdventureStatsRequest=0x0000 #
|
||||
OP_AdventureStatsReply=0x15a7 #
|
||||
OP_AdventureLeaderboardRequest=0x0000 #
|
||||
OP_AdventureLeaderboardReply=0x6bfb #
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x4200 #
|
||||
OP_GroupInvite=0x3288 #
|
||||
OP_GroupFollow=0x1190 #
|
||||
OP_GroupUpdate=0x0000 #
|
||||
OP_GroupUpdateB=0x0000 #
|
||||
OP_GroupCancelInvite=0x0000 #
|
||||
OP_GroupAcknowledge=0x0000 #
|
||||
OP_GroupDelete=0x0000 #
|
||||
OP_CancelInvite=0x132f #
|
||||
OP_GroupFollow2=0x3519 #
|
||||
OP_GroupInvite2=0x083b #
|
||||
OP_GroupDisbandYou=0x0000 #
|
||||
OP_GroupDisbandOther=0x0000 #
|
||||
OP_GroupLeaderChange=0x0000 #
|
||||
OP_GroupRoles=0x0000 #
|
||||
OP_GroupMakeLeader=0x13da
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x457d #
|
||||
OP_LFGGetMatchesRequest=0x49e7 #
|
||||
OP_LFGGetMatchesResponse=0x4817 #
|
||||
OP_LFPGetMatchesRequest=0x5fc7 #
|
||||
OP_LFPGetMatchesResponse=0x3d0c #
|
||||
OP_LFPCommand=0x20c6 #
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x550f #
|
||||
OP_RaidUpdate=0x0000 # Testing VoA 0x0c08
|
||||
OP_RaidJoin=0x0000 #
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x732c #
|
||||
OP_CombatAbility=0x16a5 #
|
||||
OP_SenseTraps=0x416b #
|
||||
OP_PickPocket=0x13bd #
|
||||
OP_DisarmTraps=0x0000 #
|
||||
OP_Disarm=0x6def #
|
||||
OP_Sneak=0x6eff #
|
||||
OP_Fishing=0x0555 #
|
||||
OP_InstillDoubt=0x4acf #
|
||||
OP_FeignDeath=0x6145 #
|
||||
OP_Mend=0x7fbc #
|
||||
OP_LDoNOpen=0x7c87 #
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 #
|
||||
OP_TaskMemberList=0x0000 #
|
||||
OP_OpenNewTasksWindow=0x0000 #
|
||||
OP_AvaliableTask=0x0000 #
|
||||
OP_AcceptNewTask=0x0000 #
|
||||
OP_TaskHistoryRequest=0x6d1f #
|
||||
OP_TaskHistoryReply=0x189b #
|
||||
OP_CancelTask=0x47ea #
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x6d95 #
|
||||
OP_RequestTitles=0x7e3d #
|
||||
OP_SendTitleList=0x3aef #
|
||||
OP_SetTitle=0x725b #
|
||||
OP_SetTitleReply=0x38e8 #
|
||||
|
||||
# mail opcodes
|
||||
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 # # # # # # # # # # #
|
||||
|
||||
# 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
@@ -0,0 +1,631 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x4d5c #
|
||||
OP_ApproveWorld=0x655c #
|
||||
OP_LogServer=0x1497 #
|
||||
OP_SendCharInfo=0x7f9e #
|
||||
OP_ExpansionInfo=0x2c8f #
|
||||
OP_GuildsList=0x5b0b #
|
||||
OP_EnterWorld=0x710e #
|
||||
OP_PostEnterWorld=0x7930 #
|
||||
OP_World_Client_CRC1=0x7ce4 #
|
||||
OP_World_Client_CRC2=0x7705 #
|
||||
OP_SendSpellChecksum=0x0000 #
|
||||
OP_SendSkillCapsChecksum=0x0000 #
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x5ca5 #
|
||||
OP_CharacterCreateRequest=0x4eba #
|
||||
OP_CharacterCreate=0x3237 #
|
||||
OP_RandomNameGenerator=0x26aa #
|
||||
OP_ApproveName=0x3154 #
|
||||
|
||||
OP_MOTD=0x0b80 #
|
||||
OP_SetChatServer=0x2c38 #
|
||||
OP_SetChatServer2=0x441c #
|
||||
OP_ZoneServerInfo=0x16f5 #
|
||||
OP_WorldComplete=0x6c63 #
|
||||
OP_WorldUnknown001=0x4274 #
|
||||
OP_FloatListThing=0x1910 #
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x20bc #
|
||||
OP_WorldClientReady=0x0b89 # Testing VoA 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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 #
|
||||
OP_ZoneEntry=0x5821 #
|
||||
OP_ReqNewZone=0x4118 #
|
||||
OP_NewZone=0x43ac #
|
||||
OP_ZoneSpawns=0x5f5e #
|
||||
OP_PlayerProfile=0x6afd #
|
||||
OP_TimeOfDay=0x6015 #
|
||||
OP_LevelUpdate=0x6e1c #
|
||||
OP_Stamina=0x7686 #
|
||||
OP_RequestClientZoneChange=0x224f #
|
||||
OP_ZoneChange=0x28c8 #
|
||||
|
||||
OP_LockoutTimerInfo=0x0000 #
|
||||
OP_ZoneServerReady=0x0000 #
|
||||
OP_ZoneInUnknown=0x0000 #
|
||||
OP_LogoutReply=0x0000 #
|
||||
OP_PreLogoutReply=0x0000 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x3f55 #
|
||||
OP_ChangeSize=0x0000 #
|
||||
OP_TributeUpdate=0x0000 #
|
||||
OP_TributeTimer=0x0000 # Testing VoA 0x1525
|
||||
OP_TaskDescription=0x2e4f #
|
||||
OP_TaskActivity=0x512b #
|
||||
OP_CompletedTasks=0x3141 #
|
||||
OP_Weather=0x3e50 #
|
||||
OP_SendAATable=0x6a7e # Testing VoA 0x6a7e
|
||||
OP_UpdateAA=0x5363 # Testing VoA 0x5363
|
||||
OP_RespondAA=0x7bf6 # Testing VoA 0x0643 or maybe 0x7bf6
|
||||
OP_ReqClientSpawn=0x2c27 #
|
||||
OP_SpawnDoor=0x7113 #
|
||||
OP_GroundSpawn=0x33e5 #
|
||||
OP_SendZonepoints=0x399f #
|
||||
OP_SendAAStats=0x4e22 #
|
||||
OP_WorldObjectsSent=0x7b73 #
|
||||
OP_BlockedBuffs=0x1681 #
|
||||
OP_RemoveBlockedBuffs=0x6a86 #
|
||||
OP_ClearBlockedBuffs=0x7ae1 #
|
||||
OP_SendExpZonein=0x0f14 #
|
||||
OP_SendTributes=0x010d #
|
||||
OP_TributeInfo=0x047c #
|
||||
OP_SendGuildTributes=0x0000 #
|
||||
OP_AAExpUpdate=0x1318 #
|
||||
OP_ExpUpdate=0x221a # Testing VoA 0x0555
|
||||
OP_HPUpdate=0x2369 #
|
||||
OP_ManaChange=0x3887 #
|
||||
OP_TGB=0x3672 #
|
||||
OP_SpecialMesg=0x039d #
|
||||
OP_GuildMemberList=0x51bc #
|
||||
OP_GuildMOTD=0x0a1d # Testing VoA 0x0a1d
|
||||
OP_CharInventory=0x6cfe # Testing VoA 0x6cfe
|
||||
OP_WearChange=0x1a58 #
|
||||
OP_ClientUpdate=0x7062 #
|
||||
OP_ClientReady=0x1272 #
|
||||
OP_SetServerFilter=0x053a #
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x3415 #
|
||||
OP_GetGuildMOTDReply=0x709d #
|
||||
OP_GuildMemberUpdate=0x589f #
|
||||
OP_GuildInvite=0x5488 #
|
||||
OP_GuildRemove=0x47d3 #
|
||||
OP_GuildPeace=0x1d22 #
|
||||
OP_SetGuildMOTD=0x5f85 #
|
||||
OP_GuildList=0x0000 #
|
||||
OP_GuildWar=0x0598 #
|
||||
OP_GuildLeader=0x67c8 #
|
||||
OP_GuildDelete=0x230e #
|
||||
OP_GuildInviteAccept=0x2b5a #
|
||||
OP_GuildDemote=0x1899 #
|
||||
OP_GuildPublicNote=0x2dbd #
|
||||
OP_GuildManageBanker=0x0000 #
|
||||
OP_GuildBank=0x0000 #
|
||||
OP_SetGuildRank=0x4ffe #
|
||||
OP_GuildUpdateURLAndChannel=0x03d1 #
|
||||
OP_GuildMemberLevelUpdate=0x0000 #
|
||||
OP_ZoneGuildList=0x0000 #
|
||||
OP_GetGuildsList=0x0000 #
|
||||
OP_GuildStatus=0x6916 #
|
||||
OP_GuildCreate=0x0000 #
|
||||
# OP_GuildManageRemove=0x0000 #
|
||||
# OP_GuildManageAdd=0x0000 #
|
||||
# OP_GuildManageStatus=0x0000 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x6989 #
|
||||
OP_GMBecomeNPC=0x7093 #
|
||||
OP_GMZoneRequest=0x701f #
|
||||
OP_GMZoneRequest2=0x01 #
|
||||
OP_GMGoto=0x15a1 #
|
||||
OP_GMSearchCorpse=0x2bff #
|
||||
OP_GMHideMe=0x7e4d #
|
||||
OP_GMDelCorpse=0x072f #
|
||||
OP_GMApproval=0x481f #
|
||||
OP_GMToggle=0x2042 #
|
||||
OP_GMSummon=0x6e47 #
|
||||
OP_GMEmoteZone=0x307d #
|
||||
OP_GMEmoteWorld=0x0c2d #
|
||||
OP_GMFind=0x6e27 #
|
||||
OP_GMKick=0x5a56 #
|
||||
OP_GMKill=0x51fe #
|
||||
OP_GMNameChange=0x0000 #
|
||||
OP_GMLastName=0x1055 #
|
||||
|
||||
OP_InspectAnswer=0x0c54 #
|
||||
OP_BeginCast=0x0d5a #
|
||||
OP_BuffFadeMsg=0x1b8a #
|
||||
OP_ConsentResponse=0x35c6 #
|
||||
OP_MemorizeSpell=0x569e #
|
||||
OP_SwapSpell=0x28a7 #
|
||||
OP_CastSpell=0x8543 #
|
||||
OP_Consider=0x70c6 #
|
||||
OP_FormattedMessage=0x4675 #
|
||||
OP_SimpleMessage=0x0698 #
|
||||
OP_Buff=0x4658 #
|
||||
OP_Illusion=0x10b7 #
|
||||
OP_MoneyOnCorpse=0x4074 #
|
||||
OP_RandomReply=0x07fb #
|
||||
OP_DenyResponse=0x0370 #
|
||||
OP_SkillUpdate=0x7f01 #
|
||||
OP_GMTrainSkillConfirm=0x0000 #
|
||||
OP_RandomReq=0x303e #
|
||||
OP_Death=0x6685 #
|
||||
OP_Bind_Wound=0x7b64 #
|
||||
OP_GMTraining=0x5960 #
|
||||
OP_GMEndTraining=0x4a61 #
|
||||
OP_GMTrainSkill=0x4885 #
|
||||
OP_Animation=0x0b93 #
|
||||
OP_Begging=0x0ca5 #
|
||||
OP_Consent=0x6bb9 #
|
||||
OP_ConsentDeny=0x6b7f #
|
||||
OP_AutoFire=0x23fc #
|
||||
OP_PetCommands=0x7312 #
|
||||
OP_DeleteSpell=0x0142 #
|
||||
OP_Surname=0x777c #
|
||||
OP_ClearSurname=0x0000 #
|
||||
OP_FaceChange=0x0507 #
|
||||
OP_SenseHeading=0x1dad #
|
||||
OP_Action=0x1b85 #
|
||||
OP_ConsiderCorpse=0x0e94 #
|
||||
OP_HideCorpse=0x0000 #
|
||||
OP_CorpseDrag=0x0000 #
|
||||
OP_CorpseDrop=0x0000 #
|
||||
OP_Bug=0x3365 #
|
||||
OP_Feedback=0x52b5 #
|
||||
OP_Report=0x211a #
|
||||
OP_Damage=0x45d6 #
|
||||
OP_ChannelMessage=0x2e79 #
|
||||
OP_Assist=0x5658 #
|
||||
OP_AssistGroup=0x43bc #
|
||||
OP_MoveCoin=0x1418 #
|
||||
OP_ZonePlayerToBind=0x2480 #
|
||||
OP_KeyRing=0x3b85 #
|
||||
OP_WhoAllRequest=0x177a #
|
||||
OP_WhoAllResponse=0x15de #
|
||||
OP_FriendsWho=0x73d6 #
|
||||
OP_ConfirmDelete=0x604d #
|
||||
OP_Logout=0x6275 #
|
||||
OP_Rewind=0x09e3 #
|
||||
OP_TargetCommand=0x3088 #
|
||||
OP_InspectRequest=0x2683 #
|
||||
OP_Hide=0x2913 #
|
||||
OP_Jump=0x243b #
|
||||
OP_Camp=0x3cd6 #
|
||||
OP_Emote=0x0000 #
|
||||
OP_SetRunMode=0x59c3 #
|
||||
OP_BankerChange=0x0000 #
|
||||
OP_TargetMouse=0x3edc #
|
||||
OP_MobHealth=0x5cb0 #
|
||||
OP_InitialMobHealth=0x0000 #
|
||||
OP_TargetHoTT=0x460e #
|
||||
OP_TargetBuffs=0x7c24 #
|
||||
OP_BuffCreate=0x0c98 #
|
||||
OP_BuffRemoveRequest=0x3567
|
||||
OP_DeleteSpawn=0x3164 #
|
||||
OP_AutoAttack=0x2257 #
|
||||
OP_AutoAttack2=0x0000 #
|
||||
OP_Consume=0x2ee2 #
|
||||
OP_MoveItem=0x2963 #
|
||||
OP_DeleteItem=0x7547 #
|
||||
OP_DeleteCharge=0x6a90 #
|
||||
OP_ItemPacket=0x2dd3 #
|
||||
OP_ItemLinkResponse=0x6948 #
|
||||
OP_ItemLinkClick=0x3c66 #
|
||||
OP_NewSpawn=0x016c #
|
||||
OP_Track=0x2444 #
|
||||
OP_TrackTarget=0x538f #
|
||||
OP_TrackUnknown=0x10fa #
|
||||
OP_ClickDoor=0x48f9 #
|
||||
OP_MoveDoor=0x231f #
|
||||
OP_RemoveAllDoors=0x24a3 #
|
||||
OP_EnvDamage=0x2730 #
|
||||
OP_BoardBoat=0x50c2 #
|
||||
OP_Forage=0x3c02 #
|
||||
OP_LeaveBoat=0x569a #
|
||||
OP_ControlBoat=0x2641 #
|
||||
OP_SafeFallSuccess=0x1dc6 #
|
||||
OP_RezzComplete=0x7108 #
|
||||
OP_RezzRequest=0x66c5 #
|
||||
OP_RezzAnswer=0x71eb #
|
||||
OP_Shielding=0x7598 #
|
||||
OP_RequestDuel=0x0e71 #
|
||||
OP_MobRename=0x6884 #
|
||||
OP_AugmentItem=0x4cc6 #
|
||||
OP_WeaponEquip1=0x11bc #
|
||||
OP_WeaponEquip2=0x2121 #
|
||||
OP_WeaponUnequip2=0x7b87 #
|
||||
OP_ApplyPoison=0x3582 #
|
||||
OP_Save=0x47e7 #
|
||||
OP_TestBuff=0x712b #
|
||||
OP_CustomTitles=0x6ade #
|
||||
OP_Split=0x3a18 #
|
||||
OP_YellForHelp=0x1f87 #
|
||||
OP_LoadSpellSet=0x440f #
|
||||
OP_Bandolier=0x3ad1 #
|
||||
OP_PotionBelt=0x7b7f #
|
||||
OP_DuelResponse=0x1df9 #
|
||||
OP_DuelResponse2=0x36f8 #
|
||||
OP_SaveOnZoneReq=0x5408 #
|
||||
OP_ReadBook=0x41b5 #
|
||||
OP_Dye=0x32c6 #
|
||||
OP_InterruptCast=0x7706 #
|
||||
OP_AAAction=0x55dd #
|
||||
OP_LeadershipExpToggle=0x69d0 #
|
||||
OP_LeadershipExpUpdate=0x3703 #
|
||||
OP_PurchaseLeadershipAA=0x6e58 #
|
||||
OP_UpdateLeadershipAA=0x0297 #
|
||||
OP_MarkNPC=0x6b9e #
|
||||
OP_ClearNPCMarks=0x074f #
|
||||
OP_DoGroupLeadershipAbility=0x0000 #
|
||||
OP_GroupLeadershipAAUpdate=0x0000 #
|
||||
OP_DelegateAbility=0x105b #
|
||||
OP_SetGroupTarget=0x42c7 #
|
||||
OP_Charm=0x17f7 #
|
||||
OP_Stun=0x41a6 #
|
||||
OP_SendFindableNPCs=0x3015 #
|
||||
OP_FindPersonRequest=0x19a8 #
|
||||
OP_FindPersonReply=0x7e45 #
|
||||
OP_Sound=0x2d1d #
|
||||
OP_PetBuffWindow=0x4895 #
|
||||
OP_LevelAppearance=0x78b9 #
|
||||
OP_Translocate=0x42ef #
|
||||
OP_Sacrifice=0x2dc6 #
|
||||
OP_PopupResponse=0x0000 #
|
||||
OP_OnLevelMessage=0x0000 #
|
||||
OP_AugmentInfo=0x0000 #
|
||||
OP_Petition=0x31d1 #
|
||||
OP_SomeItemPacketMaybe=0x1513 #
|
||||
OP_PVPStats=0x0000 #
|
||||
OP_PVPLeaderBoardRequest=0x0000 #
|
||||
OP_PVPLeaderBoardReply=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 #
|
||||
OP_RestState=0x0000 #
|
||||
OP_RespawnWindow=0x435b #
|
||||
OP_DisciplineTimer=0x74ca #
|
||||
OP_LDoNButton=0x597d #
|
||||
OP_SetStartCity=0x179d #
|
||||
OP_VoiceMacroIn=0x0fce #
|
||||
OP_VoiceMacroOut=0x1c36 #
|
||||
OP_ItemViewUnknown=0x0000 #
|
||||
OP_VetRewardsAvaliable=0x3637 #
|
||||
OP_VetClaimRequest=0x032b #
|
||||
OP_VetClaimReply=0x7b6e #
|
||||
OP_CrystalCountUpdate=0x0000 #
|
||||
OP_DisciplineUpdate=0x0d8d #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 #
|
||||
OP_MobUpdate=0x4656 #
|
||||
OP_NPCMoveUpdate=0x2339 #
|
||||
OP_CameraEffect=0x6812 #
|
||||
OP_SpellEffect=0x0989 #
|
||||
OP_RemoveNimbusEffect=0x0000 #
|
||||
OP_AltCurrency=0x2536
|
||||
OP_AltCurrencyMerchantRequest=0x5aac
|
||||
OP_AltCurrencyMerchantReply=0x17c7
|
||||
OP_AltCurrencyPurchase=0x6efe
|
||||
OP_AltCurrencySell=0x32d9
|
||||
OP_AltCurrencySellSelection=0x7eac
|
||||
OP_AltCurrencyReclaim=0x1560
|
||||
OP_CrystalReclaim=0x0000
|
||||
OP_CrystalCreate=0x0000
|
||||
OP_Untargetable=0x101e
|
||||
OP_IncreaseStats=0x3fdc
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 #
|
||||
OP_ManaUpdate=0x7c94 #
|
||||
OP_EnduranceUpdate=0x5851 #
|
||||
OP_MobManaUpdate=0x4d27 #
|
||||
OP_MobEnduranceUpdate=0x190c #
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x1d85 #
|
||||
OP_EndLootRequest=0x0bc #
|
||||
OP_LootItem=0x5bd9 #
|
||||
OP_LootComplete=0x4ca1 #
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x2881 #
|
||||
OP_TraderDelItem=0x0000 #
|
||||
OP_BecomeTrader=0x358a #
|
||||
OP_TraderShop=0x49f4 #
|
||||
OP_Trader=0x058c #
|
||||
OP_TraderBuy=0x783c #
|
||||
OP_Barter=0x766f #
|
||||
OP_ShopItem=0x0000 #
|
||||
OP_BazaarInspect=0x0000 #
|
||||
OP_Bazaar=0x0000 #
|
||||
OP_TraderItemUpdate=0x0000 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0c24 #
|
||||
OP_TradeAcceptClick=0x064a #
|
||||
OP_TradeRequestAck=0x606a #
|
||||
OP_TradeCoins=0x0149 #
|
||||
OP_FinishTrade=0x3ff6 #
|
||||
OP_CancelTrade=0x527e #
|
||||
OP_TradeMoneyUpdate=0x1ebb #
|
||||
OP_MoneyUpdate=0x528f #
|
||||
OP_TradeBusy=0x2c03 #
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x3c27 #
|
||||
OP_FinishWindow2=0x2c6d #
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 #
|
||||
OP_ItemVerifyReply=0x0000 #
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0b27 #
|
||||
OP_ShopRequest=0x4194 #
|
||||
OP_ShopEnd=0x078e #
|
||||
OP_ShopEndConfirm=0x4762 #
|
||||
OP_ShopPlayerBuy=0x436a #
|
||||
OP_ShopDelItem=0x537c #
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x5f0d #
|
||||
OP_ClickObjectAction=0x29df #
|
||||
OP_ClearObject=0x38d1 #
|
||||
OP_RecipeDetails=0x068 #
|
||||
OP_RecipesFavorite=0x0000 #
|
||||
OP_RecipesSearch=0x0239 #
|
||||
OP_RecipeReply=0x1ecf #
|
||||
OP_RecipeAutoCombine=0x66bf #
|
||||
OP_TradeSkillCombine=0x4212 #
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 #
|
||||
OP_OpenTributeMaster=0x3ba3 #
|
||||
OP_SelectTribute=0x314f #
|
||||
OP_TributeItem=0x0000 #
|
||||
OP_TributeMoney=0x1772 #
|
||||
OP_TributeToggle=0x0000 #
|
||||
OP_TributePointUpdate=0x0000 #
|
||||
OP_TributeNPC=0x0000 #
|
||||
OP_GuildTributeInfo=0x0000 #
|
||||
OP_OpenTributeReply=0x0000 #
|
||||
# OP_GuildTributeStatus=0x0000 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x771f #
|
||||
OP_AdventureFinish=0x3168 #
|
||||
OP_AdventureInfoRequest=0x05d8 #
|
||||
OP_AdventureInfo=0x164b #
|
||||
OP_AdventureRequest=0x3a75 #
|
||||
OP_AdventureDetails=0x05 #
|
||||
OP_AdventureData=0x21df #
|
||||
OP_AdventureUpdate=0x6129 #
|
||||
OP_AdventureMerchantRequest=0x0000 #
|
||||
OP_AdventureMerchantResponse=0x0000 #
|
||||
OP_AdventureMerchantPurchase=0x0000 #
|
||||
OP_AdventureMerchantSell=0x0000 #
|
||||
OP_AdventurePointsUpdate=0x7d05 #
|
||||
OP_AdventureStatsRequest=0x0000 #
|
||||
OP_AdventureStatsReply=0x15a7 #
|
||||
OP_AdventureLeaderboardRequest=0x0000 #
|
||||
OP_AdventureLeaderboardReply=0x6bfb #
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x4200 #
|
||||
OP_GroupInvite=0x3288 #
|
||||
OP_GroupFollow=0x1190 #
|
||||
OP_GroupUpdate=0x0000 #
|
||||
OP_GroupUpdateB=0x0000 #
|
||||
OP_GroupCancelInvite=0x0000 #
|
||||
OP_GroupAcknowledge=0x0000 #
|
||||
OP_GroupDelete=0x0000 #
|
||||
OP_CancelInvite=0x132f #
|
||||
OP_GroupFollow2=0x3519 #
|
||||
OP_GroupInvite2=0x083b #
|
||||
OP_GroupDisbandYou=0x0000 #
|
||||
OP_GroupDisbandOther=0x0000 #
|
||||
OP_GroupLeaderChange=0x0000 #
|
||||
OP_GroupRoles=0x0000 #
|
||||
OP_GroupMakeLeader=0x13da
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x457d #
|
||||
OP_LFGGetMatchesRequest=0x49e7 #
|
||||
OP_LFGGetMatchesResponse=0x4817 #
|
||||
OP_LFPGetMatchesRequest=0x5fc7 #
|
||||
OP_LFPGetMatchesResponse=0x3d0c #
|
||||
OP_LFPCommand=0x20c6 #
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x550f #
|
||||
OP_RaidUpdate=0x0000 # Testing VoA 0x0c08
|
||||
OP_RaidJoin=0x0000 #
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x732c #
|
||||
OP_CombatAbility=0x16a5 #
|
||||
OP_SenseTraps=0x416b #
|
||||
OP_PickPocket=0x13bd #
|
||||
OP_DisarmTraps=0x0000 #
|
||||
OP_Disarm=0x6def #
|
||||
OP_Sneak=0x6eff #
|
||||
OP_Fishing=0x0555 #
|
||||
OP_InstillDoubt=0x4acf #
|
||||
OP_FeignDeath=0x6145 #
|
||||
OP_Mend=0x7fbc #
|
||||
OP_LDoNOpen=0x7c87 #
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 #
|
||||
OP_TaskMemberList=0x0000 #
|
||||
OP_OpenNewTasksWindow=0x0000 #
|
||||
OP_AvaliableTask=0x0000 #
|
||||
OP_AcceptNewTask=0x0000 #
|
||||
OP_TaskHistoryRequest=0x6d1f #
|
||||
OP_TaskHistoryReply=0x189b #
|
||||
OP_CancelTask=0x47ea #
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x6d95 #
|
||||
OP_RequestTitles=0x7e3d #
|
||||
OP_SendTitleList=0x3aef #
|
||||
OP_SetTitle=0x725b #
|
||||
OP_SetTitleReply=0x38e8 #
|
||||
|
||||
# mail opcodes
|
||||
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 # # # # # # # # # # #
|
||||
|
||||
# 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
@@ -0,0 +1,611 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x0000a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x6893 # was 0x2683
|
||||
OP_ApproveWorld=0x115a # was 0x28a7
|
||||
OP_LogServer=0x701f # was 0x224f
|
||||
OP_SendCharInfo=0x1b85 # was 0x2c27
|
||||
OP_ExpansionInfo=0x1771 # Same
|
||||
OP_GuildsList=0x5b0b # Same
|
||||
OP_EnterWorld=0x3288 # was 0x4f60
|
||||
OP_PostEnterWorld=0x2f2c # was 0x570c
|
||||
OP_World_Client_CRC1=0x0000 # C
|
||||
OP_World_Client_CRC2=0x0000 # C
|
||||
OP_SendSpellChecksum=0x0000 # C
|
||||
OP_SendSkillCapsChecksum=0x0000 # C
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 # C
|
||||
OP_CharacterCreateRequest=0x0000 # C
|
||||
OP_CharacterCreate=0x0000 # C
|
||||
OP_RandomNameGenerator=0x0000 # C 0x0000
|
||||
OP_ApproveName=0x0000 # C
|
||||
|
||||
OP_MOTD=0x7312 # C 0x0000
|
||||
OP_SetChatServer=0x698a #
|
||||
OP_SetChatServer2=0x0000 # Not sent any more ?
|
||||
OP_ZoneServerInfo=0x0479 # was 0x03cc
|
||||
OP_WorldComplete=0x510c #
|
||||
OP_WorldUnknown001=0x0000 # C 0x0000
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 # was 0x3594
|
||||
OP_ZoneEntry=0x002b # was 0x538f
|
||||
OP_ReqNewZone=0x5ca5 # was 0x5ca5
|
||||
OP_NewZone=0x0254 # was 0x0254
|
||||
OP_ZoneSpawns=0x0000 # ?
|
||||
OP_PlayerProfile=0x6022 # was 0x6022
|
||||
OP_TimeOfDay=0x6015 # was 0x6015
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x7b64 # V
|
||||
OP_TributeUpdate=0x4895 #
|
||||
OP_TributeTimer=0x0000 # C
|
||||
OP_TaskDescription=0x0000 # C
|
||||
OP_TaskActivity=0x0000 # C
|
||||
OP_CompletedTasks=0x0000 # C 0x0000
|
||||
OP_Weather=0x7ce4 # was 0x0ed5
|
||||
OP_SendAATable=0x1b26 #
|
||||
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_WorldObjectsSent=0x7b73 # was 0x7b73
|
||||
OP_BlockedBuffs=0x664a # was 0x4027
|
||||
OP_SendExpZonein=0x2c27 # was 0x1436
|
||||
OP_SendTributes=0x0000 # V
|
||||
OP_TributeInfo=0x0000 # V
|
||||
OP_SendGuildTributes=0x0000 # C 0x0000
|
||||
OP_AAExpUpdate=0x0000 # V
|
||||
OP_ExpUpdate=0x0000 # V
|
||||
OP_HPUpdate=0x0000 # V
|
||||
OP_ManaChange=0x0000 # C
|
||||
OP_TGB=0x0000 # C
|
||||
OP_SpecialMesg=0x3bf5 # was 0x14ff
|
||||
OP_GuildMemberList=0x0000 # C
|
||||
OP_GuildMOTD=0x0000 # V
|
||||
OP_CharInventory=0x465e #
|
||||
OP_WearChange=0x0000 # V
|
||||
OP_ClientUpdate=0x7062 # was 0x7062
|
||||
OP_ClientReady=0x6cdc # was 0x6cdc
|
||||
OP_SetServerFilter=0x0000 # V
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 # C
|
||||
OP_GetGuildMOTDReply=0x0000 # C
|
||||
OP_GuildMemberUpdate=0x0000 # C
|
||||
OP_GuildInvite=0x0000 # C
|
||||
OP_GuildRemove=0x0000 # C
|
||||
OP_GuildPeace=0x0000 # C
|
||||
OP_SetGuildMOTD=0x0000 # C
|
||||
OP_GuildList=0x0000 # C
|
||||
OP_GuildWar=0x0000 # C
|
||||
OP_GuildLeader=0x0000 # C
|
||||
OP_GuildDelete=0x0000 # C
|
||||
OP_GuildInviteAccept=0x0000 # C
|
||||
OP_GuildDemote=0x0000 # C
|
||||
OP_GuildPublicNote=0x0000 # C
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 # C
|
||||
OP_GMBecomeNPC=0x0000 # C
|
||||
OP_GMZoneRequest=0x6f79 # was 0x18ea
|
||||
OP_GMZoneRequest2=0x02d6 # was 0x3ad9
|
||||
OP_GMGoto=0x0000 # C
|
||||
OP_GMSearchCorpse=0x0000 # C
|
||||
OP_GMHideMe=0x0000 # C
|
||||
OP_GMDelCorpse=0x0000 # C
|
||||
OP_GMApproval=0x0000 # C
|
||||
OP_GMToggle=0x0000 # C 0x0000
|
||||
OP_GMSummon=0x0000 # C
|
||||
OP_GMEmoteZone=0x0000 # C
|
||||
OP_GMEmoteWorld=0x0000 # C
|
||||
OP_GMFind=0x0000 # C
|
||||
OP_GMKick=0x0000 # C
|
||||
OP_GMKill=0x0000 # C
|
||||
OP_GMNameChange=0x0000 # C
|
||||
OP_GMLastName=0x0000 # C
|
||||
|
||||
OP_InspectAnswer=0x0000 # C
|
||||
OP_BeginCast=0x0000 # C
|
||||
OP_BuffFadeMsg=0x50c2 # C
|
||||
OP_ConsentResponse=0x0000 # C
|
||||
OP_MemorizeSpell=0x0000 # C
|
||||
OP_SwapSpell=0x0000 # C
|
||||
OP_CastSpell=0x7286 # C
|
||||
OP_Consider=0x0000 # C
|
||||
OP_FormattedMessage=0x0000 # C
|
||||
OP_SimpleMessage=0x0000 # C 0x0000
|
||||
OP_Buff=0x0000 # C
|
||||
OP_Illusion=0x0000 # C
|
||||
OP_MoneyOnCorpse=0x0000 # C
|
||||
OP_RandomReply=0x0000 # C
|
||||
OP_DenyResponse=0x0000 # C
|
||||
OP_SkillUpdate=0x0000 # C
|
||||
OP_GMTrainSkillConfirm=0x0000 # C
|
||||
OP_RandomReq=0x0000 # C
|
||||
OP_Death=0x0000 # C
|
||||
OP_Bind_Wound=0x0000 # C
|
||||
OP_GMTraining=0x0000 # C
|
||||
OP_GMEndTraining=0x0000 # C
|
||||
OP_GMTrainSkill=0x0000 # C
|
||||
OP_Animation=0x0000 # Was 0x0000
|
||||
OP_Begging=0x0000 # C
|
||||
OP_Consent=0x0000 # C
|
||||
OP_ConsentDeny=0x0000 # C
|
||||
OP_AutoFire=0x0000 # C
|
||||
OP_PetCommands=0x0000 # C
|
||||
OP_DeleteSpell=0x0000 # C
|
||||
OP_Surname=0x0000 # C
|
||||
OP_ClearSurname=0x0000 # C
|
||||
OP_FaceChange=0x0000 # C
|
||||
OP_SenseHeading=0x0000 # C
|
||||
OP_Action=0x1513 # C
|
||||
OP_ConsiderCorpse=0x0000 # C
|
||||
OP_HideCorpse=0x0000 # C 0x0000
|
||||
OP_Bug=0x0000 # C
|
||||
OP_Feedback=0x0000 # C
|
||||
OP_Report=0x0000 # C
|
||||
OP_Damage=0x7519 # C or OP_Action2?
|
||||
OP_ChannelMessage=0x2e79 # was 0x2e79
|
||||
OP_Assist=0x0000 # C
|
||||
OP_AssistGroup=0x0000 # C
|
||||
OP_MoveCoin=0x0000 # C
|
||||
OP_ZonePlayerToBind=0x0000 # C
|
||||
OP_KeyRing=0x0000 # C
|
||||
OP_WhoAllRequest=0x0000 # C
|
||||
OP_WhoAllResponse=0x0000 # C
|
||||
OP_FriendsWho=0x0000 # C
|
||||
OP_ConfirmDelete=0x0000 # V
|
||||
OP_Logout=0x44ae # was 0x64ec
|
||||
OP_Rewind=0x0000 # C
|
||||
OP_TargetCommand=0x0000 # C Was 0x0000
|
||||
OP_InspectRequest=0x0000 # C
|
||||
OP_Hide=0x0000 # C
|
||||
OP_Jump=0x0000 # C
|
||||
OP_Camp=0x42ef # C
|
||||
OP_Emote=0x0000 # C
|
||||
OP_SetRunMode=0x0000 # C
|
||||
OP_BankerChange=0x0000 # C
|
||||
OP_TargetMouse=0x36f8 # C 0x0000
|
||||
OP_MobHealth=0x0000 # C
|
||||
OP_InitialMobHealth=0x0000 # C
|
||||
OP_TargetHoTT=0x0000 # C
|
||||
OP_TargetBuffs=0x0000 # C
|
||||
OP_BuffCreate=0x6bfb # V
|
||||
OP_DeleteSpawn=0x7434 # was 0x7434
|
||||
OP_AutoAttack=0x0000 # C
|
||||
OP_AutoAttack2=0x0000 # C
|
||||
OP_Consume=0x0000 # V
|
||||
OP_MoveItem=0x0000 # C
|
||||
OP_DeleteItem=0x0000 # C
|
||||
OP_DeleteCharge=0x0000 # C
|
||||
OP_ItemPacket=0x35b2 #
|
||||
OP_ItemLinkResponse=0x0000 # C
|
||||
OP_ItemLinkClick=0x0000 # C
|
||||
OP_NewSpawn=0x0000 # C
|
||||
OP_Track=0x0000 # C
|
||||
OP_TrackTarget=0x0000 # C
|
||||
OP_TrackUnknown=0x0000 # C
|
||||
OP_ClickDoor=0x470e # was 0x4f1f
|
||||
OP_MoveDoor=0x48f9 # was 0x1516
|
||||
OP_EnvDamage=0x0000 # C
|
||||
OP_BoardBoat=0x0000 # C
|
||||
OP_Forage=0x0000 # C
|
||||
OP_LeaveBoat=0x0000 # C
|
||||
OP_ControlBoat=0x0000 # C
|
||||
OP_SafeFallSuccess=0x0000 # C
|
||||
OP_RezzComplete=0x0000 # C
|
||||
OP_RezzRequest=0x0000 # C
|
||||
OP_RezzAnswer=0x0000 # C
|
||||
OP_Shielding=0x0000 # C
|
||||
OP_RequestDuel=0x0000 # C
|
||||
OP_MobRename=0x0000 # C
|
||||
OP_AugmentItem=0x0000 # C
|
||||
OP_WeaponEquip1=0x0000 # C
|
||||
OP_WeaponEquip2=0x0000 # C
|
||||
OP_WeaponUnequip2=0x0000 # C
|
||||
OP_ApplyPoison=0x0000 # C
|
||||
OP_Save=0x0000 # C
|
||||
OP_TestBuff=0x0000 # C
|
||||
OP_CustomTitles=0x0000 # C
|
||||
OP_Split=0x0000 # C
|
||||
OP_YellForHelp=0x0000 # C
|
||||
OP_LoadSpellSet=0x0000 # C
|
||||
OP_Bandolier=0x0000 # C
|
||||
OP_PotionBelt=0x0000 # C
|
||||
OP_DuelResponse=0x0000 # C
|
||||
OP_DuelResponse2=0x0000 # C
|
||||
OP_SaveOnZoneReq=0x2913 # was 0x2913
|
||||
OP_ReadBook=0x0000 # C
|
||||
OP_Dye=0x0000 # C
|
||||
OP_InterruptCast=0x0000 # C
|
||||
OP_AAAction=0x0000 # C
|
||||
OP_LeadershipExpToggle=0x0000 # C
|
||||
OP_LeadershipExpUpdate=0x0000 # C
|
||||
OP_PurchaseLeadershipAA=0x0000 # C
|
||||
OP_UpdateLeadershipAA=0x0000 # C
|
||||
OP_MarkNPC=0x0000 # C
|
||||
OP_ClearNPCMarks=0x0000 # C
|
||||
OP_DoGroupLeadershipAbility=0x0000 # C
|
||||
OP_GroupLeadershipAAUpdate=0x0000 # C
|
||||
OP_DelegateAbility=0x0000 # C
|
||||
OP_SetGroupTarget=0x0000 # C
|
||||
OP_Charm=0x0000 # C
|
||||
OP_Stun=0x0000 # C
|
||||
OP_SendFindableNPCs=0x7eeb # C
|
||||
OP_FindPersonRequest=0x0000 # C
|
||||
OP_FindPersonReply=0x0000 # C
|
||||
OP_Sound=0x0000 # C
|
||||
OP_PetBuffWindow=0x0000 # C
|
||||
OP_LevelAppearance=0x0000 # C
|
||||
OP_Translocate=0x0000 # C
|
||||
OP_Sacrifice=0x0000 # C
|
||||
OP_PopupResponse=0x0000 # C
|
||||
OP_OnLevelMessage=0x0000 # C
|
||||
OP_AugmentInfo=0x0000 # C
|
||||
OP_Petition=0x0000 # C
|
||||
OP_SomeItemPacketMaybe=0x4200 # C
|
||||
OP_SomeItemPacketMaybe=0x0000 # C
|
||||
OP_PVPStats=0x0000 # C
|
||||
OP_PVPLeaderBoardRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardReply=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 # C
|
||||
OP_RestState=0x0000 # C
|
||||
OP_RespawnWindow=0x0000 # C
|
||||
OP_DisciplineTimer=0x0000 # C
|
||||
OP_LDoNButton=0x0000 # C
|
||||
OP_SetStartCity=0x0000 # C
|
||||
OP_VoiceMacroIn=0x0000 # C
|
||||
OP_VoiceMacroOut=0x0000 # C
|
||||
OP_ItemViewUnknown=0x0000 # C
|
||||
OP_VetRewardsAvaliable=0x0000 # C Mispelled?
|
||||
OP_VetClaimRequest=0x0000 # C
|
||||
OP_VetClaimReply=0x0000 # C
|
||||
OP_CrystalCountUpdate=0x0000 # C
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 # C OP_Damage?
|
||||
OP_MobUpdate=0x4656 # was 0x4656
|
||||
OP_NPCMoveUpdate=0x3278 #
|
||||
OP_CameraEffect=0x0000 # V
|
||||
OP_SpellEffect=0x0000 # V
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # C
|
||||
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
|
||||
OP_LootItem=0x0000 # C
|
||||
OP_LootComplete=0x0000 # C
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 # C
|
||||
OP_TraderDelItem=0x0000 # C
|
||||
OP_BecomeTrader=0x0000 # C
|
||||
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 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 # C
|
||||
OP_TradeAcceptClick=0x0000 # C
|
||||
OP_TradeRequestAck=0x0000 # C
|
||||
OP_TradeCoins=0x0000 # C
|
||||
OP_FinishTrade=0x0000 # C
|
||||
OP_CancelTrade=0x0000 # C
|
||||
OP_TradeMoneyUpdate=0x0000 # C
|
||||
OP_MoneyUpdate=0x0000 # C
|
||||
OP_TradeBusy=0x0000 # C
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 # C
|
||||
OP_FinishWindow2=0x0000 # C
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 # C
|
||||
OP_ItemVerifyReply=0x0000 # C
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 # C
|
||||
OP_ShopRequest=0x1044 # was 0x1044
|
||||
OP_ShopEnd=0x3753 # was 0x3753
|
||||
OP_ShopEndConfirm=0x0000 # C
|
||||
OP_ShopPlayerBuy=0x0000 # C
|
||||
OP_ShopDelItem=0x0000 # C
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 # V
|
||||
OP_ClickObjectAction=0x0000 # V
|
||||
OP_ClearObject=0x0000 # C
|
||||
OP_RecipeDetails=0x0000 # C
|
||||
OP_RecipesFavorite=0x0000 # C
|
||||
OP_RecipesSearch=0x0000 # C
|
||||
OP_RecipeReply=0x0000 # C
|
||||
OP_RecipeAutoCombine=0x0000 # C
|
||||
OP_TradeSkillCombine=0x0000 # C
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 # C
|
||||
OP_OpenTributeMaster=0x0000 # C
|
||||
OP_SelectTribute=0x0000 # C
|
||||
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 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 # C
|
||||
OP_AdventureFinish=0x0000 # C
|
||||
OP_AdventureInfoRequest=0x0000 # C
|
||||
OP_AdventureInfo=0x0000 # C
|
||||
OP_AdventureRequest=0x0000 # C
|
||||
OP_AdventureDetails=0x0000 # C
|
||||
OP_AdventureData=0x0000 # C
|
||||
OP_AdventureUpdate=0x0000 # C
|
||||
OP_AdventureMerchantRequest=0x0000 # C
|
||||
OP_AdventureMerchantResponse=0x0000 # C
|
||||
OP_AdventureMerchantPurchase=0x0000 # C
|
||||
OP_AdventureMerchantSell=0x0000 # C
|
||||
OP_AdventurePointsUpdate=0x0000 # C
|
||||
OP_AdventureStatsRequest=0x0000 # C
|
||||
OP_AdventureStatsReply=0x0000 # C
|
||||
OP_AdventureLeaderboardRequest=0x0000 # C
|
||||
OP_AdventureLeaderboardReply=0x0000 # C
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 # C
|
||||
OP_GroupInvite=0x0000 # C
|
||||
OP_GroupFollow=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_CancelInvite=0x0000 # C
|
||||
OP_GroupFollow2=0x0000 # C
|
||||
OP_GroupInvite2=0x0000 # C
|
||||
OP_GroupDisbandYou=0x0000 # C
|
||||
OP_GroupDisbandOther=0x0000 # C
|
||||
OP_GroupLeaderChange=0x0000 # C
|
||||
OP_GroupRoles=0x0000 # C
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 # C
|
||||
OP_LFGGetMatchesRequest=0x0000 # C
|
||||
OP_LFGGetMatchesResponse=0x0000 # C
|
||||
OP_LFPGetMatchesRequest=0x0000 # C
|
||||
OP_LFPGetMatchesResponse=0x0000 # C
|
||||
OP_LFPCommand=0x0000 # C
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 # C
|
||||
OP_RaidUpdate=0x0000 # C
|
||||
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_Disarm=0x0000 # C
|
||||
OP_Sneak=0x0000 # C
|
||||
OP_Fishing=0x0000 # C
|
||||
OP_InstillDoubt=0x0000 # C
|
||||
OP_FeignDeath=0x0000 # C
|
||||
OP_Mend=0x0000 # C
|
||||
OP_LDoNOpen=0x0000 # C
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 # C
|
||||
OP_TaskMemberList=0x0000 # C
|
||||
OP_OpenNewTasksWindow=0x0000 # C
|
||||
OP_AvaliableTask=0x0000 # C Mispelled?
|
||||
OP_AcceptNewTask=0x0000 # C
|
||||
OP_TaskHistoryRequest=0x0000 # C
|
||||
OP_TaskHistoryReply=0x0000 # C
|
||||
OP_CancelTask=0x0000 # C
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 # C
|
||||
OP_RequestTitles=0x0000 # C
|
||||
OP_SendTitleList=0x0000 # C
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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_OPCode2511=0x2511
|
||||
@@ -0,0 +1,619 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x13da # V
|
||||
OP_ApproveWorld=0x86c7 # C
|
||||
OP_LogServer=0x6f79 # C
|
||||
OP_SendCharInfo=0x4200 # C
|
||||
OP_ExpansionInfo=0x7e4d # C
|
||||
OP_GuildsList=0x5b0b # C
|
||||
OP_EnterWorld=0x51b9 # C
|
||||
OP_PostEnterWorld=0x5d32 # C
|
||||
OP_World_Client_CRC1=0x3a18 # C
|
||||
OP_World_Client_CRC2=0x3e50 # C
|
||||
OP_SendSpellChecksum=0x46d3 # C
|
||||
OP_SendSkillCapsChecksum=0x040b # C
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x5ca5 # C
|
||||
OP_CharacterCreateRequest=0x53a3 # C
|
||||
OP_CharacterCreate=0x1b85 # C
|
||||
OP_RandomNameGenerator=0x647a # C 0x440f
|
||||
OP_ApproveName=0x4f1f # C
|
||||
|
||||
OP_MOTD=0x7629 # C 0x2b59
|
||||
OP_SetChatServer=0x7d90 # C 0x0479
|
||||
OP_SetChatServer2=0x7327 # C 0x158f
|
||||
OP_ZoneServerInfo=0x1190 # C 0x41c0
|
||||
OP_WorldComplete=0x441c # C
|
||||
OP_WorldUnknown001=0x6f9d # C 0x77b1
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 # V
|
||||
OP_ZoneEntry=0x4b61 # V
|
||||
OP_ReqNewZone=0x4118 # V
|
||||
OP_NewZone=0x43ac # V
|
||||
OP_ZoneSpawns=0x7114 # ?
|
||||
OP_PlayerProfile=0x6022 # V
|
||||
OP_TimeOfDay=0x6015 # V
|
||||
OP_LevelUpdate=0x6a99 # V
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x3e17 # V
|
||||
OP_TributeUpdate=0x684c # V
|
||||
OP_TributeTimer=0x4895 # C
|
||||
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_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_WorldObjectsSent=0x7b73 # V
|
||||
OP_BlockedBuffs=0x05d5 # V
|
||||
OP_SendExpZonein=0x47e7 # V
|
||||
OP_SendTributes=0x6bfb # V
|
||||
OP_TributeInfo=0x5a67 # V
|
||||
OP_SendGuildTributes=0x4df0 # C 0x5a01
|
||||
OP_AAExpUpdate=0x4aa2 # V
|
||||
OP_ExpUpdate=0x0555 # V
|
||||
OP_HPUpdate=0x6145 # V
|
||||
OP_ManaChange=0x569a # C
|
||||
OP_TGB=0x42ef # C
|
||||
OP_SpecialMesg=0x016c # V
|
||||
OP_GuildMemberList=0x51bc # C
|
||||
OP_GuildMOTD=0x5658 # V
|
||||
OP_CharInventory=0x47ae # V
|
||||
OP_WearChange=0x0400 # V
|
||||
OP_ClientUpdate=0x7062 # V
|
||||
OP_ClientReady=0x6cdc # V
|
||||
OP_SetServerFilter=0x2d74 # V
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x1899 # C
|
||||
OP_GetGuildMOTDReply=0x4a5c # C
|
||||
OP_GuildMemberUpdate=0x0a53 # C
|
||||
OP_GuildInvite=0x1a58 # C
|
||||
OP_GuildRemove=0x3c02 # C
|
||||
OP_GuildPeace=0x2bff # C
|
||||
OP_SetGuildMOTD=0x053a # C
|
||||
OP_GuildList=0x5b0b # C
|
||||
OP_GuildWar=0x5408 # C
|
||||
OP_GuildLeader=0x0598 # C
|
||||
OP_GuildDelete=0x3f55 # C
|
||||
OP_GuildInviteAccept=0x7b64 # C
|
||||
OP_GuildDemote=0x457d # C
|
||||
OP_GuildPublicNote=0x2dbd # C
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x6989 # C
|
||||
OP_GMBecomeNPC=0x56e7 # C
|
||||
OP_GMZoneRequest=0x3fd2 # C
|
||||
OP_GMZoneRequest2=0x538f # C
|
||||
OP_GMGoto=0x5ebc # C
|
||||
OP_GMSearchCorpse=0x5a81 # C
|
||||
OP_GMHideMe=0x28ef # C
|
||||
OP_GMDelCorpse=0x655c # C
|
||||
OP_GMApproval=0x7312 # C
|
||||
OP_GMToggle=0x097f # C 0x7566
|
||||
OP_GMSummon=0x712b # C
|
||||
OP_GMEmoteZone=0x1ac1 # C
|
||||
OP_GMEmoteWorld=0x2444 # C
|
||||
OP_GMFind=0x6e27 # C
|
||||
OP_GMKick=0x0402 # C
|
||||
OP_GMKill=0x799c # C
|
||||
OP_GMNameChange=0x0f48 # C
|
||||
OP_GMLastName=0x7bfb # C
|
||||
|
||||
OP_InspectAnswer=0x0c2b # C
|
||||
OP_BeginCast=0x0d5a # C
|
||||
OP_BuffFadeMsg=0x71bf # C
|
||||
OP_ConsentResponse=0x0e87 # C
|
||||
OP_MemorizeSpell=0x3887 # C
|
||||
OP_SwapSpell=0x0dda # C
|
||||
OP_CastSpell=0x50c2 # C
|
||||
OP_Consider=0x3c2d # C
|
||||
OP_FormattedMessage=0x3b52 # C
|
||||
OP_SimpleMessage=0x1f4d # C 0x5448
|
||||
OP_Buff=0x0d1d # C
|
||||
OP_Illusion=0x231f # C
|
||||
OP_MoneyOnCorpse=0x4a83 # C
|
||||
OP_RandomReply=0x6d5d # C
|
||||
OP_DenyResponse=0x6129 # C
|
||||
OP_SkillUpdate=0x7f01 # C
|
||||
OP_GMTrainSkillConfirm=0x3190 # C
|
||||
OP_RandomReq=0x139d # C
|
||||
OP_Death=0x7f9e # C
|
||||
OP_Bind_Wound=0x4b1a # C
|
||||
OP_GMTraining=0x51fa # C
|
||||
OP_GMEndTraining=0x5479 # C
|
||||
OP_GMTrainSkill=0x2257 # C
|
||||
OP_Animation=0x4a61 # Was 0x47d3
|
||||
OP_Begging=0x53f9 # C
|
||||
OP_Consent=0x6bb9 # C
|
||||
OP_ConsentDeny=0x4cd1 # C
|
||||
OP_AutoFire=0x5db5 # C
|
||||
OP_PetCommands=0x7706 # C
|
||||
OP_DeleteSpell=0x0698 # C
|
||||
OP_Surname=0x44ae # C
|
||||
OP_ClearSurname=0x2bc6 # C
|
||||
OP_FaceChange=0x37a7 # C
|
||||
OP_SenseHeading=0x1b8a # C
|
||||
OP_Action=0x0f14 # C
|
||||
OP_ConsiderCorpse=0x0a18 # C
|
||||
OP_HideCorpse=0x2d08 # C 0x1842
|
||||
OP_Bug=0x2369 # C
|
||||
OP_Feedback=0x7705 # C
|
||||
OP_Report=0x50d0 # C
|
||||
OP_Damage=0x631a # C or OP_Action2?
|
||||
OP_ChannelMessage=0x2e79 # C
|
||||
OP_Assist=0x35b1 # C
|
||||
OP_AssistGroup=0x194f # C
|
||||
OP_MoveCoin=0x6024 # C
|
||||
OP_ZonePlayerToBind=0x382c # C
|
||||
OP_KeyRing=0x5c06 # C
|
||||
OP_WhoAllRequest=0x177a # C
|
||||
OP_WhoAllResponse=0x6ffa # C
|
||||
OP_FriendsWho=0x6275 # C
|
||||
OP_ConfirmDelete=0x3edc # V
|
||||
OP_Logout=0x224f # C
|
||||
OP_Rewind=0x7d63 # C
|
||||
OP_TargetCommand=0x756c # C Was 0x5f5e
|
||||
OP_InspectRequest=0x7c94 # C
|
||||
OP_Hide=0x3497 # C
|
||||
OP_Jump=0x083b # C
|
||||
OP_Camp=0x5f85 # C
|
||||
OP_Emote=0x3164 # C
|
||||
OP_SetRunMode=0x3d06 # C
|
||||
OP_BankerChange=0x300a # C
|
||||
OP_TargetMouse=0x5f5e # C 0x7bbb
|
||||
OP_MobHealth=0x15de # C
|
||||
OP_InitialMobHealth=0x5cb0 # C
|
||||
OP_TargetHoTT=0x4d56 # C
|
||||
OP_TargetBuffs=0x3f24 # C
|
||||
OP_BuffCreate=0x2121 # V
|
||||
OP_DeleteSpawn=0x58c5 # C
|
||||
OP_AutoAttack=0x1df9 # C
|
||||
OP_AutoAttack2=0x517b # C
|
||||
OP_Consume=0x24c5 # V
|
||||
OP_MoveItem=0x2641 # C
|
||||
OP_DeleteItem=0x66e0 # C
|
||||
OP_DeleteCharge=0x4ca1 # C
|
||||
OP_ItemPacket=0x7b6e # C
|
||||
OP_ItemLinkResponse=0x695c # C
|
||||
OP_ItemLinkClick=0x3c66 # C
|
||||
OP_NewSpawn=0x429b # C
|
||||
OP_Track=0x3f49 # C
|
||||
OP_TrackTarget=0x3f49 # C
|
||||
OP_TrackUnknown=0x03e7 # C
|
||||
OP_ClickDoor=0x6e97 # C
|
||||
OP_MoveDoor=0x3154 # C
|
||||
OP_EnvDamage=0x2730 # C
|
||||
OP_BoardBoat=0x7554 # C
|
||||
OP_Forage=0x739b # C
|
||||
OP_LeaveBoat=0x7286 # C
|
||||
OP_ControlBoat=0x7ea8 # C
|
||||
OP_SafeFallSuccess=0x6df7 # C
|
||||
OP_RezzComplete=0x30a4 # C
|
||||
OP_RezzRequest=0x32af # C
|
||||
OP_RezzAnswer=0x2d41 # C
|
||||
OP_Shielding=0x4675 # C
|
||||
OP_RequestDuel=0x6cfe # C
|
||||
OP_MobRename=0x0507 # C
|
||||
OP_AugmentItem=0x7c87 # C
|
||||
OP_WeaponEquip1=0x4572 # C
|
||||
OP_WeaponEquip2=0x399b # C
|
||||
OP_WeaponUnequip2=0x416b # C
|
||||
OP_ApplyPoison=0x5cd3 # C
|
||||
OP_Save=0x6618 # C
|
||||
OP_TestBuff=0x3415 # C
|
||||
OP_CustomTitles=0x6a7e # C
|
||||
OP_Split=0x1418 # C
|
||||
OP_YellForHelp=0x55a8 # C
|
||||
OP_LoadSpellSet=0x6617 # C
|
||||
OP_Bandolier=0x510c # C
|
||||
OP_PotionBelt=0x0651 # C
|
||||
OP_DuelResponse=0x41a6 # C
|
||||
OP_DuelResponse2=0x6d60 # C
|
||||
OP_SaveOnZoneReq=0x2913 # C
|
||||
OP_ReadBook=0x465e # C
|
||||
OP_Dye=0x2137 # C
|
||||
OP_InterruptCast=0x7566 # C
|
||||
OP_AAAction=0x2bad # C
|
||||
OP_LeadershipExpToggle=0x5033 # C
|
||||
OP_LeadershipExpUpdate=0x074f # C
|
||||
OP_PurchaseLeadershipAA=0x5f55 # C
|
||||
OP_UpdateLeadershipAA=0x77ed # C
|
||||
OP_MarkNPC=0x3ec7 # C
|
||||
OP_ClearNPCMarks=0x5c29 # C
|
||||
OP_DoGroupLeadershipAbility=0x0068 # C
|
||||
OP_GroupLeadershipAAUpdate=0x27bf # C
|
||||
OP_DelegateAbility=0x6e58 # C
|
||||
OP_SetGroupTarget=0x6b9e # C
|
||||
OP_Charm=0x1fd5 # C
|
||||
OP_Stun=0x3d00 # C
|
||||
OP_SendFindableNPCs=0x6193 # C
|
||||
OP_FindPersonRequest=0x1e04 # C
|
||||
OP_FindPersonReply=0x7cae # C
|
||||
OP_Sound=0x737a # C
|
||||
OP_PetBuffWindow=0x7b87 # C
|
||||
OP_LevelAppearance=0x1bd4 # C
|
||||
OP_Translocate=0x3d9c # C
|
||||
OP_Sacrifice=0x301b # C
|
||||
OP_PopupResponse=0x6d27 # C
|
||||
OP_OnLevelMessage=0x24cb # C
|
||||
OP_AugmentInfo=0x31b1 # C
|
||||
OP_Petition=0x31d1 # C
|
||||
OP_SomeItemPacketMaybe=0x2c27 # C
|
||||
OP_PVPStats=0x6840 # C
|
||||
OP_PVPLeaderBoardRequest=0x4973 # C
|
||||
OP_PVPLeaderBoardReply=0x3842 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x6c75 # C
|
||||
OP_PVPLeaderBoardDetailsReply=0x7fd7 # C
|
||||
OP_RestState=0x5d24 # C
|
||||
OP_RespawnWindow=0x107f # C
|
||||
OP_DisciplineTimer=0x047c # C
|
||||
OP_LDoNButton=0x1031 # C
|
||||
OP_SetStartCity=0x68f0 # C
|
||||
OP_VoiceMacroIn=0x1524 # C
|
||||
OP_VoiceMacroOut=0x1d99 # C
|
||||
OP_ItemViewUnknown=0x4eb3 # C
|
||||
OP_VetRewardsAvaliable=0x0baa # C Mispelled?
|
||||
OP_VetClaimRequest=0x34f8 # C
|
||||
OP_VetClaimReply=0x6a5d # C
|
||||
OP_CrystalCountUpdate=0x3fc8 # C
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 # C OP_Damage?
|
||||
OP_MobUpdate=0x4656 # Same as OP_SpawnPositionUpdate
|
||||
OP_NPCMoveUpdate=0x0f3e #
|
||||
OP_CameraEffect=0x6b0e # V
|
||||
OP_SpellEffect=0x57a3 # V
|
||||
|
||||
OP_DzQuit=0x1539
|
||||
OP_DzListTimers=0x21e9
|
||||
OP_DzAddPlayer=0x3657
|
||||
OP_DzRemovePlayer=0x054e
|
||||
OP_DzSwapPlayer=0x4661
|
||||
OP_DzMakeLeader=0x226f
|
||||
OP_DzPlayerList=0x74e4
|
||||
OP_DzJoinExpeditionConfirm=0x3c5e
|
||||
OP_DzJoinExpeditionReply=0x1154
|
||||
OP_DzExpeditionInfo=0x1150
|
||||
OP_DzMemberStatus=0x2d17
|
||||
OP_DzLeaderStatus=0x2caf
|
||||
OP_DzExpeditionEndsWarning=0x6ac2
|
||||
OP_DzExpeditionList=0x70d8
|
||||
OP_DzMemberList=0x15c4
|
||||
OP_DzCompass=0x01cb
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x4656 # C
|
||||
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
|
||||
OP_LootItem=0x5960 # C
|
||||
OP_LootComplete=0x604d # C
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x550f # C
|
||||
OP_TraderDelItem=0x63c8 # C
|
||||
OP_BecomeTrader=0x0a1d # C
|
||||
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 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x7113 # C
|
||||
OP_TradeAcceptClick=0x064a # C
|
||||
OP_TradeRequestAck=0x606a # C
|
||||
OP_TradeCoins=0x0149 # C
|
||||
OP_FinishTrade=0x3ff6 # C
|
||||
OP_CancelTrade=0x527e # C
|
||||
OP_TradeMoneyUpdate=0x2a6d # C
|
||||
OP_MoneyUpdate=0xd677 # C
|
||||
OP_TradeBusy=0x5ed3 # C
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x3c27 # C
|
||||
OP_FinishWindow2=0x6759 # C
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x101e # C
|
||||
OP_ItemVerifyReply=0x21c7 # C
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0b27 # C
|
||||
OP_ShopRequest=0x442a # C
|
||||
OP_ShopEnd=0x3753 # C
|
||||
OP_ShopEndConfirm=0x4578 # C
|
||||
OP_ShopPlayerBuy=0x436a # C
|
||||
OP_ShopDelItem=0x63c8 # C
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x33e5 # V
|
||||
OP_ClickObjectAction=0x41b5 # V
|
||||
OP_ClearObject=0x71d1 # C
|
||||
OP_RecipeDetails=0x58d9 # C
|
||||
OP_RecipesFavorite=0x7770 # C
|
||||
OP_RecipesSearch=0x6948 # C
|
||||
OP_RecipeReply=0x521c # C
|
||||
OP_RecipeAutoCombine=0x0322 # C
|
||||
OP_TradeSkillCombine=0x4212 # C
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x5e79 # C
|
||||
OP_OpenTributeMaster=0x7c24 # C
|
||||
OP_SelectTribute=0x0c98 # C
|
||||
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 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x3ed4 # C
|
||||
OP_AdventureFinish=0x6acc # C
|
||||
OP_AdventureInfoRequest=0x3541 # C
|
||||
OP_AdventureInfo=0x5cea # C
|
||||
OP_AdventureRequest=0x2c03 # C
|
||||
OP_AdventureDetails=0x1d40 # C
|
||||
OP_AdventureData=0x34f2 # C
|
||||
OP_AdventureUpdate=0x771f # C
|
||||
OP_AdventureMerchantRequest=0x4e22 # C
|
||||
OP_AdventureMerchantResponse=0x4dd5 # C
|
||||
OP_AdventureMerchantPurchase=0x7b7f # C
|
||||
OP_AdventureMerchantSell=0x179d # C
|
||||
OP_AdventurePointsUpdate=0x7537 # C
|
||||
OP_AdventureStatsRequest=0x4786 # C
|
||||
OP_AdventureStatsReply=0x38b0 # C
|
||||
OP_AdventureLeaderboardRequest=0x4cc6 # C
|
||||
OP_AdventureLeaderboardReply=0x4423 # C
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x54e8 # C
|
||||
OP_GroupInvite=0x4f60 # C
|
||||
OP_GroupFollow=0x7f2b # 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_CancelInvite=0x2736 # C
|
||||
OP_GroupFollow2=0x6c16 # C
|
||||
OP_GroupInvite2=0x5251 # C
|
||||
OP_GroupDisbandYou=0x0bd0 # C
|
||||
OP_GroupDisbandOther=0x49f6 # C
|
||||
OP_GroupLeaderChange=0x0c33 # C
|
||||
OP_GroupRoles=0x116d # C
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x2c38 # C
|
||||
OP_LFGGetMatchesRequest=0x28d4 # C
|
||||
OP_LFGGetMatchesResponse=0x7a16 # C
|
||||
OP_LFPGetMatchesRequest=0x189e # C
|
||||
OP_LFPGetMatchesResponse=0x589f # C
|
||||
OP_LFPCommand=0x7429 # C
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x60b5 # C
|
||||
OP_RaidUpdate=0x4d8b # C
|
||||
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_Disarm=0x6def # C
|
||||
OP_Sneak=0x1d22 # C
|
||||
OP_Fishing=0x7093 # C
|
||||
OP_InstillDoubt=0x221a # C
|
||||
OP_FeignDeath=0x002b # C
|
||||
OP_Mend=0x10a6 # C
|
||||
OP_LDoNOpen=0x032b # C
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x5832 # C
|
||||
OP_TaskMemberList=0x66ba # C
|
||||
OP_OpenNewTasksWindow=0x98f6 # C
|
||||
OP_AvaliableTask=0x6255 # C Mispelled?
|
||||
OP_AcceptNewTask=0x17d5 # C
|
||||
OP_TaskHistoryRequest=0x547c # C
|
||||
OP_TaskHistoryReply=0x4524 # C
|
||||
OP_CancelTask=0x3bf5 # C
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x4b49 # C
|
||||
OP_RequestTitles=0x4d3e # C
|
||||
OP_SendTitleList=0x0d96 # C
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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_MercenaryDataRequest=0x3015
|
||||
OP_MercenaryDataResponse=0x0eaa
|
||||
OP_MercenaryTimer=0x0cae
|
||||
OP_MercenaryHire=0x099e
|
||||
OP_MercenaryRelated1=0x2538
|
||||
OP_MercenaryUnknown1=0x367f
|
||||
@@ -0,0 +1,611 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x0000a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x6893 # was 0x2683
|
||||
OP_ApproveWorld=0x115a # was 0x28a7
|
||||
OP_LogServer=0x701f # was 0x224f
|
||||
OP_SendCharInfo=0x1b85 # was 0x2c27
|
||||
OP_ExpansionInfo=0x1771 # Same
|
||||
OP_GuildsList=0x5b0b # Same
|
||||
OP_EnterWorld=0x3288 # was 0x4f60
|
||||
OP_PostEnterWorld=0x2f2c # was 0x570c
|
||||
OP_World_Client_CRC1=0x0000 # C
|
||||
OP_World_Client_CRC2=0x0000 # C
|
||||
OP_SendSpellChecksum=0x0000 # C
|
||||
OP_SendSkillCapsChecksum=0x0000 # C
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 # C
|
||||
OP_CharacterCreateRequest=0x0000 # C
|
||||
OP_CharacterCreate=0x0000 # C
|
||||
OP_RandomNameGenerator=0x0000 # C 0x0000
|
||||
OP_ApproveName=0x0000 # C
|
||||
|
||||
OP_MOTD=0x7312 # C 0x0000
|
||||
OP_SetChatServer=0x698a #
|
||||
OP_SetChatServer2=0x0000 # Not sent any more ?
|
||||
OP_ZoneServerInfo=0x0479 # was 0x03cc
|
||||
OP_WorldComplete=0x510c #
|
||||
OP_WorldUnknown001=0x0000 # C 0x0000
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 # was 0x3594
|
||||
OP_ZoneEntry=0x02d6 # was 0x538f
|
||||
OP_ReqNewZone=0x5ca5 # was 0x5ca5
|
||||
OP_NewZone=0x0254 # was 0x0254
|
||||
OP_ZoneSpawns=0x0000 # ?
|
||||
OP_PlayerProfile=0x6022 # was 0x6022
|
||||
OP_TimeOfDay=0x6015 # was 0x6015
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x7b64 # V
|
||||
OP_TributeUpdate=0x4895 #
|
||||
OP_TributeTimer=0x0000 # C
|
||||
OP_TaskDescription=0x0000 # C
|
||||
OP_TaskActivity=0x0000 # C
|
||||
OP_CompletedTasks=0x0000 # C 0x0000
|
||||
OP_Weather=0x7ce4 # was 0x0ed5
|
||||
OP_SendAATable=0x1d99 #
|
||||
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_WorldObjectsSent=0x7b73 # was 0x7b73
|
||||
OP_BlockedBuffs=0x664a # was 0x4027
|
||||
OP_SendExpZonein=0x2c27 # was 0x1436
|
||||
OP_SendTributes=0x0000 # V
|
||||
OP_TributeInfo=0x0000 # V
|
||||
OP_SendGuildTributes=0x0000 # C 0x0000
|
||||
OP_AAExpUpdate=0x0000 # V
|
||||
OP_ExpUpdate=0x0000 # V
|
||||
OP_HPUpdate=0x0000 # V
|
||||
OP_ManaChange=0x0000 # C
|
||||
OP_TGB=0x0000 # C
|
||||
OP_SpecialMesg=0x3bf5 # was 0x14ff
|
||||
OP_GuildMemberList=0x0000 # C
|
||||
OP_GuildMOTD=0x0000 # V
|
||||
OP_CharInventory=0x465e #
|
||||
OP_WearChange=0x0000 # V
|
||||
OP_ClientUpdate=0x7062 # was 0x7062
|
||||
OP_ClientReady=0x6cdc # was 0x6cdc
|
||||
OP_SetServerFilter=0x0000 # V
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 # C
|
||||
OP_GetGuildMOTDReply=0x0000 # C
|
||||
OP_GuildMemberUpdate=0x0000 # C
|
||||
OP_GuildInvite=0x0000 # C
|
||||
OP_GuildRemove=0x0000 # C
|
||||
OP_GuildPeace=0x0000 # C
|
||||
OP_SetGuildMOTD=0x0000 # C
|
||||
OP_GuildList=0x0000 # C
|
||||
OP_GuildWar=0x0000 # C
|
||||
OP_GuildLeader=0x0000 # C
|
||||
OP_GuildDelete=0x0000 # C
|
||||
OP_GuildInviteAccept=0x0000 # C
|
||||
OP_GuildDemote=0x0000 # C
|
||||
OP_GuildPublicNote=0x0000 # C
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 # C
|
||||
OP_GMBecomeNPC=0x0000 # C
|
||||
OP_GMZoneRequest=0x6f79 # was 0x18ea
|
||||
OP_GMZoneRequest2=0x02d6 # was 0x3ad9
|
||||
OP_GMGoto=0x0000 # C
|
||||
OP_GMSearchCorpse=0x0000 # C
|
||||
OP_GMHideMe=0x0000 # C
|
||||
OP_GMDelCorpse=0x0000 # C
|
||||
OP_GMApproval=0x0000 # C
|
||||
OP_GMToggle=0x0000 # C 0x0000
|
||||
OP_GMSummon=0x0000 # C
|
||||
OP_GMEmoteZone=0x0000 # C
|
||||
OP_GMEmoteWorld=0x0000 # C
|
||||
OP_GMFind=0x0000 # C
|
||||
OP_GMKick=0x0000 # C
|
||||
OP_GMKill=0x0000 # C
|
||||
OP_GMNameChange=0x0000 # C
|
||||
OP_GMLastName=0x0000 # C
|
||||
|
||||
OP_InspectAnswer=0x0000 # C
|
||||
OP_BeginCast=0x0000 # C
|
||||
OP_BuffFadeMsg=0x50c2 # C
|
||||
OP_ConsentResponse=0x0000 # C
|
||||
OP_MemorizeSpell=0x0000 # C
|
||||
OP_SwapSpell=0x0000 # C
|
||||
OP_CastSpell=0x7286 # C
|
||||
OP_Consider=0x0000 # C
|
||||
OP_FormattedMessage=0x0000 # C
|
||||
OP_SimpleMessage=0x0000 # C 0x0000
|
||||
OP_Buff=0x0000 # C
|
||||
OP_Illusion=0x0000 # C
|
||||
OP_MoneyOnCorpse=0x0000 # C
|
||||
OP_RandomReply=0x0000 # C
|
||||
OP_DenyResponse=0x0000 # C
|
||||
OP_SkillUpdate=0x0000 # C
|
||||
OP_GMTrainSkillConfirm=0x0000 # C
|
||||
OP_RandomReq=0x0000 # C
|
||||
OP_Death=0x0000 # C
|
||||
OP_Bind_Wound=0x0000 # C
|
||||
OP_GMTraining=0x0000 # C
|
||||
OP_GMEndTraining=0x0000 # C
|
||||
OP_GMTrainSkill=0x0000 # C
|
||||
OP_Animation=0x0000 # Was 0x0000
|
||||
OP_Begging=0x0000 # C
|
||||
OP_Consent=0x0000 # C
|
||||
OP_ConsentDeny=0x0000 # C
|
||||
OP_AutoFire=0x0000 # C
|
||||
OP_PetCommands=0x0000 # C
|
||||
OP_DeleteSpell=0x0000 # C
|
||||
OP_Surname=0x0000 # C
|
||||
OP_ClearSurname=0x0000 # C
|
||||
OP_FaceChange=0x0000 # C
|
||||
OP_SenseHeading=0x0000 # C
|
||||
OP_Action=0x1513 # C
|
||||
OP_ConsiderCorpse=0x0000 # C
|
||||
OP_HideCorpse=0x0000 # C 0x0000
|
||||
OP_Bug=0x0000 # C
|
||||
OP_Feedback=0x0000 # C
|
||||
OP_Report=0x0000 # C
|
||||
OP_Damage=0x7519 # C or OP_Action2?
|
||||
OP_ChannelMessage=0x2e79 # was 0x2e79
|
||||
OP_Assist=0x0000 # C
|
||||
OP_AssistGroup=0x0000 # C
|
||||
OP_MoveCoin=0x0000 # C
|
||||
OP_ZonePlayerToBind=0x0000 # C
|
||||
OP_KeyRing=0x0000 # C
|
||||
OP_WhoAllRequest=0x0000 # C
|
||||
OP_WhoAllResponse=0x0000 # C
|
||||
OP_FriendsWho=0x0000 # C
|
||||
OP_ConfirmDelete=0x0000 # V
|
||||
OP_Logout=0x44ae # was 0x64ec
|
||||
OP_Rewind=0x0000 # C
|
||||
OP_TargetCommand=0x0000 # C Was 0x0000
|
||||
OP_InspectRequest=0x0000 # C
|
||||
OP_Hide=0x0000 # C
|
||||
OP_Jump=0x0000 # C
|
||||
OP_Camp=0x42ef # C
|
||||
OP_Emote=0x0000 # C
|
||||
OP_SetRunMode=0x0000 # C
|
||||
OP_BankerChange=0x0000 # C
|
||||
OP_TargetMouse=0x36f8 # C 0x0000
|
||||
OP_MobHealth=0x0000 # C
|
||||
OP_InitialMobHealth=0x0000 # C
|
||||
OP_TargetHoTT=0x0000 # C
|
||||
OP_TargetBuffs=0x0000 # C
|
||||
OP_BuffCreate=0x6bfb # V
|
||||
OP_DeleteSpawn=0x7434 # was 0x7434
|
||||
OP_AutoAttack=0x0000 # C
|
||||
OP_AutoAttack2=0x0000 # C
|
||||
OP_Consume=0x0000 # V
|
||||
OP_MoveItem=0x0000 # C
|
||||
OP_DeleteItem=0x0000 # C
|
||||
OP_DeleteCharge=0x0000 # C
|
||||
OP_ItemPacket=0x7c87 #
|
||||
OP_ItemLinkResponse=0x0000 # C
|
||||
OP_ItemLinkClick=0x0000 # C
|
||||
OP_NewSpawn=0x0000 # C
|
||||
OP_Track=0x0000 # C
|
||||
OP_TrackTarget=0x0000 # C
|
||||
OP_TrackUnknown=0x0000 # C
|
||||
OP_ClickDoor=0x3154 #
|
||||
OP_MoveDoor=0x470e #
|
||||
OP_EnvDamage=0x0000 # C
|
||||
OP_BoardBoat=0x0000 # C
|
||||
OP_Forage=0x0000 # C
|
||||
OP_LeaveBoat=0x0000 # C
|
||||
OP_ControlBoat=0x0000 # C
|
||||
OP_SafeFallSuccess=0x0000 # C
|
||||
OP_RezzComplete=0x0000 # C
|
||||
OP_RezzRequest=0x0000 # C
|
||||
OP_RezzAnswer=0x0000 # C
|
||||
OP_Shielding=0x0000 # C
|
||||
OP_RequestDuel=0x0000 # C
|
||||
OP_MobRename=0x0000 # C
|
||||
OP_AugmentItem=0x0000 # C
|
||||
OP_WeaponEquip1=0x0000 # C
|
||||
OP_WeaponEquip2=0x0000 # C
|
||||
OP_WeaponUnequip2=0x0000 # C
|
||||
OP_ApplyPoison=0x0000 # C
|
||||
OP_Save=0x0000 # C
|
||||
OP_TestBuff=0x0000 # C
|
||||
OP_CustomTitles=0x0000 # C
|
||||
OP_Split=0x0000 # C
|
||||
OP_YellForHelp=0x0000 # C
|
||||
OP_LoadSpellSet=0x0000 # C
|
||||
OP_Bandolier=0x0000 # C
|
||||
OP_PotionBelt=0x0000 # C
|
||||
OP_DuelResponse=0x0000 # C
|
||||
OP_DuelResponse2=0x0000 # C
|
||||
OP_SaveOnZoneReq=0x2913 # was 0x2913
|
||||
OP_ReadBook=0x0000 # C
|
||||
OP_Dye=0x0000 # C
|
||||
OP_InterruptCast=0x0000 # C
|
||||
OP_AAAction=0x0000 # C
|
||||
OP_LeadershipExpToggle=0x0000 # C
|
||||
OP_LeadershipExpUpdate=0x0000 # C
|
||||
OP_PurchaseLeadershipAA=0x0000 # C
|
||||
OP_UpdateLeadershipAA=0x0000 # C
|
||||
OP_MarkNPC=0x0000 # C
|
||||
OP_ClearNPCMarks=0x0000 # C
|
||||
OP_DoGroupLeadershipAbility=0x0000 # C
|
||||
OP_GroupLeadershipAAUpdate=0x0000 # C
|
||||
OP_DelegateAbility=0x0000 # C
|
||||
OP_SetGroupTarget=0x0000 # C
|
||||
OP_Charm=0x0000 # C
|
||||
OP_Stun=0x0000 # C
|
||||
OP_SendFindableNPCs=0x390c # C
|
||||
OP_FindPersonRequest=0x0000 # C
|
||||
OP_FindPersonReply=0x0000 # C
|
||||
OP_Sound=0x0000 # C
|
||||
OP_PetBuffWindow=0x0000 # C
|
||||
OP_LevelAppearance=0x0000 # C
|
||||
OP_Translocate=0x0000 # C
|
||||
OP_Sacrifice=0x0000 # C
|
||||
OP_PopupResponse=0x0000 # C
|
||||
OP_OnLevelMessage=0x0000 # C
|
||||
OP_AugmentInfo=0x0000 # C
|
||||
OP_Petition=0x0000 # C
|
||||
OP_SomeItemPacketMaybe=0x4200 # C
|
||||
OP_SomeItemPacketMaybe=0x0000 # C
|
||||
OP_PVPStats=0x0000 # C
|
||||
OP_PVPLeaderBoardRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardReply=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 # C
|
||||
OP_RestState=0x0000 # C
|
||||
OP_RespawnWindow=0x0000 # C
|
||||
OP_DisciplineTimer=0x0000 # C
|
||||
OP_LDoNButton=0x0000 # C
|
||||
OP_SetStartCity=0x0000 # C
|
||||
OP_VoiceMacroIn=0x0000 # C
|
||||
OP_VoiceMacroOut=0x0000 # C
|
||||
OP_ItemViewUnknown=0x0000 # C
|
||||
OP_VetRewardsAvaliable=0x0000 # C Mispelled?
|
||||
OP_VetClaimRequest=0x0000 # C
|
||||
OP_VetClaimReply=0x0000 # C
|
||||
OP_CrystalCountUpdate=0x0000 # C
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 # C OP_Damage?
|
||||
OP_MobUpdate=0x4656 # was 0x4656
|
||||
OP_NPCMoveUpdate=0x38e0 #
|
||||
OP_CameraEffect=0x0000 # V
|
||||
OP_SpellEffect=0x0000 # V
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # C
|
||||
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
|
||||
OP_LootItem=0x0000 # C
|
||||
OP_LootComplete=0x0000 # C
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 # C
|
||||
OP_TraderDelItem=0x0000 # C
|
||||
OP_BecomeTrader=0x0000 # C
|
||||
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 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 # C
|
||||
OP_TradeAcceptClick=0x0000 # C
|
||||
OP_TradeRequestAck=0x0000 # C
|
||||
OP_TradeCoins=0x0000 # C
|
||||
OP_FinishTrade=0x0000 # C
|
||||
OP_CancelTrade=0x0000 # C
|
||||
OP_TradeMoneyUpdate=0x0000 # C
|
||||
OP_MoneyUpdate=0x0000 # C
|
||||
OP_TradeBusy=0x0000 # C
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 # C
|
||||
OP_FinishWindow2=0x0000 # C
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 # C
|
||||
OP_ItemVerifyReply=0x0000 # C
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 # C
|
||||
OP_ShopRequest=0x58c5 # was 0x1044
|
||||
OP_ShopEnd=0x3753 # was 0x3753
|
||||
OP_ShopEndConfirm=0x0000 # C
|
||||
OP_ShopPlayerBuy=0x0000 # C
|
||||
OP_ShopDelItem=0x0000 # C
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 # V
|
||||
OP_ClickObjectAction=0x0000 # V
|
||||
OP_ClearObject=0x0000 # C
|
||||
OP_RecipeDetails=0x0000 # C
|
||||
OP_RecipesFavorite=0x0000 # C
|
||||
OP_RecipesSearch=0x0000 # C
|
||||
OP_RecipeReply=0x0000 # C
|
||||
OP_RecipeAutoCombine=0x0000 # C
|
||||
OP_TradeSkillCombine=0x0000 # C
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 # C
|
||||
OP_OpenTributeMaster=0x0000 # C
|
||||
OP_SelectTribute=0x0000 # C
|
||||
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 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 # C
|
||||
OP_AdventureFinish=0x0000 # C
|
||||
OP_AdventureInfoRequest=0x0000 # C
|
||||
OP_AdventureInfo=0x0000 # C
|
||||
OP_AdventureRequest=0x0000 # C
|
||||
OP_AdventureDetails=0x0000 # C
|
||||
OP_AdventureData=0x0000 # C
|
||||
OP_AdventureUpdate=0x0000 # C
|
||||
OP_AdventureMerchantRequest=0x0000 # C
|
||||
OP_AdventureMerchantResponse=0x0000 # C
|
||||
OP_AdventureMerchantPurchase=0x0000 # C
|
||||
OP_AdventureMerchantSell=0x0000 # C
|
||||
OP_AdventurePointsUpdate=0x0000 # C
|
||||
OP_AdventureStatsRequest=0x0000 # C
|
||||
OP_AdventureStatsReply=0x0000 # C
|
||||
OP_AdventureLeaderboardRequest=0x0000 # C
|
||||
OP_AdventureLeaderboardReply=0x0000 # C
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 # C
|
||||
OP_GroupInvite=0x0000 # C
|
||||
OP_GroupFollow=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_CancelInvite=0x0000 # C
|
||||
OP_GroupFollow2=0x0000 # C
|
||||
OP_GroupInvite2=0x0000 # C
|
||||
OP_GroupDisbandYou=0x0000 # C
|
||||
OP_GroupDisbandOther=0x0000 # C
|
||||
OP_GroupLeaderChange=0x0000 # C
|
||||
OP_GroupRoles=0x0000 # C
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 # C
|
||||
OP_LFGGetMatchesRequest=0x0000 # C
|
||||
OP_LFGGetMatchesResponse=0x0000 # C
|
||||
OP_LFPGetMatchesRequest=0x0000 # C
|
||||
OP_LFPGetMatchesResponse=0x0000 # C
|
||||
OP_LFPCommand=0x0000 # C
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 # C
|
||||
OP_RaidUpdate=0x0000 # C
|
||||
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_Disarm=0x0000 # C
|
||||
OP_Sneak=0x0000 # C
|
||||
OP_Fishing=0x0000 # C
|
||||
OP_InstillDoubt=0x0000 # C
|
||||
OP_FeignDeath=0x0000 # C
|
||||
OP_Mend=0x0000 # C
|
||||
OP_LDoNOpen=0x0000 # C
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 # C
|
||||
OP_TaskMemberList=0x0000 # C
|
||||
OP_OpenNewTasksWindow=0x0000 # C
|
||||
OP_AvaliableTask=0x0000 # C Mispelled?
|
||||
OP_AcceptNewTask=0x0000 # C
|
||||
OP_TaskHistoryRequest=0x0000 # C
|
||||
OP_TaskHistoryReply=0x0000 # C
|
||||
OP_CancelTask=0x0000 # C
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 # C
|
||||
OP_RequestTitles=0x0000 # C
|
||||
OP_SendTitleList=0x0000 # C
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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_OPCode2511=0x2511
|
||||
@@ -0,0 +1,607 @@
|
||||
# OPCodes that are not used by EQExtractor2 for SQL generation and have a none 0x0000 value are most likely incorrect.
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x4d5c #c
|
||||
OP_ApproveWorld=0x655c #c
|
||||
OP_LogServer=0x1497 #c
|
||||
OP_SendCharInfo=0x1513 #
|
||||
OP_ExpansionInfo=0x1771 #
|
||||
OP_GuildsList=0x5b0b #
|
||||
OP_EnterWorld=0x710e #c
|
||||
OP_PostEnterWorld=0x7930 #c
|
||||
OP_World_Client_CRC1=0x4552 #
|
||||
OP_World_Client_CRC2=0x3e50 #
|
||||
OP_SendSpellChecksum=0x0000 #
|
||||
OP_SendSkillCapsChecksum=0x0000 #
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 #
|
||||
OP_CharacterCreateRequest=0x0000 #
|
||||
OP_CharacterCreate=0x0000 #
|
||||
OP_RandomNameGenerator=0x0000 #
|
||||
OP_ApproveName=0x0000 #
|
||||
|
||||
OP_MOTD=0x097f #
|
||||
OP_SetChatServer=0x2c38 #c
|
||||
OP_SetChatServer2=0x675c #c
|
||||
OP_ZoneServerInfo=0x16f5 #c
|
||||
OP_WorldComplete=0x3aef #
|
||||
OP_WorldUnknown001=0x0000 #
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 #
|
||||
OP_ZoneEntry=0x5821 #
|
||||
OP_ReqNewZone=0x1c36 #
|
||||
OP_NewZone=0x4118 #
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x3f55 #c
|
||||
OP_TributeUpdate=0x4895 #
|
||||
OP_TributeTimer=0x0000 #
|
||||
OP_TaskDescription=0x0000 #
|
||||
OP_TaskActivity=0x0000 #
|
||||
OP_CompletedTasks=0x6d1f #c
|
||||
OP_Weather=0x4658 #
|
||||
OP_SendAATable=0x72f3 #
|
||||
OP_UpdateAA=0x0000 #
|
||||
OP_RespondAA=0x0000 #
|
||||
OP_ReqClientSpawn=0x47e7 #
|
||||
OP_SpawnDoor=0x0e24 #
|
||||
OP_GroundSpawn=0x5c85 #
|
||||
OP_SendZonepoints=0x399f #
|
||||
OP_SendAAStats=0x0000 #
|
||||
OP_WorldObjectsSent=0x7b73 #
|
||||
OP_BlockedBuffs=0x664a #
|
||||
OP_SendExpZonein=0x54e8 #
|
||||
OP_SendTributes=0x0000 #
|
||||
OP_TributeInfo=0x0000 #
|
||||
OP_SendGuildTributes=0x0000 #
|
||||
OP_AAExpUpdate=0x0000 #
|
||||
OP_ExpUpdate=0x0000 #
|
||||
OP_HPUpdate=0x2369 #c
|
||||
OP_ManaChange=0x0000 #
|
||||
OP_TGB=0x0000 #
|
||||
OP_SpecialMesg=0x156c #
|
||||
OP_GuildMemberList=0x51bc #
|
||||
OP_GuildMOTD=0x0a1d #
|
||||
OP_CharInventory=0x4849 #c
|
||||
OP_WearChange=0x1a58 #c
|
||||
OP_ClientUpdate=0x7062 #
|
||||
OP_ClientReady=0x6cdc #
|
||||
OP_SetServerFilter=0x053a #c
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 #
|
||||
OP_GetGuildMOTDReply=0x0000 #
|
||||
OP_GuildMemberUpdate=0x0000 #
|
||||
OP_GuildInvite=0x0000 #
|
||||
OP_GuildRemove=0x0000 #
|
||||
OP_GuildPeace=0x0000 #
|
||||
OP_SetGuildMOTD=0x0000 #
|
||||
OP_GuildList=0x5b0b #
|
||||
OP_GuildWar=0x0000 #
|
||||
OP_GuildLeader=0x0000 #
|
||||
OP_GuildDelete=0x0000 #
|
||||
OP_GuildInviteAccept=0x0000 #
|
||||
OP_GuildDemote=0x0000 #
|
||||
OP_GuildPublicNote=0x0000 #
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 #
|
||||
OP_GMBecomeNPC=0x0000 #
|
||||
OP_GMZoneRequest=0x6f79 #
|
||||
OP_GMZoneRequest2=0x02d6 #
|
||||
OP_GMGoto=0x0000 #
|
||||
OP_GMSearchCorpse=0x0000 #
|
||||
OP_GMHideMe=0x0000 #
|
||||
OP_GMDelCorpse=0x0000 #
|
||||
OP_GMApproval=0x0000 #
|
||||
OP_GMToggle=0x0000 #
|
||||
OP_GMSummon=0x0000 #
|
||||
OP_GMEmoteZone=0x0000 #
|
||||
OP_GMEmoteWorld=0x0000 #
|
||||
OP_GMFind=0x0000 #
|
||||
OP_GMKick=0x0000 #
|
||||
OP_GMKill=0x0000 #
|
||||
OP_GMNameChange=0x0000 #
|
||||
OP_GMLastName=0x0000 #
|
||||
|
||||
OP_InspectAnswer=0x0000 #
|
||||
OP_BeginCast=0x0d5a #
|
||||
OP_BuffFadeMsg=0x50c2 #
|
||||
OP_ConsentResponse=0x0000 #
|
||||
OP_MemorizeSpell=0x0000 #
|
||||
OP_SwapSpell=0x0000 #
|
||||
OP_CastSpell=0x7286 #
|
||||
OP_Consider=0x70c6 #c
|
||||
OP_FormattedMessage=0x32c6 #
|
||||
OP_SimpleMessage=0x0000 # C 0x0000
|
||||
OP_Buff=0x0000 #
|
||||
OP_Illusion=0x4843 #c
|
||||
OP_MoneyOnCorpse=0x0000 #
|
||||
OP_RandomReply=0x0000 #
|
||||
OP_DenyResponse=0x0000 #
|
||||
OP_SkillUpdate=0x0000 #
|
||||
OP_GMTrainSkillConfirm=0x0000 #
|
||||
OP_RandomReq=0x0000 #
|
||||
OP_Death=0x49b6 #
|
||||
OP_Bind_Wound=0x0000 #
|
||||
OP_GMTraining=0x0000 #
|
||||
OP_GMEndTraining=0x0000 #
|
||||
OP_GMTrainSkill=0x0000 #
|
||||
OP_Animation=0x0b93 #c
|
||||
OP_Begging=0x0000 #
|
||||
OP_Consent=0x0000 #
|
||||
OP_ConsentDeny=0x0000 #
|
||||
OP_AutoFire=0x0000 #
|
||||
OP_PetCommands=0x0000 #
|
||||
OP_DeleteSpell=0x0000 #
|
||||
OP_Surname=0x0000 #
|
||||
OP_ClearSurname=0x0000 #
|
||||
OP_FaceChange=0x0000 #
|
||||
OP_SenseHeading=0x0000 #
|
||||
OP_Action=0x0000 # 0x4200
|
||||
OP_ConsiderCorpse=0x0000 #
|
||||
OP_HideCorpse=0x0000 #
|
||||
OP_Bug=0x0000 #
|
||||
OP_Feedback=0x0000 #
|
||||
OP_Report=0x0000 #
|
||||
OP_Damage=0x7519 #
|
||||
OP_ChannelMessage=0x2e79 #
|
||||
OP_Assist=0x0000 #
|
||||
OP_AssistGroup=0x0000 #
|
||||
OP_MoveCoin=0x0000 #
|
||||
OP_ZonePlayerToBind=0x0000 #
|
||||
OP_KeyRing=0x0000 #
|
||||
OP_WhoAllRequest=0x0000 #
|
||||
OP_WhoAllResponse=0x0000 #
|
||||
OP_FriendsWho=0x0000 #
|
||||
OP_ConfirmDelete=0x0000 #
|
||||
OP_Logout=0x517b #
|
||||
OP_Rewind=0x0000 #
|
||||
OP_TargetCommand=0x0000 #
|
||||
OP_InspectRequest=0x0000 #
|
||||
OP_Hide=0x0000 #
|
||||
OP_Jump=0x0000 #
|
||||
OP_Camp=0x0000 # Was 0x1436
|
||||
OP_Emote=0x0000 #
|
||||
OP_SetRunMode=0x0000 #
|
||||
OP_BankerChange=0x0000 #
|
||||
OP_TargetMouse=0x3edc #
|
||||
OP_MobHealth=0x5cb0 #c
|
||||
OP_InitialMobHealth=0x0000 #
|
||||
OP_TargetHoTT=0x0000 #
|
||||
OP_TargetBuffs=0x0000 #
|
||||
OP_BuffCreate=0x0000
|
||||
OP_DeleteSpawn=0x58c5 #c
|
||||
OP_AutoAttack=0x1df9 #
|
||||
OP_AutoAttack2=0x0000 #
|
||||
OP_Consume=0x0000 #
|
||||
OP_MoveItem=0x0000 #
|
||||
OP_DeleteItem=0x0000 #
|
||||
OP_DeleteCharge=0x0000 #
|
||||
OP_ItemPacket=0x3df8 #
|
||||
OP_ItemLinkResponse=0x0000 #
|
||||
OP_ItemLinkClick=0x0000 #
|
||||
OP_NewSpawn=0x0000 #
|
||||
OP_Track=0x0000 #
|
||||
OP_TrackTarget=0x0000 #
|
||||
OP_TrackUnknown=0x0000 #
|
||||
OP_ClickDoor=0x3154 #
|
||||
OP_MoveDoor=0x470e #
|
||||
OP_EnvDamage=0x0000 #
|
||||
OP_BoardBoat=0x0000 #
|
||||
OP_Forage=0x0000 #
|
||||
OP_LeaveBoat=0x0000 #
|
||||
OP_ControlBoat=0x0000 #
|
||||
OP_SafeFallSuccess=0x0000 #
|
||||
OP_RezzComplete=0x0000 #
|
||||
OP_RezzRequest=0x0000 #
|
||||
OP_RezzAnswer=0x0000 #
|
||||
OP_Shielding=0x0000 #
|
||||
OP_RequestDuel=0x0000 #
|
||||
OP_MobRename=0x0000 #
|
||||
OP_AugmentItem=0x0000 #
|
||||
OP_WeaponEquip1=0x7404 #c //looks like 1 & 2 use same opcode- 2nd uint32 specifies weapon 1 or 2
|
||||
OP_WeaponEquip2=0x0000 #
|
||||
OP_WeaponUnequip2=0x0000 #
|
||||
OP_ApplyPoison=0x0000 #
|
||||
OP_Save=0x1436 #
|
||||
OP_TestBuff=0x0000 #
|
||||
OP_CustomTitles=0x0000 #
|
||||
OP_Split=0x0000 #
|
||||
OP_YellForHelp=0x0000 #
|
||||
OP_LoadSpellSet=0x0000 #
|
||||
OP_Bandolier=0x0000 #
|
||||
OP_PotionBelt=0x0000 #
|
||||
OP_DuelResponse=0x0000 #
|
||||
OP_DuelResponse2=0x0000 #
|
||||
OP_SaveOnZoneReq=0x2913 #
|
||||
OP_ReadBook=0x0000 #
|
||||
OP_Dye=0x0000 #
|
||||
OP_InterruptCast=0x0000 #
|
||||
OP_AAAction=0x0000 #
|
||||
OP_LeadershipExpToggle=0x0000 #
|
||||
OP_LeadershipExpUpdate=0x0000 #
|
||||
OP_PurchaseLeadershipAA=0x0000 #
|
||||
OP_UpdateLeadershipAA=0x0000 #
|
||||
OP_MarkNPC=0x0000 #
|
||||
OP_ClearNPCMarks=0x0000 #
|
||||
OP_DoGroupLeadershipAbility=0x0000 #
|
||||
OP_GroupLeadershipAAUpdate=0x1aae #c
|
||||
OP_DelegateAbility=0x0000 #
|
||||
OP_SetGroupTarget=0x0000 #
|
||||
OP_Charm=0x0000 #
|
||||
OP_Stun=0x0000 #
|
||||
OP_SendFindableNPCs=0x3015 #
|
||||
OP_FindPersonRequest=0x0000 #
|
||||
OP_FindPersonReply=0x0000 #
|
||||
OP_Sound=0x0000 #
|
||||
OP_PetBuffWindow=0x0000 #
|
||||
OP_LevelAppearance=0x0000 #
|
||||
OP_Translocate=0x0000 #
|
||||
OP_Sacrifice=0x0000 #
|
||||
OP_PopupResponse=0x0000 #
|
||||
OP_OnLevelMessage=0x0000 #
|
||||
OP_AugmentInfo=0x0000 #
|
||||
OP_Petition=0x0000 #
|
||||
OP_SomeItemPacketMaybe=0x4200 #
|
||||
OP_SomeItemPacketMaybe=0x0000 #
|
||||
OP_PVPStats=0x0000 #
|
||||
OP_PVPLeaderBoardRequest=0x0000 #
|
||||
OP_PVPLeaderBoardReply=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 #
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 #
|
||||
OP_RestState=0x0000 #
|
||||
OP_RespawnWindow=0x0000 #
|
||||
OP_DisciplineTimer=0x0000 #
|
||||
OP_LDoNButton=0x0000 #
|
||||
OP_SetStartCity=0x0000 #
|
||||
OP_VoiceMacroIn=0x0000 #
|
||||
OP_VoiceMacroOut=0x0000 #
|
||||
OP_ItemViewUnknown=0x0000 #
|
||||
OP_VetRewardsAvaliable=0x0000 #
|
||||
OP_VetClaimRequest=0x0000 #
|
||||
OP_VetClaimReply=0x0000 #
|
||||
OP_CrystalCountUpdate=0x0000 #
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 #
|
||||
OP_MobUpdate=0x4656 #
|
||||
OP_NPCMoveUpdate=0x2339 #
|
||||
OP_CameraEffect=0x0000 #
|
||||
OP_SpellEffect=0x0000 #
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 #
|
||||
OP_ManaUpdate=0x7c94 #c
|
||||
OP_EnduranceUpdate=0x5851 #c
|
||||
OP_MobManaUpdate=0x190c #c
|
||||
OP_MobEnduranceUpdate=0x4d27 #c
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x0000 #
|
||||
OP_EndLootRequest=0x0000 #
|
||||
OP_LootItem=0x0000 #
|
||||
OP_LootComplete=0x0000 #
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 #
|
||||
OP_TraderDelItem=0x0000 #
|
||||
OP_BecomeTrader=0x0000 #
|
||||
OP_TraderShop=0x0000 #
|
||||
OP_Trader=0x0000 #
|
||||
OP_TraderBuy=0x0000 #
|
||||
OP_Barter=0x0000 #
|
||||
OP_ShopItem=0x0000 #
|
||||
OP_BazaarInspect=0x0000 #
|
||||
OP_Bazaar=0x0000 #
|
||||
OP_TraderItemUpdate=0x0000 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 #
|
||||
OP_TradeAcceptClick=0x0000 #
|
||||
OP_TradeRequestAck=0x0000 #
|
||||
OP_TradeCoins=0x0000 #
|
||||
OP_FinishTrade=0x0000 #
|
||||
OP_CancelTrade=0x0000 #
|
||||
OP_TradeMoneyUpdate=0x0000 #
|
||||
OP_MoneyUpdate=0x0000 #
|
||||
OP_TradeBusy=0x0000 #
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 #
|
||||
OP_FinishWindow2=0x0000 #
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 #
|
||||
OP_ItemVerifyReply=0x0000 #
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 #
|
||||
OP_ShopRequest=0x442a #
|
||||
OP_ShopEnd=0x078e #
|
||||
OP_ShopEndConfirm=0x0000 #
|
||||
OP_ShopPlayerBuy=0x0000 #
|
||||
OP_ShopDelItem=0x0000 #
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 #
|
||||
OP_ClickObjectAction=0x0000 #
|
||||
OP_ClearObject=0x0000 #
|
||||
OP_RecipeDetails=0x0000 #
|
||||
OP_RecipesFavorite=0x0000 #
|
||||
OP_RecipesSearch=0x0000 #
|
||||
OP_RecipeReply=0x0000 #
|
||||
OP_RecipeAutoCombine=0x0000 #
|
||||
OP_TradeSkillCombine=0x0000 #
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 #
|
||||
OP_OpenTributeMaster=0x0000 #
|
||||
OP_SelectTribute=0x0000 #
|
||||
OP_TributeItem=0x0000 #
|
||||
OP_TributeMoney=0x0000 #
|
||||
OP_TributeToggle=0x0000 #
|
||||
OP_TributePointUpdate=0x0000 #
|
||||
OP_TributeNPC=0x0000 #
|
||||
OP_GuildTributeInfo=0x0000 #
|
||||
OP_OpenTributeReply=0x0000 #
|
||||
# OP_GuildTributeStatus=0x0000 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 #
|
||||
OP_AdventureFinish=0x0000 #
|
||||
OP_AdventureInfoRequest=0x0000 #
|
||||
OP_AdventureInfo=0x0000 #
|
||||
OP_AdventureRequest=0x0000 #
|
||||
OP_AdventureDetails=0x0000 #
|
||||
OP_AdventureData=0x0000 #
|
||||
OP_AdventureUpdate=0x0000 #
|
||||
OP_AdventureMerchantRequest=0x0000 #
|
||||
OP_AdventureMerchantResponse=0x0000 #
|
||||
OP_AdventureMerchantPurchase=0x0000 #
|
||||
OP_AdventureMerchantSell=0x0000 #
|
||||
OP_AdventurePointsUpdate=0x0000 #
|
||||
OP_AdventureStatsRequest=0x0000 #
|
||||
OP_AdventureStatsReply=0x0000 #
|
||||
OP_AdventureLeaderboardRequest=0x0000 #
|
||||
OP_AdventureLeaderboardReply=0x0000 #
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 #
|
||||
OP_GroupInvite=0x3671 #c
|
||||
OP_GroupFollow=0x0000 #
|
||||
OP_GroupUpdate=0x4b82 #c
|
||||
OP_GroupUpdateB=0x44c2 #c
|
||||
OP_GroupCancelInvite=0x0000 #
|
||||
OP_GroupAcknowledge=0x0000 #
|
||||
OP_GroupDelete=0x0000 #
|
||||
OP_CancelInvite=0x0000 #
|
||||
OP_GroupFollow2=0x0000 #
|
||||
OP_GroupInvite2=0x0000 #
|
||||
OP_GroupDisbandYou=0x0000 #
|
||||
OP_GroupDisbandOther=0x0000 #
|
||||
OP_GroupLeaderChange=0x0000 #
|
||||
OP_GroupRoles=0x6364 #c
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 #
|
||||
OP_LFGGetMatchesRequest=0x0000 #
|
||||
OP_LFGGetMatchesResponse=0x0000 #
|
||||
OP_LFPGetMatchesRequest=0x0000 #
|
||||
OP_LFPGetMatchesResponse=0x0000 #
|
||||
OP_LFPCommand=0x0000 #
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 #
|
||||
OP_RaidUpdate=0x0c08 #
|
||||
OP_RaidJoin=0x0000 #
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x0000 #
|
||||
OP_CombatAbility=0x0000 #
|
||||
OP_SenseTraps=0x0000 #
|
||||
OP_PickPocket=0x0000 #
|
||||
OP_DisarmTraps=0x0000 #
|
||||
OP_Disarm=0x0000 #
|
||||
OP_Sneak=0x0000 #
|
||||
OP_Fishing=0x0000 #
|
||||
OP_InstillDoubt=0x0000 #
|
||||
OP_FeignDeath=0x0000 #
|
||||
OP_Mend=0x0000 #
|
||||
OP_LDoNOpen=0x0000 #
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 #
|
||||
OP_TaskMemberList=0x0000 #
|
||||
OP_OpenNewTasksWindow=0x0000 #
|
||||
OP_AvaliableTask=0x0000 #
|
||||
OP_AcceptNewTask=0x0000 #
|
||||
OP_TaskHistoryRequest=0x0000 #
|
||||
OP_TaskHistoryReply=0x0000 #
|
||||
OP_CancelTask=0x0000 #
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 #
|
||||
OP_RequestTitles=0x0000 #
|
||||
OP_SendTitleList=0x0000 #
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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_MercenaryDataRequest=0x33b8 #c
|
||||
OP_MercenaryDataResponse=0x0327 #c
|
||||
OP_MercenaryHire=0x0000 #
|
||||
OP_MercenaryAssign=0x0000 #
|
||||
OP_MercenaryTimer=0x0000 #
|
||||
OP_MercenaryUnknown1=0x0000 #
|
||||
@@ -0,0 +1,610 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x0000a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x2683 # V
|
||||
OP_ApproveWorld=0x28a7 # C
|
||||
OP_LogServer=0x224f # C
|
||||
OP_SendCharInfo=0x2c27 # C
|
||||
OP_ExpansionInfo=0x1771 # C
|
||||
OP_GuildsList=0x5b0b # C
|
||||
OP_EnterWorld=0x4f60 # C
|
||||
OP_PostEnterWorld=0x570c # C
|
||||
OP_World_Client_CRC1=0x0000 # C
|
||||
OP_World_Client_CRC2=0x0000 # C
|
||||
OP_SendSpellChecksum=0x0000 # C
|
||||
OP_SendSkillCapsChecksum=0x0000 # C
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 # C
|
||||
OP_CharacterCreateRequest=0x0000 # C
|
||||
OP_CharacterCreate=0x0000 # C
|
||||
OP_RandomNameGenerator=0x0000 # C 0x0000
|
||||
OP_ApproveName=0x0000 # C
|
||||
|
||||
OP_MOTD=0x7312 # C 0x0000
|
||||
OP_SetChatServer=0x1ce3 # C 0x0000
|
||||
OP_SetChatServer2=0x0000 # C 0x0000
|
||||
OP_ZoneServerInfo=0x03cc # C 0x0000
|
||||
OP_WorldComplete=0x1524 # C
|
||||
OP_WorldUnknown001=0x0000 # C 0x0000
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 # V
|
||||
OP_ZoneEntry=0x538f # V
|
||||
OP_ReqNewZone=0x5ca5 # V
|
||||
OP_NewZone=0x0254 # V
|
||||
OP_ZoneSpawns=0x0000 # ?
|
||||
OP_PlayerProfile=0x6022 # V
|
||||
OP_TimeOfDay=0x6015 # V
|
||||
OP_LevelUpdate=0x0000 # V
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x0000 # V
|
||||
OP_TributeUpdate=0x7b87 # V
|
||||
OP_TributeTimer=0x0000 # C
|
||||
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_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_WorldObjectsSent=0x7b73 # V
|
||||
OP_BlockedBuffs=0x4027 # V
|
||||
OP_SendExpZonein=0x1436 # V
|
||||
OP_SendTributes=0x0000 # V
|
||||
OP_TributeInfo=0x0000 # V
|
||||
OP_SendGuildTributes=0x0000 # C 0x0000
|
||||
OP_AAExpUpdate=0x0000 # V
|
||||
OP_ExpUpdate=0x0000 # V
|
||||
OP_HPUpdate=0x0000 # V
|
||||
OP_ManaChange=0x0000 # C
|
||||
OP_TGB=0x0000 # C
|
||||
OP_SpecialMesg=0x14ff # V
|
||||
OP_GuildMemberList=0x0000 # C
|
||||
OP_GuildMOTD=0x0000 # V
|
||||
OP_CharInventory=0x79e0 # V
|
||||
OP_WearChange=0x0000 # V
|
||||
OP_ClientUpdate=0x7062 # V
|
||||
OP_ClientReady=0x6cdc # V
|
||||
OP_SetServerFilter=0x0000 # V
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 # C
|
||||
OP_GetGuildMOTDReply=0x0000 # C
|
||||
OP_GuildMemberUpdate=0x0000 # C
|
||||
OP_GuildInvite=0x0000 # C
|
||||
OP_GuildRemove=0x0000 # C
|
||||
OP_GuildPeace=0x0000 # C
|
||||
OP_SetGuildMOTD=0x0000 # C
|
||||
OP_GuildList=0x0000 # C
|
||||
OP_GuildWar=0x0000 # C
|
||||
OP_GuildLeader=0x0000 # C
|
||||
OP_GuildDelete=0x0000 # C
|
||||
OP_GuildInviteAccept=0x0000 # C
|
||||
OP_GuildDemote=0x0000 # C
|
||||
OP_GuildPublicNote=0x0000 # C
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 # C
|
||||
OP_GMBecomeNPC=0x0000 # C
|
||||
OP_GMZoneRequest=0x18ea # C
|
||||
OP_GMZoneRequest2=0x3ad9 # C
|
||||
OP_GMGoto=0x0000 # C
|
||||
OP_GMSearchCorpse=0x0000 # C
|
||||
OP_GMHideMe=0x0000 # C
|
||||
OP_GMDelCorpse=0x0000 # C
|
||||
OP_GMApproval=0x0000 # C
|
||||
OP_GMToggle=0x0000 # C 0x0000
|
||||
OP_GMSummon=0x0000 # C
|
||||
OP_GMEmoteZone=0x0000 # C
|
||||
OP_GMEmoteWorld=0x0000 # C
|
||||
OP_GMFind=0x0000 # C
|
||||
OP_GMKick=0x0000 # C
|
||||
OP_GMKill=0x0000 # C
|
||||
OP_GMNameChange=0x0000 # C
|
||||
OP_GMLastName=0x0000 # C
|
||||
|
||||
OP_InspectAnswer=0x0000 # C
|
||||
OP_BeginCast=0x0000 # C
|
||||
OP_BuffFadeMsg=0x0000 # C
|
||||
OP_ConsentResponse=0x0000 # C
|
||||
OP_MemorizeSpell=0x0000 # C
|
||||
OP_SwapSpell=0x0000 # C
|
||||
OP_CastSpell=0x7286 # C
|
||||
OP_Consider=0x0000 # C
|
||||
OP_FormattedMessage=0x0000 # C
|
||||
OP_SimpleMessage=0x0000 # C 0x0000
|
||||
OP_Buff=0x0000 # C
|
||||
OP_Illusion=0x0000 # C
|
||||
OP_MoneyOnCorpse=0x0000 # C
|
||||
OP_RandomReply=0x0000 # C
|
||||
OP_DenyResponse=0x0000 # C
|
||||
OP_SkillUpdate=0x0000 # C
|
||||
OP_GMTrainSkillConfirm=0x0000 # C
|
||||
OP_RandomReq=0x0000 # C
|
||||
OP_Death=0x0000 # C
|
||||
OP_Bind_Wound=0x0000 # C
|
||||
OP_GMTraining=0x0000 # C
|
||||
OP_GMEndTraining=0x0000 # C
|
||||
OP_GMTrainSkill=0x0000 # C
|
||||
OP_Animation=0x0000 # Was 0x0000
|
||||
OP_Begging=0x0000 # C
|
||||
OP_Consent=0x0000 # C
|
||||
OP_ConsentDeny=0x0000 # C
|
||||
OP_AutoFire=0x0000 # C
|
||||
OP_PetCommands=0x0000 # C
|
||||
OP_DeleteSpell=0x0000 # C
|
||||
OP_Surname=0x0000 # C
|
||||
OP_ClearSurname=0x0000 # C
|
||||
OP_FaceChange=0x0000 # C
|
||||
OP_SenseHeading=0x0000 # C
|
||||
OP_Action=0x0000 # C
|
||||
OP_ConsiderCorpse=0x0000 # C
|
||||
OP_HideCorpse=0x0000 # C 0x0000
|
||||
OP_Bug=0x0000 # C
|
||||
OP_Feedback=0x0000 # C
|
||||
OP_Report=0x0000 # C
|
||||
OP_Damage=0x0000 # C or OP_Action2?
|
||||
OP_ChannelMessage=0x2e79 # C
|
||||
OP_Assist=0x0000 # C
|
||||
OP_AssistGroup=0x0000 # C
|
||||
OP_MoveCoin=0x0000 # C
|
||||
OP_ZonePlayerToBind=0x0a59 # C
|
||||
OP_KeyRing=0x0000 # C
|
||||
OP_WhoAllRequest=0x0000 # C
|
||||
OP_WhoAllResponse=0x0000 # C
|
||||
OP_FriendsWho=0x0000 # C
|
||||
OP_ConfirmDelete=0x0000 # V
|
||||
OP_Logout=0x64ec # C
|
||||
OP_Rewind=0x0000 # C
|
||||
OP_TargetCommand=0x0000 # C Was 0x0000
|
||||
OP_InspectRequest=0x0000 # C
|
||||
OP_Hide=0x0000 # C
|
||||
OP_Jump=0x0000 # C
|
||||
OP_Camp=0x0000 # C
|
||||
OP_Emote=0x0000 # C
|
||||
OP_SetRunMode=0x0000 # C
|
||||
OP_BankerChange=0x0000 # C
|
||||
OP_TargetMouse=0x36f8 # C 0x0000
|
||||
OP_MobHealth=0x0000 # C
|
||||
OP_InitialMobHealth=0x0000 # C
|
||||
OP_TargetHoTT=0x0000 # C
|
||||
OP_TargetBuffs=0x0000 # C
|
||||
OP_BuffCreate=0x0000 # V
|
||||
OP_DeleteSpawn=0x7434 # C
|
||||
OP_AutoAttack=0x0000 # C
|
||||
OP_AutoAttack2=0x0000 # C
|
||||
OP_Consume=0x0000 # V
|
||||
OP_MoveItem=0x0000 # C
|
||||
OP_DeleteItem=0x0000 # C
|
||||
OP_DeleteCharge=0x0000 # C
|
||||
OP_ItemPacket=0x032b # C
|
||||
OP_ItemLinkResponse=0x0000 # C
|
||||
OP_ItemLinkClick=0x0000 # C
|
||||
OP_NewSpawn=0x0000 # C
|
||||
OP_Track=0x0000 # C
|
||||
OP_TrackTarget=0x0000 # C
|
||||
OP_TrackUnknown=0x0000 # C
|
||||
OP_ClickDoor=0x4f1f # C
|
||||
OP_MoveDoor=0x1516 # C
|
||||
OP_EnvDamage=0x0000 # C
|
||||
OP_BoardBoat=0x0000 # C
|
||||
OP_Forage=0x0000 # C
|
||||
OP_LeaveBoat=0x0000 # C
|
||||
OP_ControlBoat=0x0000 # C
|
||||
OP_SafeFallSuccess=0x0000 # C
|
||||
OP_RezzComplete=0x0000 # C
|
||||
OP_RezzRequest=0x0000 # C
|
||||
OP_RezzAnswer=0x0000 # C
|
||||
OP_Shielding=0x0000 # C
|
||||
OP_RequestDuel=0x0000 # C
|
||||
OP_MobRename=0x0000 # C
|
||||
OP_AugmentItem=0x0000 # C
|
||||
OP_WeaponEquip1=0x0000 # C
|
||||
OP_WeaponEquip2=0x0000 # C
|
||||
OP_WeaponUnequip2=0x0000 # C
|
||||
OP_ApplyPoison=0x0000 # C
|
||||
OP_Save=0x0000 # C
|
||||
OP_TestBuff=0x0000 # C
|
||||
OP_CustomTitles=0x0000 # C
|
||||
OP_Split=0x0000 # C
|
||||
OP_YellForHelp=0x0000 # C
|
||||
OP_LoadSpellSet=0x0000 # C
|
||||
OP_Bandolier=0x0000 # C
|
||||
OP_PotionBelt=0x0000 # C
|
||||
OP_DuelResponse=0x0000 # C
|
||||
OP_DuelResponse2=0x0000 # C
|
||||
OP_SaveOnZoneReq=0x2913 # C
|
||||
OP_ReadBook=0x0000 # C
|
||||
OP_Dye=0x0000 # C
|
||||
OP_InterruptCast=0x0000 # C
|
||||
OP_AAAction=0x0000 # C
|
||||
OP_LeadershipExpToggle=0x0000 # C
|
||||
OP_LeadershipExpUpdate=0x0000 # C
|
||||
OP_PurchaseLeadershipAA=0x0000 # C
|
||||
OP_UpdateLeadershipAA=0x0000 # C
|
||||
OP_MarkNPC=0x0000 # C
|
||||
OP_ClearNPCMarks=0x0000 # C
|
||||
OP_DoGroupLeadershipAbility=0x0000 # C
|
||||
OP_GroupLeadershipAAUpdate=0x0000 # C
|
||||
OP_DelegateAbility=0x0000 # C
|
||||
OP_SetGroupTarget=0x0000 # C
|
||||
OP_Charm=0x0000 # C
|
||||
OP_Stun=0x0000 # C
|
||||
OP_SendFindableNPCs=0x162d # C
|
||||
OP_FindPersonRequest=0x0000 # C
|
||||
OP_FindPersonReply=0x0000 # C
|
||||
OP_Sound=0x0000 # C
|
||||
OP_PetBuffWindow=0x0000 # C
|
||||
OP_LevelAppearance=0x0000 # C
|
||||
OP_Translocate=0x0000 # C
|
||||
OP_Sacrifice=0x0000 # C
|
||||
OP_PopupResponse=0x0000 # C
|
||||
OP_OnLevelMessage=0x0000 # C
|
||||
OP_AugmentInfo=0x0000 # C
|
||||
OP_Petition=0x0000 # C
|
||||
OP_SomeItemPacketMaybe=0x0000 # C
|
||||
OP_PVPStats=0x0000 # C
|
||||
OP_PVPLeaderBoardRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardReply=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 # C
|
||||
OP_RestState=0x0000 # C
|
||||
OP_RespawnWindow=0x4e4e # C
|
||||
OP_DisciplineTimer=0x0000 # C
|
||||
OP_LDoNButton=0x0000 # C
|
||||
OP_SetStartCity=0x0000 # C
|
||||
OP_VoiceMacroIn=0x0000 # C
|
||||
OP_VoiceMacroOut=0x0000 # C
|
||||
OP_ItemViewUnknown=0x0000 # C
|
||||
OP_VetRewardsAvaliable=0x0000 # C Mispelled?
|
||||
OP_VetClaimRequest=0x0000 # C
|
||||
OP_VetClaimReply=0x0000 # C
|
||||
OP_CrystalCountUpdate=0x0000 # C
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 # C OP_Damage?
|
||||
OP_MobUpdate=0x4656 # Same as OP_SpawnPositionUpdate
|
||||
OP_NPCMoveUpdate=0x7adb #
|
||||
OP_CameraEffect=0x0000 # V
|
||||
OP_SpellEffect=0x0000 # V
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # C
|
||||
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
|
||||
OP_LootItem=0x0000 # C
|
||||
OP_LootComplete=0x0000 # C
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 # C
|
||||
OP_TraderDelItem=0x0000 # C
|
||||
OP_BecomeTrader=0x0000 # C
|
||||
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 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 # C
|
||||
OP_TradeAcceptClick=0x0000 # C
|
||||
OP_TradeRequestAck=0x0000 # C
|
||||
OP_TradeCoins=0x0000 # C
|
||||
OP_FinishTrade=0x0000 # C
|
||||
OP_CancelTrade=0x0000 # C
|
||||
OP_TradeMoneyUpdate=0x0000 # C
|
||||
OP_MoneyUpdate=0x0000 # C
|
||||
OP_TradeBusy=0x0000 # C
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 # C
|
||||
OP_FinishWindow2=0x0000 # C
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 # C
|
||||
OP_ItemVerifyReply=0x0000 # C
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 # C
|
||||
OP_ShopRequest=0x1044 # C
|
||||
OP_ShopEnd=0x3753 # C
|
||||
OP_ShopEndConfirm=0x0000 # C
|
||||
OP_ShopPlayerBuy=0x0000 # C
|
||||
OP_ShopDelItem=0x0000 # C
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 # V
|
||||
OP_ClickObjectAction=0x0000 # V
|
||||
OP_ClearObject=0x0000 # C
|
||||
OP_RecipeDetails=0x0000 # C
|
||||
OP_RecipesFavorite=0x0000 # C
|
||||
OP_RecipesSearch=0x0000 # C
|
||||
OP_RecipeReply=0x0000 # C
|
||||
OP_RecipeAutoCombine=0x0000 # C
|
||||
OP_TradeSkillCombine=0x0000 # C
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 # C
|
||||
OP_OpenTributeMaster=0x0000 # C
|
||||
OP_SelectTribute=0x0000 # C
|
||||
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 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 # C
|
||||
OP_AdventureFinish=0x0000 # C
|
||||
OP_AdventureInfoRequest=0x0000 # C
|
||||
OP_AdventureInfo=0x0000 # C
|
||||
OP_AdventureRequest=0x0000 # C
|
||||
OP_AdventureDetails=0x0000 # C
|
||||
OP_AdventureData=0x0000 # C
|
||||
OP_AdventureUpdate=0x0000 # C
|
||||
OP_AdventureMerchantRequest=0x0000 # C
|
||||
OP_AdventureMerchantResponse=0x0000 # C
|
||||
OP_AdventureMerchantPurchase=0x0000 # C
|
||||
OP_AdventureMerchantSell=0x0000 # C
|
||||
OP_AdventurePointsUpdate=0x0000 # C
|
||||
OP_AdventureStatsRequest=0x0000 # C
|
||||
OP_AdventureStatsReply=0x0000 # C
|
||||
OP_AdventureLeaderboardRequest=0x0000 # C
|
||||
OP_AdventureLeaderboardReply=0x0000 # C
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 # C
|
||||
OP_GroupInvite=0x0000 # C
|
||||
OP_GroupFollow=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_CancelInvite=0x0000 # C
|
||||
OP_GroupFollow2=0x0000 # C
|
||||
OP_GroupInvite2=0x0000 # C
|
||||
OP_GroupDisbandYou=0x0000 # C
|
||||
OP_GroupDisbandOther=0x0000 # C
|
||||
OP_GroupLeaderChange=0x0000 # C
|
||||
OP_GroupRoles=0x0000 # C
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 # C
|
||||
OP_LFGGetMatchesRequest=0x0000 # C
|
||||
OP_LFGGetMatchesResponse=0x0000 # C
|
||||
OP_LFPGetMatchesRequest=0x0000 # C
|
||||
OP_LFPGetMatchesResponse=0x0000 # C
|
||||
OP_LFPCommand=0x0000 # C
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 # C
|
||||
OP_RaidUpdate=0x0000 # C
|
||||
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_Disarm=0x0000 # C
|
||||
OP_Sneak=0x0000 # C
|
||||
OP_Fishing=0x0000 # C
|
||||
OP_InstillDoubt=0x0000 # C
|
||||
OP_FeignDeath=0x0000 # C
|
||||
OP_Mend=0x0000 # C
|
||||
OP_LDoNOpen=0x0000 # C
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 # C
|
||||
OP_TaskMemberList=0x0000 # C
|
||||
OP_OpenNewTasksWindow=0x0000 # C
|
||||
OP_AvaliableTask=0x0000 # C Mispelled?
|
||||
OP_AcceptNewTask=0x0000 # C
|
||||
OP_TaskHistoryRequest=0x0000 # C
|
||||
OP_TaskHistoryReply=0x0000 # C
|
||||
OP_CancelTask=0x0000 # C
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 # C
|
||||
OP_RequestTitles=0x0000 # C
|
||||
OP_SendTitleList=0x0000 # C
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
@@ -0,0 +1,612 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x0000a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x6893 # was 0x2683
|
||||
OP_ApproveWorld=0x115a # was 0x28a7
|
||||
OP_LogServer=0x701f # was 0x224f
|
||||
OP_SendCharInfo=0x1b85 # was 0x2c27
|
||||
OP_ExpansionInfo=0x1771 # Same
|
||||
OP_GuildsList=0x5b0b # Same
|
||||
OP_EnterWorld=0x3288 # was 0x4f60
|
||||
OP_PostEnterWorld=0x2f2c # was 0x570c
|
||||
OP_World_Client_CRC1=0x0000 # C
|
||||
OP_World_Client_CRC2=0x0000 # C
|
||||
OP_SendSpellChecksum=0x0000 # C
|
||||
OP_SendSkillCapsChecksum=0x0000 # C
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0000 # C
|
||||
OP_CharacterCreateRequest=0x0000 # C
|
||||
OP_CharacterCreate=0x0000 # C
|
||||
OP_RandomNameGenerator=0x0000 # C 0x0000
|
||||
OP_ApproveName=0x0000 # C
|
||||
|
||||
OP_MOTD=0x7312 # C 0x0000
|
||||
OP_SetChatServer=0x37db # was 0x1ce3
|
||||
OP_SetChatServer2=0x0000 # C 0x0000
|
||||
OP_ZoneServerInfo=0x0479 # was 0x03cc
|
||||
OP_WorldComplete=0x72f3 # was 0x1524
|
||||
OP_WorldUnknown001=0x0000 # C 0x0000
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 # was 0x3594
|
||||
OP_ZoneEntry=0x002b # was 0x538f
|
||||
OP_ReqNewZone=0x5ca5 # was 0x5ca5
|
||||
OP_NewZone=0x0254 # was 0x0254
|
||||
OP_ZoneSpawns=0x0000 # ?
|
||||
OP_PlayerProfile=0x6022 # was 0x6022
|
||||
OP_TimeOfDay=0x6015 # was 0x6015
|
||||
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 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x7b64 # V
|
||||
OP_TributeUpdate=0x0c98
|
||||
OP_TributeTimer=0x0000 # C
|
||||
OP_TaskDescription=0x0000 # C
|
||||
OP_TaskActivity=0x0000 # C
|
||||
OP_CompletedTasks=0x0000 # C 0x0000
|
||||
OP_Weather=0x7ce4 # was 0x0ed5
|
||||
OP_SendAATable=0x1bd4 # was 0x6dc3
|
||||
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_WorldObjectsSent=0x7b73 # was 0x7b73
|
||||
OP_BlockedBuffs=0x664a # was 0x4027
|
||||
OP_SendExpZonein=0x2c27 # was 0x1436
|
||||
OP_SendTributes=0x0000 # V
|
||||
OP_TributeInfo=0x0000 # V
|
||||
OP_SendGuildTributes=0x0000 # C 0x0000
|
||||
OP_AAExpUpdate=0x0000 # V
|
||||
OP_ExpUpdate=0x0000 # V
|
||||
OP_HPUpdate=0x0000 # V
|
||||
OP_ManaChange=0x0000 # C
|
||||
OP_TGB=0x0000 # C
|
||||
OP_SpecialMesg=0x3bf5 # was 0x14ff
|
||||
OP_GuildMemberList=0x0000 # C
|
||||
OP_GuildMOTD=0x0000 # V
|
||||
OP_CharInventory=0x5dbc # was 0x79e0
|
||||
OP_WearChange=0x0000 # V
|
||||
OP_ClientUpdate=0x7062 # was 0x7062
|
||||
OP_ClientReady=0x6cdc # was 0x6cdc
|
||||
OP_SetServerFilter=0x0000 # V
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x0000 # C
|
||||
OP_GetGuildMOTDReply=0x0000 # C
|
||||
OP_GuildMemberUpdate=0x0000 # C
|
||||
OP_GuildInvite=0x0000 # C
|
||||
OP_GuildRemove=0x0000 # C
|
||||
OP_GuildPeace=0x0000 # C
|
||||
OP_SetGuildMOTD=0x0000 # C
|
||||
OP_GuildList=0x0000 # C
|
||||
OP_GuildWar=0x0000 # C
|
||||
OP_GuildLeader=0x0000 # C
|
||||
OP_GuildDelete=0x0000 # C
|
||||
OP_GuildInviteAccept=0x0000 # C
|
||||
OP_GuildDemote=0x0000 # C
|
||||
OP_GuildPublicNote=0x0000 # C
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x0000 # C
|
||||
OP_GMBecomeNPC=0x0000 # C
|
||||
OP_GMZoneRequest=0x6f79 # was 0x18ea
|
||||
OP_GMZoneRequest2=0x02d6 # was 0x3ad9
|
||||
OP_GMGoto=0x0000 # C
|
||||
OP_GMSearchCorpse=0x0000 # C
|
||||
OP_GMHideMe=0x0000 # C
|
||||
OP_GMDelCorpse=0x0000 # C
|
||||
OP_GMApproval=0x0000 # C
|
||||
OP_GMToggle=0x0000 # C 0x0000
|
||||
OP_GMSummon=0x0000 # C
|
||||
OP_GMEmoteZone=0x0000 # C
|
||||
OP_GMEmoteWorld=0x0000 # C
|
||||
OP_GMFind=0x0000 # C
|
||||
OP_GMKick=0x0000 # C
|
||||
OP_GMKill=0x0000 # C
|
||||
OP_GMNameChange=0x0000 # C
|
||||
OP_GMLastName=0x0000 # C
|
||||
|
||||
OP_InspectAnswer=0x0000 # C
|
||||
OP_BeginCast=0x0000 # C
|
||||
OP_BuffFadeMsg=0x0000 # C
|
||||
OP_ConsentResponse=0x0000 # C
|
||||
OP_MemorizeSpell=0x0000 # C
|
||||
OP_SwapSpell=0x0000 # C
|
||||
OP_CastSpell=0x0000 # C
|
||||
OP_Consider=0x0000 # C
|
||||
OP_FormattedMessage=0x0000 # C
|
||||
OP_SimpleMessage=0x0000 # C 0x0000
|
||||
OP_Buff=0x0000 # C
|
||||
OP_Illusion=0x0000 # C
|
||||
OP_MoneyOnCorpse=0x0000 # C
|
||||
OP_RandomReply=0x0000 # C
|
||||
OP_DenyResponse=0x0000 # C
|
||||
OP_SkillUpdate=0x0000 # C
|
||||
OP_GMTrainSkillConfirm=0x0000 # C
|
||||
OP_RandomReq=0x0000 # C
|
||||
OP_Death=0x0000 # C
|
||||
OP_Bind_Wound=0x0000 # C
|
||||
OP_GMTraining=0x0000 # C
|
||||
OP_GMEndTraining=0x0000 # C
|
||||
OP_GMTrainSkill=0x0000 # C
|
||||
OP_Animation=0x0000 # Was 0x0000
|
||||
OP_Begging=0x0000 # C
|
||||
OP_Consent=0x0000 # C
|
||||
OP_ConsentDeny=0x0000 # C
|
||||
OP_AutoFire=0x0000 # C
|
||||
OP_PetCommands=0x0000 # C
|
||||
OP_DeleteSpell=0x0000 # C
|
||||
OP_Surname=0x0000 # C
|
||||
OP_ClearSurname=0x0000 # C
|
||||
OP_FaceChange=0x0000 # C
|
||||
OP_SenseHeading=0x0000 # C
|
||||
OP_Action=0x0000 # C
|
||||
OP_ConsiderCorpse=0x0000 # C
|
||||
OP_HideCorpse=0x0000 # C 0x0000
|
||||
OP_Bug=0x0000 # C
|
||||
OP_Feedback=0x0000 # C
|
||||
OP_Report=0x0000 # C
|
||||
OP_Damage=0x0000 # C or OP_Action2?
|
||||
OP_ChannelMessage=0x2e79 # was 0x2e79
|
||||
OP_Assist=0x0000 # C
|
||||
OP_AssistGroup=0x0000 # C
|
||||
OP_MoveCoin=0x0000 # C
|
||||
OP_ZonePlayerToBind=0x0000 # C
|
||||
OP_KeyRing=0x0000 # C
|
||||
OP_WhoAllRequest=0x0000 # C
|
||||
OP_WhoAllResponse=0x0000 # C
|
||||
OP_FriendsWho=0x0000 # C
|
||||
OP_ConfirmDelete=0x0000 # V
|
||||
OP_Logout=0x44ae # was 0x64ec
|
||||
OP_Rewind=0x0000 # C
|
||||
OP_TargetCommand=0x0000 # C Was 0x0000
|
||||
OP_InspectRequest=0x0000 # C
|
||||
OP_Hide=0x0000 # C
|
||||
OP_Jump=0x0000 # C
|
||||
OP_Camp=0x42ef # C
|
||||
OP_Emote=0x0000 # C
|
||||
OP_SetRunMode=0x0000 # C
|
||||
OP_BankerChange=0x0000 # C
|
||||
OP_TargetMouse=0x36f8 # C 0x0000
|
||||
OP_MobHealth=0x0000 # C
|
||||
OP_InitialMobHealth=0x0000 # C
|
||||
OP_TargetHoTT=0x0000 # C
|
||||
OP_TargetBuffs=0x0000 # C
|
||||
OP_BuffCreate=0x0000 # V
|
||||
OP_DeleteSpawn=0x7434 # was 0x7434
|
||||
OP_AutoAttack=0x0000 # C
|
||||
OP_AutoAttack2=0x0000 # C
|
||||
OP_Consume=0x0000 # V
|
||||
OP_MoveItem=0x0000 # C
|
||||
OP_DeleteItem=0x0000 # C
|
||||
OP_DeleteCharge=0x0000 # C
|
||||
OP_ItemPacket=0x6a30 # was 0x032b
|
||||
OP_ItemLinkResponse=0x0000 # C
|
||||
OP_ItemLinkClick=0x0000 # C
|
||||
OP_NewSpawn=0x0000 # C
|
||||
OP_Track=0x0000 # C
|
||||
OP_TrackTarget=0x0000 # C
|
||||
OP_TrackUnknown=0x0000 # C
|
||||
OP_ClickDoor=0x470e # was 0x4f1f
|
||||
OP_MoveDoor=0x48f9 # was 0x1516
|
||||
OP_EnvDamage=0x0000 # C
|
||||
OP_BoardBoat=0x0000 # C
|
||||
OP_Forage=0x0000 # C
|
||||
OP_LeaveBoat=0x0000 # C
|
||||
OP_ControlBoat=0x0000 # C
|
||||
OP_SafeFallSuccess=0x0000 # C
|
||||
OP_RezzComplete=0x0000 # C
|
||||
OP_RezzRequest=0x0000 # C
|
||||
OP_RezzAnswer=0x0000 # C
|
||||
OP_Shielding=0x0000 # C
|
||||
OP_RequestDuel=0x0000 # C
|
||||
OP_MobRename=0x0000 # C
|
||||
OP_AugmentItem=0x0000 # C
|
||||
OP_WeaponEquip1=0x0000 # C
|
||||
OP_WeaponEquip2=0x0000 # C
|
||||
OP_WeaponUnequip2=0x0000 # C
|
||||
OP_ApplyPoison=0x0000 # C
|
||||
OP_Save=0x0000 # C
|
||||
OP_TestBuff=0x0000 # C
|
||||
OP_CustomTitles=0x0000 # C
|
||||
OP_Split=0x0000 # C
|
||||
OP_YellForHelp=0x0000 # C
|
||||
OP_LoadSpellSet=0x0000 # C
|
||||
OP_Bandolier=0x0000 # C
|
||||
OP_PotionBelt=0x0000 # C
|
||||
OP_DuelResponse=0x0000 # C
|
||||
OP_DuelResponse2=0x0000 # C
|
||||
OP_SaveOnZoneReq=0x2913 # was 0x2913
|
||||
OP_ReadBook=0x0000 # C
|
||||
OP_Dye=0x0000 # C
|
||||
OP_InterruptCast=0x0000 # C
|
||||
OP_AAAction=0x0000 # C
|
||||
OP_LeadershipExpToggle=0x0000 # C
|
||||
OP_LeadershipExpUpdate=0x0000 # C
|
||||
OP_PurchaseLeadershipAA=0x0000 # C
|
||||
OP_UpdateLeadershipAA=0x0000 # C
|
||||
OP_MarkNPC=0x0000 # C
|
||||
OP_ClearNPCMarks=0x0000 # C
|
||||
OP_DoGroupLeadershipAbility=0x0000 # C
|
||||
OP_GroupLeadershipAAUpdate=0x0000 # C
|
||||
OP_DelegateAbility=0x0000 # C
|
||||
OP_SetGroupTarget=0x0000 # C
|
||||
OP_Charm=0x0000 # C
|
||||
OP_Stun=0x0000 # C
|
||||
OP_SendFindableNPCs=0x6b67 # was 0x162d
|
||||
OP_FindPersonRequest=0x0000 # C
|
||||
OP_FindPersonReply=0x0000 # C
|
||||
OP_Sound=0x0000 # C
|
||||
OP_PetBuffWindow=0x0000 # C
|
||||
OP_LevelAppearance=0x0000 # C
|
||||
OP_Translocate=0x0000 # C
|
||||
OP_Sacrifice=0x0000 # C
|
||||
OP_PopupResponse=0x0000 # C
|
||||
OP_OnLevelMessage=0x0000 # C
|
||||
OP_AugmentInfo=0x0000 # C
|
||||
OP_Petition=0x0000 # C
|
||||
OP_SomeItemPacketMaybe=0x0000 # C
|
||||
OP_PVPStats=0x0000 # C
|
||||
OP_PVPLeaderBoardRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardReply=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x0000 # C
|
||||
OP_PVPLeaderBoardDetailsReply=0x0000 # C
|
||||
OP_RestState=0x0000 # C
|
||||
OP_RespawnWindow=0x0000 # C
|
||||
OP_DisciplineTimer=0x0000 # C
|
||||
OP_LDoNButton=0x0000 # C
|
||||
OP_SetStartCity=0x0000 # C
|
||||
OP_VoiceMacroIn=0x0000 # C
|
||||
OP_VoiceMacroOut=0x0000 # C
|
||||
OP_ItemViewUnknown=0x0000 # C
|
||||
OP_VetRewardsAvaliable=0x0000 # C Mispelled?
|
||||
OP_VetClaimRequest=0x0000 # C
|
||||
OP_VetClaimReply=0x0000 # C
|
||||
OP_CrystalCountUpdate=0x0000 # C
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_Action2=0x0000 # C OP_Damage?
|
||||
OP_MobUpdate=0x4656 # was 0x4656
|
||||
OP_NPCMoveUpdate=0x38f9 # was 0x7adb
|
||||
OP_CameraEffect=0x0000 # V
|
||||
OP_SpellEffect=0x0000 # V
|
||||
|
||||
OP_DzQuit=0x0000
|
||||
OP_DzListTimers=0x0000
|
||||
OP_DzAddPlayer=0x0000
|
||||
OP_DzRemovePlayer=0x0000
|
||||
OP_DzSwapPlayer=0x0000
|
||||
OP_DzMakeLeader=0x0000
|
||||
OP_DzPlayerList=0x0000
|
||||
OP_DzJoinExpeditionConfirm=0x0000
|
||||
OP_DzJoinExpeditionReply=0x0000
|
||||
OP_DzExpeditionInfo=0x0000
|
||||
OP_DzMemberStatus=0x0000
|
||||
OP_DzLeaderStatus=0x0000
|
||||
OP_DzExpeditionEndsWarning=0x0000
|
||||
OP_DzExpeditionList=0x0000
|
||||
OP_DzMemberList=0x0000
|
||||
OP_DzCompass=0x0000
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # C
|
||||
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
|
||||
OP_LootItem=0x0000 # C
|
||||
OP_LootComplete=0x0000 # C
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x0000 # C
|
||||
OP_TraderDelItem=0x0000 # C
|
||||
OP_BecomeTrader=0x0000 # C
|
||||
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 #
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0000 # C
|
||||
OP_TradeAcceptClick=0x0000 # C
|
||||
OP_TradeRequestAck=0x0000 # C
|
||||
OP_TradeCoins=0x0000 # C
|
||||
OP_FinishTrade=0x0000 # C
|
||||
OP_CancelTrade=0x0000 # C
|
||||
OP_TradeMoneyUpdate=0x0000 # C
|
||||
OP_MoneyUpdate=0x0000 # C
|
||||
OP_TradeBusy=0x0000 # C
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x0000 # C
|
||||
OP_FinishWindow2=0x0000 # C
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x0000 # C
|
||||
OP_ItemVerifyReply=0x0000 # C
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0000 # C
|
||||
OP_ShopRequest=0x1044 # was 0x1044
|
||||
OP_ShopEnd=0x3753 # was 0x3753
|
||||
OP_ShopEndConfirm=0x0000 # C
|
||||
OP_ShopPlayerBuy=0x0000 # C
|
||||
OP_ShopDelItem=0x0000 # C
|
||||
|
||||
OP_MercenaryPurchaseWindow=0x239d
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x0000 # V
|
||||
OP_ClickObjectAction=0x0000 # V
|
||||
OP_ClearObject=0x0000 # C
|
||||
OP_RecipeDetails=0x0000 # C
|
||||
OP_RecipesFavorite=0x0000 # C
|
||||
OP_RecipesSearch=0x0000 # C
|
||||
OP_RecipeReply=0x0000 # C
|
||||
OP_RecipeAutoCombine=0x0000 # C
|
||||
OP_TradeSkillCombine=0x0000 # C
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x0000 # C
|
||||
OP_OpenTributeMaster=0x0000 # C
|
||||
OP_SelectTribute=0x0000 # C
|
||||
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 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x0000 # C
|
||||
OP_AdventureFinish=0x0000 # C
|
||||
OP_AdventureInfoRequest=0x0000 # C
|
||||
OP_AdventureInfo=0x0000 # C
|
||||
OP_AdventureRequest=0x0000 # C
|
||||
OP_AdventureDetails=0x0000 # C
|
||||
OP_AdventureData=0x0000 # C
|
||||
OP_AdventureUpdate=0x0000 # C
|
||||
OP_AdventureMerchantRequest=0x0000 # C
|
||||
OP_AdventureMerchantResponse=0x0000 # C
|
||||
OP_AdventureMerchantPurchase=0x0000 # C
|
||||
OP_AdventureMerchantSell=0x0000 # C
|
||||
OP_AdventurePointsUpdate=0x0000 # C
|
||||
OP_AdventureStatsRequest=0x0000 # C
|
||||
OP_AdventureStatsReply=0x0000 # C
|
||||
OP_AdventureLeaderboardRequest=0x0000 # C
|
||||
OP_AdventureLeaderboardReply=0x0000 # C
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x0000 # C
|
||||
OP_GroupInvite=0x0000 # C
|
||||
OP_GroupFollow=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_CancelInvite=0x0000 # C
|
||||
OP_GroupFollow2=0x0000 # C
|
||||
OP_GroupInvite2=0x0000 # C
|
||||
OP_GroupDisbandYou=0x0000 # C
|
||||
OP_GroupDisbandOther=0x0000 # C
|
||||
OP_GroupLeaderChange=0x0000 # C
|
||||
OP_GroupRoles=0x0000 # C
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x0000 # C
|
||||
OP_LFGGetMatchesRequest=0x0000 # C
|
||||
OP_LFGGetMatchesResponse=0x0000 # C
|
||||
OP_LFPGetMatchesRequest=0x0000 # C
|
||||
OP_LFPGetMatchesResponse=0x0000 # C
|
||||
OP_LFPCommand=0x0000 # C
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x0000 # C
|
||||
OP_RaidUpdate=0x0000 # C
|
||||
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_Disarm=0x0000 # C
|
||||
OP_Sneak=0x0000 # C
|
||||
OP_Fishing=0x0000 # C
|
||||
OP_InstillDoubt=0x0000 # C
|
||||
OP_FeignDeath=0x0000 # C
|
||||
OP_Mend=0x0000 # C
|
||||
OP_LDoNOpen=0x0000 # C
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x0000 # C
|
||||
OP_TaskMemberList=0x0000 # C
|
||||
OP_OpenNewTasksWindow=0x0000 # C
|
||||
OP_AvaliableTask=0x0000 # C Mispelled?
|
||||
OP_AcceptNewTask=0x0000 # C
|
||||
OP_TaskHistoryRequest=0x0000 # C
|
||||
OP_TaskHistoryReply=0x0000 # C
|
||||
OP_CancelTask=0x0000 # C
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x0000 # C
|
||||
OP_RequestTitles=0x0000 # C
|
||||
OP_SendTitleList=0x0000 # C
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x0000 # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x0000 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
@@ -0,0 +1,609 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 # used for unknown explorer
|
||||
|
||||
# V = Verified correct
|
||||
# C = Most likely correct
|
||||
# U = Unsure, but should be correct or close
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x0ff4 # C
|
||||
OP_ApproveWorld=0x701f # C
|
||||
OP_LogServer=0x4762 # C
|
||||
OP_SendCharInfo=0x0f14 # C
|
||||
OP_ExpansionInfo=0x7519 # C
|
||||
OP_GuildsList=0x5b0b # C
|
||||
OP_EnterWorld=0x1c20 # C
|
||||
OP_PostEnterWorld=0x7c94 # C
|
||||
OP_World_Client_CRC1=0x0ca5 # C
|
||||
OP_World_Client_CRC2=0x1cb3 # C
|
||||
OP_SendSpellChecksum=0x5bad # C
|
||||
OP_SendSkillCapsChecksum=0x5d24 # C
|
||||
|
||||
# Character Select Related:
|
||||
OP_DeleteCharacter=0x0254 # C
|
||||
OP_CharacterCreateRequest=0x4463 # C
|
||||
OP_CharacterCreate=0x1513 # C
|
||||
OP_RandomNameGenerator=0x3604 # C
|
||||
OP_ApproveName=0x413f # C
|
||||
|
||||
OP_MOTD=0x192e # C
|
||||
OP_SetChatServer=0x7f2b # C
|
||||
OP_SetChatServer2=0x11f3 # C
|
||||
OP_ZoneServerInfo=0x5da4 # C
|
||||
OP_WorldComplete=0x37db # C
|
||||
OP_WorldUnknown001=0x2c4c # C
|
||||
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 #
|
||||
|
||||
# Zone in opcodes
|
||||
OP_AckPacket=0x3594 # C
|
||||
OP_ZoneEntry=0x5a6b # C
|
||||
OP_ReqNewZone=0x43ac # C
|
||||
OP_NewZone=0x5ca5 # C
|
||||
OP_ZoneSpawns=0x72f8 # C
|
||||
OP_PlayerProfile=0x6022 # C
|
||||
OP_TimeOfDay=0x6015 # C
|
||||
OP_LevelUpdate=0x6a99 # C
|
||||
OP_Stamina=0x3e50 # C
|
||||
OP_LockoutTimerInfo=0x0000 #
|
||||
OP_ZoneServerReady=0x0000 #
|
||||
|
||||
OP_RequestClientZoneChange=0x4885 # C
|
||||
OP_ZoneChange=0x051b # C
|
||||
|
||||
OP_ZoneInUnknown=0x0000 #
|
||||
OP_LogoutReply=0x0000 #
|
||||
OP_PreLogoutReply=0x0000 #
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x10b7 # C
|
||||
OP_TributeUpdate=0x399b # C
|
||||
OP_TributeTimer=0x4423 # C
|
||||
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_ReqClientSpawn=0x1436 # C
|
||||
OP_SpawnDoor=0x102f # C
|
||||
OP_GroundSpawn=0x33e5 # C
|
||||
OP_SendZonepoints=0x5821 # C
|
||||
OP_SendAAStats=0x57a3 # C
|
||||
OP_WorldObjectsSent=0x7b73 # C
|
||||
OP_BlockedBuffs=0x0baa # C
|
||||
OP_SendExpZonein=0x69cd # C
|
||||
OP_SendTributes=0x4786 # C
|
||||
OP_TributeInfo=0x4cc6 # C
|
||||
OP_SendGuildTributes=0x26c4 # C
|
||||
OP_AAExpUpdate=0x3088 # C
|
||||
OP_ExpUpdate=0x0e98 # C
|
||||
OP_HPUpdate=0x538f # C
|
||||
OP_ManaChange=0x50c2 # C
|
||||
OP_TGB=0x2d74 # C
|
||||
OP_SpecialMesg=0x074f # C
|
||||
OP_GuildMemberList=0x51bc # C
|
||||
OP_GuildMOTD=0xd677 # C
|
||||
OP_CharInventory=0x709d # C
|
||||
OP_WearChange=0x231f # C
|
||||
OP_ClientUpdate=0x7062 # C
|
||||
OP_ClientReady=0x6759 # C
|
||||
OP_SetServerFilter=0x7312 # C
|
||||
|
||||
# Guild Opcodes
|
||||
OP_GetGuildMOTD=0x189e # C
|
||||
OP_GetGuildMOTDReply=0x7a16 # C
|
||||
OP_GuildMemberUpdate=0x41c0 # C
|
||||
OP_GuildInvite=0x4843 # C
|
||||
OP_GuildRemove=0x2b9d # C
|
||||
OP_GuildPeace=0x3f21 # C
|
||||
OP_SetGuildMOTD=0x481f # C
|
||||
OP_GuildList=0x5b0b # C
|
||||
OP_GuildWar=0x7bfb # C
|
||||
OP_GuildLeader=0x1055 # C
|
||||
OP_GuildDelete=0x75d0 # C
|
||||
OP_GuildInviteAccept=0x5f25 # C
|
||||
OP_GuildDemote=0x15b2 # C
|
||||
OP_GuildPublicNote=0x2dbd # C
|
||||
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 #
|
||||
|
||||
# GM/guide opcodes
|
||||
OP_GMServers=0x6989 # C
|
||||
OP_GMBecomeNPC=0x56e7 # C
|
||||
OP_GMZoneRequest=0x4578 # C
|
||||
OP_GMZoneRequest2=0x1912 # C
|
||||
OP_GMGoto=0x0402 # C
|
||||
OP_GMSearchCorpse=0x7872 # C
|
||||
OP_GMHideMe=0x34a1 # C
|
||||
OP_GMDelCorpse=0x0dda # C
|
||||
OP_GMApproval=0x72fa # C
|
||||
OP_GMToggle=0x7566 # C
|
||||
OP_GMSummon=0x596d # C
|
||||
OP_GMEmoteZone=0x3e7c # C
|
||||
OP_GMEmoteWorld=0x3e7c # C
|
||||
OP_GMFind=0x6e27 # C
|
||||
OP_GMKick=0x799c # C
|
||||
OP_GMKill=0x6685 # C
|
||||
OP_GMNameChange=0x565d # C
|
||||
OP_GMLastName=0x3563 # C
|
||||
|
||||
OP_InspectAnswer=0x4938 # C
|
||||
OP_Action2=0x7e4d # C OP_Damage?
|
||||
OP_BeginCast=0x0d5a # C
|
||||
OP_BuffFadeMsg=0x569a # C
|
||||
OP_ConsentResponse=0x6e47 # C
|
||||
OP_MemorizeSpell=0x8543 # C
|
||||
OP_SwapSpell=0x3fd2 # C
|
||||
OP_CastSpell=0x3582 # C
|
||||
OP_Consider=0x6024 # C
|
||||
OP_FormattedMessage=0x1318 # C
|
||||
OP_SimpleMessage=0x5448 # C
|
||||
OP_Buff=0x7ea8 # C
|
||||
OP_Illusion=0x48f9 # C
|
||||
OP_MoneyOnCorpse=0x6546 # C
|
||||
OP_RandomReply=0x6cdc # C
|
||||
OP_DenyResponse=0x7ce7 # C
|
||||
OP_SkillUpdate=0x7f01 # C
|
||||
OP_GMTrainSkillConfirm=0x7ae1 # C
|
||||
OP_RandomReq=0x777c # C
|
||||
OP_Death=0x1b85 # C
|
||||
OP_Bind_Wound=0x3969 # C
|
||||
OP_GMTraining=0x7b64 # C
|
||||
OP_GMEndTraining=0x3c02 # C
|
||||
OP_GMTrainSkill=0x7686 # C
|
||||
OP_Animation=0x47d3 # C
|
||||
OP_Begging=0x6d37 # C
|
||||
OP_Consent=0x6bb9 # C
|
||||
OP_ConsentDeny=0x01e3 # C
|
||||
OP_AutoFire=0x1bd4 # C
|
||||
OP_PetCommands=0x3ad6 # C
|
||||
OP_DeleteSpell=0x0736 # C
|
||||
OP_Surname=0x7547 # C
|
||||
OP_ClearSurname=0x2edd # C
|
||||
OP_FaceChange=0x5658 # C
|
||||
OP_SenseHeading=0x3887 # C
|
||||
OP_Action=0x2c27 # C
|
||||
OP_ConsiderCorpse=0x37a7 # C
|
||||
OP_HideCorpse=0x1842
|
||||
OP_Bug=0x02b # C
|
||||
OP_Feedback=0x0d1d # C
|
||||
OP_Report=0x6884 # C
|
||||
OP_Damage=0x7e4d # C or OP_Action2?
|
||||
OP_ChannelMessage=0x2e79 # C
|
||||
OP_Assist=0x2b59 # C
|
||||
OP_AssistGroup=0x5af6 # C
|
||||
OP_MoveCoin=0x1fcd # C
|
||||
OP_ZonePlayerToBind=0x1d3f # C
|
||||
OP_KeyRing=0x0a18 # C
|
||||
OP_WhoAllRequest=0x177a # C
|
||||
OP_WhoAllResponse=0x31f3 # C
|
||||
OP_FriendsWho=0x6a90 # C
|
||||
OP_ConfirmDelete=0x3d00 # C
|
||||
OP_Logout=0x66e0 # C
|
||||
OP_Rewind=0x4b7b # C
|
||||
OP_TargetCommand=0x17f7 # C
|
||||
OP_InspectRequest=0x4892 # C
|
||||
OP_Hide=0x1d22 # C
|
||||
OP_Jump=0x6c16 # C
|
||||
OP_Camp=0x3eec # C
|
||||
OP_Emote=0x7434 # C
|
||||
OP_SetRunMode=0x07fb # C
|
||||
OP_BankerChange=0x21e9 # C
|
||||
OP_TargetMouse=0x7bbb # C
|
||||
OP_MobHealth=0x47ea # C
|
||||
OP_InitialMobHealth=0x2d25 # C
|
||||
OP_TargetHoTT=0x3ec7 # C
|
||||
OP_TargetBuffs=0x3df8
|
||||
OP_DeleteSpawn=0x3164 # C
|
||||
OP_AutoAttack=0x3d86 # C
|
||||
OP_AutoAttack2=0x4ca1 # C
|
||||
OP_Consume=0x7ce4 # C
|
||||
OP_MoveItem=0x7f56 # C
|
||||
OP_DeleteItem=0x36f8 # C
|
||||
OP_DeleteCharge=0x1df9 # C
|
||||
OP_ItemPacket=0x34f8 # C
|
||||
OP_ItemLinkResponse=0x2bad # C
|
||||
OP_ItemLinkClick=0x3c66 # C
|
||||
OP_NewSpawn=0x5c29 # C
|
||||
OP_Track=0x4817 # C
|
||||
OP_TrackTarget=0x7337 # C
|
||||
OP_TrackUnknown=0x7b56 # C
|
||||
OP_ClickDoor=0x1516 # C
|
||||
OP_MoveDoor=0x6e97 # C
|
||||
OP_EnvDamage=0x5ac4 # C
|
||||
OP_BoardBoat=0x5cd3 # C
|
||||
OP_Forage=0x7b05 # C
|
||||
OP_LeaveBoat=0x7554 # C
|
||||
OP_ControlBoat=0x5bd9 # C
|
||||
OP_SafeFallSuccess=0x6ad2 # C
|
||||
OP_RezzComplete=0x42d0 # C
|
||||
OP_RezzRequest=0x0976 # C
|
||||
OP_RezzAnswer=0x6e1c # C
|
||||
OP_Shielding=0x2f6a # C
|
||||
OP_RequestDuel=0x79e0 # C
|
||||
OP_MobRename=0x0a1d # C
|
||||
OP_AugmentItem=0x0370 # C
|
||||
OP_WeaponEquip1=0x719e # C
|
||||
OP_WeaponEquip2=0x7b6e # C
|
||||
OP_WeaponUnequip2=0x19a8 # C
|
||||
OP_ApplyPoison=0x405b # C
|
||||
OP_Save=0x5c85 # C
|
||||
OP_TestBuff=0x7309
|
||||
OP_DestructableRelated=0x5ea1
|
||||
OP_CustomTitles=0x1b26 # C
|
||||
OP_Split=0x53f9 # C
|
||||
OP_YellForHelp=0x6f79 # C
|
||||
OP_LoadSpellSet=0x7113 # C
|
||||
OP_Bandolier=0x441c # C
|
||||
OP_PotionBelt=0x5db5 # C
|
||||
OP_DuelResponse=0x1ebb # C
|
||||
OP_SaveOnZoneReq=0x6eff # C
|
||||
OP_ReadBook=0xa53e
|
||||
OP_Dye=0x3672 # C
|
||||
OP_InterruptCast=0x072f # C
|
||||
OP_AAAction=0x50d0 # C
|
||||
OP_LeadershipExpToggle=0x34c5 # C
|
||||
OP_LeadershipExpUpdate=0x69d0 # C
|
||||
OP_PurchaseLeadershipAA=0x07b3 # C
|
||||
OP_UpdateLeadershipAA=0x6948 # C
|
||||
OP_MarkNPC=0x0d4b # C
|
||||
OP_ClearNPCMarks=0x5033 # C
|
||||
OP_DoGroupLeadershipAbility=0x540b # C
|
||||
OP_GroupLeadershipAAUpdate=0x0c33
|
||||
OP_DelegateAbility=0x0322 # C
|
||||
OP_SetGroupTarget=0x521c # C
|
||||
OP_DuelResponse2=0x52b5 # C
|
||||
OP_Charm=0x7108 # C
|
||||
OP_Stun=0x2a6d # C
|
||||
OP_SendFindableNPCs=0x5360
|
||||
OP_FindPersonRequest=0x3168 # C
|
||||
OP_FindPersonReply=0x1ac8 # C
|
||||
OP_Sound=0x303e # C
|
||||
OP_PetBuffWindow=0x2dd3 # C
|
||||
OP_LevelAppearance=0x6dc3 # C
|
||||
OP_Translocate=0x2042 # C
|
||||
OP_Sacrifice=0x5805 # C
|
||||
OP_PopupResponse=0x2caf # C
|
||||
OP_OnLevelMessage=0x1154 # C
|
||||
OP_AugmentInfo=0x3683 # C
|
||||
OP_Petition=0x31d1 # C
|
||||
OP_SomeItemPacketMaybe=0x54e8 # C
|
||||
OP_PVPStats=0x6a37 # C
|
||||
OP_PVPLeaderBoardRequest=0x24cb # C
|
||||
OP_PVPLeaderBoardReply=0x6ac2 # C
|
||||
OP_PVPLeaderBoardDetailsRequest=0x2a99 # C
|
||||
OP_PVPLeaderBoardDetailsReply=0x5156 # C
|
||||
OP_RestState=0x292f # C
|
||||
OP_RespawnWindow=0x268c # C was 0x1643
|
||||
OP_DisciplineTimer=0x684c # C
|
||||
OP_LDoNButton=0x41b5 # C
|
||||
OP_SetStartCity=0x7bf6 # C
|
||||
OP_VoiceMacroIn=0x31b1 # C
|
||||
OP_VoiceMacroOut=0x7880 # C
|
||||
OP_ItemViewUnknown=0x21c7 # C
|
||||
OP_VetRewardsAvaliable=0x4e4e # C
|
||||
OP_VetClaimRequest=0x771f # C
|
||||
OP_VetClaimReply=0x2f95 # C
|
||||
OP_CrystalCountUpdate=0x2d0e # C
|
||||
OP_DisciplineUpdate=0x0000 #
|
||||
OP_BecomeCorpse=0x0000 #
|
||||
OP_MobUpdate=0x4656 # Unused?
|
||||
OP_NPCMoveUpdate=0x22a7 #
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x4656 #
|
||||
OP_ManaUpdate=0x4b61 #
|
||||
OP_EnduranceUpdate=0x02d6 #
|
||||
OP_MobManaUpdate=0x2ac1 #
|
||||
OP_MobEnduranceUpdate=0x6c5f #
|
||||
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x2701 # C
|
||||
OP_EndLootRequest=0x6ad7 # C
|
||||
OP_LootItem=0x2b5a # C
|
||||
OP_LootComplete=0x41a6 # C
|
||||
|
||||
# bazaar trader stuff stuff:
|
||||
OP_BazaarSearch=0x4675 # C
|
||||
OP_TraderDelItem=0x63c8 # C
|
||||
OP_BecomeTrader=0x528f # C
|
||||
OP_TraderShop=0x7598 # C
|
||||
OP_TraderItemUpdate=0x0000 #
|
||||
OP_Trader=0x7092 # C
|
||||
OP_ShopItem=0x0000 #
|
||||
OP_TraderBuy=0x053a # C
|
||||
OP_Barter=0x4b49 #
|
||||
OP_BazaarInspect=0x0000 #
|
||||
OP_Bazaar=0x0000 #
|
||||
|
||||
OP_MarketPlace1=0x367b
|
||||
OP_MarketPlace2=0x0e1d
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x47ae # C
|
||||
OP_TradeAcceptClick=0x064a # C
|
||||
OP_TradeRequestAck=0x606a # C
|
||||
OP_TradeCoins=0x0149 # C
|
||||
OP_FinishTrade=0x3ff6 # C
|
||||
OP_CancelTrade=0x527e # C
|
||||
OP_TradeMoneyUpdate=0x7452 # C
|
||||
OP_MoneyUpdate=0x2d1d # C
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x3c27 # C
|
||||
OP_FinishWindow2=0x2f5d # C
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x032a # C
|
||||
OP_ItemVerifyReply=0x7866 # C
|
||||
|
||||
# merchant crap
|
||||
OP_ShopPlayerSell=0x0b27 # C
|
||||
OP_ShopRequest=0x4194 # C
|
||||
OP_ShopEnd=0x3753 # C
|
||||
OP_ShopEndConfirm=0x7114 # C
|
||||
OP_ShopPlayerBuy=0x436a # C
|
||||
OP_ShopDelItem=0x63c8 # C
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x5f0d # C
|
||||
OP_ClickObjectAction=0x5dbc # C
|
||||
OP_ClearObject=0x0b80 # C
|
||||
OP_RecipeDetails=0x49f4 # C
|
||||
OP_RecipesFavorite=0x1150 # C
|
||||
OP_RecipesSearch=0x55dd # C
|
||||
OP_RecipeReply=0x0643 # C
|
||||
OP_RecipeAutoCombine=0x1564 # C
|
||||
OP_TradeSkillCombine=0x4212 # C
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x6361 # C
|
||||
OP_OpenTributeMaster=0x2daa # C
|
||||
OP_SelectTribute=0x38b0 # C
|
||||
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 #
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x2ab6 # C
|
||||
OP_AdventureFinish=0x624c # C
|
||||
OP_AdventureInfoRequest=0x3a75 # C
|
||||
OP_AdventureInfo=0x3a28 # C
|
||||
OP_AdventureRequest=0x5a55 # C
|
||||
OP_AdventureDetails=0x5ed3 # C
|
||||
OP_AdventureData=0x05 # C
|
||||
OP_AdventureUpdate=0x0dcd # C
|
||||
OP_AdventureMerchantRequest=0x0989 # C
|
||||
OP_AdventureMerchantResponse=0x6ade # C
|
||||
OP_AdventureMerchantPurchase=0x23fc # C
|
||||
OP_AdventureMerchantSell=0x5363 # C
|
||||
OP_AdventurePointsUpdate=0x6b7f # C
|
||||
OP_AdventureStatsRequest=0x7e45 # C
|
||||
OP_AdventureStatsReply=0x6a30 # C
|
||||
OP_AdventureLeaderboardRequest=0x7537 # C
|
||||
OP_AdventureLeaderboardReply=0x7c87 # C
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x47e7 # C
|
||||
OP_GroupInvite=0x5d32 # C
|
||||
OP_GroupFollow=0x321a # C
|
||||
OP_GroupUpdate=0x21be
|
||||
OP_GroupUpdateB=0x7351
|
||||
OP_GroupCancelInvite=0x5251 # C - Same as OP_CancelInvite?
|
||||
OP_GroupAcknowledge=0x3e22 # C
|
||||
OP_GroupDelete=0x58e6 #
|
||||
OP_CancelInvite=0x5251 # C
|
||||
OP_GroupFollow2=0x2736 # C
|
||||
OP_GroupInvite2=0x548c # C
|
||||
OP_GroupDisbandYou=0xc56c
|
||||
OP_GroupDisbandOther=0x162d
|
||||
OP_GroupLeaderChange=0x7545
|
||||
OP_GroupRoles=0x6b67
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x3288 # C
|
||||
OP_LFGGetMatchesRequest=0x5613 # C
|
||||
OP_LFGGetMatchesResponse=0x7d90 # C
|
||||
OP_LFPGetMatchesRequest=0x0479 # C
|
||||
OP_LFPGetMatchesResponse=0x16f5 # C
|
||||
OP_LFPCommand=0x710e # C
|
||||
OP_LFGAppearance=0x0000 #
|
||||
OP_LFGResponse=0x0000 #
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x3b52 # C
|
||||
OP_RaidUpdate=0x32c6 # C
|
||||
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_Disarm=0x6def # C
|
||||
OP_Sneak=0x03e7 # C
|
||||
OP_Fishing=0x7093 # C
|
||||
OP_InstillDoubt=0x2d41 # C
|
||||
OP_FeignDeath=0x3f49 # C
|
||||
OP_Mend=0x221a # C
|
||||
OP_LDoNOpen=0x6129 # C
|
||||
|
||||
# Task packets
|
||||
OP_TaskActivityComplete=0x4df0 # C
|
||||
OP_TaskMemberList=0x34ed # C
|
||||
OP_OpenNewTasksWindow=0x4dd5 # C
|
||||
OP_AvaliableTask=0x2136 # C
|
||||
OP_AcceptNewTask=0x5832 # C
|
||||
OP_TaskHistoryRequest=0x29d7 # C
|
||||
OP_TaskHistoryReply=0x3d2a # C
|
||||
OP_CancelTask=0x726b # C
|
||||
OP_DeclineAllTasks=0x0000 #
|
||||
OP_Shroud=0x6d1f
|
||||
OP_ShroudRemove=0x17f6
|
||||
OP_ShroudUnknown1=0x169a
|
||||
OP_ShroudUnknown2=0x4292
|
||||
OP_ShroudClearAA=0x3bef
|
||||
OP_ShroudSelectionWindow=0x4d79
|
||||
OP_ShroudRequestStats=0x28ce
|
||||
OP_ShroudRespondStats=0x33f2
|
||||
OP_ShroudSelect=0x194f
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x4399 # C
|
||||
OP_RequestTitles=0x7327 # C
|
||||
OP_SendTitleList=0x158f # C
|
||||
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 #
|
||||
|
||||
# # # # # # # # # # # 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 #
|
||||
|
||||
# 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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 # seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000 #
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x5bad # U OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x5d24 # U OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# 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 #
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataRequest=0x4717 #
|
||||
OP_MercenaryDataResponse=0x1715 #
|
||||
OP_MercenaryHire=0x0bfd #
|
||||
OP_MercenaryAssign=0x6188 #
|
||||
OP_MercenaryTimer=0x116d #
|
||||
OP_MercenaryUnknown1=0x28c7 #
|
||||
@@ -0,0 +1,653 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 used for unknown explorer
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x437c
|
||||
OP_ApproveWorld=0x7c9b
|
||||
OP_LogServer=0x729e
|
||||
OP_SendCharInfo=0x79c4
|
||||
OP_ExpansionInfo=0x00ec
|
||||
OP_GuildsList=0x3e97
|
||||
OP_EnterWorld=0x52ca
|
||||
OP_PostEnterWorld=0x26d4
|
||||
OP_World_Client_CRC1=0x3f0e
|
||||
OP_World_Client_CRC2=0x4628
|
||||
OP_SendSpellChecksum=0x0000
|
||||
OP_SendSkillCapsChecksum=0x0000
|
||||
|
||||
# Character Select Related:
|
||||
OP_SendMaxCharacters=0x79df
|
||||
OP_SendMembership=0x5584
|
||||
OP_SendMembershipDetails=0x7bee
|
||||
OP_CharacterCreateRequest=0x4aac
|
||||
OP_CharacterCreate=0x60ea
|
||||
OP_DeleteCharacter=0x4415
|
||||
OP_RandomNameGenerator=0x2d39
|
||||
OP_ApproveName=0x6607
|
||||
OP_MOTD=0x237b
|
||||
OP_SetChatServer=0x7fbc
|
||||
OP_SetChatServer2=0x611a
|
||||
OP_ZoneServerInfo=0x0610
|
||||
OP_WorldComplete=0x4357
|
||||
OP_WorldUnknown001=0x0f12
|
||||
OP_FloatListThing=0x5d33
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x4e66
|
||||
OP_WorldClientReady=0x0059
|
||||
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=0x5bf3
|
||||
OP_ZoneEntry=0x280b
|
||||
OP_ReqNewZone=0x932b
|
||||
OP_NewZone=0x6d6c
|
||||
OP_ZoneSpawns=0x1451
|
||||
OP_PlayerProfile=0x3a78
|
||||
OP_TimeOfDay=0x5204
|
||||
OP_LevelUpdate=0x747e
|
||||
OP_Stamina=0x4dab
|
||||
OP_RequestClientZoneChange=0x782a
|
||||
OP_ZoneChange=0x3654
|
||||
OP_LockoutTimerInfo=0x0000
|
||||
OP_ZoneServerReady=0x0000
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_LogoutReply=0x0000
|
||||
OP_PreLogoutReply=0x0000
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x4223
|
||||
OP_ChangeSize=0x4b3b
|
||||
OP_TributeUpdate=0x58f5
|
||||
OP_TributeTimer=0x6d2e
|
||||
OP_SendTributes=0x2017
|
||||
OP_SendGuildTributes=0x7fd8
|
||||
OP_TributeInfo=0x7a02
|
||||
OP_Weather=0x434b
|
||||
OP_ReqClientSpawn=0x9668
|
||||
OP_SpawnDoor=0x49ac
|
||||
OP_GroundSpawn=0x3855
|
||||
OP_SendZonepoints=0x76d3
|
||||
OP_BlockedBuffs=0x0966
|
||||
OP_RemoveBlockedBuffs=0x153a
|
||||
OP_ClearBlockedBuffs=0x7aa7
|
||||
OP_WorldObjectsSent=0x0740
|
||||
OP_SendExpZonein=0x1cc3
|
||||
OP_SendAATable=0x70ba
|
||||
OP_RespondAA=0x4d0e
|
||||
OP_UpdateAA=0x3269
|
||||
OP_SendAAStats=0x3168
|
||||
OP_AAExpUpdate=0x0ded
|
||||
OP_ExpUpdate=0x4326
|
||||
OP_HPUpdate=0x5cf1
|
||||
OP_ManaChange=0x1af5
|
||||
OP_TGB=0x0f18
|
||||
OP_SpecialMesg=0x6700
|
||||
OP_GuildMemberList=0x1d1d
|
||||
OP_GuildMOTD=0x5095
|
||||
OP_CharInventory=0x3715
|
||||
OP_WearChange=0x3260
|
||||
OP_ClientUpdate=0x2f10
|
||||
OP_ClientReady=0x4da3 # 0x422d
|
||||
OP_SetServerFilter=0x21dd
|
||||
|
||||
# Guild Opcodes - Disabled until crashes are resolved in RoF
|
||||
OP_GetGuildMOTD=0x76a3 # Was 0x35dc
|
||||
OP_GetGuildMOTDReply=0x0e55 # Was 0x4586
|
||||
OP_GuildMemberUpdate=0x07ac # Was 0x5643
|
||||
OP_GuildInvite=0x6d0c
|
||||
OP_GuildRemove=0x4df4
|
||||
OP_GuildPeace=0x41e5
|
||||
OP_SetGuildMOTD=0x361a
|
||||
OP_GuildList=0x0000
|
||||
OP_GuildWar=0x299a
|
||||
OP_GuildLeader=0x3892
|
||||
OP_GuildDelete=0x0d49
|
||||
OP_GuildInviteAccept=0x3c45
|
||||
OP_GuildDemote=0x3a8d
|
||||
OP_GuildPublicNote=0x483c
|
||||
OP_GuildManageBanker=0x04ad # Was 0x0737
|
||||
OP_GuildBank=0xe64c # Was 0x10c3
|
||||
OP_SetGuildRank=0x72aa
|
||||
OP_GuildUpdateURLAndChannel=0x526c
|
||||
OP_GuildStatus=0x3230
|
||||
OP_GuildCreate=0x1a3c # or maybe 0x086e
|
||||
OP_GuildMemberLevelUpdate=0x0000 # Unused?
|
||||
OP_ZoneGuildList=0x0000 # Unused?
|
||||
OP_GetGuildsList=0x0000 # Unused?
|
||||
OP_LFGuild=0x0000
|
||||
OP_GuildManageRemove=0x0000
|
||||
OP_GuildManageAdd=0x0000
|
||||
OP_GuildManageStatus=0x0000
|
||||
|
||||
# GM/Guide Opcodes
|
||||
OP_GMServers=0x05ca
|
||||
OP_GMBecomeNPC=0x7c0a
|
||||
OP_GMZoneRequest=0x295d
|
||||
OP_GMZoneRequest2=0x1c36
|
||||
OP_GMGoto=0x1659
|
||||
OP_GMSearchCorpse=0x537a
|
||||
OP_GMHideMe=0x764e
|
||||
OP_GMDelCorpse=0x2280
|
||||
OP_GMApproval=0x6768
|
||||
OP_GMToggle=0x4c4e
|
||||
OP_GMSummon=0x17e5 # Was 0x684f
|
||||
OP_GMEmoteZone=0x6c26 # Was 0x0655
|
||||
OP_GMEmoteWorld=0x1ff3 # Was 0x1935
|
||||
OP_GMFind=0x4a39
|
||||
OP_GMKick=0x5b0f
|
||||
OP_GMKill=0x6d0d
|
||||
OP_GMNameChange=0x07fc # Was 0x4434
|
||||
OP_GMLastName=0x57dd # Was 0x3077
|
||||
|
||||
# Misc Opcodes
|
||||
OP_InspectRequest=0x4f0b
|
||||
OP_InspectAnswer=0x3bf5
|
||||
OP_InspectMessageUpdate=0x22ae
|
||||
OP_BeginCast=0x66fd
|
||||
OP_BuffFadeMsg=0x4aa9
|
||||
OP_ConsentResponse=0x57a5
|
||||
OP_MemorizeSpell=0x351d
|
||||
OP_SwapSpell=0x3069
|
||||
OP_CastSpell=0x568e
|
||||
OP_Consider=0x0ea4
|
||||
OP_FormattedMessage=0x7cd3
|
||||
OP_SimpleMessage=0x4a83
|
||||
OP_Buff=0x3c26
|
||||
OP_Illusion=0x25dd
|
||||
OP_MoneyOnCorpse=0x6fbd
|
||||
OP_RandomReply=0x3939
|
||||
OP_DenyResponse=0x7dc7
|
||||
OP_SkillUpdate=0x365d
|
||||
OP_GMTrainSkillConfirm=0x1a0c # 0x3960
|
||||
OP_RandomReq=0x50ce
|
||||
OP_Death=0x09fc
|
||||
OP_GMTraining=0x1d12
|
||||
OP_GMEndTraining=0x7d15
|
||||
OP_GMTrainSkill=0x1369
|
||||
OP_Animation=0x47d4
|
||||
OP_Begging=0x7da4
|
||||
OP_Consent=0x753e
|
||||
OP_ConsentDeny=0x54dd
|
||||
OP_AutoFire=0x3517
|
||||
OP_PetCommands=0x5c34
|
||||
OP_DeleteSpell=0x60e1
|
||||
OP_Surname=0x7d6b
|
||||
OP_ClearSurname=0x5c93
|
||||
OP_FaceChange=0x09ac
|
||||
OP_SenseHeading=0x7c17
|
||||
OP_Action=0x1384
|
||||
OP_ConsiderCorpse=0x4715
|
||||
OP_HideCorpse=0x31df
|
||||
OP_CorpseDrag=0x4b1c
|
||||
OP_CorpseDrop=0x36e2
|
||||
OP_Bug=0x5194
|
||||
OP_Feedback=0x29f6
|
||||
OP_Report=0x0c72
|
||||
OP_Damage=0x6004
|
||||
OP_ChannelMessage=0x0ead
|
||||
OP_Assist=0x7923
|
||||
OP_AssistGroup=0x7737
|
||||
OP_MoveCoin=0x54b4
|
||||
OP_ZonePlayerToBind=0x5cb6
|
||||
OP_KeyRing=0x1490
|
||||
OP_WhoAllRequest=0x18e5
|
||||
OP_WhoAllResponse=0x1b8c
|
||||
OP_FriendsWho=0x173c
|
||||
OP_ConfirmDelete=0x417b
|
||||
OP_Logout=0x2436
|
||||
OP_Rewind=0x25e3
|
||||
OP_TargetCommand=0x63cf
|
||||
OP_Hide=0x2e6f
|
||||
OP_Jump=0x7629
|
||||
OP_Camp=0x3297
|
||||
OP_Emote=0x1ad3
|
||||
OP_SetRunMode=0x3448
|
||||
OP_BankerChange=0x08cc
|
||||
OP_TargetMouse=0x77c6
|
||||
OP_MobHealth=0x29b7
|
||||
OP_InitialMobHealth=0x0000 # Unused?
|
||||
OP_TargetHoTT=0x042a
|
||||
OP_XTargetResponse=0x5473
|
||||
OP_XTargetRequest=0x45a9
|
||||
OP_XTargetAutoAddHaters=0x5af8
|
||||
OP_TargetBuffs=0x156f
|
||||
OP_BuffCreate=0x2013
|
||||
OP_BuffRemoveRequest=0x718c
|
||||
OP_DeleteSpawn=0x69b2
|
||||
OP_AutoAttack=0x702f
|
||||
OP_AutoAttack2=0x47b1
|
||||
OP_Consume=0x3008
|
||||
OP_MoveItem=0x1512
|
||||
OP_DeleteItem=0x4087
|
||||
OP_DeleteCharge=0x2a47
|
||||
OP_ItemPacket=0x1dc1
|
||||
OP_ItemLinkResponse=0x24cd
|
||||
OP_ItemLinkClick=0x0a72
|
||||
OP_ItemPreview=0x46e4
|
||||
OP_NewSpawn=0x2302
|
||||
OP_Track=0x0192
|
||||
OP_TrackTarget=0x7618
|
||||
OP_TrackUnknown=0x1a71
|
||||
OP_ClickDoor=0x15fb
|
||||
OP_MoveDoor=0x4665
|
||||
OP_RemoveAllDoors=0x4cca
|
||||
OP_EnvDamage=0x2ed2
|
||||
OP_BoardBoat=0x4324
|
||||
OP_Forage=0x39e3
|
||||
OP_LeaveBoat=0x20e6
|
||||
OP_ControlBoat=0x599c
|
||||
OP_SafeFallSuccess=0x31ee
|
||||
OP_RezzComplete=0x79b9
|
||||
OP_RezzRequest=0x70e8
|
||||
OP_RezzAnswer=0x7158
|
||||
OP_Shielding=0x0bd4
|
||||
OP_RequestDuel=0x4719
|
||||
OP_MobRename=0x5b82
|
||||
OP_AugmentItem=0x1d6e # Was 0x37cb
|
||||
OP_WeaponEquip1=0x1614
|
||||
OP_WeaponEquip2=0x1660 # Was 0x6022
|
||||
OP_WeaponUnequip2=0x75ea # Was 0x0110
|
||||
OP_ApplyPoison=0x197e
|
||||
OP_Save=0x260c
|
||||
OP_TestBuff=0x29c3 # Was 0x3772
|
||||
OP_CustomTitles=0x719f
|
||||
OP_Split=0x27d5
|
||||
OP_YellForHelp=0x2a50
|
||||
OP_LoadSpellSet=0x4d0f
|
||||
OP_Bandolier=0x2c88
|
||||
OP_PotionBelt=0x62e9 # Was 0x4d3b
|
||||
OP_DuelResponse=0x23e8
|
||||
OP_DuelResponse2=0x3828
|
||||
OP_SaveOnZoneReq=0x44d3
|
||||
OP_ReadBook=0x4910
|
||||
OP_Dye=0x265b
|
||||
OP_InterruptCast=0x2e8c
|
||||
OP_AAAction=0x4f7c
|
||||
OP_LeadershipExpToggle=0x0350
|
||||
OP_LeadershipExpUpdate=0x4a6e
|
||||
OP_PurchaseLeadershipAA=0x45a5
|
||||
OP_UpdateLeadershipAA=0x2efb
|
||||
OP_MarkNPC=0x43f8
|
||||
OP_ClearNPCMarks=0x6c57
|
||||
OP_DelegateAbility=0x2e22
|
||||
OP_SetGroupTarget=0x0da5
|
||||
OP_Charm=0x738b
|
||||
OP_Stun=0x3333
|
||||
OP_SendFindableNPCs=0x6516
|
||||
OP_FindPersonRequest=0x4e65
|
||||
OP_FindPersonReply=0x5e04
|
||||
OP_Sound=0x6ad4
|
||||
OP_PetBuffWindow=0x5be1
|
||||
OP_LevelAppearance=0x7a6f
|
||||
OP_Translocate=0x3a61
|
||||
OP_Sacrifice=0x18a6
|
||||
OP_PopupResponse=0x0f8f
|
||||
OP_OnLevelMessage=0x213b
|
||||
OP_AugmentInfo=0x1565
|
||||
OP_Petition=0x6002
|
||||
OP_SomeItemPacketMaybe=0x49ee
|
||||
OP_PVPStats=0x26ea # Unsure
|
||||
OP_PVPLeaderBoardRequest=0x13fd
|
||||
OP_PVPLeaderBoardReply=0x5dd0
|
||||
OP_PVPLeaderBoardDetailsRequest=0x7a42
|
||||
OP_PVPLeaderBoardDetailsReply=0x2b8b
|
||||
OP_RestState=0x5b4b
|
||||
OP_RespawnWindow=0x0920
|
||||
OP_LDoNButton=0x09f2
|
||||
OP_SetStartCity=0x372f # Was 0x2d1b
|
||||
OP_VoiceMacroIn=0x376d
|
||||
OP_VoiceMacroOut=0x5a45
|
||||
OP_ItemViewUnknown=0x7bf0
|
||||
OP_VetRewardsAvaliable=0x7060
|
||||
OP_VetClaimRequest=0x345c
|
||||
OP_VetClaimReply=0x1705
|
||||
OP_DisciplineUpdate=0x4b8f # Was 0x2f05
|
||||
OP_DisciplineTimer=0x0b96 # Was 0x5e3f
|
||||
OP_BecomeCorpse=0x0000 # Unused?
|
||||
OP_Action2=0x0000 # Unused?
|
||||
OP_MobUpdate=0x09aa
|
||||
OP_NPCMoveUpdate=0x4eca
|
||||
OP_CameraEffect=0x0546
|
||||
OP_SpellEffect=0x1f9d
|
||||
OP_RemoveNimbusEffect=0x59dc
|
||||
OP_AltCurrency=0x1da9
|
||||
OP_AltCurrencyMerchantRequest=0x44f0
|
||||
OP_AltCurrencyMerchantReply=0x77d4
|
||||
OP_AltCurrencyPurchase=0x02ec
|
||||
OP_AltCurrencySell=0x7bcf
|
||||
OP_AltCurrencySellSelection=0x122a
|
||||
OP_AltCurrencyReclaim=0x5b90
|
||||
OP_CrystalCountUpdate=0x37da # Was 0x3f60
|
||||
OP_CrystalCreate=0x22e4 # Was 0x5a82
|
||||
OP_CrystalReclaim=0x1c12 # Was 0x7616
|
||||
OP_Untargetable=0x6dd5
|
||||
OP_IncreaseStats=0x355f
|
||||
OP_Weblink=0x3d99
|
||||
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
|
||||
OP_OpenContainer=0x0000
|
||||
|
||||
OP_DzQuit=0x7878
|
||||
OP_DzListTimers=0x6bbc
|
||||
OP_DzAddPlayer=0x4185
|
||||
OP_DzRemovePlayer=0x6c01
|
||||
OP_DzSwapPlayer=0x5746
|
||||
OP_DzMakeLeader=0x47ba
|
||||
OP_DzPlayerList=0x4848
|
||||
OP_DzJoinExpeditionConfirm=0x56d3
|
||||
OP_DzJoinExpeditionReply=0x28bf
|
||||
OP_DzExpeditionInfo=0x575f
|
||||
OP_DzExpeditionList=0x6ff3
|
||||
OP_DzMemberStatus=0x2456
|
||||
OP_DzLeaderStatus=0x5be9
|
||||
OP_DzExpeditionEndsWarning=0x3966
|
||||
OP_DzMemberList=0x215d
|
||||
OP_DzCompass=0x5a12 # Was 0x4f09
|
||||
OP_DzChooseZone=0x0000 # Maybe 0x29d6
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
OP_ManaUpdate=0x52de
|
||||
OP_EnduranceUpdate=0x4730
|
||||
OP_MobManaUpdate=0x7f17
|
||||
OP_MobEnduranceUpdate=0x0336
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataUpdateRequest=0x7452
|
||||
OP_MercenaryDataUpdate=0x0b3a
|
||||
OP_MercenaryDataRequest=0x28ec
|
||||
OP_MercenaryDataResponse=0x0247
|
||||
OP_MercenaryHire=0x4950
|
||||
OP_MercenaryDismiss=0x1408
|
||||
OP_MercenaryTimerRequest=0x7691
|
||||
OP_MercenaryTimer=0x0459
|
||||
OP_MercenaryUnknown1=0x57b4
|
||||
OP_MercenaryCommand=0x3be8
|
||||
OP_MercenarySuspendRequest=0x4aea
|
||||
OP_MercenarySuspendResponse=0x29a8
|
||||
OP_MercenaryUnsuspendResponse=0x17f8
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x2106
|
||||
OP_EndLootRequest=0x77fc
|
||||
OP_LootItem=0x69a9
|
||||
OP_LootComplete=0x2c4b
|
||||
|
||||
# bazaar trader stuff:
|
||||
OP_BazaarSearch=0x31f0
|
||||
OP_TraderDelItem=0x0000
|
||||
OP_BecomeTrader=0x1028
|
||||
OP_TraderShop=0x0527
|
||||
OP_Trader=0x608b # Was 0x6790
|
||||
OP_TraderBuy=0x0000
|
||||
OP_Barter=0x0d79
|
||||
OP_ShopItem=0x0000
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_Bazaar=0x0000
|
||||
OP_TraderItemUpdate=0x0000
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x0910
|
||||
OP_TradeAcceptClick=0x2921
|
||||
OP_TradeRequestAck=0x6f1b
|
||||
OP_TradeCoins=0x6aef
|
||||
OP_FinishTrade=0x7b39
|
||||
OP_CancelTrade=0x1486
|
||||
OP_TradeMoneyUpdate=0x438a
|
||||
OP_MoneyUpdate=0x5d8c
|
||||
OP_TradeBusy=0x5856
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x4a2a
|
||||
OP_FinishWindow2=0x6b34
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x34b4
|
||||
OP_ItemVerifyReply=0x04c1
|
||||
|
||||
# merchant stuff
|
||||
OP_ShopPlayerSell=0x064a
|
||||
OP_ShopRequest=0x1f03
|
||||
OP_ShopEnd=0x38b9
|
||||
OP_ShopEndConfirm=0x1362
|
||||
OP_ShopPlayerBuy=0x5d60
|
||||
OP_ShopDelItem=0x5e29
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x4c3e
|
||||
OP_ClickObjectAction=0x5e24
|
||||
OP_ClearObject=0x5465
|
||||
OP_RecipeDetails=0x2695
|
||||
OP_RecipesFavorite=0x1e20
|
||||
OP_RecipesSearch=0x1335
|
||||
OP_RecipeReply=0x728c
|
||||
OP_RecipeAutoCombine=0x2fba
|
||||
OP_TradeSkillCombine=0x11d5
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x11e5
|
||||
OP_OpenTributeMaster=0x7c65 # Was 0x40f5
|
||||
OP_SelectTribute=0x3f29
|
||||
OP_TributeItem=0x42ff
|
||||
OP_TributeMoney=0x1beb # Was 0x6fed
|
||||
OP_TributeToggle=0x3d5c
|
||||
OP_TributePointUpdate=0x1065
|
||||
OP_TributeNPC=0x0000
|
||||
OP_GuildTributeInfo=0x0000
|
||||
OP_OpenTributeReply=0x0000
|
||||
OP_GuildTributeStatus=0x0000
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x206b
|
||||
OP_AdventureFinish=0x7f00
|
||||
OP_AdventureInfoRequest=0x2fc8
|
||||
OP_AdventureInfo=0x1aaf
|
||||
OP_AdventureRequest=0x6553
|
||||
OP_AdventureDetails=0x5892
|
||||
OP_AdventureData=0x7599
|
||||
OP_AdventureUpdate=0x41b6
|
||||
OP_AdventureMerchantRequest=0x1e99 # Was 654d
|
||||
OP_AdventureMerchantResponse=0x394e # Was 7949
|
||||
OP_AdventureMerchantPurchase=0x04b1 # Was 155a
|
||||
OP_AdventureMerchantSell=0x1b22 # Was 389c
|
||||
OP_AdventurePointsUpdate=0x36bf # Was 7589
|
||||
OP_AdventureStatsRequest=0x5754
|
||||
OP_AdventureStatsReply=0x31e2
|
||||
OP_AdventureLeaderboardRequest=0x5b3d
|
||||
OP_AdventureLeaderboardReply=0x5001
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x468d
|
||||
OP_GroupInvite=0x174e
|
||||
OP_GroupFollow=0x06fc
|
||||
OP_GroupUpdate=0x050b
|
||||
OP_GroupUpdateB=0x09e2
|
||||
OP_GroupCancelInvite=0x0000
|
||||
OP_GroupAcknowledge=0x6f78
|
||||
OP_GroupDelete=0x0d6b
|
||||
OP_CancelInvite=0x67e2
|
||||
OP_GroupFollow2=0x5435
|
||||
OP_GroupInvite2=0x09af
|
||||
OP_GroupDisbandYou=0x56f7
|
||||
OP_GroupDisbandOther=0x50e8
|
||||
OP_GroupLeaderChange=0x3d88
|
||||
OP_GroupRoles=0x48b2
|
||||
OP_GroupMakeLeader=0x6c31
|
||||
OP_DoGroupLeadershipAbility=0x4af2
|
||||
OP_GroupLeadershipAAUpdate=0x6a2b
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x2c60
|
||||
OP_LFGGetMatchesRequest=0x7d32
|
||||
OP_LFGGetMatchesResponse=0x5fa3
|
||||
OP_LFPGetMatchesRequest=0x011c
|
||||
OP_LFPGetMatchesResponse=0x6336
|
||||
OP_LFPCommand=0x076c
|
||||
OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x6f6a
|
||||
OP_RaidUpdate=0x37bb
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x5d7f
|
||||
OP_CombatAbility=0x79ca
|
||||
OP_SenseTraps=0x4795 # Was 0x2ee0
|
||||
OP_PickPocket=0x5376
|
||||
OP_DisarmTraps=0x0000
|
||||
OP_Disarm=0x5122
|
||||
OP_Sneak=0x6518
|
||||
OP_Fishing=0x4312
|
||||
OP_InstillDoubt=0x3392
|
||||
OP_FeignDeath=0x2887
|
||||
OP_Mend=0x4041
|
||||
OP_Bind_Wound=0x55bf
|
||||
OP_LDoNOpen=0x16af
|
||||
|
||||
# Task packets
|
||||
OP_TaskDescription=0x0190
|
||||
OP_TaskActivity=0x0c6a
|
||||
OP_CompletedTasks=0x304b
|
||||
OP_TaskActivityComplete=0x0e9f
|
||||
OP_AcceptNewTask=0x1c0f
|
||||
OP_CancelTask=0xb199
|
||||
OP_TaskMemberList=0x4028 # Was 0x1656
|
||||
OP_OpenNewTasksWindow=0x1e5b # Was 0x11de
|
||||
OP_AvaliableTask=0x1138 # Was 0x2377
|
||||
OP_TaskHistoryRequest=0x2e9b
|
||||
OP_TaskHistoryReply=0x2adb
|
||||
OP_DeclineAllTasks=0x0000
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x18c7
|
||||
OP_RequestTitles=0x1118
|
||||
OP_SendTitleList=0x4750
|
||||
OP_SetTitle=0x2a7e
|
||||
OP_SetTitleReply=0x0867
|
||||
|
||||
# mail opcodes
|
||||
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 ###########
|
||||
|
||||
# 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
@@ -0,0 +1,653 @@
|
||||
# ShowEQ Import Notes:
|
||||
# ZERO THE FILE first
|
||||
# perl -pi -e 's/0x[0-9a-fA-F]{4}/0x0000/g' opcodes.conf
|
||||
# Unknown Mapping:
|
||||
# OP_Action2 -> OP_Damage
|
||||
# OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
|
||||
# Name Differences:
|
||||
# OP_CancelInvite -> OP_GroupCancelInvite
|
||||
# OP_GMFind -> OP_FindPersonRequest
|
||||
# OP_CommonMessage -> OP_ChannelMessage
|
||||
|
||||
OP_Unknown=0x0000
|
||||
OP_ExploreUnknown=0x0000 used for unknown explorer
|
||||
|
||||
# world packets
|
||||
# Required to reach Char Select:
|
||||
OP_SendLoginInfo=0x317e
|
||||
OP_ApproveWorld=0x2ef2
|
||||
OP_LogServer=0x5b24
|
||||
OP_SendCharInfo=0x2ad9
|
||||
OP_ExpansionInfo=0x1a9b
|
||||
OP_GuildsList=0x6f57
|
||||
OP_EnterWorld=0x6078
|
||||
OP_PostEnterWorld=0x0f9f
|
||||
OP_World_Client_CRC1=0x7978
|
||||
OP_World_Client_CRC2=0x2b1c
|
||||
OP_SendSpellChecksum=0x0000
|
||||
OP_SendSkillCapsChecksum=0x0000
|
||||
|
||||
# Character Select Related:
|
||||
OP_SendMaxCharacters=0x24db
|
||||
OP_SendMembership=0x57f3
|
||||
OP_SendMembershipDetails=0x4183
|
||||
OP_CharacterCreateRequest=0x2cad
|
||||
OP_CharacterCreate=0x15d7
|
||||
OP_DeleteCharacter=0x2f9a
|
||||
OP_RandomNameGenerator=0x4bf8
|
||||
OP_ApproveName=0x78cc
|
||||
OP_MOTD=0x282a
|
||||
OP_SetChatServer=0x3f5e
|
||||
OP_SetChatServer2=0x6a29
|
||||
OP_ZoneServerInfo=0x00c9
|
||||
OP_WorldComplete=0x48e6
|
||||
OP_WorldUnknown001=0x52d2
|
||||
OP_FloatListThing=0x2b9c
|
||||
|
||||
# Reasons for Disconnect:
|
||||
OP_ZoneUnavail=0x408a
|
||||
OP_WorldClientReady=0x45b4
|
||||
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=0x46c2
|
||||
OP_ZoneEntry=0x4a63
|
||||
OP_ReqNewZone=0x3ff0
|
||||
OP_NewZone=0x6727
|
||||
OP_ZoneSpawns=0x1d0a
|
||||
OP_PlayerProfile=0x6926
|
||||
OP_TimeOfDay=0x6b7b
|
||||
OP_LevelUpdate=0x1d84
|
||||
OP_Stamina=0x5114
|
||||
OP_RequestClientZoneChange=0x31b0
|
||||
OP_ZoneChange=0x7951
|
||||
OP_LockoutTimerInfo=0x0000
|
||||
OP_ZoneServerReady=0x0000
|
||||
OP_ZoneInUnknown=0x0000
|
||||
OP_LogoutReply=0x0000
|
||||
OP_PreLogoutReply=0x0000
|
||||
|
||||
# Required to fully log in
|
||||
OP_SpawnAppearance=0x3143
|
||||
OP_ChangeSize=0x70d1
|
||||
OP_TributeUpdate=0x590f
|
||||
OP_TributeTimer=0x4590
|
||||
OP_SendTributes=0x4124
|
||||
OP_SendGuildTributes=0x1df9
|
||||
OP_TributeInfo=0x37b0
|
||||
OP_Weather=0x63f0
|
||||
OP_ReqClientSpawn=0x37f1
|
||||
OP_SpawnDoor=0x7e51
|
||||
OP_GroundSpawn=0x07eb
|
||||
OP_SendZonepoints=0x0067
|
||||
OP_BlockedBuffs=0x1375
|
||||
OP_RemoveBlockedBuffs=0x7996
|
||||
OP_ClearBlockedBuffs=0x7a20
|
||||
OP_WorldObjectsSent=0x0ae9
|
||||
OP_SendExpZonein=0x0380
|
||||
OP_SendAATable=0x7a7c
|
||||
OP_RespondAA=0x11a3
|
||||
OP_UpdateAA=0x4559
|
||||
OP_SendAAStats=0x32fd
|
||||
OP_AAExpUpdate=0x24a1
|
||||
OP_ExpUpdate=0x793d
|
||||
OP_HPUpdate=0x6598
|
||||
OP_ManaChange=0x3a19
|
||||
OP_TGB=0x552e
|
||||
OP_SpecialMesg=0x7545
|
||||
OP_GuildMemberList=0x2ef0
|
||||
OP_GuildMOTD=0x3880
|
||||
OP_CharInventory=0x4df2
|
||||
OP_WearChange=0x003a
|
||||
OP_ClientUpdate=0x47c9
|
||||
OP_ClientReady=0x7538
|
||||
OP_SetServerFilter=0x178d
|
||||
|
||||
# Guild Opcodes - Disabled until crashes are resolved in RoF
|
||||
OP_GetGuildMOTD=0x3dfe
|
||||
OP_GetGuildMOTDReply=0x7bff
|
||||
OP_GuildMemberUpdate=0x45e4
|
||||
OP_GuildInvite=0x47d2
|
||||
OP_GuildRemove=0x245d
|
||||
OP_GuildPeace=0x71b2
|
||||
OP_SetGuildMOTD=0x703b
|
||||
OP_GuildList=0x0000
|
||||
OP_GuildWar=0x731c
|
||||
OP_GuildLeader=0x01c6
|
||||
OP_GuildDelete=0x5592
|
||||
OP_GuildInviteAccept=0x7fa4
|
||||
OP_GuildDemote=0x144a
|
||||
OP_GuildPublicNote=0x44fb
|
||||
OP_GuildManageBanker=0x769e
|
||||
OP_GuildBank=0x2591
|
||||
OP_SetGuildRank=0x4195
|
||||
OP_GuildUpdateURLAndChannel=0x2df0
|
||||
OP_GuildStatus=0x6e9e
|
||||
OP_GuildCreate=0x1544
|
||||
OP_GuildMemberLevelUpdate=0x0000 # Unused?
|
||||
OP_ZoneGuildList=0x0000 # Unused?
|
||||
OP_GetGuildsList=0x0000 # Unused?
|
||||
OP_LFGuild=0x0000
|
||||
OP_GuildManageRemove=0x0000
|
||||
OP_GuildManageAdd=0x0000
|
||||
OP_GuildManageStatus=0x0000
|
||||
|
||||
# GM/Guide Opcodes
|
||||
OP_GMServers=0x2e1e
|
||||
OP_GMBecomeNPC=0x1def
|
||||
OP_GMZoneRequest=0x49ad
|
||||
OP_GMZoneRequest2=0x54ff
|
||||
OP_GMGoto=0x35a9
|
||||
OP_GMSearchCorpse=0x206c
|
||||
OP_GMHideMe=0x0b62
|
||||
OP_GMDelCorpse=0x6344
|
||||
OP_GMApproval=0x35b3
|
||||
OP_GMToggle=0x3bd7
|
||||
OP_GMSummon=0x0c58
|
||||
OP_GMEmoteZone=0x28ab
|
||||
OP_GMEmoteWorld=0x4903
|
||||
OP_GMFind=0x0ea3
|
||||
OP_GMKick=0x5f92
|
||||
OP_GMKill=0x3b7d
|
||||
OP_GMNameChange=0x1c3f
|
||||
OP_GMLastName=0x4ead
|
||||
|
||||
# Misc Opcodes
|
||||
OP_InspectRequest=0x3692
|
||||
OP_InspectAnswer=0x0af1
|
||||
OP_InspectMessageUpdate=0x1bc6
|
||||
OP_BeginCast=0x5df6
|
||||
OP_BuffFadeMsg=0x569a
|
||||
OP_ConsentResponse=0x68c2
|
||||
OP_MemorizeSpell=0x72e2
|
||||
OP_SwapSpell=0x70c4
|
||||
OP_CastSpell=0x5c4b
|
||||
OP_Consider=0x0e31
|
||||
OP_FormattedMessage=0x3735
|
||||
OP_SimpleMessage=0x4645
|
||||
OP_Buff=0x7fb5
|
||||
OP_Illusion=0x3772
|
||||
OP_MoneyOnCorpse=0x4ab0
|
||||
OP_RandomReply=0x76ea
|
||||
OP_DenyResponse=0x0a88
|
||||
OP_SkillUpdate=0x2e5f
|
||||
OP_GMTrainSkillConfirm=0x6692
|
||||
OP_RandomReq=0x16e6
|
||||
OP_Death=0x25ad
|
||||
OP_GMTraining=0x3dcc
|
||||
OP_GMEndTraining=0x5721
|
||||
OP_GMTrainSkill=0x38f0
|
||||
OP_Animation=0x53f6
|
||||
OP_Begging=0x4d3d
|
||||
OP_Consent=0x4d7c
|
||||
OP_ConsentDeny=0x3b03
|
||||
OP_AutoFire=0x4697
|
||||
OP_PetCommands=0x574a
|
||||
OP_DeleteSpell=0x5279
|
||||
OP_Surname=0x181d
|
||||
OP_ClearSurname=0x1097
|
||||
OP_FaceChange=0x59d8
|
||||
OP_SenseHeading=0x689a
|
||||
OP_Action=0x280b
|
||||
OP_ConsiderCorpse=0x6c92
|
||||
OP_HideCorpse=0x7dea
|
||||
OP_CorpseDrag=0x338a
|
||||
OP_CorpseDrop=0x409e
|
||||
OP_Bug=0x7589
|
||||
OP_Feedback=0x5d5f
|
||||
OP_Report=0x521c
|
||||
OP_Damage=0x5e8a
|
||||
OP_ChannelMessage=0x1770
|
||||
OP_Assist=0x7021
|
||||
OP_AssistGroup=0x6668
|
||||
OP_MoveCoin=0x6a56
|
||||
OP_ZonePlayerToBind=0x859e
|
||||
OP_KeyRing=0x7613
|
||||
OP_WhoAllRequest=0x1d64
|
||||
OP_WhoAllResponse=0x20aa
|
||||
OP_FriendsWho=0x527c
|
||||
OP_ConfirmDelete=0x3221
|
||||
OP_Logout=0x4e12
|
||||
OP_Rewind=0x44d0
|
||||
OP_TargetCommand=0x726c
|
||||
OP_Hide=0x23f2
|
||||
OP_Jump=0x3dbc
|
||||
OP_Camp=0x2ca2
|
||||
OP_Emote=0x314d
|
||||
OP_SetRunMode=0x276f
|
||||
OP_BankerChange=0x21b0
|
||||
OP_TargetMouse=0x3605
|
||||
OP_MobHealth=0x1949
|
||||
OP_InitialMobHealth=0x0000 # Unused?
|
||||
OP_TargetHoTT=0x1be6
|
||||
OP_XTargetResponse=0x0ad9
|
||||
OP_XTargetRequest=0x3034
|
||||
OP_XTargetAutoAddHaters=0x7efd
|
||||
OP_TargetBuffs=0x5e3b
|
||||
OP_BuffCreate=0x51da
|
||||
OP_BuffRemoveRequest=0x6ce2
|
||||
OP_DeleteSpawn=0x0ef8
|
||||
OP_AutoAttack=0x577f
|
||||
OP_AutoAttack2=0x4f56
|
||||
OP_Consume=0x7cca
|
||||
OP_MoveItem=0x5ba6
|
||||
OP_DeleteItem=0x36dd
|
||||
OP_DeleteCharge=0x6ec3
|
||||
OP_ItemPacket=0x75b5
|
||||
OP_ItemLinkResponse=0x5fa8
|
||||
OP_ItemLinkClick=0x0b40
|
||||
OP_ItemPreview=0x2688
|
||||
OP_NewSpawn=0x7cde
|
||||
OP_Track=0x2f78
|
||||
OP_TrackTarget=0x74dc
|
||||
OP_TrackUnknown=0x3127
|
||||
OP_ClickDoor=0x2b55
|
||||
OP_MoveDoor=0x5e21
|
||||
OP_RemoveAllDoors=0x73b3
|
||||
OP_EnvDamage=0x21da
|
||||
OP_BoardBoat=0x1372
|
||||
OP_Forage=0x0d91
|
||||
OP_LeaveBoat=0x7582
|
||||
OP_ControlBoat=0x5d0e
|
||||
OP_SafeFallSuccess=0x317f
|
||||
OP_RezzComplete=0x017b
|
||||
OP_RezzRequest=0x21a1
|
||||
OP_RezzAnswer=0x21ce
|
||||
OP_Shielding=0x17d3
|
||||
OP_RequestDuel=0x4870
|
||||
OP_MobRename=0x3a4e
|
||||
OP_AugmentItem=0x3d13
|
||||
OP_WeaponEquip1=0x6041
|
||||
OP_WeaponEquip2=0x23f7
|
||||
OP_WeaponUnequip2=0x4078
|
||||
OP_ApplyPoison=0x099a
|
||||
OP_Save=0x1361
|
||||
OP_TestBuff=0x478a
|
||||
OP_CustomTitles=0x6115
|
||||
OP_Split=0x617f
|
||||
OP_YellForHelp=0x40d4
|
||||
OP_LoadSpellSet=0x0680
|
||||
OP_Bandolier=0x1627
|
||||
OP_PotionBelt=0x3208
|
||||
OP_DuelResponse=0x0d3b
|
||||
OP_DuelResponse2=0x24e0
|
||||
OP_SaveOnZoneReq=0x13af
|
||||
OP_ReadBook=0x641b
|
||||
OP_Dye=0x401f
|
||||
OP_InterruptCast=0x27e0
|
||||
OP_AAAction=0x2eae
|
||||
OP_LeadershipExpToggle=0x0f66
|
||||
OP_LeadershipExpUpdate=0x3791
|
||||
OP_PurchaseLeadershipAA=0x2c3e
|
||||
OP_UpdateLeadershipAA=0x18ef
|
||||
OP_MarkNPC=0x3093
|
||||
OP_ClearNPCMarks=0x1404
|
||||
OP_DelegateAbility=0x29a8
|
||||
OP_SetGroupTarget=0x7b9f
|
||||
OP_Charm=0x1c1f
|
||||
OP_Stun=0x45e0
|
||||
OP_SendFindableNPCs=0x62da
|
||||
OP_FindPersonRequest=0x41fb
|
||||
OP_FindPersonReply=0x23e2
|
||||
OP_Sound=0x622a
|
||||
OP_PetBuffWindow=0x53f8
|
||||
OP_LevelAppearance=0x5b03
|
||||
OP_Translocate=0x5e10
|
||||
OP_Sacrifice=0x2ee4
|
||||
OP_PopupResponse=0x7f5e
|
||||
OP_OnLevelMessage=0x1ef3
|
||||
OP_AugmentInfo=0x0000
|
||||
OP_Petition=0x71e3
|
||||
OP_SomeItemPacketMaybe=0x1f4c
|
||||
OP_PVPStats=0x1937 # Unsure
|
||||
OP_PVPLeaderBoardRequest=0x739b
|
||||
OP_PVPLeaderBoardReply=0x5c62
|
||||
OP_PVPLeaderBoardDetailsRequest=0x4ce0
|
||||
OP_PVPLeaderBoardDetailsReply=0x2a52
|
||||
OP_RestState=0x2342
|
||||
OP_RespawnWindow=0x3f23
|
||||
OP_LDoNButton=0x3820
|
||||
OP_SetStartCity=0x5d81
|
||||
OP_VoiceMacroIn=0x3144
|
||||
OP_VoiceMacroOut=0x75ed
|
||||
OP_ItemViewUnknown=0x6cc1
|
||||
OP_VetRewardsAvaliable=0x67a6
|
||||
OP_VetClaimRequest=0x23e7
|
||||
OP_VetClaimReply=0x23eb
|
||||
OP_DisciplineUpdate=0x5010
|
||||
OP_DisciplineTimer=0x0673
|
||||
OP_BecomeCorpse=0x0000 # Unused?
|
||||
OP_Action2=0x0000 # Unused?
|
||||
OP_MobUpdate=0x710b
|
||||
OP_NPCMoveUpdate=0x51e9
|
||||
OP_CameraEffect=0x7a73
|
||||
OP_SpellEffect=0x30b6
|
||||
OP_RemoveNimbusEffect=0x1fb3
|
||||
OP_AltCurrency=0x32db
|
||||
OP_AltCurrencyMerchantRequest=0x6588
|
||||
OP_AltCurrencyMerchantReply=0x393c
|
||||
OP_AltCurrencyPurchase=0x43e8
|
||||
OP_AltCurrencySell=0x2c40
|
||||
OP_AltCurrencySellSelection=0x0eec
|
||||
OP_AltCurrencyReclaim=0x0fbc
|
||||
OP_CrystalCountUpdate=0x5cd9
|
||||
OP_CrystalCreate=0x0e4b
|
||||
OP_CrystalReclaim=0x6506
|
||||
OP_Untargetable=0x3859
|
||||
OP_IncreaseStats=0x22b9
|
||||
OP_Weblink=0x2d92
|
||||
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
|
||||
OP_OpenContainer=0x0000
|
||||
|
||||
OP_DzQuit=0x20fb
|
||||
OP_DzListTimers=0x50c1
|
||||
OP_DzAddPlayer=0x06e0
|
||||
OP_DzRemovePlayer=0x90ca
|
||||
OP_DzSwapPlayer=0x6461
|
||||
OP_DzMakeLeader=0x599d
|
||||
OP_DzPlayerList=0x6dfb
|
||||
OP_DzJoinExpeditionConfirm=0x3e9d
|
||||
OP_DzJoinExpeditionReply=0x25b7
|
||||
OP_DzExpeditionInfo=0x56a8
|
||||
OP_DzExpeditionList=0x6171
|
||||
OP_DzMemberStatus=0x52d9
|
||||
OP_DzLeaderStatus=0x7b38
|
||||
OP_DzExpeditionEndsWarning=0x26c5
|
||||
OP_DzMemberList=0x59e2
|
||||
OP_DzCompass=0x3435
|
||||
OP_DzChooseZone=0x0000
|
||||
|
||||
# New Opcodes
|
||||
OP_SpawnPositionUpdate=0x0000 # Actually OP_MobUpdate ?
|
||||
OP_ManaUpdate=0x06bc
|
||||
OP_EnduranceUpdate=0x4e20
|
||||
OP_MobManaUpdate=0x4738
|
||||
OP_MobEnduranceUpdate=0x6519
|
||||
|
||||
# Mercenary Opcodes
|
||||
OP_MercenaryDataUpdateRequest=0x3a44
|
||||
OP_MercenaryDataUpdate=0x6c75
|
||||
OP_MercenaryDataRequest=0x4b77
|
||||
OP_MercenaryDataResponse=0x69a0
|
||||
OP_MercenaryHire=0x49cd
|
||||
OP_MercenaryDismiss=0x74bd
|
||||
OP_MercenaryTimer=0x34df
|
||||
OP_MercenaryTimerRequest=0x5f36
|
||||
OP_MercenaryUnknown1=0x305c
|
||||
OP_MercenaryCommand=0x2131
|
||||
OP_MercenarySuspendRequest=0x53e8
|
||||
OP_MercenarySuspendResponse=0x277d
|
||||
OP_MercenaryUnsuspendResponse=0x6ccc
|
||||
|
||||
# Looting
|
||||
OP_LootRequest=0x396f
|
||||
OP_EndLootRequest=0x12a6
|
||||
OP_LootItem=0x7e1d
|
||||
OP_LootComplete=0x46e8
|
||||
|
||||
# bazaar trader stuff:
|
||||
OP_BazaarSearch=0x0962
|
||||
OP_TraderDelItem=0x0000
|
||||
OP_BecomeTrader=0x3360
|
||||
OP_TraderShop=0x67f9
|
||||
OP_Trader=0x3f87
|
||||
OP_TraderBuy=0x0000
|
||||
OP_Barter=0x14b0
|
||||
OP_ShopItem=0x0000
|
||||
OP_BazaarInspect=0x0000
|
||||
OP_Bazaar=0x0000
|
||||
OP_TraderItemUpdate=0x0000
|
||||
|
||||
# pc/npc trading
|
||||
OP_TradeRequest=0x1695
|
||||
OP_TradeAcceptClick=0x0ecc
|
||||
OP_TradeRequestAck=0x6489
|
||||
OP_TradeCoins=0x35eb
|
||||
OP_FinishTrade=0x6897
|
||||
OP_CancelTrade=0x7e73
|
||||
OP_TradeMoneyUpdate=0x5857
|
||||
OP_MoneyUpdate=0x2044
|
||||
OP_TradeBusy=0x5ee9
|
||||
|
||||
# Sent after canceling trade or after closing tradeskill object
|
||||
OP_FinishWindow=0x00ef
|
||||
OP_FinishWindow2=0x7e90
|
||||
|
||||
# Sent on Live for what seems to be item existance verification
|
||||
# Ex. Before Right Click Effect happens from items
|
||||
OP_ItemVerifyRequest=0x3d17
|
||||
OP_ItemVerifyReply=0x0f0e
|
||||
|
||||
# merchant stuff
|
||||
OP_ShopPlayerSell=0x1650
|
||||
OP_ShopRequest=0x6dab
|
||||
OP_ShopEnd=0x44f1
|
||||
OP_ShopEndConfirm=0x07ad
|
||||
OP_ShopPlayerBuy=0x7d9b
|
||||
OP_ShopDelItem=0x2cec
|
||||
|
||||
# tradeskill stuff:
|
||||
OP_ClickObject=0x4370
|
||||
OP_ClickObjectAction=0x0883
|
||||
OP_ClearObject=0x4dd6
|
||||
OP_RecipeDetails=0x584c
|
||||
OP_RecipesFavorite=0x2e74
|
||||
OP_RecipesSearch=0x41ee
|
||||
OP_RecipeReply=0x1d46
|
||||
OP_RecipeAutoCombine=0x413d
|
||||
OP_TradeSkillCombine=0x268f
|
||||
|
||||
# Tribute Packets:
|
||||
OP_OpenGuildTributeMaster=0x4b72
|
||||
OP_OpenTributeMaster=0x58fb
|
||||
OP_SelectTribute=0x3cb7
|
||||
OP_TributeItem=0x796f
|
||||
OP_TributeMoney=0x7bed
|
||||
OP_TributeToggle=0x448c
|
||||
OP_TributePointUpdate=0x0ca7
|
||||
OP_TributeNPC=0x0000
|
||||
OP_GuildTributeInfo=0x0000
|
||||
OP_OpenTributeReply=0x0000
|
||||
OP_GuildTributeStatus=0x0000
|
||||
|
||||
# Adventure packets:
|
||||
OP_LeaveAdventure=0x37bd
|
||||
OP_AdventureFinish=0x2ebd
|
||||
OP_AdventureInfoRequest=0x258e
|
||||
OP_AdventureInfo=0x5df3
|
||||
OP_AdventureRequest=0x078c
|
||||
OP_AdventureDetails=0x451d
|
||||
OP_AdventureData=0x10da
|
||||
OP_AdventureUpdate=0x38bc
|
||||
OP_AdventureMerchantRequest=0x4958
|
||||
OP_AdventureMerchantResponse=0x71ab
|
||||
OP_AdventureMerchantPurchase=0x207d
|
||||
OP_AdventureMerchantSell=0x3307
|
||||
OP_AdventurePointsUpdate=0x0a93
|
||||
OP_AdventureStatsRequest=0x1b35
|
||||
OP_AdventureStatsReply=0x4cce
|
||||
OP_AdventureLeaderboardRequest=0x4ac4
|
||||
OP_AdventureLeaderboardReply=0x71c1
|
||||
|
||||
# Group Opcodes
|
||||
OP_GroupDisband=0x4039
|
||||
OP_GroupInvite=0x3b75
|
||||
OP_GroupFollow=0x3158
|
||||
OP_GroupUpdate=0x6b4e
|
||||
OP_GroupUpdateB=0x39c3
|
||||
OP_GroupCancelInvite=0x0000
|
||||
OP_GroupAcknowledge=0x4013
|
||||
OP_GroupDelete=0x2fb9
|
||||
OP_CancelInvite=0x4ea4
|
||||
OP_GroupFollow2=0x396c
|
||||
OP_GroupInvite2=0x4cc2
|
||||
OP_GroupDisbandYou=0x739a
|
||||
OP_GroupDisbandOther=0x416d
|
||||
OP_GroupLeaderChange=0x3153
|
||||
OP_GroupRoles=0x3d35
|
||||
OP_GroupMakeLeader=0x77a0
|
||||
OP_DoGroupLeadershipAbility=0x0c82
|
||||
OP_GroupLeadershipAAUpdate=0x4d85
|
||||
|
||||
# LFG/LFP Opcodes
|
||||
OP_LFGCommand=0x370c
|
||||
OP_LFGGetMatchesRequest=0x54e8
|
||||
OP_LFGGetMatchesResponse=0x444a
|
||||
OP_LFPGetMatchesRequest=0x55d6
|
||||
OP_LFPGetMatchesResponse=0x0928
|
||||
OP_LFPCommand=0x1df7
|
||||
OP_LFGAppearance=0x0000
|
||||
OP_LFGResponse=0x0000
|
||||
|
||||
# Raid Opcodes
|
||||
OP_RaidInvite=0x7e7e
|
||||
OP_RaidUpdate=0x1c5a
|
||||
OP_RaidJoin=0x0000
|
||||
|
||||
# Button-push commands
|
||||
OP_Taunt=0x4798
|
||||
OP_CombatAbility=0x182d
|
||||
OP_SenseTraps=0x3662
|
||||
OP_PickPocket=0x23c8
|
||||
OP_DisarmTraps=0x0000
|
||||
OP_Disarm=0x0bc6
|
||||
OP_Sneak=0x54a4
|
||||
OP_Fishing=0x1e3b
|
||||
OP_InstillDoubt=0x5a3f
|
||||
OP_FeignDeath=0x7bb7
|
||||
OP_Mend=0x56fb
|
||||
OP_Bind_Wound=0x174b
|
||||
OP_LDoNOpen=0x139f
|
||||
|
||||
# Task packets
|
||||
OP_TaskDescription=0x1eac
|
||||
OP_TaskActivity=0x4423
|
||||
OP_CompletedTasks=0x7046
|
||||
OP_TaskActivityComplete=0x7eee
|
||||
OP_AcceptNewTask=0x3d60
|
||||
OP_CancelTask=0x26a8
|
||||
OP_TaskMemberList=0x411e
|
||||
OP_OpenNewTasksWindow=0x2633
|
||||
OP_AvaliableTask=0x05cc
|
||||
OP_TaskHistoryRequest=0x72e1
|
||||
OP_TaskHistoryReply=0x0c1e
|
||||
OP_DeclineAllTasks=0x0000
|
||||
|
||||
# Title opcodes
|
||||
OP_NewTitlesAvailable=0x201f
|
||||
OP_RequestTitles=0x6034
|
||||
OP_SendTitleList=0x2142
|
||||
OP_SetTitle=0x740d
|
||||
OP_SetTitleReply=0x3196
|
||||
|
||||
# mail opcodes
|
||||
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 ###########
|
||||
|
||||
# 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_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_SlashAdventure=0x0000 # /adventure
|
||||
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_Some6ByteHPUpdate=0x0000 seems to happen when you target group members
|
||||
OP_QueryResponseThing=0x0000
|
||||
|
||||
|
||||
# realityincarnate: these are just here to stop annoying several thousand byte packet dumps
|
||||
#OP_LoginUnknown1=0x46d3 # OP_SendSpellChecksum
|
||||
#OP_LoginUnknown2=0x040b # OP_SendSkillCapsChecksum
|
||||
|
||||
# Petition Opcodes
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
Reference in New Issue
Block a user