BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

[Pedido] Tp con limite de players

[Pedido] Tp con limite de players

#1 [Pedido] Tp con limite de players el Mar Mar 17, 2015 2:10 am

Godz4t4n1c


Miembro
Saludos,

Como dice el "Titulo" tp con limite de players configurable
Bueno es un script que creas un tp en RME poniendole action o uniqued
El punto es que entra una cierta cantidad de players entran al tp y cuando quiere entrar más gente al tp te diga "Losiento solo 1 players puede entrar", creo que es fácil ese script

Gracias

#2 Re: [Pedido] Tp con limite de players el Mar Mar 17, 2015 12:42 pm

Belerofonte


Administrador
Script actualizado y comentario re-editado.

Servidor/Data/Movements/... Movements.xml
<movevent type="StepIn" uniqueid="4863; 4864" event="script" value="limiTp.lua"/>
<movevent type="AddItem" tileitem="1" uniqueid="4863; 4864" event="script" value="limiTp.lua" />
Ahí pones los UniqueID que gustes(que no estés usando ya en otro script), los cuales los has de poner también en los Teleport de Entrada & Salida con el RME.

Servidor/Data/Movements/Scripts/... limiTp.lua
Código:
local c = {
    limit = 5, -- Límite de jugadores que podrán entrar.
    globalStr = 4450983, -- Número del StorageKey que gustes.
    msgCancel = 'No pueden entrar mas aventureros.', -- 'Mensaje' cuando ya se haya llenado el límite de jugadores anterior.

    Entrada = {
      uid = 4863, -- UniqueID del teleport de ENTRADA.
      go = {x = 1070, y = 1030, z = 7}, -- Coordenada del lugar hacia donde llevará el teleport de ENTRADA.
    },

    Salida = {
      uid = 4864, -- UniqueID del teleport de SALIDA.
      go = {x = 1070, y = 1033, z = 7}, -- Coordenada del lugar hacia donde llevará el teleport de SALIDA.
    },
  }

  local teleport = {
    [c.Entrada.uid] = {c.Entrada.go, 1},
    [c.Salida.uid] = {c.Salida.go, -1},
  }

local function SetLimitPlayers(cid, item, storage, entrada, salida)
    if getGlobalStorageValue(storage) < 0 or getGlobalStorageValue(storage) == nil then
        setGlobalStorageValue(storage, 0)
    end

  local v = teleport[item.uid]
    if v then
        setGlobalStorageValue(storage, getGlobalStorageValue(storage) + v[2])
    end

  return true
end

function onStepIn(cid, item, fromPos, toPos)
  local v = teleport[item.uid]

    if isPlayer(cid) then
        if v then
            if item.uid == c.Entrada.uid and getGlobalStorageValue(c.globalStr) >= c.limit then
                doPlayerSendCancel(cid, c.msgCancel)
                doTeleportThing(cid, toPos, false)
              return true
            end

            SetLimitPlayers(cid, item, c.globalStr, c.Entrada.uid, c.Salida.uid)
            doSendMagicEffect(fromPos, CONST_ME_TELEPORT)
            doTeleportThing(cid, v[1])
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
        end

     else
       doTeleportThing(cid, toPos, false)
    end

  return true
end

function onAddItem(moveitem, tileitem, position, cid)
  local v = teleport[tileitem.uid]

    if v then
        doSendMagicEffect(position, CONST_ME_TELEPORT)
        doTeleportThing(moveitem.uid, v[1])
        doSendMagicEffect(v[1], CONST_ME_TELEPORT)
    end

  return true
end

Zona (básica) a editar:
local c = {
   limit = 5, -- Límite de jugadores que podrán entrar.
   globalStr = 4450983, -- Número del StorageKey que gustes.
   msgCancel = 'No pueden entrar mas aventureros.', -- 'Mensaje' cuando ya se haya llenado el límite de jugadores anterior.

   Entrada = {
     uid = 4863, -- UniqueID del teleport de ENTRADA.
     go = {x = 1070, y = 1030, z = 7}, -- Coordenada del lugar hacia donde llevará el teleport de ENTRADA.
   },

   Salida = {
     uid = 4864, -- UniqueID del teleport de SALIDA.
     go = {x = 1070, y = 1033, z = 7}, -- Coordenada del lugar hacia donde llevará el teleport de SALIDA.
   },
 }

En el remeres colocas ambos teleports, de entrada y salida donde quieras, les colocas sus respectivos uniqueids que le hayas puesto en el script, y pones No Logout Tool a la zona donde han de entrar los jugadores para que no se puedan desconectar estando dentro y, con ello, no cause mal funcionamiento ;D

