Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''pivizz''.



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. Sistema de incêndio

    POR FAVOR, NÃO COMENTE FRASES COMO 'OBRIGADO', 'VALEU' OU ALGO DO TIPO. APENAS POSTE SUAS DÚVIDAS E SUAS MENSAGENS DE ERRO. OBRIGADO Sistema de Incêndio desenvolvido por Pivigu - Pivigu World OTServ, em breve! Nome: Sistema de Incêndio Versão: 8.4x Tipo do script: Creature script, Global Script, Monster Servidor Testado: The Forgotten Server 0.3 b3 Autor: Pivigu (Eu) Descrição Quando o incêndio é iniciado, monstros como Fire Devils e Fire Elementals são sumonados de tempos em tempos. Após a quarta invocação, um boss é sumonado. Esse boss é o The Incendier. Em seguida, a floresta toda começa a pegar fogo, ou seja, são criados itens como Fire Fields e paredes de fogo nas árvores. Durante o incêndio são mandadas mensagens como se fosse uma invasão. Quando o boss The Incendier é morto, há um random de 5 a 15 segundos para que todo o fogo da invasão se apague. Os monstros e os itens são configuráveis, assim como o tempo da invasão. Scripts [spoiler=incendio.lua] incendio.lua -- Incêndio script by Pivigu - Pivigu World OTServ, em breve! function onThink(interval, lastExecution) -- Configuração local fromArea = {x = 58, y = 56, z = 7} -- Área que o incêndio vai acontecer. local toArea = {x = 88, y = 82, z = 7} -- Área que o incêndio vai acontecer. local chanceRaid = 30 -- Chance do incêndio acontecer, em porcentagem. local intervaloExe = 60*24*7 -- Intervalo de execução, em minutos. No exemplo, ela só poderá ocorrer 7 dias após a última execucao. -- Monstros local bossName = "The Incendier" -- Nome do Boss a ser sumonado. local monsterMinions = {"Fire Elemental", "Fire Devil"} -- Monstros que também serão sumonados. local monsterAmount = 28 -- Quantidade de monstros a serem sumonados (Múltiplos de 4, de preferência). local florestaName = "Pens" -- Nome da floresta ou da cidade onde a floresta se localiza. -- M = Mensagem, T = Tempo em segundos local BroadCast1M = ("A temperatura está muito quente na floresta de " .. florestaName .. ".") local BroadCast1T = 1 local BroadCast2M = ("Um incêndio está começando em " .. florestaName .. "!") local BroadCast2T = 3 local BroadCast3M = ("Parece que um monstro muito quente está botando fogo em tudo o que vê!") local BroadCast3T = 6 local BroadCast4M = (bossName .. " foi visto em " .. florestaName .. ". Não se aproxime da floresta. Tudo está pegando fogo!") local BroadCast4T = 9 -- Incêndio local idArvoresG = {2700, 2708, 2701, 2702, 2707} -- ID de árvores grandes para FireWall. local idArvoresP = {2767, 2703, 2768} -- ID de árvores pequenas para FireField. (2703 considerada pequena) local FFID = {1487,1488,1489} -- ID dos Fire Fields. local FWID = {5063} -- ID dos FireWalls. local fogoNoChao = TRUE -- Adicionar fogo no chão? TRUE = Verdadeiro, FALSE = Falso local terraID = {103} -- ID dos chãos a pegar fogo for iid = 4526, 4541 do -- Adicionando as gramas ao terraID terraID[table.maxn(terraID) + 1] = iid end local chanceFogo = 65 -- Chance de pegar fogo. -- Fim de Configuracao -- Verificar Erros if math.random(1, 100) > chanceRaid then return TRUE end if os.time(t) - getGlobalStorageValue(5001) < intervaloExe*60 then -- debugPrint("doIncendio: Execução cancelada pelo intervalo de execuções.") return TRUE end if toArea.x <= fromArea.x or toArea.y <= fromArea.y or toArea.z < fromArea.z then debugPrint("doIncendio: Erro na Area.") return FALSE end if BroadCast4T <= BroadCast3T or BroadCast3T <= BroadCast2T or BroadCast2T <= BroadCast1T then debugPrint("doIncendio: Erro no tempo dos Broadcasts.") return FALSE end if chanceFogo < 1 then chanceFogo = 0 end local summonArea = 0 local allArea = {} local getChao = 0 local getItem = 0 for xx = fromArea.x, toArea.x do for yy = fromArea.y, toArea.y do for zz = fromArea.z, toArea.z do getChao = getThingFromPos({x = xx, y = yy, z = zz, stackpos = STACKPOS_GROUND}) getItem = getThingFromPos({x = xx, y = yy, z = zz, stackpos = 1}) for ch = 1, table.maxn(terraID) do if terraID[ch] == getChao.itemid and (getItem.itemid == 0 or getItem.itemid == 6216 or getItem.itemid == 6217 or getItem.itemid == 6218 or getItem.itemid == 6219) then allArea[table.maxn(allArea) + 1] = {x = xx, y = yy, z = zz} end end end end end -- Fim de verificar erros -- Adicionando eventos addEvent(BroadCast, BroadCast1T*1000, BroadCast1M, monsterAmount, monsterMinions, allArea) addEvent(BroadCast, BroadCast2T*1000, BroadCast2M, monsterAmount, monsterMinions, allArea) addEvent(BroadCast, BroadCast3T*1000, BroadCast3M, monsterAmount, monsterMinions, allArea) addEvent(BroadCastBoss, BroadCast4T*1000, BroadCast4M, monsterAmount, monsterMinions, bossName, allArea) addEvent(doIncendio, BroadCast4T*1002, fromArea, toArea, idArvoresG, idArvoresP, fogoNoChao, chanceFogo, FFID, FWID, terraID) -- Fim de Adicionando eventos debugPrint("doIncendio: Incendio iniciado.") setGlobalStorageValue(5001, lastExecution) return TRUE end function BroadCast(BroadCastM, Amount, Monsters, allArea) doBroadcastMessage(BroadCastM,22) local summonPos = {x = 0, y = 0, z = 0} local monsterName = 0 for i = 1, Amount / 4 do monsterName = Monsters[math.random(1, table.maxn(Monsters))] summonPos = allArea[math.random(1, table.maxn(allArea))] doSummonCreature(monsterName, summonPos) end return TRUE end function BroadCastBoss(BroadCastM, Amount, Monsters, BossName, allArea) doBroadcastMessage(BroadCastM,22) local summonPos = {x = 0, y = 0, z = 0} local monsterName = 0 for i = 1, Amount / 4 do monsterName = Monsters[math.random(1, table.maxn(Monsters))] summonPos = allArea[math.random(1, table.maxn(allArea))] doSummonCreature(monsterName, summonPos) end monsterName = Monsters[math.random(1, table.maxn(Monsters))] summonPos = allArea[math.random(1, table.maxn(allArea))] doSummonCreature(BossName, summonPos) return TRUE end -- Incendios function doIncendio(fromArea, toArea, agID, apID, FChao, Chance, FireFieldID, FireWallsID, chaoLib) local arvoreID = 0 local posNow = {x = 0, y = 0, z = 0} local randomFF = math.random(1, table.maxn(FireFieldID)) local chaoID = 0 for t = fromArea.z, toArea.z do -- Área for n = fromArea.y, toArea.y do for i = fromArea.x, toArea.x do posNow = {x = i, y = n, z = t} for ar = 1, table.maxn(apID) do -- Nas árvores pequenas FF arvoreID = getThingFromPos({x = i, y = n, z = t, stackpos = 1}) if arvoreID.itemid == apID[ar] then if Chance >= math.random(1,100) then randomFF = math.random(1, table.maxn(FireFieldID)) doCreateItem(FireFieldID[randomFF], 1, posNow) end end end for ar = 1, table.maxn(agID) do -- Nas árvores grandes FireWall arvoreID = getThingFromPos({x = i, y = n, z = t, stackpos = 1}) if arvoreID.itemid == agID[ar] then if Chance / 4 >= math.random(1,100) then randomFF = math.random(1, table.maxn(FireFieldID)) doCreateItem(FireFieldID[randomFF], 1, posNow) end if Chance >= math.random(1,100) then posNow = {x = i, y = n, z = t} randomFF = math.random(1, table.maxn(FireWallsID)) doCreateItem(FireWallsID[randomFF], 1, posNow) end end end if FChao == TRUE then -- FF no Chão arvoreID = getThingFromPos({x = i, y = n, z = t, stackpos = 1}) chaoID = getThingFromPos({x = i, y = n, z = t, stackpos = STACKPOS_GROUND}) if arvoreID.itemid == 0 then if Chance >= math.random(1,100) then for ch = 1, table.maxn(chaoLib) do if chaoID.itemid == chaoLib[ch] then posNow = {x = i, y = n, z = t} randomFF = math.random(1, table.maxn(FireFieldID)) doCreateItem(FireFieldID[randomFF], 1, posNow) end end end end end end -- Área end end return TRUE end [spoiler=incendioMonster.lua] incendioMonster.lua function onDeath(killer, monster, corpse, damage, totaldamage) -- Configuracao local fromArea = {x = 58, y = 56, z = 7} -- Area que o incendio aconteceu local toArea = {x = 88, y = 82, z = 7}-- Area que o incendio aconteceu local FFID = {1487,1488,1489} -- ID dos Fire Fields local FWID = {5063} -- ID dos FireWalls -- Fim de Configuracao addEvent(doRemoveIncendio, math.random(5,15)*1000, fromArea, toArea, FFID, FWID) return TRUE end function doRemoveIncendio(fromArea, toArea, FFID, FWID) local posNow = {x = 0, y = 0, z = 0, stackpos = 2} local itemRemover = 0 for t = fromArea.z, toArea.z do -- Area for n = fromArea.y, toArea.y do for i = fromArea.x, toArea.x do for it = 1, table.maxn(FFID) do for st = 1, 3 do posNow = {x = i, y = n, z = t, stackpos = st} itemRemover = getThingFromPos(posNow) if itemRemover.itemid == FFID[it] then doRemoveItem(itemRemover.uid) end end end for it = 1, table.maxn(FWID) do for st = 1, 3 do posNow = {x = i, y = n, z = t, stackpos = st} itemRemover = getThingFromPos(posNow) if itemRemover.itemid == FWID[it] then doRemoveItem(itemRemover.uid) end end end end end end return TRUE end [spoiler=The Incendier.xml] The Incendier.xml <?xml version="1.0" encoding="UTF-8"?> <monster name="The Incendier" nameDescription="the Incendier" race="fire" experience="2900" speed="300" manacost="0" script="incendio.lua"> <health now="2560" max="2560"/> <look type="243" corpse="6324"/> <targetchange interval="5000" chance="8"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="4"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" min="-30" max="-100"/> <attack name="firefield" interval="3000" chance="80" range="7" radius="4" target="0"> <attribute key="shootEffect" value="fire"/> </attack> <attack name="fire" interval="1000" chance="65" range="7" radius="4" target="1" min="-80" max="-885"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="firearea"/> </attack> </attacks> <defenses armor="35" defense="40"> </defenses> <elements> <element firePercent="100"/> <element energyPercent="40"/> <element physicalPercent="24"/> <element deathPercent="22"/> <element icePercent="-20"/> </elements> <immunities> <immunity paralyze="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="10"> </voices> <loot> <item id="2148" countmax="100" chance1="100000" chancemax="0"/> --Gold Coin <item id="2147" countmax="4" chance1="8888" chancemax="0"/> --Small Ruby <item id="7894" chance="8000"/> --magma legs <item id="7899" chance="5000"/> --magma coat <item id="5944" chance="4222"/> --Soul Orb <item id="2239" chance="20000"/> --Burnt Scroll <item id="2136" chance="7666"/> --Demonbone Amulet <item id="2187" chance="40111"/> -- wand of Inferno <item id="2187" chance="20111"/> -- wand of Inferno <item id="1987" chance="100000"> --Bag <inside> <item id="2432" chance="9800"/> --Fire Axe <item id="2145" countmax="8" chance1="15000" chancemax="0"/> --Small Diamond <item id="2392" chance="13550"/> --Fire Sword </inside> </item> </loot> <script> <event name="incendio"/> </script> </monster> Instalando [spoiler=Instalando scripts] Configurando [spoiler=Configurando] Downloads Mapa usado para Teste Scripts Vídeo Este script foi o ganhador do Script tournament #4. Sim, havia apenas um script concorrendo, o meu. Direitos Todo o conteúdo foi desenvolvido por Pivigu (neste fórum com o nick de Pivizz) e deverá, sempre, continuar com seus respectivos créditos. Você pode editar o script do modo que desejar, desde que não remova os créditos. Gostaria que este script não fosse publicado em outro fórum. Desejo que seje exclusivo do OTNET. Obrigado Bugs Este sistema foi testado no servidor The Forgotten Server 0.3 b3 e não apresentou nenhuma mensagem de erro. Caso você receba alguma, poste neste tópico que usarei todo o meu conhecimento para lhe ajudar. Não há nenhum bug conhecido até agora. Prêmios
×