Ir para conteúdo
  • 0

[PEDIDO/AJUDA] Monster Zombie Event


jvcasarin

Pergunta

Bom gente, coloquei um zombie event no meu server, está tudo ok, menos os Zombies.. É assim:

 

 

1- O Zombie NÃO pode ser atacado;

2- O Zombie NÃO mata o player em 1 hit(estou com DONATE Set, mas devia funcionar) tem que matar o player ao encostar no mesmo;

3- Como um KNIGHT vai participar do evento, se o zombie tem que matar o player em 1 hit? Somente encostando no player;

4- Como configuro para quando sobrar apenas 1 player na arena, acabar o evento e ele receber os prêmios, depois de 3 segundos ?

 

 

 

Ai vai o meu evento:

 

creaturescripts/scripts/login.lua

 

registerCreatureEvent(cid, "zombieevent")

 

creaturescripts/scripts/zombieevent.lua

 

 

local config = {
playerCount = 2001, -- Storage dos players que entram e sai do evento
goblet = 5805, -- Troféu que vai pro vencedor do evento
rewards = {2195, 2152, 2160}, -- Recompensas.
moneyReward = {2160, 10, 1}, -- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}
-- Area que o zumbi vai spawnar
fromPosition = {x = 543, y = 578, z = 7}, -- top de fromPosition até
toPosition = {x = 577, y = 600, z = 7} -- em baixo toPostion
}
function onStatsChange(cid, attacker, type, combat, value)
if isPlayer(cid) and isMonster(attacker) then
if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then
if getGlobalStorageValue(config.playerCount) >= 2 then
doBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED)
local corpse = doCreateItem(3058, 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)
setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)-1)
elseif getGlobalStorageValue(config.playerCount) == 1 then
if isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) then
doBroadcastMessage(getPlayerName(cid) .. " won the Zombie event! Congratulations!", MESSAGE_STATUS_WARNING)
local goblet = doPlayerAddItem(cid, config.goblet, 1)
doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(cid) .. " for winning the Zombie event.")
local corpse = doCreateItem(3058, 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)
for _,items in ipairs(config.rewards) do
doPlayerAddItem(cid, items, 1)
end
if config.moneyReward[3] == 1 then
doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])
end
end
for x = config.fromPosition.x, config.toPosition.x do
for y = config.fromPosition.y, config.toPosition.y do
for z = config.fromPosition.z, config.toPosition.z do
areapos = {x = x, y = y, z = z, stackpos = 253}
getMonsters = getThingfromPos(areapos)
if isMonster(getMonsters.uid) then
doRemoveCreature(getMonsters.uid)
end
end
end
end
end
return false
end
end
return true
end

creaturescripts/creaturescripts.xml

 

<!-- ZOMBIE EVENT -->

<event type="statschange" name="zombieevent" event="script" value="zombieevent.lua"/>

globalevents/scripts/fechazombie.lua

 

 

local teleportPos = {x = 652, y = 1020, z = 7, stackpos = 1} -- Posição em que se abre o teleport
local teleportId = 1387
function onTimer()
for i = 1, 255 do
teleportPos.stackpos = i
if getThingFromPos(teleportPos).itemid == teleportId then
doRemoveItem(getThingFromPos(teleportPos).uid, 1)
end
end
return true
end

globalevents/scripts/zombieevent.lua

