Ir para conteúdo
  • Cadastre-se

Sitema%252FMod Fire Storm Event "Tempestade de fogo" Automatico


Posts Recomendados

Bom galera a um tempo eu procuro esse evento os que eu encontrei aki não funcionou no meu ot e depois de muito procurar acabei encontrando em um outro fórum estrangeiro e resolvi trazer esse conteúdo pro tibiaking . Eu testei esse evento no tfs 0.4 rev 3777 criado por Luanluciano93 . chega de bla bla bla e vamos ao que interessa :

 

Como funciona o evento ?

 

O evento funciona da seguinte forma , assim que começar o evento os players devem digitar o comando " !fire join "

logo apos ele é teleportado para dentro do evento onde deve aguardar o inicio da tempestade , em seguida desviar se o mais rápido da chuva de fogos se ele for atingido ele será teleportado para o templo e o ultimo player que ficar no evento se torna o vencedor .

 

Na pasta do seu servidor tem uma pasta mods , abra essa pasta , copie e cole um arquivo com o nome w-fire.xml depois cole esse script dentro desse arquivo que tu criou .

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Fire Storm Event" enabled="yes">
<config name="fireStorm_conf"><![CDATA[
fireStormRewards = {
random = false,
rew = {2160,30,2494,1,2495,1 }
}
fireStormShootInterval = 8 --in seconds
fireStormNewFireShoots = 15
fireStormBaseFireShoots = 40
fireStormMaxPlayers = 2
fireStormMinPlayers = 1
fireStormAccesToIgnore = 5
timeOnJoinToEvent = 10 --in minutes
 
fireStormJoinType = 'booth' --movement, talkaction or booth
enableMessage = true
 
-- POSITIONS
fireStormKickPosition = {x=160,y=51,z=7}
fireStormEnterPosition = {x=781,y=955,z=7}
 
fireStormCenterRoomPosition = {x=767,y=959,z=7}
fireStormRangeX_RangeY = {51,50}
-- STORAGES
fireStormStorageStatus = 31000 -- =< 0 - off, 1 - waiting for players, 2 - is running
 
local _f = doTeleportThing
function doTeleportThing(cid, newpos, ignoreBlocking)
return (ignoreBlocking or isWalkable(newpos, true, true, false) or false) and _f(cid, newpos, true, true)
end
 
function kickPlayerFromFireStormArea(cid)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
doTeleportThing(cid, fireStormKickPosition, true)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
return doCreatureSetStorage(cid, fireStormStorageStatus, 0) and doCreatureSetNoMove(cid, false)
end
 
function getFireStormEventPlayers()
local players = {}
for _, cid in pairs(getPlayersOnline()) do
if getCreatureStorage(cid, fireStormStorageStatus) == 1 then
table.insert(players, cid)
end
end
return players
end
 
function isWalkable(pos, creature, proj, pz)
if getTileThingByPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).itemid == 0 then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false, true end
local n = not proj and 3 or 2
for i = 0, 255 do
pos.stackpos = i
local tile = getTileThingByPos(pos)
if tile.itemid ~= 0 and not isCreature(tile.uid) then
if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
return false
end
end
end
return true
end
 
function loseOnFireStorm(cid)
    local players, msg = getFireStormEventPlayers(), ''
    kickPlayerFromFireStormArea(cid)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You are dead.')
    if(#getFireStormEventPlayers() <= 1) then
        local winner = getFireStormEventPlayers()[1] or players[1]
        if winner then
            if fireStormRewards.random then
local i = math.random(#fireStormRewards.rew/2)
doPlayerAddItem(winner, fireStormRewards.rew[i*2-1], fireStormRewards.rew[i*2], true)
else
for i = 1, #fireStormRewards.rew/2 do
doPlayerAddItem(winner, fireStormRewards.rew[i*2-1], fireStormRewards.rew[i*2], true)
end
end
doPlayerSendTextMessage(winner, MESSAGE_INFO_DESCR, 'You won Fire Storm Event.')
            msg = getCreatureName(winner) .. ' won Fire Storm Event.'
            kickPlayerFromFireStormArea(winner)
if getSpectators(fireStormCenterRoomPosition, fireStormRangeX_RangeY[1], fireStormRangeX_RangeY[2]) then
for _, v in ipairs(getSpectators(fireStormCenterRoomPosition, fireStormRangeX_RangeY[1], fireStormRangeX_RangeY[2])) do
if isMonster(v) then
doRemoveThing(v)
elseif isPlayer(v) then
kickPlayerFromFireStormArea(v)
end
end
end
        else
            msg = 'Fire Storm Event finished! No one win!'
        end
doSetStorage(fireStormStorageStatus, 0)
    end
return (msg ~= '' and doBroadcastMessage(msg) or true)
end
 
function spawnNewFire(count, reserved)
for i = 1, count do
if getStorage(fireStormStorageStatus) <= 1 then
return true
end
local pos = {x = fireStormCenterRoomPosition.x + math.random(-fireStormRangeX_RangeY[1],fireStormRangeX_RangeY[1]), y = fireStormCenterRoomPosition.y + math.random(-fireStormRangeX_RangeY[2],fireStormRangeX_RangeY[2]), z = fireStormCenterRoomPosition.z}
if i == count then
return addEvent(spawnNewFire, fireStormShootInterval*1000, fireStormNewFireShoots + reserved, fireStormNewFireShoots + reserved)
end
if isWalkable(pos, false, true, true) then
addEvent(function()
if #getFireStormEventPlayers() < 1 then
return true
end
local xx = math.abs(pos.x - fireStormCenterRoomPosition.x) + fireStormRangeX_RangeY[1]
local yy = math.abs(pos.y - fireStormCenterRoomPosition.y) + fireStormRangeX_RangeY[2]
doSendDistanceShoot({x=pos.x-xx,y=pos.y-yy,z=pos.z}, pos, CONST_ANI_FIRE)
addEvent(doSendMagicEffect, math.max(xx,yy)*15, pos, CONST_ME_HITBYFIRE)
local player = getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=STACKPOS_TOP_CREATURE}).uid
if isPlayer(player) and getPlayerAccess(player) < fireStormAccesToIgnore then
addEvent(loseOnFireStorm, 500, player)
end return true end,
math.random(500, fireStormShootInterval*1000),
pos)
else
return spawnNewFire(count-(i-1), math.max(reserved, count))
end
end
return true
end
 
function addPlayerToFireStormArea(cid, block)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
doTeleportThing(cid, fireStormEnterPosition, true)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
return doCreatureSetStorage(cid, fireStormStorageStatus, 1) and doCreatureSetNoMove(cid, block)
end
 
function startFireStormEvent()
if getStorage(fireStormStorageStatus) > 0 then
return false
end
doSetStorage(fireStormStorageStatus, 1)
return enableMessage and doBroadcastMessage('Fire Storm Event is active. We are waiting for ' .. fireStormMaxPlayers - #getFireStormEventPlayers() .. ' players or, if not found, '..timeOnJoinToEvent..' minutes to start. If you want joined to event just use command "!fire join", but if you would leave fire storm arena just say "!fire leave". Have fun!') or true
end
]]></config>
 
