Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''mod''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

  1. Bom pessoal, eu encontrei um mod de evento CTF, eu configurei tudo certinho e nenhum erro aparece no meu TFS 0,4, mas quando eu ligo o server, o evento começa dizendo que "em um minuto, CTF vai começar ! ". Eu configurei para cancelar o evento, se um jogador ou menos entrar no CTF, ok, mas, entro com 2 jogadores, e depois de passar o 1 minuto, o evento é cancelado, mesmo se eu ter entrado com dois jogadores. Eu vim aqui para pedir para alguém que pode editar o mod, para começar o evento em algum tempo, que eu escolher, e se é possível, para criar uma talkaction para abrir o CTF, e outra talkaction para fechar o CTF se ele estiver aberto. O talkaction que eu quero é: O meu ctf.xml(mod) é: POR FAVOR, ME AJUDEM! NINGUÉM AJUDOU ATÉ AGORA! PRECISO MUITO DESSE EVENTO, PORÉM ELE ABRE JÁ AO INICIAR O SERVER, E NÃO TEM COMO FECHAR ELE, E NÃO INICIA NEM COM 2 PLAYERS!
  2. Como eu ponho mod no meu ot 8.4? Pergunta: O mod tambem vai na distro do servidor? upppppppppp
  3. Como Funciona: O evento começa e X pessoas entram no portal, então ele fecha determinado período. Items iram aparecer no mapa, o objetivo é quem pegar mais, para ganhar o evento. <?xml version="1.0" encoding="UTF-8"?> <mod name="Catch the item" version="1.00" author="Kimo" contact="otland.net" enabled="yes"> <config name="catchtheitem_config"><![CDATA[ config = { center_pos = {x = 2736, y = 3497, z = 7}, item = 8304, aid = 4003, effect = CONST_ANI_FIRE, teleportPosition = {x = 74, y = 136, z = 9, stackpos = 1}, -- Onde o teleporte vai ser criado teleportToPosition = {x = 78, y = 136, z = 9}, -- Onde o teleporte enviará as pessoas teleportId = 1387, -- Id do teleporte spawnItemTime1 = 1, -- Tempo que o primeiro item vai ser criado spawnItemTime2 = 1, -- Tempo que o primeiro item vai ser criado timeToStartEvent = 1, -- Minutos após o teleporte ser fechado. itemRewards = {{2160,10}, {13305,1}, {13539,1}} } ]]></config> <talkaction words="!catch" event="script"><![CDATA[ function onSay() domodlib('catchtheitem_config') local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition) doItemSetAttribute(tp, "aid", config.teleportActionId) doBroadcastMessage("Catch the item is starting in "..config.timeToStartEvent.." minute!", MESSAGE_EVENT_ADVANCE) addEvent(startEvent, config.timeToStartEvent * 1000 * 10) print(getGlobalStorageValue(3333)) return true end function startEvent() domodlib('catchtheitem_config') local get = getThingfromPos(config.teleportPosition) if get.itemid == config.teleportId then doRemoveItem(get.uid, 1) doBroadcastMessage("Catch the item teleport have been removed and the first items wave will start in " .. config.spawnItemTime1 .. " ", MESSAGE_EVENT_ADVANCE) addEvent(SpawnItem1, config.timeToStartEvent * 1000 * 10) end end function SpawnItem1() domodlib('catchtheitem_config') local field = {} local k = config.center_pos for i = -2, 3 do for j = -2, 4 do table.insert(field, {x=k.x+i, y=k.y+j, z=k.z}) end end for i = 1, 8 do local a = math.random(1, #field) local c = {x=field[a].x, y=field[a].y, z=field[a].z} if getThingFromPos({x=c.x, y=c.y, z=c.z, stackpos=1}).itemid ~= 9767 then local b = doCreateItem(config.item, {x=c.x, y=c.y, z=c.z, stackpos=1}) doItemSetAttribute(b, "aid", config.aid) doItemSetAttribute(c, "moveable", 0) doSendDistanceShoot(config.center_pos, c, config.effect) end end doBroadcastMessage("Items wave 1 has been finished wave 2 in "..config.spawnItemTime2.." minute ", MESSAGE_EVENT_ADVANCE) addEvent(SpawnItem2, config.spawnItemTime2 * 1000 * 10) end function SpawnItem2() domodlib('catchtheitem_config') local field = {} local k = config.center_pos for i = -2, 3 do for j = -1, 2 do table.insert(field, {x=k.x+i, y=k.y+j, z=k.z}) end end for i = 1, 8 do local a = math.random(1, #field) local c = {x=field[a].x, y=field[a].y, z=field[a].z} if getThingFromPos({x=c.x, y=c.y, z=c.z, stackpos=1}).itemid ~= 9767 then local b = doCreateItem(config.item, {x=c.x, y=c.y, z=c.z, stackpos=1}) doItemSetAttribute(b, "aid", config.aid) doSendDistanceShoot(config.center_pos, c, config.effect) end end doBroadcastMessage("Items wave 2 is finished and results in 1 minute", MESSAGE_EVENT_ADVANCE) addEvent(EndEvent, 1 * 1000 * 10) end function EndEvent() domodlib('catchtheitem_config') local function maximum(a) local mi = 1 local m = a[mi] for i,val in ipairs(a) do if val > m then mi = i m = val end end return m end local first = {} local second = 0 local third = 0 local players = getPlayersOnline() local winamount = {} local storage = 7777 --event storage for i, pid in ipairs(players) do if getPlayerStorageValue(pid, storage) >= 0 then table.insert(winamount, getPlayerStorageValue(pid, storage)) end end local winningamount = maximum(winamount) local price = math.random(1, #config.itemRewards) for i, pid in ipairs(players) do if getPlayerStorageValue(pid, storage) == winningamount then table.insert(first, getPlayerName(pid)) end end if #first > 1 then doBroadcastMessage('[Catch the item]\n We have a draw between '..first[1]..' and '..first[2]..'!\nTherefor NO PRICES will be given!') else for i, pid in ipairs(players) do if getPlayerStorageValue(pid, storage) == winningamount then doBroadcastMessage('[Catch the item]\n And the winner is:\n'..first[1]..' with a total score of '..winningamount..'\nYour Price: '..config.itemRewards[price][2]..' x '..getItemNameById(config.itemRewards[price][1])..'\nCongratulations!') doPlayerAddItem(pid, config.itemRewards[price][1], config.itemRewards[price][2]) end end end for i, pid in ipairs(players) do if getPlayerStorageValue(pid, storage) == (winningamount-1) then if second == 0 then doBroadcastMessage('[Catch the item]\n 2nd place is:\n'..getPlayerName(pid)..' with a total score of '..getPlayerStorageValue(pid, storage)..'\nCongratulations!') second = 1 end end end for i, pid in ipairs(players) do if getPlayerStorageValue(pid, storage) == (winningamount-2) then if third == 0 then doBroadcastMessage('[Catch the item]\n 3rd place is:\n'..getPlayerName(pid)..' with a total score of '..getPlayerStorageValue(pid, storage)..'\nCongratulations!') third = 1 end end end addEvent(EndEvent2, 1 * 1000 * 10) end function EndEvent2() setGlobalStorageValue(4444, 0) setGlobalStorageValue(3333, 0) for _, kid in ipairs(getPlayersOnline()) do if(getPlayerStorageValue(kid, 7776) > 0) then doTeleportThing(kid, getTownTemplePosition(getPlayerTown(kid))) setPlayerStorageValue(kid, 7776, 0) setPlayerStorageValue(kid, 7777, 0) end end end ]]></talkaction> <action actionid="4003" event="script"><![CDATA[ function onUse(cid, item, fromPosition, itemEx, toPosition) if item.actionid == 4003 then doRemoveItem(getThingFromPos(fromPosition).uid, 6119) setPlayerStorageValue(cid,7777, getPlayerStorageValue(cid,7777)+1) local score = getPlayerStorageValue(cid, 7777) doCreatureSay(cid, "Point!\nScore ="..getPlayerStorageValue(cid, 7777), 34) return true end end ]]></action> <movevent type="StepIn" actionid="3000" event="script"><![CDATA[ local config = { playerCount = 3333, -- Storage global que contara quantos iram participar maxPlayers = 20 -- Número máximo que pode participar } function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getGlobalStorageValue(config.playerCount) < config.maxPlayers then setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)+1) if getGlobalStorageValue(config.playerCount) == config.maxPlayers then doBroadcastMessage("Catch the item event is now full [" .. getGlobalStorageValue(config.playerCount) .. " players]! The event will soon start.") else doBroadcastMessage(getPlayerName(cid) .. " entered catch the item event! Currently " .. getGlobalStorageValue(config.playerCount) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED) end else doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, "The event is full. There is already " .. config.maxPlayers .. " players participating in the event.") return false end print(getGlobalStorageValue(config.playerCount) .. " Players in catch the item event.") return true end ]]></movevent> </mod> Créditos: kimokimo & Skydangerous(Traduzir)
  4. Créditos: Larissa Azhaurn Tutorial items.xml, CTRL+F e coloque amulet of loss. E altere como quiser: <item id="2173" article="an" name="amulet of loss"> ------ Caso queira, pode alterar p/ nome do seu servidor <attribute key="weight" value="PESO DO AMULET" /> ------ EX: 200 <attribute key="slotType" value="necklace" /> <attribute key="charges" value="QUANTIDADE QUE VOCÊ QUER" /> ---- Se quiser infinita, coloque 9999999 </item> OBS. Não achei área específica para esse conteúdo.
  5. Ta de bobeira? dé uma inovada em seu servidor colocando novos sistemas. Veja este por exemplo. Ele dá a possibilidade de colocar itens para aluguel, ou seja ao execultar o comando o player pode adquirir um item por um tempo determinado em troca de alguma grana!. Comando para alugar o item: !rent itemname: Aluga o item desejado !rent list: Exibe a lista dos itens disponiveis para aluguel Para instalar: Crie um arquivo com o nome de rentitens.xml que deve ser intalado na pasta mods do seu servidor e insira neste arquivo o seguinte codigo. <?xml version="1.0" encoding="UTF-8"?> <mod name="Rent System" version="1.0" author="Kimoszin" contact="tibiaking.com" enabled="yes"> <config name="rent_config"><![CDATA[ messages = { sucess = MESSAGE_INFO_DESCR, fail = MESSAGE_STATUS_WARNING, } warningStorage = 45768 items = { ["knight armor"] = {id=2476, time=1, price=3000, premium=true, cap=false}, ["demon legs"] = {id=2495, time=3, price=3000, premium=true, cap=true}, ["blue legs"] = {id=7730, time=2, price=3000, premium=true, cap=true}, ["demon shield"] = {id=2520, time=1, price=3000, premium=true, cap=true}, } function doWarningItemWasRemoved(cid) if (getCreatureStorage(cid, warningStorage) > -1) then local item = items[getItemNameById(getCreatureStorage(cid, warningStorage))] doPlayerSendTextMessage(cid, messages.sucess, "Ok, "..item.time..(item.time > 1 and " minutes" or " minute").." has passed, the rent of "..getItemNameById(item.id).." ended.") doCreatureSetStorage(cid, warningStorage, -1) end end ]]></config> <talkaction words="!rent" event="buffer"><![CDATA[ domodlib('rent_config') local item, itemuid = items[param:lower()], math.random(1000, 65535) if (param == "") then return doPlayerSendTextMessage(cid, messages.fail, "Sorry, you need to inform parameters.") end if (param == "list") then local str = "~* Rent System by Kimoszin *~\n\n" for name, iten in pairs(items) do str = str..string.sub(name, 0, 1):upper()..string.sub(name, 2):lower().." - "..iten.price.."gps \n" end str = str .."\n WWW.TIBIAKING.COM" return doPlayerPopupFYI(cid, str) end if not(item) then return doPlayerSendTextMessage(cid, messages.fail, "Sorry, but it is not possible to rent this item.") end if (item.premium and not(isPremium(cid))) then return doPlayerSendTextMessage(cid, messages.fail, "You need a premium account.") end if (item.cap and not(getPlayerFreeCap(cid) >= getItemWeightById(item.id, 1, 1))) then return doPlayerSendTextMessage(cid, messages.fail, "You don't have capacity.") end if not(doPlayerRemoveMoney(cid, item.price)) then return doPlayerSendTextMessage(cid, messages.fail, "Sorry, you do not have any money.") end doItemSetAttribute(doPlayerAddItem(cid, item.id, 1), "uid", itemuid) doPlayerSendTextMessage(cid, messages.sucess, "You rented a "..getItemNameById(item.id).." for "..item.time.. (item.time > 1 and " minutes" or " minute")..".") doCreatureSetStorage(cid, warningStorage, item.id) local player_id = getPlayerGUID(cid) addEvent(function() local player = getPlayerByGUID(player_id) if not(isPlayer(player)) then db.executeQuery("DELETE FROM `player_items` WHERE `player_items`.`player_id` = "..player_id.." AND `itemtype` = "..item.id..";") else doPlayerSendTextMessage(cid, messages.sucess, "Ok, "..item.time..(item.time > 1 and " minutes" or " minute").." has passed, the rent of "..getItemNameById(item.id).." ended.") doCreatureSetStorage(cid, warningStorage, -1) doRemoveItem(itemuid, 1) end end, item.time * 60 * 1000) ]]></talkaction> <creatureevent name="rentLogin" type="login" event="buffer"><![CDATA[ domodlib('rent_config') doWarningItemWasRemoved(cid) ]]></creatureevent> </mod> Aqui você adiciona, remove ou configura os itens: items = { ["knight armor"] = {id=2476, time=1, price=3000, premium=true, cap=false}, ["demon legs"] = {id=2495, time=3, price=3000, premium=true, cap=true}, ["blue legs"] = {id=7730, time=2, price=3000, premium=true, cap=true}, ["demon shield"] = {id=2520, time=1, price=3000, premium=true, cap=true}, } Configuração: [" item name"] = {i d=itemid, time=tempo, price=valor, premium=requer premium(true/false), cap=requer capacidade(true/false) Qualquer duvida estou a disposição! espero que aproveitem. Edit: trocando o titulo para um mais claro. Credito Kimoszin
  6. Por favor, fechem este tópico.
  7. Reflect System "0.1" Ao ser obtido um item que possua o atributo Reflect o player será capaz de refletir danos Fisicos e Mágicos ao mesmo tempo. A idéia geral desse script é bem simples mesmo. Quando o player receber um damage de uma criatura (monstro ou player) esse attack será refletido em uma certa porcentagem. Exemplo: 22:46 You see a golden amulet. It weighs 8.30 oz. [Reflect: 80%] Obs¹: Os items pode ser acumulativo. Ou seja, se o amuleto der 10% de reflect e o ring der 35%. O player possuirá um Reflect = 45%. [MOD]reflectSystem.xml <?xml version="1.0" encoding="UTF-8"?> <mod name="Reflect System" version="0.1" author="Aluccard" contact="" enabled="yes"> <description> Script que funciona para refletir danos para as creatures que o atacar. </description> <event type="login" name="regReflectDamage" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid,"ReflectDamage") return true end ]]></event> <event type="statschange" name="ReflectDamage" event="script"><![CDATA[ local slotPos = {CONST_SLOT_NECKLACE, CONST_SLOT_FEET, CONST_SLOT_RING} function onStatsChange(cid, attacker, type, combat, value) local reflectPercent = 0 local dmg = value local playerPos = getCreaturePosition(cid) local attackerPos = getCreaturePosition(attacker) for i = 1, #slotPos do if getPlayerSlotItem(cid, slotPos[i]).uid > 1 then if getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i]).uid) then reflectPercent = reflectPercent + getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i]).uid) end end end if reflectPercent > 0 then dmg = math.ceil(-value*((100-reflectPercent)/100)) if (dmg < 0) then doCreatureAddHealth(cid, dmg) doSendAnimatedText(playerPos, -dmg, COLOR_RED) doSendMagicEffect(playerPos, 0) else doSendMagicEffect(playerPos, 3) end dmg = math.ceil(-value*(reflectPercent/100)) if (dmg < 0) then doCreatureAddHealth(attacker, dmg) doSendAnimatedText(attackerPos, -dmg, COLOR_RED) doSendDistanceShoot(playerPos, attackerPos, CONST_ANI_SMALLHOLY) end else return true end end]]></event> </mod> Obs²: O código está meio enferrujado, mas funciona. Como podes ver o sistema está na versão 0.1 e irá ser atualizada com o tempo. ReflectLib.lua function getItemReflectPercent(itemuid) return getItemAttribute(itemuid, "reflectPercent") end function doPlayerAddReflectedItem(cid, itemid, percent) local item = doPlayerAddItem(cid, itemid) doItemSetAttribute(item, "description", "[Reflect: "..percent.."%]") doItemSetAttribute(item, "reflectPercent", percent) end Obs³: Para adicionarmos novos items com o atributo Reflect usamos o comando doPlayerAddReflectedItem(cid,itemid,percent). {itemid = id do item escolhido / percent = porcentagem do reflect} Créditos: MrCatra Aluccard Obrigado,MrCatra
  8. Omega

    Tour Mod

    Informações Apresento-lhes um mod simples, mas muito útil para servidores com mapas próprios. Ele faz com que o jogador passe por certos locais, sem poder se mexer nem entrar em combate, recebendo caixas de diálogo com informações sobre cada local Basta adicionar o código na pasta mods do seu servidor como tourMod.xml O comando é ativado in-game usando /tour ou !tour Só pode ser ativado em PZ A duração de cada posição é configurável Caso haja algum erro, GMs podem usar o comando /tour debug para finalizar o tour de todos os jogadores online Código Configuração As posições para as quais o jogador será levado e o tempo pelo qual ele ficará em cada posição são configuráveis em tourLocations, seguindo o padrão Depois de cada duração, você deve configurar a mensagem que o jogador irá receber em tourDesc, usando a mesma numeração
  9. Opá, estou tentando posicionar melhor minha cooldown bar, mas não sei os comandos adequados. Se alguém souber, dá uma ajudinha hehe! Quero posicionar ela no topo do meu client. Pois sempre que dou load nela novamente ou reabro o client, ela aparece exatamente no centro da tela. Em poucas palavras cansa ficar alterando a posição. Ou até mesmo poder salvar a posição dela onde o usuário deixar. Aguardo. --- EDIT 2 Como posso memorizar tambem no cliente se o usuario escolher Vertical ou Horizontal?
  10. Inanimate Object Bom venho trazer mais um script, sei que a idéia é meio boba, mais sei la, não tinha oque fazer, é o seguinte, vc pega uma pedra(configurado para o id: 8310) e dá use num objeto, espadas, armaduras, escudos, objetos de casa, qualquer o objeto que seje "moveable" ou seja objetos que vc pode arrastar, então o objetos tomara vida e sera seu summon, o atk e a vida dele, ira basear no seu level, quando o summon morre, o item volta ao normal aonde o summon morreu, é isso kkk, caso vc queira dar vida á algum objeto que não seja "moveable" tipo arvores, flores, etc, vc configura na tabela, e caso vc não quer que um item que é "moveable" ganhe vida, só configurar tbem, esta tudo comentado no script, para configurar do seu jeito, primeiramente vc deve criar o monstro. inanimate object.xml <?xml version="1.0" encoding="UTF-8"?> <monster name="Inanimate Object" nameDescription="a inanimate object" race="undead" experience="0" speed="250" manacost="0"> <health now="1" max="1"/> <look type="232" corpse="0"/> <targetchange interval="5000" chance="8"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="1"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="1"/> <flag pushable="1"/> <flag canpushitems="0"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> </attacks> <defenses armor="10" defense="20"/> </monster> tag: <monster name="Inanimate Object" file="inanimate object.xml"/> segundo passo crie outro xml, mais na pasta mod e cole o código: inanimateObject.xml <?xml version="1.0" encoding="UTF-8"?> <mod name="inanimateObject" enabled="yes" author="Miiller" forum="XTibia.com"> <config name="inanimateObjectLib"><![CDATA[ InanimateCfg = { levelForUse = 1, -- level para usar premium = false, -- somente premium pz = false, -- pode dar vida a objetos em pz house = false, -- pode dar vida a objetos em casas maxSummon = 1, -- maximo de summons specialItems = {}, -- items que mesmo não sendo "movable" que podem ganhar vida blockItems = {}, -- items que são "movable" mas não podem ganhar vida restoreItem = true, -- depois que o summon morre, restaurar o item } function object_attack(cid, object) if not isCreature(cid) or not isCreature(object) then return true end if getCreatureTarget(cid) > 0 then if getDistanceBetween(getThingPos(getCreatureTarget(cid)), getThingPos(object)) == 1 then doTargetCombatHealth(object, getCreatureTarget(cid), COMBAT_PHYSICALDAMAGE, -(getPlayerLevel(cid)/4), -(getPlayerLevel(cid)/2), CONST_ME_BLOCKHIT) end end addEvent(object_attack, 2000, cid, object) end ]]></config> <action itemid="8310" event="script"><![CDATA[ domodlib("inanimateObjectLib") function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) < InanimateCfg.levelForUse then return doPlayerSendCancel(cid, "You need level " .. InanimateCfg.levelForUse .. " for give life to an object.") end if not isPremium(cid) and InanimateCfg.premium then return doPlayerSendCancel(cid, "You need premium for give life to an object.") end if not isItemMovable(item2.itemid) and not isInArray(InanimateCfg.specialItems, item2.itemid) or isCorpse(item2.uid) or isCreature(item2.uid) or isInArray(InanimateCfg.blockItems, item2.itemid) then return doPlayerSendCancel(cid, "This object can not gain life.") end if #getCreatureSummons(cid) >= InanimateCfg.maxSummon then return doPlayerSendCancel(cid, "You already have many summons.") end if getPlayerItemCount(cid, item2.itemid) > 0 then return doPlayerSendCancel(cid, "Please, place this object in ground.") end if getTileHouseInfo(topos) and not InanimateCfg.house then return doPlayerSendCancel(cid, "This object can not gain life in house.") end if getTilePzInfo(topos) and not InanimateCfg.house then return doPlayerSendCancel(cid, "This object can not gain life in protection zone.") end local obj = doCreateMonster("Inanimate Object", topos) doConvinceCreature(cid, obj) setCreatureMaxHealth(obj, getPlayerLevel(cid)*2) doCreatureAddHealth(obj, getPlayerLevel(cid)*2) doSetItemOutfit(obj, item2.itemid) doSendMagicEffect(getThingPos(obj), 30) if InanimateCfg.restoreItem then doCreatureSetStorage(obj, 3214, item2.itemid) doCreatureSetStorage(obj, 3215, item2.type == 0 and 1 or item2.type) registerCreatureEvent(obj, "restoreItemSummonObj") end doRemoveItem(item.uid, 1) doRemoveItem(item2.uid, item2.type == 0 and 1 or item2.type) object_attack(cid, obj) return true end ]]></action> <creaturescript type="death" name="restoreItemSummonObj" event="script"><![CDATA[ function onDeath(cid, corpse, deathList) doCreateItem(getCreatureStorage(cid, 3214), getCreatureStorage(cid, 3215), getThingPos(cid)) doSendMagicEffect(getThingPos(cid), 30) return true end ]]></creaturescript> </mod> e acabou, as configurações esta no xml da pasta mod: InanimateCfg = { levelForUse = 1, -- level para usar premium = false, -- somente premium pz = false, -- pode dar vida a objetos em pz house = false, -- pode dar vida a objetos em casas maxSummon = 1, -- maximo de summons specialItems = {}, -- items que mesmo não sendo "movable" que podem ganhar vida blockItems = {}, -- items que são "movable" mas não podem ganhar vida restoreItem = true, -- depois que o summon morre, restaurar o item } configura do seu jeito kk só pegar o item 8310, e usar nos objetos, fico mto leegal kkkk fui
  11. Instalação Primeiramente abra a pasta de seu ot, e procure pelo arquivo config.lua e procure por essas 2 linhas : experienceStages = false rateExperience = 50 se o experienceStages tiver ativado mude para false, pois o Stages é configurado no próprio script, e é muito importante o rateExperience tiver como 0, exemplo: experienceStages = false rateExperience = 0 agora entre na pasta creaturescripts/scripts e crie um arquivo lua, chamado exphit.lua e cole o seguinte código: para versões mais antigas como 8.54, 8.6 use : para versões mais novas como 9.8 : na mesma pasta procure pelo arquivo login.lua, e em cima de return true, adc a seguinte linha: registerCreatureEvent(cid, "ExpHit") volte na pasta anterior creaturescripts, e procure pelo arquivo creaturescritps.xml e cole as 2 tags: <event type="statschange" name="ExpGain" event="script" value="exphit.lua"/> <event type="combat" name="ExpHit" event="script" value="exphit.lua"/> para configurar a exp, que era configurada no config.lua está no começo do arquivo exphit.lua , e as configurações da party tbem, dos anéis, e até pode ser usado stages agora, segue abaixo o exemplo: -- CONFIGURAÇÕES DE EXPERIENCIA -- useStages = false -- Usar sistema de Stages , true/false premiumMultipliqueExp = 2 -- Players Premiums terão exp multiplicada, caso não querer deixe 1. rateExp = 50 -- Exp caso não for usar stages. local stages = { -- ["DELEVEL-ATELEVEL"] = EXP, (OBS: NUNCA REPETIR O MSM NUMERO, SEMPRE COLOCAR UM A MAIS.) ["1-50"] = 50, ["51-100"] = 45, ["101-150"] = 40, ["151-200"] = 35, ["201-250"] = 30, ["251-300"] = 25, ["351-400"] = 20, } ultimateExp = 15 -- exp que vai usar caso o level do player não tiver mais na tabela . -- CONFIGURAÇÕES DA PARTY partyPorcent = 40 -- Quantos Porcento da exp vai para os membros da party levelBlockParty = 1000 -- Diferença Maxima de Level permitida para membro da party ganhar exp. expShareRadiusX = 30 -- Distancia maxima permitida no eixo X para membro da party ganhar exp. expShareRadiusY = 30 -- Distancia maxima permitida no eixo Y para membro da party ganhar exp. expShareRadiusZ = 1 -- Distancia maxima permitida no eixo Z para membro da party ganhar exp. -- CONFIGURAÇÕES DE RINGS -- local rings = { -- [ID DO ANEL] = EXP MULTIPLICADA POR X EXP. [3048] = 2, [3049] = 4, [3050] = 6, } -- FIM DAS CONFIGURAÇÕES ---- Log V2.0 : Log V3.0 ( 03/02/2013 ) : Log V4.0 ( 12/11/2013 ) :
  12. Olááá galera do Ékz. Esses dias o XTibia tá muito parado, não tem nem pedido direito pra atender, e no último Sds teve poucos scripts. Entããão resolvi postar um sisteminha que eu fiz com base num pedido em algum lugar da internet. É o Partner System. O que ele faz: Você chama um amigo seu para jogar o server, mas para dar um ânimo nele, você convida-o para ser seu Partner, e enquanto ele for abaixo de tal level (configurável, default 50), ele terá um bônus de EXP (configurável, default 10%). Assim que chegar no level limite, o bônus acaba. Motivos para usar o sistema? Ora, como já disse anteriormente, serve para animar o jogo do player, para incentivá-lo a jogar mais. Chega de blablabla e vamos ao script: Novidades: • Agora você pode aceitar ou rejeitar convites mesmo que a pessoa que te convidou esteja offline • Quando você convida alguém e ele rejeita ou aceita o convite com você offline, ao logar você recebe uma mensagem informando a decisão da pessoa. • Todos os bugs corrigidos Configurando: waittime = 24 -- Tempo de espera em horas para convidar alguém novamente storage = 4651 level = 100 -- Level necessário para convidar alguém maxlevel = 50000 -- Level máximo para alguém virar partner e para ter bônus de EXP maxp = 5 -- Maximo de partners que alguém pode ter rate = 1.1 -- Rate do bônus Uso: Player: !partner Fulano -- Fulano foi convidado Fulano: !partner aceitar ou rejeitar -- Fulano aceita ou rejeita o convite. Observações: 1) Todos os bugs corrigidos. 2) Funciona em TFS versão 0.3.6 pra frente. Créditos: LuckOake -- Pelo sistema Vodkart -- Pela ideia e ajudas
  13. Olá galeres. Depois de um tempim sem postar sistemas eu trouxe um hoje pra vocês. Nada muito avançado, é até um sistema simples. O que é: É um sistema que há dois times. Os Invaders e os Defenders. Os Invaders tem o objetivo de invadir a base dos Defenders e desativar um gerador para vencer, e os Defenders tem o objetivo de proteger o gerador e matar os Invaders. Para vencer, os Invaders devem manter o gerador desativado por 10 segundos. Script: Instalando: Para controlar o evento, use os seguintes comandos: /generator open -- Para abrir /generator force -- Para iniciar o evento mesmo se não tiver o número maximo de players /generator reset -- Para fechar o evento, caso dê algum problema. Créditos: LuckOake -- Pelo Sistema Vodkart -- Pela base de algumas funções Obrigado, até.
  14. Automatic Raids.xml <?xml version="1.0" encoding="UTF-8"?> <mod name="Automatic Raids" version="1.0" author="Vodkart And xotservx" contact="xtibia.com" enabled="yes"> <config name="raids_func"><![CDATA[ days = { ["Monday"] = { ["21:30"] = {nome = "Orshabaal", pos = {fromPosition = {x=184, y=55, z=7},toPosition = {x=188, y=58, z=7}},m = {"5 Fire Devil", "2 Orshabaal"}, Time = 15}, ["21:33"] = {nome = "Dragon", pos = {fromPosition = {x=197, y=57, z=7},toPosition = {x=203, y=60, z=7}},m = {"100 Dragon"}, Time = 20} }, ["Sunday"] = { ["10:08"] = {nome = "Demon", pos = {fromPosition = {x=202, y=11, z=7},toPosition = {x=204, y=12, z=7}}, m = {"1 Demon"}, Time = 15}, ["10:46"] = {nome = "Hydra", pos = {fromPosition = {x=197, y=57, z=7},toPosition = {x=203, y=60, z=7}}, m = {"7 Hydra", "4 Cyclops"}, Time = 20} } } ]]></config> <globalevent name="AutomaticRaids" interval="60" event="script"><![CDATA[ domodlib('raids_func') function onThink(interval, lastExecution) if days[os.date("%A")] then hours = tostring(os.date("%X")):sub(1, 5) tb = days[os.date("%A")][hours] if tb then function removeCreature(tb) for x = ((tb.pos.fromPosition.x)-10), ((tb.pos.toPosition.x)+10) do for y = ((tb.pos.fromPosition.y)-10), ((tb.pos.toPosition.y)+10) do local m = getTopCreature({x=x, y=y, z= tb.pos.fromPosition.z}).uid if m ~= 0 and isMonster(m) then doRemoveCreature(m) end end end end doBroadcastMessage("The invasion of " .. tb.nome .. " started") for _,x in pairs(tb.m) do for s = 1, tonumber(x:match("%d+")) do pos = {x = math.random(tb.pos.fromPosition.x, tb.pos.toPosition.x), y = math.random(tb.pos.fromPosition.y, tb.pos.toPosition.y), z = tb.pos.fromPosition.z} doSummonCreature(x:match("%s(.+)"), pos) end end addEvent(removeCreature, tb.Time*60*1000, tb) end end return true end ]]></globalevent> </mod> Configuração: days = { ["Monday"] = { ["21:30"] = {nome = "Orshabaal", pos = {fromPosition = {x=184, y=55, z=7},toPosition = {x=188, y=58, z=7}},m = {"5 Fire Devil", "2 Orshabaal"}, Time = 1}, ["21:33"] = {nome = "Dragon", pos = {fromPosition = {x=197, y=57, z=7},toPosition = {x=203, y=60, z=7}},m = {"100 Dragon"}, Time = 2} }, ["Tuesday"] = { ["10:44"] = {nome = "Demon", pos = {fromPosition = {x=184, y=55, z=7},toPosition = {x=188, y=58, z=7}}, m = {"5 Demon", "8 Fire Devil"}, Time = 1}, ["10:46"] = {nome = "Hydra", pos = {fromPosition = {x=197, y=57, z=7},toPosition = {x=203, y=60, z=7}}, m = {"7 Hydra", "4 Cyclops"}, Time = 2} } } ["DIA"] = { ["HORA DA INVASÃO"] = {nome = "NOME DA INVASÃO", pos = {começo e final da área}, monster = {"MONSTROS"}, Time = para remover os monstro} } O dia da invasão é colocada entre " " e somente dia em inglês e a primeira letra maiúscula, exemplo: "Saturday" Depois são as hora da invasão, que é colocada entre " " e somente a hora e minuto, segundos não precisa exemplo: "15:00" As Posições estão entre { } adicionando as posições x, y e z, é o começo e final da área exemplo: pos = {fromPosition = {x=197, y=57, z=7},toPosition = {x=203, y=60, z=7}} fromPosition -- começo da área onde vai acontecer a raid toPosition -- final da área onde vai acontecer a raid Os monters tem um modo especial de configurar, vc coloca entre { }, e cada monstro entre " ", e entre as " " vc adiciona "QUANTIDADE MONSTRO", e para adicionar mais tipos de monstro se separa por virgulas, exemplo: {"40 Water Elemental", "5 Cyclops"} Time é uma função extra, é para caso ninguém participe do evento os monstros não fiquem pelo mapa, e é em minutos, exemplo: Time = 15
  15. Versão: 5.0 Olá pessoal, este é um script de Anti-BOT espero que gostem. Vamos ao script: Primeiramente entre na pasta Data>Mods e copie um Arquivo XML e renome-e para AntiBOT. Abra-o com Bloco de notas e apague oque estiver escrito e coloque o seguinte conteúdo:
  16. Galera vou tentar explicar melhor possivel, eu criei um servidor war, é eu queria que vocês me passasem um scripter sistema ou mod, não sei o que isso é. que pudesse fazer que quando jogador A matasse jogador b que fosse do mesmo ip, ele recebesse uma punição perdesse level, é não ganhasse 500gold, tem como alguém ajudar? Agradeço dês de já
  17. Olá galerinha do Xtibia, hoje venho trazer aqui para vocês o EVENTO Dota COMPLETO. #Descrição: O evento ocorre com a separação automática de 2 times (Azul x Vermelho), onde um disputa com o outro a sala de prêmios. Para ter acesso à sala, um dos times deve derrotar os 3 geradores presentes antes do outro. #O que possui? - Totalmente automatizado (Script: Abertura, Entrega do premio, Designação dos vencedores e Encerramento) - Página explicativa (PHP: Os players entenderão como funciona o evento) - Talkactions ADM (Script: Comandos que podem ser usados para abrir o castle manualmente) - Tutorial (Arquivo: Explicando passo a passo a instalação) - Arena com 2 salas e waiting room (Mapa) - Entre outras coisas… *OBS: Este evento só funciona em TFS 0.4. DOWNLOAD: CLICK AQUI Créditos: ChaitoSoft Jhon Thiagobji
  18. Olá galere do mal. Trouxe para vocês um sistema inovador, que muitos vão gostar. Do que se trata? Quem já jogou Age of Empires 2 Age of Kings e já batalhou no modo Regicídio deve saber mais ou menos como funciona. Explicação: São dois times. Um tem um rei e deve protegê-lo, o outro deve matar esse rei. O primeiro time (Protectors) deve matar todos do outro time para vencer, e o segundo time (Killers) devem matar o rei, como já dito antes. (Bônus) Função exclusiva: Se você for um Protector e dar Attack no King, ele passa a seguir você até você dar Attack nele novamente. Script: Instalando: Para controlar o evento, use os comandos: /regicide open -- Para abrir /regicide force -- Para iniciar o evento mesmo se não tiver o número maximo de players /regicide reset -- Para fechar o evento, caso dê algum problema. Caso alguém queira disponibilizar um vídeo ou o download de uma área (de preferência, de um castelo grande que incentive a war), por favor, faça isso, será retribuído. Créditos para Demonbholder, Skymagnum e Vodkart, que me ajudaram em algumas funções.
  19. Boom, eu estava pensando em um evento muito legal, Mais como eu não sou scripter, Isso fica inpossivel para min, Ja tentei aprender script pela internet, Mais é complicado. Meus parabens para quem é. Vamos ao evento: È um evento simples, Funcionará assim. A Cada 2 horas, aparece uma mensagem para todos os players informando: O Evento Dos Frags Começará, O Player que obter mais frags durante uma Hora, Receberá 100k! Dai o evento começa, dai rola durante uma hora, Certinho, Quando acaba essa uma hora, Aparece pra todos os players: Evento Dos Frags Terminou, O Player ganhador foi | PLAYERNAME | Com X Frags, Ele Receberá 100k, Parabéns! Bom, deu para entender? Se possivel fazer, Eu agradeçeria. Se precisarem de mais detalhes ou alguma ajuda, Eu falo. Desde já, Obrigado.
  20. Olá galera O que é: Já jogou algum servidor de pokemon que tenha boost system? Pois é, não é isso que temos aqui. É quase, mas é pra Tibia mesmo, com algumas diferenças. É um mod em que ao usar um item (configurável) no seu summon, ele ganha 1 boost level e fica mais forte. Script: Configurando: Imagens: Change Log (Versão 2.0): - Todos os bugs corrigidos e sistema aprimorado Créditos: - LuckOake (Pelo Sistema) - Brun123 (Pela ajuda com o StatsChange)
  21. .. Experience Scroll .. Hoje, venho vos trazer o script/mod, Experience Scroll: Créditos: TomCrusher » Como funciona?? Voce tem um item, e ao clicar nele, ele sumira, e a experiencia bonus será ativa. A experiencia Bonus terá uma duração de 24horas (Configuravel), e a experiencia normal dele será multiplicada em 2x (Configuravel). » Duvidas provaveis que surgirão: E se eu logar com a exp ativa? - Se você logar, o contador não vai parar, e ao voltar, o jogador recebera um aviso, dizendo que a experiencia bonus ainda está ativa. Vamos la: Na pasta Mods do seu OT, crie um arquivo chamado 'expscroll.xml' e dentro cole isto: - Em Vermelho é o item que será o exp scroll, que no caso o ItemID é 9004. Depois, na pasta mods/scripts do seu ot (caso não tenha a pasta scripts dentro da sua pasta mods, é só criar normalmente como se foce uma pasta normal.) Dentro da pasta scripts crie um arquivo chamado 'expscroll.lua' e dentro coloque isso: » Explicação: [•] "Rate = 2" -- Isso é em quantas vezes a experiencia dele será multiplicada + 1. No caso se a exp dele for 200x, a exp vai pra 600x, por exemplo, se ele ganha 120 exp matando um bixo, ele vai passar a ganhar 360 exp... [•] "time = 14400" -- Esse é o tempo que o exp scroll vai ficar ativo, no caso 24horas. [•] São as frases que apareçerão in-game. » Opicional: Bom, creio que em muitos ots pode acontecer de quando o player der look no item apareçer isso: You see an item of type 9004, please report it to gamemaster. Ou então pode apareçer um nome de um iten nada aver... É simples: Vai na pasta data/items/items.xml E dentro do items.xml clique ctrl+f e procure por 9004, se encontrar alguma coisa, apague a linha, e/ou substitua por essa linha aqui (caso não encontre nada, é só adicionar estas linhas no items.xml: <item id="9004" article="a" name="exp scroll"> <attribute key="weight" value="50" /> </item> É isso... Gostou? REP ++!
  22. Preview: MOD: <?xml version="1.0" encoding="UTF-8"?> <mod name="Ostra MOD" version="1.0" author="Amy Azzkaban" contact="xtibia.com" enabled="yes"> <action itemid="7553" event="script" override="yes"><![CDATA[ function onUse(cid, item, frompos, item2, topos) if item.itemid == 7553 then doTransformItem(item.uid,7552) doPlayerAddItem(cid,2149,1) doDecayItem(item.uid) doTargetCombatHealth(0, cid, COMBAT_POISONDAMAGE, -30, -70, CONST_ME_POFF) doCreatureSay(cid, "Aaahh WTF", TALKTYPE_YELL) end return 1 end ]]></action> </mod> Créditos: Amy Azzkaban
  23. Olá, galerinha do Xtibia vim trazer esse mod aqui para vocês vão em mods crie um mods e renomeie para Skull System.xml o e adicione isso dentro; <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Skull System" version="1.0" author="Skyforever" contact="#####.com" enabled="yes"> <config name="SkullC_func"><![CDATA[ function setSkullColor(cid) local t = { [{5,10}] = 1, [{11,15}] = 2, [{16,20}] = 3, [{21,25}] = 4, [{26,math.huge}] = 5 } for var, ret in pairs(t) do if getPlayerFrags(cid) >= var[1] and getPlayerFrags(cid) <= var[2] then doCreatureSetSkullType(cid, ret) end end end function getPlayerFrags(cid) local time = os.time() local times = {today = (time - 86400), week = (time - (7 * 86400))} local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(result:getID() ~= -1) then repeat local content = {date = result:getDataInt("date")} if(content.date > times.today) then table.insert(contents.day, content) elseif(content.date > times.week) then table.insert(contents.week, content) else table.insert(contents.month, content) end until not result:next() result:free() end local size = {day = table.maxn(contents.day),week = table.maxn(contents.week),month = table.maxn(contents.month)} return size.day + size.week + size.month end ]]></config> <event type="login" name="SkullLogin" event="script"><![CDATA[ domodlib('SkullC_func') function onLogin(cid) registerCreatureEvent(cid, "ColorKill") setSkullColor(cid) return true end]]></event> <event type="kill" name="ColorKill" event="script"><![CDATA[ domodlib('SkullC_func') function onKill(cid, target) if isPlayer(cid) and isPlayer(target) then doCreatureSetSkullType(target, 0) addEvent(setSkullColor, 100, cid) end return true end]]></event> </mod> primeiro abra o config.lua procurem por vai estar assim deixem assim agora procurem por e deixem assim Skyforever meu nome em outro fórum LEMBRANDO SOMENTE PARA SERVIDORES DE WAR
  24. Vocations None Sorcerer Druid Paladin Knight Mixed Assasin. Spin Assasin Sacred Martirn Loney Star Falling Star Hellborn King Supreme Hellborn King Nova Hero Addicted Zealot Quando chegar na vocation Mixed Assassin é como se fosse Druid,Paladin,Knight e Sorc Juntos é so editar as magias do ot para mixed usar todas de sorc,druid,pally e kina. As vocation é o mesmo processo do rozinx, ao ganhar vocation novas vc ira atacar mais rapido ira ganhar mais sangue e mana e ira se Healar mais rapido é claro. E ganhara magias novas so configurar as magias para as vocation é isso pessoal São essas as vocations. Vá na pasta data/xml e abra o vocation.xml e apague tudo e cole isso É só isso galera logo mais estarei trazendo mais novidades REP+ Para quem é fan do Rozinx liberei as vocation igual as dele quem gosto ou esta usando elas me da Rep+ ae pf eu ajudo vcs e vcs me ajudão olhem meu novo projeto. HeHe http://www.xtibia.co...__fromsearch__1
  25. Esse script é um simples sistema de alquimia, porém é diferente dos outros. Alquimia era uma prática antiga que combinava alguns elementos a fim de formar outros. Esse meu sistema, faz com que os itens sejam "misturados" em um caldeirão e se pareça mais como era antigamente. Abaixo, um vídeo de demonstração e de como instalar. Deixei as mesmas posições no script pra que vocês possam se basear ao instalar no seu. Bom, vamos ao script: -- Como funciona: O player deve colocar os itens da receita emcima do counter (balcão de pedra) e puxar a alavanca. Feito isso, os itens serão "misturados" no caldeirão e com a colher (wooden spoon) o player poderá pegar o seu item. Crie um arquivo.xml em data/mods chamado Alchemist.xml e cole isto dentro: <?xml version="1.0" encoding="UTF-8"?> <mod name="Alchemist System" version="1.0" author="Leoxtibia" contact="none" enabled="yes"> <config name="alch_sys"><![CDATA[ counter = {x = 17, y = 56, z = 7} efeitos = {x=17, y=53, z=7} receitas = { {items = {{2160,1}, {2157,2}} , itemgain = {{5878,100}}, storage = 56000}, {items = {{2148,5}, {2155,1}} , itemgain = {{2113,1}}, storage = 56001}, {items = {{2498,1}, {2113,1}} , itemgain = {{2472,1}}, storage = 56002} } function Caldeiron() local B = { {3693,{x=17, y=53, z=7, stackpos = 1}}, {3694,{x=18, y=53, z=7, stackpos = 1}} } for i = 1, #B do doTransformItem(getThingfromPos(B[i][2]).uid,getTileItemById(B[i][2], B[i][1]).uid == 0 and B[i][1] or (B[i][1]-4)) end end function getItemsInPos(items, pos) for i = 1,#items do local stack = getTileItemById(pos, items[i][1]) if stack.uid > 0 and math.max(1, stack.type) >= items[i][2] and i == #items then return true end end return false end function doRemoveItensInPos(items, pos) local items = type(items) == "table" and items or {items} for i = 1, table.maxn(items) do doRemoveItem(getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=2}).uid) end return nil end function effets(position,delay) local text = {"Ishhh!", "Kaboom", "Tic Tac", "BUM!", "Blop Blop!", "Cronch!"} local effects = {2, 6, 25, 31, 36,40, 54, 51, 65, 66, 67, 68} if delay ~= 0 then doSendAnimatedText(position, text[math.random(1, #text)], math.random(1, 255)) doSendMagicEffect(position, effects[math.random(1, #effects)]) addEvent(effets, 1000, position, delay -1) end end]]></config> <action actionid="4780" event="script"><![CDATA[ domodlib('alch_sys') function onUse(cid, item, fromPosition, itemEx, toPosition) doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) for _, t in ipairs(receitas) do if getItemsInPos(t.items, counter) then doRemoveItensInPos(t.items, counter) effets(efeitos,6) Caldeiron() return setPlayerStorageValue(cid, t.storage, 1) end end return doPlayerSendCancel(cid, "You must put the correct items in the counter.") end]]></action> <action itemid="2567" event="script"><![CDATA[ domodlib('alch_sys') function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.actionid == 4781 then for _, x in ipairs(receitas) do if getPlayerStorageValue(cid, x.storage) >= 0 then for i=1,#x.itemgain do doPlayerAddItem(cid, x.itemgain[i][1], x.itemgain[i][2]) doPlayerPopupFYI(cid, "You have prepared ".. x.itemgain[i][2] .." ".. getItemNameById(x.itemgain[i][1]) ..".") end Caldeiron() setPlayerStorageValue(cid, x.storage, -1) end end end return true end]]></action> </mod> Configuração: Para adicionar mais receitas, é só adicionar mais uma linha, mudando o storage para +1. Lembrando que a última linha não tem vírgula no final. {items = {{2666,1}, {2671,1}} , itemgain = {{2672,1}}, storage = 56003} Ainda pretendo incrementar o sistema com novas funções. Mas, por hoje é isso. Espero que tenham gostado.
×
×
  • Criar Novo...