public void updateNPC(Player plr, Stream str) {
// synchronized(plr) {
updateBlock.currentOffset = 0;
str.createFrameVarSizeWord(65);
str.initBitAccess();
str.writeBits(8, plr.npcListSize);
int size = plr.npcListSize;
plr.npcListSize = 0;
for (int i = 0; i < size; i++) {
if (plr.RebuildNPCList == false && plr.withinDistance(plr.npcList[i]) == true) {
plr.npcList[i].updateNPCMovement(str);
plr.npcList[i].appendNPCUpdateBlock(updateBlock);
plr.npcList[plr.npcListSize++] = plr.npcList[i];
} else {
int id = plr.npcList[i].npcId;
plr.npcInListBitmap[id >> 3] &= ~(1 << (id & 7));
str.writeBits(1, 1);
str.writeBits(2, 3);
}
}
for (int i = 0; i < NPCHandler.maxNPCs; i++) {
if (NPCHandler.npcs[i] != null) {
int id = NPCHandler.npcs[i].npcId;
if (plr.RebuildNPCList == false && (plr.npcInListBitmap[id >> 3] & (1 << (id & 7))) != 0) {
} else if (plr.withinDistance(NPCHandler.npcs[i]) == false) {
} else {
plr.addNewNPC(NPCHandler.npcs[i], str, updateBlock);
}
}
}
plr.RebuildNPCList = false;
if (updateBlock.currentOffset > 0) {
str.writeBits(14, 16383);
str.finishBitAccess();
str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0);
} else {
str.finishBitAccess();
}
str.endFrameVarSizeWord();
// }
}
private Stream updateBlock = new Stream(new byte[Config.BUFFER_SIZE]);
public void updatePlayer(Player plr, Stream str) {
// synchronized(plr) {
updateBlock.currentOffset = 0;
if (updateRunning && !updateAnnounced) {
str.createFrame(114);
str.writeWordBigEndian(updateSeconds * 50 / 30);
}
plr.updateThisPlayerMovement(str);
boolean saveChatTextUpdate = plr.isChatTextUpdateRequired();
plr.setChatTextUpdateRequired(false);
plr.appendPlayerUpdateBlock(updateBlock);
plr.setChatTextUpdateRequired(saveChatTextUpdate);
str.writeBits(8, plr.playerListSize);
int size = plr.playerListSize;
if (size >= 79)
size = 79;
plr.playerListSize = 0;
for (int i = 0; i < size; i++) {
if (!plr.didTeleport && !plr.playerList[i].didTeleport && plr.withinDistance(plr.playerList[i])) {
plr.playerList[i].updatePlayerMovement(str);
plr.playerList[i].appendPlayerUpdateBlock(updateBlock);
plr.playerList[plr.playerListSize++] = plr.playerList[i];
} else {
int id = plr.playerList[i].playerId;
plr.playerInListBitmap[id >> 3] &= ~(1 << (id & 7));
str.writeBits(1, 1);
str.writeBits(2, 3);
}
}
for (int i = 0; i < Config.MAX_PLAYERS; i++) {
if (players[i] == null || !players[i].isActive || players[i] == plr)
continue;
int id = players[i].playerId;
if ((plr.playerInListBitmap[id >> 3] & (1 << (id & 7))) != 0)
continue;
if (!plr.withinDistance(players[i]))
continue;
plr.addNewPlayer(players[i], str, updateBlock);
}
if (updateBlock.currentOffset > 0) {
str.writeBits(11, 2047);
str.finishBitAccess();
str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0);
} else
str.finishBitAccess();
str.endFrameVarSizeWord();
// }
}