• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Sistema] FireStorm Event | TFS 1.2

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1default [Sistema] FireStorm Event | TFS 1.2 el Jue Oct 08, 2015 2:31 am

    [Admin] God Maya

    avatar
    Administrador
    Administrador
    Maya escribió:Hola Tibiaface hoy les traigo el evento FireStorm para tfs 1.2


    Empezamos instalando la libreria.

    creamos un archivo en data con el nombre de firestorm_event.lua junto a global.lua y compat.lua si los hay aunque solamente hay global.lua
    Código:
    -- 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

    seguimos con Creaturescripts/scripts

    Código:
    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[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.xml añaden

    Código:
    <!-- firestorm -->
     <event type="prepareDeath" name="fire_event" script="xxxx.lua"/>

    Añaden esto en su login
    Código:
    player:registerEvent("fire_event")

    Continuamos con Globalevents/scripts

    Código:
    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 añaden

    Código:
    <!-- FireStorm-->
     <globalevent name="firestorm_event" interval="72000000" script="xxxx.lua"/>

    IMPORTANTE:
    Puedes editar esta parte para ejecutarlo segun tu necesidad interval="72000000"

    Por ultimo Movements/scripts
    Código:
    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 añadimos

    Código:
    <!-- firestorm -->
     <movevent event="StepIn" actionid="5499" script="xxxx.lua"/>


     doSendDistanceShoot(fsArenaFromPosition, randfire, 4)

    Esa parte de la libreria  es porque como podran ver en el video las estatuas asimilan tirar fuego pero eso es opcional puedes cambiar las cordenadas
     
    "  doSendDistanceShoot(Desde aqui , hasta aya, 4)  "





    Especial Agradecimiento:
    @GodSuimty - ( edicion, captura del video y pruebas )
    Printer-Otland



    Ver perfil de usuario http://www.tibiaface.com

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.