Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. brun123

    Tempo Sqm

    Teste assim: local time = 3.25 -- tempo em minutos para o player ser expulso local newpos = {x=125,y=47,z=7} -- local para onde o player será teleportado local events = {} -- não modifique local function doKickPlayer(cid) events[cid] = nil if not isCreature(cid) then return true end doTeleportThing(cid, newpos, false) doSendMagicEffect(newpos, 10) end function onStepIn(cid, item, position, fromPosition) if events[cid] then return true end events[cid] = addEvent(doKickPlayer, time * 60 * 1000, cid) return true end O tempo não para caso já tenha iniciado
  2. Fiz um script aqui, ele é bem complexozinho e eu não testei, portanto é bem provável que dê alguns bugs: Use o mesmo XML que o Luck postou aqui e veja se funciona... Não se esqueça de configurar o npc! basta alterar aquela tabela "config" que tem várias variáveis com letra maiúscula
  3. aprendeu matemática na escola não? só fazer: local time = (segundos) / 60 bem simples não? se insiste tanto em ser por segundos, só remover lá embaixo, na função addEvent, esse trecho do tempo: * 60 que o time passa a contar como segundos, ou então você divide o próprio time por 60 como acabei de mostrar acima. dá tudo na mesma, matemática é bonito assim mesmo, não precisa falar
  4. só mudar: local time = 3 para local time = 3.25 SkyLigh, sua script vai dar um erro porque você deletou a declaração da variável "time" e usou ela no addEvent, vai dar erros. Ele não quer exaust, ele quer mudar o tempo que leva pro player ser teletransportado (com fins de ser removido de algum lugar). O seu script pode causar erros indesejados no console do server, caso o player morra ou dê logout antes do tempo ter passado. Pode ser usadado abusivamente também, caso o player fique pisando várias e várias vezes no mesmo tile onde a ação é executada, você vai criar uma série de addEvents que estão programados para ocorrer, aí se o player logar, todos esses addEvents vão dar erro e vai chover erro no server, pode até travar o servidor por algum tempo. Se vários players fizerem isso ao mesmo tempo, é capaz de criar um freeze tão grande que todos os players do server serão kickados ou pior, o server dá crash, meio improvável mas pode acontecer... Pra evitar abusos/erros, basta utilizar essa script corrigida: local time = 3.25 -- tempo em minutos para o player ser expulso local newpos = {x=125,y=47,z=7} -- local para onde o player será teleportado local events = {} -- não modifique local function doKickPlayer(cid) if not isCreature(cid) then events[cid] = nil return end doTeleportThing(cid, newpos, false) doSendMagicEffect(newpos, 10) end function onStepIn(cid, item, position, fromPosition) if events[cid] then stopEvent(events[cid]) end events[cid] = addEvent(doKickPlayer, time * 60 * 1000, cid) return true end
  5. cara é só colocar o mesmo action id, eles não tem mesmo id, tem o mesmo action id, significa que ao serem usados, todos vão executar a mesma script
  6. action id é só pro server ter referência de qual script executar quando tal item for usado, no caso o baú. Inventa um número qualquer pra action id, tipo 8753 que provavelmente não está sendo usado no seu server, coloca esse action id nos baús pelo map editor, coloca ele na tag do actions e pronto o storage é um bloco onde é armazenado informações sobre um certo player, e tem que ser um storage que não esteja sendo usado em outro script, mas esse número utilizado no storage provavelmente não está sendo utilizado então não se preocupe.
  7. Isso: <action actionid="XXXX" event="script" value="NOME_DO_SEU_SCRIPT.lua"/> Coloca um action id que não esteja sendo usado no seu server e muda o nome do seu script, ai você configura a script do jeito que eu falei no post acima e configura os baús no map editor, só colocar o action id neles
  8. Aqui: function onAdvance(cid, skill, oldLevel, newLevel) if skill == 8 then if newLevel % 3 == 0 then -- vai ganhar mp nos leveis 3, 6, 9, 12, 15, 18, 21... setCreatureMaxMana(cid, getCreatureMaxMana(cid) + 1) elseif newLevel % 2 == 0 then -- vai ganhar hp nos leveis 2, 4, 6, 8, 10, 12... setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) + 1) end end return true end
  9. Aqui: Basta alterar as configurações, colocar a tag no actions.xml (baseado em actionid) e colocar os baús no mapa e colocar em todos os baús o mesmo action id. Como configurar: basta editar essas linhas: {pos = {x = 1, y = 1, z = 1}, item = 2160, count = 1}, onde item é o id do item que o player vai ganhar, count é a quantidade e pos é a posição do baú que precisa dar use pra receber esse item.
  10. não dá pra ver a imagem, não precisa tirar print não só da ctrl c/v no texto e cola aqui, acabei de testar a script e funcionou normalmente, provavelmente é alguma incompatibilidade devido a diferença das versões utilizadas
  11. tem sim, basta mudar pro player ganhar 2 hp por level no vocations.xml e 0 de mana por level... aí você cria um script chamado levelup.lua em data/creaturescripts/scripts e coloca isso dentro: function onAdvance(cid, skill, oldLevel, newLevel) if skill == 8 and newLevel % 3 == 0 then setCreatureMaxMana(cid, getCreatureMaxMana(cid) + 1) end return true end Aí você coloca essa tag no seu creature scripts: <event type="advance" name="IncreaseManaOnLevelUp" event="script" value="levelup.lua"/> agora abra seu login.lua (data/creaturescripts/scripts) e adicione essa linha: registerCreatureEvent(cid, "IncreaseManaOnLevelUp") é só adicionar embaixo das outras vezes que essa função foi utilizada (registerCreatureEvent) Só um detalhe: Essa script faz com que o player ao atiginr level 3, 6, 9, 12, 15... 30... 60... ganha mais 1 de mana (máximo), ou seja, se o player começar no level 8, ao chegar no level 9 ele já ganha a mana extra... se quiser fazer com que o player ganhe a mana nos leveis 11, 14, 17, 20, 23... você tem que modificar essa linha do script: if skill == 8 and newLevel % 3 == 0 then por essa: if skill == 8 and (newLevel + 1) % 3 == 0 then Agora se o player começar no level 1, ele vai ganhar mana no level 3, ou seja, após upar 2 leveis, e só depois começa a ganhar de 3 em 3 leveis, se quiser que ele ganhe apenas no level 4, depois no 7, aí 10, 13, 16 etc... é só modificar aquela mesma linha por essa: if skill == 8 and (newLevel - 1) % 3 == 0 then qualquer dúvida só perguntar
  12. Tenta assim: Eu gosto dessa forma, usando tabelas... não precisa ficar guardando storage em database
  13. primeira coisa, você deve declarar ppos antes de declarar o pl1/pl2, pois esses dependem de ppos para ter valor atribuído. já que você quer pegar todas as posições de um ponto a outro ponto, precisamos fazer um loop que passe por todas as coordenadas dessa área. pra te ensinar, vou usar apenas o centro, ou seja, vou ignorar o pl1/pl2 e usar apenas o ppos: for VARIACAO_X = -3, 3 do local posicao = getThingPos(cid) posicao.x = posicao.x + VARIACAO_X end perceba que o código acima vai repetir 7 vezes, sendo que na primeira repetição, a variável declarada (VARIACAO_X) vai assumir valor -3, na segunda repetição vai ter valor -2, depois -1, aí 0, 1, 2 até finalmente chegar no 3 e parar de repetir. a cada repetição, eu vou criar uma local chamada posicao e ela vai ter as mesmas coordenadas do posição do player cid, e depois eu vou alterar apenas o campo "x" (lembrando que a posição não deixa de ser uma array, tabela no estilo {x = 700, y = 500, z = 7}), vou adicionar o valor atribuído à variável do loop, no caso VARIAVEL_X. já que serão 7 repetições, o código entre o loop vai ser executado 7x, e pra cada vez executado o VARIAVEL_X é somado ao campo X da posicao, ou seja, vão ser 7 posições criadas ao todo que vai de -3 até 3 (incluindo o 0). o resultado é que você vai obter 7 posições, 3 posições que seriam consecutivas (3 sqms à direita), a própria posição do player (pois somando o campo X com 0, não vai alterar nada) e 3 outras posições consecutivas (3 à esquerda), seria uma área assim: local area = { {0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0}} agora o que você pode fazer é combinar 2 loops, um dentro do outro, uma das variáveis do loop irá alterar o campo x, e outra o campo y: for VARIAVEL_X = -3, 3 do for VARIAVEL_Y = -2, 2 do local pos = getThingPos(cid) pos.x = pos.x + VARIAVEL_X pos.y = pos.y + VARIAVEL_Y end end Desse jeito você vai obter 35 posições diferentes alterando o campo X e Y ao mesmo tempo, formando uma área que se extende 2 sqms acima da posição do player e 2 sqms abaixo e ao mesmo tempo 3 sqms à esquerda e 3 à direita (isso não vai formar uma cruz, pois os loops estão um dentro do outro, eles são alterados em conjunto) formando uma área assim: local area = { {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 3, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}} para fazer de um ponto superior esquerdo até um ponto inferior direito, basta fazer um loop que vai do menor x (o mais à esquerda) até o maior x (o mais à direita) e dentro desse loop criar outra repetição que vai do menor y (mais acima) até o maior y (mais abaixo), e você não precisa fica alterando campo de uma outra posição, basta criar uma com os exatos valores das variáveis de loop x/y, e colocar o z que você quiser. Quando você tiver pego todas as posições, você pode ver se o tile é protection zone ou não (getTileInfo(sua_pos).protection), você consegue pegar a criatura que está na posição: local creature = getTopCreature(sua_pos) if isCreature(creature) then ... --funções como addHealth que é o que você pede no tópico end pode fazer o que você quiser nessa posição. com o tempo você vai descobrindo o que é possível fazer com os loops, por exemplo: se você utilizar o loop para alterar o x, e outro loop que não seja dentro desse primeiro pra alterar o y, você obteria uma posição no formato de uma cruz: local area = { {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0}}
  14. brun123

    Duvida Sobre Depot

    Essa função retorna o nº de itens, foi criada só pra quando o player pisar no tile que fica nos depots mostar "Your depot contains x items." Tem que pegar os itens usando a database, fala com o vodkart que o cara entende bem disso
  15. ????? caotic viajou pra longe em trocou usar item com matar monstro, action com creature script, porta com teleport, foi feia a coisa Não testei, vê aí se funciona só alterar as posições de cada porta
  16. brun123

    Me Ajudem.

    Se não for nenhuma creature script onDeath/onPrepareDeath que está retornando false, é algum bug no seu distro. Sabe verificar se há alguma creature script desse tipo registrado no monstro?
  17. Assim: Detalhe 1: sua script podia ser bem reduzida '' 2: se o player loga antes de executar a próxima talkaction (atráves do comando doCreatureExecuteTalkAction), vai dar erros no console. '' 3: se o player usar o comando continuadamente, irá acumular efeitos e apenas o efeito do primeiro irá ser finalizado, os outros vão continuar rodando infinitamente '' 4: o player fica repetindo as palavras da talkaction durante 10 segundos '' 5: tem uma função no meio com callback "magic" que não existe, vai dar erros no console Um jeito de se fazer que vai evitar muitos problemas:
  18. você tem que pegar o item type no dat editor e colocar no look type do monstro. 14582 é o cid da imagem, é um número pra jogo saber qual sprite o item tem, mas o id do item mesmo é outro. seu server provavelmente não tem mais que 1500 outfits, então o id não pode ser um número alto assim
  19. Por isso ele falou que pode te ajudar... Esse tópico pega todas as posições de uma area e lança efeito em cada uma dessas posições. Se você substituir a função doSendMagicEffect por doCreateItem... acho que já entendeu
  20. Basta substituir essa linha (1ª): function onStepIn(cid, item, fromPosition) por essa: function onStepIn(cid, item, position, fromPosition)
  21. Script: function onCastSpell(cid, var) local text = var.string:len() > 0 and var.string or false if not text then doPlayerSendCancel(cid, "Spell requires a player name!") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) return false end local player = getPlayerByNameWildcard(text) if not player then doPlayerSendCancel(cid, "A player with the name "..text:sub(1, 1):upper() .. text:sub(2, text:len()):lower().." is not online.") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) return false end doPlayerSendTextMessage(cid, 22, "Player "..getCreatureName(player).." has "..getCreatureMana(player).."/"..getCreatureMaxMana(player).." mana.") doSendMagicEffect(getThingPos(cid), 12) return true end Lembrando que na tag não pode ter selfTarget nem needTarget e nem casterTargetOrDirection, e precisa escrever isso na tag também: param="1" Exemplo de tag: <instant name="Get Mana" words="exiva mana" lvl="1" mana="0" prem="0" param="1" exhaustion="2000" needlearn="0" event="script" value="exivamana.lua"> </instant>
  22. Teste assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) --setCombatParam(combat, COMBAT_PARAM_EFFECT, 128) function onGetFormulaValues(cid, level, maglevel) min = -(level * 0.28 + maglevel * 1.48) * 1.4 max = -(level * 0.34 + maglevel * 2.34) * 1.4 return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) local tPos = var.pos or getThingPos(var.number) if tPos then tPos.x = tPos.x + 2 doSendMagicEffect(tPos, 128) end return doCombat(cid, combat, var) end Se esse não der certo, tente esse: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) --setCombatParam(combat, COMBAT_PARAM_EFFECT, 128) function onGetFormulaValues(cid, level, maglevel) min = -(level * 0.28 + maglevel * 1.48) * 1.4 max = -(level * 0.34 + maglevel * 2.34) * 1.4 return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) local tPos = isCreature(getCreatureTarget(cid)) and getThingPos(getCreatureTarget(cid)) or false if tPos then tPos.x = tPos.x + 2 doSendMagicEffect(tPos, 128) end return doCombat(cid, combat, var) end
  23. Acabei de testar aqui e funcionou certinho... Do seu jeito não funciona porque você escreveu isso: if msgcontains(msg, 'missao') then if msgcontains(msg, 'ok') then --impossível a mesma mensagem ser "missão" e "ok" end end hi missao ok ele responde numa boa aqui... se tiver com storage -1, ele manda ir embora, ai mudei pra 1 e ele pediu pra levar ham pro outro npc
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...