Jump to content

[Survival]Sistema


Recommended Posts

=Estou com essa script de survival, gostaria que alguem colocasse para ir de 1 a 4 players rep ++ pra quem ajudar!

Spoiler

<?xml version="1.0" encoding="UTF-8"?>
<!--
                ULTIMATE SURVIVAL - Codigo feito por Omega / Pedido por vinnevinne
                    
                      Informacoes: http://www.xtibia.com/forum/topic/221415-ultimate-survival/
-->
 
<mod name="Ultimate Survival" version="1.0" author="Omega" enabled="yes">
<config name="ultimatelib"><![CDATA[
USurvival = {
    posi = {x=510, y=888, z=9}, -- parte esquerda superior da arena
        posf = {x=521, y=899, z=9}, -- parte direita inferior da arena
        posc = {x=515, y=894, z=9}, -- onde o player entra na arena
    
    waves = {
[1] = {monsters = {'snake', 'beezer'}, count = 5, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[2] = {monsters = {'dog', 'snake', 'beezer'}, count = 6, reward = {exp = 0, item = 2160, amount = 1, money = 5000000}},
[3] = {monsters = {'dog', 'haku', 'snake'}, count = 7, reward = {exp = 0, item = 2160, amount = 1, money = 10000000}},
[4] = {monsters = {'haku', 'dog', 'snake', 'beezer'}, count = 10, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[5] = {monsters = {'beezer', 'dog', 'snake', 'giat fear'}, count = 16, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[6] = {monsters = {'giat fear', 'bandit', 'haku', 'snake'}, count = 17, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[7] = {monsters = {'Anbu', 'bandit', 'haku', 'snake'}, count = 18, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[8] = {monsters = {'Anbu', 'bandit', 'haku', 'snake'}, count = 19, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[9] = {monsters = {'Anbu', 'bandit', 'haku', 'bandit', 'dark snake'}, count = 20, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[10] = {monsters = {'Anbu', 'bandit', 'haku', 'bandit', 'dog fear'}, count = 21, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[11] = {monsters = {'beezer', 'dog', 'snake', 'bandit', 'haku', 'bandit', 'sword man'}, count = 22, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[12] = {monsters = {'Anbu', 'bandit', 'haku', 'bandit', 'sword man'}, count = 23, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[13] = {monsters = {'beezer', 'dog', 'kikkai', 'bandit', 'haku', 'bandit', 'sword man'}, count = 24, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[14] = {monsters = {'beezer', 'dog', 'kikkai', 'bandit', 'dark snake', 'bandit', 'akatsuki'}, count = 25, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[15] = {monsters = {'severium snake', 'Anbu'}, count = 26, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[16] = {monsters = {'beezer', 'dog', 'kikkai', 'bandit', 'dark snake', 'bandit', 'akatsuki'}, count = 27, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[17] = {monsters = {'Anbu', 'Anbu'}, count = 28, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[18] = {monsters = {'Anbu', 'Anbu'}, count = 28, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[19] = {monsters = {'Anbu', 'Anbu'}, count = 28, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[21] = {monsters = {'Anbu', 'Anbu'}, count = 28, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[22] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[23] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[24] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[25] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[26] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[27] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[28] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[29] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[30] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[31] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[33] = {monsters = {'Anbu', 'Anbu'}, count = 29, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[34] = {monsters = {'Anbu', 'Anbu'}, count = 30, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
[35] = {monsters = {'Chuck norris', 'Anbu'}, count = 30, reward = {exp = 0, item = 2160, amount = 1, money = 1000000}},
    },
    exhaust = 1 * 24 * 60 * 60, -- Tempo em segundos ate poder entrar novamente na arena (1 * 24 * 60 * 60 = 1 dia)
    
    final_reward = {item = 2160, amount = 100, exp = 10000000, money = 0},
    
    storage_ex = 607069,
    storage_wave = 607089,
}

function isWalkable(pos)-- by Nord / editado por Omega
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
        return false
    elseif isCreature(getTopCreature(pos).uid) then
        return false
    elseif getTileInfo(pos).protection then
        return false
    elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
        return false
    end
return true
end

function doSpawnMonsters(monsters, pos, radius, limit)
    if not pos.x or not pos.y or not pos.z or not type(monsters) == 'table' then
        return false
    end
        local radius = tonumber(radius)
    if radius > 5 then
        radius = 5
    elseif radius < 2 then
        radius = 2
    end
    if not limit or limit < 1 then
        limit = 1
    elseif limit > radius ^ 2 then
        limit = math.floor((radius*1.5) ^ 2)
    end
    
    local k = 0
    local tries = 0
    repeat
        for x = pos.x - radius, pos.x + radius do
            for y = pos.y - radius, pos.y + radius do
                if isWalkable({x=x, y=y, z=pos.z}) then
                    local monster = monsters[math.random(1, #monsters)]
                    local chance = math.random(1, 100)
                    if k == limit then
                        break
                    elseif chance <= 8 and doCreateMonster(monster, {x=x, y=y, z=pos.z}) then
                        k = k + 1
                    end
                end
            end
        end
        tries = tries + 1
    until k >= limit or tries >= 500
    return k >= limit and true or false
end

function getPlayersInArea(pos1,pos2)
    local players = {}
    if pos1.x and pos1.y and pos2.x and pos2.y and pos1.z == pos2.z then
        for a = pos1.x, pos2.x do
            for b = pos1.y,pos2.y do
                local pos = {x=a,y=b,z=pos1.z}
                if isPlayer(getTopCreature(pos).uid) then
                    table.insert(players,getTopCreature(pos).uid)
                end
            end
        end
        return players
    else
        return false
    end
end    

function getMonstersInArea(pos1,pos2)
    local players = {}
    if pos1.x and pos1.y and pos2.x and pos2.y and pos1.z == pos2.z then
        for a = pos1.x, pos2.x do
            for b = pos1.y,pos2.y do
                local pos = {x=a,y=b,z=pos1.z}
                if isMonster(getTopCreature(pos).uid) then
                    table.insert(players,getTopCreature(pos).uid)
                end
            end
        end
        return players
    else
        return false
    end
end

function doCleanArena()
    local monsters = getMonstersInArea(USurvival.posi, USurvival.posf)
    for _, cid in pairs(monsters) do
        doRemoveCreature(cid)
    end
end

function doStartWave(waveID, cid)
    if not isCreature(cid) then return false end
    if USurvival.waves[waveID] then
        wave = USurvival.waves[waveID]
        doSpawnMonsters(wave.monsters, USurvival.posc, 5, wave.count)
        doPlayerSendTextMessage(cid, 21, 'Wave '..waveID..' inicie abatalha! FIGHT!')
    end
end
]]></config>

<action actionid="4599" event="script" override="yes"><![CDATA[
domodlib('ultimatelib')
function onUse(cid, item)
    if getPlayerStorageValue(cid, USurvival.storage_ex) <= os.time() then
        if #getPlayersInArea(USurvival.posi, USurvival.posf) == 0 then
            doCleanArena()
            doTeleportThing(cid, USurvival.posc)
            doPlayerSendTextMessage(cid, 21, 'O jogo de sobrevicencia vai iniciar em 10 segundos')
            addEvent(doStartWave, 10000, 1, cid)
            setPlayerStorageValue(cid, USurvival.storage_wave, 1)
            setPlayerStorageValue(cid, USurvival.storage_ex, os.time() + USurvival.exhaust)
            if item.itemid % 2 == 1 then
                doTransformItem(item.uid, item.itemid+1)
            else
                doTransformItem(item.uid, item.itemid-1)
            end
        else
            doPlayerSendCancel(cid, 'Someone is already in the arena.')
            doSendMagicEffect(getThingPos(cid), 2)
        end
    else
        local left = getPlayerStorageValue(cid, USurvival.storage_ex) - os.time()
        left = {hour = math.floor(left/3600), minutes = math.ceil((left % 3600)/60)}
        doPlayerSendCancel(cid, 'You have to wait '.. left.hour ..'h and '..left.minutes..'min.')
        doSendMagicEffect(getThingPos(cid), 2)
    end
    return true
end
]]></action>

<event type="login" name="US Login" event="script"><![CDATA[
domodlib('ultimatelib')
function onLogin(cid)
    registerCreatureEvent(cid,'UltimateSurvival1')
    registerCreatureEvent(cid,'UltimateSurvival2')
    if isInArea(getThingPos(cid), USurvival.posi, USurvival.posf) then
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
        doSendMagicEffect(getThingPos(cid), 10)
    end
    return true
end
]]></event>

<event type="kill" name="UltimateSurvival1" event="script"><![CDATA[
domodlib('ultimatelib')
function onKill(cid, target)
    if isInArea(getThingPos(cid), USurvival.posi, USurvival.posf) then
        if #getMonstersInArea(USurvival.posi, USurvival.posf) == 1 then
            local wave = getPlayerStorageValue(cid, USurvival.storage_wave)
            if USurvival.waves[wave+1] then
                setPlayerStorageValue(cid, USurvival.storage_wave, wave + 1)
                addEvent(doStartWave, 5000, wave + 1, cid)
                doPlayerSendTextMessage(cid, 22, 'Voce passou de wave! proxima em 5 segundos')
            else
                doPlayerSendTextMessage(cid, 22, 'CONGRATULATIONS! YOU HAVE BEATEN THE ULTIMATE SURVIVAL!')
                local reward = USurvival.final_reward
                if reward.item then
                    doPlayerAddItem(cid, reward.item, (reward.amount or 1), false)
                end
                if reward.exp then
                    doPlayerAddExp(cid, reward.exp)
                end
                if reward.money then
                    doPlayerAddMoney(cid, reward.money)
                end
                local medal = doPlayerAddItem(cid, 5785, 1, false)
                if medal then
                    doItemSetAttribute(medal, 'description', 'This was given to '..getCreatureName(cid)..' by completing the Ultimate Survival.')
                    doItemSetAttribute(medal,'name', 'Ultimate Survival Medal')
                end
                doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
            end
        end
    end
    return true
end

]]></event>

<event type="preparedeath" name="UltimateSurvival2" event="script"><![CDATA[
domodlib('ultimatelib')
function onPrepareDeath(cid, killers)
    if isInArea(getThingPos(cid), USurvival.posi, USurvival.posf) then
        doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true)
        doRemoveConditions(cid, false)
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
        doPlayerSendTextMessage(cid, 21, 'Too bad, you couldn\'t defeat the Ultimate Survival... Better luck next time.')
        local reward = USurvival.waves[getPlayerStorageValue(cid, USurvival.storage_wave)].reward
        if reward.item then
            doPlayerAddItem(cid, reward.item, reward.amount or 1)
        end
        if reward.exp then
            doPlayerAddExp(cid, reward.exp)
        end
        if reward.money then
            doPlayerAddMoney(cid, reward.money)
        end
        return false
    end
    return true
end
]]></event>

</mod>

 

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...