esta e bem boa!
sempre rola essa merda de ter de reorganiza a house.. boa novamente matheus
Por MatheusEnjoy, 19 de jul. de 2012 em Linguagens de Programação
info
Grupo: Grão-Duque
Registrado: 28/07/11
Posts: 3.5k
Reputação: +570
Gênero: Masculino
Char no Tibia: Transloko

esta e bem boa!
sempre rola essa merda de ter de reorganiza a house.. boa novamente matheus
info
Grupo: Campones
Registrado: 24/12/10
Posts: 11
Reputação: +1
Gênero: Masculino

Não funciona no 0.4
info
Grupo: Visconde
Registrado: 07/08/11
Posts: 301
Reputação: +70

Nome: Dosavehouse(Houseid)Versão: 1.0
Código: Powers
Forum Origem: OTLand.net
Versão: Testado no TFS 0.3.4 e já Implementado no TFS 0.4.
Descrição: O comando pode ser usado, por exemplo, se um jogador organizar os itens na casa, e se o server crecha é o que você salvou.
Bom vamos ao tutorial:
Apenas useHouseDataStorage = "no" / Falso
Funciona apenas em servidor MySQL.
luascript.h:
luascript.cpp:
//doSaveHouse({list}) lua_register(m_luaState, "doSaveHouse", LuaScriptInterface::luaDoSaveHouse);int32_t LuaScriptInterface::luaDoSaveHouse(lua_State* L) { //doSaveHouse(houseID) if(g_config.getBool(ConfigManager::HOUSE_STORAGE)) { std::stringstream s; s << "config: useHouseDataStorage must be = no/false"; reportErrorFunc(s.str()); lua_pushboolean(L, false); } 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::getInstance(); 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:Substitua de:
Por:
bool IOMapSerialize::saveHouseItems(Database* db, House* house) { if(g_config.getBool(ConfigManager::HOUSE_STORAGE)) return false; DBTransaction trans(db); if(!trans.begin()) return false; DBQuery query; query << "DELETE FROM `tile_items` WHERE `tile_id` IN (SELECT `id` FROM `tiles` WHERE `house_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()))) uint32_t tileId = 0; uint32_t tileId = result->getDataInt("id")+1; result->free(); return saveHouseRelational(db, house, tileId); } 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; }iomapserialize.h :Abaixo de:
Adicione:
Exemplo de uso: (Em talkaction)
Código Lua:
Editado Abril 21 por MatheusEnjoy