Lua Problem with my zombie mod

Godz4t4n1c

Member
Joined
Sep 9, 2015
Messages
47
Reaction score
1
Good I have a problem with my zombie mod, it came to me by default and I think it never activates, the problem if I install a zombie system in all the files of the data, it pulls me a lot of bug because my server is War, I could be given a hand with my mod?

Lua:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Zombie Event" version="1.00" author="kawon" contact="otland.net" enabled="yes">
<globalevent name="zombieevent" time="19:09" event="buffer"><![CDATA[
local config = {
    playerCount = 2001, -- Global storage for counting the players left/entered in the event
    zombieCount = 2002, -- Global storage for counting the zombies in the event
    teleportActionId = 2000, -- Action id of the teleport needed for the movement script
    teleportPosition = {x = 1008, y = 1003, z = 7, stackpos = 1}, -- Where the teleport will be created
    teleportToPosition = {x = 1536, y = 389, z = 7}, -- Where the teleport will take you
    teleportId = 1387, -- Id of the teleport
    timeToStartEvent = 2, -- Minutes, after these minutes the teleport will be removed and the event will be declared started
    timeBetweenSpawns = 30, -- Seconds between each spawn of zombie
    zombieName = "event zombie", -- Name of the zombie that should be summoned
    playersNeededToStartEvent = 2, -- Players needed before the zombies can spawn.
   
    -- Should be the same as in the creaturescript!
    -- The zombies will spawn randomly inside this area
    fromPosition = {x = 1518, y = 371, z = 7}, -- top left cornor of the playground
    toPosition = {x = 1553, y = 404, z = 7}, -- bottom right cornor of the playground
    }

function onTimer()
    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)
    print(getGlobalStorageValue(2001))
end

function startEvent()
    local get = getThingfromPos(config.teleportPosition)
    if get.itemid == config.teleportId then
        doRemoveItem(get.uid, 1)
    end
   
    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!")
                    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)
    end
end       
    ]]></globalevent>
   
<movevent type="StepIn" actionid="2000" event="buffer"><![CDATA[
local config = {
    playerCount = 2001, -- Global storage for counting the players in the event
    maxPlayers = 10, -- Max players who can participate
   
    }
   
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    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       
    ]]></movevent>
<event type="statschange" name="zombieevent" event="script"><![CDATA[
local config = {
    playerCount = 2001, -- Global storage for counting the players left/entered in the event
   
    goblet = 5805, -- id of the gold goblet you'll get when finishing the event.
    rewards = {2195, 2152, 2160}, -- You will get this +  a gold goblet with your name on.
    --        {moneyId, count, using? 1 for using moneyReward, 0 for not using.}
    moneyReward = {2160, 10, 1}, -- second collumn(count) 0 if you don't want money to be used. or a stackable item you want more than 1 of.
   
    -- Should be same as in the globalevent!
    -- The zombies will spawn randomly inside this area
    fromPosition = {x = 1518, y = 371, z = 7}, -- top left cornor of the playground
    toPosition = {x = 1553, y = 404, z = 7}, -- bottom right cornor of the playground
    }

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
    ]]></event>

            <event type="login" name="zombieRegister" event="script"><![CDATA[
        function onLogin(cid)
    registerCreatureEvent(cid, "zombieevent")
        return true
end]]></event>
</mod>
could you also help me link to this script so that it is activated only?


Lua:
local tp = {
    itemID = 1387, -- Id del objeto que aparecerá haciendo de teleport.
    createPos = {x = 1200, y = 1135, z = 7}, -- Coordenada del lugar donde será creado el cual.
    takePlayer = {x = 232, y = 1526, z = 7}, -- Coordenada del lugar donde llevará a los jugadores.
    belero = { -- Efecto Mágico que aparecerá en el portal al...
      CONST_ME_TELEPORT, -- ...abrirse.
      CONST_ME_LOSEENERGY, -- ...cerrarse.
    },
    timePortal = { -- Tiempo que el portal permanecerá...
      opens = 10, -- ...abierto. (contado en Minutos)
      close = 18, -- ...cerrado. (contado en Horas)
    },
    countColor = COLOR_RED, -- Color de la cuenta atrás que transcurrirá hasta abrirse.

    msgabierto = "El Portal del Evento Run esta abierto!!!!, Corre que tienes 1 minuto para entrar!!",
    msgcerrado = "El evento run se acaba de cerrar!, se volvera abrir dentro de 3 horas.",
  }

function AnimatedTime(timeDiff, pos, color)
    if isNumber(timeDiff) then
      local dateFormat = {
        {"h", timeDiff / 60 / 60 % 24},
        {"m", timeDiff / 60 % 60},
        {"s", timeDiff % 60}
      }

      local out = {}
        for k, t in ipairs(dateFormat) do
          local v = math.floor(t[2])
            if(v > 0) then
                table.insert(out, v .. t[1])
            end
        end
      local ret = table.concat(out)

      return doSendAnimatedText(pos, ret, color)
    end
end

function CloseTP()
  local t = getTileItemById(tp.createPos, tp.itemID).uid
    if t > 0 then
        doRemoveItem(t)
        doSendMagicEffect (tp.createPos, tp.belero[2])
        doBroadcastMessage(tp.msgcerrado, MESSAGE_EVENT_ADVANCE)
    end

    for i = 0, tp.timePortal.close * 10 * 60 do
      local c = tp.timePortal.close * 10 * 60 - i
        addEvent(AnimatedTime, i * 1000, tostring(c), tp.createPos, tp.countColor)
    end
end

function OpenTP()
    doSendMagicEffect (tp.createPos, tp.belero[1])
    doCreateTeleport (tp.itemID, tp.takePlayer, tp.createPos)
    doBroadcastMessage(tp.msgabierto, MESSAGE_EVENT_ADVANCE)

    for i = 0, tp.timePortal.opens * 10 do
      local c = tp.timePortal.opens * 10 - i
        addEvent(AnimatedTime, i * 1000, tostring(c), tp.createPos, tp.countColor)
    end
    addEvent (CloseTP, tp.timePortal.opens * 10 * 1000)

    addEvent (OpenTP, (tp.timePortal.close * 10 * 60 * 1000) + (tp.timePortal.opens * 10 * 1000))
  return true
end

function onStartup()
    for i = 0, tp.timePortal.close * 10 * 60 do
      local c = tp.timePortal.close * 10 * 60 - i
        addEvent(AnimatedTime, i * 1000, tostring(c), tp.createPos, tp.countColor)
    end

    addEvent(OpenTP, tp.timePortal.close * 10 * 60 * 1000)
end
 
OP
G

Godz4t4n1c

Member
Joined
Sep 9, 2015
Messages
47
Reaction score
1
Well I think this is the version:

[1/2/2018 13:35:35] The OTX Server Version: (2.X.S - 1) - Codename: (Crying Damson)
[1/2/2018 13:35:35] Compiled with Microsoft Visual C++ version 12.0 for arch 32 Bits at Sep 1 2015 15:56:14

[1/2/2018 13:35:35] A server developed by: Mattyx14, Comedinha and The Forgotten Server Developers.
[1/2/2018 13:35:35] Visit our forums for updates, support, and resources: blacktibia.org - tibiaking.com - otland.net - otfans.net
 
Top