Comando ITEMOBJECT_POS

Permite modificar la posición de entidades ItemObject del nivel.

También se utiliza para hacer reaparecer un objeto en caso de que este objeto haya desaparecido al haber sido recogido por el jugador.



Sintaxis del comando:


ACCI ITEMOBJECT_POS numero_objeto retardo_recoger recomprar x y z

  • numero_objeto:
  • Número de objeto que le has asignado a una entidad ItemObject siguiendo los pasos que se describen en el manual.


  • retardo_recoger:
  • Establece el tiempo (en segundos) que debe transcurrir después de posicionar el objeto en el nivel (usando el comando ITEMOBJECT_POS) para que el jugador pueda recogerlo.

    En ocasiones es posible que uses el comando ITEMOBJECT_POS para ubicar objetos en la posición exacta del jugador para que los suelte en el suelo, pero si no hay un tiempo suficiente de retardo antes de poder volverlo a recoger, el jugador recogerá automáticamente el objeto recién soltado. Si quieres resolver ese problema usa por ejemplo el valor 3 en este parámetro para dar tiempo suficiente al jugador para abandonar el punto donde soltó el objeto.

    Por el contrario, cuando usas el comando ITEMOBJECT_POS para ubicar objetos que suelta un Bot o simplemente porque los haces aparecer en el nivel, lo más probable es que quieras que el jugador los pueda recoger lo más rápido posible. En este caso usa el valor 0 para este parámetro.


  • recomprar:
  • Este parámetro sólo es aplicable si es un objeto comprable por el jugador según el parámetro 'Precio_compra' de la entidad ItemObject del objeto.

    Con valor si, el jugador deberá volver a comprar el objeto cada vez que reaparezca en el nivel.

    Con valor no, el jugador no deberá volver a comprar el objeto cada vez que reaparezca en el nivel.


  • x y z:
  • Son las coordenadas X Y Z de la nueva posición donde queremos situar el objeto. La Y es la altura.

    Deben ser coordenadas que estén dentro del nivel creado en World Editor. Desde el mismo World Editor puedes consultar estas posiciones (en la barra inferior) moviendo el cursor por zonas del nivel.

    Usa la palabra clave ORI como X, Y y Z para que el objeto se reposicione en la posición original que tenía al dar comienzo el nivel (coordenadas del parámetro 'Origin' de su entidad 'ItemObject').



    Ejemplo 1

    Reposicionar la entidad ItemObject4 (objeto número 7) que es una llave que se representa con el archivo 7_llaveroja.act, en la posición del nivel con coordenadas X:-43 Y:54 Z:412


    ACCI ITEMOBJECT_POS 7 3 no -43 54 412



    Ejemplo 2

    Reposicionar la entidad ItemObject2 (objeto número 5) que es un tesoro que se representa con el archivo 5_tesoro.act, en la posición del nivel con coordenadas X:310 Y:90 pero para el valor Z usar el contenido de la variable OBJZ


    ACCI ITEMOBJECT_POS 5 3 no 310 90 %OBJZ%



    Ejemplo 3

    Reposicionar la entidad ItemObject12 (objeto número 9) que es un anillo se representa con el archivo 9_anillo.act, a la posición del nivel con coordenadas X:256 Z:64 pero sin modificar la altura Y actual de esta entidad.


    ACCI ITEMOBJECT_POS 9 3 no 256 NO 64

    Usa NO como X, Y, o Z para no modificar los valores X, Y o Z actuales de la entidad.



    Ejemplo 4

    Reposicionar la entidad ItemObject8 (objeto número 14) que representa un maletín con dinero usando el archivo 14_dinero.act, en la posición donde haya muerto el enemigo definido por la entidad BotActorStart4. De esta forma el jugador podrá recoger el dinero que ha perdido el enemigo al morir.
      IF COND enemigodinero=0
        ACCI PONE enemigodinero=1
        ACCI TEXT El ladron que has matado llevaba un maletin
        ACCI DAME_POSICION_BOT BotActorStart4
        ACCI ITEMOBJECT_POS 14 0 no %POSICION_X_BOT% %POSICION_Y_BOT% %POSICION_Z_BOT%
      ENDIF
    Este bloque de comandos debes incluirlo en un fichero de comandos .INI que se procese sólo cuando muera el enemigo que te interesa. En este caso debes introducir el nombre del fichero .INI en el parámetro CommandsFile de la entidad BotActorStart4 .

    Encerramos todo el ámbito de los comandos dentro de un 'IF' condicionado por la variable enemigodinero para controlar que sólo aparezca el dinero la primera vez que muera el enemigo.

    Con el comando DAME_POSICION_BOT averiguamos la posición del enemigo muerto. Este comando asigna esa posición en las variables del sistema POSICION_X_BOT, POSICION_Y_BOT y POSICION_Z_BOT.

    Evidentemente la entidad ItemObject8 debes tenerla definida en tu nivel pero oculta al jugador, por ejemplo detrás de una pared fuera del alcance del jugador.




    Ejemplo 5

    Hacer que el jugador pueda dejar en el suelo una llave de su inventario de objetos. Esta llave la habrá recogido previamente del nivel como una entidad ItemObject16 (objeto número 4) que se representa con el archivo 4_llaveRoja.act


    En primer lugar tenemos que cambiar una de las acciones posibles de las que dispone el jugador para manipular los objetos de su inventario. Estas son las que existen por defecto:


    Vamos a cambiar la acción Poner por la acción Dejar, para que de esta forma cuando el jugador seleccione la llave de su inventario, seleccione la acción Dejar y finalmente pulse la tecla 'Acción', la llave caiga al suelo.

    Pare ello debemos añadir a nuestro nivel una entidad AccionMenu y cambiar sus parámetros como se muestra a continuación:

    El 8 es porque la acción Poner es la número 8 de la lista de acciones.


    Si hacemos aparecer el inventario tendríamos que ver la acción Dejar en su sitio:


    Ahora vamos a hacer que cuando el jugador use cualquiera de las ocho acciones se procese un fichero de comandos. Esto lo podemos hacer indicándolo en el parámetro FicheroAcciones de la entidad Configuracion de nuestro nivel. Si no tienes esa entidad en tu nivel, deberías añadirla:

    En el parámetro FicheroAcciones hemos introducido el nombre del fichero de comandos que queremos procesar cuando el jugador use su inventario seleccionando un objeto y pulsando la tecla 'Acción' sobre alguna de las ocho acciones.


    Sólo nos queda crear el fichero de comandos usar_acciones.ini, que hemos indicado en el parámetro FicheroAcciones.

    Este es el contenido del fichero:

      ; *** Acción DEJAR ***
      IF COND ACCION_SELECCIONADA=Dejar
        ; Dejar objeto Llave roja (objeto 4) en el suelo
        IF COND OBJETO_SELECCIONADO=4
          ACCI QTIN 4
          ACCI ITEMOBJECT_POS 4 3 no %POSICION_X_JUGADOR% %POSICION_Y_JUGADOR% %POSICION_Z_JUGADOR%
        ENDIF
      ENDIF
    Piensa que este fichero de comandos se procesará para cualquier acción que use el jugador,ya sea Usar, Entregar, etc... y para el caso que nos interesa sólo queremos saber si el jugador está usando la acción Dejar, por eso hacemos la primera condición IF COND ACCION_SELECCIONADA=Dejar

    Como también nos interesa saber si ha seleccionado la llave roja de su inventario realizamos IF COND OBJETO_SELECCIONADO=4 que es el número de objeto que habremos definido en la entidad ItemObject16 de este objeto.

    Finalmente si todo se ha cumplido procedemos a realizar dos comandos ACCI. El primero elimina el objeto 4 (la llave) del inventario del jugador y el segundo reposiciona dicho objeto en la posición donde se encuentre en ese momento el jugador.

    El jugador deberá abandonar la posición antes de tres segundos si no quiere volver a recoger la llave.


    Como ves, las posibilidades de este comando son muy grandes, ya que en este caso hemos usado el evento del menú de acciones del inventario del jugador para dejar objetos en el suelo voluntariamente, pero podrías usar otros eventos para que el jugador pierda objetos según otras circunstancias, por ejemplo al morir o al ser atracado por algún ladrón.



    Ejemplo 6

    Queremos hacer exactamente lo mismo que el ejemplo anterior pero en este caso el objeto número 4 no ha sido recogido por el jugador de manera automática sino que lo ha comprado, ya que hemos usado los parámetros 'Boton_accion' y 'Precio_compra' de su entidad ItemObject16 para tal fin.

    Cuando el jugador suelte el objeto en el suelo, no queremos que el jugador deba volver a comprar el objeto de nuevo cuando lo intente recoger.

    En este caso sólo debemos añadir la siguiente línea después de la línea del comando ITEMOBJECT_POS para que el jugador no necesite pulsar el botón 'Acción' para recoger el objeto. La línea del comando ITEMOBJECT_POS la tenemos correcta ya que el parámetro 'recomprar' ya está con el valor 'no':

      ACCI CAMBIAR_PARAMETRO ItemObject16 Boton_accion False
    Si por el contrario queremos que el jugador tenga que volver a comprar el objeto soltado, debemos usar el valor 'si' para el parámetro 'recomprar' del comando ITEMOBJECT_POS e indicar que el jugador necesitará usar la tecla 'Acción' para intentar comprar el objeto:

      ACCI ITEMOBJECT_POS 4 3 si %POSICION_X_JUGADOR% %POSICION_Y_JUGADOR% %POSICION_Z_JUGADOR%
      ACCI CAMBIAR_PARAMETRO ItemObject16 Boton_accion True

    Ejemplo 7

    Reposicionar el objeto número 14 en la posición original que tenía al dar comienzo el nivel, ya que nos interesa que reaparezca pero no en la última posición donde se ubicó este objeto usando el comando ITEMOBJECT_POS en otras coordenadas del nivel.


    ACCI ITEMOBJECT_POS 14 3 no ORI ORI ORI



    Funcionamiento del comando en el modo de juego online

    Ámbito de actuación por defecto del comando:


    El comando soporta cambio de ámbito: