void Pony::saveInventory() { win.logMsg(QObject::tr("%1 UDP: Saving Inventory for %2 (%3)").arg(LOG_INFO).arg(QString().setNum(netviewId)).arg(owner->name)); QDir playerPath(QDir::currentPath()); playerPath.cd("data"); playerPath.cd("players"); playerPath.mkdir(owner->name.toLatin1()); QFile file(QDir::currentPath()+"/data/players/"+owner->name.toLatin1()+"/inventory.lpd"); if (!file.open(QIODevice::ReadWrite)) { win.logMsg(QObject::tr("%1 UDP: Error Saving Inventory for %2 (%3)").arg(LOG_SEVERE).arg(QString().setNum(netviewId)).arg(owner->name)); return; } QByteArray invData = file.readAll(); // Try to find an existing entry for this pony, if found delete it. Then go at the end. for (int i=0; i<invData.size();) { // Read the name QString entryName = dataToString(invData.mid(i)); int nameSize = entryName.size()+getVUint32Size(invData.mid(i)); //win.logMessage("saveInventory : Reading entry "+entryName); quint8 invSize = invData[i+nameSize+4]; quint8 wornSize = invData[i+nameSize+4+1+invSize*9]; // Serialized sizeof InventoryItem is 9 if (entryName == this->name) // Delete the entry, we'll rewrite it at the end { invData.remove(i,nameSize+4+1+invSize*9+1+wornSize*5); break; } else // Skip this entry i += nameSize+4+1+invSize*9+1+wornSize*5; } // Now add our data at the end of the file QByteArray newEntry = stringToData(this->name); newEntry += uint32ToData(nBits); newEntry += uint8ToData(inv.size()); for (const InventoryItem& item : inv) { newEntry += uint8ToData(item.index); newEntry += uint32ToData(item.id); newEntry += uint32ToData(item.amount); } newEntry += uint8ToData(wornItm.size()); for (const WearableItem& item : wornItm) { newEntry += uint8ToData(item.index); newEntry += uint32ToData(item.id); } invData += newEntry; file.resize(0); file.write(invData); file.close(); }
void sendUnwearItemRPC(Pony* wearing, Player* dest, uint8_t slot) { QByteArray data; data += uint16ToData(wearing->netviewId); data += 0x9; data += uint8ToData(slot); sendMessage(dest, MsgUserReliableOrdered18, data); }
void sendUnwearItemRPC(Player* player, uint8_t slot) { QByteArray data; data += uint16ToData(player->pony.netviewId); data += 0x9; data += uint8ToData(slot); sendMessage(player, MsgUserReliableOrdered18, data); }
void sendDeleteItemRPC(Player* player, uint8_t index, uint32_t qty) { QByteArray data; data += uint16ToData(player->pony.netviewId); data += 0x7; data += uint8ToData(index); data += uint32ToData(qty); sendMessage(player, MsgUserReliableOrdered18, data); }
void sendWearItemRPC(Pony* wearing, Player* dest, const WearableItem& item) { QByteArray data; data += uint16ToData(wearing->netviewId); data += 0x8; data += uint32ToData(item.id); data += uint8ToData(item.index); sendMessage(dest, MsgUserReliableOrdered18, data); }
void sendWearItemRPC(Player* player, const WearableItem& item) { QByteArray data; data += uint16ToData(player->pony.netviewId); data += 0x8; data += uint32ToData(item.id); data += uint8ToData(item.index); sendMessage(player, MsgUserReliableOrdered18, data); }