local config = { semana_mes = "semana",
days = {1,2,3,4,5,6,7}, -- Dia das semanas que irá acontecer o evento
goblet = 5805, -- Troféu que vai pro vencedor do evento
rewards = {2195, 2152, 2160}, -- Recompensas.
moneyReward = {2160, 10, 1},-- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}
playerCount = 2001, -- Storage dos players que entram e sai do evento
zombieCount = 2002, -- Storage do zombie do event
teleportActionId = 2008, -- Action ID do teleport
teleportPosition = {x = 652, y = 1020, z = 7, stackpos = 1}, -- Onde o teleport é criado
teleportToPosition = {x = 559, y = 589, z = 7}, -- Pra onde será teleportado
teleportId = 1387, -- ID do teleporte
timeToStartEvent = 2, -- Minutos que o portal irá ficar aberto até os player entrarem
timeBetweenSpawns = 20, -- Segundos dps do evento ser startado começarem a aparecer os zombie
zombieName = "event zombie", -- Nome do zombie sumonado
playersNeededToStartEvent = 3, -- Players necessários pro evento ser iniciado
-- Area que o zumbi vai spawnar
fromPosition = {x = 543, y = 578, z = 7}, -- top de fromPosition até
toPosition = {x = 577, y = 600, z = 7} -- -- em baixo toPostion
}
function onTime()
local time = os.date("*t")
if (config.semana_mes == "semana" and isInArray(config.days,time.wday)) or (config.semana_mes == "mes" and isInArray(config.days,time.day)) or config.semana_mes == "" then
local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
doItemSetAttribute(tp, "aid", config.teleportActionId)
doBroadcastMessage("Zombie event starting in " .. config.timeToStartEvent .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)
setGlobalStorageValue(config.playerCount, 0)
setGlobalStorageValue(config.zombieCount, 0)
addEvent(startEvent, config.timeToStartEvent * 1000 * 60)
end
return TRUE
end
function startEvent()
local fromp, top = config.fromPosition, config.toPosition
if getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent then
addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
doBroadcastMessage("Good luck in the zombie event people! The teleport has closed!", MESSAGE_STATUS_WARNING)
for x = fromp.x, top.x do
for y = fromp.y, top.y do
for z = fromp.z, top.z do
areapos = {x = x, y = y, z = z, stackpos = 253}
getPlayers = getThingfromPos(areapos)
if isPlayer(getPlayers.uid) then
doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. config.timeBetweenSpawns .. " seconds! Good luck!")
pvgaylord()
end
end
end
end
else
doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)
for x = fromp.x, top.x do
for y = fromp.y, top.y do
for z = fromp.z, top.z do
areapos = {x = x, y = y, z = z, stackpos = 253}
getPlayers = getThingfromPos(areapos)
if isPlayer(getPlayers.uid) then
doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)
doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)
end
end
end
end
end
end
function spawnZombie()
if getGlobalStorageValue(config.playerCount) >= 2 then
pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}
doSummonCreature(config.zombieName, pos)
doSendMagicEffect(pos, CONST_ME_MORTAREA)
setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)
doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(config.zombieCount) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED)
addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
else
local fromp, top = config.fromPosition, config.toPosition
for x = fromp.x, top.x do
for y = fromp.y, top.y do
for z = fromp.z, top.z do
areapos = {x = x, y = y, z = z, stackpos = 253}
cid = getThingfromPos(areapos).uid
if isPlayer(cid) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
doBroadcastMessage(getCreatureName(cid)..' has survived at zombie event!')
for _,items in ipairs(config.rewards) do
doPlayerAddItem(cid, items, 1)
end
if config.moneyReward[3] == 1 then
doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])
end
doBroadcastMessage(getPlayerName(cid) .. " won the Zombie event! Congratulations!", MESSAGE_STATUS_WARNING)
local goblet = doPlayerAddItem(cid, config.goblet, 1)
doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(cid) .. " for winning the Zombie event.")
elseif isMonster(cid) then
doRemoveCreature(cid)
end
end
end
end
end
end
function pvgaylord()
local fromp, top, p, m = config.fromPosition, config.toPosition, 0, 0
for x = fromp.x, top.x do
for y = fromp.y, top.y do
for z = fromp.z, top.z do
local areapos = {x = x, y = y, z = z, stackpos = 253}
local cid = getThingfromPos(areapos).uid
if isPlayer(cid) then
p = p+1
elseif isMonster(cid) then
m = m+1
end
end
end
end
if p ~= getGlobalStorageValue(config.playerCount) then
setGlobalStorageValue(config.playerCount, p)
end
if p < 2 then
return true
end
addEvent(pvgaylord,100,nil)
end

globalevents/globalevents.xml

 

<globalevent name="zombieevent" time="23:41" event="script" value="zombieevent.lua"/>

<globalevent name="zombieventt" time="23:43" event="script" value="fechazombie.lua"/>

 

 

monsters/Zombie event.xml

 

 

<?xml version="1.0" encoding="UTF-8"?><monster name="Event Zombie" nameDescription="an event zombie" 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>

monsters.xml

 

<!-- ZombieEvent -->

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

 

movements/scripts/zombieevent.lua

local config = { playerCount = 2001, -- Storage do players do evento

maxPlayers = 20, -- Maximo de players pra partiparem do evento
minLevel = 17 -- Level minimo pra entrar no evento
}
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
if getPlayerLevel(cid) < config.minLevel then
addEvent(tpBack, 1000, cid, fromPosition)
doPlayerSendCancel(cid, "You need to be at least level " .. config.minLevel .. ".")
return false
end
if getGlobalStorageValue(config.playerCount) < config.maxPlayers then
setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)+1)
if getGlobalStorageValue(config.playerCount) == config.maxPlayers then
doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(config.playerCount) .. " players]! The event will soon start.")
else
doBroadcastMessage(getPlayerName(cid) .. " entered the Zombie event! Currently " .. getGlobalStorageValue(config.playerCount) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED)
end
else
addEvent(tpBack, 1000, cid, fromPosition)
doPlayerSendCancel(cid, "The event is full. There is already " .. config.maxPlayers .. " players participating in the quest.")
return false
end
print(getStorage(config.playerCount) .. " Players in the zombie event.")
return true
end
function tpBack(cid, fromPosition)
doTeleportThing(cid, fromPosition, true)
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
end

movements/movements.xml

 

<!-- ZOMBIE event -->

<movevent type="StepIn" actionid="2008" event="script" value="zombieevent.lua"/>

 

Créditos:

 

Smart Maxx

 

 

 

 

POR FAVOR ME AJUDEM!


up


up

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

×
×
  • Criar Novo...