Renan Morais 2 Postado Maio 12, 2015 Share Postado Maio 12, 2015 Eai galera blz?Estou precisando modificar um script, pra quem não conhece o Survival, é uma arena onde o player se teleporta quando clicado na alavanca. Nesta arena são feitas várias waves de monstros, e ao finalizá-las o player ganha uma recompensa. Eu gostaria da ajuda de vocês manjadores rsrs... Queria que o script funcionasse com todos os players que estiverem em cima destes 4 sqms não importando se todos os sqms estiverem ou não completos: Este é o script: <?xml version="1.0" encoding="UTF-8"?> <!-- ULTIMATE SURVIVAL - Código feito por Omega / Pedido por vinnevinne Informações: 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=19, y=565, z=7}, posf = {x=41, y=587, z=7}, posc = {x=30, y=576, z=7}, waves = { [1] = {monsters = {'Wolf', 'Dino', 'Snake', 'Crocodile', 'Triceratops', 'Dinosaur'}, count = 10, reward = {exp = 100000, item = 0, amount = 0, money = 0}}, [2] = {monsters = {'Bandit', 'Bandit Swordman', 'Bandit Gun', 'Bandit Scout', 'Human'}, count = 20, reward = {exp = 200000, item = 0, amount = 0, money = 0}}, [3] = {monsters = {'Android', 'Android Warrior', 'Destroyer', 'Terminator'}, count = 15, reward = {exp = 300000, item = 0, amount = 0, money = 0}}, [4] = {monsters = {'Fire Elemental', 'Ice Elemental', 'Wind Elemental'}, count = 20, reward = {exp = 400000, item = 0, amount = 0, money = 0}}, [5] = {monsters = {'Saibamen', 'Water Saibamen', 'Swampper'}, count = 25, reward = {exp = 500000, item = 0, amount = 0, money = 0}}, [6] = {monsters = {'Maniraptora', 'Ceratosauria', 'Yakon'}, count = 25, reward = {exp = 600000, item = 0, amount = 0, money = 0}}, [7] = {monsters = {'Ancient Triceratops', 'Ancient Dinosaur'}, count = 25, reward = {exp = 700000, item = 0, amount = 0, money = 0}}, [8] = {monsters = {'Omega Destroyer', 'Humanoid Cyborg', 'Frontal Cyborg', 'C17', 'C16', 'C18', 'C19', 'C20'}, count = 35, reward = {exp = 800000, item = 0, amount = 0, money = 0}}, [9] = {monsters = {'Namekjin', 'Namekjin Warrior', 'Strong Namek', 'Ultra Namekjin'}, count = 35, reward = {exp = 900000, item = 0, amount = 0, money = 0}}, [10] = {monsters = {'Namekjin Cultist', 'Namekjin Scout', 'Elder Namekjin', 'Namekjin Mindcontroller'}, count = 30, reward = {exp = 1000000, item = 0, amount = 0, money = 0}}, [11] = {monsters = {'Djin', 'Invader', 'Bojack', 'Ancestral Guardian'}, count = 30, reward = {exp = 1100000, item = 0, amount = 0, money = 0}}, [12] = {monsters = {'Dragon', 'Black Dragon', 'Undead Dragon', 'Licantropo', 'Golden Djin'}, count = 30, reward = {exp = 1200000, item = 0, amount = 0, money = 0}}, [13] = {monsters = {'Cell', 'Perfect Cell', 'Majin Boo', 'Janemba', 'Fat Janemba', 'Cooler', 'Dabura', 'Super Bojack'}, count = 40, reward = {exp = 1300000, item = 0, amount = 0, money = 0}}, [14] = {monsters = {'Goku Ssj3', 'Majin Vegeta', 'Gotenks Ssj3', 'Ghost Ssj3', 'Tsuful', 'Supreme Kaio'}, count = 40, reward = {exp = 1400000, item = 0, amount = 0, money = 0}}, [15] = {monsters = {'Demon', 'Hellfire', 'Frozen King', 'Ryan Shenlong', 'Chii Shenlong', 'Uu Shenlong'}, count = 40, reward = {exp = 1500000, item = 0, amount = 0, money = 0}}, [16] = {monsters = {'Goku Ssj4', 'Vegeta Ssj4', 'Bardock Ssj4', 'Broly Ssj4', 'Trunks Ssj4', 'Gohan Ssj4', 'Turles Ssj4', 'Raditz Ssj4', 'Evil Tsuful', 'Rou Dai Kaioshin'}, count = 40, reward = {exp = 1600000, item = 0, amount = 0, money = 0}}, [17] = {monsters = {'Gogeta Ssj4', 'Furie Namek', 'Gotenks Ssj4', 'King Vegeta', 'Vegetto', 'Li Shenron', 'Saiyan', 'Demonic'}, count = 35, reward = {exp = 1700000, item = 0, amount = 0, money = 0}}, [18] = {monsters = {'Goku Ssj5', 'Vegeta Ssj5', 'Bardock Ssj5', 'Broly Ssj5', 'Trunks Ssj5', 'Gohan Ssj5', 'Turles Ssj5', 'Raditz Ssj5', 'Tsuful Ssj5'}, count = 45, reward = {exp = 1800000, item = 0, amount = 0, money = 0}}, [19] = {monsters = {'Furie Janemba', 'Strong Boo', 'Super C17', 'Super C18', 'Furie Cell', 'Lord Freeza'}, count = 45, reward = {exp = 1900000, item = 0, amount = 0, money = 0}}, [20] = {monsters = {'Hell Janemba', 'Hell Fighter', 'Hell Ghost', 'Cooler Rage', 'Li Shenron Max'}, count = 50, reward = {exp = 2000000, item = 0, amount = 0, money = 0}}, [21] = {monsters = {'King Snake Boss'}, count = 1, reward = {exp = 0, item = 0, amount = 0, money = 0}}, }, exhaust = 1 * 24 * 60 * 60, -- Tempo em segundos até poder entrar novamente na arena (1 * 24 * 60 * 60 = 1 dia) final_reward = {item = 12780, amount = 100, exp = 50000000, money = 1000000}, 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, 29, 'Wave '..waveID..' começou!') 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, 29, 'A Survival irá começar em 10 segundos!') addEvent(doStartWave, 10000, 1, cid) setPlayerStorageValue(cid, USurvival.storage_wave, 1) setPlayerStorageValue(cid, USurvival.storage_ex, os.time() + USurvival.exhaust) doPlayerSetExperienceRate(cid, getConfigValue("rateExperience")*1.5) if item.itemid % 2 == 1 then doTransformItem(item.uid, item.itemid+1) else doTransformItem(item.uid, item.itemid-1) end else doPlayerSendCancel(cid, 'Alguém já está na Arena Survival.') 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, 'Você deve esperar '.. left.hour ..'h e '..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, 'Parabéns! A próxima wave começará em 5 segundos!') else doPlayerSendTextMessage(cid, 22, 'Parabéns! Você finalizou todas as waves da Arena Survival!') local reward = USurvival.final_reward if reward.item then doPlayerAddItem(cid, reward.item, reward.amount) end if reward.exp then doPlayerAddExp(cid, reward.exp) end if reward.money then doPlayerAddMoney(cid, reward.money) 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, 'Que pena, você não concluiu a Arena Survival... Boa sorte da próxima vez!') doPlayerAddExp(cid, 1000000) doPlayerSetExperienceRate(cid, getConfigValue("rateExperience")) return false end return true end ]]></event> </mod> Espero que possam me ajudar, ficaria muito grato e darei vários reps! Alguém pra ajudar? Link para o comentário Compartilhar em outros sites More sharing options...
Bruno 535 Postado Julho 14, 2015 Share Postado Julho 14, 2015 O tópico foi fechado e movido para lixeira por estar inativo a mais de 10 dias. Caso seja preciso reabrir o mesmo, favor entrar em contato com a equipe. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados