Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.39 KB | None | 0 0
  1. package org.lazaro.rt5e.network.protocol.world;
  2.  
  3. import org.lazaro.rt5e.Context;
  4. import org.lazaro.rt5e.logic.Entity;
  5. import org.lazaro.rt5e.logic.mask.Hit;
  6. import org.lazaro.rt5e.logic.mask.Mask;
  7. import org.lazaro.rt5e.logic.npc.NPC;
  8. import org.lazaro.rt5e.logic.player.Player;
  9. import org.lazaro.rt5e.logic.utility.WorldUpdater;
  10. import org.lazaro.rt5e.network.Packet;
  11. import org.lazaro.rt5e.network.PacketBuilder;
  12.  
  13. import java.util.Iterator;
  14.  
  15. /**
  16.  * @author Lazaro
  17.  */
  18. public class GNP613 implements WorldUpdater {
  19.     private void doAnimation(NPC npc, PacketBuilder pb) {
  20.         pb.putLEShort(npc.getMasks().getAnimationId()).putByteA(npc.getMasks().getAnimationDelay());
  21.     }
  22.  
  23.     private void doChat(NPC npc, PacketBuilder pb) {
  24.         pb.putString(npc.getMasks().getChat().getText());
  25.     }
  26.  
  27.     private void doFaceEntity(NPC npc, PacketBuilder pb) {
  28.         pb.putShortA(npc.getMasks().getFaceEntity().getId());
  29.     }
  30.  
  31.     private void doGraphics(NPC npc, PacketBuilder pb) {
  32.         pb.putShortA(npc.getMasks().getGraphicsId()).putInt1(npc.getMasks().getGraphicsDelay()).putByteA(npc.getMasks().getGraphicsHeight());
  33.     }
  34.  
  35.     private void doGraphics2(NPC npc, PacketBuilder pb) {
  36.         pb.putShort(npc.getMasks().getGraphicsId2()).putInt1(npc.getMasks().getGraphicsDelay2()).putByteC(npc.getMasks().getGraphicsHeight2());
  37.     }
  38.  
  39.     private void doHit(NPC npc, PacketBuilder pb) {
  40.         Hit hit = npc.getMasks().getHit();
  41.         int hpRatio = npc.getHP() * 255 / npc.getMaxHP();
  42.         pb.putSmart(hit.getDamage()).putByteA(hit.getType()).putByteA(hpRatio);
  43.     }
  44.  
  45.     private void doHit2(NPC npc, PacketBuilder pb) {
  46.         Hit hit = npc.getMasks().getHit2();
  47.         pb.putSmart(hit.getDamage()).putByte(hit.getType());
  48.     }
  49.  
  50.     public Packet doMaskBlock(Entity entity) {
  51.         NPC npc = (NPC) entity;
  52.         PacketBuilder pb = new PacketBuilder();
  53.         int mask = 0;
  54.         if (npc.getMasks().requiresUpdate(Mask.MaskType.ANIMATION)) {
  55.             mask |= 0x4;
  56.         }
  57.         if (npc.getMasks().requiresUpdate(Mask.MaskType.HIT)) {
  58.             mask |= 0x8;
  59.         }
  60.         if (npc.getMasks().requiresUpdate(Mask.MaskType.FACE_ENTITY)) {
  61.             mask |= 0x20;
  62.         }
  63.         if (npc.getMasks().requiresUpdate(Mask.MaskType.HIT2)) {
  64.             mask |= 0x400;
  65.         }
  66.         if (npc.getMasks().requiresUpdate(Mask.MaskType.GRAPHICS)) {
  67.             mask |= 0x10;
  68.         }
  69.         if (npc.getMasks().requiresUpdate(Mask.MaskType.GRAPHICS2)) {
  70.             mask |= 0x2000;
  71.         }
  72.         if (npc.getMasks().requiresUpdate(Mask.MaskType.CHAT)) {
  73.             mask |= 0x80;
  74.         }
  75.         if (mask >= 0x100) {
  76.             mask |= 0x1;
  77.             pb.putByte(mask & 0xff).putByte(mask >> 8);
  78.         } else {
  79.             pb.putByte(mask);
  80.         }
  81.         if (npc.getMasks().requiresUpdate(Mask.MaskType.ANIMATION)) {
  82.             doAnimation(npc, pb);
  83.         }
  84.         if (npc.getMasks().requiresUpdate(Mask.MaskType.HIT)) {
  85.             doHit(npc, pb);
  86.         }
  87.         if (npc.getMasks().requiresUpdate(Mask.MaskType.FACE_ENTITY)) {
  88.             doFaceEntity(npc, pb);
  89.         }
  90.         if (npc.getMasks().requiresUpdate(Mask.MaskType.HIT2)) {
  91.             doHit2(npc, pb);
  92.         }
  93.         if (npc.getMasks().requiresUpdate(Mask.MaskType.GRAPHICS)) {
  94.             doGraphics(npc, pb);
  95.         }
  96.         if (npc.getMasks().requiresUpdate(Mask.MaskType.GRAPHICS2)) {
  97.             doGraphics2(npc, pb);
  98.         }
  99.         if (npc.getMasks().requiresUpdate(Mask.MaskType.CHAT)) {
  100.             doChat(npc, pb);
  101.         }
  102.         return pb.toPacket();
  103.     }
  104.  
  105.     private void registerNPC(Player player, NPC npc, PacketBuilder pb) {
  106.         int x = npc.getLocation().getX() - player.getLocation().getX();
  107.         int y = npc.getLocation().getY() - player.getLocation().getY();
  108.         if (x < 0)
  109.             x += 32;
  110.         if (y < 0)
  111.             y += 32;
  112.         pb.putBits(15, npc.getIndex());
  113.         pb.putBits(14, npc.getType());
  114.         pb.putBits(1, 1);
  115.         pb.putBits(5, y);
  116.         pb.putBits(5, x);
  117.         pb.putBits(1, npc.getMasks().requiresUpdate() ? 1 : 0);
  118.         pb.putBits(2, npc.getLocation().getZ());
  119.         pb.putBits(3, npc.getFaceDirection());
  120.         player.getLocalNPCs().add(npc);
  121.     }
  122.  
  123.     public void update(Player player) {
  124.         PacketBuilder pb = new PacketBuilder(6, Packet.Type.VAR_SHORT);
  125.         pb.putBits(8, player.getLocalNPCs().size());
  126.         for (Iterator<NPC> it = player.getLocalNPCs().iterator(); it.hasNext();) {
  127.             NPC npc = it.next();
  128.             if (!npc.exists() || npc.isTeleporting() || !player.getLocation().withinRange(npc.getLocation())) {
  129.                 pb.putBits(1, 1);
  130.                 pb.putBits(2, 3);
  131.                 it.remove();
  132.             } else {
  133.                 updateNPC(npc, pb);
  134.             }
  135.         }
  136.         for (NPC npc : Context.getWorld().getLocalNPCs(player.getLocation())) {
  137.             if (player.getLocalNPCs().size() >= 255) {
  138.                 break;
  139.             }
  140.             if (player.getLocalNPCs().contains(npc) || !npc.exists() || player.isTeleporting() || npc.isTeleporting()) {
  141.                 continue;
  142.             }
  143.             registerNPC(player, npc, pb);
  144.         }
  145.         pb.putBits(15, 32767);
  146.         for (NPC npc : player.getLocalNPCs()) {
  147.             if (npc.getMasks().requiresUpdate()) {
  148.                 pb.put(npc.getCachedMaskBlock().getBytes());
  149.             }
  150.         }
  151.         player.getConnection().write(pb.toPacket());
  152.     }
  153.  
  154.     private void updateNPC(NPC npc, PacketBuilder pb) {
  155.         if (npc.getDirection().getDirection() == null) {
  156.             if (npc.getMasks().requiresUpdate()) {
  157.                 pb.putBits(1, 1);
  158.                 pb.putBits(2, 0);
  159.             } else {
  160.                 pb.putBits(1, 0);
  161.             }
  162.         } else {
  163.             pb.putBits(1, 1);
  164.             if (npc.getDirection().getSecondDirection() == null) {
  165.                 pb.putBits(2, 1);
  166.                 pb.putBits(3, npc.getDirection().getDirection().npcIntValue());
  167.             } else {
  168.                 pb.putBits(2, 1);
  169.                 pb.putBits(1, 1);
  170.                 pb.putBits(3, npc.getDirection().getDirection().npcIntValue());
  171.                 pb.putBits(3, npc.getDirection().getSecondDirection().npcIntValue());
  172.             }
  173.             pb.putBits(1, npc.getMasks().requiresUpdate() ? 1 : 0);
  174.         }
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement