Ir para conteúdo

[MODS] - [8.6] Perfect Zombie System [Automático] [V1.0]

Featured Replies

Postado
  • Este é um post popular.

Qual dúvida ou erro poste no tópico que estarei respondendo.

 

 

Obs: Antes que me falem besteiras, coloquei para os GM'S, CM'S E GOD'S não contarem no evento, então testem apenas com jogadores.

 

Zombie.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Perfect Zombie System" version="8.6" author="Vodkart" contact="tibiaking.com" enabled="yes">
<config name="zombie_config"><![CDATA[
zombie_config = {
	storages = {172100, 172101, 172102}, -- n edite
	players = {min = 2, max = 30}, -- min, max players no evento
	rewards = {items ={{2160,10},{2494,1}}, trophy = 5805}, 
	timeToStartEvent = 30, -- segundos para começar o evento
	CheckTime = 5, -- tempo que o TP fica aberto para os jogadores adrentarem o evento
	teleport = {{x=147, y=55, z=7}, {x=125 , y=304, z=7}}, -- position do tp onde aparece, position para onde o jogador vai ao entrar no tp
	arena = {{x=110,y=297,z=7},{x=145,y=321,z=7}}, -- area positions
	monster_name = "Zombie Event",
	timeBetweenSpawns = 20,
	min_Level = 20
}
zombie_days = {
	["Monday"] = {"13:00","18:00","20:00","22:00"},
	["Tuesday"] = {"13:00","18:00","22:50","22:00"},
	["Wednesday"] = {"21:57","18:00","20:00","23:17"},
	["Thursday"] = {"13:00","18:00","20:00","22:00"},
	["Friday"] = {"13:00","18:00","21:45","22:00"},
	["Saturday"] = {"13:00","18:00","20:00","22:00"},
	["Sunday"] = {"13:00","18:00","20:00","22:00"}
}
function removeZombieTp()
	local t = getTileItemById(zombie_config.teleport[1], 1387).uid
	return t > 0 and doRemoveItem(t) and doSendMagicEffect(zombie_config.teleport[1], CONST_ME_POFF)
end
function ZerarStoragesZombie()
	for _, stor in pairs(zombie_config.storages) do
		setGlobalStorageValue(stor, 0)
	end
end
function getPlayersInZombieEvent()
	local t = {}
	for _, pid in pairs(getPlayersOnline()) do
		if isInRange(getPlayerPosition(pid), zombie_config.arena[1], zombie_config.arena[2]) and getPlayerAccess(pid) < 3 then 
			t[#t+1] = pid
		end
	end
	return t
end
function getZombieRewards(cid, items)
	local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID
	for _, i_i in ipairs(items) do
		local item, amount = i_i[1],i_i[2]
		if isItemStackable(item) or amount == 1 then
			doAddContainerItem(backpack, item, amount)
		else
			for i = 1, amount do
				doAddContainerItem(backpack, item, 1)
			end
		end
	end
end
function isWalkable(pos, creature, proj, pz)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end
function HaveCreatureZombie(area, remove)
	for x = area[1].x - 1, area[2].x + 1 do
		for y = area[1].y - 1, area[2].y + 1 do
			local pos = {x=x, y=y, z=area[1].z}
			local m = getTopCreature(pos).uid
			if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end
		end
	end
end
function spawnZombie()
	if #getPlayersInZombieEvent() > 1 then
		local pos = {x=math.random(zombie_config.arena[1].x, zombie_config.arena[2].x), y=math.random(zombie_config.arena[1].y,zombie_config.arena[2].y), z=zombie_config.arena[1].z}
		if not isWalkable(pos, false, false, false) then 
			spawnZombie() 
		else
			doSummonCreature(zombie_config.monster_name, pos)
			doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE)
			addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE)
			addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA)
			doSendMagicEffect(pos, CONST_ME_MORTAREA)
			setGlobalStorageValue(zombie_config.storages[2], getGlobalStorageValue(zombie_config.storages[2]) <= 0 and 1 or getGlobalStorageValue(zombie_config.storages[2])+1)
			doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(zombie_config.storages[2]) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED)
			addEvent(spawnZombie, zombie_config.timeBetweenSpawns *1000)
		end
	end
