Thread: Veil of Alaris
View Single Post
  #41  
Old 04-06-2012, 03:22 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

I spent a day working on VoA just to have something prepared in case Steam gets a new VoA client sometime soon.

I wrote a couple of scripts that make updating our patch_<expansion>.conf files a bit easier based on some other opcode info we have. It still requires some manual work to get all of the opcodes, but not nearly as much work as before.

Here is the March 21 2012 client .conf file I made using these new scripts with a few adjustments I made manually while working on the client:

Code:
# 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=0x7e4d					# 
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			# 

# haracter 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						# Testing VoA 0x5821
OP_ReqNewZone=0x4118					# 
OP_NewZone=0x43ac						# 
OP_ZoneSpawns=0x5f5e					# 
OP_PlayerProfile=0x6afd					# Testing VoA 0x6022
OP_TimeOfDay=0x6015						# 
OP_LevelUpdate=0x6a99					# 
OP_Stamina=0x7686						# 
OP_RequestClientZoneChange=0x224f		# 
OP_ZoneChange=0x0976					# 

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=0x1525					# 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=0x0643						# 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=0x0000						# Testing VoA 0x0555
OP_HPUpdate=0x2369						# 
OP_ManaChange=0x569a					# 
OP_TGB=0x3672							# 
OP_SpecialMesg=0x039d					# 
OP_GuildMemberList=0x51bc				# 
OP_GuildMOTD=0x0000						# Testing VoA 0x0a1d
OP_CharInventory=0x0000					# Testing VoA 0x6cfe
OP_WearChange=0x1a58					# 
OP_ClientUpdate=0x7062					# 
OP_ClientReady=0x6cdc					# 
OP_SetServerFilter=0x053a				# 

# Guild Opcodes
OP_GetGuildMOTD=0x3415					# 
OP_GetGuildMOTDReply=0x709d				# 
OP_GuildMemberUpdate=0x589f				# 
OP_GuildInvite=0x5488					# 
OP_GuildRemove=0x47d3					# 
OP_GuildPeace=0x2bff					# 
OP_SetGuildMOTD=0x5f85					# 
OP_GuildList=0x0000						# 
OP_GuildWar=0x5408						# 
OP_GuildLeader=0x0598					# 
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=0x4cf2					#
OP_GuildCreate=0x0000					#
# OP_GuildManageRemove=0x0000			# 
# OP_GuildManageAdd=0x0000				# 
# OP_GuildManageStatus=0x0000			# 

# GM/guide opcodes
OP_GMServers=0x6989						# 
OP_GMBecomeNPC=0x56e7					# 
OP_GMZoneRequest=0x701f					# 
OP_GMZoneRequest2=0x01					# 
OP_GMGoto=0x15a1						# 
OP_GMSearchCorpse=0x5a81				# 
OP_GMHideMe=0x28ef						# 
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=0x7bfb					# 

