Muito bom cara!!
Obrigado por contribuir com a comunidade ![]()
Por Omega, 13 de set. de 2013 em Actions e Talkactions
info
Grupo: Herói
Registrado: 25/10/12
Posts: 2.4k
Reputação: +687
Gênero: Masculino
Char no Tibia: Nuncative

Muito bom cara!!
Obrigado por contribuir com a comunidade ![]()
info
Grupo: Marquês
Registrado: 03/02/13
Posts: 1.2k
Reputação: +254
Gênero: Masculino
Char no Tibia: Partiu Baladinha

U.u como eu disse achei ![]()
Seu script, como você são fodas omg *-* rep+++++
bjs no suvaco
info
Grupo: Campones
Registrado: 15/02/13
Posts: 35
Reputação: 0
Char no Tibia: Lositer

Cara , gostei muito , bem variável as Script, testei todas, estão nas mais perfeitas condições, com certeza irei usar , valeu . REP++
info
Grupo: Visconde
Registrado: 19/11/08
Posts: 364
Reputação: +104
Gênero: Masculino
Char no Tibia: Avronex Shiolalon

Bom saber que gostaram da minha action!
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum
Esse é um pacote com actions úteis para se usar nos servidores e, a menos que esteja indicado o contrário, são de minha autoria.
[Testado em servidor 8.6]
Para colocar essas actions no jogo, você deve colocar uma TAG no arquivo actions.xml do seu servidor, com um actionid e o nome do arquivo .lua (contendo o script) na pasta de scripts. Então, você deve colocar um item com aquele actionid no mapa.
[ACTION #1] Baús de quests completos
Descrição:
function onUse(cid, item, fromPos, item2, toPos) local _ = { [1] = {aid = 1234, item = 2121}, [2] = {aid = 1354, item = 2122}, [3] = {aid = 1231, item = 3121}, } -- Reservando os storages a partir de 202049 até o 202049 + número de baús nessa action for i = 1, #_ do _[i].storage = 202049 + i end for i, valor in ipairs(_) do if item.actionid == valor.aid then if getPlayerFreeCap(cid) >= getItemWeightById(valor.item, 1) then if getPlayerStorageValue(cid, valor.storage) == -1 then if doPlayerAddItem(cid, valor.item, 1, false) then doPlayerSendTextMessage(cid, 22, 'You have found a '..getItemNameById(valor.item)..'.') setPlayerStorageValue(cid, valor.storage, 1) else doPlayerSendTextMessage(cid, 22, 'You have found a '..getItemNameById(valor.item)..', but you need a free slot.') end else doPlayerSendTextMessage(cid, 22, 'It is empty.') end else doPlayerSendTextMessage(cid, 22, 'You have found a '..getItemNameById(valor.item)..'. It weighs '..getItemWeightById(valor.item, 1)..'.00 and it is too heavy.') end break end end return true end[ACTION #2] Summon simples
Descrição:
function onUse(cid, item, fromPos, item2, toPos) local config = { storage = 7550, storage2 = 7551, monster = 'demon', exhaust = 10, -- em segundos mana = 500 } local group = getPlayerGroupId(cid) if getPlayerStorageValue(cid, config.storage) <= os.time(t) then if isCreature(getPlayerStorageValue(cid, config.storage2)) then doSendMagicEffect(getCreaturePosition(getPlayerStorageValue(cid, config.storage2)), 2) doRemoveCreature(getPlayerStorageValue(cid, config.storage2)) end setPlayerGroupId(cid, 6) local monster = doSummonCreature(config.monster, fromPos) doConvinceCreature(cid, monster) setPlayerStorageValue(cid, config.storage2, monster) setPlayerStorageValue(cid, config.storage, os.time(t) + config.exhaust) doCreatureAddMana(cid, -config.mana) doPlayerAddSpentMana(cid, config.mana) setPlayerGroupId(cid, group) elseif isCreature(getPlayerStorageValue(cid, config.storage2)) then doSendMagicEffect(getCreaturePosition(getPlayerStorageValue(cid, config.storage2)), 2) doRemoveCreature(getPlayerStorageValue(cid, config.storage2)) else doSendMagicEffect(getCreaturePosition(cid), 2) doPlayerSendCancel(cid, 'You\'re exhausted.') end return true end[ACTION #3] Fome Zero
Descrição:
function onUse(cid, item, fromPos, item2, toPos) local foodID = {2666, 2671} -- IDs da comida que o jogador irá receber local food_final = foodID[math.random(#foodID)] if getPlayerFreeCap(cid) >= getItemWeightById(food_final) then if doPlayerAddItem(cid, food_final, 1, false) then doSendAnimatedText(getCreaturePosition(cid), 'FOOD!', math.random(255)) else doPlayerSendCancel('You don\'t have enough room!') end else doPlayerSendCancel(cid, 'It is too heavy!') end return true end[ACTION #4] Alavanca do Cassino
Descrição:
function onUse(cid, item, fromPos, item2, toPos) local ITEMS = { [0] = {chance = 0}, -- chance de não ganhar nada [1] = {itemid = 2666, count = 10, chance = 10}, -- as chances estão em porcentagens e devem somar 100% daqui pra baixo [2] = {itemid = 2671, count = 15, chance = 20}, [3] = {itemid = 2345, count = 1, chance = 70}, } local exhaust = 2 -- em segundos (não zerar para garantir a aleatoriedade) local price = 5000 -- Preço para jogar 1 vez em GPs local _rand = math.random(1,100) if getPlayerStorageValue(cid, 51725) > os.time() then doPlayerSendCancel(cid, "Wait a second!.") return true elseif not doPlayerRemoveMoney(cid, price) then doPlayerSendCancel(cid, "You need "..price.."gps to play in the casino.") return true elseif _rand <= ITEMS[0].chance then doPlayerSendTextMessage(cid, 22, 'Oooh, bad luck... try again!') if item.itemid % 2 == 1 then doTransformItem(item.uid, item.itemid+1) else doTransformItem(item.uid, item.itemid-1) end return true else _rand = math.abs(math.random(-100,-1)) setPlayerStorageValue(cid, 51725, os.time() + exhaust) local chance_ = 0 for i = 1, (#ITEMS) do ITEMS[i].chance = ITEMS[i].chance + chance_ chance_ = ITEMS[i].chance end for p = 1, (#ITEMS) do if _rand <= ITEMS[p].chance then local iteminfo = ITEMS[p] doPlayerAddItem(cid, iteminfo.itemid, iteminfo.count) doPlayerSendTextMessage(cid, 22, 'Yeey! You have won '..iteminfo.count..' '..getItemNameById(iteminfo.itemid)..'.') break end end end if item.itemid % 2 == 1 then doTransformItem(item.uid, item.itemid+1) else doTransformItem(item.uid, item.itemid-1) end return true end[ACTION #5] Fantasias de Monstros
Descrição:
function onUse(cid, item, frompos, item2, topos) local storage = 23589 local time = 5 -- Tempo de exhaust local monstros = { [1] = 'orc', [2] = 'orc rider', [3] = 'demon', [4] = 'hand of cursed fate', [5] = 'dragon', [6] = 'minotaur', [7] = 'sandcrawler', [8] = 'medusa', [9] = 'omruc', [10] = 'fire devil', [11] = 'elf arcanist', [12] = 'snake', [13] = 'pig', [14] = 'minotaur mage', [15] = 'skeleton' } local costume = math.random(1,#monstros) if exhaustion.check(cid,storage) == false then doSetMonsterOutfit(cid, monstros[costume]) exhaustion.set(cid,storage,time) doSendMagicEffect(getCreaturePosition(cid),13) return true else doSendMagicEffect(getCreaturePosition(cid),2) doPlayerSendCancel(cid,'You\'re exhausted.') return true end end[ACTION #6] Passagem Secreta
Descrição:
function onUse(cid, item, fromPos, item2, toPos) local wallPos = {x=123, y=324, z=7} local safePos = {x=123, y=325, z=7} -- Caso existam itens ou jogadores no momento em que a wall deve ser recriada, essa é a posição para a qual eles serão movidos local wallId = 9999 -- itemid da parede que será removida local i = 0 for stack = 1, 254 do if getThingFromPos({x=wallPos.x, y=wallPos.y, z=wallPos.z, stackpos=255-stack}).itemid == wallId then doRemoveItem(getThingFromPos({x=wallPos.x, y=wallPos.y, z=wallPos.z, stackpos=255-stack}).uid, 1) i = i + 1 end end if i == 0 then doSendMagicEffect(getCreaturePosition(cid), 2) return true elseif item.itemid % 2 == 0 then doTransformItem(item.uid, item.itemid-1) else doTransformItem(item.uid, item.itemid+1) end addEvent(doClosePassage, 5000, wallPos, safePos, wallId) return true end function doClosePassage(wallPos, safePos, wallId) for stack = 1, 254 do if getThingFromPos({x=wallPos.x, y=wallPos.y, z=wallPos.z, stackpos=255-stack}).uid > 0 then doTeleportThing(getThingFromPos({x=wallPos.x, y=wallPos.y, z=wallPos.z, stackpos=255-stack}).uid, safePos) end end doCreateItem(wallId, 1, wallPos) return true end[ACTION #7] Baús de vocações
Descrição:
function onUse(cid, item, fromPos, item2, toPos) local vocs = { -- Os nomes devem estar em letras minúsculas [1] = {name = {'sorcerer', 'master sorcerer'}, reward = {1234, 1}}, -- {itemid, quantidade} [2] = {name = {'druid', 'elder druid'}, reward = {2345, 2}}, [3] = {name = {'paladin', 'royal paladin'}, reward = {3456, 3}}, [4] = {name = {'knight', 'elite knight'}, reward = {4567, 4}}, } if getPlayerStorageValue(cid, 34561) == -1 then for vocId, voc in ipairs(vocs) do if isInArray(voc.name, string.lower(getPlayerVocationName(cid))) then doPlayerAddItem(cid, voc.reward[1], voc.reward[2]) doPlayerSendTextMessage(cid, 22, 'You have found '..voc.reward[2]..' '..getItemNameById(voc.reward[2])..'.') setPlayerStorageValue(cid, 34561, 1) break end end else doPlayerSendTextMessage(cid, 22, 'It is empty.') end return true end[ACTION #8] SUSTO!
Descrição:
[ACTION #9] Painel informativo
Descrição:
[ACTION #10] Armários realistas!
Autor: Avronex
Descrição:
[ACTION #11] Fogos de Artifício
Descrição:
local ini_effect = 6 -- Efeito inicial ao explodir local effects = {28, 29, 30} -- Efeitos que serão usados nas explosões local blows = 20 -- Número de explosões local delay = 500 -- Tempo entre as explosões (milissegundos) function onUse(cid, item, fromPos, itemEx, toPos) local positions = {} local main_pos = getThingPos(item.uid) for a = -2, 2 do for b = -2, 2 do local tmp_pos = {x = main_pos.x + a, y = main_pos.y + b, z = main_pos.z} if not (hasProperty(getThingFromPos(tmp_pos).uid, 3) or hasProperty(getThingFromPos(tmp_pos).uid, 7)) then positions[#positions + 1] = tmp_pos end end end doSendMagicEffect(main_pos, ini_effect) local tmp_delay = 1000 for i = 1, blows do local blow_pos = positions[math.random(#positions)] local tmp_effect = effects[math.random(#effects)] addEvent(doSendMagicEffect, tmp_delay, blow_pos, tmp_effect) tmp_delay = tmp_delay + delay end doRemoveItem(item.uid) return true endE aqui a lista termina por enquanto. Me avise se você achar/tiver uma action útil que possa entrar para a lista.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Correção para que o summon não dê dano em quem o invocou:
Editado Abril 1 por Omega