Ir para conteúdo

Perfect Zombie System Event


Posts Recomendados

capturarhoz.png

Mapa para Zombie Event - Download Via SpeedyShare

 

OBS - Antes de falarem que já existe no fórum, teste os outros scripts.

 

Então começando por informações basícas :

starct.png Para abrir o evento : /zombiestart numero de players. Exemplo: /zombiestart 2

starct.png Para Iniciar o evento sem o numero máximo de players: /zombiestart force.

starct.png Apos aberto sempre que um player enta no portal do evento e avisado por broadcast.

starct.png Entrou na arena e o numero de players restantes para o evento ser iniciado.

starct.png Apos o evento ser iniciado um zombie e sumonado a cada 20 segundos, o player que for infectado e teleportado para o templo vence o ultimo player restante na arena.

starct.png Ao terminar o evento e anuciado por broadcast o nome do player vencedor tempo que durou na arena e por quantos zombies ele sobreviveu, entrega de premio automatica, premio configuravel.

starct.png Garantia de funcionabilidade perfeita em TFS 0.4 se configurado corretamente, não testado em outras versões de distros.

 

Vamos ao evento!

 

Como implementar em seu site -

 

Vá ate "C:/xampp/htdcos/" crie um arquivo chamado Zombieevent.php dentro coloque isso -

 

<?PHP
$main_content .= '<h4 id="pt">
<br>
<center><h2><b> Zombie Event</b></h2></center><br><br>

<center><object height="350" width="425"><img

src="http://i52.tinypic.com/wjdth1.jpg"height="700"

width="525"></object></center><br>

<br><br> </h4>


<center><b>O que é o Zombie Event?</b><br>
<br>
É um evento que acontece todos os dias as 12:00, 18:30 e 21:30 hr no

servidor.<br>

<br>
<br>
<b>Como funciona?<br></b>
<br>
Quando estiver na hora irá abrir um teleport no mesmo lugar onde aparece o

teleport da WoE, basta você entrar e aguardar o tempo para inicio do Evento,
o objetivo do jogo é correr dos zombies, a cada 20 segundos irá nascer um novo em

alguma área randomica, você deve correr pois se eles te tocarem você

automaticamente é retirado do evento e volta para o seu temple.
O ultimo jogador que sobrar vivo vence o evento.<br>
<br>
<br>
<b>Quais são os prêmios?<br></b>
<br>
O ganhador irá ganhar<b> 100k</b>, uma <b>Boots of Haste</b> e um <b>Globet com o

nome dele</b>.<br>

<br>
</center>';
?>

 

 

Depois vá na pasta do xampp/htdocs, abra o index.php e em baixo disso -

case "buypoints":
$topic = "Buy Points";
$subtopic = "buypoints";
include("buypoints.php");
break;

 

Adicione isso -

 

case "zombieevent":
$topic = "Zombie event";
$subtopic = "zombieevent";
include("zombieevent.php");

break;

 

Agora vá em "C:/xampp/htdcos/layout/tibiacom/" abra o arquivo layout.php, depois disso -

<a href='?subtopic=highscores'>
<div id='submenu_highscores' class='Submenuitem' onmouseover='MouseOverSubmenuItem(this)' onmouseout='MouseOutSubmenuItem(this)'>
<div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
<div id='ActiveSubmenuItemIcon_highscores' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
<div class='SubmenuitemLabel'>Highscores</div>
<div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
</div>

</a>

 

Cole isso -

<a href='?subtopic=zombieevent'>
<div id='submenu_zombieevent' class='Submenuitem'

onmouseover='MouseOverSubmenuItem(this)' onmouseout='MouseOutSubmenuItem(this)'>
<div class='LeftChain' style='background-image:url(<?PHP echo $layout_name;

?>/images/general/chain.gif);'></div>
<div id='ActiveSubmenuItemIcon_highscores' class='ActiveSubmenuItemIcon'

style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-

