ObjectOutputStream* ObjectVersionUpdateManager::addVariable(String variableName, ObjectInputStream* object, Stream* newVariableData){ object->reset(); uint16 oldVariableCount = object->readShort(); //info("first variable count is " + String::valueOf(oldVariableCount),true); ObjectOutputStream* newData = new ObjectOutputStream(object->size()); object->copy(newData, 0); newData->writeShort(0, oldVariableCount + 1); newData->setOffset(newData->size()); uint32 _nameHashCode = variableName.hashCode(); TypeInfo<uint32>::toBinaryStream(&_nameHashCode, newData); newData->writeInt(newVariableData->size()); newData->writeStream(newVariableData); return newData; }
void ObjectVersionUpdateManager::updateWeaponsDots() { ObjectDatabase* database = ObjectDatabaseManager::instance()->loadObjectDatabase("sceneobjects", true); ObjectDatabaseIterator iterator(database); ObjectInputStream objectData(2000); uint64 objectID = 0; info("update database weapon dots", true); int count = 0; uint32 classNameHashCode = STRING_HASHCODE("_className"); try { while (iterator.getNextKeyAndValue(objectID, &objectData)) { String className; int oldType = 0; try { if (!Serializable::getVariable<String>(classNameHashCode, &className, &objectData) || !Serializable::getVariable<int>(STRING_HASHCODE("WeaponObject.dotType"), &oldType, &objectData)) { objectData.clear(); continue; } } catch (...) { objectData.clear(); continue; } if (className == "WeaponObject") { Vector<int> dots; ObjectOutputStream newDotsValue; TypeInfo<Vector<int> >::toBinaryStream(&dots, &newDotsValue); // info("we found a Player " + String::valueOf(objectID) + " with residence " + String::valueOf(residence),true); ObjectOutputStream* newData = changeVariableData(STRING_HASHCODE("WeaponObject.dotType"), &objectData, &newDotsValue); newData->reset(); ObjectInputStream* inputStream = new ObjectInputStream(newData->getBuffer(), newData->size()); delete newData; ObjectOutputStream* newNextData = changeVariableData(STRING_HASHCODE("WeaponObject.dotAttribute"), inputStream, &newDotsValue); newNextData->reset(); delete inputStream; inputStream = new ObjectInputStream(newNextData->getBuffer(), newNextData->size()); delete newNextData; newData = changeVariableData(STRING_HASHCODE("WeaponObject.dotStrength"), inputStream, &newDotsValue); newData->reset(); delete inputStream; inputStream = new ObjectInputStream(newData->getBuffer(), newData->size()); delete newData; newNextData = changeVariableData(STRING_HASHCODE("WeaponObject.dotDuration"), inputStream, &newDotsValue); newNextData->reset(); delete inputStream; inputStream = new ObjectInputStream(newNextData->getBuffer(), newNextData->size()); delete newNextData; newData = changeVariableData(STRING_HASHCODE("WeaponObject.dotPotency"), inputStream, &newDotsValue); newData->reset(); delete inputStream; inputStream = new ObjectInputStream(newData->getBuffer(), newData->size()); delete newData; newNextData = changeVariableData(STRING_HASHCODE("WeaponObject.dotUses"), inputStream, &newDotsValue); newNextData->reset(); delete inputStream; database->putData(objectID, newNextData, NULL); } objectData.clear(); } } catch (Exception& e) { error(e.getMessage()); e.printStackTrace(); } info("done updating databse weapon dots\n", true); }