Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <mod name="Ultimate Survival" version="1.0" author="Omega" enabled="yes">
- <config name="ultimatelib"><![CDATA[
- USurvival = {
- posi = {x=579, y=337, z=14},
- posf = {x=609, y=353, z=14},
- posc = {x=594, y=345, z=14},
- waves = {
- [1] = {monsters = {'dragon', 'dragon lord'}, count = 1, reward = {exp = 0, item = 2148, amount = 1, money = 100}},
- [2] = {monsters = {'dragon lord', 'frost dragon'}, count = 2, reward = {exp = 0, item = 2152, amount = 1, money = 1000}},
- [3] = {monsters = {'hydra', 'serpent spawn'}, count = 3, reward = {exp = 0, item = 2494, amount = 1, money = 10000}},
- },
- exhaust = 1 * 24 * 60 * 60, -- Tempo em segundos até poder entrar novamente na arena (1 * 24 * 60 * 60 = 1 dia)
- final_reward = {item = 2160, amount = 100, exp = 10000, money = 100000},
- storage_ex = 607069,
- storage_wave = 607089,
- delay = 10 -- 10 segundos entra uma wave e outra
- }
- SurvivaConfig = {{x = 148, y = 42, z = 6},{x = 148, y = 45, z = 6}} -- pos começo e final ali onde fica a alavanca
- function getPlayersOnLevers()
- local t = {}
- for _, cid in pairs(getPlayersOnline()) do
- if isInRange(getPlayerPosition(cid), SurvivaConfig[1], SurvivaConfig[2]) then
- t[#t+1] = cid
- end
- end
- return t
- end
- 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, delay)
- local t = getPlayersInArea(USurvival.posi, USurvival.posf)
- if #t > 0 then
- if USurvival.waves[waveID] then
- wave = USurvival.waves[waveID]
- doSpawnMonsters(wave.monsters, USurvival.posc, 1, wave.count)
- addEvent(doStartWave, USurvival.delay*1000, waveID+1)
- for _, cid in pairs(t) do
- setPlayerStorageValue(cid, USurvival.storage_wave, getPlayerStorageValue(cid, USurvival.storage_wave)+1)
- doPlayerSendCancel(cid, 'proxima wave começara em '..USurvival.delay..' segundos, se preparem!.')
- end
- else
- if #getMonstersInArea(USurvival.posi, USurvival.posf) == 0 then
- for _, cid in pairs(t) do
- doPlayerSendTextMessage(cid, 22, 'PARABENS! VOCE CONSEGUIU MATAR TODOS OS MONSTRO A TEMPO!')
- 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', 'Esta Medalha Foi Ganha Pelo Jogador '..getCreatureName(cid)..' Por Completar O Ultimate Survival.')
- doItemSetAttribute(medal,'name', 'Ultimate Survival Medal')
- end
- doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
- end
- else
- for _, cid in pairs(t) do
- doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true)
- doRemoveConditions(cid, false)
- doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
- doPlayerSendTextMessage(cid, 21, 'Que Pena, voce nao conseguiu ganhar a tempo!')
- local var = getPlayerStorageValue(cid, USurvival.storage_wave)-1
- local reward = USurvival.waves[var].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
- end
- end
- end
- end
- end
- ]]></config>
- <action actionid="4599" event="script" override="yes"><![CDATA[
- domodlib('ultimatelib')
- function onUse(cid, item)
- if #getPlayersInArea(USurvival.posi, USurvival.posf) > 0 then
- doPlayerSendCancel(cid, 'Alguem Ja Esta Na Arena.')
- doSendMagicEffect(getThingPos(cid), 2) return true
- elseif #getPlayersOnLevers() == 0 then
- doPlayerSendCancel(cid, 'Um ou mais jogadores precisam estar na posição.')
- doSendMagicEffect(getThingPos(cid), 2) return true
- end
- for _, pid in pairs(getPlayersOnLevers()) do
- if not isPlayer(pid) or getPlayerStorageValue(pid, USurvival.storage_ex) - os.time() > 0 then
- doPlayerSendCancel(cid, 'o jogador '..getPlayerName(pid)..' precisa esperar para ir na arena novamente.') return true
- end
- end
- doCleanArena()
- addEvent(doStartWave, 10*1000, 1) -- COMEÇA EM 10 SEGUNDOS
- for _, cid in pairs(getPlayersOnLevers()) do
- doTeleportThing(cid, USurvival.posc, false)
- doPlayerSendTextMessage(cid, 21, 'O Ultimate Survival Comecara Em 10 Segundos! Esteja Pronto Para Enfrentar Seu Destino e o tempo de cada wave é de '..USurvival.delay..' segundos')
- setPlayerStorageValue(cid, USurvival.storage_wave, 1)
- setPlayerStorageValue(cid, USurvival.storage_ex, os.time() + USurvival.exhaust)
- end
- if item.itemid % 2 == 1 then
- doTransformItem(item.uid, item.itemid+1)
- else
- doTransformItem(item.uid, item.itemid-1)
- end
- return true
- end
- ]]></action>
- <event type="login" name="US Login" event="script"><![CDATA[
- domodlib('ultimatelib')
- function onLogin(cid)
- 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="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, 'Que Pena, Voce Nao Podia\'t Derrotar O Ultimate Survival... Melhor sorte da próxima vez.')
- 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>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement