Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package extremetk.network.send;
- import java.nio.ByteBuffer;
- import java.nio.ByteOrder;
- import extremetk.TKMain;
- import extremetk.dynamics.TKDynamicPlayer;
- import extremetk.items.TKItemEquipment;
- import extremetk.network.TKPacket;
- public class TKPacketSendLegend extends TKPacket{
- public TKPacketSendLegend(TKMain main, TKDynamicPlayer target) {
- super(main);
- this.encryptType = TKPacket.encryptUser;
- this.command = 0x39;
- int buflen = 299;
- buflen += target.getPlayerDisplayClassName().length();
- buflen += equipLen(target.weapon);
- buflen += equipLen(target.armor);
- buflen += equipLen(target.head);
- buflen += equipLen(target.lhand);
- buflen += equipLen(target.rhand);
- buflen += equipLen(target.headacc);
- buflen += equipLen(target.feet);
- buflen += equipLen(target.coat);
- buflen += equipLen(target.shield);
- buflen += equipLen(target.faceacc);
- buflen += equipLen(target.subacc1);
- buflen += equipLen(target.subacc2);
- buflen += equipLen(target.mantle);
- buflen += equipLen(target.necklace);
- buflen += 2;
- buflen += target.clan.length();
- buflen += target.clanTitle.length();
- buflen += target.title.length();
- buflen += target.legend.totalDataSize();
- ByteBuffer bb = ByteBuffer.allocate(buflen); //FIXME optimize and fix len for legends
- bb.order(ByteOrder.BIG_ENDIAN);
- //bb.putInt(0x10050400); //byte 1 AC (signed), byte 2 dam, byte 3 hit, byte 4 unknown - 0, seems to mangle packet
- bb.put(target.getAC()); //AC (signed byte!)
- bb.put((byte)target.getDam()); //dam
- bb.put((byte)target.getHit()); //hit
- bb.put((byte)target.clan.length());
- bb.put(target.clan.getBytes());
- bb.put((byte)target.clanTitle.length());
- bb.put(target.clanTitle.getBytes());
- bb.put((byte)target.title.length());
- bb.put(target.title.getBytes());
- bb.put((byte)0); //this is actually spouse
- //bb.put(target.clan.getBytes()); //this is actually "Spouse: <name>"
- if(target.canGroup) { bb.put((byte)0x01); } else { bb.put((byte)0x0); }
- bb.putInt((int)Math.max(0, target.nextlevel - target.experience)); //TNL
- bb.put((byte)target.getPlayerDisplayClassName().length());
- bb.put(target.getPlayerDisplayClassName().getBytes());
- //01 ** weapon
- //02 ** armor
- //03 ** shield
- //04 ** head
- //05 ** lhand
- //06 ** rhand
- //07 subacc1
- //08 subacc2
- //09 faceacc
- //10 crown
- //11 mantle
- //12 ** coat
- //13 ** feet
- //14 headacc
- putEquip(bb, target.weapon);
- putEquip(bb, target.armor);
- putEquip(bb, target.shield);
- putEquip(bb, target.head);
- putEquip(bb, target.lhand);
- putEquip(bb, target.rhand);
- putEquip(bb, target.subacc1);
- putEquip(bb, target.feet);
- putEquip(bb, target.faceacc);
- putEquip(bb, target.necklace);
- putEquip(bb, target.coat);
- putEquip(bb, target.subacc2);
- putEquip(bb, target.mantle);
- putEquip(bb, target.headacc);
- if(target.canExchange) { bb.put((byte)0x01); } else { bb.put((byte)0x00); }
- bb.put((byte)0x00); //don't know
- bb.put(target.legend.getData());
- this.packetData = bb.array();
- }
- private int equipLen(TKItemEquipment equip) {
- if(equip == null) return 10;
- return 10+equip.itemName.length()*2;
- }
- private void putEquip(ByteBuffer bb, TKItemEquipment equip) {
- //bb.put(sep);\
- short gfx;
- String ename;
- int durability;
- byte pal = 0;
- if(equip == null) {
- gfx = 0x1000;
- pal = 0;
- ename = "";
- durability = 0x00000000;
- } else {
- gfx = (short)equip.itemIcon;
- pal = (byte)equip.itemPal;
- ename = equip.itemName;
- durability = equip.durability;
- }
- bb.putShort((short)gfx);
- bb.put((byte)pal); //unknown - not always 0
- bb.put((byte)ename.length());
- bb.put(ename.getBytes());
- bb.put((byte)ename.length());
- bb.put(ename.getBytes());
- bb.putInt(durability);
- bb.put((byte)0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement