BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

[Pedido] Npc que lleve a x lugar

[Pedido] Npc que lleve a x lugar

#1 [Pedido] Npc que lleve a x lugar el Miér Jul 30, 2014 9:14 pm

Yoiker


Miembro
Necesito un NPC que lleve a tal lugar por x tiempo y cuando ese tiempo transcurra te envíe al templo de vuelta ( Para una sola persona ) Si un player esta adentro y otro quiere entrar debe esperar a que el tiempo del otro transcurra.
Gracias



Última edición por Yoiker el Jue Jul 31, 2014 3:11 pm, editado 1 vez

#2 Re: [Pedido] Npc que lleve a x lugar el Jue Jul 31, 2014 12:50 pm

Belerofonte


Administrador
Ok, y si el jugador que ha sido teletransportado se muere o desconecta, cuando vuelva a aparecer/logear:
a) ¿Que sea llevado de vuelta al templo y se dé por finalizado su tiempo?
b) ¿Que sea llevado de vuelta al templo pero que si no ha transcurrido el tiempo, pueda volver a entrar?



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#3 Re: [Pedido] Npc que lleve a x lugar el Jue Jul 31, 2014 1:18 pm

Yoiker


Miembro
@Belerofonte
La primera opción (a) -- Si el tiempo es una hora, cuando la hora acabe el jugador sea enviado al templo

#4 Re: [Pedido] Npc que lleve a x lugar el Vie Ago 01, 2014 5:22 pm

Belerofonte


Administrador
Bien. Pondré una introducción para que las personas que busquen este script puedan ver de qué trata pues el usuario: Yoiker que lo pidió, también pidió por otro medio implementarle más cositas:

• El Npc te teletransporta a una de 3 áreas (puedes añadir/restar áreas).
• Si ya hay un jugador dentro, el Npc te impedirá pasar.
• Si el jugador que se haye dentro del área sale de la cual por medio de un portal que habrá dentro, el cual será llevado al templo y al saludar (hi) de nuevo al Npc, el cuál le impedirá volver a meterse en cualquiera de las áreas y le notificará el tiempo restante exacto que le queda en formato de horas, minutos y segundos; cada vez que lo salude.
• Si el jugador que se haye dentro del área muere o se desconecta, al volver a aparecer o conectarse, aparecerá en el templo y será notificado de que su tiempo se ha agotado.
• Si expira el tiempo del jugador que se haye dentro del área, será expulsado al templo y será notificado de ello.



NPC te lleva a un área
Primero te vas a tu te vas a tu Servidor/Data/Npc/... copias un archivo.xml cualquiera de los que haya y lo pegas en esa misma carpeta,
le cambias el nombre que tenga por el que quieras, lo abres y sutitúyes todo lo que haya adentro a cambio de lo siguiente:
Código:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="NpcTP" script="data/npc/scripts/NpcTP.lua" walkinterval="0" floorchange="0">
  <health now="100" max="100"/>
  <look type="133" head="0" body="21" legs="95" feet="87" addons="1"/>
   <parameters>
     <parameter key="message_farewell" value="Un placer."/>
     <parameter key="message_walkaway" value="Ehmmm... Adios?." />
   </parameters>
</npc>
Su contenido imagino que no hará falta que te lo explique... ¿No?

Luego te vas a tu Servidor/Data/Npc/Scripts/... mismo procedimiento anterior con un archivo.lua:
Código:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
function onCreatureAppear(cid)            npcHandler:onCreatureAppear(cid)            end
function onCreatureDisappear(cid)         npcHandler:onCreatureDisappear(cid)         end
function onCreatureSay(cid, type, msg)    npcHandler:onCreatureSay(cid, type, msg)    end
function onThink()                        npcHandler:onThink()                        end
local Topic, place = {}, {}
--------###CONFIGURACIÓN ABAJO###--------
local Config = {
Str = 255870, -- Número del Storage que gustes.
Str2 = 255871, -- Número del Storage que gustes. (distinto al anterior)
Time = 60 -- Tiempo límite que poseerá el jugador antes de ser llevado de vuelta al templo. (Contado en minutos)
               }
