the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 189 lines 5.0 kB view raw
1#include "stdafx.h" 2#include <iostream> 3#include "InputOutputStream.h" 4#include "PacketListener.h" 5#include "TextureAndGeometryPacket.h" 6 7 8 9TextureAndGeometryPacket::TextureAndGeometryPacket() 10{ 11 this->textureName = L""; 12 this->dwTextureBytes = 0; 13 this->pbData = NULL; 14 this->dwBoxC = 0; 15 this->BoxDataA = NULL; 16 uiAnimOverrideBitmask=0; 17} 18 19TextureAndGeometryPacket::~TextureAndGeometryPacket() 20{ 21 // can't free these - they're used elsewhere 22// if(this->BoxDataA!=NULL) 23// { 24// delete [] this->BoxDataA; 25// } 26// 27// if(this->pbData!=NULL) 28// { 29// delete [] this->pbData; 30// } 31} 32 33TextureAndGeometryPacket::TextureAndGeometryPacket(const wstring &textureName, PBYTE pbData, DWORD dwBytes) 34{ 35 this->textureName = textureName; 36 37 wstring skinValue = textureName.substr(7,textureName.size()); 38 skinValue = skinValue.substr(0,skinValue.find_first_of(L'.')); 39 std::wstringstream ss; 40 ss << std::dec << skinValue.c_str(); 41 ss >> this->dwSkinID; 42 this->dwSkinID = MAKE_SKIN_BITMASK(true, this->dwSkinID); 43 this->pbData = pbData; 44 this->dwTextureBytes = dwBytes; 45 this->dwBoxC = 0; 46 this->BoxDataA=NULL; 47 this->uiAnimOverrideBitmask=0; 48} 49 50TextureAndGeometryPacket::TextureAndGeometryPacket(const wstring &textureName, PBYTE pbData, DWORD dwBytes, DLCSkinFile *pDLCSkinFile) 51{ 52 this->textureName = textureName; 53 54 wstring skinValue = textureName.substr(7,textureName.size()); 55 skinValue = skinValue.substr(0,skinValue.find_first_of(L'.')); 56 std::wstringstream ss; 57 ss << std::dec << skinValue.c_str(); 58 ss >> this->dwSkinID; 59 this->dwSkinID = MAKE_SKIN_BITMASK(true, this->dwSkinID); 60 61 this->pbData = pbData; 62 this->dwTextureBytes = dwBytes; 63 this->uiAnimOverrideBitmask = pDLCSkinFile->getAnimOverrideBitmask(); 64 this->dwBoxC = pDLCSkinFile->getAdditionalBoxesCount(); 65 if(this->dwBoxC!=0) 66 { 67 this->BoxDataA= new SKIN_BOX [this->dwBoxC]; 68 vector<SKIN_BOX *> *pSkinBoxes=pDLCSkinFile->getAdditionalBoxes(); 69 int iCount=0; 70 71 for(AUTO_VAR(it, pSkinBoxes->begin());it != pSkinBoxes->end(); ++it) 72 { 73 SKIN_BOX *pSkinBox=*it; 74 this->BoxDataA[iCount++]=*pSkinBox; 75 } 76 } 77 else 78 { 79 this->BoxDataA=NULL; 80 } 81} 82 83TextureAndGeometryPacket::TextureAndGeometryPacket(const wstring &textureName, PBYTE pbData, DWORD dwBytes,vector<SKIN_BOX *> *pvSkinBoxes, unsigned int uiAnimOverrideBitmask) 84{ 85 this->textureName = textureName; 86 87 wstring skinValue = textureName.substr(7,textureName.size()); 88 skinValue = skinValue.substr(0,skinValue.find_first_of(L'.')); 89 std::wstringstream ss; 90 ss << std::dec << skinValue.c_str(); 91 ss >> this->dwSkinID; 92 this->dwSkinID = MAKE_SKIN_BITMASK(true, this->dwSkinID); 93 94 this->pbData = pbData; 95 this->dwTextureBytes = dwBytes; 96 this->uiAnimOverrideBitmask = uiAnimOverrideBitmask; 97 if(pvSkinBoxes==NULL) 98 { 99 this->dwBoxC=0; 100 this->BoxDataA=NULL; 101 } 102 else 103 { 104 this->dwBoxC = (DWORD)pvSkinBoxes->size(); 105 this->BoxDataA= new SKIN_BOX [this->dwBoxC]; 106 int iCount=0; 107 108 for(AUTO_VAR(it, pvSkinBoxes->begin());it != pvSkinBoxes->end(); ++it) 109 { 110 SKIN_BOX *pSkinBox=*it; 111 this->BoxDataA[iCount++]=*pSkinBox; 112 } 113 } 114 115} 116 117void TextureAndGeometryPacket::handle(PacketListener *listener) 118{ 119 listener->handleTextureAndGeometry(shared_from_this()); 120} 121 122void TextureAndGeometryPacket::read(DataInputStream *dis) //throws IOException 123{ 124 textureName = dis->readUTF(); 125 dwSkinID = (DWORD)dis->readInt(); 126 dwTextureBytes = (DWORD)dis->readShort(); 127 128 if(dwTextureBytes>0) 129 { 130 this->pbData= new BYTE [dwTextureBytes]; 131 132 for(DWORD i=0;i<dwTextureBytes;i++) 133 { 134 this->pbData[i] = dis->readByte(); 135 } 136 } 137 uiAnimOverrideBitmask = dis->readInt(); 138 139 dwBoxC = (DWORD)dis->readShort(); 140 141 if(dwBoxC>0) 142 { 143 this->BoxDataA= new SKIN_BOX [dwBoxC]; 144 } 145 146 for(DWORD i=0;i<dwBoxC;i++) 147 { 148 this->BoxDataA[i].ePart = (eBodyPart) dis->readShort(); 149 this->BoxDataA[i].fX = dis->readFloat(); 150 this->BoxDataA[i].fY = dis->readFloat(); 151 this->BoxDataA[i].fZ = dis->readFloat(); 152 this->BoxDataA[i].fH = dis->readFloat(); 153 this->BoxDataA[i].fW = dis->readFloat(); 154 this->BoxDataA[i].fD = dis->readFloat(); 155 this->BoxDataA[i].fU = dis->readFloat(); 156 this->BoxDataA[i].fV = dis->readFloat(); 157 } 158} 159 160void TextureAndGeometryPacket::write(DataOutputStream *dos) //throws IOException 161{ 162 dos->writeUTF(textureName); 163 dos->writeInt(dwSkinID); 164 dos->writeShort((short)dwTextureBytes); 165 for(DWORD i=0;i<dwTextureBytes;i++) 166 { 167 dos->writeByte(this->pbData[i]); 168 } 169 dos->writeInt(uiAnimOverrideBitmask); 170 171 dos->writeShort((short)dwBoxC); 172 for(DWORD i=0;i<dwBoxC;i++) 173 { 174 dos->writeShort((short)this->BoxDataA[i].ePart); 175 dos->writeFloat(this->BoxDataA[i].fX); 176 dos->writeFloat(this->BoxDataA[i].fY); 177 dos->writeFloat(this->BoxDataA[i].fZ); 178 dos->writeFloat(this->BoxDataA[i].fH); 179 dos->writeFloat(this->BoxDataA[i].fW); 180 dos->writeFloat(this->BoxDataA[i].fD); 181 dos->writeFloat(this->BoxDataA[i].fU); 182 dos->writeFloat(this->BoxDataA[i].fV); 183 } 184} 185 186int TextureAndGeometryPacket::getEstimatedSize() 187{ 188 return 4096+ +sizeof(int) + sizeof(float)*8*4; 189}