Ir para conteúdo

Wise

Membro
  • Registro em

  • Última visita

Tudo que Wise postou

  1. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Eu escrevi em inglês..seria revive mesmo. Não importa como você nomeia o arquivo, desde que ele coincida com o arquivo Lua que contém o script. Que erros? Nos informe se possível.
  2. A estrutura de controle que você usou pra checar o valor do itemID, não precisa ser feita já que a própria tag o determina (por ser apenas um itemID usado na action, isso se torna inútil). E de qualquer forma, não justifica os demais erros. Mas tudo bem, não leve isso para o lado pessoal. Obrigado por contribuir. presentbox.lua function onUse(cid, item, fromPos, toPos) local coins = {1, 30} -- {quantia mínima, quantia máxima} local items = {2160, 2472, 2470} -- {items} local mr = items[math.random(1, #items)] if mr == 2160 then doPlayerAddItem(cid, 2160, math.random(coins[1], #coins)) doSendMagicEffect(fromPos, CONST_ME_GIFT_WRAPS) doCreatureSay(cid, 'Congratulations!', TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) else doPlayerAddItem(cid, mr, 1) doSendMagicEffect(fromPos, CONST_ME_GIFT_WRAPS) doCreatureSay(cid, 'Congratulations!', TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) end return true end <action itemid="8110" script="presentbox.lua"/> @TsplayerT Não havia lido sua mensagem. É sim, amigo
  3. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Ok. Lembrando que eu apenas peguei como base o script do membro, os códigos iniciais são dele. Disponha.
  4. Sim. Veja: if(tmpStrValue == "venom" || atoi(strValue.c_str()) == 1) mType->race = RACE_VENOM; venom é o que foi usado pra declarar essa raça, correto? Então basta alterar tudo o que foi declarado como sendo venom, em ordem sequencial. Exemplo: else if(tmpStrValue == "suicide" || atoi(strValue.c_str()) == 6) mType->race = RACE_SUICIDE; Repita o mesmo processo com as demais etapas.
  5. Você tem de criar a spell e configurar pra essa determinada vocação conseguir conjurá-la. Como exatamente você quer que ela aconteça? Seja específico e não poupe detalhes.
  6. Desculpa, mas isso não tem lógica pra mim. Você fez uma checagem que a própria tag já determina (já que é um único itemID), encerrou-a sem nenhum bloco dentro do escopo e depois encerrou o callback com mais funções, retorno e uma estrutura de controle de fora? De qualquer forma, parabéns pela atitude de tentar ajudar outros membros. Ficaria assim: function onUse(cid, item, fromPos, toPos) local items = {2160, 6000, 6958} doPlayerAddItem(cid, items[math.random(1, #items)], 1) doSendMagicEffect(fromPos, CONST_ME_GIFT_WRAPS) doCreatureSay(cid, 'Congratulations!', TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) return true end
  7. Wise respondeu ao post em um tópico de ducb em Suporte Tibia OTServer
    E como seria esse efeito? Um shoot type (distance effect)? Eu não conheço muito sobre servidores derivados, então especifique por favor. Se você detalhar, eu posso te ajudar melhor.
  8. Disponha. Já que a dúvida foi solucionada, por favor clique no botão que está localizado abaixo do post de quem te ajudou. Automaticamente ele irá ficar destacado como a melhor resposta e o tópico ficará com o prefixo "Resolvido" no início do título. Abraços.
  9. Antes de mais nada, você vai precisar editar sua source. Dê uma olhada no tópico Two Weapons System.
  10. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    @Unico BR Tudo o que utilizamos nos scripts, basicamente foram storages e uma condição. Nada que inclua ou interfira nas vocações.
  11. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Tinha acusado aquele erro antes, porque eu esqueci de adicionar o parâmetro fromPos ao callback. Foi falha minha e já corrigi. Agora esse erro não tem relação alguma com o meu script, amigo. Verifique os parâmetros do seu vocations.xml pra garantir se não tem nada incorreto.
  12. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
  13. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Ah, me desculpe. Eu acabei lendo errado e entendi que você queria que houvesse uma certa possibilidade do player receber um amulet of loss ao puxar a alavanca. Enfim, já ajustei. Falha minha, faltou um parâmetro: local t = { item = {2173, 1}, -- {itemID, quantidade) stor = {12128, 12129} -- {zombie storage, human storage} } function onUse(cid, item, fromPos, toPos) if getPlayerStorageValue(cid, t.stor[1]) > 0 or getPlayerStorageValue(cid, t.stor[2]) > 0 then doPlayerAddItem(cid, t.item[1], t.item[2]) setPlayerStorageValue(cid, t.stor[1], -1) setPlayerStorageValue(cid, t.stor[2], -1) doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(toPos, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You were revived! Now you are a human again.') else doSendMagicEffect(fromPos, CONST_ME_POFF) doPlayerSendCancel(cid, "Only zombies can use this lever.") end return true end
  14. newfood.lua (data/actions/scripts): function onUse(cid, item) local percent = 0.1 -- 10% if getCreatureHealth(cid) == getCreatureMaxHealth(cid) then return doPlayerSendCancel(cid, 'Your life is full.') end doCreatureAddHealth(cid, (getCreatureMaxHealth(cid) * percent)) doCreatureSay(cid, 'Mmmm.', TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) return true end Tag - actions.xml (data/actions): <action itemid="ITEMID" script="newfood.lua"/> Ops! Corrigi um erro de desatenção minha.
  15. Não que eu não saiba, mas não tá executando corretamente no seu servidor. Isso não tem lógica, já que tudo coincide. Tem certeza de que esse é o único arquivo com script de "order" do seu servidor? Pergunto, pois sei que há servidores que contém múltiplos scripts de um mesmo sistema. A diferença é que um está habilitado e o outro não. Um exemplo: anihilator. Uma vez, usei um servidor base que continha 5 scripts e só 1 operava como sendo a action. Então verifique de novo, só pra garantir e pra que eu possa te ajudar a resolver isso.
  16. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Disponha, meu caro amigo. Abraços.
  17. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    Sim, exatamente. Zombie storage seria quando ele estivesse na condição, já human storage, a que ele retorna ao "controle" do outfit do personagem. Foi apenas uma descrição, relaxa, as funções não se alteraram e tudo coincide com os seus códigos ;]
  18. Acredito que seria: function getNots(cid) local accountId = getAccountNumberByPlayerName(cid) local nots = db.storeQuery("SELECT `qntnot` FROM `accounts` WHERE `id` = " .. accountId) if (nots == nil or nots < 0) then nots = 0 end return nots end
  19. Eis a questão, meu caro @Orochi Elf. Acredito que isso pode variar.
  20. 0100001101101111011001000110010101110011001000000110010001100101011101100110010101101100011011110111000001100101011001000010000001100010011110010010000001010011011101010110100101100011011010010110010001100101 Eu observei que muitos desconhecem a New Library v. 1.2, feita por (um grande amigo e programador/scripter) xWhiteWolf. Então resolvi fazer o uso de algumas de suas funções para tentar expandir o reconhecimento da existência delas, que podem ser muito úteis em diversas situações. Bom, "loop effect" é uma função com uma condição de teste verdadeira que nunca termina (loop) sobre um shoot type effect (os distance effects). Quando aplicada a um creatureID, gera efeitos de distância infinitos nas posições entorno do mesmo. Porém, eu fiz pequenas alterações na função original para ficar adequada à talkaction. Primeiramente, adicione as seguintes funções à sua lib, no arquivo 050-function.lua (data/lib): function loopEffect(uid, effect, key) -- modified function of xWhiteWolfs library local delay = 0.3 -- exhausted do efeito em decimais, sendo 0.3 = 300 milissegundos local effectPositions = getPositionsByDirection(uid) doSendDistanceShoot(effectPositions[math.random(#effectPositions)], effectPositions[math.random(#effectPositions)], effect) addEvent(function() if isCreature(uid) and getPlayerStorageValue(uid, key) >= 0 then loopEffect(uid, effect, key) end end, 1000 * delay) return true end function getPositionsByDirection(uid) pos = getCreaturePosition(uid) positionsByDirection = { [0] = { [1] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [2] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0}, [3] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [4] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0}, [5] = {x = pos.x - 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [6] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0}, [7] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [8] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0}, [9] = {x = pos.x, y = pos.y, z = pos.z, stackpos = 0} }, [1] = { [1] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [2] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0}, [3] = {x = pos.x - 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [4] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0}, [5] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [6] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0}, [7] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [8] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0}, [9] = {x = pos.x, y = pos.y, z = pos.z, stackpos = 0} }, [2] = { [1] = {x = pos.x - 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [2] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0}, [3] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [4] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0}, [5] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [6] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0}, [7] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [8] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0}, [9] = {x = pos.x, y = pos.y, z = pos.z, stackpos = 0} }, [3] = { [1] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [2] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0}, [3] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [4] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0}, [5] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [6] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0}, [7] = {x = pos.x - 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [8] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0}, [9] = {x = pos.x, y = pos.y, z = pos.z, stackpos = 0} } } return positionsByDirection[getCreatureLookDirection(uid)] end Fiz duas maneiras de um player adquirir esse efeito: Quest (por chest ou o que preferir): loopeffquest.lua (data/actions/scripts): local t = { effect = 18, -- shoot type number qstor = 70001, -- quest storage stor = 70707 -- loopEffect storage } function onUse(cid, item) if getPlayerStorageValue(cid, t.qstor) < 1 then setPlayerStorageValue(cid, t.qstor, 1) setPlayerStorageValue(cid, t.stor, t.effect) loopEffect(cid, t.effect, t.stor) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a magic chest and now you received a constant effect.') else doPlayerSendCancel(cid, 'You already received the constant effect before.') end return true end Tag - actions.xml (data/actions): <action actionid="ACTIONID" script="loopeffquest.lua"/> TalkAction de adição/remoção: loopeffect.lua (data/talkactions/scripts): function onSay(cid, words, param, channel) local stor = 70707 -- loopEffect storage local p = string.explode(param, ",") local pid, ts, tn = getPlayerByNameWildcard(p[1]), tostring(p[1]), tonumber(p[2]) if (words == '/addloopeff') then if (param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Enter the player name and the loop effect (shoot type number) you want to assign to the player. Thus: /addloopeff Player, 18') end if (not ts or not tn or p[3]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Invalid parameter specified.') end if (tn < 0 or tn > CONST_ANI_LAST) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'The shoot type effect number cannot be lower than 0 and higher than '..CONST_ANI_LAST) end if (not pid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' not found.') end if (getPlayerStorageValue(pid, stor) >= 0) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' is already with loop effect.') end setPlayerStorageValue(pid, stor, tn) loopEffect(pid, tn, stor) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You assigned the loop effect '..tn..' to the player '..ts) elseif (words == '/removeloopeff') then if (param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Enter the player name you want to remove the loop effect. Thus: /removeloopeff Player') end if (not ts or p[2]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Invalid parameter specified.') end if (not pid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' not found.') end if (getPlayerStorageValue(pid, stor) < 0) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' is not with loop effect.') end setPlayerStorageValue(pid, stor, -1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You removed the loop effect of the player '..ts) end return true end Tag - talkactions.xml (data/talkactions): <talkaction log="yes" words="/addloopeff;/removeloopeff" access="5" event="script" value="loopeffect.lua"/> loopeffect.lua (data/creaturescripts/scripts): function onLogin(cid) local stor = 70707 -- loopEffect storage if getPlayerStorageValue(cid, stor) >= 0 then loopEffect(cid, getPlayerStorageValue(cid, stor), stor) end return true end Tag - creaturescripts.xml (data/creaturescripts): <event type="login" name="LoopEffect" event="script" value="loopeffect.lua"/> Os parâmetros da talkaction são simples. Para adicionar um loop effect ao player: /addloopeff playerName, shootTypeNumber Ex: /addloopeff Suicide, 18 Para remover o loop effect de um player: /addloopeff playerName Ex: /removeloopeff Suicide Nota: mesmo que o player faça logout, o loopEffect retornará quando ele logar novamente. Só vai parar se você o remover do player, com a talkaction. É isso. Talvez não seja muito útil em servidores globais, manter esse efeito de shoot type infinito. Mas eu queria compartilhar com vocês; espero que sirva de ajuda pra alguém.
  21. Wise respondeu ao post em um tópico de Ceds em Suporte Tibia OTServer
    zombielever.lua (data/actions/scripts): local t = { item = {2173, 1}, -- {itemID, quantidade) stor = {12128, 12129} -- {zombie storage, human storage} } function onUse(cid, item, fromPos, toPos) if getPlayerStorageValue(cid, t.stor[1]) > 0 or getPlayerStorageValue(cid, t.stor[2]) > 0 then doPlayerAddItem(cid, t.item[1], t.item[2]) setPlayerStorageValue(cid, t.stor[1], -1) setPlayerStorageValue(cid, t.stor[2], -1) doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(toPos, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You were revived! Now you are a human again.') else doSendMagicEffect(fromPos, CONST_ME_POFF) doPlayerSendCancel(cid, "Only zombies can use this lever.") end return true end Tag - actions.xml (data/actions): <action actionid="ACTIONID" script="zombielever.lua"/>
  22. Contribuir é dar auxílio, ajuda..correto? Então pense, tudo o que você fizer com o intuito de compartilhar seu conhecimento com as outras pessoas do fórum, você vai estar contribuindo. Eu não sou nenhum "Lord" da programação, não. Sou um eterno aprendiz. Como o ditado já diz, "a prática leva a perfeição". Mas o que antecede a prática? O estudo das ações, não? Por isso, foque nesse devasto conteúdo de programação que está disponível tanto no fórum, quanto na internet, e estude..estude e estude. Você vai se aperfeiçoando com o tempo, conforme o seu tempo. @Thayam / @Beeny Assim eu fico sem palavras. Só tenho a agradecer pelo apoio e reconhecimento de todos vocês. Abraços.
  23. Hahah Valeu, amigo.
  24. Não ataca? Poste o código da spell, se possível. E que distro você usa? Qual versão?
  25. Muito obrigado, Daniel. Fico lisonjeado em ler isso. Obrigado, meu caro.

Informação Importante

Confirmação de Termo