Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Vá estudar Lua antes de falar asneiras. A função table.maxn ou # não retorna index de tipo string, apenas numéricos positivos.
  2. 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())
  3. @SkyDarkyes Aproveitando que estou online, qual é esse script mesmo? Irei refazer.
  4. 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
  5. 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.
  6. Oneshot

    Pips

    Monitorador, eu ri.
  7. É 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.
  8. 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
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. Começarei a desenvolver novos e incríveis sistemas para 10.10 ou The Forgotten Server 1.0
  14. Para o primeiro lugar, Tonynh. Não votarei para o terceiro lugar.
  15. 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.
  16. Acredito que a chance de gerar um stack overflow é muito baixa mesmo. Ah sei lá, estou enferrujado.
  17. 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.
  18. 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.
  19. Seu erro está aqui: <movevent type="Equip" itemid="7463" slot="head" event="function" value="onEquipItem"> </movevent> Você colocou slot igual a head, coloque armor.
  20. Meus sinceros parabéns, afinal o bom scripter não é aquele que desenvolve códigos complexos, mas sim aquele que desenvolve códigos com criatividade. Tome meu like e compre tudo de doce.
  21. Eu coloquei 15 milissegundos por colocar, não sei se vai funcionar nesse curto espaço de tempo. rsrsr
  22. Então, fazer um sistema de colisão de magias não tem muito segredo. O omega acertou ao dizer que as magias são executadas instantaneamente, mas errou ao dizer que não tem como verificar se o alvo planeja usar a magia também. Eu fiz baseado na magia Flame Strike, do Tibia. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onCastSpell(cid, var) doCreatureSetStorage(cid, 87600, 1) addEvent(function() local target = variantToNumber(var) if isPlayer(target) then local fromPosition, toPosition = getCreaturePosition(cid), getCreaturePosition(target) if getCreatureStorage(target, 87600) == 1 and getCreatureTarget(target) == cid then doCreatureSetStorage(cid, 87600, 2) doCreatureSetStorage(target, 87600, 2) local midPosition = { x = (fromPosition.x > toPosition.x and (fromPosition.x - ((fromPosition.x - toPosition.x) * 0.5)) or (toPosition.x - ((toPosition.x - fromPosition.x) * 0.5))), y = (fromPosition.y > toPosition.y and (fromPosition.y - ((fromPosition.y - toPosition.y) * 0.5)) or (toPosition.y - ((toPosition.y - fromPosition.y) * 0.5))), z = fromPosition.z, } doSendDistanceShoot(fromPosition, midPosition, CONST_ANI_FIRE) doSendDistanceShoot(toPosition, midPosition, CONST_ANI_FIRE) doSendMagicEffect(midPosition, CONST_ME_FIREAREA) end end if getCreatureStorage(cid, 87600) < 2 then doCreatureSetStorage(cid, 87600, -1) doCombat(cid, combat, var) end end, 15) end Abraços
  23. Isso é impossível, porque no tibia as magias acontecem instantaneamente, portanto, quando o jogador1 usar a primeira magia, vai acertar imediatamente o jogador2 e não tem como checar se o jogador2 planeja usar a mesma magia. Ou seja, não tem como fazer porque as magias NUNCA serão jogadas ao MESMO tempo, nem que a variação entre elas seja em alguns poucos milissegundos. Posso fazer?
  24. Boa iniciativa, omega blueheaven. Só uma dica, amigo, no seu primeiro script que você atribui uma string em uma storage, não esqueça que o tamanho da string é limitado. Abraços.
  • Quem Está Navegando   0 membros estão online

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