LorD Sybian 1 Postado Maio 20, 2009 Share Postado Maio 20, 2009 Sistema de Incêndio desenvolvido por esK~ 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: esK~ (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. incendio.lua: 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 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 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: Cole os arquivos em suas respectivas pastas:incendioMonster.lua: data\creaturescripts\scripts incendio.lua: data\globalevents\scripts The Incendier.xml: data\monster\Custom Adicione em creaturescripts.xml <event type="death" name="incendio" script="incendioMonster.lua"/> Adicione em globalevents.xml <globalevent name="incendio" interval="1500" script="incendio.lua"/> Adicione em monsters.xml <monster name="The Incendier" file="custom/The Incendier.xml"/> Configurando: Toda a configuração do incêndio está nos dois scripts .lua. Você pode modificar todas as variáveis que estão entre os comentários '-- Configuração' e '-- Fim de Configuração' O intervalo de tentativas para que aconteça o incêndio está no globalevents.xml. Lembrando que o interval="1500" é contado em segundos, ou seja, 1500 segundos são 25 minutos. Vlwos galeraCréditos 100% esK~ por ter criado este sistema !!! Link para o comentário https://xtibia.com/forum/topic/113393-ripping-sistema-de-inc%C3%AAndio-v10/ Compartilhar em outros sites More sharing options...
Schiavinato 7 Postado Maio 20, 2009 Share Postado Maio 20, 2009 Belo script e boa ideia Depois eu testo para ver To resolvendo umas treta aki xD Link para o comentário https://xtibia.com/forum/topic/113393-ripping-sistema-de-inc%C3%AAndio-v10/#findComment-741138 Compartilhar em outros sites More sharing options...
toty1234 0 Postado Maio 20, 2009 Share Postado Maio 20, 2009 parece ser mt bom mais estou arrumando meu OT akie depois testo parabens pelo grande trabalho! Link para o comentário https://xtibia.com/forum/topic/113393-ripping-sistema-de-inc%C3%AAndio-v10/#findComment-741219 Compartilhar em outros sites More sharing options...
4291226 0 Postado Maio 21, 2009 Share Postado Maio 21, 2009 Você vem desempenhando um grande trabalho dentro do XTIBIA. So acho que pecou na formatação de seu texto. Abraços, Lord Lolzao Link para o comentário https://xtibia.com/forum/topic/113393-ripping-sistema-de-inc%C3%AAndio-v10/#findComment-741628 Compartilhar em outros sites More sharing options...
-Fark- 4 Postado Maio 21, 2009 Share Postado Maio 21, 2009 perfeito man... btfe que daqui alguns dias, vc entrará na equipe do xtibia ;D Link para o comentário https://xtibia.com/forum/topic/113393-ripping-sistema-de-inc%C3%AAndio-v10/#findComment-741632 Compartilhar em outros sites More sharing options...
DaNDaNrOxX 15 Postado Maio 21, 2009 Share Postado Maio 21, 2009 Que pena que não é ele quem faz os scripts, ele está roubando créditos de uma outra comunidade de otserv. Usuário suspenso para sempre. :button_cancel: Tópico Fechado Link para o comentário https://xtibia.com/forum/topic/113393-ripping-sistema-de-inc%C3%AAndio-v10/#findComment-741642 Compartilhar em outros sites More sharing options...
Posts Recomendados