Ir para conteúdo

WooX

Héroi
  • Registro em

  • Última visita

Tudo que WooX postou

  1. O seu funciona de maneira linear, se seu mapa não possui voids entre areas talvez o seu seja sim mais rápido, mas o dele é mais eficiente de um modo geral pois tenta teleportar o player apenas para lugares em que ele pode de fato pisar e faz outras verificações de segurança, a chance é bem remota mas seu script pode teleportar o player pra cima de um teleporte e não abrir certa parte do mapa por exemplo. Em outra oportunidade faça o teste em outro mapa, de preferencia um mapa com muitas ilhas e pouca água em volta, seu mapa de 15x20k levou mais de 3 horas pra scannear 13% do mapa, no benchmark dele ele scanneou um mapa global full de 173MB em 33 minutos.
  2. Não é necessário, da pra fazer utilizando o callback onTargetCreature. Fiz com base na spell "exevo gran mas vis" do Tibia, os parâmetros da spell podem ser alterados. --[[ <instant name="Remove Target" words="gtfo" lvl="55" mana="650" selftarget="1" prem="0" exhaustion="1800" needlearn="0" event="script" value="support/remove_target.lua"> <vocation id="1"/> <vocation id="5"/> </instant> ]] local config = { blockTarget = true, blockTime = 5, -- Segundos affectAllies = false, affectTargetCasterOnly = false -- Se marcado como true ira remover o target somente de quem estiver atacando o usuario da spell } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 8, 5, 7, 11) function onTargetCreature(cid, target) if config.affectTargetCasterOnly and getCreatureTarget(target) ~= cid then return false end if not config.affectAllies then local partyMembers = getPartyMembers(cid) if getPlayerGuildId(cid) == getPlayerGuildId(target) or isInArray(partyMembers, target) then return false end end if config.blockTarget then setPlayerStorageValue(target, 234512, os.time() + config.blockTime) end --errors(false) doPlayerTargetCreature(target, target) --errors(true) return true end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") local area = createCombatArea(AREA_CROSS6X6) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end
  3. solução simples e eficiente, ta de parabéns.
  4. Bom, outros alem de você vieram me pedir o link também, hoje eu vi que recentemente um membro da equipe postou um link para o dito fórum, então acho que não teria problema eu postar também. https://otland.net/threads/tfs-1-2-minimap-generator-map-scanner.262275/
  5. Me recordo de uma versão feita pelo Gesior na gringa, na época cheguei a testar e era bem eficiente, não sei se posso mandar link de outro forum aqui, te mandei por mensagem privada.
  6. WooX postou uma resposta no tópico em Websites
    Sim, mas tudo que o site faz é "comunicar" ao servidor os items a serem entregues, o site faz isso adicionando as informações na tabela z_ots_comunication, eu testei aqui e essa parte está funcionando corretamente tanto pra items de quantidade como pra items dentro de container, se a entrega não está sendo realizada é um problema do seu servidor e não do site.
  7. WooX postou uma resposta no tópico em Websites
    A entrega de items é feita pelo server não pelo site.
  8. WooX postou uma resposta no tópico em Suporte Tibia OTServer
    Muito estranho, certifique-se de que a guild aparece no banco de dados após a criação.
  9. Daria sim, como mencionado acima seria só fazer o player targetar a si mesmo, a source faz o resto do trabalho e cancela o target dele.
  10. WooX postou uma resposta no tópico em Mapping Show Off
    Top! Agora quero ver um mapa da versão 7.4.
  11. Não sou eu no vídeo, é o @Yan Liima. Acredito que seja alguma injeção de DLL no client, tenta mandar uma mensagem pra ele.
  12. Apenas complementando a explicação do @Movie, a função que busca o valor de uma storage pode retornar tanto nil (nulo) ou -1 quando o jogador não possui essa storage, e qualquer valor que não seja nulo vai fazer o if retornar verdadeiro, seja esse valor 0 ou até mesmo valores negativos.
  13. Essa função adiciona ou altera o alvo de um jogador, ou seja faz ele atacar quem você definir. A utilidade da função depende da sua criatividade, daria pra fazer uma talkaction onde o player pode escolher seu target "!attack Joaozinho" ou uma spell de Genjutsu para derivados de Naruto onde altera o target do alvo, fazendo ele pensar que está atacando alguém quando na verdade está atacando outro, o limite das possibilidades é sua criatividade. Sim, daria.
  14. Pois é, eu fiquei até surpreso de não existir essa função visto que já existe em C++ na source. Eu estou escrevendo um evento que talvez precisasse manipular o target do player e ai percebi que não tinha nenhuma função Lua pra isso, no fim acabei decidindo nem usar isso ai mas decidi postar, pode acabar sendo útil pra alguém.
  15. doPlayerTargetCreature(cid, target) Essa função adiciona um target ao jogador ou altera caso este já possua um target. Instalação No arquivo luascript.cpp da source procure por: //doPlayerFollowCreature(cid, target) lua_register(m_luaState, "doPlayerFollowCreature", LuaInterface::luaDoPlayerFollowCreature); Acima adicione: //doPlayerTargetCreature(cid, target) lua_register(m_luaState, "doPlayerTargetCreature", LuaInterface::luaDoPlayerTargetCreature); Depois procure por: int32_t LuaInterface::luaDoPlayerFollowCreature(lua_State* L) E adicione acima: int32_t LuaInterface::luaDoPlayerTargetCreature(lua_State* L) { //doPlayerTargetCreature(cid, target) ScriptEnviroment* env = getEnv(); Creature* creature = env->getCreatureByUID(popNumber(L)); if(!creature) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Player* player = env->getPlayerByUID(popNumber(L)); if(!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } lua_pushboolean(L, g_game.playerSetAttackedCreature(player->getID(), creature->getID())); return 1; } Agora no arquivo luascript.h da source procure por: static int32_t luaDoPlayerFollowCreature(lua_State* L); E adicione acima: static int32_t luaDoPlayerTargetCreature(lua_State* L); Pronto, agora basta compilar e a função vai estar pronta pra ser usada.
  16. WooX postou uma resposta no tópico em Suporte Tibia OTServer
    É necessário reiniciar o processo do mysql após rodar essa query e o servidor precisa estar offline. service mysql restart Não entendi, você quer criar mais de uma guild no mesmo char?
  17. Feito. Boa, valeu.
  18. Verifica se o callback onTextEdit existe no TFS 0.3.6, busca por ele no arquivo creatureevent.cpp da sua source.
  19. Não, acho mais pratico pro jogador escrever a senha no quadro do que digitar talkaction + senha, mas posso fazer uma pra contornar esse problema no TFS 0.4 e inferiores.
  20. Tem sim, pra utilizar a função doShowTextDialog da maneira como está no sistema você vai precisar alterar ela na source, o @Yan Liima me alertou sobre isso até no TFS 0.4 e adicionou as alterações na source editada por ele, da uma olhada lá. https://github.com/YaanLiima/3996/commit/2038e058cc46afd58f9d7c1e8838093f4809dcaf Como alternativa você pode usar um quadro real ao invés da função doShowTextDialog, basta alterar a variável de configuração useBoard para true na lib do sistema. Não, a criação e alteração de senhas funciona através do NPC.
  21. Ta usando TFS 0.4 né?
  22. O problema pode ter sido com uma coluna em especifico e não com a tabela guilds toda, por isso recomendei descobrir o problema através do debug, mas se deu bom beleza.
  23. WooX postou uma resposta no tópico em Mapping Show Off
    O que você faz é arte, impecável. Muito foda esse mapa, não vejo a hora de ver online.

Informação Importante

Confirmação de Termo