Nothxbye
Banned User
- Joined
- Jan 22, 2012
- Messages
- 1,124
- Reaction score
- 174
Wywala mi błąd w funkcji doSaveHouse(houseId) >> "LuaScriptInterface::luaDoSaveHouse(). Unable to save house items, ID: 606"
Wiecie może o co chodzi? Oto skrypty:
luascript.cpp
iomapserialize.cpp/saveHouseItems
iomapserialize.cpp/saveHouseBinary
iomapserialize.cpp/saveHouseBinaryTileBased
iomapserialize.cpp/saveHouseRelational
Wiecie może o co chodzi? Oto skrypty:
luascript.cpp
Code:
int32_t LuaScriptInterface::luaDoSaveHouse(lua_State* L)
{
//doSaveHouse(houseID)
House* house = Houses::getInstance().getHouse(popNumber(L));
if(!house)
{
reportErrorFunc(getErrorDesc(LUA_ERROR_HOUSE_NOT_FOUND));
lua_pushboolean(L, false);
return 1;
}
Database* db = Database::instance();
DBTransaction trans(db);
if(!trans.begin())
{
lua_pushboolean(L, false);
return 1;
}
if(!IOMapSerialize::getInstance()->saveHouse(db, house))
{
std::stringstream s;
s << "Unable to save house information, ID: " << house->getHouseId();
reportErrorFunc(s.str());
}
if(!IOMapSerialize::getInstance()->saveHouseItems(db, house))
{
std::stringstream s;
s << "Unable to save house items, ID: " << house->getHouseId();
reportErrorFunc(s.str());
}
lua_pushboolean(L, trans.commit());
return 1;
}
iomapserialize.cpp/saveHouseItems
Code:
bool IOMapSerialize::saveHouseItems(Database* db, House* house)
{
std::string config = asLowerCaseString(g_config.getString(ConfigManager::HOUSE_STORAGE));
if(config == "binary-tilebased")
{
DBQuery query;
query << "DELETE FROM `map_store` WHERE `house_id` = " << house->getHouseId()
<< " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID);
if(!db->executeQuery(query.str()))
return false;
DBInsert stmt(db);
stmt.setQuery("INSERT INTO `map_store` (`house_id`, `world_id`, `data`) VALUES ");
return saveHouseBinaryTileBased(db, stmt, house) && stmt.execute();
}
else if(config == "binary")
{
DBQuery query;
query << "DELETE FROM `map_store` WHERE `house_id` = "<< house->getHouseId()
<< " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID);
if(!db->executeQuery(query.str()))
return false;
DBInsert stmt(db);
stmt.setQuery("INSERT INTO `map_store` (`house_id`, `world_id`, `data`) VALUES ");
return saveHouseBinary(db, stmt, house) && stmt.execute();
}
DBQuery query;
query << "DELETE FROM `tile_items` WHERE `tile_id` IN (SELECT `id` FROM `houses` WHERE `id` = "
<< house->getHouseId() << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID)
<< ") AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID);
if(!db->executeQuery(query.str()))
return false;
query.str("");
query << "DELETE FROM `tiles` WHERE `house_id` = " << house->getHouseId()
<< " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID);
if(!db->executeQuery(query.str()))
return false;
query.str("");
query << "SELECT `id` FROM `tiles` WHERE `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << " ORDER BY `id` DESC LIMIT 1;";
DBResult* result;
if(!(result = db->storeQuery(query.str())))
return false;
uint32_t tileId = result->getDataInt("id") + 1;
db->freeResult(result);
return saveHouseRelational(db, house, tileId);
}
iomapserialize.cpp/saveHouseBinary
Code:
bool IOMapSerialize::saveHouseBinary(Database* db, DBInsert& stmt, House* house)
{
PropWriteStream stream;
for(HouseTileList::iterator tit = house->getHouseTileBegin(); tit != house->getHouseTileEnd(); ++tit)
{
if(!saveTile(stream, *tit))
continue;
}
uint32_t attributesSize = 0;
const char* attributes = stream.getStream(attributesSize);
if(!attributesSize)
return true;
DBQuery query;
query << house->getHouseId() << ", " << g_config.getNumber(ConfigManager::WORLD_ID)
<< ", " << db->escapeBlob(attributes, attributesSize);
return stmt.addRow(query);
}
iomapserialize.cpp/saveHouseBinaryTileBased
Code:
bool IOMapSerialize::saveHouseBinaryTileBased(Database* db, DBInsert& stmt, House* house)
{
for(HouseTileList::iterator tit = house->getHouseTileBegin(); tit != house->getHouseTileEnd(); ++tit)
{
PropWriteStream stream;
if(!saveTile(stream, *tit))
continue;
uint32_t attributesSize = 0;
const char* attributes = stream.getStream(attributesSize);
if(!attributesSize)
continue;
DBQuery query;
query << house->getHouseId() << ", " << g_config.getNumber(ConfigManager::WORLD_ID)
<< ", " << db->escapeBlob(attributes, attributesSize);
if(!stmt.addRow(query))
return false;
}
return true;
}
iomapserialize.cpp/saveHouseRelational
Code:
bool IOMapSerialize::saveHouseRelational(Database* db, House* house, uint32_t& tileId)
{
for(HouseTileList::iterator tit = house->getHouseTileBegin(); tit != house->getHouseTileEnd(); ++tit)
saveItems(db, tileId, house->getHouseId(), (*tit));
return true;
}