Ir para conteúdo

[TFS 1.0] Battlefield Event - NEW 100%


mkbrabsolute

Posts Recomendados

tuImqgZ.jpg

O Evento Battlefield há para TFS 1.1, 1.2. Portanto, este é o ÚNICO E EXCLUSIVO evento para o TFS 1.0 que a maioria usa.

O Que há nele?
Neste tópico encontraremos os scripts do evento, mapa e arquivo da source.

Há necessidade de alterar o arquivo game.cpp da source e recompilar o TFS para que o evento funcione perfeitamente.

Vamos ao que interessa!

 

Em data/creaturescripts/scripts crie um arquivo com o nome de BATTLEFIELD_creaturescript.lua com o conteúdo:

dofile('data/lib/BATTLEFIELD_lib.lua')

local function getWinnersBattle(storage)
    for _, online in ipairs(Game.getPlayers()) do
        if online:isPlayer() then
            if online:getStorageValue(storage) > 0 then
                online:teleportTo(online:getTown():getTemplePosition())
                online:sendTextMessage(MESSAGE_INFO_DESCR, msg)
                online:setStorageValue(storage, 0)
                online:addItem(bf.rewardWin[1], bf.rewardWin[2])
                online:unregisterEvent("BattleTeamLife")
                online:unregisterEvent("BattleTeamMana")
                online:unregisterEvent("BattleDeath")
                online:addHealth(online:getMaxHealth())
                online:addMana(online:getMaxMana())
                online:removeCondition(CONDITION_OUTFIT)
                if online:isPzLocked() then
                    online:remove()
                end
            end
        end
    end
    
    if storage == bf.teamOne.storage then
        broadcastMessage("The BattleEvent is finish, team ".. bf.teamOne.name .." win.", MESSAGE_STATUS_WARNING)
    elseif storage == bf.teamTwo.storage then
        broadcastMessage("The BattleEvent is finish, team ".. bf.teamTwo.name .." win.", MESSAGE_STATUS_WARNING)
    end
    
    checkGate()
    
    print("> BattleField Event was finished.")
end

function onLogin(cid)
    local player = Player(cid)
    
    if player:getStorageValue(bf.teamOne.storage) > 0 or player:getStorageValue(bf.teamTwo.storage) > 0 then
        player:setStorageValue(bf.teamOne.storage, 0)
        player:setStorageValue(bf.teamTwo.storage, 0)
        player:removeCondition(CONDITION_OUTFIT)
        player:teleportTo(player:getTown():getTemplePosition())
        player:unregisterEvent("BattleTeamLife")
        player:unregisterEvent("BattleTeamMana")
        player:unregisterEvent("BattleDeath")
    end

    return true
end

function onLogout(cid)
    local player = Player(cid)
    
    if player:getStorageValue(bf.teamOne.storage) > 0 or player:getStorageValue(bf.teamTwo.storage) > 0 then
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You can not logout now.")
        return false
    end

    return true
end

function onChangeHealth(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType)
    local player = Player(creature)
    local enemy = Player(attacker)
    
    if enemy then    
        if (player:getStorageValue(bf.teamOne.storage) > 0 and enemy:getStorageValue(bf.teamOne.storage) > 0)
        or (player:getStorageValue(bf.teamTwo.storage) > 0 and enemy:getStorageValue(bf.teamTwo.storage) > 0)
        or (enemy:isMonster())
        and (primaryDamage > 0) then
            return false
        end
    end
    
    return primaryDamage, primaryType, secondaryDamage, secondaryType
end

function onChangeMana(cid, attacker, manaChange)
    local player = Player(cid)
    local enemy = Player(attacker)
    
    if enemy then
        player:sendTextMessage(MESSAGE_INFO_DESCR, enemy)
        if (player:getStorageValue(bf.teamOne.storage) > 0 and enemy:getStorageValue(bf.teamOne.storage) > 0)
        or (player:getStorageValue(bf.teamTwo.storage) > 0 and enemy:getStorageValue(bf.teamTwo.storage) > 0)
        or (enemy:isMonster()) then
            return false
        end
    end

    return manaChange
end