Previsualización:
[Tienes que estar registrado y conectado para ver esa imagen]
(Ahí le puse como límite 2 jugadores para no tener que estar manejando a tantos xD)

Como así lo pediste, así lo hice. Pero se puede desarrollar más el script, por ejemplo, se puede convertir en una sala de espera de evento...
- Poner otro teleport dentro pero de salida.
- Que salga una pequeña notificación encima del teleport de entrada, informando del número de jugadores que faltan para llegar al límite, independientemente de que se vayan algunos de los que estaban dentro.
- Que cuando se llegue al límite de jugadores dentro de la sala de espera, todos ellos sean teletransportados a otro lugar. Los teleport de entrada y salida se remuevan. Y vuelvan a aparecer cuando tú decidas o se ejecute otra parte del script.

Antes de decirme nada, testéalo bien. Cualquier error, problema, o duda que tengas respecto al cual: no dudes en comentarlo. Junto con este mismo script pero tal cual lo editaste para tu servidor.



Última edición por Belerofonte el Mar Mar 24, 2015 8:56 am, editado 2 veces



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] Tp con limite de players el Mar Mar 17, 2015 3:30 pm

rilir


Nuevo
MMmm... Belerofonte no me sirvio el script me aperecen las letras que ya esta lleno pero igual se transporta
[Tienes que estar registrado y conectado para ver esa imagen]
Le puse limite 2 pero igual pasa el tercero....

#4 Re: [Pedido] Tp con limite de players el Mar Mar 17, 2015 4:02 pm

Godz4t4n1c


Miembro
@rilir

Verifica bien las esquinas que pusiste y el limite de players al entrar
Porque ami si me funciono
Código:
 local c = {
  limit = 5, -- Límite de jugadores que podrán entrar.
  msgCancel = 'No pueden entrar mas aventureros.', -- 'Mensaje' cuando ya se haya llenado el límite de jugadores anterior.

  area = {
    From = {x = 1069, y = 1027, z = 6}, -- Coordenada de la ESQUINA SUPERIOR IZQUIERDA del área al que son teletransportados.
    To = {x = 1071, y = 1030, z = 7}, -- Coordenada de la ESQUINA INFERIOR DERECHA del área al que son teletransportados.
  },

  pos = {x = 1070, y = 1030, z = 7}, -- Coordenada del lugar donde será teletransportado el jugador (Dentro del área anterior)
 }
Gracias Belerofonte

#5 Re: [Pedido] Tp con limite de players el Mar Mar 17, 2015 4:04 pm

Anyone


Miembro
Bueno Este Script se ve Útil pero  BELEROFONTE lo podrías poner como sala de espera para un evento :c si no se puede pues no :C
igual te doy +REP

#6 Re: [Pedido] Tp con limite de players el Mar Mar 17, 2015 4:37 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:MMmm... Belerofonte no me sirvio el script me aperecen las letras que ya esta lleno pero igual se transporta
Le puse limite 2 pero igual pasa el tercero....
En el remeres.
Al teleport no le tienes que editar ninguna coordenada, porque ya le puse en el script que teletransporte. ¿Lo hiciste así? En tal caso, es solamente el uniqueid.
Al no poner coordenadas cuando presiones "OK" te saldrá otro mensaje de advertencia avisándote de ello, y ahí has de clikcar en "NO".



Última edición por Belerofonte el Miér Mar 18, 2015 2:57 pm, editado 2 veces



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]

#7 Re: [Pedido] Tp con limite de players el Mar Mar 17, 2015 6:56 pm

rilir


Nuevo
jajaja ya me sirvio! era que en remers le ponia las cordenadas muchas gracias Belerofonte!! muy buen aporte! +REP

#8 Re: [Pedido] Tp con limite de players el Miér Mar 18, 2015 9:43 am

DavidR


Moderador
Buen script, intentaré ampliarlo como recomendaste. Se me ocurren un par de ideas...

http://www.blacktibia.org/

#9 Re: [Pedido] Tp con limite de players el Miér Mar 18, 2015 4:42 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Bueno Este Script se ve Útil pero  BELEROFONTE lo podrías poner como sala de espera para un evento :c si no se puede pues no :C
igual te doy +REP

Servidor/Mods/... WaitRoom.xml
Código:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Wait Room" version="Tested only on OTX 2.40" author="Belero" contact="http://www.blacktibia.org/u3171" enabled="yes">
<description>
"/event start" (Sólo si el evento no ha comenzado ya anteriormente) Se abrirá la Sala de Espera:
  - Se crearán portales de entrada y salida en/para la Sala de Espera y mensaje global.
  - Si entra alguien: dará lugar a una notificación encima del portal informando de la cantidad de competidores que faltan para iniciarse el evento.
  - Si sale algún jugador, (y la variable "chicken" está activada) se transformará en una gallina, 4 segundos después pondrá un huevo, y 4 segundos después volverá a su forma original.
  - Si se salen todos los jugadores: no saldrá más la notificación anterior hasta que vuelvan a entrar.
  - Si se llena el límite de jugadores: no saldrá más la notificación anterior, se borrarán los portales y salida, mensaje global, y los competidores que habían dentro serán llevados a otro lugar modificable donde ha de dar comienzo el evento real.

"/event force" (Sólo si hay algún jugador en la Sala de Espera) Forzará el evento a iniciarse:
  - No saldrá más la notificación anterior, se borrarán los portales de entrada y salida, mensaje global, y los competidores que habían dentro serán llevados a otro lugar modificable donde ha de dar comienzo el evento real.

"/event cancel" (Sólo si el evento no ha comenzado ya anteriormente) La Sala de Espera será cancelada:
  - No saldrá más la notificación anterior, se borrarán los portales de entrada y salida, mensaje global, y si hubiesen competidores: serán llevados de vuelta a donde los lleve el teleport de Salida de la Sala de Espera.
  - Y podrá volver a activarse la Sala de Espera con su respectivo comando.

"/event finish" (Sólo si el evento ha comenzado ya) El evento finalizará, mensaje global.
  - Y podrá volver a activarse la Sala de Espera con su respectivo comando.
</description>

<config name="Wait Room"><![CDATA[
--------###CONFIGURACIÓN BÁSICA ABAJO###--------
  wr = {
    limit = 3, -- Límite de jugadores que podrán entrar.
    noticeSeg = 3, -- Segundos que transcurrirán entre cada aviso en el teleport, acerca de la cantidad de competidores que faltan para iniciarse el evento.
    strKey = 450361, -- Número que gustes, para el GlobalStorageKey del evento.
    chicken = 'si', -- ('si'/'no') Para que el jugador que se salga se convierta en una gallina y más tarde ponga un huevito c: ...o no.

    talks = { -- Parámetros a decir junto con la palabra principal. Ejemplos: /event start /event force /event cancel
      open = 'start', -- Para abrir la Sala de Espera.
      close = 'force', -- Para forzar el evento a iniciarse (si hay algún jugador dentro), y con ello: cerrar la Sala de Espera.
      cancel = 'cancel', -- Para cancelar y cerrar la Sala de Espera. (Pero no cancela el evento que daría lugar)
      finish = 'finish', -- Para finalizar el evento iniciado. (Y se pueda volver a abrir la Sala de Espera con su respectivo comando)
    },

    msgGlobal = { -- Mensajes acerca de la Sala de Espera.
      msgType = MESSAGE_EVENT_ADVANCE, -- Tipo de mensajes.
      open = 'La Sala de Espera para el evento bla bla bla... ha sido abierta.', -- Sala activada. (Para todo el servidor)
      close = 'La Sala de Espera para el evento bla bla bla... se ha completado.', -- Sala completada. (Para todo el servidor)
      cancel = 'El evento bla bla bla ha sido cancelado. Sentimos las molestias.', -- Sala cancelada. (Para todo el servidor)
      finish = 'El evento bla bla bla ha finalizado. Ganador bla bla bla...', -- Evento finalizado. (Para todo el servidor)

      event = 'mata, Mata, MaTa, MAtA, MATA!!, TU DIOS PIDE LA SANGRE DEL CONTRARIO!!!', -- Sala completada. (Sólo para los participantes)
    },

    area = {
      From = {x = 1069, y = 1027, z = 6}, -- Coordenada de la ESQUINA SUPERIOR IZQUIERDA de la Sala de Espera.
      To = {x = 1071, y = 1030, z = 7}, -- Coordenada de la ESQUINA INFERIOR DERECHA de la Sala de Espera.
    },

    goEvent = {x = 1074, y = 1028, z = 7}, -- Coordenada del lugar del evento real hacia donde serán teletransportados todos los participantes que se hayen en la Sala de Espera.

    tps = {
      Item = 1387, -- ID del objeto usado como teleport.

      Into = { -- Teleport de entrada.
        uid = 9478, -- UniqueID del teleport-entrada.
        pos = {x = 1070, y = 1032, z = 7}, -- Coordenada del lugar donde se creará el teleport de Entrada (Fuera de la Sala de Espera)
        go = {x = 1070, y = 1030, z = 7}, -- Coordenada del lugar hacia donde conducirá el Teleport de Entrada (Dentro de la Sala de Espera)
      },

      Exit = { -- Teleport de salida.
        uid = 9479, -- UniqueID del teleport-salida.
        pos = {x = 1070, y = 1028, z = 6}, -- Coordenada del lugar donde se creará el teleport de Salida (Dentro de la Sala de Espera)
        go = {x = 1070, y = 1033, z = 7}, -- Coordenada del lugar hacia donde conducirá el Teleport de Salida (Fuera de la Sala de Espera)
      },
    },

  }
--------###CONFIGURACIÓN BÁSICA ARRIBA###--------

function getPlayersInArea(fromPos, toPos)
  local t = {}

    for _, cid in ipairs(getPlayersOnline()) do
        if isInRange(getThingPos(cid), fromPos, toPos) and getPlayerGroupId(cid) == 1 then
            table.insert(t, cid)
        end
    end

  return t
end

function notAccMan(people)
  local thing = 1

    for v, cid in ipairs(getOnlinePlayers()) do
        if cid == "Account Manager" then
            thing = thing + 1

         else
          return thing
        end

        if thing > #people then
          return false
        end

    end
end

function noticeOnTp(pos)
  local people = getPlayersOnline()
    if #people == 0 then
      return true
    end

  local thing = notAccMan(people)
    if thing == false then return true end

  local getPlayers = table.getn(getPlayersInArea(wr.area.From, wr.area.To))
    noticeEVENT = addEvent(noticeOnTp, wr.noticeSeg * 1400, pos)
    doPlayerSay(people[thing], 'Falta' .. (getPlayers ~= (wr.limit - 1) and 'n' or '') .. ' ' .. wr.limit - getPlayers  .. ' aventurero' .. (getPlayers ~= (wr.limit - 1) and 's' or '') .. ' mas!', TALKTYPE_MONSTER_SAY, false, 0, {x = pos.x, y = pos.y + 1, z = pos.z})

  local getGlobal = getGlobalStorageValue(wr.strKey)
    if getGlobal ~= 0 then
        stopEvent(noticeEVENT)
    end
end]]></config>

