
Tudo que Wise postou
-
Virar zombie ao morrer
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.
-
(Resolvido)Sistema de Presente
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
-
Virar zombie ao morrer
Ok. Lembrando que eu apenas peguei como base o script do membro, os códigos iniciais são dele. Disponha.
-
Adicionando novas RAÇAS!
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.
-
[HELP] Como adicionar jutsu em tibia naruto
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.
-
(Resolvido)Sistema de Presente
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
-
[Pedido] Poket
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.
-
(Resolvido)FLECHA DE GELO
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.
- [PEDIDO] Buff Para Usar 2 Espadas
-
Virar zombie ao morrer
@Unico BR Tudo o que utilizamos nos scripts, basicamente foram storages e uma condição. Nada que inclua ou interfira nas vocações.
-
Virar zombie ao morrer
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.
-
Virar zombie ao morrer
- Virar zombie ao morrer
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- (Resolvido)[AJUDA] Food
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.- (Pedido) Não poder deslogar estando em: Surf, Ride e Fly!
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.- Virar zombie ao morrer
Disponha, meu caro amigo. Abraços.- Virar zombie ao morrer
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 ;]- (Resolvido)[PROBLEMA] FUNÇÕES DO SISTEMA DE NOTIFICAÇÃO -- TFS 1.0
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- Quest e Comando de Loop Effect
- Quest e Comando de Loop Effect
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.- Virar zombie ao morrer
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"/>- Iniciando meu estágio no TibiaKing
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.- Iniciando meu estágio no TibiaKing
Hahah Valeu, amigo.- Utito Tempo San [bugado]
Não ataca? Poste o código da spell, se possível. E que distro você usa? Qual versão?- Iniciando meu estágio no TibiaKing
Muito obrigado, Daniel. Fico lisonjeado em ler isso. Obrigado, meu caro. - Virar zombie ao morrer
Informação Importante
Confirmação de Termo