OP_InspectAnswer=0x0c54					# 
OP_BeginCast=0x0d5a						# 
OP_BuffFadeMsg=0x71bf					# 
OP_ConsentResponse=0x35c6				# 
OP_MemorizeSpell=0x3887					# 
OP_SwapSpell=0x28a7						# 
OP_CastSpell=0x50c2						# 
OP_Consider=0x70c6						# 
OP_FormattedMessage=0x4675				# 
OP_SimpleMessage=0x0698					#  
OP_Buff=0x3a18							# 
OP_Illusion=0x10b7						# 
OP_MoneyOnCorpse=0x4074					# 
OP_RandomReply=0x6d5d					# 
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=0x5bd9						# 
OP_Begging=0x32af						# 
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=0x1b8a					# 
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=0x631a						#  or OP_Action2?
OP_ChannelMessage=0x2e79				# 
OP_Assist=0x5658						# 
OP_AssistGroup=0x43bc					# 
OP_MoveCoin=0x2963						# 
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=0x3497							# 
OP_Jump=0x083b							# 
OP_Camp=0x3cd6							# 
OP_Emote=0x0000							# 
OP_SetRunMode=0x3d06					# 
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=0x1cb3						# 
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=0x03e7					# 
OP_ClickDoor=0x48f9						# 
OP_MoveDoor=0x231f						# 
OP_RemoveAllDoors=0x24a3				# 
OP_EnvDamage=0x2730						# 
OP_BoardBoat=0x7554						# 
OP_Forage=0x3c02						# 
OP_LeaveBoat=0x7286						# 
OP_ControlBoat=0x0ca5					# 
OP_SafeFallSuccess=0x6df7				# 
OP_RezzComplete=0x7108					# 
OP_RezzRequest=0x6024					# 
OP_RezzAnswer=0x2d41					# 
OP_Shielding=0x7598						# 
OP_RequestDuel=0x0e71					# 
OP_MobRename=0x6884						# 
OP_AugmentItem=0x4cc6					# 
OP_WeaponEquip1=0x11bc					# 
OP_WeaponEquip2=0x3f24					# Testing VoA 0x2121
OP_WeaponUnequip2=0x7b87				# 
OP_ApplyPoison=0x5cd3					# 
OP_Save=0x47e7							# 
OP_TestBuff=0x712b						# 
OP_CustomTitles=0x6ade					# 
OP_Split=0x0ed5							# 
OP_YellForHelp=0x1f87					# 
OP_LoadSpellSet=0x440f					# 
OP_Bandolier=0x3ad1						# 
OP_PotionBelt=0x7b7f					# 
OP_DuelResponse=0x1df9					# 
OP_DuelResponse2=0x36f8					# 
OP_SaveOnZoneReq=0x2913					# 
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			#  Mispelled?
OP_VetClaimRequest=0x032b				# 
OP_VetClaimReply=0x7b6e					# 
OP_CrystalCountUpdate=0x0000			# 
OP_DisciplineUpdate=0x0d8d				# 
OP_BecomeCorpse=0x0000					# 
OP_Action2=0x0000						# OP_Damage?
OP_MobUpdate=0x4656						# Same as OP_SpawnPositionUpdate
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=0x4acf

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=0x6d37						# 
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=0x6759					# 

# 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=0x3753						# 
OP_ShopEndConfirm=0x4762				# 
OP_ShopPlayerBuy=0x436a					# 
OP_ShopDelItem=0x63c8					# 

# 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=0x684c			# 
OP_AdventureStatsReply=0x15a7			# 
OP_AdventureLeaderboardRequest=0x0b89	# 
OP_AdventureLeaderboardReply=0x6bfb		# 

# Group Opcodes
OP_GroupDisband=0x4200					# 
OP_GroupInvite=0x3288					# 
OP_GroupFollow=0x1190					# 
OP_GroupUpdate=0x0000					#  
OP_GroupUpdateB=0x0000					#  
OP_GroupCancelInvite=0x0000				#  - Same as OP_CancelInvite?
OP_GroupAcknowledge=0x0000				# 
OP_GroupDelete=0x0000					# 
OP_CancelInvite=0x2736					# 
OP_GroupFollow2=0x6c16					# 
OP_GroupInvite2=0x5251					# 
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=0x1d22							# 
OP_Fishing=0x7093						# 
OP_InstillDoubt=0x221a					# 
OP_FeignDeath=0x6145					# 
OP_Mend=0x10a6							# 
OP_LDoNOpen=0x7c87						# 

# Task packets
OP_TaskActivityComplete=0x0000			# 
OP_TaskMemberList=0x0000				# 
OP_OpenNewTasksWindow=0x0000			# 
OP_AvaliableTask=0x0000					#  Mispelled?
OP_AcceptNewTask=0x0000					# 
OP_TaskHistoryRequest=0x6d1f			# 
OP_TaskHistoryReply=0x189b				# 
OP_CancelTask=0x47ea					# 
OP_DeclineAllTasks=0x0000				# 

# Title opcodes
OP_NewTitlesAvailable=0x6d95			# 
OP_RequestTitles=0x0000					# 
OP_SendTitleList=0x0000					# 
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				#
Here is the PP struct, which should be almost perfect for the current March 21 2012 client. I did have to add 20 bytes in near the end, which is probably because I miscalculated the struct somewhere and had 20 bytes missing. Either way, this struct is functional:
Code:
struct PlayerProfile_Struct
{
/*00000*/ uint32  checksum;				//
//BEGIN SUB-STRUCT used for shrouding stuff...
/*00004*/ uint32  gender;				// Player Gender - 0 Male, 1 Female
/*00008*/ uint32  race;					// Player race
/*00012*/ uint32  class_;				// Player class
/*00016*/ uint8  unknown00016[40];		// #### uint32  unknown00016;   in Titanium ####uint8[40]
/*00056*/ uint8   level;				// Level of player
/*00057*/ uint8   level1;				// Level of player (again?)
/*00058*/ uint8   unknown00058[2];		// ***Placeholder
/*00060*/ BindStruct binds[5];			// Bind points (primary is first)
/*00160*/ uint32  deity;				// deity
/*00164*/ uint32  intoxication;			// Alcohol level (in ticks till sober?)
/*00168*/ uint32  spellSlotRefresh[MAX_PP_MEMSPELL]; // Refresh time (millis) - 4 Octets Each
/*00216*/ uint8   unknown00208[6];		// Seen 00 00 00 00 00 00 00 00 00 00 00 00 02 01
/*00222*/ uint32  abilitySlotRefresh;
/*00226*/ uint8   haircolor;			// Player hair color
/*00227*/ uint8   beardcolor;			// Player beard color
/*00228*/ uint8   eyecolor1;			// Player left eye color
/*00229*/ uint8   eyecolor2;			// Player right eye color
/*00230*/ uint8   hairstyle;			// Player hair style
/*00231*/ uint8   beard;				// Player beard type
/*00232*/ uint8	  unknown00232[4];		// was 14 288
/*00236*/ union
	 {
		struct
		{
		/*236*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
		/*252*/ EquipStruct equip_chest; // Equiptment: Chest visual
		/*268*/ EquipStruct equip_arms; // Equiptment: Arms visual
		/*284*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
		/*300*/ EquipStruct equip_hands; // Equiptment: Hands visual
		/*316*/ EquipStruct equip_legs; // Equiptment: Legs visual
		/*332*/ EquipStruct equip_feet; // Equiptment: Boots visual
		/*348*/ EquipStruct equip_primary; // Equiptment: Main visual
		/*364*/ EquipStruct equip_secondary; // Equiptment: Off visual
		} equip;
		/*00236*/ EquipStruct equipment[9]; //Live Shows [108] for this part
	 };
/*00344*/ uint8 unknown00344[36];		// EquipStruct is now 16 bytes instead of 12
/*00380*/ uint8 unknown00380[220];		// Live Shows [160]
/*00600*/ Color_Struct item_tint[9];	// RR GG BB 00
/*00636*/ AA_Array  aa_array[MAX_PP_AA_ARRAY];	// [3600] AAs 12 bytes each
/*04236*/ uint32  points;				// Unspent Practice points - RELOCATED???
/*04240*/ uint32  mana;					// Current mana
/*04244*/ uint32  cur_hp;				// Current HP without +HP equipment
/*04248*/ uint32  STR;					// Strength - 6e 00 00 00 - 110
/*04252*/ uint32  STA;					// Stamina - 73 00 00 00 - 115
/*04256*/ uint32  CHA;					// Charisma - 37 00 00 00 - 55
/*04260*/ uint32  DEX;					// Dexterity - 50 00 00 00 - 80
/*04264*/ uint32  INT;					// Intelligence - 3c 00 00 00 - 60
/*04268*/ uint32  AGI;					// Agility - 5f 00 00 00 - 95
/*04272*/ uint32  WIS;					// Wisdom - 46 00 00 00 - 70
/*04276*/ uint8   unknown04188[28];		// 
/*04304*/ uint8   face;					// Player face - Actually int32?
/*04305*/ uint8   unknown04217[147];	// was [175]
/*04452*/ uint8   unknown04452[36];		// Spell related new to VoA March 21 2012
/*04488*/ int32   spell_book[MAX_PP_SPELLBOOK];	// List of the Spells in spellbook 720 = 90 pages [2880] was [1920]
/*06408*/ uint8   unknown06284[960];			// Spacer for the end of the book for now (pages 60 to 90)
/*07368*/ int32   mem_spells[MAX_PP_MEMSPELL];	// [48] List of spells memorized
/*07416*/ uint8   unknown07284[20];		//#### uint8 unknown04396[32]; in Titanium ####[28]
/*07436*/ uint32  platinum;				// Platinum Pieces on player
/*07440*/ uint32  gold;					// Gold Pieces on player
/*07444*/ uint32  silver;				// Silver Pieces on player
/*07448*/ uint32  copper;				// Copper Pieces on player
/*07452*/ uint32  platinum_cursor;		// Platinum Pieces on cursor
/*07456*/ uint32  gold_cursor;			// Gold Pieces on cursor
/*07460*/ uint32  silver_cursor;		// Silver Pieces on cursor
/*07464*/ uint32  copper_cursor;		// Copper Pieces on cursor
/*07468*/ uint32  skills[MAX_PP_SKILL];	// [300] List of skills
		  //uint32  innateSkills[25];	// -72
/*07768*/ uint8   unknown07644[236]; // -272 - 16 = -256 + 236 = -20
/*08004*/ uint32  toxicity;				// Potion Toxicity (15=too toxic, each potion adds 3)
/*08008*/ uint32  thirst_level;			// Drink (ticks till next drink)
/*08012*/ uint32  hunger_level;			// Food (ticks till next eat)
/*08016*/ SpellBuff_Struct buffs[BUFF_COUNT];	// [2200] Buffs currently on the player (30 Max) - (Each Size 88)
/*10216*/ SpellBuff_Struct MoreBuffs[5];	// 440 -1064 (-116 to go)
/*10656*/ uint8   unknown08492[1056];		// End of Buffs - was [360] - Added 360 for Feb 8 2011, not sure exactly where these extra bytes go, but know they go before zone_id.
/*11712*/ Disciplines_Struct  disciplines;	// [400] Known disciplines
/*12112*/ uint8   unknown11252[400];		// Discs?
/*12512*/ uint32  recastTimers[MAX_RECAST_TYPES]; // [80] Timers (UNIX Time of last use)
/*12912*/ uint8   unknown11732[480];		// Some type of Timers was 160
/*13072*/ uint32  endurance;			// Current endurance
/*13076*/ uint8   unknown13076[20];		// 
/*13096*/ uint32  aapoints_spent;		// Number of spent AA points
/*13100*/ uint32  aapoints;				// Unspent AA points
/*13104*/ uint8 unknown11924[4];
/*13108*/ Bandolier_Struct bandoliers[MAX_PLAYER_BANDOLIER]; // [6400] bandolier contents
/*19508*/ PotionBelt_Struct  potionbelt;	// [360] potion belt 72 extra octets by adding 1 more belt slot
/*19868*/ uint8 unknown18688[8];
/*19876*/ uint32 available_slots;
/*19880*/ uint8 unknown18700[80];		//
//END SUB-STRUCT used for shrouding. 
/*19960*/ char    name[64];				// Name of player - 19960 for Live 1180 difference
/*20024*/ char    last_name[32];		// Last name of player
/*20056*/ uint8   unknown18876[12];		//#### Not In Titanium #### new to SoF[12]
/*20068*/ int32   guild_id;				// guildid
/*20072*/ uint32  birthday;				// character birthday
/*20076*/ uint32  account_startdate;	// Date the Account was started
/*20080*/ uint32  lastlogin;			// character last save time
/*20084*/ uint32  timePlayedMin;		// time character played
/*20088*/ uint8   pvp;					// 1=pvp, 0=not pvp
/*20089*/ uint8   anon;					// 2=roleplay, 1=anon, 0=not anon
/*20090*/ uint8   gm;					// 0=no, 1=yes (guessing!)
/*20091*/ int8    guildrank;			// 0=member, 1=officer, 2=guildleader -1=no guild
/*20092*/ uint32  guildbanker;
/*20096*/ uint8 unknown18912[12];		// was 4
/*20108*/ uint32  exp;					// Current Experience
/*20112*/ uint8 unknown18920[8];
/*20120*/ uint32  timeentitledonaccount;
/*20124*/ uint8   languages[MAX_PP_LANGUAGE]; // List of languages
/*20149*/ uint8   unknown18957[7];    //#### uint8   unknown13109[4]; in Titanium ####[7]
/*20156*/ float     y;                  // Players y position (NOT positive about this switch)
/*20160*/ float     x;                  // Players x position
/*20164*/ float     z;                  // Players z position
/*20168*/ float     heading;            // Players heading
/*20172*/ uint8   unknown18980[4];		// ***Placeholder
/*20176*/ uint32  platinum_bank;		// Platinum Pieces in Bank
/*20180*/ uint32  gold_bank;			// Gold Pieces in Bank
/*20184*/ uint32  silver_bank;			// Silver Pieces in Bank
/*20188*/ uint32  copper_bank;			// Copper Pieces in Bank
/*20192*/ uint32  platinum_shared;		// Shared platinum pieces
/*20196*/ uint32  unknown20196[3];		// 
/*20208*/ uint8 unknown19004[2112];		//
/*22320*/ uint32  expansions;			// Bitmask for expansions ff 7f 00 00 - SoD
/*22324*/ uint8 unknown21132[12];
/*22336*/ uint32  autosplit;			// 0 = off, 1 = on
/*22340*/ uint8 unknown21148[16];
/*22356*/ uint16  zone_id;				// see zones.h
/*22358*/ uint16  zoneInstance;			// Instance id
/*22360*/ char      groupMembers[MAX_GROUP_MEMBERS][64];// 384 all the members in group, including self
/*22744*/ char      groupLeader[64];	// Leader of the group ?
/*22808*/ uint8 unknown21616[540];		// was [604]
/*23348*/ uint32  entityid;
/*23352*/ uint32  leadAAActive;			// 0 = leader AA off, 1 = leader AA on
/*23356*/ uint8 unknown22228[4];
/*23360*/ sint32  ldon_points_guk;		// Earned GUK points
/*23364*/ sint32  ldon_points_mir;		// Earned MIR points
/*23368*/ sint32  ldon_points_mmc;		// Earned MMC points
/*23372*/ sint32  ldon_points_ruj;		// Earned RUJ points
/*23376*/ sint32  ldon_points_tak;		// Earned TAK points
/*23380*/ sint32  ldon_points_available;// Available LDON points
/*23384*/ uint8 unknown22256[136];		// was [144]
/*23520*/ uint8 unknown23520[8];		//
/*23528*/ float  tribute_time_remaining;// Time remaining on tribute (millisecs)
/*23532*/ uint32  career_tribute_points;// Total favor points for this char
/*23536*/ uint32  unknown22332;			// *** Placeholder
/*23540*/ uint32  tribute_points;		// Current tribute points
/*23544*/ uint32  unknown22340;			// *** Placeholder
/*23548*/ uint32  tribute_active;		// 0 = off, 1=on
/*23552*/ Tribute_Struct tributes[MAX_PLAYER_TRIBUTES]; // [60] Current tribute loadout
/*23612*/ uint8 unknown22348[64];		// 
/*23676*/ double group_leadership_exp;	// Current group lead exp points
/*23684*/ double raid_leadership_exp;	// Current raid lead AA exp points
/*23692*/ uint32  group_leadership_points; // Unspent group lead AA points
/*23696*/ uint32  raid_leadership_points;  // Unspent raid lead AA points
/*23700*/ LeadershipAA_Struct leader_abilities; // [128]Leader AA ranks 19332
/*23828*/ uint8 unknown22632[128];		// was [132]
/*23956*/ uint32  air_remaining;		// Air supply (seconds)
/*23960*/ uint32  PVPKills;
/*23964*/ uint32  PVPDeaths;
/*23968*/ uint32  PVPCurrentPoints;
/*23972*/ uint32  PVPCareerPoints;
/*23976*/ uint32  PVPBestKillStreak;
/*23980*/ uint32  PVPWorstDeathStreak;
/*23984*/ uint32  PVPCurrentKillStreak;
/*23988*/ PVPStatsEntry_Struct PVPLastKill;		// size 88
/*24076*/ PVPStatsEntry_Struct PVPLastDeath;	// size 88
/*24164*/ uint32  PVPNumberOfKillsInLast24Hours;
/*24168*/ PVPStatsEntry_Struct PVPRecentKills[50];	// size 4400 - 88 each
/*28568*/ uint32 expAA;					// Exp earned in current AA point
/*28572*/ uint8  unknown27380[40];
/*28612*/ uint32 currentRadCrystals;	// Current count of radiant crystals
/*28616*/ uint32 careerRadCrystals;		// Total count of radiant crystals ever
/*28620*/ uint32 currentEbonCrystals;	// Current count of ebon crystals
/*28624*/ uint32 careerEbonCrystals;	// Total count of ebon crystals ever
/*28628*/ uint8  groupAutoconsent;		// 0=off, 1=on
/*28629*/ uint8  raidAutoconsent;		// 0=off, 1=on
/*28630*/ uint8  guildAutoconsent;		// 0=off, 1=on
/*28631*/ uint8  unknown27439;			// ***Placeholder (6/29/2005)
/*28632*/ uint32 level3;				// SoF looks at the level here to determine how many leadership AA you can bank.
/*28636*/ uint32 showhelm;				// 0=no, 1=yes
/*28640*/ uint32 RestTimer;
/*28644*/ uint8  unknown27452[1036];	// ***Placeholder (2/13/2007) was[1028]or[940]or[1380] - END of Struct 
/*29680*/ uint8  unknown29680[28];		// was 8 (added 20 to the end to get the right packet size)
/*29688*/
};
Note that for this PP to work, you have to change the following field to be 12 instead of 10:

