Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''cenário''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • Projetos Open Source
    • Canary
    • OTServBR-Global
    • Mehah OTClient
    • MyAAC
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
  • Outros
    • Design

Encontrado 1 registro

  1. Mutant Arena

    Depois de um longo tempo desde meu ultimo tópico aqui no fórum (mais ou menos 3 anos :think:) voltei para trazer um script que fiz esses dias em casa. Há muito tempo postei na área VIP do fórum (na época que ainda ela cavaleiro) um script de uma arena um pouco diferente da comum, porém perdi os scripts que estavam no meu PC inclusive esse e por isso refiz ele do zero para ver se ainda lembrava algo de LUA A ideia do script é simples. Porque as Arenas tem que se restringir apenas à um quadrado onde você luta com o monstro? Que tal se você fosse levado para lutar com a criatura em seu próprio habitat? É Exatamente isso que o script faz. Para cada monstro da arena você pode definir um habitat para, o player e o monstro, lutarem :pega-el: Vamos começar ~~ Criando a Arena e os Cenários ~~ A primeira coisa que devemos fazer é montar a arena seguindo o seguinte modelo Ela deve ter um piso do lado de fora (para entrar na arena), um piso do lado de dentro (para que o player possa desistir, ou caso ja tenha matado o monstro, ir para o próximo round) e um local com tamanho 1x1 (para ficar o item que marcará o tempo - podendo ser qualquer um, nas imagens acima usei um fire field amarelo). Lembrando que a área principal da arena deve ficar vazia (pois é nela que aparecerá o cenário), qualquer coisa dentro da área principal será deletado. Os pisos devem ter um determinado ActionId (No piso para entrar eu usei 12000 e o para desistir/avançar round eu coloquei 12001). Agora vamos montar os habitats ou cenários. Um cenário não é nada mais que uma área do seu mapa (de preferencia em um lugar longe dos olhos dos players) do tamanho da área principal da arena. Esse pedaço do mapa será copiado para dentro da arena!! Você pode montar quantos cenários você quiser, desde florestas até construções (nessa versão do script ele copia apenas o que estiver no z=7) Feito isso é hora de instalar o script no server ~~ Instalando o script ~~ Instalar é bem simples!! Vá até a pasta data/movements e abra o arquivo movements.xml e coloque isso lá dentro: <movevent type="StepIn" actionid="12000" event="script" value="mutantArena.lua"/> <movevent type="StepIn" actionid="12001" event="script" value="mutantArena.lua"/> Lembrando que o ActionId 12000 é o do piso de entrada e o ActionId 12001 é o do piso de escape/avançar round Agora vá até data/movements/scripts copie qualquer arquivo de la e renomeie para mutantArena.lua. Abra o arquivo, apague tudo o que estiver dentro e coloque isso: ---------------------------------------- -- Mutant Arena (v 0.1) - BETA -- Develop By: Dark (OTBr) -- www.otserv.com.br ---------------------------------------- -- Configurações Básicas do Sistema!!! -- CONFIG = { iArena = {x=146,y=24,z=7}, fArena = {x=158,y=34,z=7}, storageLevel = 12004, storageMonster = 12005, posTeleporte = {x = 153, y=29, z=7}, posSaida = {x=160, y=31, z=7}, tempoRound = 20, posItem = {x = 152, y=23, z=7}, itemTempo = {1500,1501,1502} } -- Leveis da Arena LEVEL = { [1] = { {monstro = "dwarf guard", cenario = "cave", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "cyclops", cenario = "floresta", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "water elemental", cenario = "agua", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "orc shaman", cenario = "floresta", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "giant spider", cenario = "deserto", magic = 10, pos={x=147,y=30,z=7}}, }, } -- Cenarios CENARIO = { floresta = { i = {x=168,y=25,z=7}, f = {x=180,y=35,z=7}, m = 44 }, agua = { i = {x=168,y=38,z=7}, f = {x=180,y=48,z=7}, m = 53 }, deserto = { i = {x=183,y=38,z=7}, f = {x=195,y=48,z=7}, m = 2 }, cave = { i = {x=183,y=25,z=7}, f = {x=195,y=35,z=7}, m = 38 }, } -------------------------------------------------- eventID = nil; function onStepIn(cid, item, pos, fpos) level = getPlayerStorageValue(cid, CONFIG.storageLevel) if(level <= 0) then setPlayerStorageValue(cid, CONFIG.storageLevel, 1) level = 1 end stopEvent(eventID) if(item.actionid == 12000) then if(not havePlayer()) then if(LEVEL[level] ~= nil) then resetArena() setPlayerStorageValue(cid, CONFIG.storageMonster, 1) round = getPlayerStorageValue(cid, CONFIG.storageMonster) doTeleportThing(cid, CONFIG.posTeleporte) iniciarPartida(level, round) else doSendMagicEffect(pos, 2) doPlayerSendTextMessage(cid, 22, "Não há mais desafios para você aqui") end else doSendMagicEffect(pos, 2) doPlayerSendTextMessage(cid, 22, "Há um jogador na arena! Aguarde a sua vez") end else if(arenaIsEmpty()) then round = getPlayerStorageValue(cid, CONFIG.storageMonster) if(round < #LEVEL[level]) then setPlayerStorageValue(cid, CONFIG.storageMonster, round+1) resetArena() doTeleportThing(cid, CONFIG.posTeleporte) iniciarPartida(level, round+1) else doTeleportThing(cid, CONFIG.posSaida) setPlayerStorageValue(cid, CONFIG.storageLevel, level+1) doPlayerSendTextMessage(cid, 22, "GANHOU") resetArena() end else doSendMagicEffect(pos, 2) doTeleportThing(cid, CONFIG.posSaida, true) doSendMagicEffect(CONFIG.posSaida, 20) doSetMonsterOutfit(cid, "chicken", 5*60*1000) resetArena() end end end function havePlayer() for w = 0, (CONFIG.fArena.x-CONFIG.iArena.x) do for z = 0, (CONFIG.fArena.y-CONFIG.iArena.y) do -- Verifica se há Player posArena = {x=CONFIG.iArena.x+w, y=CONFIG.iArena.y+z, z=7, stackpos=253} itemTemp = getThingFromPos(posArena) if(isPlayer(itemTemp.uid)) then return true end end end return false end function arenaIsEmpty() for w = 0, (CONFIG.fArena.x-CONFIG.iArena.x) do for z = 0, (CONFIG.fArena.y-CONFIG.iArena.y) do -- Verifica se há Criaturas posArena = {x=CONFIG.iArena.x+w, y=CONFIG.iArena.y+z, z=7, stackpos=253} itemTemp = getThingFromPos(posArena) if(isCreature(itemTemp.uid)) then return false end end end return true end function iniciarPartida(lvl,round) carregaCenario(LEVEL[lvl][round].cenario) doSummonCreature(LEVEL[lvl][round].monstro, LEVEL[lvl][round].pos) doSendMagicEffect(LEVEL[lvl][round].pos, LEVEL[lvl][round].magic) mudarTempo(1) end function mudarTempo(estagio) if(estagio <= #CONFIG.itemTempo) then posItem = CONFIG.posItem posItem.stackpos = 1 itemT = getThingFromPos(posItem) if(itemT.uid ~= 0) then doRemoveItem(itemT.uid) end doCreateItem(CONFIG.itemTempo[estagio], 1, posItem) newTime = (CONFIG.tempoRound*1000) / #CONFIG.itemTempo eventID = addEvent(mudarTempo, newTime, estagio+1) else resetArena() end end function carregaCenario(cenario) arrayCenario = CENARIO[cenario]; -- Copia Cenário for w = 0, (CONFIG.fArena.x-CONFIG.iArena.x) do for z = 0, (CONFIG.fArena.y-CONFIG.iArena.y) do posCenario = {x=arrayCenario.i.x+w, y=arrayCenario.i.y+z, z=7, stackpos=0} posArena = {x=CONFIG.iArena.x+w, y=CONFIG.iArena.y+z, z=7, stackpos=0} cenarioTemp = getThingFromPos(posCenario) doCreateItem(cenarioTemp.itemid, 1, posArena) for s = 3, 1, -1 do posCenario.stackpos = s cenarioTemp = getThingFromPos(posCenario) if(cenarioTemp.itemid ~= 0) then doCreateItem(cenarioTemp.itemid, 1, posArena) end end doSendMagicEffect(posArena, arrayCenario.m) end end end function resetArena() for w = 0, (CONFIG.fArena.x-CONFIG.iArena.x) do for z = 0, (CONFIG.fArena.y-CONFIG.iArena.y) do --Coloca Piso posArena = {x=CONFIG.iArena.x+w, y=CONFIG.iArena.y+z, z=7, stackpos=0} doCreateItem(413, 1, posArena) -- Remove Criaturas posArena.stackpos = 253 itemTemp = getThingFromPos(posArena) if(isCreature(itemTemp.uid) and not(isPlayer(itemTemp.uid))) then doRemoveCreature(itemTemp.uid) end if(isPlayer(itemTemp.uid)) then doTeleportThing(itemTemp.uid, CONFIG.posSaida, true) end -- Remove Itens for s = 3, 1, -1 do posArena.stackpos = s itemTemp = getThingFromPos(posArena) if(itemTemp.itemid ~= 0) then doRemoveItem(itemTemp.uid) end end end end end Pronto, salve e feche! Agora vamos aprender a configura-lo ~~ Configurando o script ~~ As primeiras coisas que temos que configurar no Script é: CONFIG = { iArena = {x=146,y=24,z=7}, fArena = {x=158,y=34,z=7}, storageLevel = 12004, storageMonster = 12005, posTeleporte = {x = 153, y=29, z=7}, posSaida = {x=160, y=31, z=7}, tempoRound = 20, posItem = {x = 152, y=23, z=7}, itemTempo = {1500,1501,1502} } iArena - Posição do primeiro SQM da área principal da Arena (canto esquerdo superior fArena - Posição do último SQM da área principal da Arena (canto direito inferior) StorageLevel - Storage value que será salvo o level da arena atual do usuário StorageMonster - Storage value que será usado para salvar o round atual do usuário (é resetado toda vez que entra na arena) posTeleporte - Posição para a qual o player será teleportado ao entrar na arena (uma posição dentro da arena) posSaida - Posição para o qual o player será teleportado ao sair ou vencer a arena tempoRound - Tempo (em segundos) que durará cada round (após o tempo o player é teleportado para fora) posItem - Posição do local onde ficará o item que representará o tempo itemTempo - Itens que representarão o tempo. Nesse exemplo está sendo usado o fire fileld amarelo (1500, 1501, 1502) Como há três itens o tempo será dividido por 3 (A cada 6 Segundos o item muda para o próximo da lista). Exemplo: Após isso vamos configurar os leveis LEVEL = { [1] = { {monstro = "dwarf guard", cenario = "cave", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "cyclops", cenario = "floresta", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "water elemental", cenario = "agua", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "orc shaman", cenario = "floresta", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "giant spider", cenario = "deserto", magic = 10, pos={x=147,y=30,z=7}}, }, } [x]={} - Cada Level é um Array contendo os monstros (na ordem que eles vão aparecer) monstro - Nome do monstro que será sumonado cenario - nome do cenário que aparecerá com o monstro (iremos configurar isso depois) magic - Efeito que aparecerá no monstro sumonado posItem - Posição da Arena em que o monstro será sumonado Como exemplo vamos criar um 2º level (o player poderá lutar nesse level se ele já passou pelo 1º). Esse level terá 3 criaturas: A primeira será um orc, depois um orc shaman e por fim um orc leader e todos usarão o mesmo habitat, floresta. [2] = { {monstro = "orc", cenario = "floresta", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "orc shaman", cenario = "floresta", magic = 3, pos={x=147,y=30,z=7}}, {monstro = "orc leader", cenario = "floresta", magic = 4, pos={x=147,y=30,z=7}}, }, E no geral ficaria assim: LEVEL = { [1] = { {monstro = "dwarf guard", cenario = "cave", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "cyclops", cenario = "floresta", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "water elemental", cenario = "agua", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "orc shaman", cenario = "floresta", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "giant spider", cenario = "deserto", magic = 10, pos={x=147,y=30,z=7}}, }, [2] = { {monstro = "orc", cenario = "floresta", magic = 2, pos={x=147,y=30,z=7}}, {monstro = "orc shaman", cenario = "floresta", magic = 3, pos={x=147,y=30,z=7}}, {monstro = "orc leader", cenario = "floresta", magic = 4, pos={x=147,y=30,z=7}}, }, } E por fim vamos configurar os cenários CENARIO = { floresta = { i = {x=168,y=25,z=7}, f = {x=180,y=35,z=7}, m = 44 }, agua = { i = {x=168,y=38,z=7}, f = {x=180,y=48,z=7}, m = 53 }, deserto = { i = {x=183,y=38,z=7}, f = {x=195,y=48,z=7}, m = 2 }, cave = { i = {x=183,y=25,z=7}, f = {x=195,y=35,z=7}, m = 38 }, } NOME DO CENARIO={} - Cada cenário é um array, sendo o nome dele o index. Esse nome é que será usado nos monstros para definir qual cenário usar i - Posição do primeiro SQM do cenário (primeiro sqm do lado superior esquerdo). Caso de dúvida veja na Planta do Cenário o SQM marcado como Inicio f - Posição do último SQM do cenário (último sqm do lado inferior direito). Caso de dúvida veja na Planta do Cenário o SQM marcado como Fim Pronto. A Arena já está pronta para ser usada ~~ Considerações finais ~~ Eu sei que o script é simples mas deem um desconto porque não mexo com LUA já faz uns 3 anos ;p. O script se encontra em Beta por isso é muito provável que haja bugs. Estou pensando em futuras versões (não sei se é um futuro próximo ou longínquo) colocar novas funcionalidades, então se você tiver alguma sugestão por favor poste Esse script NÃO pode ser postado em outros forums (Apesar de saber que ele será)
×