Jump to content
Close

louco3626

Member
  • Content Count

    153
  • Joined

  • Last visited

1 Follower

About louco3626

  • Rank
    Nettynho
  • Birthday 06/05/1996

Profile Information

  • Gender
    Masculino
  • I am
    Tibiano
  • My character
    Apsu
  • Favorite OTServ
    PXG
  • Bot preferred
    Nao tem

Recent Profile Visitors

467 profile views
  1. O que pode ser isso? [17/10/2019 00:44:19] [Error - GlobalEvent Interface] [17/10/2019 00:44:19] datapack/globalevents/scripts/safezone.lua [17/10/2019 00:44:19] Description: [17/10/2019 00:44:19] datapack/lib/events/safezone.lua:6: attempt to call global 'Position' (a nil value) [17/10/2019 00:44:19] [Warning - Event::loadScript] Cannot load script (datapack/globalevents/scripts/safezone.lua)
  2. Agora esta dando esse outro erro [28/09/2019 11:38:10] [Error - TalkAction Interface] [28/09/2019 11:38:10] datapack/talkactions/scripts/move1.lua:onSay [28/09/2019 11:38:10] Description: [28/09/2019 11:38:10] (luaDoTeleportThing) Thing not found [28/09/2019 11:38:10] [Error - TalkAction Interface] [28/09/2019 11:38:10] datapack/talkactions/scripts/move1.lua:onSay [28/09/2019 11:38:10] Description: [28/09/2019 11:38:10] (luaDoCreatureSetLookDir) Creature not found Alguém ajuda
  3. meu Pokemon moves não tem a função min = getSpecialAttack(cid) * table.f * 0.1 --alterado v1.6
  4. .Qual servidor ou website você utiliza como base? Nao sei se é possivel porem estou tentando coloca no ZR Qual o motivo deste tópico? Adicionei tudo direitinho eu clico a Stone some e tudo, porem não aparece a evolução e da esse erro. Está surgindo algum erro? Se sim coloque-o aqui. Você tem o código disponível? Se tiver publique-o aqui: Troque o código da função getNewMoveTable(table, n) por este: function getNewMoveTable(table, n) if table == nil then return false end local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} local returnValue = moves if n then returnValue = moves[n] end return returnValue end No código da função doUpdateMoves(cid), troque o segundo: table.insert(ret, "n/n,") por: local mEvolve if not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then if not isInArray(ret, "Mega Evolution,") then table.insert(ret, "Mega Evolution,") mEvolve = true end end if not mEvolve then table.insert(ret, "n/n,") end Depois, em pokemon moves.lua: Troque: min = getSpecialAttack(cid) * table.f * 0.1 --alterado v1.6 por: min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1 --alterado v1.6 Código da spell: elseif spell == "Mega Evolution" then local effect = xxx --Efeito de mega evolução. if isSummon(cid) then local pid = getCreatureMaster(cid) if isPlayer(pid) then local ball = getPlayerSlotItem(pid, 8).uid if ball > 0 then local attr = getItemAttribute(ball, "megaStone") if attr and megaEvolutions[attr] then local oldPosition, oldLookdir = getThingPos(cid), getCreatureLookDir(cid) doItemSetAttribute(ball, "poke", megaEvolutions[attr][2]) doSendMagicEffect(getThingPos(cid), effect) doRemoveCreature(cid) doSummonMonster(pid, megaEvolutions[attr][2]) local newPoke = getCreatureSummons(pid)[1] doTeleportThing(newPoke, oldPosition, false) doCreatureSetLookDir(newPoke, oldLookdir) adjustStatus(newPoke, ball, true, false) if useKpdoDlls then addEvent(doUpdateMoves, 5, pid) end end end end end Depois, em configuration.lua: megaEvolutions = { --[itemid] = {"poke_name", "mega_evolution"}, [11638] = {"Charizard", "Mega Charizard X"}, [11639] = {"Charizard", "Mega Charizard Y"}, } Agora, em data/actions/scripts, código da mega stone: function onUse(cid, item) local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid if not mEvolution then return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.") elseif ball < 1 then return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.") elseif #getCreatureSummons(cid) > 0 then return doPlayerSendCancel(cid, "Return your pokemon.") elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.") elseif getItemAttribute(ball, "megaStone") then return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.") end doItemSetAttribute(ball, "megaStone", item.itemid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".") doRemoveItem(item.uid) return true end Depois, em goback.lua: Abaixo de: if not pokes[pokemon] then return true end coloque: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end Depois, em data/creaturescripts/scripts, look.lua: Abaixo de: local boost = getItemAttribute(thing.uid, "boost") or 0 coloque: local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone") if megaStone then extraInfo = getItemNameById(megaStone) if pokename:find("Mega") then pokename = megaEvolutions[megaStone][1] end end Depois, acima do primeiro: doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) coloque: if extraInfo ~= "" then table.insert(str, "\nIt's holding a(n) "..extraInfo..".") end Já em data/talkactions/scripts, move1.lua: Abaixo de: function doAlertReady(cid, id, movename, n, cd) coloque: if movename == "Mega Evolution" then return true end Troque: if not move then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end por: if not move then local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") if not isMega or name:find("Mega") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local moveTable, index = getNewMoveTable(movestable[name]), 0 for i = 1, 12 do if not moveTable[i] then index = i break end end if tonumber(it) ~= index then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local needCds = true --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown. if needCds then for i = 1, 12 do if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.") end end end move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} end E troque: doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) por: local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!" if move.name == "Mega Evolution" then spellMessage = "Mega Evolve!" end doCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY) Se quiser que o "Mega" não apareça no nome do pokémon, vá em data/lib, level system.lua: Acima de: if getItemAttribute(item, "nick") then nick = getItemAttribute(item, "nick") end coloque: if nick:find("Mega") then nick = nick:match("Mega (.*)") if not pokes[nick] then nick = nick:explode(" ")[1] end end Caso queiram que cada mega evolução tenha um clan específico: Em move1.lua, acima de: move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} coloque: local megaEvoClans = { --[mega_stone_id] = "clan_name", [91912] = "Volcanic", [91913] = "Seavell", --etc, } if megaEvoClans[isMega] then if getPlayerClanName(cid) ~= megaEvoClans[isMega] then return doPlayerSendCancel(cid, "You can't mega evolve this pokemon.") end end Bem, é isso aí. Acho que não esqueci de nada. Até mais. Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  5. .Qual servidor ou website você utiliza como base? Qual quer base esta dando a mesma coisa.. já tentei em muitas 😕 Qual o motivo deste tópico? Estou tentando Compila no DEV CCP ja fiz todos tutorial que tem em forum e sempre da a mesma coisa. Está surgindo algum erro? Se sim coloque-o aqui. Você tem o código disponível? Se tiver publique-o aqui: //////////////////////////////////////////////////////////////////////// // OpenTibia - an opensource roleplaying game //////////////////////////////////////////////////////////////////////// // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. //////////////////////////////////////////////////////////////////////// // C++ Implementation: databaseodbc // Description: Frontend for ODBC connections // // Author: Bruno R Ferreira <brf_coldf@yahoo.com.br>, (C) 2007 //////////////////////////////////////////////////////////////////////// #include "otpch.h" #include <iostream> #include "database.h" #include "databaseodbc.h" #include "configmanager.h" extern ConfigManager g_config; #define RETURN_SUCCESS(ret) (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) DatabaseODBC::DatabaseODBC() { m_connected = false; char* dns = new char[SQL_MAX_DSN_LENGTH]; char* user = new char[32]; char* pass = new char[32]; strcpy((char*)dns, g_config.getString(ConfigManager::SQL_DB).c_str()); strcpy((char*)user, g_config.getString(ConfigManager::SQL_USER).c_str()); strcpy((char*)pass, g_config.getString(ConfigManager::SQL_PASS).c_str()); SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_env); if(!RETURN_SUCCESS(ret)) { std::cout << "Failed to allocate ODBC SQLHENV enviroment handle." << std::endl; m_env = NULL; return; } ret = SQLSetEnvAttr(m_env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0); if(!RETURN_SUCCESS(ret)) { std::cout << "SQLSetEnvAttr(SQL_ATTR_ODBC_VERSION): Failed to switch to ODBC 3 version." << std::endl; SQLFreeHandle(SQL_HANDLE_ENV, m_env); m_env = NULL; } if(m_env == NULL) { std::cout << "ODBC SQLHENV enviroment not initialized." << std::endl; return; } ret = SQLAllocHandle(SQL_HANDLE_DBC, m_env, &m_handle); if(!RETURN_SUCCESS(ret)) { std::cout << "Failed to allocate ODBC SQLHDBC connection handle." << std::endl; m_handle = NULL; return; } ret = SQLSetConnectAttr(m_handle, SQL_ATTR_CONNECTION_TIMEOUT, (SQLPOINTER*)5, 0); if(!RETURN_SUCCESS(ret)) { std::cout << "SQLSetConnectAttr(SQL_ATTR_CONNECTION_TIMEOUT): Failed to set connection timeout." << std::endl; SQLFreeHandle(SQL_HANDLE_DBC, m_handle); m_handle = NULL; return; } ret = SQLConnect(m_handle, (SQLCHAR*)dns, SQL_NTS, (SQLCHAR*)user, SQL_NTS, (SQLCHAR*)pass, SQL_NTS); if(!RETURN_SUCCESS(ret)) { std::cout << "Failed to connect to ODBC via DSN: " << dns << " (user " << user << ")" << std::endl; SQLFreeHandle(SQL_HANDLE_DBC, m_handle); m_handle = NULL; return; } m_connected = true; } DatabaseODBC::~DatabaseODBC() { if(m_connected) { SQLDisconnect(m_handle); SQLFreeHandle(SQL_HANDLE_DBC, m_handle); m_handle = NULL; m_connected = false; } SQLFreeHandle(SQL_HANDLE_ENV, m_env); } bool DatabaseODBC::getParam(DBParam_t param) { switch(param) { case DBPARAM_MULTIINSERT: default: break; } return false; } bool DatabaseODBC::beginTransaction() { return true; // return executeQuery("BEGIN"); } bool DatabaseODBC::rollback() { return true; // SQL_RETURN ret = SQLTransact(m_env, m_handle, SQL_ROLLBACK); // return RETURN_SUCCESS(ret); } bool DatabaseODBC::commit() { return true; // SQL_RETURN ret = SQLTransact(m_env, m_handle, SQL_COMMIT); // return RETURN_SUCCESS(ret); } bool DatabaseODBC::executeQuery(const std::string& query) { if(!m_connected) return false; #ifdef __SQL_QUERY_DEBUG__ std::cout << "ODBC QUERY: " << query << std::endl; #endif SQLHSTMT stmt; SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_STMT, m_handle, &stmt); if(!RETURN_SUCCESS(ret)) { std::cout << "Failed to allocate ODBC SQLHSTMT statement." << std::endl; return false; } std::string buf = _parse(query); ret = SQLExecDirect(stmt, (SQLCHAR*)buf.c_str(), buf.length()); if(!RETURN_SUCCESS(ret)) { std::cout << "SQLExecDirect(): " << query << ": ODBC ERROR." << std::endl; return false; } return true; } DBResult* DatabaseODBC::storeQuery(const std::string& query) { if(!m_connected) return NULL; #ifdef __SQL_QUERY_DEBUG__ std::cout << "ODBC QUERY: " << query << std::endl; #endif SQLHSTMT stmt; SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_STMT, m_handle, &stmt); if(!RETURN_SUCCESS(ret)) { std::cout << "Failed to allocate ODBC SQLHSTMT statement." << std::endl; return NULL; } std::string buf = _parse(query); ret = SQLExecDirect(stmt, (SQLCHAR*)buf.c_str(), buf.length() ); if(!RETURN_SUCCESS(ret)) { std::cout << "SQLExecDirect(): " << query << ": ODBC ERROR." << std::endl; return NULL; } DBResult* results = (DBResult*)new ODBCResult(stmt); return verifyResult(results); } std::string DatabaseODBC::escapeBlob(const char *s, uint32_t length) { std::string buf = "'"; for(uint32_t i = 0; i < length; i++) { switch(s) { case '\'': buf += "\'\'"; break; case '\0': buf += "\\0"; break; case '\\': buf += "\\\\"; break; case '\r': buf += "\\r"; break; case '\n': buf += "\\n"; break; default: buf += s; } } buf += "'"; return buf; } std::string DatabaseODBC::_parse(const std::string& s) { std::string query = ""; query.reserve(s.size()); bool inString = false; for(uint32_t a = 0; a < s.length(); a++) { uint8_t ch = s[a]; if(ch == '\'') { if(inString && s[a + 1] != '\'') inString = false; else inString = true; } if(ch == '`' && !inString) ch = '"'; query += ch; } return query; } int32_t ODBCResult::getDataInt(const std::string& s) { listNames_t::iterator it = m_listNames.find(s); if(it != m_listNames.end()) { int32_t value; SQLRETURN ret = SQLGetData(m_handle, it->second, SQL_C_SLONG, &value, 0, NULL); if(RETURN_SUCCESS(ret)) return value; else std::cout << "Error during getDataInt(" << s << ")." << std::endl; } std::cout << "Error during getDataInt(" << s << ")." << std::endl; return 0; // Failed } int64_t ODBCResult::getDataLong(const std::string& s) { listNames_t::iterator it = m_listNames.find(s); if(it != m_listNames.end()) { int64_t value; SQLRETURN ret = SQLGetData(m_handle, it->second, SQL_C_SBIGINT, &value, 0, NULL); if(RETURN_SUCCESS(ret)) return value; else std::cout << "Error during getDataLong(" << s << ")." << std::endl; } std::cout << "Error during getDataLong(" << s << ")." << std::endl; return 0; // Failed } std::string ODBCResult::getDataString(const std::string& s) { listNames_t::iterator it = m_listNames.find(s); if(it != m_listNames.end()) { char* value = new char[1024]; SQLRETURN ret = SQLGetData(m_handle, it->second, SQL_C_CHAR, value, 1024, NULL); if(RETURN_SUCCESS(ret)) { std::string buff = std::string(value); return buff; } else std::cout << "Error during getDataString(" << s << ")." << std::endl; } std::cout << "Error during getDataString(" << s << ")." << std::endl; return std::string(""); // Failed } const char* ODBCResult::getDataStream(const std::string& s, uint64_t& size) { listNames_t::iterator it = m_listNames.find(s); if(it != m_listNames.end()) { char* value = new char[1024]; if(RETURN_SUCCESS(SQLGetData(m_handle, it->second, SQL_C_BINARY, value, 1024, (SQLLEN*)&size))) return value; } std::cout << "Error during getDataStream(" << s << ")." << std::endl; size = 0; return 0; // Failed } void ODBCResult::free() { if(m_handle) { SQLFreeHandle(SQL_HANDLE_STMT, m_handle); delete this; } else std::cout << "[Warning - ODBCResult::free] Trying to free already freed result." << std::endl; } bool ODBCResult::next() { SQLRETURN ret = SQLFetch(m_handle); return RETURN_SUCCESS(ret); } ODBCResult::ODBCResult(SQLHSTMT stmt) { if(!res) { delete this; return; } m_handle = stmt; int16_t numCols = 0; SQLNumResultCols(m_handle, &numCols); for(int32_t i = 1; i <= numCols; i++) { char* name = new char[129]; SQLDescribeCol(m_handle, i, (SQLCHAR*)name, 129, NULL, NULL, NULL, NULL, NULL); m_listNames[name] = i; } } Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  6. quando eu apago isso ela da muitos erros diferentes
  7. Essa é aquela permanente? que fica na troca de Outfits?
  8. Galera não sei se ta na área correta, 😕 estou com um problema a tenta compilar Source Obs: A primeira vez que estou Tentando, e olhei alguns tutoriais mesmo fazendo tudo certinho sempre da esse erro.
  9. TO com esse mesmo erro pode me ajuda?
  10. Alguém ajuda? Source\databaseodbc.cpp *** [Obs/databaseodbc.o] Error 1 if(!res)

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...