Code:
static const uint32 MAX_PP_MEMSPELL		= 12;
Otherwise, you can add 8 bytes after the 2 fields that use that value and leave it as 10.

Also, here are the character select struct changes that are required to see characters properly:

Code:
struct CharacterSelectEntry_Struct {
/*0000*/	uint8 level;				//
/*0000*/	uint8 hairstyle;			//
/*0002*/	uint8 gender;				//
/*0003*/	char name[1];				//variable length, edi+0
/*0000*/	uint8 beard;				//
/*0000*/	uint8 haircolor;			//
/*0000*/	uint8 face;					//
/*0000*/	CharSelectEquip	equip[9];
/*0000*/	uint32 primary;				//
/*0000*/	uint32 secondary;			//
/*0000*/	uint8 u15;					// 0xff
/*0000*/	uint32 deity;				//
/*0000*/	uint16 zone;				//
/*0000*/	uint16 instance;
/*0000*/	uint8 gohome;				//
/*0000*/	uint8 u19;					// 0xff
/*0000*/	uint32 race;				//
/*0000*/	uint8 tutorial;				//
/*0000*/	uint8 class_;				//
/*0000*/	uint8 eyecolor1;			//
/*0000*/	uint8 beardcolor;			//
/*0000*/	uint8 eyecolor2;			//
/*0000*/	uint32 drakkin_heritage;	// Drakkin Heritage
/*0000*/	uint32 drakkin_tattoo;		// Drakkin Tattoo
/*0000*/	uint32 drakkin_details;		// Drakkin Details (Facial Spikes)
/*0000*/	uint8 unknown;				// New field to Live
/*0000*/	uint8 char_enabled;			// 0 for disabled character, 1 for enabled
/*0000*/	uint32 LastLogin;			// Unix timestamp of last login - 1212696584
/*0000*/	uint8 unknown2;				// 
/*0000*/	uint8 unknown3;				// 
/*0000*/	uint32 unknown4;			// Seen 01 00 00 00
};
There are a few unknowns there which I am not sure about. Also, I assume there is a new separate packet that sets the character creation limit (0/0 characters). So, until that is figured out, you can only use accounts that have existing characters on them.

