Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.79 KB | None | 0 0
  1. package extremetk.network.send;
  2.  
  3. import java.nio.ByteBuffer;
  4. import java.nio.ByteOrder;
  5.  
  6. import extremetk.TKMain;
  7. import extremetk.dynamics.TKDynamicPlayer;
  8. import extremetk.items.TKItemEquipment;
  9. import extremetk.network.TKPacket;
  10.  
  11. public class TKPacketSendLegend extends TKPacket{
  12.     public TKPacketSendLegend(TKMain main, TKDynamicPlayer target) {
  13.         super(main);
  14.         this.encryptType = TKPacket.encryptUser;
  15.         this.command = 0x39;
  16.         int buflen = 299;
  17.         buflen += target.getPlayerDisplayClassName().length();
  18.         buflen += equipLen(target.weapon);
  19.         buflen += equipLen(target.armor);
  20.         buflen += equipLen(target.head);
  21.         buflen += equipLen(target.lhand);
  22.         buflen += equipLen(target.rhand);
  23.         buflen += equipLen(target.headacc);
  24.         buflen += equipLen(target.feet);
  25.         buflen += equipLen(target.coat);
  26.         buflen += equipLen(target.shield);
  27.         buflen += equipLen(target.faceacc);
  28.         buflen += equipLen(target.subacc1);
  29.         buflen += equipLen(target.subacc2);
  30.         buflen += equipLen(target.mantle);
  31.         buflen += equipLen(target.necklace);
  32.         buflen += 2;
  33.         buflen += target.clan.length();
  34.         buflen += target.clanTitle.length();
  35.         buflen += target.title.length();
  36.         buflen += target.legend.totalDataSize();
  37.        
  38.         ByteBuffer bb = ByteBuffer.allocate(buflen); //FIXME optimize and fix len for legends
  39.         bb.order(ByteOrder.BIG_ENDIAN);
  40.         //bb.putInt(0x10050400); //byte 1 AC (signed), byte 2 dam, byte 3 hit, byte 4 unknown - 0, seems to mangle packet
  41.         bb.put(target.getAC()); //AC (signed byte!)
  42.         bb.put((byte)target.getDam()); //dam
  43.         bb.put((byte)target.getHit()); //hit
  44.         bb.put((byte)target.clan.length());
  45.         bb.put(target.clan.getBytes());
  46.         bb.put((byte)target.clanTitle.length());
  47.         bb.put(target.clanTitle.getBytes());
  48.         bb.put((byte)target.title.length());
  49.         bb.put(target.title.getBytes());
  50.         bb.put((byte)0); //this is actually spouse
  51.         //bb.put(target.clan.getBytes()); //this is actually "Spouse: <name>"
  52.         if(target.canGroup) { bb.put((byte)0x01); } else { bb.put((byte)0x0); }
  53.         bb.putInt((int)Math.max(0, target.nextlevel - target.experience)); //TNL
  54.         bb.put((byte)target.getPlayerDisplayClassName().length());
  55.         bb.put(target.getPlayerDisplayClassName().getBytes());
  56.         //01 ** weapon
  57.         //02 ** armor
  58.         //03 ** shield
  59.         //04 ** head
  60.         //05 ** lhand
  61.         //06 ** rhand
  62.         //07 subacc1
  63.         //08 subacc2
  64.         //09 faceacc
  65.         //10 crown
  66.         //11 mantle
  67.         //12 ** coat
  68.         //13 ** feet
  69.         //14 headacc
  70.        
  71.         putEquip(bb, target.weapon);
  72.         putEquip(bb, target.armor);
  73.         putEquip(bb, target.shield);
  74.         putEquip(bb, target.head);
  75.         putEquip(bb, target.lhand);
  76.         putEquip(bb, target.rhand);
  77.         putEquip(bb, target.subacc1);
  78.         putEquip(bb, target.feet);
  79.         putEquip(bb, target.faceacc);
  80.         putEquip(bb, target.necklace);
  81.         putEquip(bb, target.coat);
  82.         putEquip(bb, target.subacc2);
  83.         putEquip(bb, target.mantle);
  84.         putEquip(bb, target.headacc);
  85.        
  86.         if(target.canExchange) { bb.put((byte)0x01); } else { bb.put((byte)0x00); }
  87.         bb.put((byte)0x00); //don't know
  88.        
  89.         bb.put(target.legend.getData());
  90.        
  91.         this.packetData = bb.array();
  92.     }
  93.    
  94.     private int equipLen(TKItemEquipment equip) {
  95.         if(equip == null) return 10;
  96.         return 10+equip.itemName.length()*2;
  97.     }
  98.    
  99.     private void putEquip(ByteBuffer bb, TKItemEquipment equip) {
  100.         //bb.put(sep);\
  101.         short gfx;
  102.         String ename;
  103.         int durability;
  104.         byte pal = 0;
  105.        
  106.         if(equip == null) {
  107.             gfx = 0x1000;
  108.             pal = 0;
  109.             ename = "";
  110.             durability = 0x00000000;
  111.         } else {
  112.             gfx = (short)equip.itemIcon;
  113.             pal = (byte)equip.itemPal;
  114.             ename = equip.itemName;
  115.             durability = equip.durability;
  116.         }
  117.        
  118.         bb.putShort((short)gfx);
  119.         bb.put((byte)pal); //unknown - not always 0
  120.         bb.put((byte)ename.length());
  121.         bb.put(ename.getBytes());
  122.         bb.put((byte)ename.length());
  123.         bb.put(ename.getBytes());
  124.         bb.putInt(durability);
  125.         bb.put((byte)0);
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement