Check your code about player update equipment and see if it actually sets the npc correctly instead of just removing head.
|
Not sure the server base I'll assume mayhem since it's in the name of the file structure.
File structure is basically:
src/com/mayhem/rs2/entity/player/Player.java
src/com/mayhem/rs2/entity/player/net/in/command/impl/DeveloperCommand.java
So basically when I useit sets my npcAppearanceId, and it updates it.Code:::pnpc
However the client then sets my body to the normal body and hides my head
So it seems to set it correctly, and the updateFlags get set but there is a lot to this base and this difficult to track downCode:case "pnpc": short npc = parser.nextShort(); NpcDefinition npcDef = GameDefinitionLoader.getNpcDefinition(npc); if (npcDef == null && npc != -1) { player.send(new SendMessage("The npc id (" + npc + ") does not exist.")); return true; } player.setNpcAppearanceId(npc); player.setAppearanceUpdateRequired(true); if (npc == -1) { player.getAnimations().setWalkEmote(819); player.getAnimations().setRunEmote(824); player.getAnimations().setStandEmote(808); player.getAnimations().setTurn180Emote(820); player.getAnimations().setTurn90CCWEmote(822); player.getAnimations().setTurn90CWEmote(821); player.send(new SendMessage("You reset your appearance.")); } else { player.getAnimations().setWalkEmote(npcDef.getWalkAnimation()); player.getAnimations().setRunEmote(npcDef.getWalkAnimation()); player.getAnimations().setStandEmote(npcDef.getStandAnimation()); player.getAnimations().setTurn180Emote(npcDef.getTurn180Animation()); player.getAnimations().setTurn90CCWEmote(npcDef.getTurn90CCWAnimation()); player.getAnimations().setTurn90CWEmote(npcDef.getTurn90CWAnimation()); player.setNpcAppearanceId(npc); player.setAppearanceUpdateRequired(true); player.send(new SendMessage("You have turned into: \'" + npcDef.getName() + "\' (Id: " + npc + ", Size: " + npcDef.getSize() + ").")); } return true;
If I comment out all the animations I still get left with an empty head but i'm not an npcCode:public void setNpcAppearanceId(short npcAppearanceId) { this.npcAppearanceId = npcAppearanceId; System.out.println(""+this.npcAppearanceId); }
animations seem fine but I don't look like an npc.
I've tried many different npcs - does anyone know why this is happening?
Check your code about player update equipment and see if it actually sets the npc correctly instead of just removing head.
interesting response, because of your response I checked and noticed when I equip or remove items if i'm transformed the appearance doesn't change my equipment still looks equipped.
Which caused me to look deeper in to that
Which caused me to findCode:public boolean isUpdateRequired() { return set.get(3); }
I'm still digging but nothing makes me think this shouldn't workCode:public PlayerUpdateFlags(Player player) { UpdateFlags u = player.getUpdateFlags(); set.set(0, player.isVisible()); set.set(1, player.isChatUpdateRequired()); set.set(2, player.isAppearanceUpdateRequired()); set.set(3, u.isUpdateRequired()); set.set(4, u.isForceChatUpdate()); set.set(5, u.isGraphicsUpdateRequired()); set.set(6, u.isAnimationUpdateRequired()); set.set(7, u.isHitUpdate()); set.set(8, u.isHitUpdate2()); set.set(9, u.isEntityFaceUpdate()); set.set(10, u.isFaceToDirection()); set.set(11, player.needsPlacement()); set.set(12, player.isResetMovementQueue()); set.set(13, u.isForceMovement()); team = getTeam(player); x = ((short) player.getLocation().getX()); y = ((short) player.getLocation().getY()); z = ((short) player.getLocation().getZ()); regionX = ((short) player.getCurrentRegion().getX()); regionY = ((short) player.getCurrentRegion().getY()); regionZ = ((short) player.getCurrentRegion().getZ()); usernameToLong = player.getUsernameToLong(); playerTitle = player.getPlayerTitle(); set.get(0); if (set.get(3)) { if (set.get(6)) { animationId = ((short) u.getAnimationId()); animationDelay = ((byte) u.getAnimationDelay()); } else { animationId = 0; animationDelay = 0; } if (set.get(5)) { graphicId = ((short) u.getGraphic().getId()); graphicHeight = ((byte) u.getGraphic().getHeight()); graphicDelay = ((byte) u.getGraphic().getDelay()); } else { graphicId = 0; graphicHeight = 0; graphicDelay = 0; } if (set.get(10)) { faceX = ((short) u.getFace().getX()); faceY = ((short) u.getFace().getY()); } else { faceX = 0; faceY = 0; } if ((set.get(7)) || (set.get(8))) { hp = ((byte) player.getLevels()[3]); maxHP = ((byte) player.getMaxLevels()[3]); damage = ((byte) u.getDamage()); damage2 = ((byte) u.getDamage2()); hitType = ((byte) u.getHitType()); hitType2 = ((byte) u.getHitType2()); hitUpdateCombatType = (byte) u.getHitUpdateCombatType(); hitUpdateCombatType2 = (byte) u.getHitUpdateCombatType2(); } else { hp = 0; maxHP = 0; damage = 0; damage2 = 0; hitType = 0; hitType2 = 0; hitUpdateCombatType = 0; hitUpdateCombatType2 = 0; } if (set.get(4)) forceChatMessage = u.getForceChatMessage(); else { forceChatMessage = null; } if (set.get(1)) { chatText = player.getChatText(); chatColor = player.getChatColor(); chatEffects = player.getChatEffects(); } else { chatText = null; chatColor = 0; chatEffects = 0; } entityFaceIndex = u.getEntityFaceIndex(); if (set.get(13)) { forceStart = player.getMovementHandler().getForceStart(); forceEnd = player.getMovementHandler().getForceEnd(); forceSpeed1 = (short) player.getMovementHandler().getForceSpeed1(); forceSpeed2 = (short) player.getMovementHandler().getForceSpeed2(); forceDirection = (byte) player.getMovementHandler().getForceDirection(); } else { forceStart = null; forceEnd = null; forceSpeed1 = 0; forceSpeed2 = 0; forceDirection = 0; } } else { animationId = 0; animationDelay = 0; graphicId = 0; graphicHeight = 0; graphicDelay = 0; forceStart = null; forceEnd = null; forceSpeed1 = 0; forceSpeed2 = 0; forceDirection = 0; faceX = 0; faceY = 0; hp = 0; maxHP = 0; damage = 0; damage2 = 0; hitType = 0; hitType2 = 0; forceChatMessage = null; entityFaceIndex = 0; chatText = null; chatColor = 0; chatEffects = 0; hitUpdateCombatType = 0; hitUpdateCombatType2 = 0; } primaryDirection = ((byte) player.getMovementHandler().getPrimaryDirection()); secondaryDirection = ((byte) player.getMovementHandler().getSecondaryDirection()); equipment = new short[14]; for (int i = 0; i < equipment.length; i++) { if (player.getEquipment().getItems()[i] != null) { equipment[i] = ((short) player.getEquipment().getItems()[i].getId()); } } npcAppearanceId = ((short) player.getNpcAppearanceId()); rights = ((byte) player.getRights()); combatLevel = ((byte) player.getSkill().calcCombatLevel()); headicon = ((byte) player.getPrayer().getHeadicon()); standEmote = ((short) player.getAnimations().getStandEmote()); runEmote = ((short) player.getAnimations().getRunEmote()); standTurnEmote = ((short) player.getAnimations().getStandTurnEmote()); walkEmote = ((short) player.getAnimations().getWalkEmote()); turn180Emote = ((short) player.getAnimations().getTurn180Emote()); turn90CWEmote = ((short) player.getAnimations().getTurn90CWEmote()); turn90CCWEmote = ((short) player.getAnimations().getTurn90CCWEmote()); username = player.getDisplay(); skullIcon = ((byte) player.getSkulling().getSkullIcon()); gender = player.getGender(); colors = (player.getColors().clone()); appearance = (player.getAppearance().clone()); }
Good idea / recommendation.
However it appears they cloned correctly so It's something else.
Code:PNPC:-1 Equipment:4724, 1019, 0, 4726, 4728, 0, 0, 4730, 0, 0, 0, 0, 0, 0 Appearance:48, 56, 61, 67, 70, 79, -1Still digging but thanks for the help so farCode:PNPC:300 Equipment:4724, 1019, 0, 4726, 4728, 0, 0, 4730, 0, 0, 0, 0, 0, 0 Appearance:48, 56, 61, 67, 70, 79, -1
-relevant appearance array code
Code:private int[] appearance = new int[7]; public void setAppearance(int[] appearance) { this.appearance = appearance; } public int[] getAppearance() { return appearance; }
I did manage to find that function you were asking about
// So there is a -1 here if I leave it the helm is gone. If I comment it out, OR add a second -1. The helm comes back and I walk normal. But I don't look like an NPC i'm sure this bit of code is wrong some wayCode:public static void appendAppearance(PlayerUpdateFlags flags, StreamBuffer.OutBuffer out) {
Code:if (flags.getNpcAppearanceId() == -1) { //Lots of code here } else { block.writeShort(-1); block.writeShort(flags.getNpcAppearanceId()); }even added things likeCode:if (flags.getNpcAppearanceId() == -1) { //Lots of code here } else { //block.writeShort(-1); OR block.writeShort(-1); block.writeShort(-1); block.writeShort(flags.getNpcAppearanceId()); }
System.out.println("TEST:"+flags.getNpcAppearanceI d());
and the correct NPC id comes out *shrug*
I believe I tracked it down to the code source that needs to be fixed - I don't have the code that needs to be placed here.
I'll continue digging in to it
Add a debug like this:
If those comes out correctly and send both prints, then it could be something else.Code:System.out.println("Checking value for npc..." + flags.getNpcAppearanceId()); if (flags.getNpcAppearanceId() == -1) { //Lots of code here } else { block.writeShort(-1); System.out.println("Value for npc is current = " + flags.getNpcAppearanceId()); block.writeShort(flags.getNpcAppearanceId()); }
Perhaps my previous message was hard to understand, I'm sorry.
I didn't have any difficulty testing with
I'm currently trying to download another Mayhem server to compare this fileCode:System.out.println()
If i was to add it as you suggested the NPC ID would be 300 (because that's what I chose) correctly.
or -1 if I was not an NPC
You could try to do this:
IntoCode:block.writeByte(flags.getGender()); block.writeByte(flags.getHeadicon()); block.writeByte(flags.getSkullIcon()); block.writeByte(flags.getRights());
And see if that is the issue you are facing. Because not sure what the "block.writeByte(flags.getRights());" is being used in this code. Unless your client got something that would set your player rights within your player update.Code:block.writeByte(flags.getGender()); block.writeByte(flags.getHeadicon()); block.writeByte(flags.getSkullIcon()); //block.writeByte(flags.getRights());
« Previous Thread | Next Thread » |
Thread Information |
Users Browsing this ThreadThere are currently 1 users browsing this thread. (0 members and 1 guests) |