<movevent type="StepIn" uniqueid="9478; 9479" event="script"><![CDATA[ -- Teleports.
domodlib('Wait Room')

function onStepIn(cid, item, fromPos, toPos)
    if isPlayer(cid) then

      local getPlayers = table.getn(getPlayersInArea(wr.area.From, wr.area.To))
        if item.uid == wr.tps.Into.uid then
            if getPlayers == 0 then
                noticeOnTp(fromPos)
            end

            if getPlayers < wr.limit then
                doSendMagicEffect(fromPos, CONST_ME_TELEPORT)
                doTeleportThing(cid, wr.tps.Into.go)

                if getPlayerGroupId(cid) == 1 then
                    doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
                end
            end

            if getPlayers == wr.limit - 1 then -- cupo lleno.
                setGlobalStorageValue(wr.strKey, 1)
                doBroadcastMessage(wr.msgGlobal.close, wr.msgGlobal.msgType)

                doRemoveItem(item.uid, 1)
                doSendMagicEffect(fromPos, CONST_ME_TELEPORT)

                doRemoveItem(wr.tps.Exit.uid, 1)
                doSendMagicEffect(wr.tps.Exit.pos, CONST_ME_TELEPORT)

                doTeleportThing(cid, wr.goEvent)
                doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)

                for _, cid in ipairs(getPlayersOnline()) do
                    if isInRange(getThingPos(cid), wr.area.From, wr.area.To) then
                        doTeleportThing(cid, wr.goEvent)

                        if getPlayerGroupId(cid) == 1 then
                            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, wr.msgGlobal.event)
                        end
                    end
                end
            end

         elseif item.uid == wr.tps.Exit.uid then
            local function dropEgg(cid)
                if isPlayer(cid) then
                    doCreateItem(2695, 1, getThingPos(cid))
                    doPlayerSay(cid, '...cOo! ..kOog cooOOGkOOOO!!!')
                end
            end

            if getPlayers == 1 then
                stopEvent(noticeEVENT)
            end

            if wr.chicken == 'si' then
                doSetMonsterOutfit(cid, 'Chicken', 8000)
                addEvent (doPlayerSay, 50, cid, 'CoO! kOo...!!')
                addEvent(dropEgg, 4000, cid)
            end

        end
    end

  return true
