From 0e643752bda0d3f04139732ff7b4516384f53264 Mon Sep 17 00:00:00 2001 From: Jurgen De Leon Date: Wed, 25 Sep 2024 17:30:47 -0500 Subject: [PATCH 1/2] - Public Entity - PacketDelegate - Event Delegate --- AOSnifferNET/AOSnifferNET.csproj | 8 + .../Harvestable/HarvestableObject.cs | 2 +- .../Packets/Events/HarvestableChangeState.cs | 2 +- .../Packets/Events/HarvestableObjectList.cs | 2 +- .../Packets/Events/InCombatStateUpdate.cs | 2 +- .../Events/evActiveSpellEffectsUpdate.cs | 12 + .../Packets/Events/evAttachItemContainer.cs | 2 +- .../AlbionObjects/Packets/Events/evAttack.cs | 2 +- .../Packets/Events/evCastHits.cs | 12 + .../Packets/Events/evCastStart.cs | 12 + .../Packets/Events/evCastTimeUpdate.cs | 12 + .../Events/evCharacterEquipmentChanged.cs | 2 +- .../Events/evEasyAntiCheatMessageToClient.cs | 12 + .../Packets/Events/evFishingMiniGame.cs | 12 + .../Packets/Events/evHarvestFinished.cs | 2 +- .../Packets/Events/evHarvestStart.cs | 2 +- .../Packets/Events/evHealthUpdate.cs | 2 +- .../Packets/Events/evInventoryPutItem.cs | 2 +- .../Packets/Events/evJoinFinished.cs | 2 +- .../AlbionObjects/Packets/Events/evLeave.cs | 2 +- .../Packets/Events/evMobChangeState.cs | 2 +- .../AlbionObjects/Packets/Events/evMounted.cs | 2 +- .../Packets/Events/evNewBuilding.cs | 2 +- .../Packets/Events/evNewCharacter.cs | 2 +- .../AlbionObjects/Packets/Events/evNewExit.cs | 2 +- .../Packets/Events/evNewFishingZoneObject.cs | 2 +- .../Packets/Events/evNewFloatObject.cs | 2 +- .../AlbionObjects/Packets/Events/evNewLoot.cs | 2 +- .../AlbionObjects/Packets/Events/evNewMob.cs | 2 +- .../Packets/Events/evNewMountObject.cs | 2 +- .../Packets/Events/evNewPortalExit.cs | 2 +- .../Packets/Events/evNewSimpleItem.cs | 2 +- .../Packets/Events/evUpdateSilver.cs | 2 +- .../Packets/Operations/Request/opMove.cs | 2 +- AOSnifferNET/AlbionPackets/PacketDelegate.cs | 42 ++ AOSnifferNET/AlbionPackets/PacketHandler.cs | 438 +++++++++++++++--- AOSnifferNET/AlbionPackets/PacketReciever.cs | 9 +- 37 files changed, 527 insertions(+), 96 deletions(-) create mode 100644 AOSnifferNET/AlbionObjects/Packets/Events/evActiveSpellEffectsUpdate.cs create mode 100644 AOSnifferNET/AlbionObjects/Packets/Events/evCastHits.cs create mode 100644 AOSnifferNET/AlbionObjects/Packets/Events/evCastStart.cs create mode 100644 AOSnifferNET/AlbionObjects/Packets/Events/evCastTimeUpdate.cs create mode 100644 AOSnifferNET/AlbionObjects/Packets/Events/evEasyAntiCheatMessageToClient.cs create mode 100644 AOSnifferNET/AlbionObjects/Packets/Events/evFishingMiniGame.cs create mode 100644 AOSnifferNET/AlbionPackets/PacketDelegate.cs diff --git a/AOSnifferNET/AOSnifferNET.csproj b/AOSnifferNET/AOSnifferNET.csproj index 0d41438..6e7d58d 100644 --- a/AOSnifferNET/AOSnifferNET.csproj +++ b/AOSnifferNET/AOSnifferNET.csproj @@ -111,6 +111,7 @@ ..\packages\SharpPcap.6.2.5\lib\netstandard2.0\SharpPcap.dll + True @@ -151,8 +152,14 @@ + + + + + + @@ -188,6 +195,7 @@ + diff --git a/AOSnifferNET/AlbionObjects/Harvestable/HarvestableObject.cs b/AOSnifferNET/AlbionObjects/Harvestable/HarvestableObject.cs index 44398e2..54c2170 100644 --- a/AOSnifferNET/AlbionObjects/Harvestable/HarvestableObject.cs +++ b/AOSnifferNET/AlbionObjects/Harvestable/HarvestableObject.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class HarvestableObject + public class HarvestableObject { public int id; public byte type; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/HarvestableChangeState.cs b/AOSnifferNET/AlbionObjects/Packets/Events/HarvestableChangeState.cs index 3935288..e8ffd23 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/HarvestableChangeState.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/HarvestableChangeState.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class HarvestableChangeState + public class HarvestableChangeState { public int id; public int charges; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/HarvestableObjectList.cs b/AOSnifferNET/AlbionObjects/Packets/Events/HarvestableObjectList.cs index 0622736..e0efbc7 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/HarvestableObjectList.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/HarvestableObjectList.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class HarvestableObjectList + public class HarvestableObjectList { public List harvestableObjectList; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/InCombatStateUpdate.cs b/AOSnifferNET/AlbionObjects/Packets/Events/InCombatStateUpdate.cs index 2738a8d..3b00703 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/InCombatStateUpdate.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/InCombatStateUpdate.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class InCombatStateUpdate + public class InCombatStateUpdate { //InCombatStateUpdate: {"0":297731,"2":true,"252":255} public long playerId; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evActiveSpellEffectsUpdate.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evActiveSpellEffectsUpdate.cs new file mode 100644 index 0000000..3a0e46a --- /dev/null +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evActiveSpellEffectsUpdate.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AOSnifferNET +{ + public class evActiveSpellEffectsUpdate + { + } +} diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evAttachItemContainer.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evAttachItemContainer.cs index 91e8d1e..df6710d 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evAttachItemContainer.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evAttachItemContainer.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evAttachItemContainer + public class evAttachItemContainer { public int objectID; public byte[] ownerMarkID; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evAttack.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evAttack.cs index 7faed42..c3d6aa1 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evAttack.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evAttack.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evAttack + public class evAttack { public int attackerID; public int targetID; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evCastHits.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evCastHits.cs new file mode 100644 index 0000000..02077d8 --- /dev/null +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evCastHits.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AOSnifferNET +{ + public class evCastHits + { + } +} diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evCastStart.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evCastStart.cs new file mode 100644 index 0000000..ec28858 --- /dev/null +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evCastStart.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AOSnifferNET +{ + public class evCastStart + { + } +} diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evCastTimeUpdate.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evCastTimeUpdate.cs new file mode 100644 index 0000000..aba4aa8 --- /dev/null +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evCastTimeUpdate.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AOSnifferNET +{ + public class evCastTimeUpdate + { + } +} diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evCharacterEquipmentChanged.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evCharacterEquipmentChanged.cs index d721365..454292f 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evCharacterEquipmentChanged.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evCharacterEquipmentChanged.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evCharacterEquipmentChanged + public class evCharacterEquipmentChanged { public short[] items; public short[] skills; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evEasyAntiCheatMessageToClient.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evEasyAntiCheatMessageToClient.cs new file mode 100644 index 0000000..81d022f --- /dev/null +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evEasyAntiCheatMessageToClient.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AOSnifferNET +{ + public class evEasyAntiCheatMessageToClient + { + } +} diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evFishingMiniGame.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evFishingMiniGame.cs new file mode 100644 index 0000000..ba8c0f4 --- /dev/null +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evFishingMiniGame.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AOSnifferNET +{ + public class evFishingMiniGame + { + } +} diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evHarvestFinished.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evHarvestFinished.cs index b4fc5bd..d159086 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evHarvestFinished.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evHarvestFinished.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evHarvestFinished + public class evHarvestFinished { public int playerId; public int harvestableId; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evHarvestStart.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evHarvestStart.cs index b084697..aa7aefd 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evHarvestStart.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evHarvestStart.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { //HarvestStart: {"0":807374,"1":637995874087127581,"2":637995874087127581,"3":3802,"4":23,"5":1.4,"6":807547,"7":2151,"252":52} 0: playerId 3: harvestableId 4:type 5:time to finish - internal class evHarvestStart + public class evHarvestStart { public int harvestableId; public float timeToFinish; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evHealthUpdate.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evHealthUpdate.cs index 18c6390..7ce1673 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evHealthUpdate.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evHealthUpdate.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { // mi id: "characterId":166380" PACKETE: {"0: targetEntityId":166414,"1":14992275,"2: healthUpdate":-10.0,"3: targetEntityCurrentHealth":591.0,"4":1,"5":5,"6: attackerEntityId":166380,"7":1757,"252":6} - internal class evHealthUpdate + public class evHealthUpdate { public int targetEntityId; public int targetHealthUpdate; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evInventoryPutItem.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evInventoryPutItem.cs index d855923..51a797e 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evInventoryPutItem.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evInventoryPutItem.cs @@ -2,7 +2,7 @@ namespace AOSnifferNET { - internal class evInventoryPutItem + public class evInventoryPutItem { public int itemID; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evJoinFinished.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evJoinFinished.cs index 713fc56..7bbb621 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evJoinFinished.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evJoinFinished.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evJoinFinished + public class evJoinFinished { public bool joinFinished; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evLeave.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evLeave.cs index c4f8745..eb09af7 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evLeave.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evLeave.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evLeave + public class evLeave { public int entityId; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evMobChangeState.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evMobChangeState.cs index 521efd8..8635fea 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evMobChangeState.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evMobChangeState.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evMobChangeState + public class evMobChangeState { public int mobID; public short enchantment; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evMounted.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evMounted.cs index 508c992..52ac69d 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evMounted.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evMounted.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evMounted + public class evMounted { public int playerId; public bool isMounted; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewBuilding.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewBuilding.cs index 33e1fdc..6628e0b 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewBuilding.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewBuilding.cs @@ -4,7 +4,7 @@ namespace AOSnifferNET { // {"0":3978,"1":"/rjqYKIGrkKfUuUcq51rxA==","2":466,"3":"MOUNTAIN_GREEN_REPAIRSHOP_OUTPOST","4":[285.0,-294.0],"8":"System","9":"System","13":true,"16":17496000000,"17":638132642575260623,"18":7950000000,"19":-1,"20":638238907980059788,"21":7949930000,"22":638132642575260623,"26":true,"27":true,"28":true,"29":0,"252":41} - internal class evNewBuilding + public class evNewBuilding { public int packetID; public string name; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewCharacter.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewCharacter.cs index ce7f0d7..9d496d9 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewCharacter.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewCharacter.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evNewCharacter + public class evNewCharacter { public int id; public string nick; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewExit.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewExit.cs index 798a622..877ee94 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewExit.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewExit.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { // {"0":1,"1":"P0qQVW1rgESBs9jwDb9+ZA==","2":[-15.0,35.0],"252":205} - internal class evNewExit + public class evNewExit { public Single[] pos; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewFishingZoneObject.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewFishingZoneObject.cs index ef59a6a..79eb755 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewFishingZoneObject.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewFishingZoneObject.cs @@ -4,7 +4,7 @@ namespace AOSnifferNET { //NewFishingZoneObject: { "0":1182,"1":[253.4,52.8],"2":3,"3":2,"4":"FishingNodeSwarm","252":341} //0: objectID 1: zone pos 2:charges (not present when empty) 3:times fished from 4:zone tipe - internal class evNewFishingZoneObject + public class evNewFishingZoneObject { public int objectID; public Single[] zonePos; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewFloatObject.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewFloatObject.cs index 2909c36..ea86d1c 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewFloatObject.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewFloatObject.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evNewFloatObject + public class evNewFloatObject { public int bobberID; public Single[] bobberPos; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewLoot.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewLoot.cs index 7daaca0..22c9546 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewLoot.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewLoot.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evNewLoot + public class evNewLoot { public int lootId; public Single[] pos; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewMob.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewMob.cs index 5354097..9e9c572 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewMob.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewMob.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { // map[0:830511 1:753 2:-1 6: 7:[-270 -68] 8:[-270 -68] 9:63249422 10:180 11:2.25 13:385 14:385 16:63249422 17:138 18:138 19:4 20:63249422 28:0 252:113] - internal class evNewMob + public class evNewMob { public int id; public int typeId; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewMountObject.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewMountObject.cs index 94c3168..dee149a 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewMountObject.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewMountObject.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evNewMountObject + public class evNewMountObject { public int id; public float[] pos; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewPortalExit.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewPortalExit.cs index 343ab35..7314306 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewPortalExit.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewPortalExit.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { // [0:1871612 1:[70 -201] 3:MOUNTAIN_GREEN_RANDOM_EXIT_10x10_PORTAL_SOLO_B 4:true 5:0 11:0 12:1 252:301] - internal class evNewPortalExit + public class evNewPortalExit { public int id; public Single[] pos; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evNewSimpleItem.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evNewSimpleItem.cs index 38e176d..5cfd658 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evNewSimpleItem.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evNewSimpleItem.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evNewSimpleItem + public class evNewSimpleItem { public int objectID; public int itemID; diff --git a/AOSnifferNET/AlbionObjects/Packets/Events/evUpdateSilver.cs b/AOSnifferNET/AlbionObjects/Packets/Events/evUpdateSilver.cs index ba15012..ac2cdc1 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Events/evUpdateSilver.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Events/evUpdateSilver.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class evUpdateSilver + public class evUpdateSilver { public int id; public long currentSilver; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opMove.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opMove.cs index 0bb385d..4202ec3 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opMove.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opMove.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { // [OnRequest]Move: [{"Key":0,"Value":637885351667868041},{"Key":1,"Value":[-21.3366661,12.3170137]},{"Key":2,"Value":138.935577},{"Key":3,"Value":[-21.3366661,12.3170137]},{"Key":4,"Value":8.8},{"Key":253,"Value":21}] - internal class opMove + public class opMove { public long id; public float[] pos; diff --git a/AOSnifferNET/AlbionPackets/PacketDelegate.cs b/AOSnifferNET/AlbionPackets/PacketDelegate.cs new file mode 100644 index 0000000..7ad8252 --- /dev/null +++ b/AOSnifferNET/AlbionPackets/PacketDelegate.cs @@ -0,0 +1,42 @@ +using System; + +namespace AOSnifferNET +{ + public delegate void RequestMove(opMove data); + + public delegate void EventEntityMove(Entity data); + public delegate void EventCharacterEquipmentChanged(evCharacterEquipmentChanged data); + public delegate void EventNewExit(evNewExit data); + public delegate void EventInventoryPutItem(evInventoryPutItem data); + public delegate void EventNewItem(evNewSimpleItem data); + public delegate void EventAttachItemContainer(evAttachItemContainer data); + public delegate void EventNewLoot(evNewLoot data); + public delegate void EventNewCharacter(evNewCharacter data); + public delegate void EventLeave(evLeave data); + public delegate void EventMounted(evMounted data); + public delegate void EventNewMountObject(evNewMountObject data); + public delegate void EventNewMob(evNewMob data); + public delegate void EventJoinFinished(evJoinFinished data); + public delegate void EventUpdateSilver(evUpdateSilver data); + public delegate void EventHarvestableObject(HarvestableObject data); + public delegate void EventHarvestableObjectList(HarvestableObjectList data); + public delegate void EventHarvestableChangeState(HarvestableChangeState data); + public delegate void EventMobChangeState(evMobChangeState data); + public delegate void EventInCombatStateUpdate(InCombatStateUpdate data); + public delegate void EventHealthUpdate(evHealthUpdate data); + public delegate void EventAttack(evAttack data); + public delegate void EventNewPortalExit(evNewPortalExit data); + public delegate void EventActiveSpellEffectsUpdate(evActiveSpellEffectsUpdate data); + public delegate void EventHarvestStart(evHarvestStart data); + public delegate void EventHarvestFinished(evHarvestFinished data); + public delegate void EventNewFloatObject(evNewFloatObject data); + public delegate void EventNewFishingZoneObject(evNewFishingZoneObject data); + public delegate void EventFishingMiniGame(evFishingMiniGame data); + public delegate void EventNewBuilding(evNewBuilding data); + public delegate void EventEasyAntiCheatMessageToClient(evEasyAntiCheatMessageToClient data); + public delegate void EventCastHits(evCastHits data); + public delegate void EventCastStart(evCastStart data); + public delegate void EventCastTimeUpdate(evCastTimeUpdate data); + + public delegate void RespondHarvestStart(string Class, string Method, Exception Ex); +} diff --git a/AOSnifferNET/AlbionPackets/PacketHandler.cs b/AOSnifferNET/AlbionPackets/PacketHandler.cs index 7678f7c..25d3a7b 100644 --- a/AOSnifferNET/AlbionPackets/PacketHandler.cs +++ b/AOSnifferNET/AlbionPackets/PacketHandler.cs @@ -9,16 +9,59 @@ namespace AOSnifferNET { - class PacketHandler : PhotonParser + public class PacketHandler : PhotonParser { + public event RequestMove OnRequestMove; + + public event EventEntityMove OnEventEntityMove; + public event EventCharacterEquipmentChanged OnEventCharacterEquipmentChanged; + public event EventNewExit OnEventNewExit; + public event EventInventoryPutItem OnEventInventoryPutItem; + public event EventNewItem OnNewEquipmentItem; + public event EventNewItem OnNewSimpleItem; + public event EventNewItem OnNewFurnitureItem; + public event EventNewItem OnNewJournalItem; + public event EventNewItem OnNewLaborerItem; + public event EventAttachItemContainer OnEventAttachItemContainer; + public event EventNewLoot OnEventNewLoot; + public event EventNewCharacter OnEventNewCharacter; + public event EventLeave OnEventevLeave; + public event EventMounted OnEventMounted; + public event EventNewMountObject OnEventNewMountObject; + public event EventNewMob OnEventNewMob; + public event EventJoinFinished OnEventJoinFinished; + public event EventUpdateSilver OnEventUpdateSilver; + public event EventHarvestableObject OnEventHarvestableObject; + public event EventHarvestableObjectList OnEventHarvestableObjectList; + public event EventHarvestableChangeState OnEventHarvestableChangeState; + public event EventMobChangeState OnEventMobChangeState; + + public event EventInCombatStateUpdate OnEventInCombatStateUpdate; + public event EventHealthUpdate OnEventHealthUpdate; + public event EventAttack OnEventAttack; + public event EventNewPortalExit OnEventNewPortalExit; + public event EventActiveSpellEffectsUpdate OnEventActiveSpellEffectsUpdate; + public event EventHarvestStart OnEventHarvestStart; + public event EventHarvestFinished OnEventHarvestFinished; + public event EventNewFloatObject OnEventNewFloatObject; + public event EventNewFishingZoneObject OnEventNewFishingZoneObject; + public event EventFishingMiniGame OnEventFishingMiniGame; + public event EventNewBuilding OnEventNewBuilding; + public event EventEasyAntiCheatMessageToClient OnEventEasyAntiCheatMessageToClient; + public event EventCastHits OnEventCastHits; + public event EventCastStart OnEventCastStart; + public event EventCastTimeUpdate OnEventCastTimeUpdate; + public PacketHandler() { } protected override void OnEvent(byte code, Dictionary parameters) { EventCodes evCode = 0; + if (code == 1) { parameters.TryGetValue((byte)252, out object val); + if (val == null) return; if (!int.TryParse(val.ToString(), out int iCode)) return; @@ -27,11 +70,12 @@ protected override void OnEvent(byte code, Dictionary parameters) { evCode = (EventCodes)iCode; } - catch (System.Collections.Generic.KeyNotFoundException) + catch (KeyNotFoundException) { debugPacket(parameters, iCode); } - }else + } + else { evCode = (EventCodes)code; } @@ -41,121 +85,151 @@ protected override void OnEvent(byte code, Dictionary parameters) case EventCodes.Move: onEntityMovementEvent(parameters); break; + case EventCodes.CharacterEquipmentChanged: onCharacterEquipmentChanged(parameters); break; + case EventCodes.NewExit: - //onNewExit(parameters); + onNewExit(parameters); break; + case EventCodes.InventoryPutItem: onInventoryPutItem(parameters); break; + case EventCodes.NewEquipmentItem: - onNewGeneralItem(parameters, evCode); + onNewEquipmentItem(parameters, evCode); break; + case EventCodes.NewSimpleItem: - onNewGeneralItem(parameters, evCode); + onNewSimpleItem(parameters, evCode); break; + case EventCodes.NewFurnitureItem: - onNewGeneralItem(parameters, evCode); + onNewFurnitureItem(parameters, evCode); break; + case EventCodes.NewJournalItem: - onNewGeneralItem(parameters, evCode); + onNewJournalItem(parameters, evCode); break; + case EventCodes.NewLaborerItem: - onNewGeneralItem(parameters, evCode); + onNewLaborerItem(parameters, evCode); break; + case EventCodes.AttachItemContainer: onAttachItemContainer(parameters); break; + case EventCodes.NewLoot: onNewLoot(parameters); break; + case EventCodes.NewCharacter: onNewCharacter(parameters); break; + case EventCodes.Leave: onLeaveEvent(parameters); break; + case EventCodes.Mounted: onMounted(parameters); break; + case EventCodes.NewMountObject: onNewMountObject(parameters); break; + case EventCodes.NewMob: onNewMob(parameters); break; + case EventCodes.JoinFinished: onJoinFinished(); break; + case EventCodes.UpdateMoney: onUpdateSilver(parameters); break; + case EventCodes.NewSimpleHarvestableObjectList: onNewSimpleHarvestableObjectList(parameters); break; + case EventCodes.NewHarvestableObject: onNewHarvestableObject(parameters); break; + case EventCodes.HarvestableChangeState: onHarvestableChangeState(parameters); break; + case EventCodes.MobChangeState: onMobChangeState(parameters); break; + case EventCodes.InCombatStateUpdate: - onInCombatStateUpdate(parameters); - printEventInfo(parameters, EventCodes.InCombatStateUpdate); + onInCombatStateUpdate(parameters); break; + case EventCodes.HealthUpdate: onHealthUpdate(parameters); break; + case EventCodes.Attack: onAttack(parameters); break; + case EventCodes.NewRandomDungeonExit: onNewPortalExit(parameters); break; - case EventCodes.ActiveSpellEffectsUpdate: - // [10]evActiveSpellEffectsUpdate - map[0:655873 1:[685 279 339 509 399] 2:[100 389.11096 369.137 100 389.11096] 3:[100 233.6818 226.1142 100 233.6818] 4:[637945635939432036 637945670488995997 637945670488995997 637903462984937618 637945670488995997] 5:[1 10 10 1 10] 7:[75 - 110 36 73 - 110 36 73 - 110 36 9] 8:[208406056] 9:[9] 10:[0 0] 252:10] - // 9 parece ser el tiempo restante - //printEventInfo(parameters, evCode); + + case EventCodes.ActiveSpellEffectsUpdate: + onActiveSpellEffectsUpdate(parameters); break; + case EventCodes.HarvestStart: onHarvestStart(parameters); break; + case EventCodes.HarvestFinished: - //onHarvestFinished(parameters); + onHarvestFinished(parameters); break; + case EventCodes.NewFloatObject: onNewFloatObject(parameters); break; + case EventCodes.NewFishingZoneObject: onNewFishingZoneObject(parameters); break; + case EventCodes.FishingMiniGame: - printEventInfo(parameters, evCode); + onFishingMiniGame(parameters); break; + case EventCodes.NewBuilding: onNewBuilding(parameters); break; + case EventCodes.EasyAntiCheatMessageToClient: - //printEventInfo(parameters, evCode); + onEventEasyAntiCheatMessageToClient(parameters); break; - case EventCodes.CastHits: - // {"0":88105,"1":95538,"2":4414,"3":1,"4":1,"252":20} - // 0: target id 1: attacker id - printEventInfo(parameters, evCode); + + case EventCodes.CastHits: + onEventCastHits(parameters); break; - case EventCodes.CastStart: - // CastStart: {"0":89514,"1":18668197,"2":[201.960464,220.702423],"4":18669497,"5":4400,"6":-1,"8":7,"9":0,"252":13} - // 0: caster id 2:Spell direction pos - printEventInfo(parameters, evCode); + + case EventCodes.CastStart: + onEventCastStart(parameters); break; + case EventCodes.CastTimeUpdate: - printEventInfo(parameters, evCode); + onEventCastTimeUpdate(parameters); break; + default: printEventInfo(parameters, evCode); break; @@ -170,11 +244,12 @@ protected override void OnRequest(byte operationCode, Dictionary p if (!int.TryParse(val.ToString(), out int iCode)) return; OperationCodes opCode = 0; + try { opCode = (OperationCodes)iCode; } - catch (System.Collections.Generic.KeyNotFoundException) + catch (KeyNotFoundException) { debugPacket(parameters, iCode); } @@ -184,48 +259,62 @@ protected override void OnRequest(byte operationCode, Dictionary p case OperationCodes.Move: onMoveOperation(parameters); break; + case OperationCodes.AuctionGetOffers: - //onAuctionGetOffers_Req(parameters); + onAuctionGetOffers_Req(parameters); break; + case OperationCodes.AuctionGetRequests: - //onAuctionGetRequests_Req(parameters); + onAuctionGetRequests_Req(parameters); break; + case OperationCodes.RegisterToObject: - //onRegisterToObject(parameters); + onRegisterToObject(parameters); break; + case OperationCodes.UnRegisterFromObject: - //onUnRegisterFromObject(parameters); + onUnRegisterFromObject(parameters); break; + case OperationCodes.AttackStart: printOperationInfo(parameters, opCode, "onRequest"); break; + case OperationCodes.Mount: onMount(parameters); break; + case OperationCodes.MountCancel: printOperationInfo(parameters, opCode, "onRequest"); break; + case OperationCodes.HarvestStart: onReqHarvestStart(parameters); break; + case OperationCodes.HarvestCancel: // No llega al minar un cuerpo printOperationInfo(parameters, opCode, "onRequest"); break; + case OperationCodes.ChangeCluster: printOperationInfo(parameters, opCode, "onRequest"); break; + case OperationCodes.GetGameServerByCluster: // Cuando le pide al servidor la direccion dns del cluster // GetGameServerByCluster: {"0":"0000","255":10,"253":16} printOperationInfo(parameters, opCode, "onRequest"); break; + case OperationCodes.GetReferralLink: printOperationInfo(parameters, opCode, "onRequest"); break; + case OperationCodes.EasyAntiCheatMessageToServer: //printOperationInfo(parameters, opCode, "onRequest"); break; + default: //printOperationInfo(parameters, opCode, "onRequest"); break; @@ -246,33 +335,40 @@ protected override void OnResponse(byte operationCode, short returnCode, string case OperationCodes.Join: onJoinResponse(parameters); break; + case OperationCodes.AuctionGetOffers: - //onAuctionGetOffers_Res(parameters); + onAuctionGetOffers_Res(parameters); break; + case OperationCodes.AuctionGetRequests: - //onAuctionGetRequests_Res(parameters); + onAuctionGetRequests_Res(parameters); break; + case OperationCodes.AuctionGetItemAverageValue: onAuctionGetItemAverageValue(parameters); break; + case OperationCodes.HarvestStart: //printOperationInfo(parameters, opCode, "onResponse"); break; + case OperationCodes.HarvestCancel: printOperationInfo(parameters, opCode, "onResponse"); break; + case OperationCodes.ChangeCluster: printOperationInfo(parameters, opCode, "onResponse"); break; + case OperationCodes.GetGameServerByCluster: // GetGameServerByCluster: {"0":"live01-win-28.dc02.albion.zone:5056","255":10,"253":16} //printOperationInfo(parameters, opCode, "onResponse"); break; + default: //printOperationInfo(parameters, opCode, "onResponse"); break; } - } private void printEventInfo(Object obj, EventCodes evCode) @@ -293,6 +389,7 @@ private void printEventInfo(Object obj, EventCodes evCode) //Console.WriteLine(outLine); //Console.Out.Flush(); } + private void printOperationInfo(Object obj, OperationCodes opCode, String typeInfo) { string jsonPacket; @@ -315,6 +412,7 @@ private void debugPacket(Object obj, int iCode) } #region OnEvent + private void onNewBuilding(Dictionary parameters) { int packetID = int.Parse(parameters[0].ToString()); @@ -322,18 +420,22 @@ private void onNewBuilding(Dictionary parameters) Single[] pos = (Single[])parameters[4]; var nb = new evNewBuilding(packetID, name, pos); - printEventInfo(nb, EventCodes.NewBuilding); + OnEventNewBuilding?.Invoke(nb); + printEventInfo(nb, EventCodes.NewBuilding); } + private void onCharacterEquipmentChanged(Dictionary parameters) { short[] items = new short[10]; short[] skills = new short[6]; int index = 0; + if (parameters[2].GetType() == typeof(Byte[])) { Byte[] itemList = (Byte[])parameters[2]; + foreach (Byte b in itemList) { if (index >= 10) @@ -357,9 +459,11 @@ private void onCharacterEquipmentChanged(Dictionary parameters) } index = 0; + if (parameters[5].GetType() == typeof(Byte[])) { Byte[] skillList = (Byte[])parameters[5]; + foreach (Byte b in skillList) { if (index >= 6) @@ -372,6 +476,7 @@ private void onCharacterEquipmentChanged(Dictionary parameters) else { Int16[] skillList = (Int16[])parameters[5]; + foreach (Int16 b in skillList) { if (index >= 6) @@ -383,49 +488,83 @@ private void onCharacterEquipmentChanged(Dictionary parameters) } var eqc = new evCharacterEquipmentChanged(items, skills); + OnEventCharacterEquipmentChanged?.Invoke(eqc); + printEventInfo(eqc, EventCodes.CharacterEquipmentChanged); } + private void onNewExit(Dictionary parameters) { Single[] entryPos = new Single[2]; + if (parameters.ContainsKey(2)) { entryPos = (Single[])parameters[2]; + var ne = new evNewExit(entryPos); + OnEventNewExit?.Invoke(ne); + printEventInfo(ne, EventCodes.NewExit); } } + private void onMobChangeState(Dictionary parameters) { int mobID = int.Parse(parameters[0].ToString()); short enchantment = short.Parse(parameters[1].ToString()); var cs = new evMobChangeState(mobID, enchantment); + OnEventMobChangeState?.Invoke(cs); + printEventInfo(cs, EventCodes.MobChangeState); } + private void onInventoryPutItem(Dictionary parameters) { int itemID = int.Parse(parameters[0].ToString()); + var putItem = new evInventoryPutItem(itemID); + OnEventInventoryPutItem?.Invoke(putItem); + printEventInfo(putItem, EventCodes.InventoryPutItem); } + private void onNewFishingZoneObject(Dictionary parameters) { //NewFishingZoneObject: { "0":1182,"1":[253.4,52.8],"2":3,"3":2,"4":"FishingNodeSwarm","252":341} 0: objectID 1: zone pos 2:charges (not present when empty) 3:times fished from 4:zone tipe int objectID = int.Parse(parameters[0].ToString()); Single[] zonePos = (Single[])parameters[1]; - short charges = 0; + + short charges = 0; + if (parameters.ContainsKey(2)) charges = short.Parse(parameters[2].ToString()); + short fished = 0; + if (parameters.ContainsKey(3)) fished = short.Parse(parameters[3].ToString()); + string zoneType = parameters[4].ToString(); var fishingZone = new evNewFishingZoneObject(objectID, zonePos, charges, fished, zoneType); + OnEventNewFishingZoneObject?.Invoke(fishingZone); + printEventInfo(fishingZone, EventCodes.NewFishingZoneObject); + } + + private void onFishingMiniGame(Dictionary parameters) + { + int id = int.Parse(parameters[0].ToString()); + Single[] pos = (Single[])parameters[1]; + String type = (string)parameters[3].ToString(); + var portal = new evFishingMiniGame(); + OnEventFishingMiniGame?.Invoke(portal); + + printEventInfo(portal, EventCodes.FishingMiniGame); } + private void onNewFloatObject(Dictionary parameters) { // NewFloatObject: { "0":665769,"1":[-190.193344,59.3336449],"2":298.5448,"3":632262,"4":1,"252":340} 0: bobber ID 1: bobber pos 2:angle @@ -435,33 +574,41 @@ private void onNewFloatObject(Dictionary parameters) float angleFromPlayer = float.Parse(parameters[2].ToString()); int playerId = int.Parse(parameters[3].ToString()); short fishingState = short.Parse(parameters[4].ToString()); - string readableState; + switch (fishingState) { case 1: readableState = "Floating"; break; + case 2: readableState = "Bitten"; break; + case 3: readableState = "Minigame"; break; + case 4: readableState = "Catched"; break; + case 5: readableState = "Lost"; break; + default: readableState = ""; break; } var bobber = new evNewFloatObject(bobberID, bobberPos, angleFromPlayer, playerId, readableState); + OnEventNewFloatObject?.Invoke(bobber); + printEventInfo(bobber, EventCodes.NewFloatObject); } + private void onHarvestStart(Dictionary parameters) { //HarvestStart: { "0":144653,"1":638045717068106818,"2":638045717068106818,"3":1263,"5":2.0,"6":-1,"7":-1,"252":54} 5: tiempo para terminar de harvestear @@ -469,9 +616,12 @@ private void onHarvestStart(Dictionary parameters) float time = float.Parse(parameters[5].ToString()); var hs = new evHarvestStart(harvestableId, time); + OnEventHarvestStart?.Invoke(hs); + printEventInfo(hs, EventCodes.HarvestStart); } - private void onNewGeneralItem(Dictionary parameters, EventCodes evCode) + + private evNewSimpleItem onNewItem(Dictionary parameters) { int objectID = int.Parse(parameters[0].ToString()); int itemID = int.Parse(parameters[1].ToString()); @@ -485,9 +635,49 @@ private void onNewGeneralItem(Dictionary parameters, EventCodes ev } var newItem = new evNewSimpleItem(objectID, itemID, amount, avgValue); - printEventInfo(newItem, evCode); + return newItem; + } + + private void onNewEquipmentItem(Dictionary parameters, EventCodes evCode) + { + var data = onNewItem(parameters); + OnNewEquipmentItem?.Invoke(data); + printEventInfo(data, evCode); } + + private void onNewSimpleItem(Dictionary parameters, EventCodes evCode) + { + var data = onNewItem(parameters); + OnNewSimpleItem?.Invoke(data); + + printEventInfo(data, evCode); + } + + private void onNewFurnitureItem(Dictionary parameters, EventCodes evCode) + { + var data = onNewItem(parameters); + OnNewFurnitureItem?.Invoke(data); + + printEventInfo(data, evCode); + } + + private void onNewJournalItem(Dictionary parameters, EventCodes evCode) + { + var data = onNewItem(parameters); + OnNewJournalItem?.Invoke(data); + + printEventInfo(data, evCode); + } + + private void onNewLaborerItem(Dictionary parameters, EventCodes evCode) + { + var data = onNewItem(parameters); + OnNewLaborerItem?.Invoke(data); + + printEventInfo(data, evCode); + } + private void onAttachItemContainer(Dictionary parameters) { int objectID = int.Parse(parameters[0].ToString()); @@ -498,16 +688,22 @@ private void onAttachItemContainer(Dictionary parameters) // donde 0 es el objectID var itemContainer = new evAttachItemContainer(objectID, ownerMarkID, itemsID); + OnEventAttachItemContainer?.Invoke(itemContainer); + printEventInfo(itemContainer, EventCodes.AttachItemContainer); } + private void onNewLoot(Dictionary parameters) { int lootId = int.Parse(parameters[0].ToString()); Single[] pos = (Single[])parameters[4]; var newloot = new evNewLoot(lootId, pos); + OnEventNewLoot?.Invoke(newloot); + printEventInfo(newloot, EventCodes.NewLoot); } + private void onHarvestFinished(Dictionary parameters) { //map[0:686375 1:637959518682696481 2:637959518687702927 3:2580 4:2 5:2 6:1 8:[] 9:[] 252:54] @@ -516,27 +712,32 @@ private void onHarvestFinished(Dictionary parameters) short gathered = short.Parse(parameters[4].ToString()); short yield = 0; + if (parameters.ContainsKey(5)) { yield = short.Parse(parameters[5].ToString()); } short premium = 0; + if (parameters.ContainsKey(6)) { premium = short.Parse(parameters[6].ToString()); } short charges = 0; + if (parameters.ContainsKey(7)) { charges = short.Parse(parameters[7].ToString()); } var hf = new evHarvestFinished(playerId, harvestableId, gathered, yield, premium, charges); - printEventInfo(hf, EventCodes.HarvestFinished); + OnEventHarvestFinished?.Invoke(hf); + printEventInfo(hf, EventCodes.HarvestFinished); } + private void onMounted(Dictionary parameters) { int playerId = int.Parse(parameters[0].ToString()); @@ -546,17 +747,23 @@ private void onMounted(Dictionary parameters) isMounted = true; var mounted = new evMounted(playerId, isMounted); + OnEventMounted?.Invoke(mounted); + printEventInfo(mounted, EventCodes.Mounted); } + public void onAttack(Dictionary parameters) { int attackerID = int.Parse(parameters[0].ToString()); int targetID = int.Parse(parameters[2].ToString()); var attackEv = new evAttack(attackerID, targetID); + OnEventAttack?.Invoke(attackEv); + printEventInfo(attackEv, EventCodes.Attack); } + private void onNewPortalExit(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); @@ -564,9 +771,21 @@ private void onNewPortalExit(Dictionary parameters) String type = (string)parameters[3].ToString(); var portal = new evNewPortalExit(id, pos, type); + OnEventNewPortalExit?.Invoke(portal); + printEventInfo(portal, EventCodes.NewRandomDungeonExit); } + private void onActiveSpellEffectsUpdate(Dictionary parameters) + { + // [10]evActiveSpellEffectsUpdate - map[0:655873 1:[685 279 339 509 399] 2:[100 389.11096 369.137 100 389.11096] 3:[100 233.6818 226.1142 100 233.6818] 4:[637945635939432036 637945670488995997 637945670488995997 637903462984937618 637945670488995997] 5:[1 10 10 1 10] 7:[75 - 110 36 73 - 110 36 73 - 110 36 9] 8:[208406056] 9:[9] 10:[0 0] 252:10] + + var ase = new evActiveSpellEffectsUpdate(); + OnEventActiveSpellEffectsUpdate?.Invoke(ase); + + printEventInfo(ase, EventCodes.NewRandomDungeonExit); + } + private void onNewHarvestableObject(Dictionary parameters) { // NewHarvestableObject: { "0":211813,"1":211239,"2":637903348349073726,"3":"+Z47IXg2YUWs1j2NjqNMZQ==","5":24,"6":112,"7":3,"8":[-374.0117,209.0445],"9":319.8794,"11":0,"252":36} @@ -579,8 +798,11 @@ private void onNewHarvestableObject(Dictionary parameters) byte enchantment = byte.Parse(parameters[11].ToString()); var nho = new HarvestableObject(id, type, tier, pos, charges, enchantment); + OnEventHarvestableObject?.Invoke(nho); + printEventInfo(nho, EventCodes.NewHarvestableObject); } + private void onHealthUpdate(Dictionary parameters) { try @@ -594,6 +816,8 @@ private void onHealthUpdate(Dictionary parameters) int targetEntityId = int.Parse(parameters[6].ToString()); var hu = new evHealthUpdate(attackerEntityId, targetHealthUpdate, targetHealth, targetEntityId); + OnEventHealthUpdate?.Invoke(hu); + printEventInfo(hu, EventCodes.HealthUpdate); } catch (Exception e) @@ -601,20 +825,23 @@ private void onHealthUpdate(Dictionary parameters) Debug.WriteLine(e.StackTrace); } } + private void onLeaveEvent(Dictionary parameters) { int entityId = int.Parse(parameters[0].ToString()); + var leave = new evLeave(entityId); - + OnEventevLeave?.Invoke(leave); + printEventInfo(leave, EventCodes.Leave); } - + private void onJoinFinished() { evJoinFinished jf = new evJoinFinished(); printEventInfo(jf, EventCodes.JoinFinished); } - + private void onUpdateSilver(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); @@ -626,7 +853,7 @@ private void onUpdateSilver(Dictionary parameters) printEventInfo(us, EventCodes.UpdateMoney); } - + private void onNewSimpleHarvestableObjectList(Dictionary parameters) { List harvestableList = new List(); @@ -679,9 +906,11 @@ private void onNewSimpleHarvestableObjectList(Dictionary parameter } var jol = new HarvestableObjectList(harvestableList); + OnEventHarvestableObjectList?.Invoke(jol); + printEventInfo(jol, EventCodes.NewSimpleHarvestableObjectList); } - + private void onHarvestableChangeState(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); @@ -701,7 +930,7 @@ private void onHarvestableChangeState(Dictionary parameters) var change = new HarvestableChangeState(id, charges, enchantment); printEventInfo(change, EventCodes.HarvestableChangeState); } - + private void onInCombatStateUpdate(Dictionary parameters) { long playerId = long.Parse(parameters[0].ToString()); @@ -713,9 +942,11 @@ private void onInCombatStateUpdate(Dictionary parameters) bool enemyAttacking = _enemyStatus == null ? false: bool.Parse(_enemyStatus.ToString()); var comUp = new InCombatStateUpdate(playerId, playerAttacking, enemyAttacking); + OnEventInCombatStateUpdate?.Invoke(comUp); + printEventInfo(comUp, EventCodes.InCombatStateUpdate); } - + private void onNewMountObject(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); @@ -723,9 +954,11 @@ private void onNewMountObject(Dictionary parameters) byte[] ownerMarkId = (byte[])parameters[5]; var newMount = new evNewMountObject(id, pos, ownerMarkId); + OnEventNewMountObject?.Invoke(newMount); + printEventInfo(newMount, EventCodes.NewMountObject); } - + private void onNewMob(Dictionary parameters) { //if (!parameters.ContainsKey(13)) @@ -746,9 +979,11 @@ private void onNewMob(Dictionary parameters) int rarity = int.Parse(parameters[22].ToString()); var mob = new evNewMob(id, typeId, pos, health, rarity); + OnEventNewMob?.Invoke(mob); + printEventInfo(mob, EventCodes.NewMob); } - + private void onNewCharacter(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); @@ -762,16 +997,15 @@ private void onNewCharacter(Dictionary parameters) Single[] pos = (Single[])parameters[14]; short[] items = new short[10]; short[] skills; - try - { - skills = new short[6]; - } - catch { return; } + + try { skills = new short[6]; } catch { return; } + int faction = int.Parse(parameters[51].ToString()); int currentHealth = int.Parse(parameters[20].ToString()); int maxHealth = int.Parse(parameters[21].ToString()); int index = 0; + if (parameters[38].GetType() == typeof(Byte[])) { Byte[] itemList = (Byte[])parameters[38]; @@ -798,6 +1032,7 @@ private void onNewCharacter(Dictionary parameters) } index = 0; + if (parameters[41].GetType() == typeof(Byte[])) { Byte[] skillList = (Byte[])parameters[41]; @@ -824,9 +1059,11 @@ private void onNewCharacter(Dictionary parameters) } var newChar = new evNewCharacter(id, nick, guild, alliance, pos, items, skills, faction, currentHealth, maxHealth); + OnEventNewCharacter?.Invoke(newChar); + printEventInfo(newChar, EventCodes.NewCharacter); } - + private void onEntityMovementEvent(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); @@ -835,6 +1072,7 @@ private void onEntityMovementEvent(Dictionary parameters) Single posY = BitConverter.ToSingle(a, 13); var ent = new Entity(id, posX, posY); + OnEventEntityMove?.Invoke(ent); string strJson; strJson = JsonConvert.SerializeObject(ent); @@ -843,9 +1081,57 @@ private void onEntityMovementEvent(Dictionary parameters) output.WriteLine(outLine); output.Flush(); } + + private void onEventEasyAntiCheatMessageToClient(Dictionary parameters) + { + int packetID = int.Parse(parameters[0].ToString()); + + var nb = new evEasyAntiCheatMessageToClient(); + OnEventEasyAntiCheatMessageToClient?.Invoke(nb); + + printEventInfo(nb, EventCodes.EasyAntiCheatMessageToClient); + } + + private void onEventCastHits(Dictionary parameters) + { + // {"0":88105,"1":95538,"2":4414,"3":1,"4":1,"252":20} + // 0: target id 1: attacker id + + int packetID = int.Parse(parameters[0].ToString()); + + var nb = new evCastHits(); + OnEventCastHits?.Invoke(nb); + + printEventInfo(nb, EventCodes.CastHits); + } + + private void onEventCastStart(Dictionary parameters) + { + // CastStart: {"0":89514,"1":18668197,"2":[201.960464,220.702423],"4":18669497,"5":4400,"6":-1,"8":7,"9":0,"252":13} + // 0: caster id 2:Spell direction pos + + int packetID = int.Parse(parameters[0].ToString()); + + var nb = new evCastStart(); + OnEventCastStart?.Invoke(nb); + + printEventInfo(nb, EventCodes.CastStart); + } + + private void onEventCastTimeUpdate(Dictionary parameters) + { + int packetID = int.Parse(parameters[0].ToString()); + + var nb = new evCastTimeUpdate(); + OnEventCastTimeUpdate?.Invoke(nb); + + printEventInfo(nb, EventCodes.CastTimeUpdate); + } + #endregion #region onOperation Request + private void onReqHarvestStart(Dictionary parameters) { int harvest_id = int.Parse(parameters[1].ToString()); @@ -853,6 +1139,7 @@ private void onReqHarvestStart(Dictionary parameters) printOperationInfo(hs, OperationCodes.HarvestStart, "onRequest"); } + private void onMount(Dictionary parameters) { parameters.TryGetValue((byte)2, out object _isMounting); @@ -863,11 +1150,14 @@ private void onMount(Dictionary parameters) var opm = new opMount(isMounting, quickMount); printOperationInfo(opm, OperationCodes.Mount, "onRequest"); } + private void onMoveOperation(Dictionary parameters) { if (parameters == null) return; + long timestamp = long.Parse(parameters[0].ToString()); + /*** long today_tick = DateTime.Now.Ticks; DateTime fechaHora_server = new DateTime(timestamp, DateTimeKind.Utc); @@ -879,25 +1169,31 @@ private void onMoveOperation(Dictionary parameters) long diff = timestamp - today_tick; long espected_timestamp = today_tick + diff; ***/ + float[] pos = (float[])parameters[1]; float angle = (float)parameters[2]; float[] target = (float[])parameters[3]; float speed = (float)parameters[4]; - opMove _ = new opMove(timestamp, pos, angle, target, speed); - printOperationInfo(_, OperationCodes.Move, "onRequest"); - } + opMove mov = new opMove(timestamp, pos, angle, target, speed); + OnRequestMove?.Invoke(mov); + printOperationInfo(mov, OperationCodes.Move, "onRequest"); + } + private void onAuctionGetOffers_Req(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); Int16[] itemsID = new short[10]; + if (parameters.ContainsKey(6)) { itemsID = (Int16[])parameters[6]; } + string category = parameters[1].ToString(); string subcategory = parameters[2].ToString(); + short quality; try { quality = short.Parse(parameters[3].ToString()); } catch (System.FormatException) { quality = 0; } @@ -914,12 +1210,13 @@ private void onAuctionGetOffers_Req(Dictionary parameters) printOperationInfo(agor, OperationCodes.AuctionGetOffers, "onRequest"); } - + private void onAuctionGetRequests_Req(Dictionary parameters) { // {"0":867,"1":"accessories","2":"bag","3":"5","4":0,"5":"8","7":"3","8":0,"9":1,"10":50,"12":true,"253":77} int id = int.Parse(parameters[0].ToString()); Int16[] itemsID = new short[10]; + if (parameters.ContainsKey(6)) { itemsID = (Int16[])parameters[6]; @@ -943,23 +1240,25 @@ private void onAuctionGetRequests_Req(Dictionary parameters) printOperationInfo(agrr, OperationCodes.AuctionGetRequests, "onRequest"); } - + private void onRegisterToObject(Dictionary parameters) { long id = long.Parse(parameters[0].ToString()); var reg = new opRegisterToObject(id); printOperationInfo(reg, OperationCodes.RegisterToObject, "onRequest"); } - + private void onUnRegisterFromObject(Dictionary parameters) { long id = long.Parse(parameters[0].ToString()); var unreg = new UnRegisterFromObject(id); printOperationInfo(unreg, OperationCodes.UnRegisterFromObject, "onRequest"); } + #endregion #region onOperation Response + private void onJoinResponse(Dictionary parameters) { // [onResponse][2] Join: {"0":229611,"1":"HldB6eRwfU6UYy3c3Cuenw==","2":"Anyalgo","3":9,"4":22,"5":1,"6":"AwAJAw==","7":"AA8CAA==", @@ -969,7 +1268,9 @@ private void onJoinResponse(Dictionary parameters) string cName = parameters[2].ToString(); string cluster = parameters[8].ToString(); float[] pos = (float[])parameters[9]; + float angle = 0; + if (parameters.ContainsKey(10)) angle = float.Parse(parameters[10].ToString()); else @@ -994,12 +1295,13 @@ private void onAuctionGetOffers_Res(Dictionary parameters) string line = JsonConvert.SerializeObject(parameters[0]); JArray offers = JArray.Parse(line); List offerList = new List(); + foreach (JValue value in offers) { JObject offer = JObject.Parse(value.ToString()); long id = ((long)offer.GetValue("Id")); - long unitPrice = ((long)offer.GetValue("UnitPriceSilver")); - long totalPrice = ((long)offer.GetValue("TotalPriceSilver")); + long unitPrice = ((long)offer.GetValue("UnitPriceSilver")) / 10000; + long totalPrice = ((long)offer.GetValue("TotalPriceSilver")) / 10000; int amount = ((int)offer.GetValue("Amount")); short tier = ((short)offer.GetValue("Tier")); bool isFinished = ((bool)offer.GetValue("IsFinished")); @@ -1030,12 +1332,13 @@ private void onAuctionGetRequests_Res(Dictionary parameters) string line = JsonConvert.SerializeObject(parameters[0]); JArray requests = JArray.Parse(line); List requestList = new List(); + foreach (JValue value in requests) { JObject request = JObject.Parse(value.ToString()); long id = ((long)request.GetValue("Id")); - long unitPrice = ((long)request.GetValue("UnitPriceSilver")); - long totalPrice = ((long)request.GetValue("TotalPriceSilver")); + long unitPrice = ((long)request.GetValue("UnitPriceSilver")) / 10000; + long totalPrice = ((long)request.GetValue("TotalPriceSilver")) / 10000; int amount = ((int)request.GetValue("Amount")); short tier = ((short)request.GetValue("Tier")); bool isFinished = ((bool)request.GetValue("IsFinished")); @@ -1066,10 +1369,11 @@ private void onAuctionGetItemAverageValue(Dictionary parameters) string line = parameters[0].ToString(); int len = line.Length; long average = long.Parse(line.Substring(0, len - 4)); + var averageObj = new opAuctionGetItemAverageValue(average); printOperationInfo(averageObj, OperationCodes.AuctionGetItemAverageValue, "onResponse"); - } + #endregion } } diff --git a/AOSnifferNET/AlbionPackets/PacketReciever.cs b/AOSnifferNET/AlbionPackets/PacketReciever.cs index 213dd47..5638046 100644 --- a/AOSnifferNET/AlbionPackets/PacketReciever.cs +++ b/AOSnifferNET/AlbionPackets/PacketReciever.cs @@ -7,14 +7,15 @@ namespace AOSnifferNET { - class PacketReciever + public class PacketReciever { - readonly PacketHandler photonParser; + readonly public PacketHandler photonParser; readonly Thread photonThread; public PacketReciever() { photonParser = new PacketHandler(); + try { photonThread = new Thread(() => CreateListener()) { }; @@ -30,6 +31,7 @@ private void CreateListener() { var allDevices = CaptureDeviceList.Instance; + if (allDevices.Count < 1) { throw new Exception("No interfaces found! Make sure NPcap is installed."); @@ -37,6 +39,7 @@ private void CreateListener() List devicesOpened = new List(); Console.WriteLine("Start"); + // Escuche todos los dispositivos en la máquina local. foreach (ILiveDevice deviceSelected in allDevices) { @@ -114,7 +117,9 @@ private void PacketHandler(object sender, PacketCapture e) try { var packet = Packet.ParsePacket(e.GetPacket().LinkLayerType, e.GetPacket().Data); + UdpPacket udp_packet = packet.Extract(); + if (udp_packet != null && (udp_packet.SourcePort == 5056 || udp_packet.DestinationPort == 5056)) { photonParser.ReceivePacket(udp_packet.PayloadData); From 8208a55b59b40dbcffae3f4146f7910e2ec7b615 Mon Sep 17 00:00:00 2001 From: Jurgen De Leon Date: Thu, 26 Sep 2024 11:29:09 -0500 Subject: [PATCH 2/2] - event Request - event Response --- AOSnifferNET/AlbionObjects/AuctionItems.cs | 2 +- .../Request/UnRegisterFromObject.cs | 2 +- .../Operations/Request/opAuctionGetAny.cs | 2 +- .../Operations/Request/opHarvestStart.cs | 2 +- .../Packets/Operations/Request/opMount.cs | 2 +- .../Operations/Request/opRegisterToObject.cs | 2 +- .../Packets/Operations/Response/OpJoin.cs | 2 +- .../Response/opAuctionGetItemAverageValue.cs | 2 +- .../Response/opAuctionGetOffersResponse.cs | 2 +- .../Response/opAuctionGetRequestsResponse.cs | 2 +- AOSnifferNET/AlbionPackets/PacketDelegate.cs | 15 +- AOSnifferNET/AlbionPackets/PacketHandler.cs | 805 ++++++++---------- AOSnifferNET/Program.cs | 341 +++++++- 13 files changed, 732 insertions(+), 449 deletions(-) diff --git a/AOSnifferNET/AlbionObjects/AuctionItems.cs b/AOSnifferNET/AlbionObjects/AuctionItems.cs index 57640cf..4a6c0bd 100644 --- a/AOSnifferNET/AlbionObjects/AuctionItems.cs +++ b/AOSnifferNET/AlbionObjects/AuctionItems.cs @@ -10,7 +10,7 @@ namespace AOSnifferNET //\"HasBuyerFetched\":false,\"HasSellerFetched\":false,\"SellerCharacterId\":\"cc61fb20-fa4a-4fe2-843e-1f71f25d0f4a\",\"SellerName\":\"SoloAGG\", //\"BuyerCharacterId\":null,\"BuyerName\":null,\"ItemTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"ItemGroupTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\", //\"EnchantmentLevel\":0,\"QualityLevel\":1,\"Expires\":\"2022-06-17T01:47:22.125773\",\"ReferenceId\":\"8f62ce8b-3521-48dc-a429-32671c5aaeeb\"} - internal class AuctionItems + public class AuctionItems { public long id; public long unitPriceSilver; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/UnRegisterFromObject.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/UnRegisterFromObject.cs index 3120bb6..89dd51c 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/UnRegisterFromObject.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/UnRegisterFromObject.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class UnRegisterFromObject + public class UnRegisterFromObject { public long objectId; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opAuctionGetAny.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opAuctionGetAny.cs index 60d82e9..026878b 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opAuctionGetAny.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opAuctionGetAny.cs @@ -3,7 +3,7 @@ namespace AOSnifferNET { // {"0":8,"1":"accessories","2":"bag","3":"5","4":0,"5":"8","6":'query text', "7":0,"8":"3","9":50,"11":0,"12":true,"253":76} (id, category, subcategory, quality, unknown, tier, unknown, enhancement... - internal class opAuctionGetAny + public class opAuctionGetAny { public int id; public Int16[] itemsID; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opHarvestStart.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opHarvestStart.cs index 234fbc6..db2b9b1 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opHarvestStart.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opHarvestStart.cs @@ -1,6 +1,6 @@ namespace AOSnifferNET { - internal class opHarvestStart + public class opHarvestStart { public int harvestableId; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opMount.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opMount.cs index c74dd29..e95c3d5 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opMount.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opMount.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { //{ "0":637903427842091224,"1":214347,"2: Mounting or unmounted if absent":true,"3: quickMounting":true,"253":192} - internal class opMount + public class opMount { public bool isMounting; public bool quickMounting; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opRegisterToObject.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opRegisterToObject.cs index 13fb547..e32cad0 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opRegisterToObject.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Request/opRegisterToObject.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class opRegisterToObject + public class opRegisterToObject { public long objectId; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Response/OpJoin.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Response/OpJoin.cs index 027db1c..36119f5 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Response/OpJoin.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Response/OpJoin.cs @@ -16,7 +16,7 @@ // 46: items equiped // 49: skills // 60: previous cluster - internal class OpJoin + public class OpJoin { public int characterId; public byte[] markId; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetItemAverageValue.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetItemAverageValue.cs index 05b11af..c4f332a 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetItemAverageValue.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetItemAverageValue.cs @@ -6,7 +6,7 @@ namespace AOSnifferNET { - internal class opAuctionGetItemAverageValue + public class opAuctionGetItemAverageValue { public long itemAverageValue; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetOffersResponse.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetOffersResponse.cs index e344d31..e47f143 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetOffersResponse.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetOffersResponse.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { //{"0":["{\"Id\":8755020507,\"UnitPriceSilver\":19999980000,\"TotalPriceSilver\":19999980000,\"Amount\":1,\"Tier\":8,\"IsFinished\":false,\"AuctionType\":\"offer\",\"HasBuyerFetched\":false,\"HasSellerFetched\":false,\"SellerCharacterId\":\"cc61fb20-fa4a-4fe2-843e-1f71f25d0f4a\",\"SellerName\":\"SoloAGG\",\"BuyerCharacterId\":null,\"BuyerName\":null,\"ItemTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"ItemGroupTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"EnchantmentLevel\":0,\"QualityLevel\":1,\"Expires\":\"2022-06-17T01:47:22.125773\",\"ReferenceId\":\"8f62ce8b-3521-48dc-a429-32671c5aaeeb\"}","{\"Id\":8715166777,\"UnitPriceSilver\":20000000000,\"TotalPriceSilver\":20000000000,\"Amount\":1,\"Tier\":8,\"IsFinished\":false,\"AuctionType\":\"offer\",\"HasBuyerFetched\":false,\"HasSellerFetched\":false,\"SellerCharacterId\":\"d35fd339-c5a7-45e8-8ed7-766cfc5cf33e\",\"SellerName\":\"CAHEK48\",\"BuyerCharacterId\":null,\"BuyerName\":null,\"ItemTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"ItemGroupTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"EnchantmentLevel\":0,\"QualityLevel\":1,\"Expires\":\"2022-06-08T22:04:09.684997\",\"ReferenceId\":\"2d4a743f-0e0d-46a1-bf62-4c195d1b42cf\"}","{\"Id\":8745473936,\"UnitPriceSilver\":20000000000,\"TotalPriceSilver\":60000000000,\"Amount\":3,\"Tier\":8,\"IsFinished\":false,\"AuctionType\":\"offer\",\"HasBuyerFetched\":false,\"HasSellerFetched\":false,\"SellerCharacterId\":\"13314bf9-3080-459e-ade7-bae3a0f794ac\",\"SellerName\":\"AnemiaxD\",\"BuyerCharacterId\":null,\"BuyerName\":null,\"ItemTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"ItemGroupTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"EnchantmentLevel\":0,\"QualityLevel\":1,\"Expires\":\"2022-06-15T02:11:45.049899\",\"ReferenceId\":\"14b2dda0-d63b-4c28-a35d-c227b6d2b4be\"}"],"253":76} - internal class opAuctionGetOffersResponse + public class opAuctionGetOffersResponse { public List offersList; diff --git a/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetRequestsResponse.cs b/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetRequestsResponse.cs index 437ecbb..393ee7e 100644 --- a/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetRequestsResponse.cs +++ b/AOSnifferNET/AlbionObjects/Packets/Operations/Response/opAuctionGetRequestsResponse.cs @@ -7,7 +7,7 @@ namespace AOSnifferNET { //{"0":["{\"Id\":8755020507,\"UnitPriceSilver\":19999980000,\"TotalPriceSilver\":19999980000,\"Amount\":1,\"Tier\":8,\"IsFinished\":false,\"AuctionType\":\"offer\",\"HasBuyerFetched\":false,\"HasSellerFetched\":false,\"SellerCharacterId\":\"cc61fb20-fa4a-4fe2-843e-1f71f25d0f4a\",\"SellerName\":\"SoloAGG\",\"BuyerCharacterId\":null,\"BuyerName\":null,\"ItemTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"ItemGroupTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"EnchantmentLevel\":0,\"QualityLevel\":1,\"Expires\":\"2022-06-17T01:47:22.125773\",\"ReferenceId\":\"8f62ce8b-3521-48dc-a429-32671c5aaeeb\"}","{\"Id\":8715166777,\"UnitPriceSilver\":20000000000,\"TotalPriceSilver\":20000000000,\"Amount\":1,\"Tier\":8,\"IsFinished\":false,\"AuctionType\":\"offer\",\"HasBuyerFetched\":false,\"HasSellerFetched\":false,\"SellerCharacterId\":\"d35fd339-c5a7-45e8-8ed7-766cfc5cf33e\",\"SellerName\":\"CAHEK48\",\"BuyerCharacterId\":null,\"BuyerName\":null,\"ItemTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"ItemGroupTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"EnchantmentLevel\":0,\"QualityLevel\":1,\"Expires\":\"2022-06-08T22:04:09.684997\",\"ReferenceId\":\"2d4a743f-0e0d-46a1-bf62-4c195d1b42cf\"}","{\"Id\":8745473936,\"UnitPriceSilver\":20000000000,\"TotalPriceSilver\":60000000000,\"Amount\":3,\"Tier\":8,\"IsFinished\":false,\"AuctionType\":\"offer\",\"HasBuyerFetched\":false,\"HasSellerFetched\":false,\"SellerCharacterId\":\"13314bf9-3080-459e-ade7-bae3a0f794ac\",\"SellerName\":\"AnemiaxD\",\"BuyerCharacterId\":null,\"BuyerName\":null,\"ItemTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"ItemGroupTypeId\":\"T8_FURNITUREITEM_TROPHY_ORE\",\"EnchantmentLevel\":0,\"QualityLevel\":1,\"Expires\":\"2022-06-15T02:11:45.049899\",\"ReferenceId\":\"14b2dda0-d63b-4c28-a35d-c227b6d2b4be\"}"],"253":76} - internal class opAuctionGetRequestsResponse + public class opAuctionGetRequestsResponse { public List requestsList; diff --git a/AOSnifferNET/AlbionPackets/PacketDelegate.cs b/AOSnifferNET/AlbionPackets/PacketDelegate.cs index 7ad8252..e3e6213 100644 --- a/AOSnifferNET/AlbionPackets/PacketDelegate.cs +++ b/AOSnifferNET/AlbionPackets/PacketDelegate.cs @@ -3,8 +3,19 @@ namespace AOSnifferNET { public delegate void RequestMove(opMove data); + public delegate void RequestMount(opMount data); + public delegate void RequestHarvestStart(opHarvestStart data); + public delegate void RequestAuctionGetOffers(opAuctionGetAny data); + public delegate void RequestAuctionGetRequests(opAuctionGetAny data); + public delegate void RequestRegisterToObject(opRegisterToObject data); + public delegate void RequestUnRegisterFromObject(UnRegisterFromObject data); - public delegate void EventEntityMove(Entity data); + public delegate void ResponseJoin(OpJoin data); + public delegate void ResponseAuctionGetOffers(opAuctionGetOffersResponse data); + public delegate void ResponseAuctionGetRequests(opAuctionGetRequestsResponse data); + public delegate void ResponseAuctionGetItemAverageValue(opAuctionGetItemAverageValue data); + + public delegate void EventMove(Entity data); public delegate void EventCharacterEquipmentChanged(evCharacterEquipmentChanged data); public delegate void EventNewExit(evNewExit data); public delegate void EventInventoryPutItem(evInventoryPutItem data); @@ -17,7 +28,7 @@ namespace AOSnifferNET public delegate void EventNewMountObject(evNewMountObject data); public delegate void EventNewMob(evNewMob data); public delegate void EventJoinFinished(evJoinFinished data); - public delegate void EventUpdateSilver(evUpdateSilver data); + public delegate void EventUpdateMoney(evUpdateSilver data); public delegate void EventHarvestableObject(HarvestableObject data); public delegate void EventHarvestableObjectList(HarvestableObjectList data); public delegate void EventHarvestableChangeState(HarvestableChangeState data); diff --git a/AOSnifferNET/AlbionPackets/PacketHandler.cs b/AOSnifferNET/AlbionPackets/PacketHandler.cs index 25d3a7b..a6fb83c 100644 --- a/AOSnifferNET/AlbionPackets/PacketHandler.cs +++ b/AOSnifferNET/AlbionPackets/PacketHandler.cs @@ -6,14 +6,26 @@ using System.Diagnostics; using System.IO; using System.Linq; +using System.Security.Cryptography; namespace AOSnifferNET { public class PacketHandler : PhotonParser { public event RequestMove OnRequestMove; - - public event EventEntityMove OnEventEntityMove; + public event RequestMount OnRequestMount; + public event RequestHarvestStart OnRequestHarvestStart; + public event RequestAuctionGetOffers OnRequestAuctionGetOffers; + public event RequestAuctionGetRequests OnRequestAuctionGetRequests; + public event RequestRegisterToObject OnRequestRegisterToObject; + public event RequestUnRegisterFromObject OnRequestUnRegisterFromObject; + + public event ResponseJoin OnResponseJoin; + public event ResponseAuctionGetOffers OnResponseAuctionGetOffers; + public event ResponseAuctionGetRequests OnResponseAuctionGetRequests; + public event ResponseAuctionGetItemAverageValue OnResponseAuctionGetItemAverageValue; + + public event EventMove OnEventMove; public event EventCharacterEquipmentChanged OnEventCharacterEquipmentChanged; public event EventNewExit OnEventNewExit; public event EventInventoryPutItem OnEventInventoryPutItem; @@ -30,12 +42,12 @@ public class PacketHandler : PhotonParser public event EventNewMountObject OnEventNewMountObject; public event EventNewMob OnEventNewMob; public event EventJoinFinished OnEventJoinFinished; - public event EventUpdateSilver OnEventUpdateSilver; - public event EventHarvestableObject OnEventHarvestableObject; - public event EventHarvestableObjectList OnEventHarvestableObjectList; + public event EventUpdateMoney OnEventUpdateMoney; + public event EventHarvestableObject OnEventNewHarvestableObject; + public event EventHarvestableObject OnEventNewSimpleHarvestableObject; + public event EventHarvestableObjectList OnEventNewSimpleHarvestableObjectList; public event EventHarvestableChangeState OnEventHarvestableChangeState; public event EventMobChangeState OnEventMobChangeState; - public event EventInCombatStateUpdate OnEventInCombatStateUpdate; public event EventHealthUpdate OnEventHealthUpdate; public event EventAttack OnEventAttack; @@ -56,362 +68,340 @@ public PacketHandler() { } protected override void OnEvent(byte code, Dictionary parameters) { - EventCodes evCode = 0; - - if (code == 1) + try { - parameters.TryGetValue((byte)252, out object val); + EventCodes evCode = 0; - if (val == null) return; - - if (!int.TryParse(val.ToString(), out int iCode)) return; - - try + if (code == 1) { + parameters.TryGetValue((byte)252, out object val); + + if (val == null) return; + + if (!int.TryParse(val.ToString(), out int iCode)) return; + evCode = (EventCodes)iCode; } - catch (KeyNotFoundException) + else { - debugPacket(parameters, iCode); + evCode = (EventCodes)code; } - } - else - { - evCode = (EventCodes)code; - } - switch (evCode) - { - case EventCodes.Move: - onEntityMovementEvent(parameters); - break; + switch (evCode) + { + case EventCodes.Move: + onEventMove(parameters); + break; - case EventCodes.CharacterEquipmentChanged: - onCharacterEquipmentChanged(parameters); - break; + case EventCodes.CharacterEquipmentChanged: + onCharacterEquipmentChanged(parameters); + break; - case EventCodes.NewExit: - onNewExit(parameters); - break; + case EventCodes.NewExit: + onNewExit(parameters); + break; - case EventCodes.InventoryPutItem: - onInventoryPutItem(parameters); - break; + case EventCodes.InventoryPutItem: + onInventoryPutItem(parameters); + break; - case EventCodes.NewEquipmentItem: - onNewEquipmentItem(parameters, evCode); - break; + case EventCodes.NewEquipmentItem: + onNewEquipmentItem(parameters, evCode); + break; - case EventCodes.NewSimpleItem: - onNewSimpleItem(parameters, evCode); - break; + case EventCodes.NewSimpleItem: + onNewSimpleItem(parameters, evCode); + break; - case EventCodes.NewFurnitureItem: - onNewFurnitureItem(parameters, evCode); - break; + case EventCodes.NewFurnitureItem: + onNewFurnitureItem(parameters, evCode); + break; - case EventCodes.NewJournalItem: - onNewJournalItem(parameters, evCode); - break; + case EventCodes.NewJournalItem: + onNewJournalItem(parameters, evCode); + break; - case EventCodes.NewLaborerItem: - onNewLaborerItem(parameters, evCode); - break; + case EventCodes.NewLaborerItem: + onNewLaborerItem(parameters, evCode); + break; - case EventCodes.AttachItemContainer: - onAttachItemContainer(parameters); - break; + case EventCodes.AttachItemContainer: + onAttachItemContainer(parameters); + break; - case EventCodes.NewLoot: - onNewLoot(parameters); - break; + case EventCodes.NewLoot: + onNewLoot(parameters); + break; - case EventCodes.NewCharacter: - onNewCharacter(parameters); - break; + case EventCodes.NewCharacter: + onNewCharacter(parameters); + break; - case EventCodes.Leave: - onLeaveEvent(parameters); - break; + case EventCodes.Leave: + onLeaveEvent(parameters); + break; - case EventCodes.Mounted: - onMounted(parameters); - break; + case EventCodes.Mounted: + onMounted(parameters); + break; - case EventCodes.NewMountObject: - onNewMountObject(parameters); - break; + case EventCodes.NewMountObject: + onNewMountObject(parameters); + break; - case EventCodes.NewMob: - onNewMob(parameters); - break; + case EventCodes.NewMob: + onNewMob(parameters); + break; - case EventCodes.JoinFinished: - onJoinFinished(); - break; + case EventCodes.JoinFinished: + onJoinFinished(parameters); + break; - case EventCodes.UpdateMoney: - onUpdateSilver(parameters); - break; + case EventCodes.UpdateMoney: + onUpdateSilver(parameters); + break; - case EventCodes.NewSimpleHarvestableObjectList: - onNewSimpleHarvestableObjectList(parameters); - break; + case EventCodes.NewSimpleHarvestableObjectList: + onNewSimpleHarvestableObjectList(parameters); + break; - case EventCodes.NewHarvestableObject: - onNewHarvestableObject(parameters); - break; + case EventCodes.NewSimpleHarvestableObject: + onNewSimpleHarvestableObject(parameters); + break; - case EventCodes.HarvestableChangeState: - onHarvestableChangeState(parameters); - break; + case EventCodes.NewHarvestableObject: + onNewHarvestableObject(parameters); + break; - case EventCodes.MobChangeState: - onMobChangeState(parameters); - break; + case EventCodes.HarvestableChangeState: + onHarvestableChangeState(parameters); + break; - case EventCodes.InCombatStateUpdate: - onInCombatStateUpdate(parameters); - break; + case EventCodes.MobChangeState: + onMobChangeState(parameters); + break; - case EventCodes.HealthUpdate: - onHealthUpdate(parameters); - break; + case EventCodes.InCombatStateUpdate: + onInCombatStateUpdate(parameters); + break; - case EventCodes.Attack: - onAttack(parameters); - break; + case EventCodes.HealthUpdate: + onHealthUpdate(parameters); + break; - case EventCodes.NewRandomDungeonExit: - onNewPortalExit(parameters); - break; + case EventCodes.Attack: + onAttack(parameters); + break; - case EventCodes.ActiveSpellEffectsUpdate: - onActiveSpellEffectsUpdate(parameters); - break; + case EventCodes.NewRandomDungeonExit: + onNewPortalExit(parameters); + break; - case EventCodes.HarvestStart: - onHarvestStart(parameters); - break; + case EventCodes.ActiveSpellEffectsUpdate: + onActiveSpellEffectsUpdate(parameters); + break; - case EventCodes.HarvestFinished: - onHarvestFinished(parameters); - break; + case EventCodes.HarvestStart: + onHarvestStart(parameters); + break; - case EventCodes.NewFloatObject: - onNewFloatObject(parameters); - break; + case EventCodes.HarvestFinished: + onHarvestFinished(parameters); + break; - case EventCodes.NewFishingZoneObject: - onNewFishingZoneObject(parameters); - break; + case EventCodes.NewFloatObject: + onNewFloatObject(parameters); + break; - case EventCodes.FishingMiniGame: - onFishingMiniGame(parameters); - break; + case EventCodes.NewFishingZoneObject: + onNewFishingZoneObject(parameters); + break; - case EventCodes.NewBuilding: - onNewBuilding(parameters); - break; + case EventCodes.FishingMiniGame: + onFishingMiniGame(parameters); + break; - case EventCodes.EasyAntiCheatMessageToClient: - onEventEasyAntiCheatMessageToClient(parameters); - break; + case EventCodes.NewBuilding: + onNewBuilding(parameters); + break; - case EventCodes.CastHits: - onEventCastHits(parameters); - break; + case EventCodes.EasyAntiCheatMessageToClient: + onEventEasyAntiCheatMessageToClient(parameters); + break; - case EventCodes.CastStart: - onEventCastStart(parameters); - break; + case EventCodes.CastHits: + onEventCastHits(parameters); + break; - case EventCodes.CastTimeUpdate: - onEventCastTimeUpdate(parameters); - break; + case EventCodes.CastStart: + onEventCastStart(parameters); + break; - default: - printEventInfo(parameters, evCode); - break; + case EventCodes.CastTimeUpdate: + onEventCastTimeUpdate(parameters); + break; + + default: + debugPacket("OnEvent", code, parameters); + break; + } + } + catch (Exception ex) + { + debugPacket("OnEventEx", code, parameters); } } protected override void OnRequest(byte operationCode, Dictionary parameters) { - parameters.TryGetValue((byte)253, out object val); - if (val == null) return; - - if (!int.TryParse(val.ToString(), out int iCode)) return; - - OperationCodes opCode = 0; - try { - opCode = (OperationCodes)iCode; - } - catch (KeyNotFoundException) - { - debugPacket(parameters, iCode); - } + parameters.TryGetValue((byte)253, out object val); - switch (opCode) - { - case OperationCodes.Move: - onMoveOperation(parameters); - break; + if (val == null) return; + if (!int.TryParse(val.ToString(), out int iCode)) return; - case OperationCodes.AuctionGetOffers: - onAuctionGetOffers_Req(parameters); - break; + OperationCodes opCode = (OperationCodes)iCode; - case OperationCodes.AuctionGetRequests: - onAuctionGetRequests_Req(parameters); - break; + switch (opCode) + { + case OperationCodes.Move: + onRequestMove(parameters); + break; - case OperationCodes.RegisterToObject: - onRegisterToObject(parameters); - break; + case OperationCodes.AuctionGetOffers: + onRequestAuctionGetOffers(parameters); + break; - case OperationCodes.UnRegisterFromObject: - onUnRegisterFromObject(parameters); - break; + case OperationCodes.AuctionGetRequests: + onRequestAuctionGetRequests(parameters); + break; - case OperationCodes.AttackStart: - printOperationInfo(parameters, opCode, "onRequest"); - break; + case OperationCodes.RegisterToObject: + onRequestRegisterToObject(parameters); + break; - case OperationCodes.Mount: - onMount(parameters); - break; + case OperationCodes.UnRegisterFromObject: + onRequestUnRegisterFromObject(parameters); + break; - case OperationCodes.MountCancel: - printOperationInfo(parameters, opCode, "onRequest"); - break; + case OperationCodes.Mount: + onRequestMount(parameters); + break; - case OperationCodes.HarvestStart: - onReqHarvestStart(parameters); - break; + case OperationCodes.HarvestStart: + onReqHarvestStart(parameters); + break; - case OperationCodes.HarvestCancel: - // No llega al minar un cuerpo - printOperationInfo(parameters, opCode, "onRequest"); - break; + //case OperationCodes.HarvestCancel: + // // No llega al minar un cuerpo + // printOperationInfo(parameters, opCode, "onRequest"); + // break; - case OperationCodes.ChangeCluster: - printOperationInfo(parameters, opCode, "onRequest"); - break; + //case OperationCodes.AttackStart: + // printOperationInfo(parameters, opCode, "onRequest"); + // break; - case OperationCodes.GetGameServerByCluster: - // Cuando le pide al servidor la direccion dns del cluster - // GetGameServerByCluster: {"0":"0000","255":10,"253":16} - printOperationInfo(parameters, opCode, "onRequest"); - break; + //case OperationCodes.MountCancel: + // printOperationInfo(parameters, opCode, "onRequest"); + // break; - case OperationCodes.GetReferralLink: - printOperationInfo(parameters, opCode, "onRequest"); - break; + //case OperationCodes.ChangeCluster: + // printOperationInfo(parameters, opCode, "onRequest"); + // break; - case OperationCodes.EasyAntiCheatMessageToServer: - //printOperationInfo(parameters, opCode, "onRequest"); - break; + //case OperationCodes.GetGameServerByCluster: + // // Cuando le pide al servidor la direccion dns del cluster + // // GetGameServerByCluster: {"0":"0000","255":10,"253":16} + // printOperationInfo(parameters, opCode, "onRequest"); + // break; - default: - //printOperationInfo(parameters, opCode, "onRequest"); - break; - } + //case OperationCodes.GetReferralLink: + // printOperationInfo(parameters, opCode, "onRequest"); + // break; + + //case OperationCodes.EasyAntiCheatMessageToServer: + // printOperationInfo(parameters, opCode, "onRequest"); + // break; + default: + debugPacket("OnRequest", operationCode, parameters); + break; + } + } + catch (Exception ex) + { + debugPacket("OnRequestEx", operationCode, parameters); + } } protected override void OnResponse(byte operationCode, short returnCode, string debugMessage, Dictionary parameters) { - parameters.TryGetValue((byte)253, out object val); - if (val == null) return; + try + { + parameters.TryGetValue((byte)253, out object val); - if (!int.TryParse(val.ToString(), out int iCode)) return; + if (val == null) return; + if (!int.TryParse(val.ToString(), out int iCode)) return; - OperationCodes opCode = (OperationCodes)iCode; - switch (opCode) - { - case OperationCodes.Join: - onJoinResponse(parameters); - break; + OperationCodes opCode = (OperationCodes)iCode; - case OperationCodes.AuctionGetOffers: - onAuctionGetOffers_Res(parameters); - break; + switch (opCode) + { + case OperationCodes.Join: + onResponseJoin(parameters); + break; - case OperationCodes.AuctionGetRequests: - onAuctionGetRequests_Res(parameters); - break; + case OperationCodes.AuctionGetOffers: + onResponseAuctionGetOffers(parameters); + break; - case OperationCodes.AuctionGetItemAverageValue: - onAuctionGetItemAverageValue(parameters); - break; + case OperationCodes.AuctionGetRequests: + onResponseAuctionGetRequests(parameters); + break; - case OperationCodes.HarvestStart: - //printOperationInfo(parameters, opCode, "onResponse"); - break; + case OperationCodes.AuctionGetItemAverageValue: + onResponseAuctionGetItemAverageValue(parameters); + break; - case OperationCodes.HarvestCancel: - printOperationInfo(parameters, opCode, "onResponse"); - break; + //case OperationCodes.HarvestStart: + // printOperationInfo(parameters, opCode, "onResponse"); + // break; - case OperationCodes.ChangeCluster: - printOperationInfo(parameters, opCode, "onResponse"); - break; + //case OperationCodes.HarvestCancel: + // printOperationInfo(parameters, opCode, "onResponse"); + // break; - case OperationCodes.GetGameServerByCluster: - // GetGameServerByCluster: {"0":"live01-win-28.dc02.albion.zone:5056","255":10,"253":16} - //printOperationInfo(parameters, opCode, "onResponse"); - break; + //case OperationCodes.ChangeCluster: + // printOperationInfo(parameters, opCode, "onResponse"); + // break; - default: - //printOperationInfo(parameters, opCode, "onResponse"); - break; - } - } + //case OperationCodes.GetGameServerByCluster: + // //GetGameServerByCluster: {"0":"live01-win-28.dc02.albion.zone:5056","255":10,"253":16} + // printOperationInfo(parameters, opCode, "onResponse"); + // break; - private void printEventInfo(Object obj, EventCodes evCode) - { - string jsonPacket; - jsonPacket = JsonConvert.SerializeObject(obj); - /* - if (jsonPacket.IndexOf("[") != -1) + default: + debugPacket("OnResponse", operationCode, parameters); + break; + } + } + catch (Exception ex) { - string outLine = "[onEvent][" + (int)evCode + "] " + evCode + ": " + jsonPacket; - Console.WriteLine(outLine); + debugPacket("OnResponseEx", operationCode, parameters); } - */ - string outLine = "[onEvent][" + (int)evCode + "] " + evCode + ": " + jsonPacket; - var output = new StreamWriter(Console.OpenStandardOutput()); - output.WriteLine(outLine); - output.Flush(); - //Console.WriteLine(outLine); - //Console.Out.Flush(); } - private void printOperationInfo(Object obj, OperationCodes opCode, String typeInfo) + private void debugPacket(string type, int iCode, Object obj) { - string jsonPacket; - jsonPacket = JsonConvert.SerializeObject(obj); - string outLine = "[" + typeInfo + "][" + (int)opCode + "] " + opCode + ": " + jsonPacket; - var output = new StreamWriter(Console.OpenStandardOutput()); - output.WriteLine(outLine); - output.Flush(); - //Console.WriteLine(outLine); - //Console.Out.Flush(); - } - - private void debugPacket(Object obj, int iCode) - { - string jsonPacket; - jsonPacket = JsonConvert.SerializeObject(obj); - string outLine = iCode + ": " + jsonPacket; + string jsonPacket = JsonConvert.SerializeObject(obj); + string outLine = $"type:{type} iCode:{iCode} jsonPacket:{jsonPacket}"; + Console.WriteLine(outLine); Console.Out.Flush(); } - #region OnEvent + #region onOperation Event private void onNewBuilding(Dictionary parameters) { @@ -421,8 +411,6 @@ private void onNewBuilding(Dictionary parameters) var nb = new evNewBuilding(packetID, name, pos); OnEventNewBuilding?.Invoke(nb); - - printEventInfo(nb, EventCodes.NewBuilding); } private void onCharacterEquipmentChanged(Dictionary parameters) @@ -448,6 +436,7 @@ private void onCharacterEquipmentChanged(Dictionary parameters) else { Int16[] itemList = (Int16[])parameters[2]; + foreach (Int16 b in itemList) { if (index >= 10) @@ -489,8 +478,6 @@ private void onCharacterEquipmentChanged(Dictionary parameters) var eqc = new evCharacterEquipmentChanged(items, skills); OnEventCharacterEquipmentChanged?.Invoke(eqc); - - printEventInfo(eqc, EventCodes.CharacterEquipmentChanged); } private void onNewExit(Dictionary parameters) @@ -503,8 +490,6 @@ private void onNewExit(Dictionary parameters) var ne = new evNewExit(entryPos); OnEventNewExit?.Invoke(ne); - - printEventInfo(ne, EventCodes.NewExit); } } @@ -515,8 +500,6 @@ private void onMobChangeState(Dictionary parameters) var cs = new evMobChangeState(mobID, enchantment); OnEventMobChangeState?.Invoke(cs); - - printEventInfo(cs, EventCodes.MobChangeState); } private void onInventoryPutItem(Dictionary parameters) @@ -524,14 +507,13 @@ private void onInventoryPutItem(Dictionary parameters) int itemID = int.Parse(parameters[0].ToString()); var putItem = new evInventoryPutItem(itemID); - OnEventInventoryPutItem?.Invoke(putItem); - - printEventInfo(putItem, EventCodes.InventoryPutItem); + OnEventInventoryPutItem?.Invoke(putItem); } private void onNewFishingZoneObject(Dictionary parameters) { //NewFishingZoneObject: { "0":1182,"1":[253.4,52.8],"2":3,"3":2,"4":"FishingNodeSwarm","252":341} 0: objectID 1: zone pos 2:charges (not present when empty) 3:times fished from 4:zone tipe + int objectID = int.Parse(parameters[0].ToString()); Single[] zonePos = (Single[])parameters[1]; @@ -549,8 +531,6 @@ private void onNewFishingZoneObject(Dictionary parameters) var fishingZone = new evNewFishingZoneObject(objectID, zonePos, charges, fished, zoneType); OnEventNewFishingZoneObject?.Invoke(fishingZone); - - printEventInfo(fishingZone, EventCodes.NewFishingZoneObject); } private void onFishingMiniGame(Dictionary parameters) @@ -561,14 +541,13 @@ private void onFishingMiniGame(Dictionary parameters) var portal = new evFishingMiniGame(); OnEventFishingMiniGame?.Invoke(portal); - - printEventInfo(portal, EventCodes.FishingMiniGame); } private void onNewFloatObject(Dictionary parameters) { // NewFloatObject: { "0":665769,"1":[-190.193344,59.3336449],"2":298.5448,"3":632262,"4":1,"252":340} 0: bobber ID 1: bobber pos 2:angle // 3:player ID 4:fishing state (1: bobber landed 2:fish bitten 3:playing minigam 4:catched a fish 5:failed) + int bobberID = int.Parse(parameters[0].ToString()); Single[] bobberPos = (Single[])parameters[1]; float angleFromPlayer = float.Parse(parameters[2].ToString()); @@ -605,20 +584,17 @@ private void onNewFloatObject(Dictionary parameters) var bobber = new evNewFloatObject(bobberID, bobberPos, angleFromPlayer, playerId, readableState); OnEventNewFloatObject?.Invoke(bobber); - - printEventInfo(bobber, EventCodes.NewFloatObject); } private void onHarvestStart(Dictionary parameters) { //HarvestStart: { "0":144653,"1":638045717068106818,"2":638045717068106818,"3":1263,"5":2.0,"6":-1,"7":-1,"252":54} 5: tiempo para terminar de harvestear + int harvestableId = int.Parse(parameters[3].ToString()); float time = float.Parse(parameters[5].ToString()); var hs = new evHarvestStart(harvestableId, time); OnEventHarvestStart?.Invoke(hs); - - printEventInfo(hs, EventCodes.HarvestStart); } private evNewSimpleItem onNewItem(Dictionary parameters) @@ -642,55 +618,44 @@ private void onNewEquipmentItem(Dictionary parameters, EventCodes { var data = onNewItem(parameters); OnNewEquipmentItem?.Invoke(data); - - printEventInfo(data, evCode); } private void onNewSimpleItem(Dictionary parameters, EventCodes evCode) { var data = onNewItem(parameters); OnNewSimpleItem?.Invoke(data); - - printEventInfo(data, evCode); } private void onNewFurnitureItem(Dictionary parameters, EventCodes evCode) { var data = onNewItem(parameters); OnNewFurnitureItem?.Invoke(data); - - printEventInfo(data, evCode); } private void onNewJournalItem(Dictionary parameters, EventCodes evCode) { var data = onNewItem(parameters); OnNewJournalItem?.Invoke(data); - - printEventInfo(data, evCode); } private void onNewLaborerItem(Dictionary parameters, EventCodes evCode) { var data = onNewItem(parameters); OnNewLaborerItem?.Invoke(data); - - printEventInfo(data, evCode); } private void onAttachItemContainer(Dictionary parameters) { - int objectID = int.Parse(parameters[0].ToString()); - byte[] ownerMarkID = (byte[])parameters[1]; - int[] itemsID = (int[])parameters[3]; // Estos itemsID son los objectID de eventos como // NewEquipmentItem: {"0":203114,"1":2984,"2":1,"4":6204632,"5":"Bettooo","6":2,"7":48000000,"8":[-1],"9":[-1],"252":28} // donde 0 es el objectID + int objectID = int.Parse(parameters[0].ToString()); + byte[] ownerMarkID = (byte[])parameters[1]; + int[] itemsID = (int[])parameters[3]; + var itemContainer = new evAttachItemContainer(objectID, ownerMarkID, itemsID); OnEventAttachItemContainer?.Invoke(itemContainer); - - printEventInfo(itemContainer, EventCodes.AttachItemContainer); } private void onNewLoot(Dictionary parameters) @@ -700,13 +665,12 @@ private void onNewLoot(Dictionary parameters) var newloot = new evNewLoot(lootId, pos); OnEventNewLoot?.Invoke(newloot); - - printEventInfo(newloot, EventCodes.NewLoot); } private void onHarvestFinished(Dictionary parameters) { //map[0:686375 1:637959518682696481 2:637959518687702927 3:2580 4:2 5:2 6:1 8:[] 9:[] 252:54] + int playerId = int.Parse(parameters[0].ToString()); int harvestableId = int.Parse(parameters[3].ToString()); short gathered = short.Parse(parameters[4].ToString()); @@ -734,8 +698,6 @@ private void onHarvestFinished(Dictionary parameters) var hf = new evHarvestFinished(playerId, harvestableId, gathered, yield, premium, charges); OnEventHarvestFinished?.Invoke(hf); - - printEventInfo(hf, EventCodes.HarvestFinished); } private void onMounted(Dictionary parameters) @@ -748,9 +710,6 @@ private void onMounted(Dictionary parameters) var mounted = new evMounted(playerId, isMounted); OnEventMounted?.Invoke(mounted); - - printEventInfo(mounted, EventCodes.Mounted); - } public void onAttack(Dictionary parameters) @@ -760,8 +719,6 @@ public void onAttack(Dictionary parameters) var attackEv = new evAttack(attackerID, targetID); OnEventAttack?.Invoke(attackEv); - - printEventInfo(attackEv, EventCodes.Attack); } private void onNewPortalExit(Dictionary parameters) @@ -772,8 +729,6 @@ private void onNewPortalExit(Dictionary parameters) var portal = new evNewPortalExit(id, pos, type); OnEventNewPortalExit?.Invoke(portal); - - printEventInfo(portal, EventCodes.NewRandomDungeonExit); } private void onActiveSpellEffectsUpdate(Dictionary parameters) @@ -782,13 +737,12 @@ private void onActiveSpellEffectsUpdate(Dictionary parameters) var ase = new evActiveSpellEffectsUpdate(); OnEventActiveSpellEffectsUpdate?.Invoke(ase); - - printEventInfo(ase, EventCodes.NewRandomDungeonExit); } private void onNewHarvestableObject(Dictionary parameters) { // NewHarvestableObject: { "0":211813,"1":211239,"2":637903348349073726,"3":"+Z47IXg2YUWs1j2NjqNMZQ==","5":24,"6":112,"7":3,"8":[-374.0117,209.0445],"9":319.8794,"11":0,"252":36} + int id = int.Parse(parameters[0].ToString()); byte type = byte.Parse(parameters[5].ToString()); byte tier = byte.Parse(parameters[7].ToString()); @@ -798,32 +752,37 @@ private void onNewHarvestableObject(Dictionary parameters) byte enchantment = byte.Parse(parameters[11].ToString()); var nho = new HarvestableObject(id, type, tier, pos, charges, enchantment); - OnEventHarvestableObject?.Invoke(nho); + OnEventNewHarvestableObject?.Invoke(nho); + } - printEventInfo(nho, EventCodes.NewHarvestableObject); + private void onNewSimpleHarvestableObject(Dictionary parameters) + { + // NewHarvestableObject: { "0":211813,"1":211239,"2":637903348349073726,"3":"+Z47IXg2YUWs1j2NjqNMZQ==","5":24,"6":112,"7":3,"8":[-374.0117,209.0445],"9":319.8794,"11":0,"252":36} + + int id = int.Parse(parameters[0].ToString()); + byte type = byte.Parse(parameters[5].ToString()); + byte tier = byte.Parse(parameters[7].ToString()); + Single[] pos = (Single[])parameters[8]; + parameters.TryGetValue((byte)10, out object _charges); + byte charges = _charges == null ? (byte)0 : byte.Parse(_charges.ToString()); + byte enchantment = byte.Parse(parameters[11].ToString()); + + var nho = new HarvestableObject(id, type, tier, pos, charges, enchantment); + OnEventNewSimpleHarvestableObject?.Invoke(nho); } - + private void onHealthUpdate(Dictionary parameters) { - try - { - parameters.TryGetValue((byte)0, out object _attEntityID); - int attackerEntityId = _attEntityID == null ? 0 : int.Parse(_attEntityID.ToString()); - parameters.TryGetValue((byte)2, out object _tHU); - int targetHealthUpdate = _tHU == null ? 0 : int.Parse(_tHU.ToString()); - parameters.TryGetValue((byte)3, out object _tH); - int targetHealth = _tH == null ? 0 : int.Parse(_tH.ToString()); - int targetEntityId = int.Parse(parameters[6].ToString()); - - var hu = new evHealthUpdate(attackerEntityId, targetHealthUpdate, targetHealth, targetEntityId); - OnEventHealthUpdate?.Invoke(hu); - - printEventInfo(hu, EventCodes.HealthUpdate); - } - catch (Exception e) - { - Debug.WriteLine(e.StackTrace); - } + parameters.TryGetValue((byte)0, out object _attEntityID); + int attackerEntityId = _attEntityID == null ? 0 : int.Parse(_attEntityID.ToString()); + parameters.TryGetValue((byte)2, out object _tHU); + int targetHealthUpdate = _tHU == null ? 0 : int.Parse(_tHU.ToString()); + parameters.TryGetValue((byte)3, out object _tH); + int targetHealth = _tH == null ? 0 : int.Parse(_tH.ToString()); + int targetEntityId = int.Parse(parameters[6].ToString()); + + var hu = new evHealthUpdate(attackerEntityId, targetHealthUpdate, targetHealth, targetEntityId); + OnEventHealthUpdate?.Invoke(hu); } private void onLeaveEvent(Dictionary parameters) @@ -832,14 +791,12 @@ private void onLeaveEvent(Dictionary parameters) var leave = new evLeave(entityId); OnEventevLeave?.Invoke(leave); - - printEventInfo(leave, EventCodes.Leave); } - private void onJoinFinished() + private void onJoinFinished(Dictionary parameters) { evJoinFinished jf = new evJoinFinished(); - printEventInfo(jf, EventCodes.JoinFinished); + OnEventJoinFinished?.Invoke(jf); } private void onUpdateSilver(Dictionary parameters) @@ -850,8 +807,7 @@ private void onUpdateSilver(Dictionary parameters) long currentSilver = long.Parse(silver.Substring(0, len)); var us = new evUpdateSilver(id, currentSilver); - - printEventInfo(us, EventCodes.UpdateMoney); + OnEventUpdateMoney?.Invoke(us); } private void onNewSimpleHarvestableObjectList(Dictionary parameters) @@ -859,15 +815,18 @@ private void onNewSimpleHarvestableObjectList(Dictionary parameter List harvestableList = new List(); List idList = new List(); + if (parameters[0].GetType() == typeof(Byte[])) { Byte[] typeListByte = (Byte[])parameters[0]; //list of types + foreach (Byte b in typeListByte) idList.Add(b); } else if (parameters[0].GetType() == typeof(Int16[])) { Int16[] typeListByte = (Int16[])parameters[0]; //list of types + foreach (Int16 b in typeListByte) idList.Add(b); } @@ -877,38 +836,28 @@ private void onNewSimpleHarvestableObjectList(Dictionary parameter return; } - try - { - Byte[] typesList = (Byte[])parameters[1]; //list of types - Byte[] tiersList = (Byte[])parameters[2]; //list of tiers - Single[] posList = (Single[])parameters[3]; //list of positions X1, Y1, X2, Y2 ... - Byte[] chargeList = (Byte[])parameters[4]; //charge + Byte[] typesList = (Byte[])parameters[1]; //list of types + Byte[] tiersList = (Byte[])parameters[2]; //list of tiers + Single[] posList = (Single[])parameters[3]; //list of positions X1, Y1, X2, Y2 ... + Byte[] chargeList = (Byte[])parameters[4]; //charge - for (int i = 0; i < idList.Count; i++) - { - int id = int.Parse(idList.ElementAt(i).ToString()); - byte type = byte.Parse(typesList[i].ToString()); - byte tier = byte.Parse(tiersList[i].ToString()); - Single posX = (Single)posList[i * 2]; - Single posY = (Single)posList[i * 2 + 1]; - Single[] pos = new Single[2] { posX, posY }; - Byte charges = byte.Parse(chargeList[i].ToString()); - byte enchantent = (byte)0; - - var hObject = new HarvestableObject(id, type, tier, pos, charges, enchantent); - harvestableList.Add(hObject); - } - - } - catch (Exception e) + for (int i = 0; i < idList.Count; i++) { - Debug.WriteLine("eL: " + e.ToString()); + int id = int.Parse(idList.ElementAt(i).ToString()); + byte type = byte.Parse(typesList[i].ToString()); + byte tier = byte.Parse(tiersList[i].ToString()); + Single posX = (Single)posList[i * 2]; + Single posY = (Single)posList[i * 2 + 1]; + Single[] pos = new Single[2] { posX, posY }; + Byte charges = byte.Parse(chargeList[i].ToString()); + byte enchantent = (byte)0; + + var hObject = new HarvestableObject(id, type, tier, pos, charges, enchantent); + harvestableList.Add(hObject); } var jol = new HarvestableObjectList(harvestableList); - OnEventHarvestableObjectList?.Invoke(jol); - - printEventInfo(jol, EventCodes.NewSimpleHarvestableObjectList); + OnEventNewSimpleHarvestableObjectList?.Invoke(jol); } private void onHarvestableChangeState(Dictionary parameters) @@ -916,19 +865,21 @@ private void onHarvestableChangeState(Dictionary parameters) int id = int.Parse(parameters[0].ToString()); int charges = 0; + if (parameters.ContainsKey(1)) { charges = int.Parse(parameters[1].ToString()); } int enchantment = 0; + if (parameters.ContainsKey(2)) { enchantment = int.Parse(parameters[2].ToString()); } var change = new HarvestableChangeState(id, charges, enchantment); - printEventInfo(change, EventCodes.HarvestableChangeState); + OnEventHarvestableChangeState?.Invoke(change); } private void onInCombatStateUpdate(Dictionary parameters) @@ -942,9 +893,7 @@ private void onInCombatStateUpdate(Dictionary parameters) bool enemyAttacking = _enemyStatus == null ? false: bool.Parse(_enemyStatus.ToString()); var comUp = new InCombatStateUpdate(playerId, playerAttacking, enemyAttacking); - OnEventInCombatStateUpdate?.Invoke(comUp); - - printEventInfo(comUp, EventCodes.InCombatStateUpdate); + OnEventInCombatStateUpdate?.Invoke(comUp); } private void onNewMountObject(Dictionary parameters) @@ -954,9 +903,7 @@ private void onNewMountObject(Dictionary parameters) byte[] ownerMarkId = (byte[])parameters[5]; var newMount = new evNewMountObject(id, pos, ownerMarkId); - OnEventNewMountObject?.Invoke(newMount); - - printEventInfo(newMount, EventCodes.NewMountObject); + OnEventNewMountObject?.Invoke(newMount); } private void onNewMob(Dictionary parameters) @@ -964,10 +911,11 @@ private void onNewMob(Dictionary parameters) //if (!parameters.ContainsKey(13)) // return; - int id = int.Parse(parameters[0].ToString()); + int id = int.Parse(parameters[0].ToString()); int typeId = int.Parse(parameters[1].ToString()); Single[] pos = (Single[])parameters[7]; int health; + if (parameters.ContainsKey(13)) { health = int.Parse(parameters[13].ToString()); @@ -976,12 +924,11 @@ private void onNewMob(Dictionary parameters) { health = int.Parse(parameters[14].ToString()); } + int rarity = int.Parse(parameters[22].ToString()); var mob = new evNewMob(id, typeId, pos, health, rarity); OnEventNewMob?.Invoke(mob); - - printEventInfo(mob, EventCodes.NewMob); } private void onNewCharacter(Dictionary parameters) @@ -990,8 +937,10 @@ private void onNewCharacter(Dictionary parameters) string nick = parameters[1].ToString(); object oGuild = ""; object oAlliance = ""; + parameters.TryGetValue((byte)8, out oGuild); parameters.TryGetValue((byte)44, out oAlliance); + string guild = oGuild == null ? "" : oGuild.ToString(); string alliance = oAlliance == null ? "" : oAlliance.ToString(); Single[] pos = (Single[])parameters[14]; @@ -1009,6 +958,7 @@ private void onNewCharacter(Dictionary parameters) if (parameters[38].GetType() == typeof(Byte[])) { Byte[] itemList = (Byte[])parameters[38]; + foreach (Byte b in itemList) { if (index >= 10) @@ -1021,6 +971,7 @@ private void onNewCharacter(Dictionary parameters) else { Int16[] itemList = (Int16[])parameters[38]; + foreach (Int16 b in itemList) { if (index >= 10) @@ -1036,6 +987,7 @@ private void onNewCharacter(Dictionary parameters) if (parameters[41].GetType() == typeof(Byte[])) { Byte[] skillList = (Byte[])parameters[41]; + foreach (Byte b in skillList) { if (index >= 6) @@ -1048,6 +1000,7 @@ private void onNewCharacter(Dictionary parameters) else { Int16[] skillList = (Int16[])parameters[41]; + foreach (Int16 b in skillList) { if (index >= 6) @@ -1060,11 +1013,9 @@ private void onNewCharacter(Dictionary parameters) var newChar = new evNewCharacter(id, nick, guild, alliance, pos, items, skills, faction, currentHealth, maxHealth); OnEventNewCharacter?.Invoke(newChar); - - printEventInfo(newChar, EventCodes.NewCharacter); } - private void onEntityMovementEvent(Dictionary parameters) + private void onEventMove(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); Byte[] a = (Byte[])parameters[1]; @@ -1072,14 +1023,7 @@ private void onEntityMovementEvent(Dictionary parameters) Single posY = BitConverter.ToSingle(a, 13); var ent = new Entity(id, posX, posY); - OnEventEntityMove?.Invoke(ent); - - string strJson; - strJson = JsonConvert.SerializeObject(ent); - string outLine = "[onEntityMovementEvent]: " + strJson; - var output = new StreamWriter(Console.OpenStandardOutput()); - output.WriteLine(outLine); - output.Flush(); + OnEventMove?.Invoke(ent); } private void onEventEasyAntiCheatMessageToClient(Dictionary parameters) @@ -1088,8 +1032,6 @@ private void onEventEasyAntiCheatMessageToClient(Dictionary parame var nb = new evEasyAntiCheatMessageToClient(); OnEventEasyAntiCheatMessageToClient?.Invoke(nb); - - printEventInfo(nb, EventCodes.EasyAntiCheatMessageToClient); } private void onEventCastHits(Dictionary parameters) @@ -1100,9 +1042,7 @@ private void onEventCastHits(Dictionary parameters) int packetID = int.Parse(parameters[0].ToString()); var nb = new evCastHits(); - OnEventCastHits?.Invoke(nb); - - printEventInfo(nb, EventCodes.CastHits); + OnEventCastHits?.Invoke(nb); } private void onEventCastStart(Dictionary parameters) @@ -1113,9 +1053,7 @@ private void onEventCastStart(Dictionary parameters) int packetID = int.Parse(parameters[0].ToString()); var nb = new evCastStart(); - OnEventCastStart?.Invoke(nb); - - printEventInfo(nb, EventCodes.CastStart); + OnEventCastStart?.Invoke(nb); } private void onEventCastTimeUpdate(Dictionary parameters) @@ -1123,9 +1061,7 @@ private void onEventCastTimeUpdate(Dictionary parameters) int packetID = int.Parse(parameters[0].ToString()); var nb = new evCastTimeUpdate(); - OnEventCastTimeUpdate?.Invoke(nb); - - printEventInfo(nb, EventCodes.CastTimeUpdate); + OnEventCastTimeUpdate?.Invoke(nb); } #endregion @@ -1135,12 +1071,12 @@ private void onEventCastTimeUpdate(Dictionary parameters) private void onReqHarvestStart(Dictionary parameters) { int harvest_id = int.Parse(parameters[1].ToString()); - var hs = new opHarvestStart(harvest_id); - printOperationInfo(hs, OperationCodes.HarvestStart, "onRequest"); + var hs = new opHarvestStart(harvest_id); + OnRequestHarvestStart?.Invoke(hs); } - private void onMount(Dictionary parameters) + private void onRequestMount(Dictionary parameters) { parameters.TryGetValue((byte)2, out object _isMounting); bool isMounting = _isMounting == null ? false : bool.Parse(_isMounting.ToString()); @@ -1148,10 +1084,10 @@ private void onMount(Dictionary parameters) bool quickMount = _quickMount == null ? false: bool.Parse(_quickMount.ToString()); var opm = new opMount(isMounting, quickMount); - printOperationInfo(opm, OperationCodes.Mount, "onRequest"); + OnRequestMount?.Invoke(opm); } - private void onMoveOperation(Dictionary parameters) + private void onRequestMove(Dictionary parameters) { if (parameters == null) return; @@ -1177,11 +1113,9 @@ private void onMoveOperation(Dictionary parameters) opMove mov = new opMove(timestamp, pos, angle, target, speed); OnRequestMove?.Invoke(mov); - - printOperationInfo(mov, OperationCodes.Move, "onRequest"); } - private void onAuctionGetOffers_Req(Dictionary parameters) + private void onRequestAuctionGetOffers(Dictionary parameters) { int id = int.Parse(parameters[0].ToString()); Int16[] itemsID = new short[10]; @@ -1196,22 +1130,21 @@ private void onAuctionGetOffers_Req(Dictionary parameters) short quality; try { quality = short.Parse(parameters[3].ToString()); } - catch (System.FormatException) { quality = 0; } + catch (FormatException) { quality = 0; } short tier; try { tier = short.Parse(parameters[5].ToString()); } - catch (System.FormatException) { tier = 0; } + catch (FormatException) { tier = 0; } short enchantment; try { enchantment = short.Parse(parameters[8].ToString()); } - catch (System.FormatException) { enchantment = -1; } + catch (FormatException) { enchantment = -1; } var agor = new opAuctionGetAny(id, itemsID, category, subcategory, quality, tier, enchantment); - - printOperationInfo(agor, OperationCodes.AuctionGetOffers, "onRequest"); + OnRequestAuctionGetOffers?.Invoke(agor); } - private void onAuctionGetRequests_Req(Dictionary parameters) + private void onRequestAuctionGetRequests(Dictionary parameters) { // {"0":867,"1":"accessories","2":"bag","3":"5","4":0,"5":"8","7":"3","8":0,"9":1,"10":50,"12":true,"253":77} int id = int.Parse(parameters[0].ToString()); @@ -1221,45 +1154,47 @@ private void onAuctionGetRequests_Req(Dictionary parameters) { itemsID = (Int16[])parameters[6]; } + string category = parameters[1].ToString(); string subcategory = parameters[2].ToString(); short quality; try { quality = short.Parse(parameters[3].ToString()); } - catch (System.FormatException) { quality = 0; } + catch (FormatException) { quality = 0; } short tier; try { tier = short.Parse(parameters[5].ToString()); } - catch (System.FormatException) { tier = 0; } + catch (FormatException) { tier = 0; } short enchantment; try { enchantment = short.Parse(parameters[7].ToString()); } - catch (System.FormatException) { enchantment = -1; } + catch (FormatException) { enchantment = -1; } var agrr = new opAuctionGetAny(id, itemsID, category, subcategory, quality, tier, enchantment); - - printOperationInfo(agrr, OperationCodes.AuctionGetRequests, "onRequest"); + OnRequestAuctionGetRequests?.Invoke(agrr); } - private void onRegisterToObject(Dictionary parameters) + private void onRequestRegisterToObject(Dictionary parameters) { long id = long.Parse(parameters[0].ToString()); + var reg = new opRegisterToObject(id); - printOperationInfo(reg, OperationCodes.RegisterToObject, "onRequest"); + OnRequestRegisterToObject?.Invoke(reg); } - private void onUnRegisterFromObject(Dictionary parameters) + private void onRequestUnRegisterFromObject(Dictionary parameters) { long id = long.Parse(parameters[0].ToString()); + var unreg = new UnRegisterFromObject(id); - printOperationInfo(unreg, OperationCodes.UnRegisterFromObject, "onRequest"); + OnRequestUnRegisterFromObject?.Invoke(unreg); } #endregion #region onOperation Response - private void onJoinResponse(Dictionary parameters) + private void onResponseJoin(Dictionary parameters) { // [onResponse][2] Join: {"0":229611,"1":"HldB6eRwfU6UYy3c3Cuenw==","2":"Anyalgo","3":9,"4":22,"5":1,"6":"AwAJAw==","7":"AA8CAA==", // "8":"4203","9":[-79.5,-363.5],"11":3083.0,"12":3083.0,"14":86.31288,"15":638371386969141790,"16":387.0,"17":387.0,"19":4.83620453,"20":638371386969141790,"21":885.0,"22":885.0,"24":8.85,"25":638371386969141790,"26":30000.0,"27":30000.0,"29":0.115740739,"30":638371386961696661,"32":2100836716,"34":20028876730,"35":{},"36":370000,"37":638371385370000000,"38":9999990000,"39":28800000,"40":1899.15479,"41":638371386969141790,"42":"AAAAAAA=","43":2,"44":"","45":0,"46":"","47":0,"48":true,"49":"Pq+miG0ZgEevySATGhQ+bQ==","50":[229616,0,229617,229613,229618,229620,229615,229621,229614,229619],"52":"kh9EpT9bZU6nL1vdJFcBLw==","53":[229622,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229624,229623],"55":0,"60":"4000","64":"4000","65":"","66":638371386969141790,"67":-2019027515,"76":"","78":"","80":47740000,"81":0,"83":638389385370000000,"84":33,"85":638349760192334510,"87":"","88":[],"89":"","91":true,"92":true,"94":638371386918888800,"95":638371383266745275,"96":12,"97":{},"98":"AAAAAAAA","99":0,"100":100258296,"101":12000000,"102":[-1,-1,-1,-1,-1,-1,-1],"103":0,"111":1,"112":"4000","253":2} @@ -1287,10 +1222,10 @@ private void onJoinResponse(Dictionary parameters) int faction = int.Parse(parameters[48].ToString()); var jo = new OpJoin(cId, markId, cName, cluster, pos, angle, currentHealth, maxHealth, currentEnergy, maxEnergy, faction); - printOperationInfo(jo, OperationCodes.Join, "onResponse"); + OnResponseJoin?.Invoke(jo); } - private void onAuctionGetOffers_Res(Dictionary parameters) + private void onResponseAuctionGetOffers(Dictionary parameters) { string line = JsonConvert.SerializeObject(parameters[0]); JArray offers = JArray.Parse(line); @@ -1324,10 +1259,10 @@ private void onAuctionGetOffers_Res(Dictionary parameters) } var response = new opAuctionGetOffersResponse(offerList); - printOperationInfo(response, OperationCodes.AuctionGetOffers, "onResponse"); + OnResponseAuctionGetOffers?.Invoke(response); } - private void onAuctionGetRequests_Res(Dictionary parameters) + private void onResponseAuctionGetRequests(Dictionary parameters) { string line = JsonConvert.SerializeObject(parameters[0]); JArray requests = JArray.Parse(line); @@ -1361,17 +1296,17 @@ private void onAuctionGetRequests_Res(Dictionary parameters) } var response = new opAuctionGetRequestsResponse(requestList); - printOperationInfo(response, OperationCodes.AuctionGetRequests, "onResponse"); + OnResponseAuctionGetRequests?.Invoke(response); } - private void onAuctionGetItemAverageValue(Dictionary parameters) + private void onResponseAuctionGetItemAverageValue(Dictionary parameters) { string line = parameters[0].ToString(); int len = line.Length; long average = long.Parse(line.Substring(0, len - 4)); var averageObj = new opAuctionGetItemAverageValue(average); - printOperationInfo(averageObj, OperationCodes.AuctionGetItemAverageValue, "onResponse"); + OnResponseAuctionGetItemAverageValue?.Invoke(averageObj); } #endregion diff --git a/AOSnifferNET/Program.cs b/AOSnifferNET/Program.cs index 64134c7..141bf08 100644 --- a/AOSnifferNET/Program.cs +++ b/AOSnifferNET/Program.cs @@ -1,10 +1,347 @@ -namespace AOSnifferNET +using Newtonsoft.Json; +using PhotonPackageParser; +using System.IO; +using System; + +namespace AOSnifferNET { internal class Program { static void Main(string[] args) { - _ = new PacketReciever(); + PacketReciever packetReciever = new PacketReciever(); + + packetReciever.photonParser.OnRequestMove += PhotonParser_OnRequestMove; + packetReciever.photonParser.OnRequestMount += PhotonParser_OnRequestMount; + packetReciever.photonParser.OnRequestAuctionGetOffers += PhotonParser_OnRequestAuctionGetOffers; + packetReciever.photonParser.OnRequestAuctionGetRequests += PhotonParser_OnRequestAuctionGetRequests; + packetReciever.photonParser.OnRequestRegisterToObject += PhotonParser_OnRequestRegisterToObject; + packetReciever.photonParser.OnRequestUnRegisterFromObject += PhotonParser_OnRequestUnRegisterFromObject; + + packetReciever.photonParser.OnResponseJoin += PhotonParser_OnResponseJoin; + packetReciever.photonParser.OnResponseAuctionGetOffers += PhotonParser_OnResponseAuctionGetOffers; + packetReciever.photonParser.OnResponseAuctionGetRequests += PhotonParser_OnResponseAuctionGetRequests; + packetReciever.photonParser.OnResponseAuctionGetItemAverageValue += PhotonParser_OnResponseAuctionGetItemAverageValue; + + + packetReciever.photonParser.OnEventMove += PhotonParser_OnEventMove; + packetReciever.photonParser.OnEventCharacterEquipmentChanged += PhotonParser_OnEventCharacterEquipmentChanged; + packetReciever.photonParser.OnEventNewExit += PhotonParser_OnEventNewExit; + packetReciever.photonParser.OnEventInventoryPutItem += PhotonParser_OnEventInventoryPutItem; + packetReciever.photonParser.OnNewEquipmentItem += PhotonParser_OnNewEquipmentItem; + packetReciever.photonParser.OnNewSimpleItem += PhotonParser_OnNewSimpleItem; + packetReciever.photonParser.OnNewFurnitureItem += PhotonParser_OnNewFurnitureItem; + packetReciever.photonParser.OnNewJournalItem += PhotonParser_OnNewJournalItem; + packetReciever.photonParser.OnNewLaborerItem += PhotonParser_OnNewLaborerItem; + packetReciever.photonParser.OnEventAttachItemContainer += PhotonParser_OnEventAttachItemContainer; + packetReciever.photonParser.OnEventNewLoot += PhotonParser_OnEventNewLoot; + packetReciever.photonParser.OnEventNewCharacter += PhotonParser_OnEventNewCharacter; + packetReciever.photonParser.OnEventevLeave += PhotonParser_OnEventevLeave; + packetReciever.photonParser.OnEventMounted += PhotonParser_OnEventMounted; + packetReciever.photonParser.OnEventNewMountObject += PhotonParser_OnEventNewMountObject; + packetReciever.photonParser.OnEventNewMob += PhotonParser_OnEventNewMob; + packetReciever.photonParser.OnEventJoinFinished += PhotonParser_OnEventJoinFinished; + packetReciever.photonParser.OnEventUpdateMoney += PhotonParser_OnEventUpdateMoney; + packetReciever.photonParser.OnEventNewHarvestableObject += PhotonParser_OnEventNewHarvestableObject; + packetReciever.photonParser.OnEventNewSimpleHarvestableObject += PhotonParser_OnEventNewSimpleHarvestableObject; + packetReciever.photonParser.OnEventNewSimpleHarvestableObjectList += PhotonParser_OnEventNewSimpleHarvestableObjectList; + packetReciever.photonParser.OnEventHarvestableChangeState += PhotonParser_OnEventHarvestableChangeState; + packetReciever.photonParser.OnEventMobChangeState += PhotonParser_OnEventMobChangeState; + packetReciever.photonParser.OnEventInCombatStateUpdate += PhotonParser_OnEventInCombatStateUpdate; + packetReciever.photonParser.OnEventHealthUpdate += PhotonParser_OnEventHealthUpdate; + packetReciever.photonParser.OnEventAttack += PhotonParser_OnEventAttack; + packetReciever.photonParser.OnEventNewPortalExit += PhotonParser_OnEventNewPortalExit; + packetReciever.photonParser.OnEventActiveSpellEffectsUpdate += PhotonParser_OnEventActiveSpellEffectsUpdate; + packetReciever.photonParser.OnEventHarvestStart += PhotonParser_OnEventHarvestStart; + packetReciever.photonParser.OnEventHarvestFinished += PhotonParser_OnEventHarvestFinished; + packetReciever.photonParser.OnEventNewFloatObject += PhotonParser_OnEventNewFloatObject; + packetReciever.photonParser.OnEventNewFishingZoneObject += PhotonParser_OnEventNewFishingZoneObject; + packetReciever.photonParser.OnEventFishingMiniGame += PhotonParser_OnEventFishingMiniGame; + packetReciever.photonParser.OnEventNewBuilding += PhotonParser_OnEventNewBuilding; + packetReciever.photonParser.OnEventEasyAntiCheatMessageToClient += PhotonParser_OnEventEasyAntiCheatMessageToClient; + packetReciever.photonParser.OnEventCastHits += PhotonParser_OnEventCastHits; + packetReciever.photonParser.OnEventCastStart += PhotonParser_OnEventCastStart; + packetReciever.photonParser.OnEventCastTimeUpdate += PhotonParser_OnEventCastTimeUpdate; } + + private static void printOperationInfo(string type, OperationCodes opCode, Object obj) + { + string jsonPacket; + jsonPacket = JsonConvert.SerializeObject(obj); + string outLine = "[onRequest][" + (int)opCode + "] " + opCode + ": " + jsonPacket; + + var output = new StreamWriter(Console.OpenStandardOutput()); + output.WriteLine(outLine); + output.Flush(); + + //Console.WriteLine(outLine); + //Console.Out.Flush(); + } + + private static void printOperationInfo(EventCodes opCode, Object obj) + { + string jsonPacket; + jsonPacket = JsonConvert.SerializeObject(obj); + string outLine = "[OnEvent][" + (int)opCode + "] " + opCode + ": " + jsonPacket; + + var output = new StreamWriter(Console.OpenStandardOutput()); + output.WriteLine(outLine); + output.Flush(); + + //Console.WriteLine(outLine); + //Console.Out.Flush(); + } + + #region OnEvent + + private static void PhotonParser_OnEventMove(Entity data) + { + printOperationInfo(EventCodes.Move, data); + } + + private static void PhotonParser_OnEventCharacterEquipmentChanged(evCharacterEquipmentChanged data) + { + printOperationInfo(EventCodes.CharacterEquipmentChanged, data); + } + + private static void PhotonParser_OnEventNewExit(evNewExit data) + { + printOperationInfo(EventCodes.NewExit, data); + } + + private static void PhotonParser_OnEventInventoryPutItem(evInventoryPutItem data) + { + printOperationInfo(EventCodes.InventoryPutItem, data); + } + + private static void PhotonParser_OnNewEquipmentItem(evNewSimpleItem data) + { + printOperationInfo(EventCodes.NewEquipmentItem, data); + } + + private static void PhotonParser_OnNewSimpleItem(evNewSimpleItem data) + { + printOperationInfo(EventCodes.NewSimpleItem, data); + } + + private static void PhotonParser_OnNewFurnitureItem(evNewSimpleItem data) + { + printOperationInfo(EventCodes.NewFurnitureItem, data); + } + + private static void PhotonParser_OnNewJournalItem(evNewSimpleItem data) + { + printOperationInfo(EventCodes.NewJournalItem, data); + } + + private static void PhotonParser_OnNewLaborerItem(evNewSimpleItem data) + { + printOperationInfo(EventCodes.NewLaborerItem, data); + } + + private static void PhotonParser_OnEventAttachItemContainer(evAttachItemContainer data) + { + printOperationInfo(EventCodes.AttachItemContainer, data); + } + + private static void PhotonParser_OnEventNewLoot(evNewLoot data) + { + printOperationInfo(EventCodes.NewLoot, data); + } + + private static void PhotonParser_OnEventNewCharacter(evNewCharacter data) + { + printOperationInfo(EventCodes.NewCharacter, data); + } + + private static void PhotonParser_OnEventevLeave(evLeave data) + { + printOperationInfo(EventCodes.Leave, data); + } + + private static void PhotonParser_OnEventMounted(evMounted data) + { + printOperationInfo(EventCodes.Mounted, data); + } + + private static void PhotonParser_OnEventNewMountObject(evNewMountObject data) + { + printOperationInfo(EventCodes.NewMountObject, data); + } + + private static void PhotonParser_OnEventNewMob(evNewMob data) + { + printOperationInfo(EventCodes.NewMob, data); + } + + private static void PhotonParser_OnEventJoinFinished(evJoinFinished data) + { + printOperationInfo(EventCodes.JoinFinished, data); + } + + private static void PhotonParser_OnEventUpdateMoney(evUpdateSilver data) + { + printOperationInfo(EventCodes.UpdateMoney, data); + } + + private static void PhotonParser_OnEventNewHarvestableObject(HarvestableObject data) + { + printOperationInfo(EventCodes.NewHarvestableObject, data); + } + + private static void PhotonParser_OnEventNewSimpleHarvestableObject(HarvestableObject data) + { + printOperationInfo(EventCodes.NewSimpleHarvestableObject, data); + } + + private static void PhotonParser_OnEventNewSimpleHarvestableObjectList(HarvestableObjectList data) + { + printOperationInfo(EventCodes.NewSimpleHarvestableObjectList, data); + } + + private static void PhotonParser_OnEventHarvestableChangeState(HarvestableChangeState data) + { + printOperationInfo(EventCodes.HarvestableChangeState, data); + } + + private static void PhotonParser_OnEventMobChangeState(evMobChangeState data) + { + printOperationInfo(EventCodes.MobChangeState, data); + } + + private static void PhotonParser_OnEventInCombatStateUpdate(InCombatStateUpdate data) + { + printOperationInfo(EventCodes.InCombatStateUpdate, data); + } + + private static void PhotonParser_OnEventHealthUpdate(evHealthUpdate data) + { + printOperationInfo(EventCodes.HealthUpdate, data); + } + + private static void PhotonParser_OnEventAttack(evAttack data) + { + printOperationInfo(EventCodes.Attack, data); + } + + private static void PhotonParser_OnEventNewPortalExit(evNewPortalExit data) + { + printOperationInfo(EventCodes.NewPortalExit, data); + } + + private static void PhotonParser_OnEventActiveSpellEffectsUpdate(evActiveSpellEffectsUpdate data) + { + printOperationInfo(EventCodes.ActiveSpellEffectsUpdate, data); + } + + private static void PhotonParser_OnEventHarvestStart(evHarvestStart data) + { + printOperationInfo(EventCodes.HarvestStart, data); + } + + private static void PhotonParser_OnEventHarvestFinished(evHarvestFinished data) + { + printOperationInfo(EventCodes.HarvestFinished, data); + } + + private static void PhotonParser_OnEventNewFloatObject(evNewFloatObject data) + { + printOperationInfo(EventCodes.NewFloatObject, data); + } + + private static void PhotonParser_OnEventNewFishingZoneObject(evNewFishingZoneObject data) + { + printOperationInfo(EventCodes.NewFishingZoneObject, data); + } + + private static void PhotonParser_OnEventFishingMiniGame(evFishingMiniGame data) + { + printOperationInfo(EventCodes.FishingMiniGame, data); + } + + private static void PhotonParser_OnEventNewBuilding(evNewBuilding data) + { + printOperationInfo(EventCodes.NewBuilding, data); + } + + private static void PhotonParser_OnEventEasyAntiCheatMessageToClient(evEasyAntiCheatMessageToClient data) + { + printOperationInfo(EventCodes.EasyAntiCheatMessageToClient, data); + } + + private static void PhotonParser_OnEventCastHits(evCastHits data) + { + printOperationInfo(EventCodes.CastHits, data); + } + + private static void PhotonParser_OnEventCastStart(evCastStart data) + { + printOperationInfo(EventCodes.CastStart, data); + } + + private static void PhotonParser_OnEventCastTimeUpdate(evCastTimeUpdate data) + { + printOperationInfo(EventCodes.CastTimeUpdate, data); + } + + #endregion + + #region onOperation Request + + private static void PhotonParser_OnRequestMove(opMove data) + { + printOperationInfo("OnRequest", OperationCodes.Move, data); + } + + private static void PhotonParser_OnRequestMount(opMount data) + { + printOperationInfo("OnRequest", OperationCodes.Mount, data); + } + + private static void PhotonParser_OnRequestAuctionGetOffers(opAuctionGetAny data) + { + printOperationInfo("OnRequest", OperationCodes.AuctionGetOffers, data); + } + + private static void PhotonParser_OnRequestAuctionGetRequests(opAuctionGetAny data) + { + printOperationInfo("OnRequest", OperationCodes.AuctionGetRequests, data); + } + + private static void PhotonParser_OnRequestRegisterToObject(opRegisterToObject data) + { + printOperationInfo("OnRequest", OperationCodes.RegisterToObject, data); + } + + private static void PhotonParser_OnRequestUnRegisterFromObject(UnRegisterFromObject data) + { + printOperationInfo("OnRequest", OperationCodes.UnRegisterFromObject, data); + } + + #endregion + + #region onOperation Response + + private static void PhotonParser_OnResponseJoin(OpJoin data) + { + printOperationInfo("OnResponse", OperationCodes.Join, data); + } + + private static void PhotonParser_OnResponseAuctionGetOffers(opAuctionGetOffersResponse data) + { + printOperationInfo("OnResponse", OperationCodes.AuctionGetOffers, data); + } + + private static void PhotonParser_OnResponseAuctionGetRequests(opAuctionGetRequestsResponse data) + { + printOperationInfo("OnResponse", OperationCodes.AuctionGetRequests, data); + } + + private static void PhotonParser_OnResponseAuctionGetItemAverageValue(opAuctionGetItemAverageValue data) + { + printOperationInfo("OnResponse", OperationCodes.AuctionGetItemAverageValue, data); + } + + #endregion } }