function onPrepareDeath(cid, killer)
    local creature = Player(cid)

    if creature:getStorageValue(bf.teamOne.storage) > 0 then
        creature:removeCondition(CONDITION_OUTFIT)
        creature:sendTextMessage(MESSAGE_INFO_DESCR, "You are dead!")
        creature:teleportTo(creature:getTown():getTemplePosition())
        creature:addHealth(creature:getMaxHealth())
        creature:addMana(creature:getMaxMana())
        creature:unregisterEvent("BattleTeamLife")
        creature:unregisterEvent("BattleTeamMana")
        creature:unregisterEvent("BattleDeath")
        
        Game.setStorageValue(bf.teamOne.storage, Game.getStorageValue(bf.teamOne.storage) - 1)
        creature:setStorageValue(bf.teamOne.storage, 0)
    
    elseif creature:getStorageValue(bf.teamTwo.storage) > 0 then

        creature:removeCondition(CONDITION_OUTFIT)
        creature:sendTextMessage(MESSAGE_INFO_DESCR, "You are dead!")
        creature:teleportTo(creature:getTown():getTemplePosition())
        creature:addHealth(creature:getMaxHealth())
        creature:addMana(creature:getMaxMana())
        creature:unregisterEvent("BattleTeamLife")
        creature:unregisterEvent("BattleTeamMana")
        creature:unregisterEvent("BattleDeath")

        Game.setStorageValue(bf.teamTwo.storage, Game.getStorageValue(bf.teamTwo.storage) - 1)
        creature:setStorageValue(bf.teamTwo.storage, 0)
    end
    
    if Game.getStorageValue(bf.teamOne.storage) == 0 then
        getWinnersBattle(bf.teamTwo.storage)
    elseif Game.getStorageValue(bf.teamTwo.storage) == 0 then
        getWinnersBattle(bf.teamOne.storage)
    end
    
    if Game.getStorageValue(bf.teamOne.storage) > 0 and Game.getStorageValue(bf.teamTwo.storage) > 0 then
        doMsgBattlefield("[BattleField] "..bf.teamOne.name.." "..Game.getStorageValue(bf.teamOne.storage).." VS "..Game.getStorageValue(bf.teamTwo.storage).." " ..bf.teamTwo.name)
    end
    
    if creature:isPzLocked() then
        creature:remove()
    end

    return false
end

Em data/creaturescripts/creaturescripts.xml adicione as seguintes linhas:

<event type="login" name="BattleLogin" script="BATTLEFIELD_creaturescript.lua"/>
<event type="logout" name="BattleLogout" script="BATTLEFIELD_creaturescript.lua"/>
<event type="preparedeath" name="BattleDeath" script="BATTLEFIELD_creaturescript.lua"/>
<event type="changehealth" name="BattleTeamLife" script="BATTLEFIELD_creaturescript.lua"/>
<event type="changemana" name="BattleTeamMana" script="BATTLEFIELD_creaturescript.lua"/>

Em data/globalevents/script, crie um arquivo com o nome de BATTLEFIELD_globalevents.lua e adicione o conteúdo:

dofile('data/lib/BATTLEFIELD_lib.lua')

local function teleportCheck()
    local tile = Tile(bf.teleportPosition)
    if tile then
        local item = tile:getItemById(1387)
        if item then
            item:remove()
            broadcastMessage("The BattleField Event was start in ".. bf.timeOpenGate .." minutes.", MESSAGE_STATUS_WARNING)

            local team1 = Game.getStorageValue(bf.teamOne.storage)
            local team2 = Game.getStorageValue(bf.teamTwo.storage)
            
            if (team1 + team2) % 2 ~= 0 then
                local playerLeave = Player(Game.getStorageValue(bf.namePlayer))
                playerLeave:teleportTo(playerLeave:getTown():getTemplePosition())
                playerLeave:removeCondition(CONDITION_OUTFIT)
                playerLeave:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are dead!")
                playerLeave:addHealth(playerLeave:getMaxHealth())
                playerLeave:addMana(playerLeave:getMaxMana())
                playerLeave:unregisterEvent("BattleTeamLife")
                playerLeave:unregisterEvent("BattleTeamMana")
                playerLeave:unregisterEvent("BattleDeath")
                
                Game.setStorageValue(bf.teamTwo.storage, Game.getStorageValue(bf.teamTwo.storage) - 1)
                playerLeave:setStorageValue(bf.teamTwo.storage, 0)
            end

            addEvent(checkGate, bf.timeOpenGate * 60 * 1000)
        else            
            broadcastMessage("The BattleField Event was opened and will close in ".. bf.timeCloseTeleport .." minutes.", MESSAGE_STATUS_WARNING)

            Game.setStorageValue(bf.teamOne.storage, 0)
            Game.setStorageValue(bf.teamTwo.storage, 0)
            Game.setStorageValue(bf.namePlayer, 0)
            
            print("> BattleField Event was opened.")
            
            local teleport = Game.createItem(1387, 1, bf.teleportPosition)
            if teleport then
                teleport:setActionId(47000)
            end
        end
    end