end]]></movevent>

<movevent type="AddItem" tileitem="1" uniqueid="9478" event="script"><![CDATA[ -- Teletransporta cualquier objeto lanzado al Teleport de Entrada.
domodlib('Wait Room')

function onAddItem(moveitem, tileitem, position, cid)
    doSendMagicEffect(position, CONST_ME_TELEPORT)
    doTeleportThing(moveitem.uid, wr.tps.Into.go)
    doSendMagicEffect(wr.tps.Into.go, CONST_ME_TELEPORT)

  return true
end]]></movevent>

<talkaction log="yes" group="4" access="3" words="/event" event="script"><![CDATA[ -- Comando.
  domodlib('Wait Room')

function onSay(cid, words, param)
  local param = string.lower(param)
  local getGlobal = getGlobalStorageValue(wr.strKey)
  local getPlayers = table.getn(getPlayersInArea(wr.area.From, wr.area.To))

    if(param == '') then
      return true
    end

  local params = {
    [wr.talks.close] = {wr.goEvent, wr.msgGlobal.close, 1},
    [wr.talks.cancel] = {wr.tps.Exit.go, wr.msgGlobal.cancel, -1},
  }

  local v = params[param]

    if param == wr.talks.open then
        if getGlobal == -1 or getGlobal == nil then
            setGlobalStorageValue(wr.strKey, 0)
            doBroadcastMessage(wr.msgGlobal.open, wr.msgGlobal.msgType)

          local TpInto = doCreateItem(wr.tps.Item, 1, wr.tps.Into.pos)
            doItemSetAttribute(TpInto, "uid", wr.tps.Into.uid)
            doSendMagicEffect(wr.tps.Into.pos, CONST_ME_TELEPORT)

          local TpExit = doCreateTeleport(wr.tps.Item, wr.tps.Exit.go, wr.tps.Exit.pos)
            doItemSetAttribute(TpExit, "uid", wr.tps.Exit.uid)
            doSendMagicEffect(wr.tps.Exit.pos, CONST_ME_TELEPORT)

         else
           doPlayerSendCancel(cid, (getGlobal == 0 and 'La sala de espera ya estaba abierta.' or 'No se puede porque el evento ya esta en curso.'))
        end

     elseif v then

        if getGlobal == -1 or getGlobal == nil then
            doPlayerSendCancel(cid, 'No se puede porque el evento ya esta en curso.')

         elseif param == wr.talks.close and getPlayers == 0 then
            doPlayerSendCancel(cid, (getGlobal == 0 and 'Aun no ha entrado nadie a la Sala de Espera.' or 'No se puede porque el evento ya esta en curso.'))

          return true
        end

        if getGlobal == 0 then

            for _, cid in ipairs(getPlayersOnline()) do
                if isInRange(getThingPos(cid), wr.area.From, wr.area.To) then
                    doTeleportThing(cid, v[1])

                    if getPlayerGroupId(cid) == 1 then
                        doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, wr.msgGlobal.event)
                    end
                end
            end

            setGlobalStorageValue(wr.strKey, v[3])
            doBroadcastMessage(v[2], wr.msgGlobal.msgType)

            doRemoveItem(wr.tps.Into.uid, 1)
            doSendMagicEffect(wr.tps.Into.pos, CONST_ME_TELEPORT)

            doRemoveItem(wr.tps.Exit.uid, 1)
            doSendMagicEffect(wr.tps.Exit.pos, CONST_ME_TELEPORT)

         else
           doPlayerSendCancel(cid, (getGlobal == 1 and 'No se puede porque el evento ya esta en curso.' or 'La sala de espera ya estaba cerrada.'))
        end

     elseif param == wr.talks.finish then
        if getGlobal == -1 or getGlobal == nil then
            doPlayerSendCancel(cid, 'Este evento ya estaba cerrado.')

          return true
        end

        if getGlobal > 0 then
            setGlobalStorageValue(wr.strKey, -1)
            doBroadcastMessage(wr.msgGlobal.finish, wr.msgGlobal.msgType)

         else
           doPlayerSendCancel(cid, 'Aun no se ha ocupado el limite(' .. getPlayers .. '/' .. wr.limit .. ') en la Sala de Espera')
        end
    end

  return true
end]]></talkaction>
</mod>

