• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [GlobalEvents] problema con script

    Compartir:

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

    1[GlobalEvents] problema con script Empty [GlobalEvents] problema con script Vie Jun 03, 2022 8:14 pm

    akane

    akane
    Miembro
    Miembro
    [quote="Descripcion"]hola a todos, estoy tratando de mejorar un sistema que había aca en el foro que es el ultimate survival, estoy tratando de que este evento lo abrá automaticamente con un tp por lo que copié el esquema del evento battlefield que funciona bien en mi ot, el problema es que al momento de que aparece el tp no me lleva a ningun lugar :/ el movement funciona, ya que al tratar de entrar me tira para afuera cuanto aun no inicia el evento, pero cuando aparece el teleport para entrar al evento me sale el siguiente error:

    Código:
    [0:6:28.576] [Error - MoveEvents Interface]
    [0:6:28.578] domodlib('ultimatelib')

    [0:6:28.580] function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    [0:6:28.584]        if getStorage(Event_Tile_Close) > 0 then
    [0:6:28.586]                if getPlayerLevel(cid) < min_level then
    [0:6:28.589]                    doTeleportThing(cid,fromPosition,false)
    [0:6:28.592]                        doSendMagicEffect(fromPosition,10)
    [0:6:28.594]                        doPlayerSendTextMessage(cid,21,"Only players of level "..min_level.." are allowed to pass.")
    [0:6:28.599]                else
    [0:6:28.601]                        doTeleportThing(cid,posenter,false)
    [0:6:28.604]                        doSendMagicEffect(posenter,10)
    [0:6:28.607]                end
    [0:6:28.608]        else
    [0:6:28.609]                doTeleportThing(cid,fromPosition,false)
    [0:6:28.611]                doSendMagicEffect(fromPosition,10)
    [0:6:28.613]                doPlayerSendTextMessage(cid,21,"Come back later, event is closed now.")
    [0:6:28.617]        end
    [0:6:28.618] return true
    [0:6:28.619] end
    [0:6:28.620] :onStepIn
    [0:6:28.621] Description:
    [0:6:28.622] attempt to index a nil value
    [0:6:28.624] stack traceback:
    [0:6:28.625]    [C]: in function 'doTeleportThing'
    [0:6:28.627]    [string "LuaInterface::loadBuffer"]:10: in function <[string "LuaInterface::loadBuffer"]:3>

    este es el mod que uso

    Código:
    <?xml version="1.0" encoding="UTF-8"?>
    <!--
                    ULTIMATE SURVIVAL - Codigo feito por Omega / Pedido por vinnevinne
                 
                          Informacoes: http://www.xtibia.com/forum/topic/221415-ultimate-survival/
    -->
     
    <mod name="Ultimate Survival" version="1.0" author="Omega" enabled="yes">
    <config name="ultimatelib"><![CDATA[
    USurvival = {
      posi = {x=1489, y=897, z=5}, -- parte esquerda superior da arena
      posf = {x=1503, y=909, z=5}, -- parte direita inferior da arena
      posc = {x=1496, y=903, z=5}, -- onde o player entra na arena
     
      waves = {
      [1] = {monsters = {'dragon', 'dragon lord'}, count = 30, reward = {exp = 0, item = 2148, amount = 1, money = 100}},
      [2] = {monsters = {'dragon lord', 'frost dragon'}, count = 6, reward = {exp = 0, item = 2152, amount = 1, money = 1000}},
      [3] = {monsters = {'hydra', 'serpent spawn'}, count = 10, reward = {exp = 0, item = 2160, amount = 1, money = 10000}},
      },
      exhaust = 1 * 24 * 60 * 60, -- Tempo em segundos ate poder entrar novamente na arena (1 * 24 * 60 * 60 = 1 dia)
     
      final_reward = {item = 2160, amount = 100, exp = 10000, money = 100000},
     
      storage_ex = 607069,
      storage_wave = 607089,
      min_level = 2,
      posenter = {x=1526,y=899,z=5}, -- posição onde ele transporta o jogador
      tpPos = {x=716, y=1029, z=4}, -- onde o teleport aparece
      frompos = {x=615, y=993, z=4}, -- onde o teleport aparece
      topos = {x=621, y=998, z=4}, -- onde o teleport aparece
      limit_Time = 2 -- em minutos -- tempo que o teleport fica aberto
    }

    function isWalkable(pos)-- by Nord / editado por Omega
        if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
            return false
        elseif isCreature(getTopCreature(pos).uid) then
            return false
        elseif getTileInfo(pos).protection then
            return false
        elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
            return false
        end
    return true
    end

    function doSpawnMonsters(monsters, pos, radius, limit)
      if not pos.x or not pos.y or not pos.z or not type(monsters) == 'table' then
          return false
      end
          local radius = tonumber(radius)
      if radius > 5 then
          radius = 5
      elseif radius < 2 then
          radius = 2
      end
      if not limit or limit < 1 then
          limit = 1
      elseif limit > radius ^ 2 then
          limit = math.floor((radius*1.5) ^ 2)
      end
     
      local k = 0
      local tries = 0
      repeat
          for x = pos.x - radius, pos.x + radius do
            for y = pos.y - radius, pos.y + radius do
                if isWalkable({x=x, y=y, z=pos.z}) then
                  local monster = monsters[math.random(1, #monsters)]
                  local chance = math.random(1, 100)
                  if k == limit then
                      break
                  elseif chance <= 8 and doCreateMonster(monster, {x=x, y=y, z=pos.z}) then
                      k = k + 1
                  end
                end
            end
          end
          tries = tries + 1
      until k >= limit or tries >= 500
      return k >= limit and true or false
    end

    function getPlayersInArea(pos1,pos2)
      local players = {}
      if pos1.x and pos1.y and pos2.x and pos2.y and pos1.z == pos2.z then
          for a = pos1.x, pos2.x do
            for b = pos1.y,pos2.y do
                local pos = {x=a,y=b,z=pos1.z}
                if isPlayer(getTopCreature(pos).uid) then
                  table.insert(players,getTopCreature(pos).uid)
                end
            end
          end
          return players
      else
          return false
      end
    end 

    function getMonstersInArea(pos1,pos2)
      local players = {}
      if pos1.x and pos1.y and pos2.x and pos2.y and pos1.z == pos2.z then
          for a = pos1.x, pos2.x do
            for b = pos1.y,pos2.y do
                local pos = {x=a,y=b,z=pos1.z}
                if isMonster(getTopCreature(pos).uid) then
                  table.insert(players,getTopCreature(pos).uid)
                end
            end
          end
          return players
      else
          return false
      end
    end

    function doCleanArena()
      local monsters = getMonstersInArea(USurvival.posi, USurvival.posf)
      for _, cid in pairs(monsters) do
          doRemoveCreature(cid)
      end
    end

    function doStartWave(waveID, cid)
      if not isCreature(cid) then return false end
      if USurvival.waves[waveID] then
          wave = USurvival.waves[waveID]
          doSpawnMonsters(wave.monsters, USurvival.posc, 5, wave.count)
          doPlayerSendTextMessage(cid, 21, 'Wave '..waveID..' has started! FIGHT!')
      end
    end
    ]]></config>

    <action actionid="4599" event="script" override="yes"><![CDATA[
    domodlib('ultimatelib')
    function onUse(cid, item)
      if getPlayerStorageValue(cid, USurvival.storage_ex) <= os.time() then
          if #getPlayersInArea(USurvival.posi, USurvival.posf) == 0 then
            doCleanArena()
            doTeleportThing(cid, USurvival.posc)
            doPlayerSendTextMessage(cid, 21, 'The Ultimate Survival will Start in 10 seconds! Be ready to face your destiny!')
            addEvent(doStartWave, 10000, 1, cid)
            setPlayerStorageValue(cid, USurvival.storage_wave, 1)
            setPlayerStorageValue(cid, USurvival.storage_ex, os.time() + USurvival.exhaust)
            if item.itemid % 2 == 1 then
                doTransformItem(item.uid, item.itemid+1)
            else
                doTransformItem(item.uid, item.itemid-1)
            end
          else
            doPlayerSendCancel(cid, 'Someone is already in the arena.')
            doSendMagicEffect(getThingPos(cid), 2)
          end
      else
          local left = getPlayerStorageValue(cid, USurvival.storage_ex) - os.time()
          left = {hour = math.floor(left/3600), minutes = math.ceil((left % 3600)/60)}
          doPlayerSendCancel(cid, 'You have to wait '.. left.hour ..'h and '..left.minutes..'min.')
          doSendMagicEffect(getThingPos(cid), 2)
      end
      return true
    end
    ]]></action>

    <event type="login" name="US Login" event="script"><![CDATA[
    domodlib('ultimatelib')
    function onLogin(cid)
      registerCreatureEvent(cid,'UltimateSurvival1')
      registerCreatureEvent(cid,'UltimateSurvival2')
      if isInArea(getThingPos(cid), USurvival.posi, USurvival.posf) then
          doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
          doSendMagicEffect(getThingPos(cid), 10)
      end
      return true
    end
    ]]></event>

    <event type="kill" name="UltimateSurvival1" event="script"><![CDATA[
    domodlib('ultimatelib')
    function onKill(cid, target)
      if isInArea(getThingPos(cid), USurvival.posi, USurvival.posf) then
          if #getMonstersInArea(USurvival.posi, USurvival.posf) == 1 then
            local wave = getPlayerStorageValue(cid, USurvival.storage_wave)
            if USurvival.waves[wave+1] then
                setPlayerStorageValue(cid, USurvival.storage_wave, wave + 1)
                addEvent(doStartWave, 5000, wave + 1, cid)
                doPlayerSendTextMessage(cid, 22, 'Congratulations! Next wave will start in 5 seconds!')
            else
                doPlayerSendTextMessage(cid, 22, 'CONGRATULATIONS! YOU HAVE BEATEN THE ULTIMATE SURVIVAL!')
                local reward = USurvival.final_reward
                if reward.item then
                  doPlayerAddItem(cid, reward.item, (reward.amount or 1), false)
                end
                if reward.exp then
                  doPlayerAddExp(cid, reward.exp)
                end
                if reward.money then
                  doPlayerAddMoney(cid, reward.money)
                end
                local medal = doPlayerAddItem(cid, 5785, 1, false)
                if medal then
                  doItemSetAttribute(medal, 'description', 'This was awarded to '..getCreatureName(cid)..' for completing the Ultimate Survival.')
                  doItemSetAttribute(medal,'name', 'Ultimate Survival Medal')
                end
                doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
            end
          end
      end
      return true
    end

    ]]></event>

    <event type="preparedeath" name="UltimateSurvival2" event="script"><![CDATA[
    domodlib('ultimatelib')
    function onPrepareDeath(cid, killers)
      if isInArea(getThingPos(cid), USurvival.posi, USurvival.posf) then
          doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true)
          doRemoveConditions(cid, false)
          doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
          doPlayerSendTextMessage(cid, 21, 'Too bad, you couldn\'t defeat the Ultimate Survival... Better luck next time.')
          local reward = USurvival.waves[getPlayerStorageValue(cid, USurvival.storage_wave)].reward
          if reward.item then
            doPlayerAddItem(cid, reward.item, reward.amount or 1)
          end
          if reward.exp then
            doPlayerAddExp(cid, reward.exp)
          end
          if reward.money then
            doPlayerAddMoney(cid, reward.money)
          end
          return false
      end
      return true
    end
    ]]></event>

    <globalevent name="UltimateSurvival" interval="60000" event="script"><![CDATA[
    domodlib('ultimatelib')
    function onThink(interval, lastExecution)
    USurvivalDays = {
    ["Sunday"] = {
    ["16:00"] = {players = 12},
    ["19:00"] = {players = 12}
    },
    ["Monday"] = {
    ["16:00"] = {players = 12},
    ["19:00"] = {players = 12}
    },
    ["Tuesday"] = {
    ["16:00"] = {players = 12},
    ["19:00"] = {players = 12}
    },
    ["Wednesday"] = {
    ["16:00"] = {players = 12},
    ["19:00"] = {players = 12}
    },
    ["Thursday"] = {
    ["16:00"] = {players = 12},
    ["19:00"] = {players = 12}
    },
    ["Friday"] = {
    ["00:06"] = {players = 2},
    ["19:00"] = {players = 12}
    },
    ["Saturday"] = {
    ["00:06"] = {players = 2},
    ["19:00"] = {players = 12}
    },
    }
    if USurvivalDays[os.date("%A")] then
    hours = tostring(os.date("%X")):sub(1, 5)
    tb = USurvivalDays[os.date("%A")][hours]
    if tb and (tb.players % 2 == 0) then
    local tp = doCreateItem(1387, 1, USurvival.tpPos)
    CheckEvent(USurvival.limit_Time)
    doBroadcastMessage("The event BattleField was opened")
    return setGlobalStorageValue(USurvival.storage_count, tb.players)
    end
    end
    return true
    end
    ]]></globalevent>

    <globalevent name="Ultimatestart" type="start" event="script"><![CDATA[
    domodlib('ultimatelib')
    function onStartup()
    setGlobalStorageValue(USurvival.posenter.storage, 0)
    setGlobalStorageValue(USurvival.storage_count, 0)
    return true
    end
    ]]></globalevent>
    <movevent type="StepIn" actionid="48000" event="script"><![CDATA[
    domodlib('ultimatelib')

    function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
            if getStorage(Event_Tile_Close) > 0 then
                    if getPlayerLevel(cid) < min_level then
                      doTeleportThing(cid,fromPosition,false)
                            doSendMagicEffect(fromPosition,10)
                            doPlayerSendTextMessage(cid,21,"Only players of level "..min_level.." are allowed to pass.")
                    else
                            doTeleportThing(cid,posenter,false)
                            doSendMagicEffect(posenter,10)
                    end
            else
                    doTeleportThing(cid,fromPosition,false)
                    doSendMagicEffect(fromPosition,10)
                    doPlayerSendTextMessage(cid,21,"Come back later, event is closed now.")
            end
    return true
    end
    ]]></movevent>
    </mod>

    estoy usando tfs 0.4

    3 participantes

    2[GlobalEvents] problema con script Empty Re: [GlobalEvents] problema con script Mar Jun 07, 2022 12:23 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    no sera tu problema esto
    Código:

    if getStorage(Event_Tile_Close) > 0 then

    porque par lo player es getPlayerStorage(



    [GlobalEvents] problema con script YNU5B25
    3 participantes
    http://www.tibiaface.com

    3[GlobalEvents] problema con script Empty Re: [GlobalEvents] problema con script Mar Jun 07, 2022 3:21 pm

    akane

    akane
    Miembro
    Miembro
    no me sale error, pero sigue sin teletransportarme :/

    3 participantes

    4[GlobalEvents] problema con script Empty Re: [GlobalEvents] problema con script Mar Jun 07, 2022 9:36 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    al marcar este error

    Código:
    attempt to index a nil value
    [0:6:28.624] stack traceback:
    [0:6:28.625]    [C]: in function 'doTeleportThing'

    quiere decir que tiene un valor para comparar esto quiere decir que segun la posicion no es correcta o no existe



    [GlobalEvents] problema con script YNU5B25
    3 participantes
    http://www.tibiaface.com

    5[GlobalEvents] problema con script Empty Re: [GlobalEvents] problema con script Miér Jun 08, 2022 10:06 am

    SoyFabi

    SoyFabi
    Miembro
    Miembro
    [Tienes que estar registrado y conectado para ver este vínculo]

    Código:
    doTeleportThing(cid,fromPosition,false)

    En ese caso no lo llevara a ningún lado por "fromPosition"
    La función fromPosition hace que al meterte al portal te devuelva exactamente el sqm donde estabas.

    Por lo que cambiemos el fromPosition a la direccion donde lo queremos llevar.
    En este caso ya el scripts tenia la ubicación de entrar por lo que en vez de fromPos ahora es USurvival.posenter y lo cambiamos a true, que se ponga cierto al entrar.

    posenter = {x=1526,y=899,z=5}, -- posição onde ele transporta o jogador

    Código:
    doTeleportThing(cid, USurvival.posenter, true)

    3 participantes

    6[GlobalEvents] problema con script Empty Re: [GlobalEvents] problema con script Miér Jun 08, 2022 11:52 am

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    bueno es a lo que yo me refiero

    Código:
     doTeleportThing(cid,posenter,false)

    no lleva a ningun lado por que no hay valor que comparar

    Código:
    USurvival.posenter



    [GlobalEvents] problema con script YNU5B25
    3 participantes
    http://www.tibiaface.com

    7[GlobalEvents] problema con script Empty Re: [GlobalEvents] problema con script Miér Jun 08, 2022 1:19 pm

    akane

    akane
    Miembro
    Miembro
    muchas gracias a los 2 igualmente, ahí terminó funcionando y aparte pude lograr de que el tp se cerrara despues de un tiempo por lo que el evento quedó 100% automático (y)

    3 participantes

    Contenido patrocinado


    3 participantes

    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).