end

function onTime(interval)

    teleportCheck()
    addEvent(teleportCheck, bf.timeCloseTeleport * 60 * 1000)
    
    return true
end

Em data/globalevents/globalevents.xml adicione:

<globalevent name="BattleField" time="20:55:00" script="BATTLEFIELD_globalevents.lua" />

Em data/libs crie um arquivo com o nome de BATTLEFIELD_lib com o conteúdo:

-

-[[ LIB BATTLEFIELD TFS 1.0

Arquivos além desta lib:
- BATTLEFIELD_globalevents.lua
- BATTLEFIELD_movements.lua
- BATTLEFIELD_creaturescript.lua
- spell invisible.lua

-- alterar UTANA VID e STEALTH RING
]]--

bf = {
    rewardWin = {2160, 10},
    teamOne = {name = "Black Assassins", storage = 140120, pos = {x=1006,y=994,z=6}},
    teamTwo = {name = "Red Barbarians", storage = 140121, pos = {x=1032,y=994,z=6}},
    timeCloseTeleport = 1,
    timeOpenGate = 1,
    teleportPosition = {x=1019, y=1016, z=7},
    namePlayer = 18400,
    levelToEvent = 7,
    itemGate = 3517
}

function checkGate()
    local wall =
    {
        {x=1019, y=994, z=6},
        {x=1019, y=994, z=6},
        {x=1019, y=994, z=6},
        {x=1019, y=994, z=6},
        {x=1019, y=994, z=6},
        {x=1019, y=994, z=6},
        {x=1019, y=994, z=6},
    }

    broadcastMessage("The BattleEvent Event will begin now!", MESSAGE_STATUS_WARNING)

    doMsgBattlefield("[BattleField] "..bf.teamOne.name.." "..Game.getStorageValue(bf.teamOne.storage).." VS "..Game.getStorageValue(bf.teamTwo.storage).." " ..bf.teamTwo.name)

    print("> BattleField Event will begin now.")
    
    for i = 1, #wall do
        local tile = Tile(wall[i])
        if tile then
            local item = tile:getItemById(bf.itemGate)
            if item then
                item:remove()
            else
                Game.createItem(bf.itemGate, 1, wall[i])
            end
        end
    end
end

function doMsgBattlefield(msg)    
    for _, online in ipairs(Game.getPlayers()) do
        if online:isPlayer() then
            if online:getStorageValue(bf.teamOne.storage) > 0 or online:getStorageValue(bf.teamTwo.storage) > 0 then
                online:sendTextMessage(MESSAGE_INFO_DESCR, msg)
            end
        end
    end
end

Em data/movements/scripts crie um arquivo com o nome de BATTLEFIELD_movements com o conteúdo:

dofile('data/lib/BATTLEFIELD_lib.lua')

local conditionBlack = Condition(CONDITION_OUTFIT)
conditionBlack:setTicks(120 * 60 * 1000)
conditionBlack:addOutfit({lookType = 134, lookHead = 114, lookBody = 114, lookLegs = 114, lookFeet = 114})

local conditionRed = Condition(CONDITION_OUTFIT)
conditionRed:setTicks(120 * 60 * 1000)
conditionRed:addOutfit({lookType = 143, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94})