activesubmenu.gif);'></div>
<div class='SubmenuitemLabel'>Zombie Event</div>
<div class='RightChain' style='background-image:url(<?PHP echo $layout_name;

?>/images/general/chain.gif);'></div>
</div>

</a>

 

 

Vamos Ao Script!

 

Vá em data/creaturescripts/scripts e crie uma pasta com o nome de zombie.

Cria um arquivo .lua com o nome de onattack e adicione isso -

 

function loseOnZombieArena(cid)
kickPlayerFromZombiesArea(cid)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "BOOM! You are dead.")
local players = getZombiesEventPlayers()
if(#players <= 1) then
local winner = players[1]
if(winner) then
doPlayerAddItem(winner, 2157, 5, true)
doPlayerAddItem(winner, 6119, 1, true)
doPlayerSendTextMessage(winner, MESSAGE_STATUS_CONSOLE_BLUE, "You won zombies arena event.")
doBroadcastMessage("After " .. os.time() - getPlayerZombiesEventStatus(winner) .. " seconds of fight " .. getCreatureName(winner) .. " won Zombie Arena Event in game versus " .. getStorage(ZE_ZOMBIES_SPAWNED) .. " zombies!")
kickPlayerFromZombiesArea(winner)
else
doBroadcastMessage("Zombie arena event finished! No one win?!?!?! WTF!")
end
doSetStorage(ZE_STATUS, 0)
doSetStorage(ZE_PLAYERS_NUMBER, ZE_DEFAULT_NUMBER_OF_PLAYERS)
doSetStorage(ZE_ZOMBIES_TO_SPAWN, 0)
doSetStorage(ZE_ZOMBIES_SPAWNED, 0)
local width = (math.max(ZE_spawnFromPosition.x, ZE_spawnToPosition.x) - math.min(ZE_spawnFromPosition.x, ZE_spawnToPosition.x)) / 2 + 1
local height = (math.max(ZE_spawnFromPosition.y, ZE_spawnToPosition.y) - math.min(ZE_spawnFromPosition.y, ZE_spawnToPosition.y)) / 2 + 1
local centerPos = {x=math.min(ZE_spawnFromPosition.x, ZE_spawnToPosition.x)+width,y=math.min(ZE_spawnFromPosition.y, ZE_spawnToPosition.y)+height,z=ZE_spawnFromPosition.z}
for z = math.min(ZE_spawnFromPosition.z, ZE_spawnToPosition.z), math.max(ZE_spawnFromPosition.z, ZE_spawnToPosition.z) do
centerPos.z = z
for i, uid in pairs(getSpectators(centerPos, width, height, false)) do
if(isMonster(uid)) then
doRemoveCreature(uid)
end
end
end
end
end

function onStatsChange(target, cid, changetype, combat, value)
if((cid and isMonster(cid) and getCreatureName(cid) == "Zombie Event") or (isInRange(getThingPosition(target), ZE_spawnFromPosition, ZE_spawnToPosition) and changetype == STATSCHANGE_HEALTHLOSS and math.abs(value) >= getCreatureHealth(target))) then
doCreatureAddHealth(target, getCreatureMaxHealth(target))
loseOnZombieArena(target)
return false
end
return true
end

 

 

Ainda na pasta zombie, crie um arquivo .lua com o nome de ondeath e adicione isso -

 

function onDeath(cid)
setZombiesToSpawnCount(getZombiesToSpawnCount() + 2)
doCreatureSay(cid, "I'll be back!", 19)
return true
end

 

 

Agora crie um arquivo .lua com nome de onthink e adicione isso -

 

function onThink(cid)
local target = getCreatureTarget(cid)
if(target ~= 0 and not isPlayer(target)) then
doRemoveCreature(target)
end
return true
end

 

 

Agora vá em data/globalevents/scripts e também crie uma pasta com o nome de zombie.

Crie um arquivo .lua com o nome de onstratup e adicione isso -

 

function onstartup()
db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = " .. ZE_isOnZombieArea .. ";")
doSetStorage(ZE_STATUS, 0)
doSetStorage(ZE_PLAYERS_NUMBER, ZE_DEFAULT_NUMBER_OF_PLAYERS)
doSetStorage(ZE_ZOMBIES_TO_SPAWN, 0)
doSetStorage(ZE_ZOMBIES_SPAWNED, 0)
addZombiesEventBlockEnterPosition()
return true
end

 

 

Crie um arquivo .lua com o nome de onthink e adicione isso -

 

function onThink(interval, lastExecution, thinkInterval)
if(getStorage(ZE_STATUS) == 2) then
setZombiesToSpawnCount(getZombiesToSpawnCount()+1)
local players = getZombiesEventPlayers()
for i=1, getZombiesToSpawnCount() * 2 do
if(getZombiesToSpawnCount() > 0 and spawnNewZombie()) then
setZombiesToSpawnCount(getZombiesToSpawnCount()-1)
end
end
end
return true
end

 

 

Agora va na pasta data/lib e crie um arquivo .lua chamado zombie_event, adicione isso -

 

-- CONFIG
ZE_DEFAULT_NUMBER_OF_PLAYERS = 20
ZE_ACCESS_TO_IGNORE_ARENA = 4
-- POSITIONS
ZE_blockEnterItemPosition = {x=32341, y=32213, z=7} -- onde nasce o teleport?
ZE_enterPosition = {x=32154, y=32578, z=7} -- onde os players nascem dentro da arena zombie?
ZE_kickPosition = {x=32368, y=32241, z=7} -- quando morre vai para onde?
ZE_spawnFromPosition = {x=32140,y=32566,z=7} -- para sumonar zombie (de)
ZE_spawnToPosition = {x=32168,y=32590,z=7} -- para sumonar zombie (ate)
-- ITEM IDS
--ZE_blockEnterItemID = 2700
ZE_blockEnterItemID = 1387


-- STORAGES
-- - player
ZE_isOnZombieArea = 34370
-- - global
ZE_STATUS = 34370 -- =< 0 - off, 1 - waiting for players, 2 - is running
ZE_PLAYERS_NUMBER = 34371
ZE_ZOMBIES_TO_SPAWN = 34372
ZE_ZOMBIES_SPAWNED = 34373

-- FUNCTION

function setZombiesEventPlayersLimit(value)
doSetStorage(ZE_PLAYERS_NUMBER, value)
end

function getZombiesEventPlayersLimit()
return getStorage(ZE_PLAYERS_NUMBER)
end

function addPlayerToZombiesArea(cid)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
doTeleportThing(cid, ZE_enterPosition, true)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
if(getPlayerAccess(cid) < ZE_ACCESS_TO_IGNORE_ARENA) then
setPlayerZombiesEventStatus(cid, os.time())
end
end

function kickPlayerFromZombiesArea(cid)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
doTeleportThing(cid, ZE_kickPosition, true)
doSendMagicEffect(getThingPosition(cid), CONST_ME_TELEPORT)
setPlayerZombiesEventStatus(cid, 0)
end

function getPlayerZombiesEventStatus(cid)
return getCreatureStorage(cid, ZE_isOnZombieArea)
end

function setPlayerZombiesEventStatus(cid, value)
doCreatureSetStorage(cid, ZE_isOnZombieArea, value)
end

function getZombiesEventPlayers()
local players = {}
for i, cid in pairs(getPlayersOnline()) do
if(getPlayerZombiesEventStatus(cid) > 0) then
table.insert(players, cid)
end
end
return players
end

function getZombiesCount()
return getStorage(ZE_ZOMBIES_SPAWNED)
end

function addZombiesCount()
doSetStorage(ZE_ZOMBIES_SPAWNED, getStorage(ZE_ZOMBIES_SPAWNED)+1)
end

function resetZombiesCount()
doSetStorage(ZE_ZOMBIES_SPAWNED, 0)
end

function getZombiesToSpawnCount()
return getStorage(ZE_ZOMBIES_TO_SPAWN)
end

function setZombiesToSpawnCount(count)
doSetStorage(ZE_ZOMBIES_TO_SPAWN, count)
end

function addZombiesEventBlockEnterPosition() -- remove tp
-- remove o TP
local item = getTileItemById(ZE_blockEnterItemPosition, ZE_blockEnterItemID)
if(item.uid ~= 0) then
doRemoveItem(item.uid)
end
--doRemoveItem(getThingFromPos(Castle.desde).uid)
--[[
if(getTileItemById(ZE_blockEnterItemPosition, ZE_blockEnterItemID).uid == 0) then
doCreateItem(ZE_blockEnterItemID, 1, ZE_blockEnterItemPosition)
end
]]--

end

function removeZombiesEventBlockEnterPosition() -- add tp
if(getTileItemById(ZE_blockEnterItemPosition, ZE_blockEnterItemID).uid == 0) then
--doCreateItem(ZE_blockEnterItemID, 1, ZE_blockEnterItemPosition)
local tp = doCreateTeleport(ZE_blockEnterItemID, ZE_enterPosition, ZE_blockEnterItemPosition)
doItemSetAttribute(tp, "aid", "5555")
end
--[[
local item = getTileItemById(ZE_blockEnterItemPosition, ZE_blockEnterItemID)
if(item.uid ~= 0) then
doRemoveItem(item.uid)
end
]]--
end

function spawnNewZombie()
local posx = {}
local posy = {}
local posz = {}
local pir = {}
for i=1, 5 do
local posx_tmp = math.random(ZE_spawnFromPosition.x ,ZE_spawnToPosition.x)
local posy_tmp = math.random(ZE_spawnFromPosition.y ,ZE_spawnToPosition.y)
local posz_tmp = math.random(ZE_spawnFromPosition.z ,ZE_spawnToPosition.z)
local pir_tmp = 0
local spec = getSpectators({x=posx_tmp, y=posy_tmp, z=posz_tmp}, 3, 3, false)
if(spec and #spec > 0) then
for z, pid in pairs(spec) do
if(isPlayer(pid)) then
pir_tmp = pir_tmp + 1
end
end
end
posx[i] = posx_tmp
posy[i] = posy_tmp
posz[i] = posz_tmp
pir[i] = pir_tmp
end
local lowest_i = 1
for i=2, 5 do
if(pir[i] < pir[lowest_i]) then
lowest_i = i
end
end
local ret = doCreateMonster("Zombie Event", {x=posx[lowest_i], y=posy[lowest_i], z=posz[lowest_i]}, false)
if type(ret) == "number" then
addZombiesCount()
setGlobalStorageValue(201201051801, ret)
end
return type(ret) == "number"
end

 

 

Agora va em data/movements/scripts crie uma pasta chamada zombie.

Crie um arquivo .lua com o nome de oneenter e adicione isso -

 

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
if(not isPlayer(cid)) then
return true
end
if(getPlayerAccess(cid) >= ZE_ACCESS_TO_IGNORE_ARENA) then
addPlayerToZombiesArea(cid)
elseif(#getZombiesEventPlayers() < getZombiesEventPlayersLimit() and getStorage(ZE_STATUS) == 1) then
addPlayerToZombiesArea(cid)
local players_on_arena_count = #getZombiesEventPlayers()
if(players_on_arena_count == getZombiesEventPlayersLimit()) then
addZombiesEventBlockEnterPosition() -- removeTP
doSetStorage(ZE_STATUS, 2)
doBroadcastMessage("Zombie Arena Event started.")

else
doBroadcastMessage(getCreatureName(cid) .. " has entered a Zombie Arena. We still need " .. getZombiesEventPlayersLimit() - players_on_arena_count .. " players.")
end
else
doTeleportThing(cid, fromPosition, true)
addZombiesEventBlockEnterPosition()
end
return true
end

 

 

Vá em data/talkactions/scripts e crie uma pasta com o nome de zombie.

Crie um arquivo .lua com o nome de onsay e adicione isso -

 

function onSay(cid, words, param, channel)
if(getStorage(ZE_STATUS) ~= 2) then
local players_on_arena_count = #getZombiesEventPlayers()
if(param == 'force') then
if(players_on_arena_count > 0) then
setZombiesEventPlayersLimit(players_on_arena_count )
addZombiesEventBlockEnterPosition()
doSetStorage(ZE_STATUS, 2)
doBroadcastMessage("Zombie Arena Event started.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Zombies event started.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cannot start Zombies event. There is no players on arena.")
end
else
if(param ~= '' and tonumber(param) > 0) then
setZombiesEventPlayersLimit(tonumber(param))
end
removeZombiesEventBlockEnterPosition()
doSetStorage(ZE_STATUS, 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Event started.")
doPlayerBroadcastMessage(cid, "Zombie Arena Event teleport is opened. We are waiting for " .. getZombiesEventPlayersLimit() - players_on_arena_count .. " players to start.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Zombies event is already running.")
end
return true
end

 

 

Vá na pasta data/monster e crie um arquivo .xml com o nome de zombie_event, e adicione isso -

 

<monster name="Zombie Event" nameDescription="an event zombie" race="undead" experience="480" speed="170" manacost="0">
<health now="20000" max="20000"/>
<look type="311" corpse="9875"/>
<targetchange interval="5000" chance="50"/>
<strategy attack="100" defense="0"/>
<flags>
<flag summonable="0"/>
<flag attackable="1"/>
<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="1000" min="-1500" max="-2350"/>
</attacks>
<defenses armor="0" defense="0"/>
<immunities>
<immunity paralyze="1"/>
<immunity invisible="1"/>
<immunity fire="1"/>
<immunity energy="1"/>
<immunity poison="1"/>
</immunities>
<voices interval="5000" chance="10">
<voice sentence="You wont last long!"/>
<voice sentence="Mmmmh.. braains!"/>
</voices>
<script>
<event name="ZombieThink"/>
<event name="ZombieDeath"/>
</script>
<loot>
</loot>
</monster>

 

 

Agora as tags -

 

Vá em data/creaturescripts, abra creaturescripts.xml e adicione as tag's -

<event type="think" name="ZombieThink" event="script" value="zombie/onthink.lua"/>
<event type="statschange" name="ZombieAttack" event="script" value="zombie/onattack.lua"/>
<event type="death" name="ZombieDeath" event="script" value="zombie/ondeath.lua"/>

 

Vá em data/globalevents, abra globalevents.xml e adicione as tag's -

<globalevent name="ZombieGlobalThink" interval="5000" event="script" value="zombie/onthink.lua"/>
<globalevent name="ZombieGlobalStartup" type="start" event="script" value="zombie/onstartup.lua"/>

 

Vá em data/movements, abra movements.xml e adicione a tag -

<movevent type="StepIn" actionid="5555" event="script" value="zombie/onenter.lua"/>

 

Vá em data/talkactions, abra talkactions.xml e adicione a tag -

<talkaction log="yes" words="/zombiestart" access="4" event="script" value="zombie/onsay.lua"/>

 

Vá em data/monster, abra monster.xml e adicione a tag -

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

 

 

Tutorial de como configurar zombie event!

data/creturescripts/scripts/zombie/onattack.lua

function loseOnZombieArena(cid)
kickPlayerFromZombiesArea(cid)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "BOOM! You are dead.")
local players = getZombiesEventPlayers()
if(#players <= 1) then
local winner = players[1]
if(winner) then
doPlayerAddItem(winner, 2157, 5, true)
doPlayerAddItem(winner, 6119, 1, true)
doPlayerSendTextMessage(winner, MESSAGE_STATUS_CONSOLE_BLUE, "You won zombies arena event.")
doBroadcastMessage("After " .. os.time() - getPlayerZombiesEventStatus(winner) .. " seconds of fight " .. getCreatureName(winner) .. " won Zombie Arena Event in game versus " .. getStorage(ZE_ZOMBIES_SPAWNED) .. " zombies!")
kickPlayerFromZombiesArea(winner)
else
doBroadcastMessage("Zombie arena event finished! No one win?!?!?! WTF!")
end

 

 

Partes configuraveis no script no caso são os avisos do evento que não recomendo mudar na verdade os premios que no caso são esses:

doPlayerAddItem(winner, 2157, 5, true) --/ 2157= ID do item no caso golden nugguets mais você pode por o que quiser, 5= Quatidade do item a ser dado. True= no caso creio que seja para deixar essa premiação ativa ou não true = verdadeira no caso ativa para deixar a premiação inativa apenas mude o true por false ou remova a tag... Para adicionar mais premios e só adicionar mais tags como tá ai no script o outro premio no caso ali e uma boh.

 

 

Explicando - data/lib/zombie_event.lua

 

-- CONFIG
ZE_DEFAULT_NUMBER_OF_PLAYERS = 20 –- Não precisa mexer.
ZE_ACCESS_TO_IGNORE_ARENA = 4 –- Não precisa mexer.
-- POSITIONS
ZE_blockEnterItemPosition = {x=32341, y=32213, z=7} -- onde nasce o teleport?
ZE_enterPosition = {x=32154, y=32578, z=7} -- onde os players nascem dentro da arena zombie?
ZE_kickPosition = {x=32368, y=32241, z=7} -- quando morre vai para onde?
ZE_spawnFromPosition = {x=32140,y=32566,z=7} -- para sumonar zombie (de)/ aqui vc pega no rme na area do seu evento o primeiro tile da arena </\ e copia a position.
ZE_spawnToPosition = {x=32168,y=32590,z=7} -- para sumonar zombie (ate) e aqui a mesma coisa mais o tile de\/> só lembrando e o ultimo tile da arena do lado de fora não o ultimo tile do mapa.
http://imageshack.us/scaled/landing/854/semttulophp.png

 

É isso ai, espero que tenham gostado!

Créditos - Fausto32/Isbigo/AnneMotta

Editado por LuckinhaSan
Link para o comentário
Compartilhar em outros sites

Muito bom velho! Obrigado pela contribuição!

Uma dúvida: Você ou alguém já testou esse sistema pra ver se ele realmente está funcionando? Obrigado pela atenção!

 

Atenciosamente, Thiagobji.

Link para o comentário
Compartilhar em outros sites

Dois erros que achei no seu tutorial nos nomes dos arquivos dos scripts, que estão diferentes do nome da tag:

Crie um arquivo .lua com o nome de oneentere adicione isso -

Crie um arquivo .lua com o nome de onstratup e adicione isso -

Fora isso fui testar o sistema no meu servidor 8.60 e deu um erro:

erroscript.jpg

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

Dois erros que achei no seu tutorial nos nomes dos arquivos dos scripts, que estão diferentes do nome da tag:

Crie um arquivo .lua com o nome de oneentere adicione isso -

Crie um arquivo .lua com o nome de onstratup e adicione isso -

Fora isso fui testar o sistema no meu servidor 8.60 e deu um erro:

erroscript.jpg

 

Mesmo erro que o usuário de cima, perfeito aonde essa porcaria?

Link para o comentário
Compartilhar em outros sites

Opa, Vou testar !

Obrigado por compartilhar..

 

Ae funcionou tudo certin.

Mais quando eu entro no tp.. não fala na tela. e os bixo não ta sendo sumonado..

E outra tipo coloquei para 1 pessoa entrar na arena dos zombie.. o tp tinha que sumir, não ?

Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...
  • 4 weeks later...
  • 3 months later...
  • 1 month later...
×
×
  • Criar Novo...