local Lugares = {
 ['uno'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
  Entrada = {x=939,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
  Fromp = {x=938,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
  To = {x=940,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
  },
 ['dos'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
  Entrada = {x=943,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
  Fromp = {x=942,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
  To = {x=944,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
  },
 ['tres'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
  Entrada = {x=947,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
  Fromp = {x=946,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
  To = {x=948,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
  },
}
--------###CONFIGURACIÓN ARRIBA###--------
local function Kick(cid, pos) -- Expulsión al templo.
    if isPlayer(cid) and isInRange(getThingPos(cid), place[cid].Fromp, place[cid].To) then
        doTeleportThing(cid, getPlayerMasterPos(cid))
        doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Has sido llevad" .. (getPlayerSex(cid) == 0 and "a" or "o") .. " de vuelta al templo porque tu tiempo ha expirado.") -- Mensaje que le saldrá al jugador cuando sea llevado al templo de su residencia por habérsele agotado su tiempo.
        exhaustion.set(cid, Config.Str, 0)
    end
end
local function leftTime(cid, pos) -- Aviso del tiempo restante.
    if isPlayer(cid) and isInRange(getThingPos(cid), place[cid].Fromp, place[cid].To) then
        doPlayerSendTextMessage (cid, MESSAGE_STATUS_WARNING, "Aviso:\n" .. getPlayerName(cid) .. ", te queda " .. timeString(exhaustion.get(cid, Config.Str)) .. " de tiempo restante.") -- Mensaje que le saldrá al jugador notificándole el minuto restante que le queda.
    end
end
function greetCallback(cid) -- Saludo.
  local player = getCreatureName(cid)
    if (Topic[cid] == nil) or (Topic[cid] == 0) then
        if exhaustion.get(cid, Config.Str2) == false then
            npcHandler:setMessage(MESSAGE_GREET, "Saludos " .. player .. "! Puedo llevarte a {uno}, {dos} o {tres} bla bla bla...") -- Contestación de bienvenida si no se fue por el portal de la sala.
          Topic[cid] = 1
         else
           npcHandler:setMessage(MESSAGE_GREET, "Me alegra verte de nuevo " .. player .. ". Sin embargo, por haberte ido antes sin avisar, ahora has de esperar " .. timeString(exhaustion.get(cid, Config.Str2)) .. " para poder volver a entrar.") -- Contestación de bienvenida si anteriormente se fue por el portal de la sala.
           npcHandler:releaseFocus(cid)
           npcHandler:resetNpc(cid)
        end
    end
  return true
end
function creatureSayCallback(cid, type, msg)
    if not npcHandler:isFocused(cid) then
      return false
    end
    if (Topic[cid] == 1) then
        place[cid] = Lugares[msg:lower()]
            if place[cid] then
                npcHandler:say("Perdona, no te he oido bien. Deseas que te lleve a " .. msg .. "?", cid)
              Topic[cid] = 2
            end
    end
    if (msgcontains(msg, "yes") and Topic[cid] == 2) then -- Afirmación del jugador.
        if table.getn(getPlayersInArea(place[cid].Fromp, place[cid].To)) == 0 then
            exhaustion.set(cid, Config.Str, Config.Time*60)
            npcHandler:say("Asi sea! pues.",cid) -- Contestación del Npc ante la anterior afirmación del jugador.
            doSendMagicEffect (getThingPos(cid), CONST_ME_TELEPORT)
            doTeleportThing(cid, place[cid].Entrada)
            doSendMagicEffect (getThingPos(cid), CONST_ME_TELEPORT)
            addEvent(leftTime, (Config.Time-1)*60*1000, cid)
            addEvent(Kick, (Config.Time*60)*1000, cid)
            npcHandler:releaseFocus(cid)
         else
           npcHandler:say("Solo permito a un aventurero cada vez y actualmente ya hay uno dentro. Tendrás que esperar a que se le agote su tiempo restante.",cid) -- Contestación del Npc si se da el caso en el que ya hay un jugador dentro del área.
        end
      Topic[cid] = 0
     elseif (msgcontains(msg, "no") and Topic[cid] == 2) then -- Negacion del jugador.
       npcHandler:say("Pues no me hagas perder el tiempo!",cid) -- Contestación del Npc si el jugador se niega a ser llevado al área tras haberle dicho la "palabra clave" del principio.
    end
  return true
end
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Has de editar a tu gusto:
--------###CONFIGURACIÓN ABAJO###--------
local Config = {
Str = 255870, -- Número del Storage que gustes.
Str2 = 255871, -- Número del Storage que gustes. (distinto al anterior)
Time = 60 -- Tiempo límite que poseerá el jugador antes de ser llevado de vuelta al templo. (Contado en minutos)
              }
local Lugares = {
['uno'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
 Entrada = {x=939,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
 Fromp = {x=938,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
 To = {x=940,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
 },
['dos'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
 Entrada = {x=943,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
 Fromp = {x=942,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
 To = {x=944,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
 },
['tres'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
 Entrada = {x=947,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
 Fromp = {x=946,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
 To = {x=948,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
 },
}
--------###CONFIGURACIÓN ARRIBA###--------
Si quieres añadir más zonas pues simplemente pegas más líneas como esas:
Código:
['dos'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
  Entrada = {x=943,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
  Fromp = {x=942,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
  To = {x=944,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
  },

Y editas sus correspondientes apartados, por ejemplo al haber añadido 2 más quedaría así:
local Lugares = {
['uno'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
 Entrada = {x=939,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
 Fromp = {x=938,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
 To = {x=940,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
 },
['dos'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
 Entrada = {x=943,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
 Fromp = {x=942,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
 To = {x=944,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
 },
['tres'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
 Entrada = {x=947,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
 Fromp = {x=946,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
 To = {x=948,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
 },
['cuatro'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
 Entrada = {x=747,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
 Fromp = {x=746,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
 To = {x=748,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
 },
['cinco'] = { -- Nombre de la habitación que gustes / "Palabra clave" que ha de decir el jugador(que contenga el mensaje de bienvenida).
 Entrada = {x=247,y=1043,z=8}, -- Coordenada del lugar dentro de la habitación anterior hacia donde será teletransportado el jugador.
 Fromp = {x=246,y=1042,z=8}, -- Coordenada de la esquina SUPERIOR IZQUIERDA del área.
 To = {x=248,y=1044,z=8} -- Coordenada de la esquina INFERIOR DERECHA del área.
 },

}

Y las contestaciones que dará el Npc dependiendo de cada mini-instrucción que te puse a su derecha de cada línea.

Me tomé la libertad de añadirle un aviso del tiempo restante al jugador cuando le quede 1 minuto, para evitar situaciones en las que se deje X objeto valioso tirado en el suelo, etc...



Portal de salida de la habitación
Ok, ahora por otro lado. Te vas a tu Servidor/Data/Movements/Movements.xml y en una de las líneas pegas la siguiente:
Código:
<movevent type="StepIn" actionid="8755" event="script" value="ExitRoom.lua"/>
El mismo número del ActionID que pongas es el que le has de otorgar también a los portales de cada habitación, en el Remeres.

Luego te vas a tu Servidor/Data/Movements/Scripts/... mismo procedimiento que antes con un archivo.lua:
Código:
local Config = {
Str = 255870, -- Mismo número del Storage que le pusíste a la variable "Str" del Npc.
Str2 = 255871, -- Mismo número del Storage que le pusíste a la variable "Str2" del Npc.
Time = 24 -- Tiempo límite que poseerá el jugador antes de poder volver a hablar con el Npc. (Contado en horas)
               }
function onStepIn(cid, item, fromPosition, itemEx, toPosition)
    doTeleportThing(cid, getPlayerMasterPos(cid))
    doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Has sido llevad" .. (getPlayerSex(cid) == 0 and "a" or "o") .. " de vuelta al templo al haber salido de la sala.")
    exhaustion.set(cid, Config.Str, 0)
    exhaustion.set(cid, Config.Str2, Config.Time*60*60)
  return true
end

Modificando a tu gusto:
local Config = {
Str = 255870, -- Mismo número del Storage que le pusíste a la variable "Str" del Npc.
Str2 = 255871, -- Mismo número del Storage que le pusíste a la variable "Str2" del Npc.
Time = 24 -- Tiempo límite que poseerá el jugador antes de poder volver a hablar con el Npc. (Contado en horas)
              }

Y la notificación que le saldrá al jugador de la línea:
Código:
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Has sido llevad" .. (getPlayerSex(cid) == 0 and "a" or "o") .. " de vuelta al templo al haber salido de la sala.")



Morir/Desconectarse = vuelta al Templo
Luego a tu Servidor/Data/Creaturescripts/Scripts... abres el archivo llamado Login.lua ya creado y abajo del todo, antes del:
Código:
return true
end

Pegas lo siguiente:
Código:
local Config = {
     Str = 255870, -- Mismo número del Storage que le pusíste al Npc.
      {
        from = {x=938,y=1042,z=8}, -- Misma coordenada de la esquina SUPERIOR IZQUIERDA de la PRIMERA habitación que pusíste en el script del Npc.
        to = {x=940,y=1044,z=8} -- Misma coordenada de la esquina INFERIOR DERECHA de la PRIMERA habitación que pusíste en el script del Npc.
      },
      {
        from = {x=942,y=1042,z=8}, -- Misma coordenada de la esquina SUPERIOR IZQUIERDA de la SEGUNDA habitación que pusíste en el script del Npc.
        to = {x=944,y=1044,z=8} -- Misma coordenada de la esquina INFERIOR DERECHA de la SEGUNDA habitación que pusíste en el script del Npc.
      },
      {
        from = {x=946,y=1042,z=8}, -- Misma coordenada de la esquina SUPERIOR IZQUIERDA de la TERCERA habitación que pusíste en el script del Npc.
        to = {x=948,y=1044,z=8} -- Misma coordenada de la esquina INFERIOR DERECHA de la TERCERA habitación que pusíste en el script del Npc.
      },
    }
    for _, area in ipairs(Config) do
      if isInRange(getThingPos(cid), area.from, area.to) then
          doTeleportThing(cid, getPlayerMasterPos(cid))
          doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Has sido llevad" .. (getPlayerSex(cid) == 0 and "a" or "o") .. " de vuelta al templo porque tu tiempo ha expirado.") -- Mensaje que le saldrá al jugador cuando sea llevado al templo de su residencia tras haberse desconectado/muerto estando dentro del área.
          exhaustion.set(cid, Config.Str, 0)
      end
    end
  return true
end

Si le has añadido más zonas en el otro script del Npc pues también colocas dichas zonas en éste. Ejemplo:
local Config = {
    Str = 255870, -- Mismo número del Storage que le pusíste al Npc.
     {
       from = {x=938,y=1042,z=8}, -- Misma coordenada de la esquina SUPERIOR IZQUIERDA de la PRIMERA habitación que pusíste en el script del Npc.
       to = {x=940,y=1044,z=8} -- Misma coordenada de la esquina INFERIOR DERECHA de la PRIMERA habitación que pusíste en el script del Npc.
     },
     {
       from = {x=942,y=1042,z=8}, -- Misma coordenada de la esquina SUPERIOR IZQUIERDA de la SEGUNDA habitación que pusíste en el script del Npc.
       to = {x=944,y=1044,z=8} -- Misma coordenada de la esquina INFERIOR DERECHA de la SEGUNDA habitación que pusíste en el script del Npc.
     },
     {
       from = {x=946,y=1042,z=8}, -- Misma coordenada de la esquina SUPERIOR IZQUIERDA de la TERCERA habitación que pusíste en el script del Npc.
       to = {x=948,y=1044,z=8} -- Misma coordenada de la esquina INFERIOR DERECHA de la TERCERA habitación que pusíste en el script del Npc.
     },
     {
       from = {x=746,y=1042,z=8}, -- Misma coordenada de la esquina SUPERIOR IZQUIERDA de la SEGUNDA habitación que pusíste en el script del Npc.
       to = {x=748,y=1044,z=8} -- Misma coordenada de la esquina INFERIOR DERECHA de la SEGUNDA habitación que pusíste en el script del Npc.
     },
     {
       from = {x=246,y=1042,z=8}, -- Misma coordenada de la esquina SUPERIOR IZQUIERDA de la TERCERA habitación que pusíste en el script del Npc.
       to = {x=248,y=1044,z=8} -- Misma coordenada de la esquina INFERIOR DERECHA de la TERCERA habitación que pusíste en el script del Npc.
     },

   }



Adquirir jugadores de un área & Formatos de tiempo
Por último. Tu Servidor/Data/Lib/... abres el archivo ya creado llamado 050-Functions.lua y arriba del todo pegas lo siguiente:
Código:
function getPlayersInArea(fromPos, toPos) -- CyberM was here.
  local t = {}
    for _, cid in ipairs(getPlayersOnline()) do
      if isInRange(getThingPos(cid), fromPos, toPos) then
          table.insert(t, cid)
      end
    end
  return t
end

function timeString(timeDiff)
  local dateFormat = {
    {"dia", timeDiff / 60 / 60 / 24},
    {"hora", timeDiff / 60 / 60 % 24},
    {"minuto", timeDiff / 60 % 60},
    {"segundo", timeDiff % 60}
    }
  local out = {}
    for k, t in ipairs(dateFormat) do
      local v = math.floor(t[2])
        if(v > 0) then
            table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' y ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
        end
    end
  local ret = table.concat(out)
    if ret:len() < 16 and ret:find("segundo") then
      local a, b = ret:find(" y ")
        ret = ret:sub(b+1)
    end
  return ret
end

Eso es todo. Cualquier problema o error no dudes en avisarme

PD: Este script ha sido posible gracias a la preciada ayuda de Dantarrix & CyberM



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#5 Re: [Pedido] Npc que lleve a x lugar el Vie Ago 01, 2014 5:56 pm

Dantarrix


Miembro
Ya veía que no me dabas créditos...

#6 Re: [Pedido] Npc que lleve a x lugar el Vie Ago 01, 2014 6:30 pm

Yoiker


Miembro
Gracias parceros, a los 3! ;D

Contenido patrocinado


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.

 

¿Quién está en línea?

En total hay 0 usuarios en línea: 0 Registrados, 0 Ocultos y 0 Invitado

Usuarios navegando en este foro: Ninguno

Forum Statistics

Nuestros miembros han públicado un total de posts en temas.
Actualmente hay miembros registrados.
Démosle la bienvenida al miembro más reciente,
La mayor cantidad de usuarios en línea ha sido de .