Jump to content
Close

Search the Community

Showing results for tags 'Sitema%2FMod'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Community
    • Rules
    • Portal
    • Resources
    • Commerce
    • Clubs
  • OTServers
    • Discussion
    • Support
    • Tutorial
    • Download
    • Code Development
    • Contests and Events
    • Form Team
    • Advertise your Server
  • Tibia and Bots
    • Discussion
  • Others
    • Playground (Off-topic)
    • Other Games
    • Advertising
    • Graphics and Design
    • Development and Programming
  • League of Legends's Geral
  • League of Legends's Suporte
  • Nto New Season's Tópicos
  • Fakes's Fakes
  • Tibia's Geral
  • Tibia's Notícias
  • Tibia's Media
  • Tibia's Life Thread
  • Computação's Geral
  • Computação's Dicas e Tutoriais
  • Computação's Suporte
  • Roleplaying's Roleplaying
  • Academia de Mapping's Quadro da Clopin
  • Academia de Mapping's Dev Area
  • Academia de Mapping's Quadro do Nolis
  • Academia de Mapping's Quadro do Namikaze
  • Styller's Tópicos

Calendars

  • Official Calendar
  • OTServs Calendar
  • Several Calendars

Product Groups

  • Advertisements in Top
  • Advertisements In Signatures
  • Advertisements in Topics
  • Others Advertisements

Categories

  • Sales Section
    • Scripting Sales
    • Codes Sales
    • Mapping Sales
    • Websites Sales
    • Design/Sprites Sales
    • Bots Sales
  • Look Jobs
  • Looking for Freelancers
  • Team Formation

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Localization


My character


Favorite OTServ


Bot preferred


Interests

