CString getProp(char pId, int clientVersion) { switch ((NPCPROP)pId) { case NPCPROP.IMAGE: return new CString() + (char)image.Text.Length + image; case NPCPROP.SCRIPT: { //if (clientVersion != NSVER_GENERIC) return new CString() + (short)(clientScriptFormatted.Length > 0x3FFF ? 0x3FFF : clientScriptFormatted.Length) + clientScriptFormatted.ToString().Substring(0, 0x3FFF); //else // return new CString() + (long)serverScriptFormatted.Length + serverScriptFormatted; } case NPCPROP.X: return new CString() + (char)(x * 2); case NPCPROP.Y: return new CString() + (char)(y * 2); case NPCPROP.POWER: return new CString() + (char)power; case NPCPROP.RUPEES: return new CString() + (int)rupees; case NPCPROP.ARROWS: return new CString() + (char)darts; case NPCPROP.BOMBS: return new CString() + (char)bombs; case NPCPROP.GLOVEPOWER: return new CString() + (char)glovePower; case NPCPROP.BOMBPOWER: return new CString() + (char)bombPower; case NPCPROP.SWORDIMAGE: if (swordPower == 0) return new CString() + (char)0; else return new CString() + (char)(swordPower + 30) + (char)swordImage.Length + swordImage; case NPCPROP.SHIELDIMAGE: if (shieldPower + 10 > 10) return new CString() + (char)(shieldPower + 10) + (char)shieldImage.Length + shieldImage; else return new CString() + (char)0; case NPCPROP.GANI: //if (clientVersion < CLVER_2_1) // return bowImage; return new CString() + (char)gani.Length + gani; case NPCPROP.VISFLAGS: return new CString() + (char)visFlags; case NPCPROP.BLOCKFLAGS: return new CString() + (char)blockFlags; case NPCPROP.MESSAGE: return new CString() + (char)chatMsg.ToString().Substring(0, 200).Length + chatMsg.ToString().Substring(0, 200); case NPCPROP.HURTDXDY: return new CString() + (char)((hurtX * 32) + 32) + (char)((hurtY * 32) + 32); case NPCPROP.ID: return new CString() + (int)id; // Sprite is deprecated and has been replaced by def.gani. // Sprite now holds the direction of the npc. sprite % 4 gives backwards compatibility. case NPCPROP.SPRITE: { //if (clientVersion < CLVER_2_1) return new CString() + (char)sprite; //else return new CString() + (char)(sprite % 4); } case NPCPROP.COLORS: return new CString() + (char)colors[0] + (char)colors[1] + (char)colors[2] + (char)colors[3] + (char)colors[4]; case NPCPROP.NICKNAME: return new CString() + (char)nickName.Length + nickName; case NPCPROP.HORSEIMAGE: return new CString() + (char)horseImage.Length + horseImage; case NPCPROP.HEADIMAGE: return new CString() + (char)(headImage.Length + 100) + headImage; case NPCPROP.ALIGNMENT: return new CString() + (char)ap; case NPCPROP.IMAGEPART: return new CString() + imagePart; case NPCPROP.BODYIMAGE: return new CString() + (char)bodyImage.Length + bodyImage; case NPCPROP.GMAPLEVELX: return new CString() + (char)gmaplevelx; case NPCPROP.GMAPLEVELY: return new CString() + (char)gmaplevely; case NPCPROP.CLASS: return new CString() + (short)0; case NPCPROP.X2: { ushort val = (ushort)(x2 < 0 ? -x2 : x2); val += (ushort)1; if (x2 < 0) { val |= 0x0001; } CString ret = new CString(); ret.writeGShort((short)val); return ret; } case NPCPROP.Y2: { ushort val = (ushort)(y2 < 0 ? -y2 : y2); val += 1; if (y2 < 0) val |= 0x0001; CString ret = new CString(); return ret.writeGShort((short)val); } } // Saves. if (pId.InRange((char)23, (char)32)) { for (uint i = 0; i < __nSavePackets.Length; i++) { if (__nSavePackets[i] == pId) return new CString() + (char)saves[i]; } } // Gani attributes. if (pId.InRange((char)NPCPROP.GATTRIB1, (char)NPCPROP.GATTRIB5) || pId.InRange((char)NPCPROP.GATTRIB6, (char)NPCPROP.GATTRIB9) || pId.InRange((char)NPCPROP.GATTRIB10, (char)NPCPROP.GATTRIB30)) { for (uint i = 0; i < __nAttrPackets.Length; i++) { if (__nAttrPackets[i] == pId) return new CString() + (char)gAttribs[i].Length + gAttribs[i]; } } return new CString(); }