• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Moveevents] [Pedido] Permitir entrada solo si no hay jugadores en el area

    Compartir:

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

    ralke

    ralke
    Miembro
    Miembro
    Buenas, estoy intentando hacer el siguiente script a traves de un movevent. La idea del script es hacer que cuando un jugador pisa un tile especifico con un aid o uid (ej: aid 12345) el sistema revisara si hay algún jugador al interior del área determinada en local areaPosition.

    Si hay un jugador dentro del area, el player que esta intentando entrar sera kickeado (doTeleportThing(cid, back)), en cambio, si no hay nadie en el area el jugador podra acceder y pasar a través del tile que tiene el aid 12345.

    Por ultimo, y creo que esto es algo mas complejo, un creaturescript que verifique cuando alguien se logea en el interior (logOut) y luego se conecta y entra al area (onLogin) mientras un jugador esta en el interior. Asi el jugador que entro al area mediante login, sera kickeado hacia afuera.

    Hasta el momento solo llevo una pequeña parte del moveevent, intentare seguir avanzando:

    Código:
    local areaPosition =
    {
            {x=1072, y=533, z=7, stackpos = 255},
            {x=1098, y=577, z=7, stackpos = 255}
    }

            local players = getPlayersOnline()
            for _, pid in ipairs(players) do
            if isInRange(getCreaturePosition(pid), areaPosition[1], areaPosition[2]) then
            doPlayerSendTextMessage(cid, 19, "You can't pass because another player is in this area.")
                    doTeleportThing(cid, back)
        end
    end

    Saludos!
    Smile
    Informacion escribió:Version del Scripts: TFs 0.4.0

    Ver perfil de usuario http://greedisland.ml/index.php
    El codigo que estas haciendo esta bien, supongo que la varible " back " tiene una posicion definida en alguna parte del script, vas por buen camino amigo, recuerda que el uso de " stackpos " en las posiciones es solo para funciones de busquedad, no es necesario definir esto en todas partes si nisiquiera es necesario, te explicare un poco.

    por ejemplo hay una funcion que se llama getThingFromPosition en sus parametros pide una posicion y esta buscara en aquella posicion dada un " thing " <- que seria cualquier cosa no incluye " tiles ", si busca en las fuentes del servidor podra ver que esta funcion verifica el stackpos de la posicion dada, si es 255 es cualquier cosa que encuentre, si es 254, solo busca creaturas, si es 253 solo busca items, claro esto es como ejemplo realmente creo que estoy confundido con los numeros, pero alli podras ver eso, en luascripts.cpp, pocas funcionan piden stackpos. por ejemplo un doTeleportThing no nita esto.

    espero que entiendas, tampoco es necesario que lo quites del codigo, no afecta en nada, pero para la proxima te ahorras escribir un par de palabras mas XD



    Si necesitas hospedaje para tu servidor usa este enlace y mira los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


    [Moveevents] [Pedido] Permitir entrada solo si no hay jugadores en el area TRJEB8aSRYK5IulEU6ilJw
    Ver perfil de usuario

    ralke

    ralke
    Miembro
    Miembro
    buenas sevu, con tu feedback tengo las siguientes dudas. en ves de asignar una posicion definida a la variable back (que supongo que sera añadiendo un parametro local) ¿como puede ser que el jugador sea kickeado hacia el sqm de arriba (desde la posicion Y)?

    en cuanto al script en general, me genera el siguiente error en la consola, no al accionarlo parandome sobre el sqm con el aid, si no que al iniciar el ot

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

    Saludos!

    Ver perfil de usuario http://greedisland.ml/index.php

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador

    local players = getPlayersOnline()


    no uses esa funcion getPlayersOnline()

    para la modelacion de tu sistema que es sencillo

    usa

    Código:
    setGlobalStorage(21342, 1)

    que hace esto entrega un storage global a todo el servidor



    [Moveevents] [Pedido] Permitir entrada solo si no hay jugadores en el area YNU5B25
    Ver perfil de usuario https://www.tibiaface.com

    ralke

    ralke
    Miembro
    Miembro
    Código:
    local areaPosition =
    {
            {x=1072, y=533, z=7, stackpos = 255},
            {x=1098, y=577, z=7, stackpos = 255}
    }

            function onStepIn(cid, item, pos, fromPosition)
            for _, pid in ipairs(players) do
            if isInRange(getCreaturePosition(pid), areaPosition[1], areaPosition[2]) then
            setGlobalStorageValue(21342, 1)
            doPlayerSendTextMessage(cid, 19, "You can't pass because another player is in this area.")
            doTeleportThing(cid, back)
        end
    end

    le di vueltas e intente algo como esto pero aun no logro que funcione Sad

    Ver perfil de usuario http://greedisland.ml/index.php

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    bueno aqui tendria que configurarse en varios lados, primeramente crear el sqm como lo estas haciendo que eso es un inicio por que falta y por ultimo crear un onLogout(cid)

    esto en creaturescripts

    Código:

    function onLogout(cid)
       if getGlobalStorageValue(45001) == 1 then
          setGlobalStorageValue(45001, 0)
          
    else

    end
       return true
    end

    Código:
    <event type="logout" name="logout" event="script" value="logout.lua"/>

    ahora veamos tu movevetns

    Código:



    function onStepIn(cid, item, pos)

    local hss = {x=32886, y=32632, z=11}


       if getGlobalStorageValue(45001) <= 0 then
          doTeleportThing(cid,hss)
          doCreatureSay(cid, "HISSSSSSSSSSSSSSSS", TALKTYPE_ORANGE_1)
            doSendMagicEffect(getCreaturePosition(cid),20)
          doSendMagicEffect(hss,20)
    setGlobalStorageValue(45001, 1)
    else
    doTeleportThing(cid, frompos)
          doPlayerSendTextMessage(cid, 21, "la sala esta ocupada!")

            end


        return 1
    end  

    esto podria ser una opcion



    [Moveevents] [Pedido] Permitir entrada solo si no hay jugadores en el area YNU5B25
    Ver perfil de usuario https://www.tibiaface.com

    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.

    Temas Recomendados×+

       

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