Found 47 results

  1. Oi. Antes de tudo, este sistema foi escrito para o servidor PDA by Slicer, versão 1.9. A adaptação para outras bases pode ser bem simples, dependendo do seu conhecimento em Lua (que na verdade nem precisa ser grande). Resolvi escrever este simples sistema porque me deu um certo desgosto ver vários servidores onde a mega evolução é literalmente uma evolução (inclusive o que estive jogando, onde alguns jogadores também concordaram com minha opinião). Quero dizer, o pokémon fica transformado direto, para sempre, forever, algo que contraria a ideia original. Optei por fazer o sistema igual (ou semelhante, já que me baseei apenas nas informações disponíveis no Blog PxG, que aliás são poucas) ao da PokeXGames. Mais futuramente, no entanto, posso fazer uma outra versão voltada a ideia de uma mega evolução temporária. Para quem não conhece o sistema, bem, estou com preguiça de explicar, logo recomendo acessar este link. A diferença é que a pedra (mega stone) não ocupa o espaço de um Held Item tier Y (visto que não são todos os servidores que possuem este sistema). O sistema, como poderão notar, possui muitos detalhes. O motivo é que tenho a tendência de deixar a configuração o menor possível. Ou seja, basta configurar o efeito no código da spell e a tabela das mega evoluções. Nossa, que textão. TL;DR: Igual ao sistema da PxG; PDA; muitos detalhes mas pouquíssima configuração. data/lib: cooldown bar.lua: Troque o código da função getNewMoveTable(table, n) por este: function getNewMoveTable(table, n) if table == nil then return false end local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} local returnValue = moves if n then returnValue = moves[n] end return returnValue end No código da função doUpdateMoves(cid), troque o segundo: table.insert(ret, "n/n,") Por: local mEvolve if not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then if not isInArray(ret, "Mega Evolution,") then table.insert(ret, "Mega Evolution,") mEvolve = true end end if not mEvolve then table.insert(ret, "n/n,") end Depois, em pokemon moves.lua: Troque: min = getSpecialAttack(cid) * table.f * 0.1 --alterado v1.6 por: min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1 --alterado v1.6 Código da spell: elseif spell == "Mega Evolution" then local effect = xxx --Efeito de mega evolução. if isSummon(cid) then local pid = getCreatureMaster(cid) if isPlayer(pid) then local ball = getPlayerSlotItem(pid, 8).uid if ball > 0 then local attr = getItemAttribute(ball, "megaStone") if attr and megaEvolutions[attr] then local oldPosition, oldLookdir = getThingPos(cid), getCreatureLookDir(cid) doItemSetAttribute(ball, "poke", megaEvolutions[attr][2]) doSendMagicEffect(getThingPos(cid), effect) doRemoveCreature(cid) doSummonMonster(pid, megaEvolutions[attr][2]) local newPoke = getCreatureSummons(pid)[1] doTeleportThing(newPoke, oldPosition, false) doCreatureSetLookDir(newPoke, oldLookdir) adjustStatus(newPoke, ball, true, false) if useKpdoDlls then addEvent(doUpdateMoves, 5, pid) end end end end end Depois, em configuration.lua: megaEvolutions = { --[itemid] = {"poke_name", "mega_evolution"}, [11638] = {"Charizard", "Mega Charizard X"}, [11639] = {"Charizard", "Mega Charizard Y"}, } Agora, em data/actions/scripts, código da mega stone: function onUse(cid, item) local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid if not mEvolution then return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.") elseif ball < 1 then return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.") elseif #getCreatureSummons(cid) > 0 then return doPlayerSendCancel(cid, "Return your pokemon.") elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.") elseif getItemAttribute(ball, "megaStone") then return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.") end doItemSetAttribute(ball, "megaStone", item.itemid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".") doRemoveItem(item.uid) return true end Depois, em goback.lua: Abaixo de: if not pokes[pokemon] then return true end coloque: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end Depois, em data/creaturescripts/scripts, look.lua: Abaixo de: local boost = getItemAttribute(thing.uid, "boost") or 0 coloque: local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone") if megaStone then extraInfo = getItemNameById(megaStone) if pokename:find("Mega") then pokename = megaEvolutions[megaStone][1] end end Depois, acima de: doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) coloque: if extraInfo ~= "" then table.insert(str, "\nIt's holding a(n) "..extraInfo..".") end Já em data/talkactions/scripts, move1.lua: Troque: if not move then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end por: if not move then local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") if not isMega or name:find("Mega") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local moveTable, index = getNewMoveTable(movestable[name]), 0 for i = 1, 12 do if not moveTable[i] then index = i break end end if tonumber(it) ~= index then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local needCds = true --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown. if needCds then for i = 1, 12 do if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.") end end end move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} end E troque: doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) por: local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!" if move.name == "Mega Evolution" then spellMessage = "Mega Evolve!" end doCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY) Se quiser que o "Mega" não apareça no nome do pokémon, vá em data/lib, level system.lua: Acima de: if getItemAttribute(item, "nick") then nick = getItemAttribute(item, "nick") end coloque: if nick:find("Mega") then nick = nick:match("Mega (.*)") if not pokes[nick] then nick = nick:explode(" ")[1] end end E, caso o seu servidor possua pokémons evoluídos permanentemente na forma mega, em data/actions/scripts, goback.lua: Troque: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end por: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if not normalPoke then local megaStone for itemid, table in pairs(megaEvolutions) do if table[2] == pokemon then megaStone = itemid break end end if not megaStone then return doPlayerSendTextMessage(cid, 27, "Your pokemon is bugged. Please, talk to the administrator.") end doItemSetAttribute(item.uid, "megaStone", megaStone) normalPoke = megaEvolutions[megaStone][1] end doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end Bem, é isso aí. Acho que não esqueci de nada. Até mais. Obs¹:,esqueci uma informação específica no segundo passo de instalação do sistema (doUpdateMoves). Editado. Ah, editei novamente com uma correção para OTClient. Creditos: zipter98 (Pela criação) Eu (por divulgalo)
  2. Boa noite galera, após um pedido aqui no fórum sobre um sistema de Cassino, decidi então criar este e disponibilizar para vocês. Introdução: Bom, este script simula a máquina de Cassino conhecida como Cassino Slots, pra quem não conhece é a máquina que se encontra no spoiler abaixo: Como funciona? O jogador precisa escolher 1 (um) dos 10 (dez) itens disponíveis (da para configurar a quantidade de itens) como seu Item da Sorte, e após feito isso, terá que girar a alavanca e torcer para que a máquina sorteie 3 itens repetidos igual ao que o jogador em questão escolheu. Para tornar um pouco mais fácil de vencer, criei para que a máquina dê pequenos brindes à quem acertar 1 ou 2 itens dos sorteados (configurável). Como jogar? Para jogar é simples, como desenvolvi todo script em apenas um arquivo, para facilitar na criação, na instalação e até mesmo na jogabilidade, o jogo se baseia na posição em que o jogador está para identificar qual ação executar. Selecionar Item da Sorte: com seu personagem virado para baixo (sul), clique na alavanca e automaticamente o item da sorte aparecerá na mesa configurada no script, caso queira outro item, basta ir usando a alavanca até encontrar o item desejado. Como Jogar: Após ter selecionado seu item da sorte, que deve estar à mostra em cima da mesa própria, basta virar seu personagem para cima (norte) e clicar novamente na alavanca. E se virar esquerda ou direita?: Nada acontecerá, apenas uma mensagem ensinando como jogar será enviada para que o jogador se oriente. Dicas de instalação! Sugiro que quando for criar o mapa para o evento, não faça como do vídeo, pois os itens criados nas mesas não estão com atributos para que não possam ser movidos, sendo assim é provável que jogadores de má fé venham a roubar itens... Faça como a imagem abaixo: Instalando: Basta criar um arquivo na pasta “data/actions/scripts” chamado “cassino_slots.lua” e adicionar o código abaixo dentro: Agora em “actions.xml” adicione a tag abaixo: Agora basta configurar de acordo com as informações disponíveis no início do script. Vejam o vídeo demonstrativo do Sistema em funcionamento. Criado por: Adriano Swatt'
  3. Bem procurei aqui na comunidade um VIP System mais informativo e nada, além de ter tido problema com os que estão aqui e acabei achando em outro lugar um que funcionou perfeitamente para mim. Usando tfs disponibilizado neste tópico http://www.tibiaking.com/forum/topic/53099-1078-tfs-12-cast-system-novos-outfits-mounts/ Só estou trazendo o conteúdo e por não conhecer bem não posso dar suporte mas do jeito que está é só 'instalar' e vai funcionar. Creditos.: Summ Sistema Vip Talkaction !checkvip para todos os players Talkaction /vip para membros da staff - /vip adddays, NomedoPlayer, 5 --> Adiciona 5 dias vip para o Player. - /vip removedays, NomedoPlayer, 5 --> Remove 5 dias vip do Player. - /vip remove, PlayerName --> Remove todos os dias vip do Player. - /vip check, NomedoPlayer --> Checa quantos dias vip o Player tem. - /vip addinfinite, NomedoPlayer --> Adiciona tempo vip infinito para o Player. Tiles VIP Portas VIP / Actions Items que adicionam dias VIP ItemId 10135 adiciona 10 dias vip. ItemId 10134 adiciona 30 dias vip. ItemId 10133 adiciona 90 dias vip. Imagens Comando !checkvip mas sem ter vip Comando /vip adddays, dracoknight, 5 Comando !checkvip após adicionar 5 dias Comando /vip addinfinite, dracoknight Comando !checkvip após usar infinite Comando /vip remove, dracoknight
  4. Bom galera eu resolvi fazer o Vault System a pedido de um amigo meu e decidi compartilhar com vocês. Testado em 8.60 TFS 0.4 EDIT -- O script foi arrumado, pois havia um bug que o player ganhava golds. Vamos lá. 1° - Vá em data/actions/scripts e crie um arquivo chamado vault.lua, e dentro você coloca isso: local vaultStorage = 99991 -- storage em que ficara armazenado os golds ------------------//* Functions //------------------- local function getPlayerFreeSpace(cid) -- by MaTTch local checkSlots, space = {3,5,6,10}, 0 local function getContainerFree(container) local free = 0 if(not isContainer(container.uid)) then return free end for i = 0, (getItemInfo(container.itemid).maxItems -1) do local item = getContainerItem(container.uid, i) if(item.itemid == 0) then free = free + 1 elseif(isContainer(item.uid)) then free = free + getContainerFree(item) end end return free end for _, i in ipairs(checkSlots) do local slotItem = getPlayerSlotItem(cid, i) if(i ~= CONST_SLOT_BACKPACK and slotItem.itemid == 0) then space = space + 1 elseif(isContainer(slotItem.uid)) then space = space + getContainerFree(slotItem) end end return space end local function withdrawMoneySecurity(cid, value, storage) -- by MaTTch local storageMoney, countValue = getPlayerStorageValue(cid, storage), 0 local config = { [1] = {ITEM_CRYSTAL_COIN, math.floor(value/getItemInfo(ITEM_CRYSTAL_COIN).worth)}, [2] = {ITEM_PLATINUM_COIN, math.floor((value/getItemInfo(ITEM_PLATINUM_COIN).worth)-(math.floor(value/getItemInfo(ITEM_CRYSTAL_COIN).worth)*100))}, [3] = {ITEM_GOLD_COIN, math.floor(value%100)} } for i = 1, #config do local count = config[i][2] if(count > 0) then while(count > 0) do storageMoney = getPlayerStorageValue(cid, storage) local a, itemCap = count > 100 and 100 or count, getItemInfo(config[i][1]).weight if(getPlayerFreeCap(cid) >= (itemCap*a)) then if(getPlayerFreeSpace(cid) >= 1) then doPlayerAddItem(cid, config[i][1], a) setPlayerStorageValue(cid, storage, (storageMoney - (getItemInfo(config[i][1]).worth * a))) countValue = countValue + (getItemInfo(config[i][1]).worth * a) count = count - a else return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have enough space in container. You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.") end else return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have enough cap. You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.") end end end end return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.") end ------------------//* End Functions //------------------- function onUse(cid, item, fromPosition, itemEx, toPosition) local cidMoney, vaultMoney = getPlayerMoney(cid), getPlayerStorageValue(cid, vaultStorage) if(vaultMoney <= 0) then if(cidMoney <= 0) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have money.") end doPlayerRemoveMoney(cid, cidMoney) setPlayerStorageValue(cid, vaultStorage, cidMoney) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have added "..cidMoney.." gold"..(cidMoney > 1 and "s" or "").." to vault. Now your money is kept in the vault chest, you can take it whenever you want.") else withdrawMoneySecurity(cid, vaultMoney, vaultStorage) end return true end 2° - Agora em data/actions/actions.xml adicione a tag: <action itemid="ID" event="script" value="vault.lua"/> Em ID você escolhe o id do item que quiser. 3° - Agora em data/creaturescripts/scripts crie um arquivo com o nome vaultLook.lua, e dentro coloque isso: local config = { vaultId = ID, -- itemid do vault vaultStorage = 99991 -- storage em que ficara armazenado os golds } function onLook(cid, thing, position, lookDistance) local show = getPlayerStorageValue(cid, config.vaultStorage) if(thing.itemid == config.vaultId) then local str = "You see"..(getItemInfo(thing.itemid).article and " "..getItemInfo(thing.itemid).article.." " or " ")..getItemInfo(thing.itemid).name..".\nYou have "..(show < 0 and 0 or show).." gold"..(show > 1 and "s" or "").." in the vault." if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then str = str .. "\nItemID: ["..thing.itemid.."].\nPosition: [X: "..getThingPos(thing.uid).x.."] [Y: "..getThingPos(thing.uid).y.."] [Z: "..getThingPos(thing.uid).z.."]." end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str) return false end return true end 4° - Agora em data/creaturescripts/creaturescripts.xml adicione a tag: <event type="look" name="vaultLook" event="script" value="vaultLook.lua"/> 5° - Agora em data/creaturescripts/login.lua lá embaixo adicione junto dos outros: registerCreatureEvent(cid, "vaultLook") E agora o sistema já esta pronto para ser usado. - Aah mas como funciona? Você clica uma vez no cofre (vault) e deposita todo seu dinheiro nele, ao clicar de novo você pega-os de volta, e caso não tiver cap ou espaço na bag você pega somente o possível e o restante ficara la até você quiser pegar. --> Versão do Vault System em editText Créditos: MaTTch (eu)
  5. Bom, procurei esse Castle por MUITO TEMPO, mas não achei em NENHUM LUGAR DA INTERNET. Ontem, eu estava vendo alguns mapas do @Deathrocks, e vi nos prints, que o mapa possuia o evento que eu queria! Então baixei o mapa e extrai o evento, então venho lhes trazer! Nome: Castle 24H Cliente: 8.6 Versão TFS: 0.4 Tipo: Evento Bom, para começar, vamos em actions/scripts e crie 2 arquivos: castledoor1.lua castlewar1.lua Agora em actions.xml adicione as tags: Agora em monster/traps crie 3 arquivos: porta.xml protectcastle.xml statue.xml Agora em monsters.xml adicione as tags: Vamos para movements/scripts e crie 2 arquivos: castlewar2.lua level.lua Agora em movements.xml adicione as tags: Pronto. Agora você só precisa baixar o mapa, inserir o mesmo ao seu servidor, configurar os teleports, e as hunts dentro do castle etc. PRINTS: 1ª parte 2ª parte: Obs.: Todos os ActionID e monsters já estão no mapa! Você só precisa configurar as coordenadas dos teleports, e o que possui no castle! Obs².: Tudo o que você pode configurar, já está escrito em cada script! Créditos: @DeathRocks PC98 mapa.rar
  6. Você pode configurar se quer que o preço aumente a cada reset, se quer que o level pra resetar aumente e se vc quer que a vida resete junto (e quanto % da vida atual será a vida após resetar). Testado em tfs 1.1, Versão 10.77 Vá em data/npc/lib/ crie npc_resets.lua : Você pode editar mexendo aqui. no script acima : config = { minlevel = 150, --- Level inical para resetar price = 10000, --- Preço inicial para resetar newlevel = 20, --- Level após reset priceByReset = 0, --- Preço acrescentado por reset percent = 30, ---- Porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total) maxresets = 50, ---- Maximo de resets levelbyreset = 0 --- Quanto de level vai precisar a mais no próximo reset } agora em data/npc/ crie reseter.XML : Agora em data/npc/scripts crie reseter.lua : Img :
  7. Video de Demonstração ________________________________________________ data/firestorm_event.lua -- firestorm Variables fsJoinedCountGlobalStorage = 18900 --Player joined event count / recuento de players. fsJoinStorage = 18901 --player join storage / storage del jugador a unirse. fsMinPlayers = 2 --min players needed when time runout / minimo de players necesarios para comenzar el evento. fsMaxPlayers = 5 --max players to join / maximo de players. fsTrophy = 7369 --trophy itemid / itemid del premio(que no sea stackable). fsEventCountGlobalStorage = 18902 --firestorm Count (no move/no moverle). fsWaitMinutes = 1 --when event has opened, how long until it starts? / cuantos minutos tarde el evento en empezar. fsWaitingRoomPos = Position(1016, 940, 7) --middle of waiting room / punto medio de el cuarto de espera. fsArena = Position(991, 930, 7) --when even start where should player be teleported in the arena? / punto donde seran transportados los players. fsArenaFromPosition = Position(984, 925, 7) --pos of top left corner / posicion de esquina superior izquierda. fsArenaToPosition = Position(998, 935, 7) --pos of bottom right corner /posicion de esquina inferior derecha. fsMiddleEventArena = Position(991, 930, 7) --Middle pos of the arena / punto medio de la arena fsWaitingRoomRadiusX = 8 --depends how big the waiting room is 20sqm to x / depende de lo grande la sala de espera en x fsWaitingRoomRadiusY = 8 --depends how big the waiting room is 20sqm to y / depende de lo grande la sala de espera en y fsEventArenaRadiusX = 15 --Depends how big the firestorm arena is 50sqm to x / depende de lo grande de la arena en x fsEventArenaRadiusY = 15 --Depends how big the firestorm arena is 50sqm to y / depende de lo grande de la arena en y fsStartedGlobalStorage = 18903 -- Value: 0 == false, 1 == true, 2 == started --State of the event fsCreateTeleportPosition = Position(1000, 1000, 7) --Where should the teleport be created? / posicion donde sera creado el teleport? function startfirestorm() local specs = Game.getSpectators(fsWaitingRoomPos, false, true, 0, fsWaitingRoomRadiusX, 0, fsWaitingRoomRadiusY) if Game.getStorageValue(fsJoinedCountGlobalStorage) <= fsMinPlayers then for i = 1, #specs do specs[i]:teleportTo(specs[i]:getTown():getTemplePosition(), false) specs[i]:setStorageValue(fsJoinStorage, 0) end resetfsVariables() Game.broadcastMessage('firestorm Event failed to start, because of to little players joined the event!', MESSAGE_STATUS_WARNING) return true end for i = 1, #specs do local rX, rY, rZ rX = math.random(fsArenaFromPosition.x, fsArenaToPosition.x) rY = math.random(fsArenaFromPosition.y, fsArenaToPosition.y) rZ = math.random(fsArenaFromPosition.z, fsArenaToPosition.z) specs[i]:teleportTo(Position(rX, rY, rZ)) end Game.broadcastMessage("firestorm Event has started, good luck to all participant.", MESSAGE_STATUS_WARNING) Game.setStorageValue(fsStartedGlobalStorage, 2) doStartfirestorm() end function doStartfirestorm() if Game.getStorageValue(fsJoinedCountGlobalStorage) > fsMaxPlayers then return false end if Game.getStorageValue(fsStartedGlobalStorage) == 2 then local specs = Game.getSpectators(fsArena, false, true, 0, 10, 0, 10) for i = 1, #specs do local randX, randY, randZ randX = math.random(fsArenaFromPosition.x, fsArenaToPosition.x) randY = math.random(fsArenaFromPosition.y, fsArenaToPosition.y) randZ = math.random(fsArenaFromPosition.z, fsArenaToPosition.z) local randfire = Position(randX, randY, randZ) local randX1, randY1, randZ1 randX1 = math.random(fsArenaFromPosition.x, fsArenaToPosition.x) randY1 = math.random(fsArenaFromPosition.y, fsArenaToPosition.y) randZ1 = math.random(fsArenaFromPosition.z, fsArenaToPosition.z) local randfire1 = Position(randX1, randY1, randZ1) local creature, players = nil, Game.getPlayers() for i = 1, #players do creature = players[i] doSendDistanceShoot(fsArenaFromPosition, randfire, 4) doSendDistanceShoot(fsArenaToPosition, randfire, 4) doSendDistanceShoot(Position(998, 925, 7), randfire, 4) doSendDistanceShoot(Position(984, 935, 7), randfire, 4) doAreaCombatHealth(creature.uid, COMBAT_HOLYDAMAGE, randfire,randfire, -9999, -1000000,7) end end addEvent(doStartfirestorm, 500) end end function resetfsVariables() Game.setStorageValue(fsEventCountGlobalStorage, 0) Game.setStorageValue(fsJoinedCountGlobalStorage, 0) Game.setStorageValue(fsStartedGlobalStorage, 0) end creaturescripts/scriptsdofile('data/firestorm_event.lua') function onPrepareDeath(player, killer) local winner = 0 if player:getStorageValue(fsJoinStorage) >= 1 then Game.setStorageValue(fsJoinedCountGlobalStorage, Game.getStorageValue(fsJoinedCountGlobalStorage)-1) player:teleportTo(player:getTown():getTemplePosition()) player:setStorageValue(fsJoinStorage, 0) player:addHealth(player:getMaxHealth()) if Game.getStorageValue(fsJoinedCountGlobalStorage) <= 1 then --Event ended, someone won! local pla, play = nil, Game.getPlayers() for i = 1, #play do pla = play[i] if pla:getStorageValue(fsJoinStorage) == 1 then winner = pla:getId() break end end winner = Player(winner) if winner then winner:teleportTo(winner:getTown():getTemplePosition()) winner:addHealth(winner:getMaxHealth()) local trophy = winner:addItem(fsTrophy, 1) if trophy then trophy:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, '['.. winner:getName() ..'] has won the firestorm Event.') end Game.broadcastMessage(string.format('%s is the winner of firestorm Event', winner:getName()), MESSAGE_STATUS_WARNING) end resetfsVariables() end return false end return true end Creaturescripts/scripts dofile('data/firestorm_event.lua') function onPrepareDeath(player, killer) local winner = 0 if player:getStorageValue(fsJoinStorage) >= 1 then Game.setStorageValue(fsJoinedCountGlobalStorage, Game.getStorageValue(fsJoinedCountGlobalStorage)-1) player:teleportTo(player:getTown():getTemplePosition()) player:setStorageValue(fsJoinStorage, 0) player:addHealth(player:getMaxHealth()) if Game.getStorageValue(fsJoinedCountGlobalStorage) <= 1 then --Event ended, someone won! local pla, play = nil, Game.getPlayers() for i = 1, #play do pla = play if pla:getStorageValue(fsJoinStorage) == 1 then winner = pla:getId() break end end winner = Player(winner) if winner then winner:teleportTo(winner:getTown():getTemplePosition()) winner:addHealth(winner:getMaxHealth()) local trophy = winner:addItem(fsTrophy, 1) if trophy then trophy:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, '['.. winner:getName() ..'] has won the firestorm Event.') end Game.broadcastMessage(string.format('%s is the winner of firestorm Event', winner:getName()), MESSAGE_STATUS_WARNING) end resetfsVariables() end return false end return true end creaturescripts.xml <!-- firestorm --> <event type="prepareDeath" name="fire_event" script="xxxx.lua"/> login player:registerEvent("fire_event") globalevents/scripts dofile('data/firestorm_event.lua') function onThink(interval, lastExecution, thinkInterval) resetfsVariables() if Game.getStorageValue(fsStartedGlobalStorage) < 1 then local teleport = doCreateItem(11796,1,fsCreateTeleportPosition) if teleport then doSetItemActionId(teleport, 5499) doSendMagicEffect(fsCreateTeleportPosition, CONST_ME_TELEPORT) end local r_tp = Tile(fsCreateTeleportPosition):getItemById(11796) addEvent(function() r_tp:remove() getTileItemById(fsCreateTeleportPosition, 11796) end, 60 * 1000) addEvent(function() doSendMagicEffect(fsCreateTeleportPosition, CONST_ME_TELEPORT) end, 60 * 1000) end Game.setStorageValue(fsStartedGlobalStorage,1) print('firestorm Event has started & waiting for players to join! Min: '.. fsMinPlayers ..'/'.. fsMaxPlayers ..'.') Game.broadcastMessage('The firestorm Event has started! You have '.. fsWaitMinutes ..' minutes to join!', MESSAGE_STATUS_WARNING) addEvent(startfirestorm, fsWaitMinutes * 60 * 1000) return true end globalevents.xml <!-- FireStorm--> <globalevent name="firestorm_event" interval="72000000" script="xxxx.lua"/> movements/scripts dofile('data/firestorm_event.lua') function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if Game.getStorageValue(fsStartedGlobalStorage) == 2 then player:sendTextMessage(MESSAGE_INFO_DESCR, 'The Firestorm Event has already started.') player:teleportTo(fromPosition, true) return false end if Game.getStorageValue(fsStartedGlobalStorage) == 0 then player:sendTextMessage(MESSAGE_INFO_DESCR, 'The Firestorm Event has not started yet.') player:teleportTo(fromPosition, true) return false end if Game.getStorageValue(fsJoinedCountGlobalStorage) >= fsMaxPlayers then player:teleportTo(fromPosition, true) player:sendTextMessage(MESSAGE_INFO_DESCR, 'The Firestorm Event is already full! ['.. Game.getStorageValue(fsJoinedCountGlobalStorage) ..'/'.. fsMaxPlayers ..']') return false end player:teleportTo(fsWaitingRoomPos) Game.setStorageValue(fsJoinedCountGlobalStorage, Game.getStorageValue(fsJoinedCountGlobalStorage) + 1) Game.broadcastMessage(string.format('%s has joined the Firestorm Event! [%s/'.. fsMaxPlayers ..'].', player:getName(), Game.getStorageValue(fsJoinedCountGlobalStorage)), MESSAGE_STATUS_WARNING) player:setStorageValue(fsJoinStorage, 1) return true end Movements.xml <!-- firestorm --> <movevent event="StepIn" actionid="5499" script="xxxx.lua"/> ________________________________________________ Créditos: Scrappy Coco
  8. Primeiramente, informo que não fui eu quem criou o sistema e nem a explicação, créditos no final. O que eu fiz então? R: Adaptei algumas coisas, exemplo: com o original a Cd Bar não aparecia nos pokemons com addon, adaptei para que apareçam e trouxe pro TK pois achei em outro lugar! OBS: Sei que já existe alguns posts sobre o assunto aki, mas quando procurei pra por no meu ot, todos eram incompletos apenas com o script pra por no actions e a tag no actions.xml OBS²: A única coisa que não funciona nesse sistema é que caso o pokemon tenha fly/surf/ride, não aparece o addon deles enquanto estiver no fly/surf/ride, não sei como por para aparecer, então se alguém souber, ficaria grato se ensinasse ( possuo a sprite do pokemon com addon usando fly/surf/ride, só não sei como por ) A Alteração feita para que a Cd Bar apareça foi feita no goback.lua e some functions.lua , já estará o correto na explicação abaixo! Vamos Lá ! Em Data/actions e Actions.xml adiciona isto: <action itemid="IdAddon;IdAddon" event="script" value="Addon.lua"/> Em IdAddon Coloca os ids dos items dos addons! ai para adicionar mais ids é só colocar o ";" Ou seja aquele negocio verde, e depois colocar o ID Ficando:IdAddon;IdAddon;IdAddon e por ai vai Ai Em Data/actions/scripts cria um arquivo lua Chamado "Addon" e Dentro Dele Adiciona Isto: function onUse(cid, item, fromPosition, itemEx, toPosition) local addons = { [12593] = {pokemon= "Electabuzz" , looktype = 1482}, --xxxx = id do item do addon --- "Scyther" = nome do pokemon --- looktype = 1 é o looktype do pokemon com addon [12925] = {pokemon= "Alakazam" , looktype = 1471}, --xxxx = id do item do addon --- "Scyther" = nome do pokemon --- looktype = 1 é o looktype do pokemon com addon } if #getCreatureSummons(cid) > 0 then doPlayerSendCancel(cid, "Please back your pokemon.") return false end local numero = addons[item.itemid].looktype local pb = getPlayerSlotItem(cid, 8).uid local pk = addons[item.itemid].pokemon if getItemAttribute(pb,"poke") ~= pk then doPlayerSendCancel(cid, "Sorry, you can't use this addon on this poke.") return false end if getItemAttribute(pb,"addon") < 1 then doRemoveItem(item.uid, 1) doPlayerSendTextMessage(cid, 27, "Congratulations! Now your pokemon will use the addon.") doSetItemAttribute(pb,"addon",numero) return true end return true end Para adicionar um Novo Addon é só Adicionar esta tag: [ItemID] = {pokemon= "NomeDoPoke" , looktype = IdDaOutfit}, EM ItemID, troca pelo id do addon em pokemon troca NomeDoPoke, pelo Nome Do Pokémon que vai ser adicionado o Addon Em looktype, troca IdDaOutfit, pelo looktype do pokémon com addon! Em Goback.lua Procure Por: (fica lá no final) else doPlayerSendCancel(cid, "This pokemon is fainted.") end E Adiciona Em cima do else Isto: local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb,"addon") if not look then doSetItemAttribute(pb,"addon",0) end if look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) end Em Catch system.lua Procura Por: doItemSetAttribute(item, "description", description) Em baixo adicione isto: doItemSetAttribute(item, "addon", 0) Em Some Functions.lua Procure Por: unLock(item.uid) Da Enter Duas Vezes e Adiciona isto: local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb,"addon") if not look then doSetItemAttribute(pb,"addon",0) end if look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) end Pronto! Sistema de Addon Funcionando Perfeitamente Caso Coloque Tudo Certinho! Caso Queira uma Addon Box... Façam isto: Em Actions.xml Adiciona Isto: <action itemid="12595" event="script" value="addonbox.lua"/> E Em Data/Actions/Scripts Cria um Arquivo Lua Chamado "addonbox" e Adiciona Isto Dentro Dele: function onUse(cid, item, frompos, item2, topos, pos) local addons = {12593,12889} local randomChance = math.random(1, 49) if item2.itemid == 12595 then doSendMagicEffect(getCreaturePosition(cid), 28) doRemoveItem(item2.uid, 1) doPlayerAddItem(cid, addons[randomChance], 1) doPlayerSendTextMessage(cid, 27, "Você ganhou um Addon!") return true end end Pronto Addon Box Adicionada! Créditos Pokémon X Rain Pelo Sistema de Addon Drazyn12391 E Eu EDITED Encontrei uma falha, quando evolui o pokemon com Addon, após voltar para a ball e mandar denovo, ele fica com a outfit antes de evoluir e com addon. Exemplo: Evolui o Electabuzz COM Addon, ele virou electivire, voltei pra ball e mandei denovo, ele estava com o Outfit(aparência) do Electabuzz com Addon. Ou seja, melhor só por o addon em pokemons que não evoluem, caso alguem saiba resolver pfv comenta aki, caso eu descubra como resolver, edito.
  9. 'Dodge System 2015' versão com AMULETO & ELEMENTOS DE DEFESA. Testado em OTX Server 8.60 & TFS 0.4 dev 3884. Antes de começar, quero avisar às pessoas que estão sem tempo ou com preguiça de ler o tópico inteiro, que eu upei um zip do sistema inteiro. então é só baixar e instalar ai. Download SCAN Continuando Tópico.. Cada ponto de Dodge equivale a x% de chance de desviar de um ataque, e ao mesmo tempo, enviar um elemento compatível com o nível de dodge do jogador. Sobre o desvio, quase todo mundo já conhece, mas e esse tal elemento? Ao desviar do ataque, automaticamente o amuleto contra-ataca com um ataque de distância; sua fonte de energia é o fist fighting, quanto mais alto for o skill, mais alto será o dano; Cada amuleto possui seu próprio elemento e ele será a chave para o funcionamento do dodge, ou seja, sem AMULET, sem Dodge. 1º - Procure a pasta Lib na sua datapack, crie um arquivo 151-dodgesystem.lua e dentro adicione isso : 2º- abra o arquivo actions.xml e adicione isso : <action itemid="12411" event="script" value="dodge.lua"/> 3º- entre na pasta scripts em actions, crie um arquivo .lua chamado dodge e adicione isso : 4º- abra o arquivo creaturescripts.xml e adicione isso : <event type="statschange" name="DodgeSystem" event="script" value="dodge.lua"/> 5º- entre na pasta scripts em creaturescripts, crie um arquivo .lua chamado dodge e adicione isso : 6º- ainda em creaturescripts, abra o arquivo login.lua e adicione isso la no final antes do return true : registerCreatureEvent(cid, "DodgeSystem") 7º- abra o arquivo movements.xml, substitua isso : OTX : TFS : por isso : 8º - entre na pasta scripts em movements, crie um arquivo .lua chamado dodgeamulet e adicione isso : 9º- abra o arquivo talkactions.xml e adicione isso : <talkaction log="yes" words="!dodge;/dodge" event="script" value="dodge.lua"/> 10º- entre na pasta scripts em talkactions, crie um arquivo .lua chamado dodge e adicione isso : no arquivo lib.. DODGE_PERCENT é os porcentos que o jogador ganhará por cada ponto adquirido; DODGE_MAX é o máximo de dodge; DODGE_PRICE é o preço de cada pedra; DODGE_ITEMID é o ID da pedra de dodge; DODGE_COMMAND_REMOVE é um comando para remover 1 ponto de dodge e receber 75% do dinheiro que você pagou pela pedra. true = comando disponível, false = comando inexistente; DODGE_ONLY_PREMIUM é para jogadores com premium, true = o dodge só funcionará com premium, false = qualquer um poderá usar; DODGE_TEXT é o texto que aparecerá quando o player desviar de um ataque; DODGE_TEXTCOLOR é a cor do texto; DODGE_FISTMULTIPLIER é para multiplicar o fist fighting do jogador pelo multiplier configurado. true = multiplica, false = os multipliers serão sempre os mesmos valores; type é o tipo de elemento; min é o hit mínimo; max é o hit máximo; mana é a quantidade de mana que precisa para contra-atacar com o elemento. se não tiver mana, só vai desviar; shoot é o efeito de distância. ID dos amulets : terra amulet : 7887 glacier amulet : 7888 lightning pendant : 7889 magma amulet : 7890 comandos : !dodge; !dodge buy; !dodge remove. caso você queira que o amulet mude de elemento ao dar use(estilo exp alta), abra o items.xml e substitua isso : por isso : um exemplo do DODGE_FISTMULTIPLIER : se estiver true, o jogador estiver com o 'magma amulet' e tiver 100 fist fighting, ele terá a chance de acertar um hit entre 400-1000 de dano; se estiver false, ele só vai hitar entre 4-9 de dano, ai você vai ter que editar pra deixar mais alto, só que será o padrão; algumas imagens : Então pessoal, espero que tenham gostado da minha versão. Eu fiz ela do zero, peguei só a ideia do Dodge System que vi em alguns Ots e mandei bala acrescentando esses elementos com amuleto. créditos : Halls Santos & o criador do Dodge System, infelizmente não sei o nome dele. comentem ai que eu edito depois.
  10. Eu tinha esse evento muito tempo aqui no meu Pen Drive (para ser mais específico 4 anos), eu vou mudar ele para 1.2 amanha, entao nao me interessa a versao 0.4 mais. Nao sei se esta funcionando, nao tenho mapa. E nao vou explicar configuracoes, se voce nao souber configurar esse evento, voce nao merece te-lo em seu servidor!! Entao esta ai o code: login.luaregisterCreatureEvent(cid, "TBEventC") registerCreatureEvent(cid, "TBEventS") registerCreatureEvent(cid, "TBEventO") tb.lualocal config = { base = {{x=121,y=126,z=7}, {x=142,y=149,z=7}}, -- team1 base, team2 base teamStorage = 49595, fragStorage = {49596, 49597} } function addFrag(id) return setGlobalStorageValue(config.fragStorage[id], math.max(1, (getGlobalStorageValue(config.fragStorage[id])+1))) end function getFragsTB(id) return getGlobalStorageValue(config.fragStorage[id]) == -1 and 0 or getGlobalStorageValue(config.fragStorage[id]) end function getTeam(cid) return getPlayerStorageValue(cid, config.teamStorage) == -1 and 0 or getPlayerStorageValue(cid, config.teamStorage) end function onCombat(cid, target, lastHit, flags) if not(isPlayer(cid)) or not(isPlayer(target)) then return true end if getTeam(cid) ~= 0 and getTeam(cid) == getTeam(target) then return doPlayerSendCancel(cid, "You may not attack teammates.") and false end return true end function onStatsChange(cid, attacker, type, combat, value) if combat == COMBAT_HEALING then return true end if not(isPlayer(cid)) or not(isPlayer(attacker)) then return true end if isMonster(attacker) and getTeam(cid) ~= 0 then return false end if isMonster(attacker) then return true end if getTeam(cid) ~= 0 and getTeam(cid) == getTeam(attacker) then return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You may not attack teammates.") and false elseif getTeam(cid) == 0 then return true end if type ~= STATSCHANGE_HEALTHLOSS then return true end if value >= getCreatureHealth(cid) then doTeleportThing(cid, config.base[getTeam(cid)]) doSendMagicEffect(getThingPos(cid), 10) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) addFrag(getTeam(attacker)) doPlayerSendTextMessage(attacker, MESSAGE_INFO_DESCR, "You killed ".. getPlayerName(cid) .." and earned a frag for your team. Your team now has ".. getFragsTB(getTeam(attacker)) .. " frags.") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You were owned by ".. getPlayerName(attacker) ..".") return false end return true end function onOutfit(cid, old, current) if getTeam(cid) ~= 0 then return doPlayerSendCancel(cid, "You cannot change your outfit here.") and false end return true end globalevents tbevent.lualocal config = { tpPos = {x=92,y=118,z=7}, -- where tp happends tpToPos = {x=130,y=130,z=7}, -- tp p onde minutes = 1, -- minute area = {{x=121,y=126,z=7},{x=142,y=149,z=7}}, -- top left and bottom right corner of fight area waiting = {{x=121,y=126,z=7},{x=142,y=149,z=7}}, -- top left and bottom right corner of waiting arena needed = 2, -- minimum players timeToEnd = 30*1000, -- time to end base = {{x=121,y=126,z=7}, {x=142,y=149,z=7}}, -- team1 base, team2 base names = {"Alliance", "Horde"}, -- team names outfit = {{132, 136, 40},{132, 136, 160}}, -- outfits teamStorage = 49595, fragStorage = {49596, 49597}, fragsToWin = 3, -- frags to win outfitStorage = 49598 } function getFragsTB(id) return getGlobalStorageValue(config.fragStorage[id]) == -1 and 0 or getGlobalStorageValue(config.fragStorage[id]) end function getTeam(cid) return getPlayerStorageValue(cid, config.teamStorage) == -1 and 0 or getPlayerStorageValue(cid, config.teamStorage) end function setTeam(cid, team) local o = getCreatureOutfit(cid) setPlayerStorageValue(cid, config.outfitStorage, "{lookType=" .. o.lookType .. ", lookHead=" .. o.lookHead .. ", lookAddons=" .. o.lookAddons .. ", lookLegs=" .. o.lookLegs .. ", lookBody="..o.lookBody .. ", lookFeet=".. o.lookFeet.."}") doCreatureChangeOutfit(cid, {lookType = config.outfit[team][getPlayerSex(cid)+1], lookHead = config.outfit[team][3], lookAddons = 3, lookLegs = config.outfit[team][3], lookBody = config.outfit[team][3], lookFeet = config.outfit[team][3]}) return setPlayerStorageValue(cid, config.teamStorage, team) end function winner(id) if isInArray({1,2}, id) then doBroadcastMessage(config.names[id] .. " has won the Team Battle event.") for _, cid in pairs(getPlayersOnline()) do if getTeam(cid) == id then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your team has won the Team Battle event.") local rand = math.random(1,3) if rand == 1 then doPlayerAddItem(cid, SOFTBOOTS_ID, 1) elseif rand == 2 then doPlayerAddItem(cid, 2160, 10) else doAddPoints(cid, 5) end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your team has lost the Team Battle event.") end end else doBroadcastMessage("No one won the Team Battle event. DRAW") end for _, cid in pairs(getPlayersOnline()) do if getTeam(cid) ~= 0 then doTeleportThing(cid, getTownTemplePosition(1)) doSendMagicEffect(getThingPos(cid), 10) setPlayerStorageValue(cid, config.teamStorage, -1) setGlobalStorageValue(5474578, -1) doCreatureChangeOutfit(cid, loadstring("return " .. getPlayerStorageValue(cid, config.outfitStorage))()) end end end function areaPlayers(c) local t = {} for x = c[1].x, c[2].x do for y = c[1].y, c[2].y do for z = c[1].z, c[2].z do local tmp = getThingFromPos({x=x,y=y,z=z,stackpos=253}) if tmp.uid > 0 and (isPlayer(tmp.uid)) then table.insert(t, tmp.uid) end end end end return t end function endTB(z) if z >= config.timeToEnd then local w = getFragsTB(1) == getFragsTB(2) and 3 or getFragsTB(1) > getFragsTB(2) and 1 or 2 return winner(w) elseif getFragsTB(1) ~= getFragsTB(2) then if getFragsTB(1) >= config.fragsToWin then return winner(1) elseif getFragsTB(2) >= config.fragsToWin then return winner(2) end end addEvent(endTB, 25, z+25) end function setTeams(cid, team) local pos = config.base[team] if not(isPlayer(cid)) then return true end doTeleportThing(cid, pos) doSendMagicEffect(pos, 10) setTeam(cid, team) end function startTB() doRemoveItem(getTileItemById(config.tpPos, 1387).uid) local ppl = areaPlayers(config.waiting) for i = 1, #ppl do local level = getPlayerLevel(ppl[i]) if not(level >= 150) then -- LEVEL HERE doTeleportThing(ppl[i], getTownTemplePosition(1)) doSendMagicEffect(getThingPos(ppl[i]), 10) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "To fight here must be level 150.") end end ppl = areaPlayers(config.waiting) if #ppl%2 == 1 then local r = ppl[math.random(#ppl)] doTeleportThing(r, getTownTemplePosition(1)) doSendMagicEffect(getThingPos(r), 10) doPlayerSendTextMessage(r, MESSAGE_INFO_DESCR, "Sorry, but you were kicked from the event for balancement.") end ppl = areaPlayers(config.waiting) if #ppl >= config.needed then for p = 1, #ppl/2 do addEvent(setTeams, 10*1000, ppl[p], 1) for i = 10, 1, -1 do addEvent(doPlayerSendTextMessage, (10-i)*1000, ppl[p], MESSAGE_INFO_DESCR, "Team Battle event will start in " .. i .. " seconds.") end end for p = #ppl/2+1, #ppl do addEvent(setTeams, 10*1000, ppl[p], 2) for i = 10, 1, -1 do addEvent(doPlayerSendTextMessage, (10-i)*1000, ppl[p], MESSAGE_INFO_DESCR, "Team Battle event will start in " .. i .. " seconds.") end end addEvent(endTB, 10*1000, 0) return doBroadcastMessage("Team Battle event started.") end for i = 1, #ppl do doTeleportThing(ppl[i], getTownTemplePosition(1)) doSendMagicEffect(getTownTemplePosition(1), 10) doPlayerSendTextMessage(ppl[i], MESSAGE_INFO_DESCR, "There were not enough players") end doBroadcastMessage("Team Battle failed to start, because there were not enough players.") setGlobalStorageValue(5474578, -1) end function onTime() setGlobalStorageValue(config.fragStorage[1], -1) setGlobalStorageValue(5474578, 1) setGlobalStorageValue(config.fragStorage[2], -1) doBroadcastMessage("Team Battle event will start in " .. config.minutes .. " minutes. The teleporter is open now. ") doCreateTeleport(1387, config.tpToPos, config.tpPos) for m = config.minutes-1, 0, -1 do if m == 0 then addEvent(startTB, config.minutes*60*1000) else addEvent(doBroadcastMessage, (config.minutes-m)*60*1000, "Team Battle event will start in " .. m .. " minutes.") end end return true end Créditos: Desconhecido. Yours VANKK;
  11. Bom, como um individuo(Vudi) não sabe cumprir o que fala, vou postar o sistema aqui.(não cabe ao post explicar aqui) Bom, aqui está o smeargle system, igual o da PxG. Vamos lá. 1 - Vá na pasta Lib, substitua seu cooldown bar.lua por isso: 2 - Ainda no Lib, no fim(depois do ultimo end) do Some Functions.lua, adicione isso: 3 - Agora no order.lua, do Actions, em baixo de: if getTileThingByPos(checkpos).uid <= 0 then return true end Adicione: 4 - Se seu servidor ja tiver os spells, sketch 1, sketch 2... Substitua por esses: Se não, use os mesmos acima, não esqueça de adicionar no spells.xml. 5 - Agora, vá em talkactions/scripst, abra o move1.lua e substitua: Pronto, se tiver feito tudo certo, funcionará. Como ficará: Como usar: Créditos: Eu(Todo o script)
  12. Se eu não poder fazer isso por favor me avisem aqui no tópico que eu retiro. Créditos SOMENTE do: cbrm (OTLand) Tópico Oficial:https://otland.net/threads/reward-chest-boss-reward-tfs-1-2.233397/ Tested on TFS 1.2, 10.77/78 Based on http://www.tibia.com/news/?subtopic=newsarchive&id=2486 Oque tem? To-do Changelog Comentários Agradecimentos especiais para Instruções de instalação Execute a query na database CREATE TABLE IF NOT EXISTS `player_rewardchest` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player_id` int(11) NOT NULL, `reward` text NOT NULL, `date` bigint(20) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB; src/const.h Abaixo... ITEM_MARKET = 14405 ...Adicione: ITEM_REWARD_CHEST = 21584, REWARD_CHEST_DEPOT = 99, src/depotchest.h Abaixo... explicit DepotChest(uint16_t _type); ...Adicione: uint32_t getDepotId() const { return depotId; } void setDepotId(uint32_t id) { depotId = id; } Abaixo... uint32_t maxDepotItems; ...Adicione: uint32_t depotId; src/depotchest.cpp Abaixo... maxDepotItems = 1500; ...Adicione: depotId = 0; Acima... return Container::queryAdd(index, thing, count, flags, actor); ...Adicione: if (actor != nullptr && getDepotId() == REWARD_CHEST_DEPOT) { return RETURNVALUE_NOTPOSSIBLE; } src/depotlocker.h Acima... //cylinder implementations ...Adicione: void setMaxLockerItems(uint32_t maxitems) { maxSize = maxitems; } src/luascript.h Acima... static int luaContainerGetSize(lua_State* L); ...Adicione: static int luaContainerGetContentDescription(lua_State* L); src/luascript.cpp Acima... registerMethod("Container", "getSize", LuaScriptInterface::luaContainerGetSize); ...Adicione: registerMethod("Container", "getContentDescription", LuaScriptInterface::luaContainerGetContentDescription); Acima... int LuaScriptInterface::luaContainerGetSize(lua_State* L) ...Adicione: int LuaScriptInterface::luaContainerGetContentDescription(lua_State* L) { // container:getContentDescription() Container* container = getUserdata<Container>(L, 1); if (container) { std::ostringstream ss; ss << container->getContentDescription(); pushString(L, ss.str()); } else { lua_pushnil(L); } return 1; } src/actions.cpp Troque: //depot container if (DepotLocker* depot = container->getDepotLocker()) { DepotLocker* myDepotLocker = player->getDepotLocker(depot->getDepotId()); myDepotLocker->setParent(depot->getParent()->getTile()); openContainer = myDepotLocker; player->setLastDepotId(depot->getDepotId()); } else { openContainer = container; } Por: //reward chest and depot container if (item->getID() == ITEM_REWARD_CHEST) { DepotLocker* myRewardChest = player->getRewardChest(); myRewardChest->setParent(item->getTile()); openContainer = myRewardChest; player->setLastDepotId(REWARD_CHEST_DEPOT); } else if (DepotLocker* depot = container->getDepotLocker()) { DepotLocker* myDepotLocker = player->getDepotLocker(depot->getDepotId()); myDepotLocker->setParent(depot->getParent()->getTile()); openContainer = myDepotLocker; player->setLastDepotId(depot->getDepotId()); } else { openContainer = container; } src/player.h Abaixo... DepotLocker* getDepotLocker(uint32_t depotId); ...Adicione: DepotLocker* getRewardChest(); src/player.cpp Abaixo... DepotChest* depotChest = new DepotChest(ITEM_DEPOT); ...Adicione: depotChest->setDepotId(depotId); Acima... void Player::sendCancelMessage(ReturnValue message) const ...Adicione: DepotLocker* Player::getRewardChest() { auto it = depotLockerMap.find(REWARD_CHEST_DEPOT); if (it != depotLockerMap.end()) { inbox->setParent(it->second); return it->second; } DepotLocker* rewardChest = new DepotLocker(ITEM_LOCKER1); rewardChest->setDepotId(REWARD_CHEST_DEPOT); rewardChest->setMaxLockerItems(1); rewardChest->internalAddThing(getDepotChest(REWARD_CHEST_DEPOT, true)); depotLockerMap[REWARD_CHEST_DEPOT] = rewardChest; return rewardChest; } On player.cpp, container.cpp, inbox.cpp Change: if (!item->isPickupable()) { Por: if (item->getID() != 21518 && !item->isPickupable()) { Adicione em @ data/actions/actions.xml <!-- Reward Chest System --> <action itemid="21584" script="reward_chest.lua"/> <action actionid="21584" script="reward_chest.lua"/> Crie @ data/actions/scripts/reward_chest.lua function onUse(player, item, fromPosition, target, toPosition, isHotkey) --Reward Chest if item:getId() == 21584 then if player:getExhaustion(REWARD_CHEST.STORAGE) > 0 then return player:sendCancelMessage('You need to wait ' .. string.diff(player:getStorageValue(REWARD_CHEST.STORAGE)-os.time()) .. ' before using this chest again.') end player:updateRewardChest() --Boss Corpse elseif item:getActionId() == 21584 then local reward = REWARD_CHEST.LOOT[tonumber(item:getAttribute('text'))][player:getGuid()] if reward ~= nil then local rewardBag = Container(doCreateItemEx(REWARD_CHEST.CONTAINER, 1)) addContainerItems(rewardBag, reward) if player:getCapacity() < rewardBag:getCapacity() then return player:sendCancelMessage(RETURNVALUE_NOTENOUGHCAPACITY) end if player:addItemEx(rewardBag, false) == RETURNVALUE_NOERROR then REWARD_CHEST.LOOT[tonumber(item:getAttribute('text'))][player:getGuid()] = nil player:sendCancelMessage('You have picked up a reward container.') else player:sendCancelMessage(RETURNVALUE_NOTENOUGHROOM) return true end end end return false end Adicione @ data/creaturescripts/creaturescripts.xml <event type="kill" name="RewardChest" script="reward_chest.lua"/> Registre em @data/creaturescripts/scripts/login.lua player:registerEvent("RewardChest") Adicione @ data/items/items.xml <item id="21518" article="a" name="reward container"> <attribute key="weight" value="1800" /> <attribute key="containersize" value="24" /> <attribute key="slotType" value="backpack" /> </item> <item id="21584" article="a" name="reward chest"> <attribute key="type" value="depot" /> <attribute key="containerSize" value="1" /> <attribute key="description" value="This chest contains your rewards earned in battles." /> </item> Add @ data/lib/core/player.lua function Player.setExhaustion(self, value, time) return self:setStorageValue(value, time + os.time()) end function Player.getExhaustion(self, value) local storage = self:getStorageValue(value) if storage <= 0 then return 0 end return storage - os.time() end Crie em @ data/creaturescripts/scripts/reward_chest.lua (download anexado nesse post) Download RELEMBRANDO CRÉDITOS APENAS DO CBRM DA OTLAND
  13. Fala galera do TK, vim compartilhar com vcs um dos sistemas que eu fiz baseado no jogo Bird Hunt e que foi imbutido em alguns servidores famosos, sendo o Korelin um deles. Obs: Testado em TFS 0.3.6 mas deve funcionar em TFS 0.4 sem problema aqui tem uma pequena imagem demonstrando o sistema sendo utilizado: Bom, antes de tudo eu vou ensinar vocês a criar um mapa apropriado pois isso é 90% das dificuldades que os players enfrentam quando tentam adicionar o sistema. Inicialmente vc vai precisar criar uma area no seu mapa editor +- parecida com a que eu fiz na imagem abaixo: Feito isso vc deverá colocar uniqueid 16480 na porta e actionid 14872 em todos os lugares que o player pode percorrer (da placa pra \/ todos os quadrados verdes deverão conter esse actionid) Colocado os ids, vc deverá fazer a sala à prova de bugs, para isso você terá que seguir essas especificações: Note que em verde são os lugares que vc deverá colocar protect zone e em roxo os locais onde vc deve colocar no logout zone. Agora perceba que nas posições onde o player irá andar, você vai colocar tanto no logout zone como protect zone, isso pra evitar ele de matar o bixo com spells e pra evitar que ele deslogue durante o mini game. Essa contagem de sqms eu vou explicar mais tarde na configuração do script, mas tenham ela em mente. Agora vamos aos scripts: Comece criando em data/lib um arquivo chamado 045- Bird Hunt Lib.lua e colocando isso dentro dele: Feito isso vá em data/actions/scripts e adicione um arquivo chamado seagul.lua que deverá conter: e adicione em actions.xml: <action uniqueid="16480" event="script" value="seagul.lua"/> Agora vá em data/movements/scripts e crie um arquivo chamado seagulmove.lua com o seguinte conteúdo: E adicione as tags em movements.xml: <movevent type="StepIn" actionid="14872" event="script" value="seagulmove.lua"/> <movevent type="StepOut" actionid="14872" event="script" value="seagulmove.lua"/> Agora, pra deixar nosso sistema mais real e difícil, altere a velocidade do seagul de 200 pra 300 na pasta data/monsters/Birds/seagull.xml eu alterei tb a quantidade de vida q ele começa a fugir pra vida atual dele e fiz outras alterações pra tornar mais difícil, mas isso é com vcs. A maioria das coisas tá bem compreensível, com exceção das duas primeiras linhas de actions: rangecima = {x = -8, y = -4}, -- distancia em x e y da topos (ate a pos de cima) rangebaixo = {x = 0, y = 4}, -- distancia em x e y da topos (ate a pos de baixo) é aqui que entra aquela imagem, vc vai considerar a porta (o ponto cinza) como sendo nossa origem, ou seja, o ponto (0,0) rangecima é a distancia que eu tenho que percorrer em x e y pra chegar até a ponta de cima < e rangebaixo é a distancia que eu tenho que percorrer em x e y pra chegar até a ponta de baixo. Se vcs mudarem o tamanho da sala, fiquem ligados nisso. Obs: algumas pessoas fazem a sala virada pra direita também, nesse caso vc mantém a actions (pode usar inclusive o mesmo arquivo), só tem que alterar o movements pois lá vc define se é direita ou esquerda. É isso, espero que tenham gostado. O jogo é só por diversão mas vc pode alterar a função de atirar pra ganhar dinheiro por cada acerto ou então criar um npc que vc te dá X premio dependendo do seu recorde.. podendo esse premio inclusive ser uma key pra uma quest. Usem a imaginação e espero que aproveitem esse sistema. Abraços do Lobo.
  14. Esse sistema/script/sei lá o que foi desenvolvido por Karain que quis trazer um 'ar' mais moderno ao tibia.. Com esse script conversar com o npc será mais uma experiência mais amigável, continua sendo customizável mas de uma forma mais fácil! Como instalar Em data/creaturescripts/creaturescrips.xml adicione <event type="modalWindow" name="Dialogue" script="dialogue.lua"/> Em data/creaturescripts/scripts/login.lua adicione isso antes do "return true" player:registerEvent("Dialogue") Crie em data/creaturescripts o arquivo dialogue.lua e adicione player_choices = {} defaultButtons = {{id = 0x00, text = "Select", enter = true, escape = false}, {id = 0x01, text = "End", enter = false, escape = true}} function Player:getChoiceText(choice_id) if player_choices and player_choices[self:getId()] then return player_choices[self:getId()][choice_id].text else return false end end function Player:createDialogueWindowWithButtons(modalWindowId, headerText, bodyText, buttonTable, choiceTable, sendToPlayer, priority) local var = ModalWindow(modalWindowId, headerText, bodyText) for i = 1, #buttonTable do var:addButton(buttonTable[i].id, buttonTable[i].text) if buttonTable[i].enter then var:setDefaultEnterButton(buttonTable[i].id) end if buttonTable[i].escape then var:setDefaultEscapeButton(buttonTable[i].id) end end player_choices[self:getId()] = choiceTable for i = 0, #choiceTable do if choiceTable[i] ~= nil and (choiceTable[i].storage == false or self:getStorageValue(choiceTable[i].storage[1]) == choiceTable[i].storage[2]) then var:addChoice(i, choiceTable[i].text) end end if not priority then var:setPriority(false) end if sendToPlayer then var:sendToPlayer(self) end end function onModalWindow(player, modalWindowId, buttonId, choiceId) -- be careful here if you have other modalwindow scripts if buttonId == 0x00 then player:say(player:getChoiceText(choiceId),TALKTYPE_SAY) elseif buttonId == 0x01 then player:say("Good Bye.",TALKTYPE_SAY) end return true end Crie em data/npc/scripts o arquivo dialogue.lua e adicione local npc_dialogue = { [1] = { message="This is the message that shows up before the choices, make sure it's long enough if you are having long choices.", choices= { [1]={text="Choice 1", storage=false, dialogue=1, script="end"}, [2]={text="Choice 2",storage=false, dialogue=2, script="script1"}, [3]={text="Choice 3",storage={1234,1}, dialogue=3, script="trade"}, [4]={text="Choice 4",storage=false, dialogue=3, script="quest"}, [5]={text="Choice 5",storage=false, dialogue=false, script="quest2"}}}, [2] = { message="Bla bla bla bla bla bla bla.", choices= { [1]={text="Choice 1",storage=false, dialogue=1, script="end"}, [2]={text="Choice 2",storage=false, dialogue=2, script="end"}, [3]={text="Choice 3",storage={1234,1}, dialogue=false, script="end"}, [4]={text="Choice 4",storage=false, dialogue=false, script="end"}, [5]={text="Choice 5",storage=false, dialogue=3, script="end"}}}, [3] = { message="Brought to you by Matt Shadowwing.", choices= { [1]={text="Choice 1",storage={1245,2}, dialogue=false, script="end"}, [2]={text="Choice 2",storage=false, dialogue=false, script="end"}, [3]={text="Choice 3",storage={1234,1}, dialogue=false, script="end"}, [4]={text="Choice 4",storage=false, dialogue=1, script="end"}, [5]={text="Choice 5",storage=false, dialogue=2, script="end"}}} } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local talkstate = {} local function greetCallback(cid) local player = Player(cid) local npc = Npc(getNpcCid()) npcHandler:setMessage(MESSAGE_GREET, npc_dialogue[1].message) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[1].message, defaultButtons, npc_dialogue[1].choices, true, false) talkstate[player:getId()] = 1 return true end local function creatureSayCallback(cid, type, msg) local player = Player(cid) local npc = Npc(getNpcCid()) if not npcHandler:isFocused(cid) then return false elseif talkstate[player:getId()] then for _, v in pairs(npc_dialogue[talkstate[player:getId()]].choices) do if msgcontains(msg, v.text) and (v.storage == false or player:getStorageValue(v.storage[1]) == v.storage[2]) then if v.script == "end" then talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) elseif v.script == "trade" then -- trading script here talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) elseif v.script == "quest" then -- quest script here talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) end end end end return true end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Em data/npc/lib/npcsystem/npchandler.lua altere todos os TALKTYPE_PRIVATE_PN para TALKTYPE_SAY Depois é só criar seu npc.xml referenciar o lua e seja feliz.. Qualquer problema eu terei que repassar para o criador pois não sou apto a dar suporte.. Estou somente trazendo para cá!
  15. Bem, esse é mais um sistema do RazorBlade, assim como no outro, pedi autorização para estar trazendo para cá. Esse sistema é bem complexo e enorme e, claro, pode ser alterado da maneira que lhe convir. Espero que quem usar e testar de um rep, pois traduzir, ajeitar o conteúdo, testar para ver se tem erros e reportar demora né.. estou trazendo pois sei que muitos brs não sabem o mínimo de inglês e acho que esses deveriam ao menos agradecer pelo trabalho de disponibilizar aqui.. Enfim.. novamente, Vamos começar Esse sistema é composto de 3 ferramentas distintas.: Smith(forja de items), Smelt(derretimento de items), tanning (tratar a pele) Caracteristicas Bem são mais de 2mil linhas de códigos vamos realmente começar?!?! -- ACTIONS Em actions.xml adicione isto Crie um arquivo scripts/crafting/smith.lua e adicione isso Crie um arquivo scripts/crafting/smelt.lua e adicione isso Crie um arquivo scripts/crafting/tan.lua e adicione isso -- CREATURESCRIPTS Em creaturescripts.xml adicione isso Crie um arquivo em creaturescripts/scripts/smith.lua e adicione isso Crie um arquivo em creaturescripts/scripts/smelt.lua e adicione isso Crie um arquivo em creaturescripts/scripts/tan.lua e adicione isso Em creaturescripts/scripts/login.lua adicione isso em qualquer area que seja depois da primera sessão de login e registre os eventos no final -- SESSÃO DATA Em global.lua adicione Crie o arquivo smith.lua e adicione isso Crie o arquivo smelt.lua e adicione isso Crie o arquivo tan.lua e adicione isso Crie o arquivo skills.lua e adicione isso -- SESSÃO DATA 1 Caso pretenda usar achievement para os sets é necessário adicionar mais 2 linhas ao global.lua Crie o arquivo achievements.lua e adicione isso Crie o arquivo sets.lua e adicione isso -- CONSIDERAÇÕES FINAIS O sistema foi testado em TFS 1.1 e 1.2 e esta funcionando sem problemas. Eu fiz testes usando o tfs 1.2 mas não usei o sistema de achievements, o resto todo que testei esta funcionando perfeitamente.. Por favor, antes de qualquer pergunta leia atentamente todas as informações.. Obs.: Curtiu, usou, testou.. da um rep ae.. isso mostra que valeu a pena gastar o tempo procurando algo interessante, pedindo autorização e tudo mais para trazer para cá.. além de não arrancar pedaço..
  16. O sistema é simples ao upar cada level você ganha x pontos de habilidade, onde é possível com esse pontos, comprar mana, hp, skill, etc ... /creaturescripts/scripts/skillpoints.lua /creaturescripts/scripts/login.lua player:registerEvent("SkillPointSystem") /talkactions/scripts/skillpoints.lua <event type="modalwindow" name="PointWindow" script="skillpoints.lua"/> <event type="advance" name="SkillPointSystem" script="skillpoints.lua"/> /talkactions/scripts/skillpoints.lua function onSay(player, words, param) local SKILL_POINTS = 45200 local Point = ModalWindow(1, "Skill Points", "You have skill " ..player:getStorageValue(SKILL_POINTS).. " points make your choice:\n\n Skill Required Points Increase Amount") Point:addChoice(1, "1. Health 1 2") Point:addChoice(2, "2. Mana") Point:addChoice(3, "3. Magic Level") Point:addChoice(4, "4. Sword") Point:addChoice(5, "5. Axe") Point:addChoice(6, "6. Club") Point:addChoice(7, "7. Shielding") Point:addChoice(8, "8. Distance") Point:addButton(1, 'Gain 1') Point:addButton(2, 'Gain 2') Point:addButton(3, 'Gain 5') Point:addButton(4, 'Cancel') player:registerEvent("PointWindow") Point:sendToPlayer(player) return false end /talkactions/talkactions.xml <talkaction words="!points" separator=" " script="skillpoints.lua"/> Créditos : zbisu, codinabacl, ninja, MadMook
  17. Informações Sistema disponibilizado e atualizado por hellboy. Para TFS 0.3.6, 0.4 e 1.0: Clique nesse tópico. Basicamente é a mesma função. Adicionado no sistema: lista de players ignorados. Instalando data/lib/hunger.lua -- Hunger System by Kronos -- version="1.2" -- author Hellboy aka Kronos (idea Nandonalt) -- CONFIG hungerConfig = { FIRST_LOGIN = -1, storageStage = 3636, storageOnDeathFeed = 3637, storageDmgAndCheckTicks = 3638, dmgAmount = 1, dmgAndCheckTicks = 5, newPlayerFeed = 30, ignore = { "Account Manager" }, stages = { [1] = {minFeed = 15, msg = "You will die if you don't eat something."}, [2] = {minFeed = 90, msg = "You are very hungry."}, [3] = {minFeed = 200, msg = "You are hungry."}, [4] = {minFeed = 395, msg = "You can eat something."}, [5] = {minFeed = 400, msg = "You are full."} } } -- /CONFIG function Player.hungerIgnorePlayer(self) return isInArray(hungerConfig.ignore, self:getName()) end function Player.hungerGetFeed(self) local feedCondition = self:getCondition(CONDITION_REGENERATION, CONDITIONID_DEFAULT) if feedCondition then return math.floor(feedCondition:getTicks() / 1000) end return 0 end function Player.hungerGetFeedStorage(self) return self:getStorageValue(hungerConfig.storageOnDeathFeed) end function Player.hungerSetFeedStorage(self, value) self:setStorageValue(hungerConfig.storageOnDeathFeed, value) end function Player.hungerGetStage(self) return self:getStorageValue(hungerConfig.storageStage) end function Player.hungerSetStage(self) local feed = self:hungerGetFeed() local tmpStage = 0 for stageNumber, stageInfo in ipairs(hungerConfig.stages) do tmpStage = stageNumber if stageInfo.minFeed >= feed then break end end self:setStorageValue(hungerConfig.storageStage, tmpStage) end function Player.hungerGetStageMsg(self) local stageId = self:getStorageValue(hungerConfig.storageStage) return hungerConfig.stages[stageId].msg end function Player.hungerDoDmg(self) self:addHealth(-hungerConfig.dmgAmount) return true end Adicione em data/lib/lib.lua dofile('data/lib/hunger.lua') data/creaturescripts/scripts/hunger.lua function onLogin(player) if player:hungerIgnorePlayer() then return true end local value = player:hungerGetFeedStorage() if value > 0 then player:feed(value) elseif value == hungerConfig.FIRST_LOGIN then player:feed(hungerConfig.newPlayerFeed) end player:hungerSetFeedStorage(0) player:setStorageValue(hungerConfig.storageDmgAndCheckTicks, 0) player:registerEvent("HungerDeath") player:registerEvent("Hunger") player:hungerSetStage() local msg = player:hungerGetStageMsg() player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, msg) return true end function onThink(player, interval) local counter = (player:getStorageValue(hungerConfig.storageDmgAndCheckTicks) +1) % hungerConfig.dmgAndCheckTicks if counter == 0 then -- status changed ? send msg : do nothing local stage = player:hungerGetStage() player:hungerSetStage() local newStage = player:hungerGetStage() if stage ~= newStage then local msg = player:hungerGetStageMsg() player:sendTextMessage(MESSAGE_STATUS_DEFAULT, msg) end if player:hungerGetFeed() == 0 then player:hungerDoDmg() end end player:setStorageValue(hungerConfig.storageDmgAndCheckTicks, counter) return true end function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified) local feedLvl = player:hungerGetFeed() if feedLvl < hungerConfig.newPlayerFeed then player:hungerSetFeedStorage(hungerConfig.newPlayerFeed) else player:hungerSetFeedStorage(feedLvl) end return true end Adicione em data/creaturescripts/creaturescripts.xml <event type="login" name="HungerLogin" script="hunger.lua" /> <event type="death" name="HungerDeath" script="hunger.lua" /> <event type="think" name="Hunger" script="hunger.lua" /> data/talkactions/scripts/hunger.lua function onSay(player, words, param) local msg = player:hungerGetStageMsg() player:sendTextMessage(MESSAGE_STATUS_DEFAULT, msg) return true end Adicione em data/talkactions/talkactions.xml <talkaction words="/hunger" script="hunger.lua" /> Dúvidas ou problemas, poste no tópico!
  18. Eae galera blz? hj eu tava sem nada para fazer então pensei em colocar o sistema de pokemon no tibia como ele funciona? é simples ele faz igual os sistemas de pokemons normais só que com a função de catch, go/back da pokeball,e os monstros capturados tem suas pokebolas configuradas e tem vida configuravel! agora sem mas delogas vamos ao script! Antes de tudo vá em data/lib e crie um arquivo .lua chamado de PokeLib e coloca dentro : Agora Go/back Vá em data/actions/scripts e crie um arquivo .lua chamado goback.lua e bota dentro : Agora em actions.xml coloque : 2222 e 2223 são os ids da pokebolas Para evitar Bug va em data/creaturescript/script e crie um arquivo chamado goback.lua e coloque dentro : Agora adicione outro arquivo .lua em data/creaturescript/script com o nome de playerpdeath e coloque isto dentro : Agora adicione em creaturescript.xml as seguintes tags : Agora o catch.lua vá em data/actions/script/ e crie um arquivo catch.lua e coloque dentro : O npc que heala!! vá em data/npc/script e crie um script .lua chamado de pokehealer.lua e coloque isto dentro : Agora em Data/npc crie um arquivo .xml com o nome de Poke Healer e coloque isto dentro : Pronto galera é isto!!! Não pesão suporte para min pq não sou o criador do script apenas postei e traduzi para PT Créditos : tibiaking (eu peguei de um fórum espanhol e la os creditos estavão este) Zet0N0Murmurou (Por traduzir para PT) el 2222;2223 son las id de las pokebolas
  19. Arena PvP 1x1 em data/lib/ crie arenapvp.lua : -- CONFIGURAÇÕES AQUI arena = { --INICIO DAS CONFIGS DA POSIÇÃO-- time = 10, -- Minutos se não houver vencedor ambos são kikados player1pos = {x= 652, y= 1024, z= 7}, -- Posição 1 player2pos = {x= 652, y= 1026, z= 7}, -- Posição 2 nplayer1pos = {x= 605, y= 1008, z= 7}, -- Posição para aonde o player 1 vai ser teleportado.. nplayer2pos = {x= 612, y= 1008, z= 7}, -- Posição para aonde o player 2 vai ser teleportado.. toPos = {x= 602, y=1004, z= 7}, fromPos = {x= 610, y=1013, z= 7}, exitPos = {x= 654, y=1025, z= 7}, -- FIM DAS CONFIGS DA POSIÇÃO-- -- NÃO EDITAR SE NÃO POSSUIR CONHECIMENTO -- gstorage = 14784, -- //GLOBAL STORAGE pstorage = 14785, -- //PLAYER STORAGES } function getQuantidadeCreature(toPos, fromPos) arenaPlayers = 0 for x = toPos.x, fromPos.x do for y = toPos.y, fromPos.y do player = getTopCreature({x= x, y= y, z= fromPos.z}).uid if isPlayer(player) then arenaPlayers = arenaPlayers + 1 end end end return arenaPlayers end function doRemoveCreature(toPos, fromPos, teleportTo, storage) for x = toPos.x, fromPos.x do for y = toPos.y, fromPos.y do player = getTopCreature({x= x, y= y, z= fromPos.z}).uid if isPlayer(player) then doTeleportThing(player, teleportTo) setPlayerStorageValue(player, storage, -1) end end end return true end em data/actions/scripts crie arenapvp.lua : dofile('data/lib/arenapvp.lua') function onUse(cid, item, toPosition, itemEx, fromPosition) local player1 = getTopCreature(arena.player1pos).uid local player2 = getTopCreature(arena.player2pos).uid if item.itemid == 1945 then doTransformItem(item.uid, item.itemid+1) if getGlobalStorageValue(arena.gstorage) < 1 then if isPlayer(player1) and isPlayer(player2) then doPlayerSendTextMessage(player1, MESSAGE_STATUS_WARNING, "Fight!") doPlayerSendTextMessage(player2, MESSAGE_STATUS_WARNING, "Fight!") doSendMagicEffect(getThingPos(player1), CONST_ME_POFF) doSendMagicEffect(getThingPos(player2), CONST_ME_POFF) setPlayerStorageValue(player1, arena.pstorage, 1) setPlayerStorageValue(player2, arena.pstorage, 1) doTeleportThing(player1, arena.nplayer1pos) doTeleportThing(player2, arena.nplayer2pos) setGlobalStorageValue(arena.gstorage, 1) addEvent(function () if getQuantidadeCreature(arena.toPos, arena.fromPos) > 0 then doRemoveCreature(arena.toPos, arena.fromPos, arena.exitPos, arena.pstorage) setGlobalStorageValue(arena.gstorage, -1) end end, 1000*60*arena.time) else doCreatureSay(cid, "need two players to start", TALKTYPE_ORANGE_1) end else doCreatureSay(cid, "has two players in arena", TALKTYPE_ORANGE_1) end elseif item.itemid == 1946 then doTransformItem(item.uid, item.itemid-1) end return true end actions.XML : <!-- Arena Pvp --> <action actionid="2170" event="script" value="arenapvp.lua"/> em data/creaturescripts/scripts crie arenapvp.lua : dofile('data/lib/arenapvp.lua') function onStatsChange(cid, attacker, type, combat, value) if isPlayer(cid) and getPlayerStorageValue(cid, arena.pstorage) == 1 and type == STATSCHANGE_HEALTHLOSS then if value >= getCreatureHealth(cid) then local killer = attacker doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) doCreatureAddMana(cid, getCreatureMaxMana(cid)) doCreatureAddHealth(killer, getCreatureMaxHealth(killer)) doCreatureAddMana(killer, getCreatureMaxMana(killer)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "[Arena]: you lost the duel!") doPlayerSendTextMessage(killer, MESSAGE_STATUS_WARNING, "[Arena]: you win the duel!") doTeleportThing(cid, arena.exitPos) doTeleportThing(killer, arena.exitPos) doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doSendMagicEffect(getThingPos(killer), CONST_ME_POFF) setPlayerStorageValue(cid, arena.pstorage, -1) setPlayerStorageValue(killer, arena.pstorage, -1) setGlobalStorageValue(arena.gstorage, -1) return false end end return true end function onLogin(cid) registerCreatureEvent(cid, "ArenaPVP") return true end creaturescripts.XML <!-- ARENA PVP --> <event type="statschange" name="ArenaPVP" event="script" value="arenapvp.lua"/> <event type="login" name="verf_PVP" event="script" value="arenapvp.lua"/> Testado em tfs 0.4. abrçs Agradeço ao zipter e ao whitewolf, por terem me ajudado em alguns empecilhos e créditos a imagem do zibusu(otland).
  20. Sistema de Aura [V1.0] Opa galera. Hoje eu vim postar para voces, um sistema de Aura. Tipo .. eu não tinha nada pra fazer... e então eu resolvi postar esse conteúdo para contribuir mais com o forum... porque ultimamente, eu não venho postando conteúdos para os usuários , kkkkkk Funcionamento: Bom. Existe um NPC, que vende as auras por 100k cada. Existe 8 tipos de auras diferentes. [ Death, Earth, Posion, Ice, Physical, Energy, Holy, Fire ]. Não existe maximo de aura para cada player, se o player quizer, ele pode comprar as 8. Bom .. Quando o player toma um dano do tipo, da aura que ele tem, ele tem 50% de refletir ou absorver . Exemplo : Eu compro uma aura de death. vamos dizer que um outro jogador me taca uma SD. Eu tenho 50% de chance, de refletir essa SD para o outro jogador, ou eu posso tomar o dano dela. Configuraçoes: Bom .. as configuraçoes são muito simples . Para configurar o preço da aura, é o seguinte no script do NPC. voce procura por local gold_id . para mudar o ID do gold . no caso está no crystal coin (10k) local ammount . é para mudar a quantidade, no caso está 10 . então são 10 crystal coins, ou seja, 100k. Sistema : Bom. para instalar é bem simples também. Vá em Pasta_do_Servidor / Data / Creaturescript / Scripts / Crie um arquivo chamado : AuraSystem.lua E ponha isto dentro : Link dos Códigos. Aqui Agora, continuando na mesma pasta , vá em login.lua e antes do ultimo Return True Adicione : registerCreatureEvent(cid, "AuraSystem") Agora, vá em creaturescript.xml E adicione esta tag <event type="statschange" name="AuraSystem" event="script" value="AuraSystem.lua"/> Agora. vá em Data / Npc / Scripts Crie um arquivo chamado : AuraSystem.lua E ponha isto : Link dos Códigos: Aqui Agora Na pasta dos NPCs, crie um Arquivo chamado : Aura.xml E adicione dentro Link dos Códigos: Aqui Bom galera, feito isso é so testar e curtir. Créditos Feito 100% Por Min. (OrochiElf / Tony PlySon / Tony Araújo.)
  21. Versão do Server: 8.60 O Objetivo é sincronizar as estátuas de seus respectivos elementos para criar um portal. Utilizei Actions para Girar as Estátuas e fazer a verificação das posições e Movements para fazer com que as Estátuas se posicionem de maneira aleatória, para que assim, qualquer jogador tenha uma experiência nova ao fazer a Quest. Cada estátua tem seu elemento. As estátuas da esquerda são o padrão. Você deve ajustar as estátuas da direita de acordo com o padrão estabelecido da esquerda. Uma sala é formada por dois grupos de estátuas. 6 na esquerda, 6 na direita. Cada Elemento possui duas estátuas diferentes. Uma do lado esquerdo, outra do lado direito (Notar imagem abaixo). As estátuas do lado esquerdo possui ActionID. Elas não giram. Elas que geram um padrão para posicionar as outras estátuas. O Objetivo é posicionar a estátua do lado direito do elemento fogo, por exemplo, de acordo com a posição da estátua do lado esquerdo com o mesmo elemento. Movements: Crie um arquivo .lua com nome EPQ em Movements/Script/ e coloque o código abaixo dentro dele. (Configure o local das estátuas) function onStepIn(cid, item, position, fromPosition) local pos_enter = {x = 999, y = 1009, z = 7} local statues = { -- Estátuas que ficam na posição esquerda {x = 997, y = 993, z = 7, stackpos= 1}, {x = 995, y = 994, z = 7, stackpos= 1}, {x = 994, y = 996, z = 7, stackpos= 1}, {x = 994, y = 998, z = 7, stackpos= 1}, {x = 995, y = 1000, z = 7, stackpos= 1}, {x = 997, y = 1001, z = 7, stackpos= 1}, -- Estátuas que ficam na posição direita {x = 1001, y = 993, z = 7, stackpos= 1}, {x = 1003, y = 994, z = 7, stackpos= 1}, {x = 1004, y = 996, z = 7, stackpos= 1}, {x = 1004, y = 998, z = 7, stackpos= 1}, {x = 1003, y = 1000, z = 7, stackpos= 1}, {x = 1001, y = 1001, z = 7, stackpos= 1}, } doTeleportThing(cid, pos_enter, true) for _, pos in ipairs(statues) do local lv = getThingfromPos(pos).uid doTransformItem(lv, math.random(3705, 3708)) end return TRUE end Adicione essa tag em Movements.xml <movevent type="StepIn" actionid="5485" event="script" value="EPQ.lua"/> No piso, coloque ActionID: 5485. Actions: Crie um arquivo .lua com nome EPQ em Action/Script/ e coloque o código abaixo dentro dele. function onUse(cid, item, frompos, item2, topos) if (item.actionid ~= 15784) then -- As Estatuas que tenham essa Action não podem ser movidas. if item.itemid == 3705 then doTransformItem(item.uid, 3706) elseif item.itemid == 3706 then doTransformItem(item.uid, 3707) elseif item.itemid == 3707 then doTransformItem(item.uid, 3708) elseif item.itemid == 3708 then doTransformItem(item.uid, 3705) end else doSendMagicEffect(getPlayerPosition(cid), 2) end return TRUE end Em Action.xml adicione essa tag. <action itemid="3705-3708" event="script" value="EPQ.lua"/> Nas estátuas da esquerda, coloque nelas ActionID: 15784 Crie um arquivo .lua com nome EPQUm em Action/Script/ e coloque o código abaixo dentro dele. (Configurações estão no início do Script) -- Config. local config = { toPos = {x = 998, y = 985, z = 7}, -- Posição da Sala da recompensa. Pos = {x = 999, y = 994, z = 7}, -- Posição onde será criado o Teleport. tp = {x = 999, y = 994, z = 7}, -- Posição que o Teleport apareceu, para que ele seja removido. tempo = 5, -- Tempo que o Teleport ficará disponível, em segundos } local posA = { -- Estátuas que ficam na posição esquerda {x = 997, y = 993, z = 7, stackpos= 1}, -- Fogo {x = 995, y = 994, z = 7, stackpos= 1}, -- Pedra {x = 994, y = 996, z = 7, stackpos= 1}, -- Dark {x = 994, y = 998, z = 7, stackpos= 1}, -- Terra {x = 995, y = 1000, z = 7, stackpos= 1}, -- Gelo {x = 997, y = 1001, z = 7, stackpos= 1}, -- Poison -- Estátuas que ficam na posição direita {x = 1001, y = 993, z = 7, stackpos= 1}, -- Gelo {x = 1003, y = 994, z = 7, stackpos= 1}, -- Poison {x = 1004, y = 996, z = 7, stackpos= 1}, -- Pedra {x = 1004, y = 998, z = 7, stackpos= 1}, -- Fogo {x = 1003, y = 1000, z = 7, stackpos= 1}, -- Dark {x = 1001, y = 1001, z = 7, stackpos= 1}, -- Terra } -- Fim da Config. function onUse(cid, item, frompos, item2, topos) local posC = { [1] = getThingfromPos(posA[1]), [2] = getThingfromPos(posA[10]), [3] = getThingfromPos(posA[2]), [4] = getThingfromPos(posA[9]), [5] = getThingfromPos(posA[3]), [6] = getThingfromPos(posA[11]), [7] = getThingfromPos(posA[4]), [8] = getThingfromPos(posA[12]), [9] = getThingfromPos(posA[5]), [10] = getThingfromPos(posA[7]), [11] = getThingfromPos(posA[6]), [12] = getThingfromPos(posA[8]), } if getPlayerStorageValue(cid, 10000) == -1 then if posC[1].itemid == posC[2].itemid and posC[3].itemid == posC[4].itemid and posC[5].itemid == posC[6].itemid and posC[7].itemid == posC[8].itemid and posC[9].itemid == posC[10].itemid and posC[11].itemid == posC[12].itemid then doSendMagicEffect(getPlayerPosition(cid), 14) setPlayerStorageValue(cid, 10000, 1) setPlayerStorageValue(cid, 10001, 1) addEvent(CombCerta, 1000, cid) else doSendMagicEffect(getPlayerPosition(cid), 13) setPlayerStorageValue(cid, 10000, 1) addEvent(doSendMagicEffect, 500, posA[11], 17) addEvent(doSendMagicEffect, 500, posA[3], 17) addEvent(doSendMagicEffect, 1500, posA[9], 44) addEvent(doSendMagicEffect, 1500, posA[2], 44) addEvent(doSendMagicEffect, 2500, posA[8], 46) addEvent(doSendMagicEffect, 2500, posA[6], 46) addEvent(doSendMagicEffect, 3500, posA[12], 50) addEvent(doSendMagicEffect, 3500, posA[4], 50) addEvent(doSendMagicEffect, 4500, posA[7], 43) addEvent(doSendMagicEffect, 4500, posA[5], 43) addEvent(doSendMagicEffect, 5500, posA[10], 6) addEvent(doSendMagicEffect, 5500, posA[1], 6) addEvent(doSendMagicEffect, 6500, getPlayerPosition(cid), 13) addEvent(setPlayerStorageValue, 6502, cid, 10000, -1) end else doSendMagicEffect(getThingPos(cid), 2) end return TRUE end function CombCerta(cid) local posC = { [1] = getThingfromPos(posA[1]), [2] = getThingfromPos(posA[10]), [3] = getThingfromPos(posA[2]), [4] = getThingfromPos(posA[9]), [5] = getThingfromPos(posA[3]), [6] = getThingfromPos(posA[11]), [7] = getThingfromPos(posA[4]), [8] = getThingfromPos(posA[12]), [9] = getThingfromPos(posA[5]), [10] = getThingfromPos(posA[7]), [11] = getThingfromPos(posA[6]), [12] = getThingfromPos(posA[8]), } if getPlayerStorageValue(cid, 10001) == 1 then doTransformItem(posC[1].uid, 3705) doSendMagicEffect(posA[1], 14) doTransformItem(posC[10].uid, 3705) doSendMagicEffect(posA[7], 14) addEvent(CombCerta, 1000, cid) setPlayerStorageValue(cid, 10001, -1) setPlayerStorageValue(cid, 10001, 2) elseif getPlayerStorageValue(cid, 10001) == 2 then doTransformItem(posC[3].uid, 3705) doSendMagicEffect(posA[2], 14) doTransformItem(posC[12].uid, 3705) doSendMagicEffect(posA[8], 14) addEvent(CombCerta, 1000, cid) setPlayerStorageValue(cid, 10001, -2) setPlayerStorageValue(cid, 10001, 3) elseif getPlayerStorageValue(cid, 10001) == 3 then doTransformItem(posC[5].uid, 3706) doSendMagicEffect(posA[3], 14) doTransformItem(posC[4].uid, 3708) doSendMagicEffect(posA[9], 14) addEvent(CombCerta, 1000, cid) setPlayerStorageValue(cid, 10001, -3) setPlayerStorageValue(cid, 10001, 4) elseif getPlayerStorageValue(cid, 10001) == 4 then doTransformItem(posC[7].uid, 3706) doSendMagicEffect(posA[4], 14) doTransformItem(posC[2].uid, 3708) doSendMagicEffect(posA[10], 14) addEvent(CombCerta, 1000, cid) setPlayerStorageValue(cid, 10001, -4) setPlayerStorageValue(cid, 10001, 5) elseif getPlayerStorageValue(cid, 10001) == 5 then doTransformItem(posC[9].uid, 3707) doSendMagicEffect(posA[5], 14) doTransformItem(posC[6].uid, 3707) doSendMagicEffect(posA[11], 14) addEvent(CombCerta, 1000, cid) setPlayerStorageValue(cid, 10001, -5) setPlayerStorageValue(cid, 10001, 6) elseif getPlayerStorageValue(cid, 10001) == 6 then doTransformItem(posC[11].uid, 3707) doSendMagicEffect(posA[6], 14) doTransformItem(posC[8].uid, 3707) doSendMagicEffect(posA[12], 14) addEvent(CombCerta, 1000, cid) setPlayerStorageValue(cid, 10001, -6) setPlayerStorageValue(cid, 10001, 7) elseif getPlayerStorageValue(cid, 10001) == 7 then for _, pos in ipairs(posA) do doSendDistanceShoot(pos, config.Pos, 35) end doSendMagicEffect(config.Pos, 10) doCreateTeleport(1387, config.toPos, config.Pos) doCreatureSay(cid, "O teleport irá sumir em "..config.tempo.." segundos.", TALKTYPE_ORANGE_1) addEvent(removetp, config.tempo*1000, cid) end end function removetp(cid) for _, ale in ipairs(posA) do local st = getThingfromPos(ale).uid doTransformItem(st, math.random(3705, 3708)) end local t = getTileItemById(config.Pos, 1387) doRemoveItem(t.uid, 1) doSendMagicEffect(config.Pos, CONST_ME_POFF) setPlayerStorageValue(cid, 10000, -1) end Em Action.xml adicione essa tag. <action actionid="8798" event="script" value="EPQUm.lua" /> As estátuas precisam estar nesse formato circular para que o efeito das animações possam acontecer corretamente. Vídeo: https://www.youtube.com/watch?v=kBVUf_ejmLs&feature=youtu.be Download OTServ para demonstração da Quest: CLIQUE AQUI
  22. Eae Galera Tudo na Paz? [+] Hoje Vou Postar um Script de Catch Por Skill Configurado No "Sword Fighting" do Seu Old Client Intao vamos La: -Resumo: Quanto Maior o Skill "Catching" Maior a chance de Captura do Pokemon! [+] OBS: Eu nao Vou Postar o Script Completo Pois de Cada (PDA) ou (PDA - COM PokeLevel) é Diferente um do Outro, Eu So vou Ensinar a Voces a como Adicionar o Sistema em Seus Servidores! [+] Servidor Testado: - Pokemon Dash Advanced [+] Primeiro Vai em Data/Lib/catchsystem.lua e Procure por essa Funçao: [+] Na Parte aonde manda a MSG de que Voce "capturou um Pokemon" e "Capturou um Pokemon e Foi para o CP" add Isso Abaixo dessas Msg: - Resumo: doPlayerAddSkillTry(cid,2,10) --- Quando Capturar um Pokemon vai Ganhar 10% de Skill "2". - Obs: No meu Client o Skill Catching Esta no Skill "Sword Fighting" [+] Bom Logo Apos Voce vai em data/actions/catch.lua e no Começo do Script add isso: [+] Agora Procure essa Funçao: local catchinfo = {} - E Troca por Isso: -OBS: O Script é Bem Basico. Dar Para adicionar varios Coisas Como (Ganhar EXP Dependendo do Skill/Almentar Chance de Catch para Premium Account e etc...) [+] Imagens: [+] OBS: So vai ganhar Skill se Voce Capturar o Pokemon e Recomendo voces Deixar o Catch BAIXO! Por que o Script faz a Soma de Rate um Exemplo: Pokeball Rate: 50 Skill Cathing Rate (com 25 de Skill Cathing) : 100 Somar: 50+100 = 150 de Rate o Jogador vai ter [script Atualizado Dia 25/01/2015] [+] Creditos: NextBR
  23. Evento Paint Ball 1.1 <3 I ae galerinha Venho hoje trazer um Evento novo no TK (lembrando que esse evento já estava disponível em outro fórum estou somente trazendo e darei suporte com qualquer problema) Estava devendo conteúdo ao fórum então decidi voltar <3 Vamos lá!!! 1 um videozinho de como Fununça o Evento https://www.youtube.com/watch?v=9MwjN43Pyos Download Mapa LEMBRANDO Q VC PODE USAR O MAPA QUE QUISER Primeiramente não se esqueça de colocar No-Pvp e No-Logout em toda a área do Evento O Mod está aqui (PASTEBIN) Perguntas: P: Já testou o Mod? R: Sim já testei o Mod em tfs 0.3.6 (evento testado com 6 Pessoas Não sei como ele se comporta além disso, qualquer problema informar) P:Como configura o script? R:Vamos lá paintball_spawn_area = { top_left = {x = 970, y = 1040, z = 4}, bottom_right = {x = 975, y = 1046, z = 7} } essa parte do script se refere a área de respaw do player no evento... Da ponta superior esquerda a ponta inferior direita tp_to_paintball = {x = 985, y = 1,052, z = 7}, event_ending_pos = {x = 985, y = 1,052, z = 7} Nessa parte é diferente a 1 Linha é onde o tp de acesso ao Evento aparecerá e a 2 linha é onde os player vão ser teleportados quando o evento acabar (geralmente se coloca o templo, vocês quem sabem) messages = { event_started = "Paintball event has started! there's a teleport near Thais temple!", event_ended = "Paintball event has ended!" } Essa é a mensagem que o Servidor irá transmitir em Global quando o evento começa e quando ele se encerra event_config = { event_duration = 0, --minutes, 0 if it's an always-open event infinite_ammo = false, winner_gets_item = true, prize_item_id = 3051, decrease_score_on_death = true, points_per_kill = 1, ammo_per_point = 100, reset_bullets_on_death = true, min_bullets_on_spawn = 100 } Bom está parte qualquer 1 q conhece um pouco o famoso PORTUGLES consegue event _duration = o tempo do evento... se ficar 0 o evento fica open forever Infinite_ammo = munição infinita Winners_gets_item = se o Player vencedor ganha Item prize_item_id = Qual item o vencedor vai ganhar points_per_kill = quantos pontos o player ganha por kill ammo_per_point = quanto de munição ele ganha por ponto reset_bullets_on_death = resetar as balas quando morre min_bullets_on_spawn = minimos de balas quando nasce misc = { walls_id = {1115,1111,1112,5258,1385,1113}, bullets_exhaust = 500, --in ms bullet_speed = 150 }, Wall_ids = essa matriz irá conter todos os itens que podem bloquear as balas. bullets_exhaust = tempo entre cada tiro em milissegundos bullet_speed = a velocidade da bala viaja em milissegundos O Script não é de minha autoria... estou somente trazendo ao TK e dando suporte a ele... Qualquer Duvida pode falar @LOG Oque Foi Feito na 1.1? Diminui o Código, Adaptei perfeitamente para 8.6 e Troquei todos os nomes que havia de paintball no código para Kienzan (só destrocar) CRÉDITOS: Bogart (por fazer o Código) Eu (por traduzir e trazer ao TK e dar suporte)
  24. A pedido desse tópico eu fiz o sistema : http://www.tibiaking.com/forum/topic/49214-duvida-como-colocar-uma-mountaddon-especifica-a-venda/ Troque seu shopsystem.php por esse : shopsystem.php : Agr em data/creaturescripts/scripts crie addonmount.lua addonmount.lua function onLogin(cid) local player = Player(cid) local addons ={ --[storage] = {outfit_male, outfit_female}, [28416] = {143, 147}, -- barbarian [28417] = {134, 142}, -- warrior [28418] = {152, 156}, -- assassins [28419] = {465, 466}, -- Insectoid [28420] = {133, 141}, -- summoner [28421] = {472, 471}, -- Entrepreneur [28422] = {144, 148}, -- duid [28423] = {278, 279}, -- brotherhood [28424] = {577, 578}, -- Dream Warden [28425] = {610, 618}, -- Glooth Engineer [28426] = {130, 138}, -- mage [28427] = {634, 635}, -- Conjurer [28428] = {128, 136}, -- Citizen [28429] = {129, 137}, -- Hunter [28430] = {131, 139}, -- Kinghit [28431] = {132, 140}, -- Noblewoman [28432] = {145, 149}, -- Wizard [28433] = {146, 150}, -- Oriental [28434] = {151, 155}, -- Pirate [28435] = {153, 157}, -- Beggar [28436] = {154, 158}, -- Shaman [28437] = {251, 252}, -- Norsewoman [28438] = {268, 269}, -- Nightmare [28439] = {273, 270}, -- jester [28441] = {289, 288}, -- demonhunter [28442] = {325, 324}, -- yalaharian [28444] = {335, 336}, -- warnaster [28445] = {327, 366}, -- wayfarer [28446] = {430, 431}, -- afflicted [28447] = {432, 433}, -- elementalist [28448] = {463, 464}, -- deepling [28449] = {512, 513}, -- crystal warlord [28450] = {516, 514}, -- soil guardian [28451] = {541, 542}, -- demon [28452] = {574, 575}, -- cave explorer [28453] = {619, 620}, -- jersey [28454] = {637, 636}, -- beastmaster [28455] = {632, 633} -- champion } for storage, addon in pairs(addons) do if player:getStorageValue(storage) > 0 then player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:addOutfitAddon(addon[1], 3) player:addOutfitAddon(addon[2], 3) player:sendTextMessage(MESSAGE_INFO_DESCR, "Seu Addon full foi adicionado!") player:setStorageValue(storage, 0) end end local mounts ={ --[storage] = mounts, [80000] = 1, -- Widow Queen [80001] = 2, -- Racing Bird [80002] = 3, -- War Bear [80003] = 4, -- Black Sheep [80004] = 5, -- Midnight Panther [80005] = 6, -- Draptor [80006] = 7, -- Titanica [80007] = 8, -- Tin Lizzard [80008] = 9, -- Blazebringer [80009] = 10, -- Rapid Boar [80010] = 11, -- Stampor [80011] = 12, -- Undead Cavebear [80012] = 13, -- Donkey [80013] = 14, -- Tiger Slug [80014] = 15, -- Uniwheel [80015] = 16, -- Crystal Wolf [80016] = 17, -- War Horse [80017] = 18, -- Kingly Deer [80018] = 19, -- Tamed Panda [80019] = 20, -- Dromedary [80020] = 21, -- King Scorpion [80021] = 22, -- Rented Horse [80022] = 23, -- Armoured War Horse [80023] = 24, -- Shadow Draptor" [80024] = 25, -- Rented Horse [80025] = 26, -- Nethersteed [80026] = 27, -- Ladybug [80027] = 28, -- Manta [80028] = 29, -- Ironblight [80029] = 30, -- Magma Crawler [80030] = 31, -- Dragonling [80031] = 32, -- Gnarlhound [80032] = 33, -- Crimson Ray [80033] = 34, -- Steelbeak [80034] = 35, -- Water Buffalo [80035] = 36, -- Tombstinger [80036] = 37, -- Platesaurian [80037] = 38, -- Ursagrodon [80038] = 39, -- The Hellgrip [80039] = 40, -- Jade Lion [80040] = 41, -- Golden Lion [80041] = 42, -- Shock Head [80042] = 43, -- Walker [80043] = 44, -- Azudocus [80044] = 45, -- Carpacosaurus [80045] = 46, -- Death Crawler [80046] = 47, -- Flamesteed [80047] = 48, -- Jade Pincer [80048] = 49, -- Tempest [80049] = 50 -- Winter King } for storage, mount in pairs(mounts) do if player:getStorageValue(storage) > 0 then player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:addMount(mount) player:sendTextMessage(MESSAGE_INFO_DESCR, "Sua Mount foi adicionado!") player:setStorageValue(storage, 0) end end return true end Só adicionar a storage do arquivo no itemid do shop. creaturescript.xml tag <event type="login" name="ShopMountAddon" script="addonmount.lua"/> Ps : o Shop vai puxar o numero da storage pra procura pela img do addon/mount. Créditos a Taverna de Programação por ter me ajudado
  25. Bom após 1 semana tentando entrar em contato com o Colors consegui a permissão para trazer o Crafting System 1.x dele para o Tibiaking... Sem mais Demoras vamos lá Imagens do Script Vamos instalar ele então \õ/ Em actions Em CreatureScript Parte Configurave Abra data/global.lua e cole na primeira linha Bom isso é tudo desse sistema grandinho, porem muito utilizável em servidores RPG Creditos: Colors (pelo sistema) Eu (por encher o saco dele para liberar o post no TK) Lembrando que o Autor Pediu para que não fosse publicado em vários tópicos, Autorizando meu poste no TK!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ O Sistema não é meu, mais darei suporte no que eu conseguir.

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...