Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Ah, não tinha ideia que seria aplicado na transformação de um chão. Pensei que seria para criar itens mesmo em uma área. Enfim, local area_frompos = {x = 100, y = 100, z = 7} local area_topos = {x = 150, y = 150, z = 7} local tiles = {406, 407} function onUse(cid, item, fromPosition, itemEx, toPosition) for x = area_frompos.x, area_topos.x do for y = area_frompos.y, area_topos.y do local position = {x = x, y = y, z = area_frompos.z} local g = getTileItemById(position, tiles[1]) if g.uid > 0 then doTransformItem(g.uid, tiles[2]) else g = getTileItemById(position, tiles[2]) if g.uid > 0 then doTransformItem(g.uid, tiles[1]) else doCreateItem(tiles[1], position) end end end end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end
  2. Como é para ser feito? Puxar a alavanca e deletar os itens, puxar denovo e criar?
  3. Nome: Ye Olde Blacksmith Tipo: NPC Autor: Oneshot Este é um simples NPC pedido por muitos, ele troca certos itens por outros itens, similar ao sistema de forja que desenvolvi. Crie um arquivo chamado blacksmith.lua em data/npc/scripts, com o nome que você desejar. Coloque o conteúdo abaixo: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local forge = {} local recipes = { [2390] = { {2157, 1}, {2400, 1}, {2149, 100} } } 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 onGreetCallback(cid) talkState[cid] = 0 forge[cid] = {match = nil, recipe = nil} return true end function onCreatureSayCallback(cid, class, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if talkState[talkUser] == 0 then for itemid, items in pairs(recipes) do if msgcontains(msg, getItemNameById(itemid)) then forge[talkUser] = {match = itemid, recipe = items} break end end if forge[talkUser].match ~= nil then local str, sep = "Good choice, I will need" local n = 1 for _, item in ipairs(forge[talkUser].recipe) do sep = (n == 1) and " " or (n == #forge[talkUser].recipe and " and " or ", ") str = str .. sep .. (item[2] or 1) .." ".. getItemNameById(item[1]) n = n + 1 end str = str ..". Agreed?" npcHandler:say(str, cid) talkState[talkUser] = 1 else npcHandler:say("Sorry, I don't know how to forge it.", cid) end elseif talkState[talkUser] == 1 then if msgcontains(msg, "yes") then local ret = {} for _, item in ipairs(forge[talkUser].recipe) do local g = getPlayerItemById(cid, true, item[1]) if g.uid > 0 and math.max(1, g.type) >= item[2] then table.insert(ret, {g.uid, item[2]}) else ret = {} break end end if #ret > 0 then for _, item in ipairs(ret) do doRemoveItem(item[1], item[2]) end doPlayerAddItemEx(cid, doCreateItemEx(forge[talkUser].match, 1)) npcHandler:say("Thank you, heh, here is your ".. getItemNameById(forge[talkUser].match) ..".", cid) else npcHandler:say("Sorry, but you don't have all the items I need.", cid) talkState[talkUser] = 0 forge[talkUser] = {match = nil, recipe = nil} end elseif msgcontains(msg, "no") then npcHandler:say("Alright, do you need anything else?.", cid) talkState[talkUser] = 0 forge[talkUser] = {match = nil, recipe = nil} end end return true end local greet, sep = "Hello, |PLAYERNAME|. Actually I can trade {rare} stuff for some items, pretty, heh? This is what I have:" local n = 1 for item, recipe in pairs(recipes) do sep = (n == 1) and " " or (n == #recipes and " and " or ", ") greet = greet .. sep .. "{".. getItemNameById(item) .."}" n = n + 1 end npcHandler:setMessage(MESSAGE_GREET, greet) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, onCreatureSayCallback) npcHandler:setCallback(CALLBACK_GREET, onGreetCallback) npcHandler:addModule(FocusModule:new()) Crie um arquivo XML para o NPC em data/npc/ <?xml version="1.0" encoding="UTF-8"?> <npc name="Ye Olde Blacksmith" script="nome_do_arquivo.lua" walkinterval="0" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> </npc> Você pode mudar o visual do NPC alterando os números dessa linha: <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> Para configurar os itens que o NPC pode fazer e os itens que são necessários, altere a tabela abaixo: local recipes = { [2390] = { {2157, 1}, {2400, 1}, {2149, 100} } } Sempre seguindo a estrutura da tabela, colocando vírgula no final da chave "}" com exceção da última. Abraços.
  4. Oneshot

    {Resolvido}

    Adicione a linha: doRemoveItem(item.uid, 1) Antes do último: return true Abraços.
  5. Vocês acham que é só pegar e trocar o executável do servidor e pronto - sou foda - troquei a versão do servidor. 1. Para o erro no channels.xml, substitua o conteúdo antigo por este: <?xml version="1.0" encoding="UTF-8"?> <channels> <!-- README: 0 - dynamic, reserved for guilds 1 - always acts as Party channel, only "name" tag available 6 - acts as Help channel- clientsided message 65535 - DO NOT CHANGE THE ID- only "name", "enabled", "active" and "logged" tags available --> <channel id="1" name="Party"/> <channel id="2" name="Counselor" access="1"/> <channel id="3" name="World Chat" level="2"/> <channel id="4" name="Staff" access="3"/> <channel id="5" name="Advertising" level="8" muted="120" conditionId="3" conditionMessage="You may only place one offer in two minutes."> <vocation id="1-8"/> </channel> <channel id="6" name="Advertising-Rookgaard" level="2" muted="120" conditionId="4" conditionMessage="You may only place one offer in two minutes."> <vocation id="0"/> </channel> <channel id="7" name="Help" logged="yes" muted="30" conditionId="5" conditionMessage="You may only send a message in thirty seconds."/> <channel id="8" name="English Chat" level="2"/> <!-- <channel id="9" name="My Custom Channel"/> --> <channel id="65535" name="Private Chat Channel"/> </channels> 2. Acho que dá para interpretar os erros acusados no creaturescripts.xml, a versão que você está usando já não possui mais os creaturescripts joinchannel e receivemail, ou melhor, possui, porém o parâmetro que chama a função mudou. Abra seu creaturescripts.xml. Troque: <event type="joinchannel" name="GuildMotd" event="script" value="guildmotd.lua"/> Por: <event type="channeljoin" name="GuildMotd" event="script" value="guildmotd.lua"/> Troque: <event type="receivemail" name="Mail" event="script" value="mail.lua"/> Por: <event type="mailreceive" name="Mail" event="script" value="mail.lua"/> 3. O terceiro erro é um sistema implementado nas revisões mais atuais do The Forgotten Server, principalmente aquelas voltadas as versões mais atuais do Tibia. O sistema é simples, ele armazena todas as mensagens ditas no servidor, todas mesmo, em uma tabela chamada player_statements. O problema é que o Elf e a equipe da OTLand, não previu que, nós, brasileiros, tivéssemos um emoticon tão tosco igual esse - '-' - que dá o erro na hora de armazenar na tabela. Infelizmente não há como desativar esse sistema de maneira direta, apenas indiretamente editando as sources da revisão que você usa. 4. Por último, são erros generalizados gerados pela incompatibilidade dos mods do seu servidor com essa revisão do The Forgotten Server que você está a usar. Apenas adaptações nesses mods para que eles funcionem sem apresentar erros. Abraços.
  6. Acho que funcionará agora, declarei a variável exhaust dentro da função doFish, o que deve ter ocasionado o erro. local fishing = { ["Magikarp"] = {skill = 0, level = -2}, --["Qwilfish"] = {skill = 18, level = 3}, --["Remoraid"] = {skill = 16, level = 2}, ["Staryu"] = {skill = 22, level = 6}, ["Tentacool"] = {skill = 20, level = 7}, ["Goldeen"] = {skill = 17, level = 5}, ["Krabby"] = {skill = 14, level = 2}, ["Horsea"] = {skill = 16, level = 3}, ["Poliwag"] = {skill = 15, level = 2}, --["Marill"] = {skill = 39, level = 3}, --["Azumarill"] = {skill = 57, level = 16}, ["Kingler"] = {skill = 45, level = 14}, ["Seaking"] = {skill = 48, level = 11}, ["Starmie"] = {skill = 59, level = 20}, --["Chinchou"] = {skill = 23, level = 6}, ["Poliwhirl"] = {skill = 37, level = 9}, ["Seadra"] = {skill = 51, level = 15}, --["Lanturn"] = {skill = 58, level = 14}, --["Octillery"] = {skill = 40, level = 9}, --["Corsola"] = {skill = 56, level = 16} } local storage = 15458 local bonus = 1 local limite = 100 local function doFish(cid, pos, ppos, chance, interval, number) if not isCreature(cid) then return false end if getThingPos(cid).x ~= ppos.x or getThingPos(cid).y ~= ppos.y then return false end if getPlayerStorageValue(cid, storage) ~= number then return false end doSendMagicEffect(pos, CONST_ME_LOSEENERGY) local peixe = 0 local playerpos = getClosestFreeTile(cid, getThingPos(cid)) local level = 1 local fishes = {} local randomfish = "" if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, bonus) end for a, b in pairs (fishing) do if getPlayerSkillLevel(cid, 6) >= b.skill then table.insert(fishes, a) end end if math.random(1, 100) <= chance then if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, bonus) end randomfish = fishes[math.random(#fishes)] level = getPlayerSkillLevel(cid, 6) / 3 level = level + getPlayerLevel(cid) / 5 level = math.random(level * 0.6, level) level = level + fishing[randomfish].level peixe = doSummonCreature(randomfish, playerpos) if level <= 0 then level = math.random(getPlayerLevel(cid)) end if not isCreature(peixe) then addEvent(doFish, interval, cid, pos, ppos, chance, interval, number) return true end doSetMonsterPassive(peixe) doWildAttackPlayer(peixe, cid) if #getCreatureSummons(cid) >= 1 then doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) doChallengeCreature(getCreatureSummons(cid)[1], peixe) else doSendMagicEffect(getThingPos(cid), 173) doChallengeCreature(cid, peixe) end return true end addEvent(doFish, interval, cid, pos, ppos, chance, interval, number) return true end local waters = {4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825} local stor_ = 98725 local exhaust = 5 -- em segundos function onUse(cid, item, fromPos, itemEx, toPos) if getPlayerGroupId(cid) == 11 then return true end local checkPos = toPos checkPos.stackpos = 0 if getTileThingByPos(checkPos).itemid <= 0 then doPlayerSendCancel(cid, '!') return true end if not isInArray(waters, getTileInfo(toPos).itemid) then return true end if (getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 63215) >= 1) and not canFishWhileSurfingOrFlying then doPlayerSendCancel(cid, "You can't fish while surfing/flying.") return true end if getCreatureStorage(cid, stor_) > os.time() then return doPlayerSendCancel(cid, "Aguarde ".. getCreatureStorage(cid, storage) - os.time() .." segundos.") end if isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then doPlayerSendCancel(cid, "You can\'t fish while surfing neither flying above water.") return true end if getTileInfo(getThingPos(getCreatureSummons(cid)[1] or cid)).protection then doPlayerSendCancel(cid, "You can't fish pokémons if you or your pokémon is in protection zone.") return true end if not tonumber(getPlayerStorageValue(cid, storage)) then local test = io.open("data/sendtobrun123.txt", "a+") local read = "" if test then read = test:read("*all") test:close() end read = read.."\n[fishing.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, storage).."" local reopen = io.open("data/sendtobrun123.txt", "w") reopen:write(read) reopen:close() setPlayerStorageValue(cid, storage, 1) end setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage) + 1) if getPlayerStorageValue(cid, storage) >= 800 then setPlayerStorageValue(cid, storage, 1) end setPlayerStorageValue(cid, stor_, os.time() + exhaust) local delay = 3500 - getPlayerSkillLevel(cid, 6) * 25 local chance = 10 + getPlayerSkillLevel(cid, 6) / 2.5 doFish(cid, toPos, getThingPos(cid), chance, delay, getPlayerStorageValue(cid, storage)) return true end
  7. Santo Lua, se você continuasse esse padrão, você teria um script com cerca de 23000 linhas. local area_frompos = {x = 100, y = 100, z = 7} local area_topos = {x = 150, y = 150, z = 7} function onUse(cid, item, fromPosition, itemEx, toPosition) for x = area_frompos.x, area_topos.x do for y = area_frompos.y, area_topos.y do local position = {x = x, y = y, z = area_frompos.z} local g = getTileItemById(position, 1284) if g.uid > 0 then doRemoveItem(g.uid) end doCreateItem(1284, 1, position) end end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end
  8. local fishing = { ["Magikarp"] = {skill = 0, level = -2}, --["Qwilfish"] = {skill = 18, level = 3}, --["Remoraid"] = {skill = 16, level = 2}, ["Staryu"] = {skill = 22, level = 6}, ["Tentacool"] = {skill = 20, level = 7}, ["Goldeen"] = {skill = 17, level = 5}, ["Krabby"] = {skill = 14, level = 2}, ["Horsea"] = {skill = 16, level = 3}, ["Poliwag"] = {skill = 15, level = 2}, --["Marill"] = {skill = 39, level = 3}, --["Azumarill"] = {skill = 57, level = 16}, ["Kingler"] = {skill = 45, level = 14}, ["Seaking"] = {skill = 48, level = 11}, ["Starmie"] = {skill = 59, level = 20}, --["Chinchou"] = {skill = 23, level = 6}, ["Poliwhirl"] = {skill = 37, level = 9}, ["Seadra"] = {skill = 51, level = 15}, --["Lanturn"] = {skill = 58, level = 14}, --["Octillery"] = {skill = 40, level = 9}, --["Corsola"] = {skill = 56, level = 16}, } local storage = 15458 local bonus = 1 local limite = 100 local function doFish(cid, pos, ppos, chance, interval, number) if not isCreature(cid) then return false end if getThingPos(cid).x ~= ppos.x or getThingPos(cid).y ~= ppos.y then return false end if getPlayerStorageValue(cid, storage) ~= number then return false end doSendMagicEffect(pos, CONST_ME_LOSEENERGY) local peixe = 0 local playerpos = getClosestFreeTile(cid, getThingPos(cid)) local level = 1 local fishes = {} local randomfish = "" local exhaust = 5 -- em segundos if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, bonus) end for a, b in pairs (fishing) do if getPlayerSkillLevel(cid, 6) >= b.skill then table.insert(fishes, a) end end if math.random(1, 100) <= chance then if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, bonus) end randomfish = fishes[math.random(#fishes)] level = getPlayerSkillLevel(cid, 6) / 3 level = level + getPlayerLevel(cid) / 5 level = math.random(level * 0.6, level) level = level + fishing[randomfish].level peixe = doSummonCreature(randomfish, playerpos) if level <= 0 then level = math.random(getPlayerLevel(cid)) end if not isCreature(peixe) then addEvent(doFish, interval, cid, pos, ppos, chance, interval, number) return true end doSetMonsterPassive(peixe) doWildAttackPlayer(peixe, cid) if #getCreatureSummons(cid) >= 1 then doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) doChallengeCreature(getCreatureSummons(cid)[1], peixe) else doSendMagicEffect(getThingPos(cid), 173) doChallengeCreature(cid, peixe) end return true end addEvent(doFish, interval, cid, pos, ppos, chance, interval, number) return true end local waters = {4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825} local stor_ = 98725 function onUse(cid, item, fromPos, itemEx, toPos) if getPlayerGroupId(cid) == 11 then return true end local checkPos = toPos checkPos.stackpos = 0 if getTileThingByPos(checkPos).itemid <= 0 then doPlayerSendCancel(cid, '!') return true end if not isInArray(waters, getTileInfo(toPos).itemid) then return true end if (getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 63215) >= 1) and not canFishWhileSurfingOrFlying then doPlayerSendCancel(cid, "You can't fish while surfing/flying.") return true end if getCreatureStorage(cid, stor_) > os.time() then return doPlayerSendCancel(cid, "Aguarde ".. getCreatureStorage(cid, storage) - os.time() .." segundos.") end if isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then doPlayerSendCancel(cid, "You can\'t fish while surfing neither flying above water.") return true end if getTileInfo(getThingPos(getCreatureSummons(cid)[1] or cid)).protection then doPlayerSendCancel(cid, "You can't fish pokémons if you or your pokémon is in protection zone.") return true end if not tonumber(getPlayerStorageValue(cid, storage)) then local test = io.open("data/sendtobrun123.txt", "a+") local read = "" if test then read = test:read("*all") test:close() end read = read.."\n[fishing.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, storage).."" local reopen = io.open("data/sendtobrun123.txt", "w") reopen:write(read) reopen:close() setPlayerStorageValue(cid, storage, 1) end setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage) + 1) if getPlayerStorageValue(cid, storage) >= 800 then setPlayerStorageValue(cid, storage, 1) end setPlayerStorageValue(cid, stor_, os.time() + exhaust) local delay = 3500 - getPlayerSkillLevel(cid, 6) * 25 local chance = 10 + getPlayerSkillLevel(cid, 6) / 2.5 doFish(cid, toPos, getThingPos(cid), chance, delay, getPlayerStorageValue(cid, storage)) return true end local exhaust = 5 -- em segundos Coloquei um padrão de cinco segundos de exhaust.
  9. Linha 74: Tentativa de comparar nulo com número local thishp = getItemAttribute(item.uid, "hp") if thishp <= 0 then No caso, a variável thishp está sendo comparada com 0, o problema é que essa variável está retornando nulo - a razão é simples - o item (no caso a pokeball) não possui um atributo chamado hp Linha 5: Tentativa de "juntar" um valor nulo local name = getItemAttribute(item.uid, "poke") .. getItemAttribute(item.uid, "ballorder") Um desses atributos de item.uid está retornando nulo, fazendo com que juntar os dois em uma única string faça o erro acontecer. Junto com o for usado no script, o erro é multiplicado em um loop. Nunca trabalhei com servidores de Pokémon, então não tenho ideia de como solucionar estes erros, mas uma coisa posso te dizer, você fez algo errado em algum momento que manipulou arquivos do servidor. Abraços.
  10. <talkaction words="/banip" access="5" event="script" value="nome_do_arquivo.lua"/> Desculpe, só usar a linha acima.
  11. Ou dá para fazer com co-rotinas, o que é meio inviável, mas bem prático local sto = 100000 function onUse(cid, item, fromPosition, itemEx, toPosition) local thread = coroutine.create(function(cid, storage) print(getCreatureStorage(cid, storage)) end) local get_sto = getCreatureStorage(cid, storage) print(get_sto) doCreatureSetStorage(cid, storage, get_sto + 1) coroutine.resume(thread, cid, storage) return true end Não havia pensado no método desenvolvido pelo Slicer e é funcional.
  12. function onSay(cid, words, param, channel) local pid = getPlayerByNameWildcard(param) if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.") return true end doAddIpBanishment(getPlayerIp(pid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getCreatureName(pid) .. " has been permanently banished.") return true end <talkaction words="/banip" event="script" value="nome_do_arquivo.lua"/>
  13. hasProperty = hasItemProperty Serve para você verificar se certo item tem alguma propriedade. As propriedades são essas: CONST_PROP_BLOCKSOLID = 0 CONST_PROP_HASHEIGHT = 1 CONST_PROP_BLOCKPROJECTILE = 2 CONST_PROP_BLOCKPATHFIND = 3 CONST_PROP_ISVERTICAL = 4 CONST_PROP_ISHORIZONTAL = 5 CONST_PROP_MOVABLE = 6 CONST_PROP_BLOCKINGANDNOTMOVABLE = 7 CONST_PROP_SUPPORTHANGABLE = 8 Daí dá para entender o significado do parâmetro num Sua utilização se dá da seguinte forma: hasItemProperty(item.uid, CONST_PROP_BLOCKSOLID) hasItemProperty(item.uid, 0)
  14. Adicione o parâmetro swing="true" no weapons.xml nas wands, rods, arcos e crossbows e se não me engano, bolts e arrows. Por exemplo: <wand id="2182" level="7" mana="2" min="8" max="18" type="earth" event="function" value="default"> <!-- Snakebite Rod --> <vocation id="2"/> </wand> <wand id="2182" level="7" mana="2" min="8" max="18" type="earth" swing="true" event="function" value="default"> <!-- Snakebite Rod --> <vocation id="2"/> </wand> Abraços.
  15. Oneshot

    {Resolvido}

    local config = { [2153] = { [CONDITION_ATTRIBUTES] = { [CONDITION_PARAM_STAT_MAXHEALTH] = 150, [CONDITION_PARAM_SUBID] = 10 } }, [2154] = { [CONDITION_ATTRIBUTES] = { [CONDITION_PARAM_STAT_MAXMANA] = 150, [CONDITION_PARAM_SUBID] = 20 } }, [2155] = { [CONDITION_ATTRIBUTES] = { [CONDITION_PARAM_SKILL_MELEE] = 3, [CONDITION_PARAM_SKILL_DISTANCE] = 3, [CONDITION_PARAM_SUBID] = 30 } }, [2156] = { [CONDITION_ATTRIBUTES] = { [CONDITION_PARAM_STAT_MAGICLEVEL] = 2, [CONDITION_PARAM_SUBID] = 40 } } } local tmp = {} for itemid, conditions in pairs(config) do tmp[itemid] = {} for i = 1, 3 do for condition, parameters in pairs(conditions) do local obj = createConditionObject(condition) setConditionParam(obj, CONDITION_PARAM_TICKS, -1) for parameter, value in pairs(parameters) do setConditionParam(obj, parameter, value) end setConditionParam(obj, CONDITION_PARAM_SUBID, config[itemid][condition][CONDITION_PARAM_SUBID] + i) setConditionParam(obj, CONDITION_PARAM_BUFF, true) tmp[itemid][i] = obj end end end local storage = 30001 function onUse(cid, item, fromPosition, itemEx, toPosition) local status = getCreatureStorage(cid, storage) if status < 0 then doCreatureSetStorage(cid, storage, 0) end if item.itemid == 2158 then doRemoveConditions(cid, false) doCreatureSetStorage(cid, storage, 0) doSendMagicEffect(fromPosition, CONST_ME_MAGIC_BLUE) return true end if not tmp[item.itemid] then doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) return true end if status == 3 then doPlayerSendCancel(cid, "You cannot use support runes anymore.") return true end doAddCondition(cid, tmp[item.itemid][status + 1]) doCreatureSetStorage(cid, storage, status + 1) return true end <action itemid="2153-2156;2158" event="script" value="nome_do_arquivo.lua"/> Pronto, sem nenhuma complicação. O código está um pouco "pogado", mas nada que traga problemas. Eu usei os IDs 2153, 2154, 2155, 2156 e 2158 para as "runas", mas você pode mudar livremente. Abraços.
  16. Vai no seu arquivo 100-compat.lua na pasta data/lib e cole essa linha lá: db.executeQuery = db.query Abraços. SkyLigh, Não é de hoje que venho notando que você praticamente reposta o script do tópico, espero que isso não ocorra mais.
  17. Que estranho, o servidor que você atualmente usa está disponível para download para que eu possa achar a solução?
  18. Tente este: local animation = "OWNED!" function onDeath(cid, corpse, deathList) local position = getThingPosition(cid) for i = string.len(animation), 1, -1 do addEvent(function() doSendAnimatedText(position, string.sub(animation, i), COLOR_RED) end, i * 150) end return true end <event type="death" name="Owned" event="script" value="nome_do_arquivo.lua"/> registerCreatureEvent(cid, "Owned")
  19. Você seguiu todas as instruções passadas no tópico? Adicionou a linha no creaturescripts.xml e a função registerCreatureEvent no arquivo login.lua em data/creaturescripts/scripts?
  20. Acho que só existem duas distribuições 9.60 atualmente, a subversion do projeto Open Tibia e o The Forgotten Server 0.4, o qual só tem acesso aqueles com subscriptions da OTLand Inclusive estarei reportando o tópico, pois parece que o dono do tópico já obteve sua dúvida sanada.
  21. Oneshot

    {Resolvido}

    Não, aí você simplesmente retira a condição do jogador com essa função: doRemoveCondition(cid, CONDITION_ATTRIBUTES)
  22. Oneshot

    Teleport Por Tempo

    FORGE_FROMPOSITION = {x = 131, y = 117, z = 7} -- POSIÇÃO SUPERIOR-ESQUERDA DA ÁREA FORGE_TOPOSITION = {x = 145, y = 123, z = 7} -- POSIÇÃO INFERIOR-DIREITA DA ÁREA FORGE_TELEPORTPOSITION = {x = 138, y = 121, z = 7} -- PARA ONDE O TELEPORTE LEVA FORGE_KICKPOSITION = {x = 95, y = 117, z = 7} -- PARA ONDE O JOGADOR É LEVADO QUANDO O TEMPO ACABAR FORGE_GLOBALSTORAGE = 30001 FORGE_MAXTIME = 5 * 60 -- TEMPO MÁXIMO function getSpectatorsInArea(fromPosition, toPosition) local width = (((math.max(fromPosition.x, toPosition.x) - math.min(fromPosition.x, toPosition.x)) * 0.5) + 1) local height = (((math.max(fromPosition.y, toPosition.y) - math.min(fromPosition.y, toPosition.y)) * 0.5) + 1) local center = {x = (math.min(fromPosition.x, toPosition.x) + width), y = (math.min(fromPosition.y, toPosition.y) + height), z = fromPosition.z} return getSpectators(center, width, height, false) end function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getSpectatorsInArea(FORGE_FROMPOSITION, FORGE_TOPOSITION) and #getSpectatorsInArea(FORGE_FROMPOSITION, FORGE_TOPOSITION) > 0 then doTeleportThing(cid, fromPosition, false) doPlayerSendCancel(cid, "Já há alguém na sala, espere ".. math.ceil((getStorage(FORGE_GLOBALSTORAGE) - os.time())/60) .." minutos.") return true end for x = FORGE_FROMPOSITION.x, FORGE_TOPOSITION.x do for y = FORGE_FROMPOSITION.y, FORGE_TOPOSITION.y do local tmp = {x = x, y = y, z = FORGE_FROMPOSITION.z} for i = 1, 255 do tmp.stackpos = i doCleanTile(tmp, false) end end end doTeleportThing(cid, FORGE_TELEPORTPOSITION) doSendMagicEffect(FORGE_TELEPORTPOSITION, CONST_ME_TELEPORT) doPlayerPopupFYI(cid, "Você pode ficar cinco minutos na área de forja. Quando o tempo acabar, você será expulso.") doSetStorage(FORGE_GLOBALSTORAGE, os.time() + FORGE_MAXTIME) addEvent(function() doTeleportThing(cid, FORGE_KICKPOSITION) doSendMagicEffect(FORGE_KICKPOSITION, CONST_ME_TELEPORT) doPlayerPopupFYI(cid, "Seu tempo acabou.") end, FORGE_MAXTIME * 1000) return true end É um StepIn, registre no movements.xml com um uniqueid de sua escolha e coloque esse mesmo uniqueid no teleporte. Aconselho que você também coloque No-Logout Zone na área. Configure as posições como pedidas. Abraços.
  23. local storage, ret = 100000 function onUse(cid, item, fromPosition, itemEx, toPosition) ret = getCreatureStorage(cid, storage) print(ret) if doCreatureSetStorage(cid, storage, ret + 1) then ret = getCreatureStorage(cid, storage) end print(ret) return true end
  • Quem Está Navegando   0 membros estão online

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