Ir para conteúdo

[MOD] Survival com 4 players


Renan Morais

Posts Recomendados

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:

 

post-381738-0-02932200-1431373834_thumb.png

 

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! bigsmile.gifbutton_ok.png


Alguém pra ajudar? sad.png

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

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

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...