Ir para conteúdo
  • Cadastre-se

Dwarfer

Suporter
  • Total de itens

    429
  • Registro em

  • Última visita

  • Dias Ganhos

    33

Dwarfer venceu a última vez em Agosto 9

Dwarfer teve o conteúdo mais curtido!

Sobre Dwarfer

  • Rank
    Baronete

Informação de Perfil

  • Eu sou
    Scripter

Últimos Visitantes

4.486 visualizações
  1. Bem, resolvi trazer duas funções simples que já utilizo há um bom tempo e que creio que é realmente útil para o desenvolvimento de alguns scripts que envolvem operações com "tempo". Basicamente, elas evitam aqueles comentários "-- tempo em segundos" ou "-- tempo em minutos" e por aí vai, que acabam por diminuir a flexibilidade do script (uma das maiores vantagens da nossa querida linguagem Lua!). São elas: mathtime 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 Explicação: Essa função converte o tempo (especificado em um vetor que será o argumento da função) sempre para segundos. O primeiro elemento do vetor deve ser um número e o segundo a unidade de tempo. As unidades de tempo aceitáveis são: "sec" - segundo(s) "min" - minuto(s) "hour" - hora(s) "day" - dia(s) Exemplo: local tempo = {2, "min"} print(mathtime(tempo)) -- valor retornado: 120 getStrTime 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 Explicação: Essa função bem simples é basicamente para converter o tempo especificado em texto (em inglês) como um complemento à função mathtime. Exemplo: local tempo = {3, "hour"} print(getStrTime(tempo)) -- valor retornado: 3 hours Um exemplo simples e prático de um script utilizando ambas as funções acima e que envia uma mensagem depois de determinado tempo do player ter clicado em um item é demonstrado abaixo: local tempo_para_receber_msg = {3, "min"} function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You will receive the surprise message in "..getStrTime(tempo_para_receber_msg)..".") addEvent(function() if isPlayer(cid) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Tibia King: All about Tibia, bots and Ot servers!") end end, mathtime(tempo_para_receber_msg) * 1000) return true end Quem quiser ver para crer é só testar!
  2. Não deveria nem me dar o trabalho de responder. Na data do tópico eu estava disposto a fazer o script para disponibilizar para todos, como sempre faço, (você pode conferir as datas, caso queira), mas como o autor do pedido não me respondeu corretamente, nem tendo a preocupação de correr atrás do mínimo para que conseguisse o sistema, e não respondeu com educação a outras pessoas no tópico, achei que ele não merecia e não fiz (o que é uma opção minha, correto?).
  3. Ou seja, é exatamente o que você quer. Dê-se o trabalho de pelo menos ler o tópico.
  4. Caso seja tfs 0.4: Em talkactions/scripts crie um arquivo.lua: local quests = { ["demon"] = { min_level = 10, enter_pos = {x = 1, y = 1, z = 1}, area = {fromPos = {x = 1, y = 1, z = 1}, toPos = {x = 1, y = 1, z = 1}}, time_to_finish = {10, "min"}, time_to_make_again = {1, "hour"} }, ["dragon"] = { min_level = 10, enter_pos = {x = 1, y = 1, z = 1}, area = {fromPos = {x = 1, y = 1, z = 1}, toPos = {x = 1, y = 1, z = 1}}, time_to_finish = {10, "min"}, time_to_make_again = {1, "hour"} } } local time_storage = 87870 -- só modifique se necessário function onSay(cid, words, param, channel) local param, p, check = param:lower(), getPlayerPosition(cid), false if not param or param == "" then local str, n = '~~ [Available Quests] ~~\n\n', 1 for quest, info in pairs(quests) do str = str .. n .. " - " .. Fupper(quest) .. " (Level: "..info.min_level..")\n" n = n + 1 end doShowTextDialog(cid, 1955, str) return true end local t = quests[param] if not t then return doPlayerSendCancel(cid, "Quest not found.") end if getPlayerLevel(cid) < t.min_level then return doPlayerSendCancel(cid, "Only players level "..t.min_level.." or higher can go the "..param.." quest.") end if isInRange(p, t.area.fromPos, t.area.toPos) then return doPlayerSendCancel(cid, "You are already inside the "..param.." quest area.") end for quest, info in pairs(quests) do if isInRange(p, info.area.fromPos, info.area.toPos) then check = true end end if check then return doPlayerSendCancel(cid, "You cannot go to another quest inside a quest.") end local stor = getPlayerStorageValue(cid, time_storage) if stor > os.time() then return doPlayerSendCancel(cid, "You can go to a quest again at "..os.date("%d %B %Y %X", stor)..".") end doSendMagicEffect(p, CONST_ME_POFF) local destination = t.enter_pos doTeleportThing(cid, destination) doSendMagicEffect(destination, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Good luck in "..param.." quest! You have "..getStrTime(t.time_to_finish).." to finish or you will be kicked.") setPlayerStorageValue(cid, time_storage, mathtime(t.time_to_make_again) + os.time()) addEvent(function() if isPlayer(cid) then if isInRange(getPlayerPosition(cid), t.area.fromPos, t.area.toPos) then doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) local temple = getTownTemplePosition(getPlayerTown(cid)) doTeleportThing(cid, temple) doSendMagicEffect(temple, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Your time is over!") end end end, mathtime(t.time_to_finish) * 1000) 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 function Fupper(str) return (str:gsub("^%l", string.upper)) end Em talkactions.xml, adicione a tag: <talkaction words="!quest" event="script" value="NOMEDOARQUIVO.lua"/> Configuração: ["demon"] = { -- nome da quest min_level = 10, -- level mínimo para ir para a quest enter_pos = {x = 1, y = 1, z = 1}, -- posição de entrada na quest area = { fromPos = {x = 1, y = 1, z = 1}, -- posição do canto superior esquerdo da área toPos = {x = 1, y = 1, z = 1} -- posição do canto inferior direito da área }, time_to_finish = {10, "min"}, -- tempo que o player terá para finalizar a quest ("sec", "min", "hour", "day") time_to_make_again = {1, "hour"} -- tempo para poder fazer uma quest novamente }, Utilização: !quest -> mostra as quests disponíveis !quest nome da quest -> leva o player para a quest Ex.: !quest demon
  5. Utilizando a ferramenta de busca do fórum, encontrei esse tópico que é o que você precisa: Script do piso de acesso ao local: Em movements/scripts crie um arquivo.lua e cole isto dentro: function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) domodlib('KillM_func') if tonumber(getPlayerStorageValue(cid, tsk.storages[1])) then doTeleportThing(cid, fromPosition, true) doPlayerSendCancel(cid, "Você não tem acesso a esse local.") end return true end No movements.xml, adicione a tag: <movevent type="StepIn" actionid="XXXX" event="script" value="NOMEDOARQUIVO.lua"/> Edite 'XXXX' para o actionid do piso, além do nome do arquivo.
  6. function onSay(cid, words, param) local storage = 9999 -- mão mexa local itemid = 2145 -- id do item que vai remover local count = 10 -- quantidade do item que vai remover local looktype = 2192 -- O Looktype da outift que vai ser vendida if getPlayerStorageValue(cid, storage) >= 1 then doPlayerSendTextMessage(cid, 22, "Desculpe voce ja comprou essa outift") return true end if not doPlayerRemoveItem(cid,itemid,count) then doPlayerSendTextMessage(cid, 22, "Você não tem dinheiro suficiente") return true end doPlayerAddOutfit(cid,looktype,3) setPlayerStorageValue(cid, storage, 1) doPlayerSendTextMessage(cid, 22, "Você comprou a outift") return true end
  7. Fiz um mod aqui, teste-o: Configuração: JAIL_SYS = { block_mana = true, -- 'true' para bloquear ganho de mana, 'false' para não bloquear prision_area = { -- área da prisão fromPos = {x = 1, y = 1, z = 6}, -- posição do canto superior esquerdo (caso a prisão possua andares diferentes, aqui é o de menor 'z') toPos = {x = 2, y = 2, z = 7} -- posição do canto inferior direito da área (caso a prisão possua andares diferentes, aqui é o de maior 'z') }, max_security_skulls = {SKULL_RED, SKULL_BLACK}, -- caso o player tenha essas skulls, irão para as 'celas de segurança máxima' jails_enter_positions = { ["NORMAL"] = { -- posições das celas normais [1] = {x = 1, y = 1, z = 1}, [2] = {x = 1, y = 1, z = 1}, [3] = {x = 1, y = 1, z = 1}, }, ["MAX_SECURITY"] = { -- posições das celas de segurança máxima [1] = {x = 1, y = 1, z = 1}, [2] = {x = 1, y = 1, z = 1}, [3] = {x = 1, y = 1, z = 1}, }, }, storages = {jailtime = 76530} -- só modifique se necessário } Na linha: <globalevent name="JailBlockMana" interval="10000" event="script"><![CDATA[ Edite o 10000 (10 segundos) para o intervalo de tempo que todos da prisão terão a mana igual a 0. Para utilizar o comando: !jail Nome do player,tempo preso em minutos,levels perdidos Ex.: !jail Dwarfer,2,1 <- Preso por 2 minutos e perderá 1 level
  8. Provavelmente está no globalevents, mas envie o restante dos arquivos.
  9. Edite a unidade do tempo nessa linha como desejar: local unit = "min" -- "sec", "min", "hour", "day"
  10. local t = { time = 15, -- em segundos points = 70, -- aumento do skill storage = 15288, -- só modifique se necessário waittime = 60, -- em segundos tile = { [1] = {x=1509, y=1260, z=7}, -- posição do player [2] = {x=1509, y=1256, z=7} -- posição do alvo }, not_allowed_areas = { -- áreas não permitidas para soltar a magia [1] = {{x=1509, y=1259, z=7},{x=1509, y=1255, z=7}}, -- from, to [2] = {{x=979, y=911, z=7}, {x=994, y=918, z=7}}, [3] = {{x=1514, y=1262, z=7}, {x=1504, y=1253, z=7}}, [4] = {{x=1552, y=1254, z=7}, {x=1561, y=1262, z=7}}, [5] = {{x=979, y=911, z=7}, {x=994, y=918, z=7}}, [6] = {{x=1156, y=1192, z=7}, {x=1172, y=1172, z=7}}, [7] = {{x=664, y=1096, z=7}, {x=685, y=1104, z=7}}, [8] = {{x=1553, y=1254, z=7}, {x=1562, y=1262, z=7}}, [9] = {{x=1133, y=1039, z=12}, {x=972, y=873, z=12}}, [10] = {{x=1133, y=1039, z=11}, {x=972, y=873, z=11}}, [11] = {{x=1133, y=1039, z=10}, {x=972, y=873, z=10}} } } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, t.time*1000) setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, t.points) setConditionParam(condition, CONDITION_PARAM_SKILL_FIST, t.points) setConditionParam(condition, CONDITION_PARAM_SKILL_SWORD, t.points) setConditionParam(condition, CONDITION_PARAM_SKILL_AXE, t.points) setConditionParam(condition, CONDITION_PARAM_SKILL_CLUB, t.points) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, t.points) setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELD, t.points) function onCastSpell(cid, var) if exhaustion.check(cid, t.storage) then doPlayerSendCancel(cid, "Você precisa esperar "..exhaustion.get(cid, t.storage).. " segundos para usar novamente!") return false end local p, check = getCreaturePosition(cid), true for _, area in pairs(t.not_allowed_areas) do if isInRange(p, area[1], area[2]) then check = false break end end if not check then doPlayerSendCancel(cid, "Você nao pode usar o Tsukuyomi World aqui!") return false end local target = getCreatureTarget(cid) if not isPlayer(target) then doPlayerSendCancel(cid, "Você so pode usar essa magia em players!") return false end local targetPos = getCreaturePosition(target) exhaustion.set(cid, t.storage, t.waittime) doAddCondition(cid, condition) doCreatureSetNoMove(target, true) doTeleportThing(cid, t.tile[1]) doTeleportThing(target, t.tile[2]) doSendMagicEffect(targetPos, CONST_ME_POFF) addEvent(function() if isPlayer(cid) then doTeleportThing(cid, p) end if isPlayer(target) then doTeleportThing(target, targetPos) doCreatureSetNoMove(target, false) end end, t.time * 1000) return true end
  11. local t = { not_allowed_areas = { [1] = {from = {x = 941, y = 617, z = 7}, to = {x = 965, y = 640, z = 7}}, -- começo e final do mapa [2] = {from = {x = 979, y = 901, z = 7}, to = {x = 991, y = 905, z = 7}} }, max_summons = 4, monster = "Corvo", effect_on_appear = 111 } function onCastSpell(cid, var) local check = true for _, area in pairs(t.not_allowed_areas) do if isInRange(getCreaturePosition(cid), area.from, area.to) then check = false break end end if not check then doPlayerSendCancel(cid, "Você não pode usar summons aqui!") return true end if #getCreatureSummons(cid) >= t.max_summons then doPlayerSendCancel(cid, "Máximo número de clones atingido!") return true end local p, sum, out = getCreaturePosition(cid), #getCreatureSummons(cid), getCreatureOutfit(cid) repeat local clone = doCreateMonster(t.monster, {x = p.x + math.random(-1,1), y = p.y + math.random(-1,1), z = p.z}, false, true) if clone then local clone_out = getCreatureOutfit(clone) clone_out.lookType = out.lookType doSetCreatureOutfit(clone, clone_out, -1) doSendMagicEffect(getCreaturePosition(clone), t.effect_on_appear) doConvinceCreature(cid, clone) sum = sum + 1 end until (sum == t.max_summons) return true end
  12. Crie a loja exatamente como está na imagem que vai funcionar.
  13. Acho que você tentou usar com menos de 3 monstros para algum rank, não foi? Altere a linha: local name = monsters[number][math.random(1, #monsters)] Para: local name = monsters[number][math.random(1, #monsters[number])]
×
Close