Jump to content
Close

marcot

Member
  • Content Count

    175
  • Joined

  • Last visited

  • Days Won

    4

marcot last won the day on February 2 2018

marcot had the most liked content!

5 Followers

About marcot

  • Rank
    Squire

Profile Information

  • Gender
    Masculino
  • I am
    Scripter

Recent Profile Visitors

605 profile views
  1. Não tem muito segredo então, só joga os dois comandos dentro de um arquivo de texto e salva ele com o formato .bat
  2. Qual erro apareceu na distro? [EDIT] Aliás, no 0.4 no actions.xml não é esse o formato? <action actionid="60999" event="script" value="parch.lua"/>
  3. Estranho isso, porque aqui funcionou direitinho, você tem certeza que alterou os scripts corretos e deu o reload spells? Sem arma depois da modificação: Com arma depois da modificação: Com arma antes da modificação: Sem arma antes da modificação:
  4. Por que você não abre diretamente o executável? Não dá certo? Tô meio desatualizado...
  5. local cfg = { playerStorage = 60999, globalStorage = 60999, time = 60 * 60 * 24, -- Tempo em segundos positions = { {x=33060, y=31623, z=15}, {x=33066, y=31623, z=15}, {x=33060, y=31627, z=15}, {x=33066, y=31627, z=15} } } function isCooldownReady() return os.time() > getGlobalStorageValue(cfg.globalStorage) end function onUse(cid, item, frompos, item2, topos) if not isCooldownReady() then return true end for _, t in pairs(cfg.positions) do doSummonCreature("Demon", t) end setPlayerStorageValue(cid, cfg.playerStorage, 1) setGlobalStorageValue(cfg.globalStorage, os.time() + cfg.time) end No script acima eu coloco como valor de storage o tempo atual somado ao tempo (segundos) necessário para a quest poder ser ativada novamente. Eu fiz uns testes bem básicos aqui com tempos pequenos (como de 10 segundos) e aparentemente funciona.
  6. @bpm91, outra coisa que eu esqueci de perguntar, você quer que o timer funcione de qual forma? Cada player pode invocar os monstros uma vez por dia; Os monstros só podem ser invocados uma vez por dia, independente do jogador que o tenha feito;
  7. Você poderia postar como ficou o script após a modificação?
  8. @bpm91 Sobre o baú de quest, você tem certeza de que não está funcionando? Porque por padrão vem um script chamado walkback.lua em movements que possui justamente essa finalidade pelo que entendi aqui. Sobre a parchment quest, existe algum script de gatilho para dar respawn nesses demons?
  9. @bpm91 Segue abaixo o script de exori que estou utilizando: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal * 0.5 + levelTotal), -(skillTotal * 1.5 + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Note que temos ali uma função onGetFormulaValues, onde temos uma tupla sendo atribuida às variáveis skillTotal e levelTotal, que recebem: skillTotal = skill + attack levelTotal = level / 5 Estou supondo que o parâmetro attack corresponde ao ataque da arma que o jogador tem equipada, então para tirar o ataque dela da fórmula simplesmente troco a função onGetFormulaValues por esta: function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill, level / 5 return -(skillTotal * 0.5 + levelTotal), -(skillTotal * 1.5 + levelTotal) end Teste no meu servidor e a arma, de fato, parou de influenciar no nível, mas é provável que você precise modificar a fórmula de damage.
  10. Eu recomendo você fazer consultas das funções enquanto estiver programando, porque isso dá uma noção enorme do como você vai fazer o seu código e quais são as limitações do LUA no otserver. Segue o link abaixo com a documentação do TFS 0.4: https://github.com/otservme/global860/blob/master/sources/doc/LUA_FUNCTIONS
  11. Ele está te dizendo aí que tentou chamar a função doSetItemActionId e disse que isso é um valor nil, porque se não me engano em LUA tudo que não tá criado é nulo. Não sei qual base está utilizando, mas a função de setar um action id para o TFS 0.4 é essa: doItemSetActionId(uid, aid) Onde uid é o unique id do item e aid possivelmente o id que você quer.
  12. Me soou como gambiarra esse script. Você chegou a testar dar use com 2 players, reiniciar o server, logar com apenas um dos jogadores e checara quantidade de cargas?
  13. Eu chutaria que isso foi problema ao tentar acessar alguma das DLLs, você editou a source?
  14. Vou tentar explicar essa parte do CID de uma forma mais prática, demonstrando diferenças entre C e C++ e você pode tirar suas conclusões. Considere o pedaço de código abaixo, escrito na linguagem C (usaremos short em vez de bool, porque é C) struct Player { int id; short isPremmium; }; Nesse caso temos um tipo de dado Player, com um id e uma flag indicando se o jogador possui premmium. Vamos agora declarar uma variável de tipo player: struct Player jogador; jogador.id = 0; jogador.isPremmium = 0; Agora, uma função que verificaria se esse jogador possui premmium ou não, ficaria mais ou menos assim: short isPremmium(struct Player jogador) { return jogador.isPremmium; } Por que o jogador foi passado como parâmetro? Oras, porque a função precisa dele para ter o acesso, variáveis globais não são uma boa prática! Agora, vamos levar para um caso que não precisaria, na linguagem C++ Considere o código abaixo, correspondente ao anterior: class Player { private: int id; bool isPremmium; public: Player(int id, bool isPremmy); bool isPremmium() { return this->isPremmium; } }; Nesse caso, para criar um jogador e verificar se ele tem premmium, teriamos o seguinte pedaço de código: // Criando jogador de id=0 e não tem premmy Player* player = new Player(0, false); if (player->isPremmy()) { // Código } Note que, apesar de isPremmy não ter parâmetro, ainda temos a referência do objeto player criado na linha 2, anterior ao "isPremmy". De uma forma ou outra, você precisa especificar qual é o jogador em questão, isso vem das próprias linguagens de programação! Caso não tenha entendido muito bem algumas expressões utilizadas, recomendo dar uma estudada no básico de algumas linguagens como C/C++/LUA e ver outras partes teóricas como Programação Orientada a Objetos (é um conceito bem fácil de ser compreendido, depois que você entendeu o básico).
  15. Testei no ambiente interativo de LUA -- Input Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio > for i=10,0,-1 do >> print('Hello') >> end -- Output Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello A variável I começa com 10, o loop acaba em 0 e o incremento é de -1 a cada loop. Note que repetiu o Hello 11 vezes.

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 partindo do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer publicidade 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! A publicação do seu anuncio é instantânea!

×
×
  • Create New...