Zona (básica) a editar:
--------###CONFIGURACIÓN BÁSICA ABAJO###--------
 wr = {
   limit = 3, -- Límite de jugadores que podrán entrar.
   noticeSeg = 3, -- Segundos que transcurrirán entre cada aviso en el teleport, acerca de la cantidad de competidores que faltan para iniciarse el evento.
   strKey = 450361, -- Número que gustes, para el GlobalStorageKey del evento.
   chicken = 'si', -- ('si'/'no') Para que el jugador que se salga se convierta en una gallina y más tarde ponga un huevito c: ...o no.

 talks = { -- Parámetros a decir junto con la palabra principal. Ejemplos: /event start /event force /event cancel /event finish
     open = 'start', -- Para abrir la Sala de Espera.
     close = 'force', -- Para forzar el evento a iniciarse (si hay algún jugador dentro), y con ello: cerrar la Sala de Espera.
     cancel = 'cancel', -- Para cancelar y cerrar la Sala de Espera. (Pero no cancela el evento que daría lugar si el cual ya está en curso)
     finish = 'finish', -- Para finalizar el evento iniciado después de la Sala de Espera. (Y se pueda volver a abrir la Sala de Espera con su respectivo comando)
   },

   msgGlobal = { -- Mensajes acerca de la Sala de Espera. Y al iniciar el evento después.
     msgType = MESSAGE_EVENT_ADVANCE, -- Tipo de Mensajes.
     open = 'La Sala de Espera para el evento bla bla bla... ha sido abierta.', -- Sala activada. (Para todo el servidor)
     close = 'La Sala de Espera para el evento bla bla bla... se ha completado.', -- Sala completada. (Para todo el servidor)
     cancel = 'El evento bla bla bla ha sido cancelado. Sentimos las molestias.', -- Sala cancelada. (Para todo el servidor)
     finish = 'El evento bla bla bla ha finalizado. Ganador bla bla bla...', -- Evento finalizado. (Para todo el servidor)

     event = 'mata, Mata, MaTa, MAtA, MATA!!, TU DIOS PIDE LA SANGRE DEL CONTRARIO!!!', -- Sala completada. (Sólo para los participantes)
   },

   area = {
     From = {x = 1069, y = 1027, z = 6}, -- Coordenada de la ESQUINA SUPERIOR IZQUIERDA de la Sala de Espera.
     To = {x = 1071, y = 1030, z = 7}, -- Coordenada de la ESQUINA INFERIOR DERECHA de la Sala de Espera.
   },

   goEvent = {x = 1074, y = 1028, z = 7}, -- Coordenada del lugar del evento real hacia donde serán teletransportados todos los participantes que se hayen en la Sala de Espera.

   tps = {
     Item = 1387, -- ID del objeto usado como teleport.

     Into = { -- Teleport de entrada.
       uid = 9478, -- UniqueID del teleport-entrada.
       pos = {x = 1070, y = 1032, z = 7}, -- Coordenada del lugar donde se creará el teleport de Entrada (Fuera de la Sala de Espera)
       go = {x = 1070, y = 1030, z = 7}, -- Coordenada del lugar hacia donde conducirá el Teleport de Entrada (Dentro de la Sala de Espera)
     },

     Exit = { -- Teleport de salida.
       uid = 9479, -- UniqueID del teleport-salida.
       pos = {x = 1070, y = 1028, z = 6}, -- Coordenada del lugar donde se creará el teleport de Salida (Dentro de la Sala de Espera)
       go = {x = 1070, y = 1033, z = 7}, -- Coordenada del lugar hacia donde conducirá el Teleport de Salida (Fuera de la Sala de Espera)
     },
   },

 }
--------###CONFIGURACIÓN BÁSICA ARRIBA###--------

Más en...
...la línea 122:

<movevent type="StepIn" uniqueid="9478; 9479" event="script">

Para el uniqueID del teleport de Entrada que le quieras poner.
Para el uniqueID del teleport de Salida que le quieras poner.

...la línea 192:

<movevent type="AddItem" tileitem="1" uniqueid="9478" event="script">

Para poner nuevamente el anterior uniqueID del teleport de Entrada que le hayas puesto.

...la línea 203:

<talkaction log="yes" group="4" access="3" words="/event" event="script">

Para poner ahí la palabra principal del comando e irá seguida del parámetro que le hayas editado en las variables de arriba:
 talks = { -- Parámetros a decir junto con la palabra principal. Ejemplos: /event start /event force /event cancel /event finish
     open = 'start', -- Para abrir la Sala de Espera.
     close = 'force', -- Para forzar el evento a iniciarse (si hay algún jugador dentro), y con ello: cerrar la Sala de Espera.
     cancel = 'cancel', -- Para cancelar y cerrar la Sala de Espera. (Pero no cancela el evento que daría lugar si el cual ya está en curso)
     finish = 'finish', -- Para finalizar el evento iniciado después de la Sala de Espera. (Y se pueda volver a abrir la Sala de Espera con su respectivo comando)
   },

