For some reason the client uses some bullshit like strings...
Packet 134 is the real skill packet, used to send a skill to the client. Of course my naming is shit because I have not refactored my client in any way. This is for 602 skilltab. This can also save you some networking, sending strings are far more expensive than integers.
Code:
private final int[] boxSkillIndexes = {0,3,14,2,16,13,1,15,10,4,17,7,5,12,11,6,9,8,20,18,19,21,22,23,24};
protected String setMessage(final int boxId) {
final int skillId = boxSkillIndexes[boxId];
final int level = currentStats[skillId];
final int realLevel = maxStats[skillId];
final int experience = currentExp[skillId];
final int nextLevelExp = getXPForLevel(level + 1);
final int remainder = nextLevelExp - experience;
return ((realLevel > 98 && skillId != 24) || realLevel > 119) ?
// Level is maxed (99 normal stats, 120 dung) so we just need to display experience.
"Experience: " + NumberFormat.getIntegerInstance().format(experience) :
// There are higher achievable levels so we must display:
// Experience, Levelup remainder, next level.
"Experience: " + NumberFormat.getIntegerInstance().format(experience) + "\\n" +
"Remainder: " + NumberFormat.getIntegerInstance().format(remainder) + "\\n" +
"Next Level: " + (level + 1);
}
Orbs:
Code:
int currentHP = currentStats[3];
int maxHP = maxStats[3];
Code:
int currentPray = currentStats[5];
int maxPray = maxStats[5];
Same for summoning, but Idk skill Id
If you need the packet decoding.
Code:
case 134:
int skillId = inStream.readUnsignedByte();
int level = inStream.method439();
int experience = inStream.readUnsignedByte();
int xp = currentExp[skillId];
currentExp[skillId] = level;
currentStats[skillId] = experience;
maxStats[skillId] = 1;
xpCounter += currentExp[skillId] - xp;
expAdded = currentExp[skillId] - xp;
for (int k20 = 0; k20 < 98; k20++)
if (level >= anIntArray1019[k20])
maxStats[skillId] = k20 + 2;
pktType = -1;
return true;