Other than that, I think the only other thing I had to do was add 37 bytes to the spawn struct and I was able to get all of the way in-game. Unfortunately, the game closes immediately after you completely zone in. I found a few other struct size changes that were required, but still haven't figured out what is causing the client to close. My best guess is that it is due to me setting the inventory opcode to 0x0000 to prevent the packet from crashing the client completely. Maybe if I can figure out the item struct changes it will work, but that is probably the biggest change required for Live clients to work and I don't think it will be easy due to how slots were changed around.

I may work on it a bit more if I get time, but figured I would share the info I have so far in case anyone else wants to work on it.

If Steam doesn't release a functional client that we can use for EQEmu, we will need some way for the community to get a compatible client legally. Maybe there is a way we can do an update every 6 months or so to work with Live clients, but that still leaves out anyone that tries to join between those times after a new patch is in place that breaks compatibility. I just don't want to have to do this type of thing every month as it takes quite a bit of time. At least with the new scripts I made, it should make filling in 90% of the opcodes much quicker.

There may be a chance that Steam isn't getting a new client just because SOE knows that is where we have been getting our clients. If they were smart, they would just put a good VoA client on Steam and not a F2P HoT client or maybe the HoT client would be a different download to get just the patcher, since it still costs money to buy VoA (only up to HoT is free). Then, at least they would still make money off of EQEmu players vs forcing us to try to use Live patched clients which are free to everyone. If they want to stop EQEmu, there are much easier ways to do it, though I don't want to give them any ideas lol. I imagine they don't really care as much as you might think they would. So, hopefully EQ1 isn't on Steam right now just because Steam is always slow to get EQ client updates put up on their site.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!

Last edited by trevius; 04-06-2012 at 03:37 AM..
Reply With Quote