Ir para conteúdo
Close

REFORMULAMOS A SEÇÃO DE CLASSIFICADOS! - Crie grátis os seus anúncios de procura e oferta de serviços e produtos relacionados ao OTServ! - Acesse através do nosso menu ou clique aqui e confira já!

Dwarfer

Suporter
  • Total de itens

    448
  • Registro em

  • Última visita

  • Dias Ganhos

    34

Dwarfer venceu a última vez em Janeiro 21

Dwarfer teve o conteúdo mais curtido!

Sobre Dwarfer

  • Rank
    Baronete

Informação de Perfil

  • Eu sou
    Scripter

Últimos Visitantes

5.618 visualizações
  1. Falaaaaa, galerinha! Bem, hoje compartilho com vocês o código da Goblin Merchant Quest que é a quest dos coryms lá de venore 😁. Na verdade, estou compartilhando as duas primeiras missões. A depender do feedback, se o pessoal se interessar pelo tipo de conteúdo, compartilho as outras missões. Acredito que a quest pode ser aproveitada em servidores com foco no RPG ou apenas para levar algo diferente ao servidor. Lembrando que o código é para TFS 0.4. Para saber mais sobre a quest: https://www.tibiawiki.com.br/wiki/Goblin_Merchant_Quest As falas do NPC Rafzan estão 99% iguais ao global. Aquele 1% vagabundo🎵 é de algumas adaptações que fiz. Adaptei os itens que foram utilizados na quest, já que não possuía os itens utilizados na quest do global por ter feito em uma versão anterior a atual. No entanto, está facilmente editável para vocês também colocarem os ids que desejarem. Configuração: Em data/lib crie o arquivo Goblin Merchant Quest.lua e cole isto dentro: No items.xml (Escolha os ids que preferir e edite de forma semelhante, mostrarei os que escolhi): ---> Para a missão 1: * cracked stone (id 1285) <item fromid="1285" toid="1292" article="a" name="stone" /> * skull stone (id 10023) <item id="10023" article="a" name="skull stone"> <attribute key="description" value="It is used to mark the way." /> <attribute key="decayTo" value="1285" /> <attribute key="duration" value="60" /> <attribute key="weight" value="950" /> </item> * skulls (id 2229) <item id="2229" article="a" name="skull" plural="skulls"> <attribute key="weight" value="2180" /> </item> O resultado ficou assim: --->Para a missão 2: * perfume gatherer (id 2007) <item id="2007" article="a" name="perfume gatherer"> <attribute key="weight" value="250" /> <attribute key="description" value="It is empty. The first odour you'r looking for is special snail slime." /> </item> Em data/actions/scripts, crie o arquivo rafzan_mission01.lua e cole isto dentro: Em data/actions/scripts, crie o arquivo rafzan_mission02.lua e cole isto dentro: No actions.xml, adicione as linhas: <action itemid="2229" script="rafzan_mission01.lua" /> <!-- id da placa --> <action itemid="2007" script="rafzan_mission02.lua" /> <!-- id do perfume gatherer --> E por último, mas não menos importante, em data/npc crie o arquivo Rafzan.xml: <?xml version="1.0" encoding="UTF-8"?> <npc name="Rafzan" script="rafzan.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="61"/> <parameters> <parameter key="module_shop" value="1" /> <parameter key="shop_buyable" value="backpack,1988,10;bag,1987,4;fishing rod,2580,150;rope,2120,50;shovel,2554,10;scythe,2550,12;torch,2050,2;worm,3976,1;" /> <parameter key="shop_sellable" value="fishing rod,2580,30;rope,2120,8;shovel,2554,2;" /> </parameters> </npc> Lembrando que coloquei somente os itens que existiam na versão que utilizei. Em data/npc/scripts, crie o arquivo rafzan.lua e cole isto dentro: Qualquer dúvida na configuração que tenha ficado, é só se basear na própria quest do global. É isso, beijinhos 😘.
  2. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local npcTopic = {} 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 function onPlayerEndTrade(cid) npcHandler:onPlayerEndTrade(cid) end function onPlayerCloseChannel(cid) npcHandler:onPlayerCloseChannel(cid) end local premium = {days = 30, cost = 10000} -- days = dias de premium comprados, cost = valor em gold coins function creatureSayCallback(cid, type, msg) local talkUser, msg = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, string.lower(msg) if not npcHandler:isFocused(cid) then return false end if msgcontains(msg, "premium") then if not isPremium(cid) then npcHandler:say("Do you want to buy ".. premium.days .." premium days for ".. premium.cost .. " gold coins?", cid) npcTopic[talkUser] = 1 else npcHandler:say("You are already a premium player.", cid) npcTopic[talkUser] = 0 end elseif msgcontains(msg, "yes") and npcTopic[talkUser] == 1 then if doPlayerRemoveMoney(cid, premium.cost) then npcHandler:say("Here you go, as I promised.", cid) doPlayerAddPremiumDays(cid, premium.days) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_GREEN) else npcHandler:say("You do not have ".. premium.cost .." gold coins.", cid) end npcTopic[talkUser] = 0 elseif msgcontains(msg, "no") and npcTopic[talkUser] == 1 then npcHandler:say("No problem. Maybe on next time.", cid) npcTopic[talkUser] = 0 end return true end local node1 = keywordHandler:addKeyword({'promot'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I can promote you for 20000 gold coins. Do you want me to promote you?'}) node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 20000, level = 20, promotion = 1, text = 'Congratulations! You are now promoted.'}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Alright then, come back when you are ready.', reset = true}) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:setMessage(MESSAGE_GREET, "Welcome, |PLAYERNAME|. Become a premium or a promoted player here!") npcHandler:setMessage(MESSAGE_FAREWELL, "Who is next?") npcHandler:setMessage(MESSAGE_WALKAWAY, "Who is next?") npcHandler:addModule(FocusModule:new())
  3. Em creaturescripts/scripts crie um arquivo e cole isto dentro: function onLogin(cid) if not vip.hasVip(cid) then local active_slots = getPlayerStorageValue(cid, 04420011) if active_slots >= 1 then for i = 1, active_slots do doPlayerSetStorageValue(cid, (04420031 + (i * 10)), -1) doPlayerSetStorageValue(cid, 04420011, active_slots - 1) end end end return true end Utilize qualquer tag com o login.
  4. function onUseWeapon(cid, var) local slotitem = getPlayerSlotItem(cid, CONST_SLOT_LEFT) -- edite o slot local nomeitem = getItemNameById(slotitem.itemid) -- tipo isso --codigos return true end
  5. local config = { effects_per_level = { [1] = 25, -- efeito no [level 1] [2] = 177 -- efeito no [level 2] }, casts_to_up = 300, -- quantas vezes tem que soltar para alcançar o level 2 storages = {level = 46890, cast = 46891} -- só modifique se necessário } local function getPlayerRasenganLevel(cid) return getPlayerStorageValue(cid, config.storages.level) end local function getPlayerRasenganCasts(cid) return getPlayerStorageValue(cid, config.storages.cast) > 0 and getPlayerStorageValue(cid, config.storages.cast) or 0 end local function doPlayerRasenganUp(cid, round) return setPlayerStorageValue(cid, config.storages.cast, getPlayerRasenganCasts(cid) + round) end local combat = {} for i = 1, 2 do combat[i] = createCombatObject() setCombatParam(combat[i] , COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat[i] , COMBAT_PARAM_EFFECT, config.effects_per_level[i]) function onGetFormulaValues(cid, level, maglevel) min = -(level * 0.28 + maglevel * 1.48) * 1.0 * getPlayerRasenganLevel(cid) max = -(level * 0.34 + maglevel * 2.34) * 1.0 * getPlayerRasenganLevel(cid) return min, max end setCombatCallback(combat[i], CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") end function onCastSpell(cid, var) if getPlayerRasenganLevel(cid) == -1 then setPlayerStorageValue(cid, config.storages.level, 1) end if getPlayerRasenganLevel(cid) ~= 2 then doPlayerRasenganUp(cid, 1) local casts, str = getPlayerRasenganCasts(cid), '' if casts == 1 then str = "First time casting Rasengan! You need "..config.casts_to_up.." casts to advance to level 2 and improve its power!" elseif casts == (config.casts_to_up / 2) then str = "You reached 50% on Rasengan level 1. Now you need "..(config.casts_to_up/2).. " casts to advance to level 2." elseif casts == config.casts_to_up then str = "Congratulations! You advanced the Rasengan jutsu from level 1 to level 2." setPlayerStorageValue(cid, config.storages.level, 2) end if str ~= '' then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, str) end end return doCombat(cid, combat[getPlayerRasenganLevel(cid)], var) end No level 2, vai dar um dano 2x maior que no nível 1. Não tive como testar o script.
  6. O mod ficará assim: Em data/actions/scripts crie um arquivo.lua e cole isto dentro: local autoLootPremiumTime = {3, "day"} -- quanto tempo a "premium" durará function onUse(cid, item, fromPosition, itemEx, toPosition) domodlib('Loot_func') local check = getPlayerStorageValue(cid, info.Storages[4]) if check > os.time() then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Your Auto Loot premium time ends at " ..os.date("%d %B %Y %X", check)..".") end doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Congratulations! You received "..getStrTime(autoLootPremiumTime).." of Auto Loot Premium Time!") doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) setPlayerStorageValue(cid, info.Storages[4], mathtime(autoLootPremiumTime) + os.time()) doRemoveItem(item.uid) return true end function mathtime(table) -- by dwarfer local unit = {"sec", "min", "hour", "day"} for i, v in pairs(unit) do if v == table[2] then return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1) end end return error("Bad declaration in mathtime function.") end function getStrTime(table) -- by dwarfer local unit = {["sec"] = "second",["min"] = "minute",["hour"] = "hour",["day"] = "day"} return tostring(table[1].." "..unit[table[2]]..(table[1] > 1 and "s" or "")) end No actions.xml, adicione a tag abaixo e edite o XXXX para o id do item. <action itemid="XXXX" script="NOMEDOARQUIVO.lua" />
  7. Boa, só: CreatureClass -> ClassCreature 😁
  8. Vê se assim te serve, não tive como testá-lo:
  9. Em creaturescripts/scripts crie um arquivo.lua e cole isto dentro: local group_id = 1 -- abaixo ou igual a esse grupo receberá a skull function onLogin(cid) if getPlayerGroupId(cid) <= group_id then if getCreatureSkullType(cid) == SKULL_NONE then doCreatureSetSkullType(cid, SKULL_WHITE) end end return true end No creaturescripts.xml, adicione a tag: <event type="login" name="SetaSkull" event="script" value="NOMEDOARQUIVO.lua"/>
  10. local evo = { --nome do shiny, qnts stones precisa ["Snorlax"] = {"Shiny Snorlax", 5}, ["Gengar"] = {"Shiny Gengar", 7}, ["Ninetales"] = {"Shiny Ninetales", 4}, ["Raichu"] = {"Shiny Raichu", 5}, ["Alakazam"] = {"Shiny Alakazam", 7}, } local pokeballs = { [2531] = {newBall = 1111}, -- edite o "1111" para o id para o qual a pokeball 2531 se transformará [2557] = {newBall = 1111}, [2524] = {newBall = 1111}, [2525] = {newBall = 1111}, [2523] = {newBall = 1111}, } function onUse(cid, item, fromPosition, itemEx, toPosition) if isMonster(itemEx.uid) and getCreatureMaster(itemEx.uid) == cid then local monster = getCreatureName(itemEx.uid) if evo[monster] then if getPlayerItemCount(cid, item.itemid) >= evo[monster][2] then doPlayerSendTextMessage(cid, 27, "Congratulations! Your "..getPokeName(itemEx.uid).." evolved into a "..evo[monster][1].."!") local health, maxHealth = getCreatureHealth(itemEx.uid), getCreatureMaxHealth(itemEx.uid) doSendMagicEffect(getThingPos(itemEx.uid), 18) doRemoveCreature(itemEx.uid) doPlayerRemoveItem(cid, item.itemid, evo[monster][2]-1) doRemoveItem(item.uid, 1) doSummonMonster(cid,evo[monster][1]) local pokeball = getPlayerSlotItem(cid, 8) doItemSetAttribute(pokeball.uid, "poke", evo[monster][1]) doItemSetAttribute(pokeball.uid, "level", pokes[evo[monster][1]].level) doItemSetAttribute(pokeball.uid, "hp", 1) doItemSetAttribute(pokeball.uid, "happy", 110) local pk = getCreatureSummons(cid)[1] local getShinyPokeballs = pokeballs[getPlayerSlotItem(cid, 8).itemid] if getShinyPokeBalls then doTransformItem(getPlayerSlotItem(cid, 8).uid, getShinyPokeballs.newBall) adjustStatus(pk, pokeball.uid, true, false, true) end return true else return doPlayerSendTextMessage(cid, 27, "You need atleast ".. evo[monster][2] .." stones to do it!") end end end return false end
  11. Dwarfer

    Mapper King 2018

    Em minha opinião o mapa 2 retratou quase que perfeitamente uma mina, gostei bastante dos trilhos à mostra, o que confere originalidade ao mapa. Com certeza eu moraria nessa mina aí! 😅 Voto: Mapa 2
  12. @Navegante Em actions/scripts crie um arquivo.lua e cole isto dentro: No actions.xml, coloque a tag como o exemplo abaixo, inserindo um actionid no lugar do XXXX e o mesmo valor para o actionid do baú. <action actionid="XXXX" script="NOMEDOSEUARQUIVO.lua"/>

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!

×