function onStepIn(cid, item, position, fromPosition)
    
    local player = Player(cid)

    if player:getLevel() < bf.levelToEvent then
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You need level " .. bf.levelToEvent .. " to enter in event.")
        player:teleportTo(fromPosition)
        return false
    end
    
    if player:getItemCount(2165) >= 1 then
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You can not enter stealth ring in the event.")
        player:teleportTo(fromPosition)
        return false
    end

    if Game.getStorageValue(bf.teamOne.storage) < Game.getStorageValue(bf.teamTwo.storage) then
        
        Game.setStorageValue(bf.teamOne.storage, Game.getStorageValue(bf.teamOne.storage) + 1)
        player:addCondition(conditionBlack)
        player:setStorageValue(bf.teamOne.storage, 1)
        player:setStorageValue(bf.teamTwo.storage, 0)
        player:teleportTo(bf.teamOne.pos)
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You will join the team " .. bf.teamOne.name .. ".")
        
    else
        Game.setStorageValue(bf.teamTwo.storage, Game.getStorageValue(bf.teamTwo.storage) + 1)
        player:addCondition(conditionRed)
        player:setStorageValue(bf.teamTwo.storage, 1)
        player:setStorageValue(bf.teamOne.storage, 0)
        player:teleportTo(bf.teamTwo.pos)
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You will join the team " .. bf.teamTwo.name .. ".")
        
        Game.setStorageValue(bf.namePlayer, cid)

    end

    player:addHealth(player:getMaxHealth())
    player:addMana(player:getMaxMana())

    player:registerEvent("BattleTeamLife")
    player:registerEvent("BattleTeamMana")
    player:registerEvent("BattleDeath")

    return true
end

Em data/movements/movements.xml adicione:

<movevent event="StepIn" actionid="47000" script="BATTLEFIELD_movements.lua"/>

Em data/spells/scripts/support abra o arquivo invisible.lua, apague tudo e coloque:

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)

local condition = createConditionObject(CONDITION_INVISIBLE)
setConditionParam(condition, CONDITION_PARAM_TICKS, 200000)
setCombatCondition(combat, condition)

dofile('data/lib/BATTLEFIELD_lib.lua')

function onCastSpell(cid, var)
    local player = Player(cid)
    
    if player:getStorageValue(bf.teamOne.storage) > 0 or player:getStorageValue(bf.teamTwo.storage) > 0 then
        return false
    else
        return doCombat(cid, combat, var)
    end
end

Conforme avisado, no TFS 1.0 há necessidade de alterar alguns códigos nas fontes, portanto estou disponibilizando o arquivo game.cpp, basta substituir em sua basta e recompila-lo.

Download game.cpp: https://www.sendspace.com/file/vqs5u4

Download Map tradicional: https://www.sendspace.com/file/f5tjhg

 


Imagem do mapa:


9BwEMzO.jpg




Para configurar, basta ver os arquivos e configurar horário, dias e posições do mapa!


SCRIPT 100% TESTADO, O MESMO É VENDIDO PELO MODERADOR DO OUTRO FÓRUM! PORTANTO SEM ESSA, MODIFICAMOS E, IT'S FREEEEEEEE!

 

Créditos:

Absolute
Vodkart

Luan Luciano
Markin



Bom Proveito a todos, até o próximo!

FAVOR MOVER O TÓPICO PRA SEÇÃO SCRIPTING > SISTEMAS E MODS, QUE TÁ FOD* CRIAR LÁ....

Link para o comentário
Compartilhar em outros sites

Parabéns pela iniciativa .. acabar com issod e vendas de sistemas/scripts/ots

 

Sabe onde posso conseguir para 1.2?

 

tenta esse

 

http://www.xtibia.com/forum/topic/235694-battlefield-tfs-11/

@TÓPIC

 

parabéns pelo conteúdo! vejo ue conseguiu fazer, obrigado por contribuir

Link para o comentário
Compartilhar em outros sites

 

@TÓPIC

 

parabéns pelo conteúdo! vejo ue conseguiu fazer, obrigado por contribuir

os creditos que ele colocou o nome dele são por postar, kkk, até parece que ele consegue fazer algo que não seja roubar.

Editado por luanluciano93
Link para o comentário
Compartilhar em outros sites

os creditos que ele colocou o nome dele são por postar, kkk, até parece que ele consegue fazer algo que não seja roubar.

 

Eu acho que ao invés de mimim quem fala deveria fazer melhor :).. Se foi ou não foi pelo menos fez #Recalque

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
  • 6 months later...
×
×
  • Criar Novo...