Respecto a la zona en el remeres, no tienes que editarle nada. Salvo ponerle "No logout Tool" a la zona de la Sala de Espera, para que no se puedan desconectar estando dentro. E inspeccionar las coordenadas de la Sala, teleports, etc... para luego ponerlos en el script.

Eso es todo. Espero no haberme olvidado de nada. Por si acaso, antes de responderme: testéalo bien. Yo ya lo hice obivamente pero tal vez se me haya pasado algún error o fail.

Modus operandi:
"/event start" (Sólo si el evento no ha comenzado ya anteriormente) Se abrirá la Sala de Espera:
[Tienes que estar registrado y conectado para ver esa imagen]
- Se crearán portales de entrada y salida en/para la Sala de Espera y mensaje global.

[Tienes que estar registrado y conectado para ver esa imagen]
- Si entra alguien, dará lugar a una notificación encima del portal informando de la cantidad de competidores que faltan para iniciarse el evento.
(Y si se salen todos los jugadores, no saldrá más la notificación anterior hasta que vuelvan a entrar)

[Tienes que estar registrado y conectado para ver esa imagen]
- Si sale algún jugador, (y la variable "chicken" está activada) se transformará en una gallina, 4 segundos después pondrá un huevo, y 4 segundos después volverá a su forma original.


[Tienes que estar registrado y conectado para ver esa imagen]
- Si se llena el límite de jugadores: no saldrá más la notificación anterior, se borrarán los portales y salida, mensaje global, y los competidores que habían dentro serán llevados a otro lugar modificable donde ha de dar comienzo el evento real.


"/event force" (Sólo si hay algún jugador en la Sala de Espera) Forzará el evento a iniciarse:
[Tienes que estar registrado y conectado para ver esa imagen]
- No saldrá más la notificación anterior, se borrarán los portales de entrada y salida, mensaje global, y los competidores que habían dentro serán llevados a otro lugar modificable donde ha de dar comienzo el evento real.
(Es decir, ocurrirá lo mismo que de la anterior forma sólo que no es necesario que se llene el límite de participantes)


"/event cancel" (Sólo si el evento no ha comenzado ya anteriormente) La Sala de Espera será cancelada:
[Tienes que estar registrado y conectado para ver esa imagen]
- No saldrá más la notificación anterior, se borrarán los portales de entrada y salida, mensaje global, y si hubiesen competidores: serán llevados de vuelta a donde los lleve el teleport de Salida de la Sala de Espera.


"/event finish" (Sólo si el evento ha comenzado ya) El evento finalizará, mensaje global.
- Y podrá volver a activarse la Sala de Espera con su respectivo comando.
(Éste último comando estaría incompleto, dado que ya ahí iría el código que sea que su autor le quiera poner, continuar el mod implantando el evento real que se quiera poner después de la Sala de Espera)


[Tienes que estar registrado y conectado para ver este vínculo] escribió:Buen script, intentaré ampliarlo como recomendaste. Se me ocurren un par de ideas...
Trollface



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]

#10 Re: [Pedido] Tp con limite de players el Miér Mar 18, 2015 5:15 pm

Anyone


Miembro
Es un Muy buen MOD como siempre BELEROFONTE Gracias amigo
deseguro le servira no solo ami si no a muchos :C +REP

#11 Re: [Pedido] Tp con limite de players el Dom Mar 22, 2015 11:19 pm

Santi


Scripter
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Servidor/Data/Movements/... Movements.xml
<movevent type="StepIn" uniqueid="9478" event="script" value="limiTp.lua"/>
Ahí pones el uniqueID que gustes(que no estés usando ya en otro script), el cual lo has de poner también en el Teleport con el RME.

Servidor/Data/Movements/Scripts/... limiTp.lua
Código:
 local c = {
    limit = 5, -- Límite de jugadores que podrán entrar.
    msgCancel = 'No pueden entrar mas aventureros.', -- 'Mensaje' cuando ya se haya llenado el límite de jugadores anterior.

    area = {
      From = {x = 1069, y = 1027, z = 6}, -- Coordenada de la ESQUINA SUPERIOR IZQUIERDA del área al que son teletransportados.
      To = {x = 1071, y = 1030, z = 7}, -- Coordenada de la ESQUINA INFERIOR DERECHA del área al que son teletransportados.
    },

    pos = {x = 1070, y = 1030, z = 7}, -- Coordenada del lugar donde será teletransportado el jugador (Dentro del área anterior)
  }

