• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    Ayuda!! Errores

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1Resuelto Re: Ayuda!! Errores Miér Jul 06, 2016 7:55 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    prueba este zombie events

    Código:
    <?xml version="1.0" encoding="UTF-8"?>
    <mod name="Zombie_Event" version="3.0" author="VirrageS" contact="otland.net" enabled="yes">

       <config name="config_zombie_event">
          <![CDATA[
             configZombieEvent = {
                storages = {
                   main = 'zombieEventMain', -- set free storage
                   player = 'zombieEventPlayer', -- set free storage
                   joining = 'zombieEventJoining', -- set free storage
                   kills = 'zombieEventKills', -- set free storage
                   exhaust = 'zombieEventExhaust', -- set free storage
                   countEvent = 'zombieEventCountEvent' -- set free storage
                },
                
                position = {x=880,y=993,z=7}, -- position to which player is teleporting
                room = {
                   from = {x=677,y=914,z=7}, -- left top corner of event room
                   to = {x=713,y=962,z=7} -- right bottom corner of event room
                },            
                
                rewards = {7958, 11366, 2346, 7450}, -- reward id which player can win (reward is random)            
                players = {
                   max = 20, -- max players in event
                   min = 9, -- min players to event start
                   minLevel = 100, -- min level to join to event
                   pvpEnabled = false -- can players hit theirselfs
                },
                
                days = {
                   ['Tuesday'] = {'21:59:20'},
                   ['Thursday'] = {'21:59:20'},
                   ['Friday'] = {'21:59:20'},
                   ['Sunday'] = {'21:59:20'}
                },
                
                spawnDelay = 2000, -- miliseconds
                amountCreatingMonsters = 5,
                monsters = {'Scratchclaw', 'Propell Zombie', 'Vile Centurion', 'Mongrel Man', 'Daidalost'}, -- name of monsters which is creating in event

                delayTime = 5.0, -- time in which players who joined to event are teleporting to teleport position [miuntes]
                startEvent = 1, -- time from teleport to start event [seconds]
                stopEvent = 9200, -- [seconds]
                text = '-PL-\nAby wygrac i otrzymac nagrode, zabij jak najwieksza liczbe zombie przez 20min lub pozostan sam na arenie.\n\n-ENG-\nTo win and get a reward, kill as many zombies for 20 minutes or stay the same in the arena.'
             }
          ]]>
       </config>
       
       <lib name="lib_zombie_event">
          <![CDATA[
             function doStopZombieEvent()
                if getStorage(configZombieEvent.storages.main) > 0 then
                   local playerTable, creatureTable = {}, {}

                   for x = configZombieEvent.room.from.x, configZombieEvent.room.to.x do
                      for y = configZombieEvent.room.from.y, configZombieEvent.room.to.y do
                         local n, i = getTileInfo({x=x, y=y, z=configZombieEvent.room.from.z}).creatures, 1
                         if n ~= 0 then
                            local v = getThingfromPos({x=x, y=y, z=configZombieEvent.room.from.z, stackpos=i}).uid
                            while v ~= 0 do
                               if isPlayer(v) then
                                  table.insert(playerTable, v)
                                  if n == #playerTable then
                                     break
                                  end
                               elseif isMonster(v) then
                                  table.insert(creatureTable, v)
                                  if n == #creatureTable then
                                     break
                                  end
                               end
                               i = i + 1
                               v = getThingfromPos({x=x, y=y, z=configZombieEvent.room.from.z, stackpos=i}).uid
                            end
                         end
                      end
                   end

                   if #playerTable > 1 then
                      table.sort(playerTable, function(a, b) return (getCreatureStorage(a, configZombieEvent.storages.kills)) > (getCreatureStorage(b, configZombieEvent.storages.kills)) end)
                      
                      local prize = math.random(#configZombieEvent.rewards)
                      
                      doTeleportThing(playerTable[1], getTownTemplePosition(getPlayerTown(playerTable[1])))
                      doCreatureSetStorage(playerTable[1], configZombieEvent.storages.kills, 0)
                      doPlayerAddItem(playerTable[1], configZombieEvent.rewards[prize], 1)
                      doCreatureAddHealth(playerTable[1], getCreatureMaxHealth(playerTable[1]) - getCreatureHealth(playerTable[1]))
                      doCreatureAddMana(playerTable[1], getCreatureMaxMana(playerTable[1]) - getCreatureMana(playerTable[1]))
                      doPlayerSendTextMessage(playerTable[1], MESSAGE_EVENT_ADVANCE, 'You win! You have received '..getItemNameById(configZombieEvent.rewards[prize])..' as reward.')
                      doBroadcastMessage('Zombie Plague Attack has finished. The winner is '..getCreatureName(playerTable[1])..'. Congratulations!')
                      doSetStorage(configZombieEvent.storages.main, -1)
                      
                      db.query("INSERT INTO `events` (`event_name`, `winner_name`, `won_item`, `time_win`) VALUES (\"Zombie\", \"" .. getCreatureName(playerTable[1]) .. "\", \"" .. getItemNameById(configZombieEvent.rewards[prize]) .. "\", " .. getStorage(configZombieEvent.storages.countEvent) ..");")

                      for i = 2, #playerTable do
                         doCreatureAddHealth(playerTable[i], getCreatureMaxHealth(playerTable[i]) - getCreatureHealth(playerTable[i]))
                         doCreatureAddMana(playerTable[i], getCreatureMaxMana(playerTable[i]) - getCreatureMana(playerTable[i]))
                         doTeleportThing(playerTable[i], getTownTemplePosition(getPlayerTown(playerTable[i])))
                         doPlayerSendTextMessage(playerTable[i], MESSAGE_EVENT_ADVANCE, 'You loss.')
                         doSendMagicEffect(getThingPos(playerTable[i]), CONST_ME_STUN)
                         doCreatureSetStorage(playerTable[i], configZombieEvent.storages.kills, 0)
                      end

                      for i = 1, #creatureTable do
                         if isMonster(creatureTable[i]) then
                            doRemoveCreature(creatureTable[i])
                         end
                      end
                      
                      doSetStorage(configZombieEvent.storages.countEvent, getStorage(configZombieEvent.storages.countEvent) + 1)
                   elseif #playerTable == 0 then
                      for i = 1, #creatureTable do
                         if isMonster(creatureTable[i]) then
                            doRemoveCreature(creatureTable[i])
                         end
                      end
                   
                      doBroadcastMessage('No one win in Zombie Plague Attack.')
                      doSetStorage(configZombieEvent.storages.main, -1)
                      doSetStorage(configZombieEvent.storages.countEvent, getStorage(configZombieEvent.storages.countEvent) + 1)
                   end
                end
             end

             function doStartZombieEvent()
                doSetStorage(configZombieEvent.storages.joining, -1)

                if configZombieEvent.players.min <= doCountPlayersZombieEvent() then
                   for _, cid in ipairs(getPlayersOnline()) do
                      if getCreatureStorage(cid, configZombieEvent.storages.player) > 0 then
                         doCreatureSetStorage(cid, configZombieEvent.storages.player, -1)
                         doTeleportThing(cid, configZombieEvent.position)
                         doCreatureSetNoMove(cid, false)
                         doRemoveCondition(cid, CONDITION_INFIGHT)
                         
                         doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Get ready. Zombie Plague Attack starts in '..configZombieEvent.startEvent..' seconds.')
                      end
                   end
                   
                   addEvent(doSetStorage, configZombieEvent.startEvent * 1000, configZombieEvent.storages.main, 1)
                   addEvent(doStopZombieEvent, configZombieEvent.stopEvent * 1000)
                   addEvent(doRepeatCheckZombieEvent, configZombieEvent.startEvent * 1000 + 2000)
                   
                   doBroadcastMessage('Zombie Plague Attack has started. LET\'S GO!')
                else
                   for _, cid in ipairs(getPlayersOnline()) do
                      if getCreatureStorage(cid, configZombieEvent.storages.player) > 0 then
                         doCreatureSetNoMove(cid, false)
                         doRemoveCondition(cid, CONDITION_INFIGHT)
                      end
                   end
                   
                   doBroadcastMessage('Zombie Plague Attack hasn\'t started beacuse there were not enough players.')
                end
             end
             
             function doRepeatCheckZombieEvent()
                if getStorage(configZombieEvent.storages.main) > 0 then
                   local playerTable, creatureTable, xTable, yTable = {}, {}, {}, {}

                   for x = configZombieEvent.room.from.x, configZombieEvent.room.to.x do
                      for y = configZombieEvent.room.from.y, configZombieEvent.room.to.y do
                         local n, i = getTileInfo({x=x, y=y, z=configZombieEvent.room.to.z}).creatures, 1
                         if n ~= 0 then
                            local v = getThingfromPos({x=x, y=y, z=configZombieEvent.room.to.z, stackpos=i}).uid
                            while v ~= 0 do
                               if isPlayer(v) then
                                  table.insert(playerTable, v)
                                  if n == #playerTable then
                                     break
                                  end
                               elseif isMonster(v) then
                                  table.insert(creatureTable, v)
                                  if n == #creatureTable then
                                     break
                                  end
                               end
                               i = i + 1
                               v = getThingfromPos({x=x, y=y, z=configZombieEvent.room.to.z, stackpos=i}).uid
                            end
                         end
                         
                         table.insert(xTable, x)
                         table.insert(yTable, y)
                      end
                   end

                   if #playerTable == 1 then
                      local prize = math.random(#configZombieEvent.rewards)
                      
                      addEvent(doTeleportThing, 200, playerTable[1], getTownTemplePosition(getPlayerTown(playerTable[1])), true)
                      doPlayerAddItem(playerTable[1], configZombieEvent.rewards[prize], 1)
                      doCreatureSetStorage(playerTable[1], configZombieEvent.storages.kills, 0)
                      doCreatureAddHealth(playerTable[1], getCreatureMaxHealth(playerTable[1]) - getCreatureHealth(playerTable[1]))
                      doCreatureAddMana(playerTable[1], getCreatureMaxMana(playerTable[1]) - getCreatureMana(playerTable[1]))
                      doPlayerSendTextMessage(playerTable[1], MESSAGE_EVENT_ADVANCE, 'You win! You have received '..getItemNameById(configZombieEvent.rewards[prize])..' as reward.')
                      doBroadcastMessage('Zombie Plague Attack has finished. The winner is '..getCreatureName(playerTable[1])..'. Congratulations.')
                      db.query("INSERT INTO `events` (`event_name`, `winner_name`, `won_item`, `time_win`) VALUES (\"Zombie\", \"" .. getCreatureName(playerTable[1]) .. "\", \""..getItemNameById(configZombieEvent.rewards[prize]).."\", "..getStorage(configZombieEvent.storages.countEvent)..");")
                      
                      for i = 1, #creatureTable do
                         if isMonster(creatureTable[i]) then
                            doRemoveCreature(creatureTable[i])
                         end
                      end
                      
                      doSetStorage(configZombieEvent.storages.main, -1)
                      doSetStorage(configZombieEvent.storages.countEvent, getStorage(configZombieEvent.storages.countEvent) + 1)
                      return
                   elseif #playerTable == 0 then
                      for i = 1, #creatureTable do
                         if isMonster(creatureTable[i]) then
                            doRemoveCreature(creatureTable[i])
                         end
                      end
                   
                      doBroadcastMessage('No one win in Zombie Plague Attack.')
                      doSetStorage(configZombieEvent.storages.main, -1)
                      
                      doSetStorage(configZombieEvent.storages.countEvent, getStorage(configZombieEvent.storages.countEvent) + 1)
                      return
                   end
                
                   local pos = {x=xTable[math.random(#xTable)], y=yTable[math.random(#yTable)], z=7}            
                   for i = 1, configZombieEvent.amountCreatingMonsters do
                      doCreateMonster(configZombieEvent.monsters[math.random(#configZombieEvent.monsters)], pos, false, false, false)
                      doSendMagicEffect(pos, CONST_ME_BATS)
                   end
                   
                   addEvent(doRepeatCheckZombieEvent, configZombieEvent.spawnDelay)
                end
             end
             
             function doCountPlayersZombieEvent()
                local x = 0
                for _, cid in ipairs(getPlayersOnline()) do
                   if getCreatureStorage(cid, configZombieEvent.storages.player) > 0 then
                      x = x + 1
                   end
                end
                return x
             end
             
             function doStartCountingZombieEvent(x)
                if configZombieEvent.delayTime-x > 0 then
                   doBroadcastMessage('Zombie Plague Attack is going to start in '..configZombieEvent.delayTime-x..' minutes. You can join to the event by saying "!zombie join".')
                   addEvent(doStartCountingZombieEvent, 60*1000, x+1)
                end
             end
          ]]>
       </lib>

       <talkaction words="!zombie" event="script">
          <![CDATA[
             domodlib("config_zombie_event")

             function onSay(cid, words, param)
                if getStorage(configZombieEvent.storages.joining) ~= 1 then
                   return doPlayerSendCancel(cid, 'Zombie Plague Attack hasn\'t started yet.')
                elseif param == '' then
                   return doPlayerSendCancel(cid, 'Command param required (say: "!zombie join" or "!zombie leave.").')
                elseif getPlayerLevel(cid) < configZombieEvent.players.minLevel then
                   return doPlayerSendCancel(cid, 'You can\'t join to the event if you don\'t have a require '..configZombieEvent.players.minLevel..' level.')
                elseif getTileInfo(getThingPos(cid)).protection ~= true then
                   return doPlayerSendCancel(cid, 'You can\'t join to the event if you aren\'t in protection zone.')
                elseif exhaustion.check(cid, configZombieEvent.storages.exhaust) ~= false then
                   return doPlayerSendCancel(cid, 'You must wait '..exhaustion.get(cid, configZombieEvent.storages.exhaust)..' seconds to use this command again.')
                end

                if param == 'join' then
                   if getCreatureStorage(cid, configZombieEvent.storages.player) > 0 then
                      return doPlayerSendCancel(cid, 'You have arleady joined to event. Wait patiently for start.')
                   elseif doCountPlayersZombieEvent() == configZombieEvent.players.max then
                      return doPlayerSendCancel(cid, 'Max players in the event have been reached.')
                   end
                   
                   doCreatureSetNoMove(cid, true)
                   doPlayerPopupFYI(cid, configZombieEvent.text)
                   doCreatureSetStorage(cid, configZombieEvent.storages.player, 1)
                   doAddCondition(cid, createConditionObject(CONDITION_INFIGHT, -1))
                   doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You have joined to Zombie Plague Attack. You can\'t move until event don\'t start. Wait patiently for the event start.')
                   doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have joined to Zombie Plague Attack.')
                elseif param == 'leave' then
                   if getCreatureStorage(cid, configZombieEvent.storages.player) <= 0 then
                      return doPlayerSendCancel(cid, 'You can\'t leave from the event if you don\'t join.')
                   end
                   
                   doCreatureSetNoMove(cid, false)
                   doCreatureSetStorage(cid, configZombieEvent.storages.player, -1)
                   doRemoveCondition(cid, CONDITION_INFIGHT)
                   doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have left from the Zombie Plague Attack.')
                end
                
                exhaustion.set(cid, configZombieEvent.storages.exhaust, 5)            
                return true
             end
          ]]>
       </talkaction>
       
       <talkaction words="!startzombie" access="5" event="script">
          <![CDATA[
             domodlib("config_zombie_event")
             domodlib("lib_zombie_event")

             function onSay(cid, words, param)
                if getStorage(configZombieEvent.storages.main) > 0 then
                   return doPlayerSendCancel(cid, 'Zombie Plague Attack is already running.')
                end
             
                doStartCountingZombieEvent(0)

                for _, pid in ipairs(getPlayersOnline()) do
                   if getCreatureStorage(pid, configZombieEvent.storages.player) > 0 then
                      doCreatureSetStorage(pid, configZombieEvent.storages.player, -1)
                      doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true)
                      doCreatureSetStorage(pid, configZombieEvent.storages.kills, 0)
                   end
                end

                doSetStorage(configZombieEvent.storages.joining, 1)
                addEvent(doStartZombieEvent, configZombieEvent.delayTime * 60 * 1000)
                return true
             end
          ]]>
       </talkaction>
       
       <talkaction words="!stopzombie" access="5" event="script">
          <![CDATA[
             domodlib("config_zombie_event")
             domodlib("lib_zombie_event")

             function onSay(cid, words, param)
                if getStorage(configZombieEvent.storages.main) > 0 then
                   doStopZombieEvent()
                else
                   doPlayerSendCancel(cid, 'You can not do it if Zombie Plague Attack is not enabled.')
                end
                return true
             end
          ]]>
       </talkaction>

       <globalevent name="Zombie_Event_Days" interval="1000" event="script">
          <![CDATA[
             domodlib("config_zombie_event")
             domodlib("lib_zombie_event")
             
             local daysOpen = {}         
             for k, v in pairs(configZombieEvent.days) do
                table.insert(daysOpen, k)
             end
             
             function onThink(interval)
                if isInArray(daysOpen, os.date('%A')) then
                   if isInArray(configZombieEvent.days[os.date('%A')], os.date('%X', os.time())) then
                      if getStorage(configZombieEvent.storages.joining) ~= 1 then
                         doStartCountingZombieEvent(0)

                         for _, pid in ipairs(getPlayersOnline()) do
                            if getCreatureStorage(pid, configZombieEvent.storages.player) > 0 then
                               doCreatureSetStorage(pid, configZombieEvent.storages.player, -1)
                               doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true)
                               doCreatureSetStorage(pid, configZombieEvent.storages.kills, 0)
                            end
                         end

                         doSetStorage(configZombieEvent.storages.joining, 1)
                         addEvent(doStartZombieEvent, configZombieEvent.delayTime * 60 * 1000)
                      end
                   end
                end
                return true
             end
          ]]>
       </globalevent>
       
       <event type="statschange" name="Zombie_Event_Dead" event="script">
          <![CDATA[
             domodlib("config_zombie_event")

             function onStatsChange(cid, attacker, type, combat, value)
                if type == 1 and getCreatureHealth(cid) <= value then
                   if isInRange(getThingPos(cid), configZombieEvent.room.from, configZombieEvent.room.to) then
                      if isPlayer(cid) then
                         doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid))
                         doCreatureAddMana(cid, getCreatureMaxMana(cid) - getCreatureMana(cid))
                         doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
                         doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You loss due to attack.')
                         
                         doSendAnimatedText(getThingPos(cid), value, TEXTCOLOR_RED)
                         doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
                         doCreatureSetStorage(cid, configZombieEvent.storages.kills, 0)
                         return false
                      end
                   end
                elseif configZombieEvent.players.pvpEnabled ~= true and isInArray({1,3}, type) and isPlayer(attacker) and isPlayer(cid) then
                   if isInRange(getThingPos(cid), configZombieEvent.room.from, configZombieEvent.room.to) then
                      return false
                   end
                end
                return true
             end
          ]]>
       </event>

       <event type="kill" name="Zombie_Event_Kill" event="script">
          <![CDATA[
             domodlib("config_zombie_event")

             function onKill(cid, target, damage, flags)
                if isInRange(getThingPos(cid), configZombieEvent.room.from, configZombieEvent.room.to) then
                   if isInArray(configZombieEvent.monsters, getCreatureName(target)) then
                      doCreatureSetStorage(cid, configZombieEvent.storages.kills, math.max(0, getCreatureStorage(cid, configZombieEvent.storages.kills) + 1))
                   end
                end
                return true
             end
          ]]>
       </event>

       <event type="login" name="Zombie_Event_Login" event="script">
          <![CDATA[
             domodlib("config_zombie_event")

             function onLogin(cid)
                if getCreatureStorage(cid, configZombieEvent.storages.player) > 0 then
                   doCreatureSetStorage(cid, configZombieEvent.storages.player, -1)
                   doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true)
                   doCreatureSetNoMove(cid, false)
                   doRemoveCondition(cid, CONDITION_INFIGHT)
                   doCreatureSetStorage(cid, configZombieEvent.storages.player.kills, 0)
                end

                registerCreatureEvent(cid, 'Zombie_Event_Dead')
                registerCreatureEvent(cid, 'Zombie_Event_Kill')
                return true
             end
          ]]>
       </event>
       
       <globalevent name="Zombie_Event_Start" type="startup" event="script">
          <![CDATA[
             domodlib("config_zombie_event")

             function onStartup()
                doSetStorage(configZombieEvent.storages.main, -1)
                doSetStorage(configZombieEvent.storages.joining, -1)
                return true
             end
          ]]>
       </globalevent>
    </mod>



    Ayuda!! Errores YNU5B25
    http://www.tibiaface.com

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).