<talkaction words='!fire' event='script'><![CDATA[
domodlib('fireStorm_conf')
function onSay(cid, words, param, channel)
if fireStormJoinType == 'movement' then
return false end
local msg = ''
if isInArray({'join','add','go','joined'}, param:lower()) then
if getCreatureCondition(cid, CONDITION_INFIGHT) and getPlayerAccess(cid) <= fireStormAccesToIgnore then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You have a PZ! You have to get rid of it. Somehow.')
end
if getPlayerAccess(cid) >= fireStormAccesToIgnore then
startFireStormEvent()
return doTeleportThing(cid, fireStormEnterPosition, true)
elseif #getFireStormEventPlayers() < fireStormMaxPlayers and getStorage(fireStormStorageStatus) == 1 then
addPlayerToFireStormArea(cid, true)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You are player of number '..#getFireStormEventPlayers()..', which join to event.')
if #getFireStormEventPlayers() == fireStormMaxPlayers then
doSetStorage(fireStormStorageStatus, 2)
addEvent(spawnNewFire, fireStormShootInterval * 1000, fireStormBaseFireShoots, fireStormBaseFireShoots)
for _, v in pairs(getFireStormEventPlayers()) do
addPlayerToFireStormArea(v, false)
end
msg = 'Fire Storm Event is started. We have ' .. fireStormMaxPlayers .. ' players, which joined to event. Have fun!'
else
msg = getCreatureName(cid) .. ' has entered a Fire Storm Arena. We still need ' .. fireStormMaxPlayers - #getFireStormEventPlayers() .. ' players.'
end
return (msg ~= '' and doBroadcastMessage(msg) or true)
else
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Arena is full.')
end
elseif isInArray({'leave','abort','delete'}, param:lower()) then
if getStorage(fireStormStorageStatus) < 2 then
doCreatureSetNoMove(cid, false)
doCreatureSetStorage(cid, fireStormStorageStatus, 0)
return doTeleportThing(cid, getCreatureLastPosition(cid), true)
end
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'You can\'t leave from arena if event is already running.')
end
return true
end
]]></talkaction>
 
<globalevent name="fireStormTime" time="23:25" event="script"><![CDATA[
domodlib("fireStorm_conf")
function onTime(time)
addEvent(function()
if getStorage(fireStormStorageStatus) == 2 then return true end
if getStorage(fireStormStorageStatus) == 1 and #getFireStormEventPlayers() >= fireStormMinPlayers then
doSetStorage(fireStormStorageStatus, 2)
addEvent(spawnNewFire, fireStormShootInterval * 1000, fireStormBaseFireShoots, fireStormBaseFireShoots)
for _, v in ipairs(getFireStormEventPlayers()) do
addPlayerToFireStormArea(v, false)
end
return enableMessage and doBroadcastMessage('Fire Storm Event is started. We have '..#getFireStormEventPlayers()..' players on area') or true
end
for _, v in ipairs(getFireStormEventPlayers()) do
kickPlayerFromFireStormArea(v)
end
return enableMessage and doBroadcastMessage('Fire Storm Event is stopped. We could not find enough players.') or true
end,
timeOnJoinToEvent * 1000 * 60)
return startFireStormEvent()
end
]]></globalevent>
</mod>

 
Agora vamos configurar o local que o player vai ser teleportado , a área que a tempestade de fogo vai cair , o local que o player atingido e o ganhador vai ser teleportado , os prêmios e o mais importante o horário que vai abrir o evento que é 100% automático  ..
 
Configurar prêmio:
 
fireStormRewards = {
random = false,                 
rew = {2160,30,2494,1,2495,1}   <<< aki esta configurado para dar 300k + demon armor + demon legs , configure a seu gosto
 
Configurar posições :
 
fireStormKickPosition = {x=160,y=51,z=7}   <<<  aki você coloca a posição do seu templo ou cidade que desejar , pois é o local onde o player será teleportado ao terminar o evento e os players que forem atingidos pela tempestade
 
fireStormCenterRoomPosition = {x=767,y=959,z=7}   <<< aki você vai colocar o local que o player será teleportado quando ele disser "!fire join"
 
fireStormRangeX_RangeY = {51,50}   <<<  aki você vai colocar a area da tempestade quanto maior for os números , maior será a área atingida .
 
<globalevent name="fireStormTime" time="23:25" event="script">   <<< aki você configura o horário que tu quiser .
 
Se quiserem usar o mesmo mapa que usei é só clicar AQUI
 
Pronto galera como eu apenas trouxe o conteúdo para o tibiaking e caso esteja contra as regras peço aos moderadores para retirar o tópico e quanto aos créditos eu realmente não sei quem criou esse sistema se alguém souber me informe que postarei os devidos créditos .
Editado por Klauguns (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Oque custa você dizer como funciona o evento? '--'

(Se você soubér né).

Acabei esquecendo essa parte e obrigado por me lembrar :D

 

Prontinho brother ..

Editado por Klauguns (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

YDmXTU2.png

 

Entenda tudo sobre VPS, DEDICADOS & HOSPEDAGENS. => Clique aqui

Global Full Download 10.9x - TFS 1.2/FERUMBRAS/KRAILOS. => Clique aqui

 

Muitos querem aquilo que você tem, 
mas vão desistir quando souberem o preço que você pagou.

 

skype-favicon.png lu.lukinha

message-16.png [email protected]

Link para o post
Compartilhar em outros sites

Eu usei o seu script e não funcionou no meu ot pois dava erros no distro . Eu apenas postei o que funcionou comigo :D . Afinal conteudo nunca é d + brother .

Link para o post
Compartilhar em outros sites

Muito bom, obrigado por compartilhar, são muitas coisinhas que mudam para o TFS 0.4, vai ajudar muita gente.

Como eu tinha dito no post , os que eu encontrei não funcionava no meu tfs e esse funcionou :D

Link para o post
Compartilhar em outros sites
  • 3 years later...
Em 11/10/2014 em 01:55, Absolute disse:

Porcaria do seu evento bugadíssimo ninguém conseguiu usar e vc n deu um pingo de atenção, n vem falar do cara aí não, pq o dele pelomenos funcionou perfeitamente no meu servidor e no de muitos aposto! para de reclamar e faz um bom trabalho!

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por xWhiteWolf
      Fala galera, hoje vim trazer o projeto pronto do Magnus Challenger pra vocês instalarem no servidor de vocês!   

      Pra quem não conhece é um sistema de Tasks baseado no Zezenia onde você pode escolher entre tasks de matar monstros ou de coletar certos items para o npc Magnus, um guerreiro famoso da cidade que está atolado de tarefas e precisa da sua ajuda!

      Peguei os aspectos que eu julguei serem os principais do modelo do Zezenia e editei com algumas coisas que eu achei que ficariam melhores.
      Quem quiser pode ver um vídeo comentado de como o sistema funciona:




      Dito isso vou ensinar vocês como instalar isso no server:
      Pra começar vá em data\creaturescripts\scripts e procure login.lua, agora vá até o final do arquivo e antes do último return true coloque essas linhas abaixo

      ainda em creaturescripts procure creaturescripts.xml e adicione essa linha junto com as outras que já estão lá (seguindo o padrão)
      <!-- TASK SYSTEM --> <event type="kill" name="tasksystem" script="tasksystem.lua"/> Agora crie um arquivo em creaturescripts\scripts com o nome de tasksystem.lua e adicione o seguinte à ele:




      Terminada a parte da contagem de kill vamos ao NPC em si.
      Crie um arquivo chamado Magnus.xml em data\npc e coloque isso dentro dele:




      Agora em data\npc\scripts crie um arquivo chamado zezeniaa.lua e adicione esse conteúdo dentro do arquivo:





      ~~~~~~~~~~~~~~~~ FEITO ISSO ESTÁ TERMINADO ~~~~~~~~~~~~~~~~~~

      Agora aprendendo a configurar:
       
      No tasksystem vc pode editar isso daqui:
      Eu fiz um sistema onde se vc estiver em party com alguém e a pessoa matar os bixos conta como se você tivesse matado; Assim incentiva o pessoal a ir numa cave de Dragon e ao invés de matar quem está lá pra ficar sozinho na cave, eles vão chamar party pra fazerem a task juntos.. assim fazer amigos fica mais fácil e com maiores laços é maior a chance do povo não abandonar o seu server.

      Apenas digite "true" ou "false" pra ativar/desativar esse sistema e em baixo temos a distancia máxima pro monstro estar do cara que está fazendo a task pra contar o kill. Se a distancia entre o monstro e a pessoa for maior que 7 não vai contar pra ele a kill.


      No zezeniaa.lua as coisas que dão pra configurar são maiores mas são igualmente simples:
      Toda vez que vc pedir uma task short (curta) vc vai ter de 100 a 400 monstros pra matar, ele gera um número de 0 a 6 e multiplica por 5 e soma com os 100 iniciais.. o mesmo vale pra todos os outros valores.

      levelcollect é o level mínimo pra fazer tasks do tipo collect.
      time é o tempo em segundos que você vai ficar sem poder falar com o npc caso desista de alguma task, o padrão é 8 * 60 * 60 (8 horas)
      bonus é por quanto vai multiplicar caso vc permita que o npc escolha aleatoriamente entre todas as opções.. o padrão é 20% de bonus (1.2)
      multiplicador é uma coisa que eu adicionei pra ficar mais fácil mexer na fórmula sem cometer cagadas, se vc tá ganhando 10% de exp e quer ganhar 80% é só colocar 8 no multiplicador.

       
      Isso daqui é o banco de dados principal do sistema de kill, toda vez que vc escolher uma task do tipo fácil, médio, dificil ele vai acessar essas tabelas contendo o nome das criaturas.. vc pode facilmente adicionar novos nomes, o npc já está programado pra lidar com isso, apenas siga o padrão e mantenha sempre o último sem vírgula!

      Ex: adicionando Morgaroth na tabela de hard
      local hard = { [1] = "Giant Spider", [2] = "Dragon Lord", [3] = "Grim Reaper", [4] = "Demon", [5] = "Crystal Spider", [6] = "Demon Skeleton", [7] = "Juggernaut", [8] = "Destroyer", [9] = "Hand of Cursed Fate", [10] = "Morgaroth" } atente-se também pra não repetir o número no index.. se o anterior era [9] use [10].

      O restante das tabelas são separadas para o banco de dados das tasks de collect:
       
      segue a mesma lógica da de kill só que aqui você tem o id dos itens que serão usados... aquela count não tem nada a ver com o item pois ele vai gerar tanto o item aleatoriamente quanto à count;
      Ex: 
      [1] = {id = 5880, count = 20}, -- iron ore isso não significa que se cair iron ore (id 5880) irá cair sempre 20.. até porque eu poderia escolher uma task long e easy e pegar a task de trazer até 50 iron ores, apenas tente manter os padrões que são os intervalos definidos.
      No easy ele varia de 10 a 20, no medium ele varia de 20 a 35 e no hard de 40 a 50.



      Espero que vocês tenham curtido, é um sistema grande mas bem simples de se mexer... se tiverem quaisquer problemas podem comentar aqui. Deu trabalho fazer isso então se você gostou deixe o seu comentário aí e o seu "Gostei" que vai me incentivar a trazer mais coisas desse tipo pra cá. Abraços do lobo.


      PS: Pra sumonar o npc digite com o GOD: /n Magnus ou coloque ele pelo map editor.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo