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);
}