Jump to content
Close

Dwarfer

Suporter
  • Content Count

    475
  • Joined

  • Last visited

  • Days Won

    36

Dwarfer last won the day on July 17

Dwarfer had the most liked content!

About Dwarfer

  • Rank
    Baronet

Profile Information

  • I am
    Scripter

Recent Profile Visitors

6940 profile views
  1. verdade, acabei esquecendo de copiar as linhas de remover. Já editei lá.
  2. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local items_needed = {{5922,50},{2492,1},{2488,1},{2536,1},{2123,1}} local outfit_storage = 65535 function outfit(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if getPlayerStorageValue(cid, outfit_storage) ~= -1 then npcHandler:say('You have already received this outfit.', cid) else local total_count, check = #items_needed, true for i = 1, total_count do local itemId, itemCount = items_needed[i][1], items_needed[i][2] if getPlayerItemCount(cid, itemId) < itemCount then check = false break end end if not check then npcHandler:say('You do not have all the items I need to make this outfit.', cid) else for i = 1, total_count do local itemId, itemCount = items_needed[i][1], items_needed[i][2] doPlayerRemoveItem(cid, itemId, itemCount) end doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_GREEN) setPlayerStorageValue(cid, outfit_storage, 1) end end end local node1 = keywordHandler:addKeyword({'outfit'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I need the items, {50 holy orchids, ring of the sky, crown legs, dragon scale mail and medusa shield}. Do you have?.'}) node1:addChildKeyword({'yes'}, outfit, {npcHandler = npcHandler, onlyFocus = true, reset = true}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Stop being rude!!!', reset = true}) npcHandler:addModule(FocusModule:new())
  3. Tag no actions.xml: <action itemid="ID DO ITEM" script="NOME DO ARQUIVO.lua" />
  4. Obviamente, se a vocação que você tá testando pode aprender a magia, já não tem a magia aprendida, o needlearn lá no spells.xml tá igual a 1, vai funcionar. Testei aqui e tá tudo certo, configure corretamente.
  5. Você pode usar o actionid em um item qualquer. Exemplo da tag com actionid 1111: <movevent type="StepIn" actionid="1111" event="script" value="NOMEDOARQUIVO.lua"/>
  6. local t = { [128] = {addon1 = true, addon2 = true}, -- [looktype outfit] = {addon1 = 'true' para dar o addon1, 'false' para não dar, addon2 (mesma coisa)} [129] = {addon1 = true, addon2 = true}, } function onUse(player, item, fromPosition, target, toPosition, isHotkey) if player:getStorageValue(10001) == -1 then local check = false for looktype, addontab in pairs(t) do if player:hasOutfit(looktype) then check = true for i = 1, 2 do player:addOutfitAddon(looktype, i == 1 and (addontab.addon1 and 1) or (addontab.addon2 and 2)) end end end if check then player:sendTextMessage(MESSAGE_INFO_DESCR, "You have received new addons!") player:getPosition():sendMagicEffect(CONST_ME_HOLYAREA) end player:setStorageValue(10001, 1) item:transform(item:getId() == 1945 and 1946 or 1945) end return true end Adicione as demais linhas para os outros looktypes conforme os exemplos.
  7. Em data/creaturescripts/scripts, crie um arquivo.lua e cole isto dentro: local t = { ["rotworm"] = {name = "light", level = 8}, ["dwarf"] = {name = "haste", level = 15}, ["dwarf soldier"] = {name = "heal friend", level = 10} } function onKill(creature, target) local targetMonster = target:getMonster() if not targetMonster then return true end if isSummon(target:getId()) then return true end local m = t[targetMonster:getName():lower()] if not m then return true end local player = creature:getPlayer() if not player then return true end if player:canLearnSpell(m.name) and not player:hasLearnedSpell(m.name) then if player:getLevel() >= m.level then player:learnSpell(m.name) player:getPosition():sendMagicEffect(CONST_ME_HOLYAREA) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have learnt the spell '" .. m.name .. "'. Open your spellbook and the check the words.") end end return true end No creaturescripts.xml, adicione a tag: <event type="kill" name="MonsterSpell" script="NOMEDOARQUIVO.lua" /> Em data/creaturescripts/scripts/login.lua, adicione a linha: player:registerEvent("MonsterSpell") Não tive como testar, mas creio que funcionará. Edite o nome do monstro, o nome da magia e o level mínimo para aprender a magia conforme os exemplos que deixei.
  8. local t = { duration = 3, -- duração da novo outfit (em segundos) newLooktype = 111, -- looktype da nova outfit effect = 10, -- efeito que aparecerá cooldown = 10, -- tempo para usar a magia novamente (em segudos) storage = 54897 -- só modifique se necessário } function onCastSpell(cid, var) if getPlayerStorageValue(cid, t.storage) > os.time() then doPlayerSendCancel(cid, "Você precisa esperar para soltar esta magia novamente.") return false end doCreatureSetNoMove(cid, true) local out = getCreatureOutfit(cid) out.lookType = t.newLooktype doSetCreatureOutfit(cid, out, t.duration * 1000) setPlayerStorageValue(cid, t.storage, t.cooldown + os.time()) addEvent(function() if isPlayer(cid) then doCreatureSetNoMove(cid, false) doSendMagicEffect(getPlayerPosition(cid), t.effect) end end, t.duration * 1000) return true end
  9. Coloque as posições válidas onde são criadas as paredes nesta parte: local B = { [1] = {1056,{x=2175, y=555, z=6, stackpos = 1}}, [2] = {1056,{x=2175, y=556, z=6, stackpos = 1}}, [3] = {1056,{x=2175, y=557, z=6, stackpos = 1}}, [4] = {1056,{x=2175, y=558, z=6, stackpos = 1}} }
  10. Bem, @bpm91, existem algumas maneiras de fazer isso. Vamos fazer pela forma mais completa até para que você possa utilizar em outros scripts depois, caso necessite. É só seguir o passo a passo abaixo, você é um rapaz esperto, saudável, eu sei que você vai conseguir. EU OUVI UM AMÉM? Além do mais, parece que tá precisando do script já que comentou "up" no tópico (não comente "up", isso é considerado flood, use o botão "Subir este tópico" no canto superior direito - Leia as regras: https://tibiaking.com/forums/forum/101-regras-e-informações/) Em data/npc/lib/npc/npcsystem, abra o arquivo npchandler.lua: Abaixo da linha: CALLBACK_ONSELL = 11 Adicione: CALLBACK_ONTRADEREQUEST = 15 Encontre as linhas: elseif(id == CALLBACK_FAREWELL and module.callbackOnFarewell ~= nil) then tmpRet = module:callbackOnFarewell(unpack(arg)) E adicione, logo abaixo, o seguinte: elseif id == CALLBACK_ONTRADEREQUEST and module.callbackOnTradeRequest ~= nil then tmpRet = module:callbackOnTradeRequest(unpack(arg)) Procure pela função NpcHandler:onSell (caso a função tenha algumas diferenças em relação ao que eu coloquei abaixo, sem desespero, inspire, expire e siga): function NpcHandler:onSell(cid, itemid, subType, amount, ignoreCap, inBackpacks) local callback = self:getCallback(CALLBACK_ONSELL) if(callback == nil or callback(cid, itemid, subType, amount, ignoreCap, inBackpacks)) then if(self:processModuleCallback(CALLBACK_ONSELL, cid, itemid, subType, amount, ignoreCap, inBackpacks)) then -- end end end Adicione, logo abaixo: function NpcHandler:onTradeRequest(cid) local callback = self:getCallback(CALLBACK_ONTRADEREQUEST) if callback == nil or callback(cid) then if self:processModuleCallback(CALLBACK_ONTRADEREQUEST, cid) then return true end end return false end Tá vendo, não foi tão difícil. Calma aí, tem mais. Em data/npc/lib/npc/npcsystem, abra o arquivo modules.lua: Procure por: function ShopModule.requestTrade(cid, message, keywords, parameters, node) local module = parameters.module if(not module.npcHandler:isFocused(cid)) then return false end Logo abaixo, adicione: if not module.npcHandler:onTradeRequest(cid) then return false end Em seguida, procure por: function ShopModule.tradeItem(cid, message, keywords, parameters, node) local module = parameters.module if(not module.npcHandler:isFocused(cid)) then return false end Logo abaixo, adicione: if not module.npcHandler:onTradeRequest(cid) then return true end Pronto, eu sempre soube que você conseguiria... Agora, seu NPC. Primeiramente, a linha abaixo tem um erro, acredito que foi ao colar aqui no fórum e a formatação modificou, dá uma olhada aí. Como não sei qual valor estava, deixei comentado no script final. Linha: setPlayerStorageValue(cid, 100062, 😎 Script do NPC com a verificação se o storage do player storage2 é diferente de -1 para poder dar "trade": Se você fizer tudo certo, vai funcionar.
  11. Testei aqui e o script está 100% funcional. No entanto, a diferença pode ser nesse sistema de pontos que você quer. Você já tem o script de clicar no baú e receber o item? Poste-o para que eu possa adaptar o script desenvolvido a esse seu.
  12. Vejo que é seu primeiro post, então nos próximos tente dar a maior quantidade possível de detalhes sobre o seu pedido como: a versão do seu servidor, a distro utilizada, além de detalhes sobre o próprio script que você quer. Isso facilitará com que as pessoas te ajudem e, por consequência, você tenha o seu pedido atendido o mais rápido possível. Como nunca vi que sistema é esse do qual você está se referindo, supondo que o script que desenvolvi será compatível com seu servidor e que o "ponto" que você se refere é o "premium point da account", siga os passos abaixo (não tive como testar o script): Em data/lib crie um arquivo.lua e cole isto dentro: Caso ainda não possua a função que adiciona os pontos em algum arquivo da pasta data/lib, adicione-a, no arquivo criado anteriormente, abaixo do "}": Em data/creaturescripts/scripts crie um arquivo.lua e cole isto dentro: No creaturescripts.xml, adicione a tag: <event type="death" name="AegisDeath" event="script" value="NOMEDOARQUIVO.lua"/> No arquivo.xml do monstro, antes de: </monster> adicione: <script> <event name = "AegisDeath"/> </script> Fiz um comando adicional aqui rapidinho, caso o jogador queira verificar a quantidade de monstros mortos: Em data/talkactions/scripts crie um arquivo.lua e cole isto dentro: No talkactions.xml, adicione a tag. Por exemplo: <talkaction words="!aegis" event="script" value="NOMEDOARQUIVO.lua"/> Espero que seja isso o que você queria.
  13. local array = { [1] = {[0] = 6080, [1] = 6080}, [2] = {[0] = 6080, [1] = 6080}, --- coloque os outros aqui [30] = {[0] = 5966, [1] = 5966} } function onDeath(cid, corpse) local voc = array[getPlayerVocation(cid)] if voc then local newId = voc[getPlayerSex(cid)] doTransformItem(corpse.uid, newId, 1) doDecayItem(corpse.uid) end return true end No array: [1] = { [0] = 6080, -- [0] = id do corpo feminino [1] = 6080 -- [1] = id do corpo masculino }, Faça para os demais, fiz apenas para alguns para exemplificar.
  14. @Jhonjhon775 function Creature:onChangeOutfit(outfit) if self:isPlayer() then local head = self:getSlotItem(CONST_SLOT_HEAD) if head and head:getId() == 32671 and self:getOutfit().lookType == 1122 and outfit.lookType ~= 1122 then return false end if outfit.lookType == 111 and outfit.lookMount ~= 0 then -- TROQUE O 111 pelo lookType do seu outfit self:sendCancelMessage("You can not mount while using this outfit.") return false end -- [CONTINUAÇÃO]

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...