Thread of relevant information.

Posts 1630 of 118 · Page 2 of 8
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
Quote Originally Posted by eth0nic View Post
Because so many people talk about how packet ids have changed ...
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 ?
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;
  }
 }
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>"
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 :-)
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 ...

http://www.mpgh.net/forum/654-realm-...ml-jquery.html

how to change passwords of thousands of mules via plain html / a multithreaded script ...

http://www.mpgh.net/forum/720-realm-...tten-perl.html
Quote Originally Posted by eth0nic View Post
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";
}
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)
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)

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, 
};
---------- Post added at 10:04 AM ---------- Previous post was at 10:00 AM ----------

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'};
}
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,      
};
because some people seem to have a hard time parsing the muledump format .... here is the working regular epxression to do so ...

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";
}
or the non-greedy version ...

Code:
if($foo =~ /'(.+?)'.+?'(.+?)'/){
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
Posts 1630 of 118 · Page 2 of 8

Post a Reply

Similar Threads

Tags for this Thread

None

Need help?