private void decodeHeader() { DataInputStream stream = new DataInputStream(_archive.Data); int protocol = stream.readUnsignedByte(); if (protocol < 5 || protocol > 7) { throw new ArgumentOutOfRangeException("INVALID PROTOCOL"); } if (protocol >= 6) { _revision = stream.readInt(); } int hash = stream.readUnsignedByte(); _named = (0x1 & hash) != 0; _usingWhirpool = (0x2 & hash) != 0; int validArchivesCount = protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort(); _validArchiveIds = new int[validArchivesCount]; int lastArchiveId = 0; int biggestArchiveId = 0; for (int i = 0; i < validArchivesCount; i++) { int archiveId = (lastArchiveId = lastArchiveId + (protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort())); if (archiveId > biggestArchiveId) { biggestArchiveId = archiveId; } _validArchiveIds[i] = archiveId; } _archiveList = new ArchiveReference[biggestArchiveId + 1]; for (int i = 0; i < validArchivesCount; i++) { _archiveList[_validArchiveIds[i]] = new ArchiveReference(); } if (_named) { for (int i = 0; i < validArchivesCount; i++) { _archiveList[_validArchiveIds[i]].NameHash = stream.readInt(); } } if (_usingWhirpool) { for (int i = 0; i < validArchivesCount; i++) { byte[] whirpool = new byte[64]; stream.Read(whirpool, 0, 64); _archiveList[_validArchiveIds[i]].Whirpool = (whirpool); } } for (int i = 0; i < validArchivesCount; i++) { _archiveList[_validArchiveIds[i]].CRC = stream.readInt(); } for (int i = 0; i < validArchivesCount; i++) { _archiveList[_validArchiveIds[i]].Revision = stream.readInt(); } for (int i = 0; i < validArchivesCount; i++) { _archiveList[_validArchiveIds[i]].ValidFileIds = new int[(protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort())]; } for (int i = 0; i < validArchivesCount; i++) { int lastFileId = 0; int biggestFileId = 0; ArchiveReference archive = _archiveList[_validArchiveIds[i]]; for (int j = 0; j < archive.ValidFileIds.Length; j++) { int fileId = (lastFileId = lastFileId + (protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort())); if (fileId > biggestFileId) { biggestFileId = fileId; } archive.ValidFileIds[j] = fileId; } archive.FileList = (new FileReference[biggestFileId + 1]); for (int j = 0; j < archive.ValidFileIds.Length; j++) { archive.FileList[archive.ValidFileIds[j]] = new FileReference(); } } if (_named) { for (int i = 0; i < validArchivesCount; i++) { ArchiveReference archive = _archiveList[_validArchiveIds[i]]; for (int j = 0; j < archive.ValidFileIds.Length; j++) { archive.FileList[archive.ValidFileIds[j]].NameHash = (stream.readInt()); } } } }
private void readOpcode(DataInputStream stream, int opcode) { if (opcode == 1) { modelId = stream.readBigSmart(); } else if (opcode == 2) { name = stream.readString(); } else if (opcode == 4) { modelZoom = stream.readUnsignedShort(); } else if (opcode == 5) { modelRotation1 = stream.readUnsignedShort(); } else if (opcode == 6) { modelRotation2 = stream.readUnsignedShort(); } else if (opcode == 7) { modelOffset1 = stream.readUnsignedShort(); if (modelOffset1 > 32767) { modelOffset1 -= 65536; } modelOffset1 <<= 0; } else if (opcode == 8) { modelOffset2 = stream.readUnsignedShort(); if (modelOffset2 > 32767) { modelOffset2 -= 65536; } modelOffset2 <<= 0; } else if (opcode == 11) { stackable = 1; } else if (opcode == 12) { value = stream.readInt(); } else if (opcode == 117) { opcode117 = stream.readUnsignedByte(); } else if (opcode == 211) { opcode211 = stream.readUnsignedByte(); } else if (opcode == 255) { opcode255 = stream.readUnsignedByte(); } else if (opcode == 75) { opcode75 = stream.readUnsignedByte(); } else if (opcode == 87) { opcode87 = stream.readUnsignedByte(); } else if (opcode == 68) { opcode68 = stream.readUnsignedByte(); } else if (opcode == 118) { opcode118 = stream.readUnsignedByte(); } else if (opcode == 83) { opcode83 = stream.readUnsignedByte(); } else if (opcode == 254) { opcode254 = stream.readUnsignedByte(); } else if (opcode == 156) { opcode156 = stream.readUnsignedByte(); } else if (opcode == 232) { opcode232 = stream.readUnsignedByte(); } else if (opcode == 199) { opcode199 = stream.readUnsignedByte(); } else if (opcode == 253) { opcode253 = stream.readUnsignedByte(); } else if (opcode == 223) { opcode223 = stream.readUnsignedByte(); } else if (opcode == 198) { opcode198 = stream.readUnsignedByte(); } else if (opcode == 186) { opcode186 = stream.readUnsignedByte(); } else if (opcode == 29) { opcode29 = stream.readUnsignedByte(); } else if (opcode == 238) { opcode238 = stream.readUnsignedByte(); } else if (opcode == 153) { opcode153 = stream.readUnsignedByte(); } else if (opcode == 155) { opcode155 = stream.readUnsignedByte(); } else if (opcode == 99) { opcode99 = stream.readUnsignedByte(); } else if (opcode == 251) { opcode251 = stream.readUnsignedByte(); } else if (opcode == 22) { opcode22 = stream.readUnsignedByte(); } else if (opcode == 192) { opcode192 = stream.readUnsignedByte(); } else if (opcode == 245) { opcode245 = stream.readUnsignedByte(); } else if (opcode == 45) { opcode45 = stream.readUnsignedByte(); } else if (opcode == 56) { opcode56 = stream.readUnsignedByte(); } else if (opcode == 248) { opcode248 = stream.readUnsignedByte(); } else if (opcode == 237) { opcode237 = stream.readUnsignedByte(); } else if (opcode == 243) { opcode243 = stream.readUnsignedByte(); } else if (opcode == 185) { opcode185 = stream.readUnsignedByte(); } else if (opcode == 221) { opcode221 = stream.readUnsignedByte(); } else if (opcode == 240) { opcode240 = stream.readUnsignedByte(); } else if (opcode == 154) { opcode154 = stream.readUnsignedByte(); } else if (opcode == 158) { opcode158 = stream.readUnsignedByte(); } else if (opcode == 137) { opcode137 = stream.readUnsignedByte(); } else if (opcode == 143) { opcode143 = stream.readUnsignedByte(); } else if (opcode == 61) { opcode61 = stream.readUnsignedByte(); } else if (opcode == 80) { opcode80 = stream.readUnsignedByte(); } else if (opcode == 196) { opcode196 = stream.readUnsignedByte(); } else if (opcode == 85) { opcode85 = stream.readUnsignedByte(); } else if (opcode == 239) { opcode239 = stream.readUnsignedByte(); } else if (opcode == 177) { opcode177 = stream.readUnsignedByte(); } else if (opcode == 163) { opcode163 = stream.readUnsignedByte(); } else if (opcode == 150) { opcode150 = stream.readUnsignedByte(); } else if (opcode == 152) { opcode152 = stream.readUnsignedByte(); } else if (opcode == 135) { opcode135 = stream.readUnsignedByte(); } else if (opcode == 120) { opcode120 = stream.readUnsignedByte(); } else if (opcode == 204) { opcode204 = stream.readUnsignedByte(); } else if (opcode == 81) { opcode81 = stream.readUnsignedByte(); } else if (opcode == 208) { opcode208 = stream.readUnsignedByte(); } else if (opcode == 242) { opcode242 = stream.readUnsignedByte(); } else if (opcode == 15) { opcode15 = stream.readUnsignedByte(); } else if (opcode == 233) { opcode233 = stream.readUnsignedByte(); } else if (opcode == 213) { opcode213 = stream.readUnsignedByte(); } else if (opcode == 207) { opcode207 = stream.readUnsignedByte(); } else if (opcode == 216) { opcode216 = stream.readUnsignedByte(); } else if (opcode == 206) { opcode206 = stream.readUnsignedByte(); } else if (opcode == 50) { opcode50 = stream.readUnsignedByte(); } else if (opcode == 193) { opcode193 = stream.readUnsignedByte(); } else if (opcode == 71) { opcode71 = stream.readUnsignedByte(); } else if (opcode == 10) { opcode10 = stream.readUnsignedByte(); } else if (opcode == 55) { opcode55 = stream.readUnsignedByte(); } else if (opcode == 144) { opcode144 = stream.readUnsignedByte(); } else if (opcode == 235) { opcode235 = stream.readUnsignedByte(); } else if (opcode == 188) { opcode188 = stream.readUnsignedByte(); } else if (opcode == 241) { opcode241 = stream.readUnsignedByte(); } else if (opcode == 236) { opcode236 = stream.readUnsignedByte(); } else if (opcode == 182) { opcode182 = stream.readUnsignedByte(); } else if (opcode == 169) { opcode169 = stream.readUnsignedByte(); } else if (opcode == 190) { opcode190 = stream.readUnsignedByte(); } else if (opcode == 178) { opcode178 = stream.readUnsignedByte(); } else if (opcode == 88) { opcode88 = stream.readUnsignedByte(); } else if (opcode == 200) { opcode200 = stream.readUnsignedByte(); } else if (opcode == 184) { opcode184 = stream.readUnsignedByte(); } else if (opcode == 176) { opcode176 = stream.readUnsignedByte(); } else if (opcode == 197) { opcode197 = stream.readUnsignedByte(); } else if (opcode == 247) { opcode247 = stream.readUnsignedByte(); } else if (opcode == 218) { opcode218 = stream.readUnsignedByte(); } else if (opcode == 250) { opcode250 = stream.readUnsignedByte(); } else if (opcode == 174) { opcode174 = stream.readUnsignedByte(); } else if (opcode == 210) { opcode210 = stream.readUnsignedByte(); } else if (opcode == 164) { opcode164 = stream.readUnsignedByte(); } else if (opcode == 142) { opcode142 = stream.readUnsignedByte(); } else if (opcode == 148) { opcode148 = stream.readUnsignedByte(); } else if (opcode == 133) { opcode133 = stream.readUnsignedByte(); } else if (opcode == 222) { opcode222 = stream.readUnsignedByte(); } else if (opcode == 138) { opcode138 = stream.readUnsignedByte(); } else if (opcode == 194) { opcode194 = stream.readUnsignedByte(); } else if (opcode == 119) { opcode119 = stream.readUnsignedByte(); } else if (opcode == 202) { opcode202 = stream.readUnsignedByte(); } else if (opcode == 149) { opcode149 = stream.readUnsignedByte(); } else if (opcode == 64) { opcode64 = stream.readUnsignedByte(); } else if (opcode == 147) { opcode147 = stream.readUnsignedByte(); } else if (opcode == 214) { opcode214 = stream.readUnsignedByte(); } else if (opcode == 74) { opcode74 = stream.readUnsignedByte(); } else if (opcode == 86) { opcode86 = stream.readUnsignedByte(); } else if (opcode == 167) { opcode167 = stream.readUnsignedByte(); } else if (opcode == 161) { opcode161 = stream.readUnsignedByte(); } else if (opcode == 58) { opcode58 = stream.readUnsignedByte(); } else if (opcode == 59) { opcode59 = stream.readUnsignedByte(); } else if (opcode == 187) { opcode187 = stream.readUnsignedByte(); } else if (opcode == 77) { opcode77 = stream.readUnsignedByte(); } else if (opcode == 229) { opcode229 = stream.readUnsignedByte(); } else if (opcode == 230) { opcode230 = stream.readUnsignedByte(); } else if (opcode == 17) { opcode17 = stream.readUnsignedByte(); } else if (opcode == 67) { opcode67 = stream.readUnsignedByte(); } else if (opcode == 131) { opcode131 = stream.readUnsignedByte(); } else if (opcode == 225) { opcode225 = stream.readUnsignedByte(); } else if (opcode == 203) { opcode203 = stream.readUnsignedByte(); } else if (opcode == 19) { opcode19 = stream.readUnsignedByte(); } else if (opcode == 43) { opcode43 = stream.readUnsignedByte(); } else if (opcode == 168) { opcode168 = stream.readUnsignedByte(); } else if (opcode == 46) { opcode46 = stream.readUnsignedByte(); } else if (opcode == 209) { opcode209 = stream.readUnsignedByte(); } else if (opcode == 166) { opcode166 = stream.readUnsignedByte(); } else if (opcode == 54) { opcode54 = stream.readUnsignedByte(); } else if (opcode == 21) { opcode21 = stream.readUnsignedByte(); } else if (opcode == 73) { opcode73 = stream.readUnsignedByte(); } else if (opcode == 159) { opcode159 = stream.readUnsignedByte(); } else if (opcode == 123) { opcode123 = stream.readUnsignedByte(); } else if (opcode == 146) { opcode146 = stream.readUnsignedByte(); } else if (opcode == 180) { opcode180 = stream.readUnsignedByte(); } else if (opcode == 20) { opcode20 = stream.readUnsignedByte(); } else if (opcode == 165) { opcode165 = stream.readUnsignedByte(); } else if (opcode == 84) { opcode84 = stream.readUnsignedByte(); } else if (opcode == 28) { opcode28 = stream.readUnsignedByte(); } else if (opcode == 175) { opcode175 = stream.readUnsignedByte(); } else if (opcode == 141) { opcode141 = stream.readUnsignedByte(); } else if (opcode == 205) { opcode205 = stream.readUnsignedByte(); } else if (opcode == 220) { opcode220 = stream.readUnsignedByte(); } else if (opcode == 136) { opcode136 = stream.readUnsignedByte(); } else if (opcode == 212) { opcode212 = stream.readUnsignedByte(); } else if (opcode == 49) { opcode49 = stream.readUnsignedByte(); } else if (opcode == 69) { opcode69 = stream.readUnsignedByte(); } else if (opcode == 72) { opcode72 = stream.readUnsignedByte(); } else if (opcode == 60) { opcode60 = stream.readUnsignedByte(); } else if (opcode == 62) { opcode62 = stream.readUnsignedByte(); } else if (opcode == 219) { opcode219 = stream.readUnsignedByte(); } else if (opcode == 44) { opcode44 = stream.readUnsignedByte(); } else if (opcode == 227) { opcode227 = stream.readUnsignedByte(); } else if (opcode == 76) { opcode76 = stream.readUnsignedByte(); } else if (opcode == 234) { opcode234 = stream.readUnsignedByte(); } else if (opcode == 57) { opcode57 = stream.readUnsignedByte(); } else if (opcode == 51) { opcode51 = stream.readUnsignedByte(); } else if (opcode == 124) { opcode124 = stream.readUnsignedByte(); } else if (opcode == 70) { opcode70 = stream.readUnsignedByte(); } else if (opcode == 231) { opcode231 = stream.readUnsignedByte(); } else if (opcode == 162) { opcode162 = stream.readUnsignedByte(); } else if (opcode == 160) { opcode160 = stream.readUnsignedByte(); } else if (opcode == 181) { opcode181 = stream.readUnsignedByte(); } else if (opcode == 183) { opcode183 = stream.readUnsignedByte(); } else if (opcode == 191) { opcode191 = stream.readUnsignedByte(); } else if (opcode == 189) { opcode189 = stream.readUnsignedByte(); } else if (opcode == 179) { opcode179 = stream.readUnsignedByte(); } else if (opcode == 173) { opcode173 = stream.readUnsignedByte(); } else if (opcode == 48) { opcode48 = stream.readUnsignedByte(); } else if (opcode == 172) { opcode172 = stream.readUnsignedByte(); } else if (opcode == 42) { opcode42 = stream.readUnsignedByte(); } else if (opcode == 47) { opcode47 = stream.readUnsignedByte(); } else if (opcode == 246) { opcode246 = stream.readUnsignedByte(); } else if (opcode == 89) { opcode89 = stream.readUnsignedByte(); } else if (opcode == 195) { opcode195 = stream.readUnsignedByte(); } else if (opcode == 145) { opcode145 = stream.readUnsignedByte(); } else if (opcode == 224) { opcode224 = stream.readUnsignedByte(); } else if (opcode == 63) { opcode63 = stream.readUnsignedByte(); } else if (opcode == 94) { opcode94 = stream.readUnsignedByte(); } else if (opcode == 201) { opcode201 = stream.readUnsignedByte(); } else if (opcode == 217) { opcode217 = stream.readUnsignedByte(); } else if (opcode == 252) { opcode252 = stream.readUnsignedByte(); } else if (opcode == 228) { opcode228 = stream.readUnsignedByte(); } else if (opcode == 82) { opcode82 = stream.readUnsignedByte(); } else if (opcode == 13) { opcode13 = stream.readUnsignedByte(); } else if (opcode == 14) { opcode14 = stream.readUnsignedByte(); } else if (opcode == 9) { opcode9 = stream.readUnsignedByte(); } else if (opcode == 27) { opcode27 = stream.readUnsignedByte(); } else if (opcode == 66) { opcode66 = stream.readUnsignedByte(); } else if (opcode == 116) { opcode116 = stream.readUnsignedByte(); } else if (opcode == 157) { opcode157 = stream.readUnsignedByte(); } else if (opcode == 244) { opcode244 = stream.readUnsignedByte(); } else if (opcode == 53) { opcode53 = stream.readUnsignedByte(); } else if (opcode == 215) { opcode215 = stream.readUnsignedByte(); } else if (opcode == 171) { opcode171 = stream.readUnsignedByte(); } else if (opcode == 3) { opcode3 = stream.readUnsignedByte(); } else if (opcode == 170) { opcode170 = stream.readUnsignedByte(); } else if (opcode == 226) { opcode226 = stream.readUnsignedByte(); } else if (opcode == 52) { opcode52 = stream.readUnsignedByte(); } else if (opcode == 151) { opcode151 = stream.readUnsignedByte(); // 14 66 116 157 244 170 151 9 27 } else if (opcode == 16) { membersOnly = true; } else if (opcode == 18) // added { stream.readUnsignedShort(); } else if (opcode == 23) { maleEquip1 = stream.readBigSmart(); } else if (opcode == 24) { maleEquip2 = stream.readBigSmart(); } else if (opcode == 25) { femaleEquip1 = stream.readBigSmart(); } else if (opcode == 26) { femaleEquip2 = stream.readBigSmart(); } else if (opcode >= 30 && opcode < 35) { groundOptions[opcode - 30] = stream.readString(); } else if (opcode >= 35 && opcode < 40) { inventoryOptions[opcode - 35] = stream.readString(); } else if (opcode == 40) { int length = stream.readUnsignedByte(); originalModelColors = new int[length]; modifiedModelColors = new int[length]; for (int index = 0; index < length; index++) { originalModelColors[index] = stream.readUnsignedShort(); modifiedModelColors[index] = stream.readUnsignedShort(); } } else if (opcode == 41) { int length = stream.readUnsignedByte(); originalTextureColors = new short[length]; modifiedTextureColors = new short[length]; for (int index = 0; index < length; index++) { originalTextureColors[index] = (short)stream .readUnsignedShort(); modifiedTextureColors[index] = (short)stream .readUnsignedShort(); } } else if (opcode == 42) { int length = stream.readUnsignedByte(); unknownArray1 = new byte[length]; for (int index = 0; index < length; index++) { unknownArray1[index] = (byte)stream.readByte(); } } else if (opcode == 65) { unnoted = true; } else if (opcode == 78) { maleEquipModelId3 = stream.readBigSmart(); } else if (opcode == 79) { femaleEquipModelId3 = stream.readBigSmart(); } else if (opcode == 90) { unknownInt1 = stream.readBigSmart(); } else if (opcode == 91) { unknownInt2 = stream.readBigSmart(); } else if (opcode == 92) { unknownInt3 = stream.readBigSmart(); } else if (opcode == 93) { unknownInt4 = stream.readBigSmart(); } else if (opcode == 95) { unknownInt5 = stream.readUnsignedShort(); } else if (opcode == 96) { unknownInt6 = stream.readUnsignedByte(); } else if (opcode == 97) { certId = stream.readUnsignedShort(); } else if (opcode == 98) { certTemplateId = stream.readUnsignedShort(); } else if (opcode >= 100 && opcode < 110) { if (stackIds == null) { stackIds = new int[10]; stackAmounts = new int[10]; } stackIds[opcode - 100] = stream.readUnsignedShort(); stackAmounts[opcode - 100] = stream.readUnsignedShort(); } else if (opcode == 110) { unknownInt7 = stream.readUnsignedShort(); } else if (opcode == 111) { unknownInt8 = stream.readUnsignedShort(); } else if (opcode == 112) { unknownInt9 = stream.readUnsignedShort(); } else if (opcode == 113) { unknownInt10 = stream.readByte(); } else if (opcode == 114) { unknownInt11 = stream.readByte() * 5; } else if (opcode == 115) { teamId = stream.readUnsignedByte(); } else if (opcode == 121) { lendId = stream.readUnsignedShort(); } else if (opcode == 122) { lendTemplateId = stream.readUnsignedShort(); } else if (opcode == 125) { unknownInt12 = stream.readByte() << 0; unknownInt13 = stream.readByte() << 0; unknownInt14 = stream.readByte() << 0; } else if (opcode == 126) { unknownInt15 = stream.readByte() << 0; unknownInt16 = stream.readByte() << 0; unknownInt17 = stream.readByte() << 0; } else if (opcode == 127) { unknownInt18 = stream.readUnsignedByte(); unknownInt19 = stream.readUnsignedShort(); } else if (opcode == 128) { unknownInt20 = stream.readUnsignedByte(); unknownInt21 = stream.readUnsignedShort(); } else if (opcode == 129) { unknownInt20 = stream.readUnsignedByte(); unknownInt21 = stream.readUnsignedShort(); } else if (opcode == 130) { unknownInt22 = stream.readUnsignedByte(); unknownInt23 = stream.readUnsignedShort(); } else if (opcode == 132) { int length = stream.readUnsignedByte(); unknownArray2 = new int[length]; for (int index = 0; index < length; index++) { unknownArray2[index] = stream.readUnsignedShort(); } } else if (opcode == 134) { int unknownValue = stream.readUnsignedByte(); } else if (opcode == 139) { unknownValue2 = stream.readUnsignedShort(); } else if (opcode == 140) { unknownValue1 = stream.readUnsignedShort(); } else if (opcode == 249) { int length = stream.readUnsignedByte(); for (int index = 0; index < length; index++) { bool stringInstance = stream.readUnsignedByte() == 1; int key = stream.read24BitInt(); if (stringInstance) { stream.readString(); } else { stream.readInt(); } } } else { throw new ArgumentOutOfRangeException("MISSING OPCODE " + opcode + " FOR ITEM " + Id); } }