end
function CheckZombieEvent(delay)
	if getGlobalStorageValue(zombie_config.storages[1]) ~= (zombie_config.players.max+1) then
		if delay > 0 and getGlobalStorageValue(zombie_config.storages[1]) < zombie_config.players.max then
			doBroadcastMessage("Zombie event starting in " .. delay .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)
		elseif delay == 0 and getGlobalStorageValue(zombie_config.storages[1]) < zombie_config.players.min then
			for _, cid in pairs(getPlayersInZombieEvent()) do
				doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
				doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
			end
			removeZombieTp()
			doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. zombie_config.players.min .. " players is needed!", MESSAGE_STATUS_WARNING)
			ZerarStoragesZombie()
		elseif delay == 0 and getGlobalStorageValue(zombie_config.storages[1]) >= zombie_config.players.min then
			removeZombieTp()
			doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(zombie_config.storages[1]) .. " players]! The event will soon start.")
			for _, var in pairs(getPlayersInZombieEvent()) do
				doPlayerSendTextMessage(var, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. zombie_config.timeToStartEvent .. " seconds! Good luck!")
			end
			addEvent(spawnZombie, zombie_config.timeToStartEvent*1000)
		end
		addEvent(CheckZombieEvent, 60000, delay-1)
	end
end]]></config>
<event type="statschange" name="ZombieStats" event="script"><![CDATA[
domodlib('zombie_config')
if isPlayer(cid) and isMonster(attacker) and getCreatureName(attacker) == zombie_config.monster_name then
	if isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then
		if #getPlayersInZombieEvent() > 1 then
			doBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED)
			local corpse = doCreateItem(getPlayerSex(cid) == 1 and 3058 or 6081, 1, getPlayerPosition(cid))
			doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".")
			doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
			doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
			doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
			if #getPlayersInZombieEvent() == 1 then
				local winner = getPlayersInZombieEvent()[1]
				doBroadcastMessage(getCreatureName(winner)..' has survived at zombie event!')
				local goblet = doPlayerAddItem(winner, zombie_config.rewards.trophy, 1)
				doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(winner) .. " for winning the Zombie event.")
				getZombieRewards(winner, zombie_config.rewards.items)
				doTeleportThing(winner, getTownTemplePosition(getPlayerTown(winner)), false)
				doSendMagicEffect(getPlayerPosition(winner), CONST_ME_TELEPORT)
				doBroadcastMessage(getPlayerName(winner).." won the Zombie event! Congratulations!")
				HaveCreatureZombie(zombie_config.arena, true)
				ZerarStoragesZombie()
			end
		else
			doBroadcastMessage("No one survived in the Zombie Event.", MESSAGE_EVENT_ADVANCE)
			HaveCreatureZombie(zombie_config.arena, true)
			ZerarStoragesZombie()
		end
		return false
	end
end
return true]]></event>
<globalevent name="Zombie_Start" interval="60000" event="script"><![CDATA[
domodlib('zombie_config')
function onThink(interval, lastExecution)
	if zombie_days[os.date("%A")] then
		local hrs = tostring(os.date("%X")):sub(1, 5)
		if isInArray(zombie_days[os.date("%A")], hrs) and getGlobalStorageValue(zombie_config.storages[3]) <= 0 then
			local tp = doCreateItem(1387, 1, zombie_config.teleport[1])
			doItemSetAttribute(tp, "aid", 45110)
			CheckZombieEvent(zombie_config.CheckTime)
			setGlobalStorageValue(zombie_config.storages[1], 0)
			setGlobalStorageValue(zombie_config.storages[2], 0)
			HaveCreatureZombie(zombie_config.arena, true) 
		end
	end
	return true
end]]></globalevent>
<event type="login" name="Zombie_Login" event="script"><![CDATA[
domodlib('zombie_config')
function onLogin(cid)
	registerCreatureEvent(cid, "ZombieBattle")
	registerCreatureEvent(cid, "ZombieStats")
	if isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
	end
	return true
end]]></event>
<event type="combat" name="ZombieBattle" event="script"><![CDATA[
domodlib('zombie_config')
if isPlayer(cid) and isPlayer(target) and isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then
	doPlayerSendCancel(cid, "You may not attack this player.") return false
end
return true
]]></event>
<movevent type="StepIn" actionid ="45110" event="script"><![CDATA[
domodlib('zombie_config')
function onStepIn(cid, item, position, fromPosition)
	if not isPlayer(cid) then return true end
	if getPlayerAccess(cid) > 3 then return doTeleportThing(cid, zombie_config.teleport[2]) end
	if getPlayerLevel(cid) < zombie_config.min_Level then
		doTeleportThing(cid, fromPosition, true)
		doPlayerSendCancel(cid, "You need to be at least level " .. zombie_config.min_Level .. ".")
		doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
		return true
	end
	if getGlobalStorageValue(zombie_config.storages[1]) <= zombie_config.players.max then
		doTeleportThing(cid, zombie_config.teleport[2])
		setGlobalStorageValue(zombie_config.storages[1], getGlobalStorageValue(zombie_config.storages[1])+1)
		doBroadcastMessage(getPlayerName(cid) .. " entered the Zombie event! Currently " .. getGlobalStorageValue(zombie_config.storages[1]) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED)
		if getGlobalStorageValue(zombie_config.storages[1]) == zombie_config.players.max then
			setGlobalStorageValue(zombie_config.storages[1], getGlobalStorageValue(zombie_config.storages[1])+1)
			removeZombieTp()
			doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(zombie_config.storages[1])-1 .. " players]! The event will soon start.")
			for _, var in pairs(getPlayersInZombieEvent()) do
				doPlayerSendTextMessage(var, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. zombie_config.timeToStartEvent .. " seconds! Good luck!")
			end
			addEvent(spawnZombie, zombie_config.timeToStartEvent*1000)
		end 
	end
	return true
end]]></movevent>
<talkaction words="/zombiestart;!zombiestart" access="5" event="buffer"><![CDATA[
domodlib('zombie_config')
	if getGlobalStorageValue(zombie_config.storages[3]) > 0 then
		doPlayerSendCancel(cid, "The event is already starting.") return true
	elseif not param or not tonumber(param) then 
		doPlayerSendCancel(cid, "Use only numbers.") return true 
	end
	local param = tonumber(param) <= 0 and 1 or tonumber(param)
	local tp = doCreateItem(1387, 1, zombie_config.teleport[1])
		doItemSetAttribute(tp, "aid", 45110)
		CheckZombieEvent(tonumber(param))
		ZerarStoragesZombie()
		setGlobalStorageValue(zombie_config.storages[3], 1)
		HaveCreatureZombie(zombie_config.arena, true)
]]></talkaction>
<globalevent name="ZombieDebug-Start" type="start" event="buffer"><![CDATA[
domodlib('zombie_config')
ZerarStoragesZombie()
return true]]></globalevent>
</mod>

 

OBS: Quem serve em milesegundos, mude essa parte:


 

