My Update Block:
Code:
if(!updateRequired && !chatTextUpdateRequired) return ; // nothing required
int updateMask = 0;
if(chatTextUpdateRequired) updateMask |= 0x80;
if(faceNPCupdate) updateMask |= 1;
if(animationRequest != -1) updateMask |= 8;
if(appearanceUpdateRequired) updateMask |= 0x10;
if(hitUpdateRequired) updateMask |= 0x20;
if(dirUpdateRequired) updateMask |= 0x40;
if(animationRequest != -1) updateMask |= 8;
if(updateMask >= 0x100) {
// byte isn't sufficient
updateMask |= 0x40; // indication for the client that updateMask is stored in a word
str.writeByte(updateMask & 0xFF);
str.writeByte(updateMask >> 8);
}
else str.writeByte(updateMask);
// now writing the various update blocks itself - note that their order crucial
if(animationRequest != -1) appendAnimationRequest(str);
if(chatTextUpdateRequired) appendPlayerChatText(str);
if(faceNPCupdate) appendFaceNPCUpdate(str);
if(appearanceUpdateRequired) appendPlayerAppearance(str);
if(hitUpdateRequired) appendHitUpdate(str);
if(dirUpdateRequired) appendDirUpdate(str);
Animation methods:
Code:
public void startAnimation(int animIdx)
{
animationRequest = animIdx;
animationWaitCycles = 0;
}
public void appendAnimationRequest(stream str)
{
str.writeWordBigEndian((animationRequest==-1) ? 65535 : animationRequest);
str.writeByteC(animationWaitCycles);
}
EXAMPLE:
startAnimation(811);
does a never ending loop of the animation #811
Can anyone help? ):