Jump to content
Close

Dwarfer

Suporter
  • Content Count

    478
  • Joined

  • Last visited

  • Days Won

    37

Dwarfer last won the day on September 20

Dwarfer had the most liked content!

About Dwarfer

  • Rank
    Baronet

Profile Information

  • I am
    Scripter

Recent Profile Visitors

7164 profile views
  1. Colocou a lib corretamente? Se sim, vê se não tem algum bug de formatação que geralmente tá surgindo ao copiar o conteúdo do fórum e colar.
  2. MARAVILHOOOOOOSOS, como vocês estão? Espero que estejam bem. 😍 Esses dias fuçando as profundezas sombrias do meu computador encontrei essa quest, a Barbarian Test Quest, do tibia global e agora compartilho-a com vocês. Para quem não conhece, é aquela quest que dá alguns acessos na cidade de Svargrond do tibia global. Mais informações, visite o link: https://www.tibiawiki.com.br/wiki/Barbarian_Test_Quest As falas do NPC estão 99% iguais ao do tibia global, salvo algumas pequenas modificações/adaptações feitas por mim dando o meu toque, é claro 🤗. (todos gostam do meu toque) Obviamente, a quest se aplica melhor para servidores de tibia clássico, mas deixei os id's dos itens facilmente editáveis para você adaptar para o seu servidor, seja ele de qual tipo for, para TFS 0.4 ou OTX 2.x. Configuração: 1) Em data/lib, crie um arquivo chamado Barbarian Test Quest.lua e cole isto dentro: 2) Em data/npc/scripts, crie um arquivo chamado Sven.lua e cole isto dentro: O arquivo.xml do NPC Sven, em data/npc é o seguinte: <?xml version="1.0" encoding="UTF-8"?> <npc name="Sven" script="Sven.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="143" head="76" body="100" legs="132" feet="97" addons="3" mount="0"/> </npc> 3) Em data/actions/scripts, aconselho criar uma pasta chamada barbarian_test para colocar os arquivos referentes à quest. Dentro dessa pasta, um por um, coloque os arquivos com os nomes abaixo: bucketmead.lua meadhorn.lua mammothpushing.lua Em data/actions.xml adicione as tags abaixo: (caso altere os ids dos itens para adaptar ao seu servidor, lembre de alterá-los nas tags também) <action actionid="8952" script="barbarian_test/bucketmead.lua" /> <action itemid="7140;7141" script="barbarian_test/meadhorn.lua" /> <action itemid="7176" script="barbarian_test/mammothpushing.lua" /> Coloque o actionid 8952 (ou o valor que desejar, lembrando de modificar na tag no actions.xml) no balde de rum localizado próximo ao NPC. Lembre de colocar um NPC adicional ao lado do NPC Sven que venda "rum" para que o jogador possa ficar bêbado e realizar a última missão (missão do mammoth). OBS: Ao finalizar a quest, o jogador receberá a storage 87345 igual a 1. Essa informação pode ser útil para dar acesso a determinadas áreas somente após terminar a quest, por exemplo. É isso. Espero que seja útil ao servidores que desejam ter um pouquinho mais de RPG. GRANDE ABRAÇO! 😉 Esse script faz parte de um conjunto de quests do tibia global que pretendo ir fazendo aos poucos a depender do feedback do pessoal. Veja também:
  3. verdade, acabei esquecendo de copiar as linhas de remover. Já editei lá.
  4. 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())
  5. Tag no actions.xml: <action itemid="ID DO ITEM" script="NOME DO ARQUIVO.lua" />
  6. 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.
  7. 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"/>
  8. 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.
  9. 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.
  10. 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
  11. 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}} }
  12. 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.
  13. 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.
  14. 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.

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 começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário 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!

×
×
  • Create New...