-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
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.
-
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
-
Não, não posso. Se quiser com talkaction, o sistema do Vodkart funciona muito bem.
-
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.
-
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.
-
Não, não tem.
-
creatureevent Anti Fast-attack Elf Bot
tópico respondeu ao warotserv de Oneshot em Globalevents e Spells
Vá estudar Lua antes de falar asneiras. A função table.maxn ou # não retorna index de tipo string, apenas numéricos positivos. -
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())
-
É, acho que o 0.3.6 não tem suporte para storages em forma de string. Desculpe
-
@SkyDarkyes Aproveitando que estou online, qual é esse script mesmo? Irei refazer.
-
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
-
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.
-
É 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.
-
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
-
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.
-
O melhor tutorial de Programação Orientada a Objetos em Lua (Em português)
tópico respondeu ao LuckOake de Oneshot em Tutoriais de Scripting
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. -
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.
- 9 respostas
-
- explicação da função os.clock
- resolvido
- (e 1 mais)
-
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.
-
Para o primeiro lugar, Tonynh. Não votarei para o terceiro lugar.
-
[Arquivado]OTs, ATs, meu ponto de vista
tópico respondeu ao kaiquegabriel de Oneshot em Noticias - Arquivo
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. -
moveevent Tile Teleporter (random)
tópico respondeu ao warotserv de Oneshot em Actions e Talkactions
Acredito que a chance de gerar um stack overflow é muito baixa mesmo. Ah sei lá, estou enferrujado. -
talkaction [SYSTEM] Infinite Level
tópico respondeu ao lovenina12 de Oneshot em Actions e Talkactions
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. -
moveevent Tile Teleporter (random)
tópico respondeu ao warotserv de Oneshot em Actions e Talkactions
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.