gorgor (04-21-2013)
Because so many people talk about how packet ids have changed ... they did not for ages ...
"boolFromServer" is used to determine the key to use when in proxy mode ... i.e. to determine whether a packet is inbound or outbound independent from the "local" socket direction ... a HELLO packet in bot context is outbound but in proxy mode it is inbound first then parsed, modified and compiled and then outbound ... that is what we need "boolFromServer" for ...
Code:#packetNum,packetName,boolFromServer # INIT 17,HELLO,0 60,MAP_INFO,1 45,LOAD,0 36,CREATE,0 31,CREATE_SUCCESS,1 46,ACCOUNT_LIST,1 # CRITICAL 6,PING,1 16,PONG,0 62,NEW_TICK,1 7,MOVE,0 26,UPDATE,1 11,UPDATE_ACK,0 19,SHOOT,1 22,SHOOT_ACK,0 # REST 0,FAILURE,1 1,CANCEL_TRADE,0 3,USE_PORTAL,0 4,INV_RESULT,1 10,BUY_RESULT,1 12,TRADE_DONE,1 13,SHOOT_MAGE,1 14,GOTO_ACK,0 18,TRADE_ACCEPTED,1 21,REQUEST_TRADE,0 24,PLAYER_HIT,0 25,TEXT,1 30,USE_ITEM,0 33,CHOOSE_NAME,0 34,QUEST_OBJECT_ID,1 35,INV_DROP,0 37,CHANGE_TRADE,0 38,PLAYER_SHOOT,0 39,RECONNECT,1 42,ESCAPE,0 47,DAMAGE,1 49,TELEPORT,0 51,SQUARE_HIT,0 52,GOTO,1 56,SHOW_EFFECT,1 57,ACCEPT_TRADE,0 61,TRADE_REQUESTED,1 63,NOTIFICATION,1 65,INV_SWAP,0 66,OTHER_HIT,0 69,PLAYER_TEXT,0 67,TRADE_START,1 68,AOE,1 74,ALLY_SHOOT,1 76,ENEMYHIT,0
Last edited by eth0nic; 04-21-2013 at 01:22 PM.
gorgor (04-21-2013)
Maybe you can help me
when objectType==32545 my proxy explose (just after the tiles, the chars, then booom).
I have then a difference of size of received/sent in the package ..
here is my log :
s2c: UPDATE t:null n:[GameObject {32567 ObjectStatusData {99628 Location {127.90839, 135.56891} [StatData {1 0 },....
the red part is not sent : [0, 0, 0, 1, 127, 55, 0, 1, -123, 44, 66, -1, -47, 24, 67, 7, -111, -92, 0, 18, 1, 0, 0, 0, 0, 2, 0, 0, 0, 60, 80, 0, 0, -128, 51, 81, 0, 0, 0, 22, 82, 0, 16, 123, 112, 101, 116, 115, 46, 66, 97, 98, 121, 95, 83, 107, 105, 110, 125, 83, 0, 0, 127, 55, 84, 0, 0, 0, 1, 85, 0, 0, 0, 50, 86, -65, -92, 51, -48, 87, 0, 0, 8, 32, 88, 0, 0, 0, 20, 89, 0, 0, 0, 0, 90, 0, 0, 0, 30, 91, 0, 0, 0, 2, 92, 0, 0, 0, 1, 93, 0, 0, 1, -105, 94, 0, 0, 1, -107, 95, 0, 0, 1, -104, 0, 0]
I am a bit stucked.. did you changed something in the class ObjectStatus ?
Last edited by gorgor; 04-24-2013 at 11:25 AM.
Note: I am only creating OO objects when required .... like when doing "getObjectByPlayerName" or "getObjectById" or "getClosestPlayerToObjetId" etc. to keep things fast ...
Note: the formatting is not that weird in my actual code :-P
Code:my $osize=readUnsignedShort($self->{data}); for(my $o=0;$o<$osize;$o++){ my $objectType=readUnsignedShort($self->{data}); my $objectId=readInt($self->{data}); my $x=readFloat($self->{data}); my $y=readFloat($self->{data}); #my $pos=Rotmg::Pos->new($x,$y); $rotmg->{'objects'}->{$objectId}->{'objectType'}=$objectType; $rotmg->{'objects'}->{$objectId}->{'x'}=$x; $rotmg->{'objects'}->{$objectId}->{'y'}=$y; my $ssize=readUnsignedShort($self->{data}); for(my $s=0;$s<$ssize;$s++){ my $objectStatsId=readUnsignedByte($self->{data}); my $objectStatsValue=undef; if($objectStatsId==31 || $objectStatsId==62 || $objectStatsId==82){ # name or guild or petSkin $objectStatsValue=readUTF($self->{data}); }else{ $objectStatsValue=readInt($self->{data}); } $rotmg->{'objects'}->{$objectId}->{'objectStats'}->{$objectStatsId}=$objectStatsValue; } }
Last edited by eth0nic; 04-24-2013 at 01:57 PM.
because people keep talking about changing the server/host the game will connect to ... here is how i do it ...
i use "mitmproxy" from mitmproxy - home
and use regular expressions to change the XML config file of the client ...
Code:mitmproxy --replace ":~u crossdomain\.xml:master-only:all" --replace ":~u \/char\/list:<DNS>.*?</DNS>:<DNS>127.0.0.1</DNS>"
CrazyJani (08-20-2018)
I fixed my packet UPDATE as I finally get the pets displayed, thank to you previous post stating the 3 states that change the read/write to an UTF or an INT.
I got this done :
now everything is displayed (tile/chars/pets) , even a TEXT of a random seller appears ..
but then nothing moves anymore ..
I get no PONG or NEW_TICK send by server...
Maybe there is something I missed, or an answer that should be sent to the server inresponse to something..
# INIT
17,HELLO,0
60,MAP_INFO,1
45,LOAD,0
36,CREATE,0
31,CREATE_SUCCESS,1
46,ACCOUNT_LIST,1
# CRITICAL
6,PING,1
16,PONG,0
62,NEW_TICK,1
7,MOVE,0
26,UPDATE,1
11,UPDATE_ACK,0
19,SHOOT,1
22,SHOOT_ACK,0
There is nothing missing ... except AOE_ACK but that is irrelevant in Nexus. Also what are you actually programming? A bot? A proxy? A standalone client? I can not read your mind. "but then nothing moves anymore" is not really a good explanation of a problem. Do you actually use nonblocking sockets? Using blocking sockets can get you into timing problems.
Please open a new thread "Writing my own bot." or something ... this thread is meant to be a place where I post relevant information - thanks. Thanks :-)
Last edited by eth0nic; 04-26-2013 at 07:43 AM.
Wrote a short TODO list for people interested in writing their own rotmg proxies.
https://www.mpgh.net/forum/654-realm-...tmg-proxy.html
if anyone knows what foo1 and foo2 are used for in the TRADE_START packet feel free to share the information ...
Code:sub decompile { my $self=shift; my $myItemsSize=readUnsignedShort($self->{'data'}); for(my $i=0;$i<$myItemsSize;$i++){ my $objectType=readInt($self->{'data'}); $self->{'myItems'}->{$i+8}=$objectType; my $foo1=readUnsignedShort($self->{'data'}); my $slotType=readUnsignedShort($self->{data}); my $foo2=readShort($self->{data}); #print $i . ' objectType:' . $objectType . ' foo1:' . $foo1 . ' slotType:' . $slotType . ' foo2:' . $foo2 . "\n"; } $self->{'name'}=readUTF($self->{'data'}); my $yourItemsSize=readUnsignedShort($self->{'data'}); for(my $i=0;$i<$yourItemsSize;$i++){ my $objectType=readInt($self->{'data'}); $self->{'yourItems'}->{$i+8}=$objectType; my $foo1=readUnsignedShort($self->{'data'}); my $slotType=readUnsignedShort($self->{data}); my $foo2=readShort($self->{data}); #print $i . ' objectType:' . $objectType . ' foo1:' . $foo1 . ' slotType:' . $slotType . ' foo2:' . $foo2 . "\n"; } print '[TRADESTART] myItemsSize:' . $myItemsSize . ' yourName:' . $self->{'name'} . ' yourItemsSize:' . $yourItemsSize . "\n"; }
---------- Post added at 07:01 AM ---------- Previous post was at 06:52 AM ----------
how to create accounts via plain html ...
https://www.mpgh.net/forum/654-realm-...ml-jquery.html
how to change passwords of thousands of mules via plain html / a multithreaded script ...
https://www.mpgh.net/forum/720-realm-...tten-perl.html
gorgor (05-06-2013)
I believe your packet is wrong.
Each of the items has 4 fields:
- item:int (objectType of the item, -1 if no object is specified)
- slotType:int (type of the slot, inventory is 0, other types can be: ring slot, robe slot, armor slot, tome slot, sword slot, wand slot, etc..)
- tradable:bool (True is the item is tradable, otherwise False (soulbound, empty slot, weapon/ability/armor/ring slots))
- included:bool (means whether the slot is selected to trade by default. It's always false, or at least I haven't seen an example of this (you can select empty slots or weapon/ability/armor/ring slots as well if you want, but there is no reason to)
Size of 1 item is int(4)+int(4)+bool(1)+bool(1)=10 bytes instead of 4+2+2+2=10 bytes
Code:class TradeItem: def __init__(self): pass def parseFromInput(self, data): self.item, data = readInt(data) self.slotType, data = readInt(data) self.tradeable, data = readBoolean(data) self.included, data = readBoolean(data) return data def writeToOutput(self, data): data = writeInt(self.item, data) data = writeInt(self.slotType, data) data = writeBoolean(self.tradeable, data) data = writeBoolean(self.included, data) return data def __repr__(self): return 'item=' + str(self.item) + ' slotType=' + str(self.slotType) \ + ' tradeable=' + str(self.tradeable) + ' included=' + str(self.included)
Last edited by DatCoder; 05-06-2013 at 09:49 AM.
eth0nic (05-06-2013)
I thought so ... but since I only use the iterator variable and objectType in the code of my trading bots that didn't really matter ;-) Thanks ... will fix!
---------- Post added at 10:00 AM ---------- Previous post was at 09:57 AM ----------
p.s.: while we are at it ... those are the slotType -> slotName mappings I use with my trading bots ... maybe they are helpful for some people that do not use the Objects.xml file with their bots ... (ignore the arrays ... they are only used for evaluating how valuable the inventory of a trade bot is)
---------- Post added at 10:04 AM ---------- Previous post was at 10:00 AM ----------Code:my $slotType2minTier={ 1=>[ 9, 10, 11], # sword 2=>[10, 11, 12], # dirk 3=>[ 9, 10, 11], # bow 4=>[ 4, 5, 6], # tome 5=>[ 4, 5, 6], # shield 6=>[10, 11, 12], # leather armor 7=>[10, 11, 12], # steel armor 8=>[10, 11, 12], # wand 9=>[ 4, 5, -1], # ring #10=> potions & health pots 11=>[ 4, 5, 6], # spells 12=>[ 4, 5, 6], # seals 13=>[ 4, 5, 6], # cloak 14=>[10, 11, 12], # robe 15=>[ 4, 5, 6], # quiver 16=>[ 4, 5, 6], # helm 17=>[ 9, 10, 11], # staff 18=>[ 4, 5, 6], # poison 19=>[ 4, 5, 6], # skull 20=>[ 4, 5, 6], # trap 21=>[ 4, 5, 6], # orb 22=>[ 4, 5, 6], # prism 23=>[ 4, 5, 6], #scepter 24=>[10, 11, 12], # katana 25=>[ 4, 5, 6], # star 26=>[ 0, -1, 1], # pet eggs ... common=0, uncommon=1, rare=2, legendary=3, };
p.s2.: What is boolIncluded good for? You send/get the bitmask of items to be traded in CHANGE_TRADE and TRADE_ACCEPTED anyway? Also what is slotType good for? You know that value from the Objects.xml file anyway? Those 2 fields are just a waste of bandwidth imho ...
p.s3.: update the packet code ... thanks again ...
Code:sub decompile { my $self=shift; my $myItemsSize=readUnsignedShort($self->{'data'}); #print 'myItems:' . "\n"; for(my $i=0;$i<$myItemsSize;$i++){ my $objectType=readInt($self->{'data'}); $self->{'myItems'}->{$i+8}=$objectType; my $slotType=readInt($self->{'data'}); my $boolTradeable=readBoolean($self->{'data'}); my $boolIncluded=readBoolean($self->{'data'}); #print $i . ' objectType:' . $objectType . ' slotType:' . $slotType . ' boolTradeable:' . $boolTradeable . ' boolIncluded:' . $boolIncluded . "\n"; } #print 'yourItems:' . "\n"; $self->{'name'}=readUTF($self->{'data'}); my $yourItemsSize=readUnsignedShort($self->{'data'}); for(my $i=0;$i<$yourItemsSize;$i++){ my $objectType=readInt($self->{'data'}); $self->{'yourItems'}->{$i+8}=$objectType; my $slotType=readInt($self->{'data'}); my $boolTradeable=readBoolean($self->{'data'}); my $boolIncluded=readBoolean($self->{'data'}); #print $i . ' objectType:' . $objectType . ' slotType:' . $slotType . ' boolTradeable:' . $boolTradeable . ' boolIncluded:' . $boolIncluded . "\n"; } print '[TRADESTART] myItemsSize:' . $myItemsSize . ' yourName:' . $self->{'name'} . ' yourItemsSize:' . $yourItemsSize . "\n"; die '$self->{\'data\'} not exhausted: ' . unpack('H*',$self->{'data'}) . "\n" if $self->{'data'}; }
Last edited by eth0nic; 05-06-2013 at 10:14 AM.
if anyone else is writing autonomous trading bots ... here is my current slotType->tier->price list ... might be useful as a template ... low/mid/high are potion classes items will trade for ... i.e. low=dex/spd/wis mid=vit/def/att high=life/mana
Code:my $slotType2itemPrice={ 1=>{'minPickup'=> 10, 9=>'1low', 10=>'1mid', 11=>'1high', 12=>'3high'}, # sword 2=>{'minPickup'=> 10, 9=>'1low', 10=>'1mid', 11=>'3mid', 12=>'2high'}, # daggers 3=>{'minPickup'=> 10, 9=>'1low', 10=>'1mid', 11=>'3mid', 12=>'1high'}, # bows 4=>{'minPickup'=> 5, 4=>'1low', 5=>'2mid', 6=>'2high'}, # tome 5=>{'minPickup'=> 5, 4=>'1low', 5=>'2mid', 6=>'3high'}, # shield 6=>{'minPickup'=> 10, 9=>'1low', 10=>'2low', 11=>'1mid', 12=>'3mid', 13=>'2high'}, # leather armor 7=>{'minPickup'=> 10, 9=>'1low', 10=>'1low', 11=>'1mid', 12=>'3mid', 13=>'2high'}, # heavy armor 8=>{'minPickup'=> 10, 9=>'1low', 10=>'2low', 11=>'2mid', 12=>'1high'}, # wands 9=>{'minPickup'=> 4, 4=>'1mid', 5=>'2mid'}, # rings / 5 = exa #10=>{}, # potions / statPots / treasures 11=>{'minPickup'=> 5, 4=>'1low', 5=>'2mid', 6=>'3high'}, # spells 12=>{'minPickup'=> 5, 4=>'1low', 5=>'1mid', 6=>'2high'}, # seals 13=>{'minPickup'=> 5, 4=>'1low', 5=>'2mid', 6=>'3high'}, # cloaks 14=>{'minPickup'=> 10, 9=>'1low', 10=>'1mid', 11=>'2mid', 12=>'1high', 13=>'3high'}, # robes 15=>{'minPickup'=> 5, 4=>'1low', 5=>'2mid', 6=>'3high'}, # quivers 16=>{'minPickup'=> 5, 4=>'1low', 5=>'2mid', 6=>'3high'}, # helms 17=>{'minPickup'=> 10, 9=>'1low', 10=>'1mid', 11=>'1high', 12=>'3high'}, # staffs 18=>{'minPickup'=> 5, 4=>'1low', 5=>'2mid', 6=>'3high'}, # poisons 19=>{'minPickup'=> 5, 4=>'1low', 5=>'2mid', 6=>'3high'}, # skulls 20=>{'minPickup'=> 5, 4=>'1low', 5=>'1low', 6=>'3mid'}, # traps 21=>{'minPickup'=> 5, 4=>'1low', 5=>'1mid', 6=>'3mid'}, # orbs 22=>{'minPickup'=> 5, 4=>'1low', 5=>'1mid', 6=>'3mid'}, # prisms 23=>{'minPickup'=> 5, 4=>'1low', 5=>'1mid', 6=>'1high'}, # scepters 24=>{'minPickup'=> 10, 9=>'1low', 10=>'1low', 11=>'1mid', 12=>'1high'}, # katanas 25=>{'minPickup'=> 5, 4=>'1low', 5=>'1mid', 6=>'1high'}, # stars 26=>{'minPickup'=> 5, 0=>'1low', 1=>'3high', 2=>'8high'}, # pet eggs ... common=0, uncommon=1, rare=2, legendary=3, };
Last edited by eth0nic; 05-08-2013 at 04:55 AM.
because some people seem to have a hard time parsing the muledump format .... here is the working regular epxression to do so ...
or the non-greedy version ...Code:#!/usr/bin/perl -w use strict; use warnings; my $foo = "'foobar\@foobar.com' : 'foobar', // Potion of Attack (2591)"; if($foo =~ /^\s*'([^\']+)'\s*\:\s*'([^\']+)'/){ my($guid,$password)=($1,$2); print $guid . ' / ' . $password . "\n"; }
Code:if($foo =~ /'(.+?)'.+?'(.+?)'/){
Last edited by eth0nic; 05-11-2013 at 10:47 AM.
Discussion about movement lag compensation code @ https://www.mpgh.net/forum/654-realm-...tion-code.html
Complete list of StatData types.
Code:MAX_HEALTH = 0 HEALTH = 1 SIZE = 2 MAX_MANA = 3 MANA = 4 XP_GOAL = 5 XP = 6 LEVEL = 7 INVENTORY = [i for i in range(8, 20)] ATT = 20 DEF = 21 SPD = 22 #23-25 missing from the client VIT = 26 WIS = 27 DEX = 28 CONDITION = 29 STARS = 30 NAME = 31 # Pascal string TEXTURE1 = 32 TEXTURE2 = 33 MERCHANT_TYPE = 34 REALM_GOLD = 35 PRICE = 36 BOOL_CAN_ENTER_PORTAL = 37 ACCOUNT_ID = 38 CURRENT_FAME = 39 MERCHANT_CURRENCY = 40 OBJECT_ORIENTATION = 41 MERCHANT_ITEMS_LEFT = 42 MERCHANT_MINUTES_LEFT = 43 MERCHANT_DISCOUNT = 44 MERCHANT_RANK_REQUIRED = 45 HEALTH_BONUS = 46 MANA_BONUS = 47 ATT_BONUS = 48 DEF_BONUS = 49 SPD_BONUS = 50 VIT_BONUS = 51 WIS_BONUS = 52 DEX_BONUS = 53 CONTAINER_OWNER = 54 NAMECHANGE_RANK_REQUIRED = 55 BOOL_NAME_REGISTERED = 56 FAME = 57 FAME_GOAL = 58 GLOWING_EFFECT = 59 SINK_DEPTH = 60 ALT_TEXTURE = 61 GUILD = 62 # Pascal string GUILD_RANK = 63 BREATH = 64 XP_BOOSTED = 65 XPBOOST_TIME_LEFT = 66 DROPRATE_TIME_LEFT = 67 LOOTTIER_TIME_LEFT = 68 HEALTHPOT_COUNT = 69 MANAPOT_COUNT = 70 BACKPACK = [i for i in range(71, 79)] BOOL_HAS_BACKPACK = 79 PET_SKIN_OBJECT_TYPE = 80 PET_ID = 81 PET_SKIN = 82 # Pascal string PET_TYPE = 83 PET_RARITY = 84 PET_MAX_LEVEL = 85 PET_UNK1 = 86 #Reserved for a pet feature, but not yet implemented (13.2) FOOD_SPENT_ON_SKILL1 = 87 FOOD_SPENT_ON_SKILL2 = 88 FOOD_SPENT_ON_SKILL3 = 89 PET_SKILL1_LEVEL = 90 PET_SKILL2_LEVEL = 91 PET_SKILL3_LEVEL = 92 PET_SKILL1_TYPE = 93 PET_SKILL2_TYPE = 94 PET_SKILL3_TPYE = 95
---------- Post added at 09:21 PM ---------- Previous post was at 09:19 PM ----------
Complete list of Slot types:
Code:ANY = 0 SWORD = 1 DAGGER = 2 BOW = 3 TOME = 4 SHIELD = 5 LEATHER_ARMOR = 6 ARMOR = 7 WAND = 8 ACCESSORY = 9 POTION = 10 SPELL = 11 HOLY_SEAL = 12 CLOAK = 13 ROBE = 14 QUIVER = 15 HELM = 16 STAFF = 17 POISON = 18 SKULL = 19 TRAP = 20 ORB = 21 PRISM = 22 SCEPTER = 23 SHURIKEN = 24
---------- Post added at 10:48 PM ---------- Previous post was at 09:21 PM ----------
Condition effects:
Code:DEAD = 1<<0 QUIET = 1<<1 WEAK = 1<<2 SLOWED = 1<<3 SICK = 1<<4 DAZED = 1<<5 STUNNED = 1<<6 BLIND = 1<<7 HALLUCIANTING = 1<<8 DRUNK = 1<<9 CONFUSED = 1<<10 STUN_IMMUNE = 1<<11 INVISIBLE = 1<<12 PARALYZED = 1<<13 SPEEDY = 1<<14 BLEEDING = 1<<15 NOT_USED = 1<<16 HEALING = 1<<17 DAMAGING = 1<<18 BERSERK = 1<<19 PAUSED = 1<<20 STASIS = 1<<21 STASIS_IMMUNE = 1<<22 INVINCIBLE = 1<<23 INVULNERABLE = 1<<24 ARMORED = 1<<25 ARMOR_BROKEN = 1<<26 HEXED = 1<<27 NINJA_SPEEDY = 1<<28
List of packet IDs with the new petyard/pet features:
Code:packetTypes[0x00] = FAILURE packetTypes[0x01] = CANCELTRADE packetTypes[0x03] = USEPORTAL packetTypes[0x04] = INVRESULT packetTypes[0x05] = JOINGUILD packetTypes[0x06] = PING packetTypes[0x07] = MOVE packetTypes[0x08] = GUILDINVITE packetTypes[0x09] = GLOBAL_NOTIFICATION packetTypes[0x0A] = SETCONDITION packetTypes[0x0B] = UPDATEACK packetTypes[0x0C] = TRADEDONE packetTypes[0x0D] = SHOOT packetTypes[0x0E] = GOTOACK packetTypes[0x0F] = CREATEGUILD packetTypes[0x10] = PONG packetTypes[0x11] = HELLO packetTypes[0x12] = TRADEACCEPTED packetTypes[0x13] = MULTISHOOT packetTypes[0x14] = NAMERESULT packetTypes[0x15] = REQUESTTRADE packetTypes[0x16] = SHOOTACK packetTypes[0x17] = TRADECHANGED packetTypes[0x18] = PLAYERHIT packetTypes[0x19] = TEXT packetTypes[0x1A] = UPDATE packetTypes[0x1B] = BUYRESULT packetTypes[0x1C] = PIC packetTypes[0x1E] = USEITEM packetTypes[0x1F] = CREATE_SUCCESS packetTypes[0x21] = CHOOSENAME packetTypes[0x22] = QUESTOBJID packetTypes[0x23] = INVDROP packetTypes[0x24] = CREATE packetTypes[0x25] = CHANGETRADE packetTypes[0x26] = PLAYERSHOOT packetTypes[0x27] = RECONNECT packetTypes[0x28] = CHANGEGUILDRANK packetTypes[0x29] = DEATH packetTypes[0x2A] = ESCAPE packetTypes[0x2C] = PLAYSOUND packetTypes[0x2D] = LOAD packetTypes[0x2E] = ACCOUNTLIST packetTypes[0x2F] = DAMAGE packetTypes[0x30] = CHECKCREDITS packetTypes[0x31] = TELEPORT packetTypes[0x32] = BUY packetTypes[0x33] = SQUAREHIT packetTypes[0x34] = GOTO packetTypes[0x35] = EDITACCOUNTLIST packetTypes[0x37] = CLIENTSTAT_FILE packetTypes[0x38] = SHOW_EFFECT packetTypes[0x39] = ACCEPTTRADE packetTypes[0x3A] = CREATEGUILDRESULT packetTypes[0x3B] = AOEACK packetTypes[0x3C] = MAPINFO packetTypes[0x3D] = TRADEREQUESTED packetTypes[0x3E] = NEW_TICK packetTypes[0x3F] = NOTIFICATION packetTypes[0x40] = GROUNDDAMAGE packetTypes[0x41] = INVSWAP packetTypes[0x42] = OTHERHIT packetTypes[0x43] = TRADESTART packetTypes[0x44] = AOE packetTypes[0x45] = PLAYERTEXT packetTypes[0x4A] = ALLYSHOOT packetTypes[0x4B] = CLIENTSTAT packetTypes[0x4C] = ENEMYHIT packetTypes[0x4D] = INVITEDTOGUILD packetTypes[0x4E] = GUILDREMOVE packetTypes[0x4F] = RESKIN packetTypes[0x50] = PETYARDCOMMAND #yard upgrade, pet feed, pet fuse commands packetTypes[0x51] = PETCOMMAND #follow, unfollow, release commands packetTypes[0x52] = PETFOLLOWACK #your pet is following you / stopped following you packetTypes[0x53] = PETNEWABILITY #pet got a new ability packetTypes[0x54] = PETYARDUPGRADED #petyard got upgraded, do you want to leave? packetTypes[0x55] = FUSERESULT #2 pets got removed, and a new one was added packetTypes[0x56] = PETRELEASED #a pet got removed packetTypes[0x57] = EGGHATCHED #a new pet was added
Alde. (02-22-2014),[MPGH]Beex (08-07-2013),CrazyJani (03-07-2014),nilly (07-31-2013)