Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Sim e não. Sim, eu entendi o que você quis dizer. O sistema do Vodkart é necessário pedir a task ao NPC, e o que eu fiz é automático. E não, eu não vou fazer o comando !task, você pediu um NPC, eu fiz e ainda te dei o creaturescript de brinde. E se você se sentir contrariado com este post, Manual de Referência de Lua 5.1 é serventia da casa. Um grande abraço e vai pela sombra.
  2. function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid == 2157 then if itemEx.type == 100 then doTransformItem(itemEx.uid, 7762, itemEx.type) else doPlayerSendCancel(cid, "You need 100 gold nuggets.") end else doPlayerSendCancel(cid, "You can only use the battle hammer in gold nuggets.") end end
  3. Não, não posso. Se quiser com talkaction, o sistema do Vodkart funciona muito bem.
  4. Não, acho que você não entendeu. Eu faço do jeito que eu quero, testo, e se funcionar, eu posto. Se não gostou, o Manual de Referência de Lua 5.1 existe para estudos.
  5. local PETS = { ["Rat"] = {0, 250}, } function onUse(cid, item, fromPosition, itemEx, toPosition) if getTileInfo(getCreaturePosition(cid)).protection then return doPlayerSendCancel(cid, "Você não pode invocar dentro de zonas de proteção.") end if getCreatureStorage(cid, 11548) > os.time() then return doPlayerSendCancel(cid, "A energia espiritual não é suficiente. Aguarde ".. getCreatureStorage(cid, 11548) - os.time() .." segundos.") end local summons = getConfigValue("maxPlayerSummons") if #getCreatureSummons(cid) > summons then return doPlayerSendCancel(cid, "Você já invocou criaturas o bastante.") end local tmp = nil for _, uid in ipairs(getCreatureSummons(cid)) do if PETS[getCreatureName(uid)] then tmp = uid end end if tmp then return doPlayerSendCancel(cid, "Sua criatura já foi invocada.") end for name, level in pairs(PETS) do if getPlayerLevel(cid) > level[1] and getPlayerLevel(cid) <= level[2] then local monster = doCreateMonster(name, getCreaturePosition(cid)) if doConvinceCreature(cid, monster) then doCreatureSay(cid, "Go, " .. name .. "!", TALKTYPE_ORANGE_1) doCreatureSetStorage(cid, 11548, os.time() + 30) doSendMagicEffect(getCreaturePosition(monster), 2) end break end end return true end Alguém pediu algo sobre summon, sem a função do summon voltar, eu fiz um do zero, identado e funcional. Abraços.
  6. Não, não tem.
  7. Vá estudar Lua antes de falar asneiras. A função table.maxn ou # não retorna index de tipo string, apenas numéricos positivos.
  8. Creaturescript local MONSTER_TASKS = { -- ["NOME"] = QUANTIDADE, ["Troll"] = 1000, } function onKill(cid, target) local tmp = MONSTER_TASKS[getCreatureName(target)] if tmp then local name = getCreatureName(target):lower() local status_storage = name .."_status" if getCreatureStorage(cid, status_storage) == -1 then local count_storage = name .."_count" doCreatureSetStorage(cid, count_storage, math.max(getCreatureStorage(cid, count_storage), 0) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getCreatureName(target) .." killed: ".. getCreatureStorage(cid, count_storage) .."/".. tmp ..".") if getCreatureStorage(cid, count_storage) >= tmp then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have killed ".. tmp .." of ".. getCreatureName(target) ..". You have completed the task.") doCreatureSetStorage(cid, status_storage, 1) end end end return true end NPC local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 MONSTER_TASKS = { -- ["nome"] = { -- {ITEM1, QUANTIDADE}, -- {ITEM2, QUANTIDADE} -- ,} -- Para dar experiência, coloque "experience" ["troll"] = { {"experience", 20}, {2160, 1}, }, ["orc"] = { {"experience", 20}, {2160, 1}, }, } function table.size(t) -- A função table.maxn ou # não conta no tamanho da tabela index igual a string, apenas numéricos positivos. local size = 0 for _,_ in pairs(t) do size = size + 1 end return size end function callbackOnCreatureSay(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local str = "I have so many tasks for you, choose one: " if msgcontains(msg, "task") then local n = 1 local k = table.size(MONSTER_TASKS) print(k) for name, _ in pairs(MONSTER_TASKS) do str = str .. "{" .. name .. "}" .. (n == k and "." or ", ") n = n + 1 end selfSay(str, cid) talkState[talkUser] = 1 end if talkState[talkUser] == 1 then local tmp = MONSTER_TASKS[msg:lower()] if tmp then local status = msg:lower() .. "_status" if getCreatureStorage(cid, status) == 1 then selfSay("You are a good hunter. Thank you for your help.", cid) for i=1,#tmp do if tmp[i][1] == "experience" then doPlayerAddExperience(cid, tmp[i][2]) doSendAnimatedText(getThingPosition(cid), tmp[i][2], COLOR_WHITE) else doPlayerAddItem(cid, tmp[i][1], tmp[i][2]) end end doCreatureSetStorage(cid, status, 2) elseif getCreatureStorage(cid, status) == 2 then selfSay("You already completed this hunt task.", cid) else selfSay("You don't killed the necessary count of monsters.", cid) end end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, callbackOnCreatureSay) npcHandler:addModule(FocusModule:new())
  9. É, acho que o 0.3.6 não tem suporte para storages em forma de string. Desculpe
  10. @SkyDarkyes Aproveitando que estou online, qual é esse script mesmo? Irei refazer.
  11. Eu não entendi, foi nada, desse seu pedido. No caso, vamos dizer que um jogador level 8 entra no servidor, mata um Rotworm, aí ele não ganha um level com a experiência dada, no caso, é para ele ganhar esse level mesmo assim? Enfim, se for isso mesmo, prefiro nem deslogar o jogador. function onKill(cid, target) if getMonsterInfo(getCreatureName(target)) then if getPlayerExperience(cid) < getExperienceForLevel(getPlayerLevel(cid) + 1) then doPlayerAddExperience(cid, getExperienceForLevel(getPlayerLevel(cid) + 1) - getPlayerExperience(cid)) end end return true end
  12. Bom, o LuckOake deixou o pupilo dele, no caso, eu, atender pedidos aqui na fábrica, para ganhar experiência. Eu tomei a liberdade de refazer o script de task automático, pedido por @0BoM. MONSTER_TASKS = { -- ["NOME"] = {count = QUANTIDADE, reward = {{ITEM1, QUANTIDADE1}, {ITEM2, QUANTIDADE2}}}, -- Para dar experiência de prêmio, coloque "experience" ["Troll"] = {count = 10, reward = {{2160, 10}, {"experience", 10}}}, } function onKill(cid, target) local tmp = MONSTER_TASKS[getCreatureName(target)] if tmp then local name = getCreatureName(target):lower() local status_storage = name .."_status" if getCreatureStorage(cid, status_storage) == -1 then local count_storage = name .."_count" doCreatureSetStorage(cid, count_storage, math.max(getCreatureStorage(cid, count_storage), 0) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getCreatureName(target) .." killed: ".. getCreatureStorage(cid, count_storage) .."/".. tmp.count ..".") if getCreatureStorage(cid, count_storage) >= tmp.count then for i=1,#tmp.reward do if tmp.reward[i][1] == "experience" then doPlayerAddExperience(cid, tmp.reward[i][2]) doSendAnimatedText(getCreaturePosition(cid), tmp.reward[i][2], COLOR_WHITE) else doPlayerAddItem(cid, tmp.reward[i][1], tmp.reward[i][2]) end end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have killed ".. tmp.count .." of ".. getCreatureName(target) ..". You have completed the task.") doCreatureSetStorage(cid, status_storage, 1) end end end return true end Ficou bem legal, permite múltiplas recompensas, você não precisa configurar storages. Abraços.
  13. Oneshot

    Pips

    Monitorador, eu ri.
  14. É mesmo. Obrigado, magnânimo lordbug99, consertei esse erro apontado por vossa ilustríssima pessoa. Parabéns, irei falar do seu grande feito para toda minha família, vizinhos e colegas de trabalho, aposto que eles irão ficar muito estupefatos por causa desse seu grande feito. Acredito que dentro de alguns dias, teremos faixas aqui na rua, homenageando esse seu grande feito. Haddad já confirmou um evento especial para celebrar esse grande feito de vossa pessoa. Chris Hadfield, da Estação Espacial Internacional, notou que sua descoberta é essencial para novos patamares da ciência, e já disponibilizou um vídeo no Youtube, comentando seu grande feito. A NSA tem medo de você, te espiona todos os dias, porque você é uma ameaça aos EUA. E por fim, a presidente Dilma já confirmou que pedirá impeachment, se, apenas se, você liderar a nação a uma nova era. Obrigado por existir.
  15. Eu acho que eu merecia a de Herói, já fui colaborador, moderador, e coordenador, fiz muitas coisas na seção de Scripting, apresentei projetos para revitalizar a área e não deveria ser desmerecido pelos problemas do começo desse ano rsrsr
  16. function onAddItem(moveItem, tileItem, position, cid) local tmp = moveItem.type if moveItem.itemid == 5880 then if moveItem.type < 2 then doPlayerSendCancel(cid, "Sorry, you need at least 2 pieces of iron.") doSendMagicEffect(position, CONST_ME_POFF) return false end doTransformItem(moveItem.uid, 5889, math.floor(tmp/2)) if tmp % 2 ~= 0 then doCreateItem(5880, (tmp % 2), position) end doSendMagicEffect(position, CONST_ME_MAGIC_GREEN) end return true end <movevent type="AddItem" tileitem="1" uniqueid="12333" event="script" value="script.lua"/> Coloque a uniqueid 12333 no chão que transforma os itens. Abraços.
  17. Bom trabalho, meu garoto. Obrigado pela dedicatória, apesar que quem merece tudo é você por ter sido um pupilo excepcional e ter levado o aprendizado tão a sério, se tornando um grande scriptwriter em Lua. Parabéns.
  18. A função os.clock() retorna o tempo de execução de um programa Lua. Aplicado a um servidor de Open Tibia, a função retorna o tempo em segundos desde que o servidor foi executado e iniciado.
  19. Queria ver todos esses 6 anos de experiência com Lua e C++. E, impressionante, você trabalha com OtClient desde que ele foi lançado.
  20. Começarei a desenvolver novos e incríveis sistemas para 10.10 ou The Forgotten Server 1.0
  21. Para o primeiro lugar, Tonynh. Não votarei para o terceiro lugar.
  22. Você descreveu muito bem os servidores da atualidade. E realmente todos os servidores ATS são assim, com exceção de grandes projetos que se consolidaram na base do Open Tibia atual, como o PokeXGames, todos são extremamente relaxados. Conheço um amigo que trabalha bastante para manter o servidor de Narutibia dele atualizado, ele sempre traz novas features para o servidor, novos personagens, eventos, jutsus, não é a toa que é um dos maiores servidores brasileiros do gênero, NTOUltimate. Mas uma coisa não deixa de pecar no servidor, os gráficos miniaturizados e em 90º. Gostei do artigo, obrigado pela contribuição.
  23. Acredito que a chance de gerar um stack overflow é muito baixa mesmo. Ah sei lá, estou enferrujado.
  24. Meu Deus, use pelo menos um português sem internetês na hora de compartilhar conteúdo. E isso não vai funcionar, no fim das contas, se o jogador morrer, ele volta para o level 1.
  25. Eu ainda prefiro fazer com duas posições apenas, já que o objetivo do script é teleportar para posições totalmente aleatórias. local fromPosition = {x=100,y=100,z=7} local toPosition = {x=200, y=200, z=7} function getRandomPosition(fromPosition, toPosition) local tmp = { x = math.random(fromPosition.x, toPosition.x), y = math.random(fromPosition.y, toPosition.y), z = math.random(fromPosition.z, toPosition.z), } if getTileInfo(tmp).house == false and getTopCreature(tmp).uid == 0 and doTileQueryAdd(cid, tmp, 7) == RETURNVALUE_NOERROR then return tmp end return getRandomPosition(fromPosition, toPosition) end function onStepIn(cid) return doTeleportThing(cid, getRandomPosition(fromPosition, toPosition)) end Com recursividade, se a primeira posição não for "boa", ele sorteia uma segunda dentro da área delimitada e por aí vai.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...