local function getPlayersInArea(fromPos, toPos)
  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 onStepIn(cid, item, fromPos, toPos)
    if isPlayer(cid) then

        if table.getn(getPlayersInArea(c.area.From, c.area.To)) < c.limit then
            doSendMagicEffect(fromPos, CONST_ME_TELEPORT)
            doTeleportThing(cid, c.pos)
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)

         else
           doPlayerSendCancel(cid, c.msgCancel)
           doTeleportThing(cid, toPos, false)
        end
    end

  return true
end

Zona (básica) a editar:
 local c = {
   limit = 5, -- Límite de jugadores que podrán entrar.
   msgCancel = 'No pueden entrar mas aventureros.', -- 'Mensaje' cuando ya se haya llenado el límite de jugadores anterior.

   area = {
     From = {x = 1069, y = 1027, z = 6}, -- Coordenada de la ESQUINA SUPERIOR IZQUIERDA del área al que son teletransportados.
     To = {x = 1071, y = 1030, z = 7}, -- Coordenada de la ESQUINA INFERIOR DERECHA del área al que son teletransportados.
   },

   pos = {x = 1070, y = 1030, z = 7}, -- Coordenada del lugar donde será teletransportado el jugador (Dentro del área anterior)
 }

Respecto a las variables que forman el área, es lo mismo que te expliqué en el otro script. Solo que, si a dicha área le vas a poner más de un piso, pues:
- La coordenada que pongas en From ha de ser la de la ESQUINA SUPERIOR IZQUIERDA del PISO MÁS ALTO donde lo tengas puesto.
- La coordenada que pongas en To ha de ser la de la ESQUINA INFERIOR DERECHA del PISO MÁS BAJO donde lo tengas puesto.

Por ejemplo:
[Tienes que estar registrado y conectado para ver esa imagen]

Previsualización:
[Tienes que estar registrado y conectado para ver esa imagen]
(Ahí le puse como límite 2 jugadores para no tener que estar manejando a tantos xD)

Como así lo pediste, así lo hice. Pero se puede desarrollar más el script, por ejemplo, se puede convertir en una sala de espera de evento...
- Poner otro teleport dentro pero de salida.
- Que salga una pequeña notificación encima del teleport de entrada, informando del número de jugadores que faltan para llegar al límite, independientemente de que se vayan algunos de los que estaban dentro.
- Que cuando se llegue al límite de jugadores dentro de la sala de espera, todos ellos sean teletransportados a otro lugar. Los teleport de entrada y salida se remuevan. Y vuelvan a aparecer cuando tú decidas o se ejecute otra parte del script.

Antes de decirme nada, testéalo bien. Cualquier error, problema, o duda que tengas respecto al cual: no dudes en comentarlo. Junto con este mismo script pero tal cual lo editaste para tu servidor.

No te parece mejor usar global storages?

#12 Re: [Pedido] Tp con limite de players el Lun Mar 23, 2015 10:35 am

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:No te parece mejor usar global storages?
Sí, tienes razón. Se me fue la cabeza y fui directamente a lo complicado, dado que verificar getPlayersOnline cada vez puede lagear el servidor, más si hay muchos jugadores. Ahora cuando pueda lo cambio y aviso a los usuarios que así también lo hagan. Gracias.



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]

#13 Re: [Pedido] Tp con limite de players el Vie Abr 03, 2015 3:42 am

Godz4t4n1c


Miembro
belero ya lo hiciste con global storages ???
Avisame we

#14 Re: [Pedido] Tp con limite de players el Vie Abr 03, 2015 7:49 am

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:belero ya lo hiciste con global storages ???
Avisame we
Te mandé un pm avisándote cuando lo hice. Pero me falta por hacerlo en el MOD.



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]

#15 Re: [Pedido] Tp con limite de players el Sáb Abr 04, 2015 1:11 am

Godz4t4n1c


Miembro
Jejejejeje gracias bro
Ya lo cambie y todo chido :3

#16 Re: [Pedido] Tp con limite de players el Dom Abr 05, 2015 12:58 am

Godz4t4n1c


Miembro
[Tienes que estar registrado y conectado para ver este vínculo]
Te envie un mp
Leelo porfavor espero tu respuesta

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 1 usuario en línea: 0 Registrados, 0 Ocultos y 1 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 .