<globalevent name="Zombie_Start" interval="60" event="script"><![CDATA[

 

 

para

 

<globalevent name="Zombie_Start" interval="60000" event="script"><![CDATA[

 

 

 

----------------------------------------------------- // --------------------------------------------------

 

o monstro você instala em data/monsters

 

zombie event.xml

<?xml version="1.0" encoding="UTF-8"?>
<monster name="Zombie Event" nameDescription="an zombie event" race="undead" experience="280" speed="100" manacost="0">
    <health now="500" max="500"/>
    <look type="311" corpse="9875"/>
    <targetchange interval="5000" chance="50"/>
    <strategy attack="100" defense="0"/>
    <flags>
        <flag summonable="0"/>
        <flag attackable="0"/>
        <flag hostile="1"/>
        <flag illusionable="0"/>
        <flag convinceable="0"/>
        <flag pushable="0"/>
        <flag canpushitems="1"/>
        <flag canpushcreatures="1"/>
        <flag targetdistance="1"/>
        <flag staticattack="90"/>
        <flag runonhealth="0"/>
    </flags>
    <attacks>
        <attack name="melee" interval="2000" min="-35000" max="-35000"/>
    </attacks>
    <defenses armor="15" defense="10"/>
    <immunities>
        <immunity paralyze="1"/>
<immunity invisible="1"/>
    </immunities>
    <voices interval="5000" chance="10">
        <voice sentence="You wont last long!"/>
        <voice sentence="Mmmmh.. braains!"/>
    </voices>
    <loot>
        <item id="2148" countmax="1" chance="100000"/><!-- gold coin -->
    </loot>
</monster>

 

 

e a tag em monsters.xml

<monster name="Zombie Event" file="zombie event.xml"/>

 

preferences_system.png Configuração preferences_system.png

 

 

 

 

Sistema

 

zombie_config = {
    storages = {172100, 172101}, -- não edite
    players = {min = 2, max = 30}, -- número minimo e máximo para jogadores no evento
    rewards = {items ={{2160,10},{2494,1}}, trophy = 5805}, -- premiações do jogador
    timeToStartEvent = 30, -- segundos para começar o evento após dar start
    CheckTime = 5, -- tempo que o TP fica aberto para os jogadores adrentarem o evento
    teleport = {{x=145, y=50, z=7}, {x=176 , y=54, z=5}}, -- posiçãodo tp onde aparece, posição para onde o jogador vai ao entrar no tp
    arena = {{x=173,y=52,z=5},{x=179,y=56,z=6}}, -- posição começo e final da area do evento
    monster_name = "Zombie Event", -- nome do monstro que será sumonado
    timeBetweenSpawns = 20, -- a cada quantos segundos é dado o respaw time do zombie no evento
    min_Level = 20 -- level minimo para participar do evento
}

 

 

Dia e Horário

 


zombie_days = {
    ["Monday"] = {"13:00","18:00","20:00","22:00"},
    ["Tuesday"] = {"13:00","18:00","20:00","22:00"},
    ["Wednesday"] = {"13:00","18:00","20:00","22:00"},
    ["Thursday"] = {"13:00","18:00","20:00","22:00"},
    ["Friday"] = {"13:00","18:00","20:00","22:00"},
    ["Saturday"] = {"13:00","18:00","20:00","22:00"},
    ["Sunday"] = {"13:00","18:00","20:00","22:00"}
}

 

 

["Dia em inglês"] = {"horário do evento"}

 

 

Configurando a área:

 

2WJUrsG.jpg

 

zombie lua.rar

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

  • Respostas 107
  • Visualizações 12.6k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • pronto

  • FIZ UM UPDATE NO MODS   Coloquei pro zombier só nascer onde ele pode ser criado(não em montanhas)    e   coloquei comando /zombiestart MINUTOS;   exemplo  

  • sim, abre a lib(se você usa tudo por lua) do zombie  ou no MODS e procure por essa linha:   doCreateMonster(zombie_config.monster_name, pos, false, false, false)   e troque por essa:

Posted Images

Postado

Muito bom, já vi esse evento nos servidores, mas nunca joguei, qndo termina de matar os zumbis os jogadores são teleportados de volta ou eles tem que entrar no TP ?

https://www.youtube.com/SaymonKopolsky

 

589f09a9e1af9_SemTtulo-1.png.ddf1b437984d72bd5d4124b7e90762fa.png

https://www.youtube.com/SaymonKopolsky

 

 

 

Easy Mapper Map Editor 8.60: Clique aqui

[8.60] BeastXHunter: Clique aqui

 

5494899_orig.gif

Postado
  • Autor
2 minutos atrás, Saymon Kopolsky disse:

Muito bom, já vi esse evento nos servidores, mas nunca joguei, qndo termina de matar os zumbis os jogadores são teleportados de volta ou eles tem que entrar no TP ?

 

não não, vc não pode atacar os zombie, só correr deles, se o zombie te pegar você "morre", o último a sobreviver ganha o evento.

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Postado

Não para de mandar msg dizendo que abriu o TP, e diz que precisa ter 2 player pra começar o evento, mais eu entrei com 2 player e mesmo assim nao houve nada!

E a msg não para de ficando mandando no broadcast..

:/

 

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo