¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [RGSS1] Advanced SelfSwitcher Handler el Miér Abr 24, 2013 6:12 am

youkai

avatar
Hola gente! Tras un pedido de Leda en mi taller empece a hacer esta pequeña pieza de codigos que poco a poco se fue llenando con mis locas ideas y demas cositas mias (?) En un principio era solo algo para desactivar todos los interruptores locales del juego y bueh...terminamos con algo asi XDD

Autor: yo(ukai) :P
Fecha: 23/4/2013
Modo de uso, descripcion y demas documentacion (?) viene en el script.

Script:
Código:
#=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
# Nombre: Advanced SelfSwitcher Handler
# Autor: youkai
# Fecha: 23/4/2013
# \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
#                        Caracteristicas:
#  · Desactivar todos los interruptores locales de los eventos en varios
#    mapas definidos por ti.
#  · Desactivar todos los interruptores locales de todos los eventos del
#    juego.
#  · Elegir que evento o eventos se veran afectados.
#  · Desactivar/activar interruptores individuales.
#  · Verificar el estado de cada interruptor.
# \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
#                              Modo de Uso:
#                  /|- En una llamada a script poner: -|\
#
#                  *\/* CASO SIN ESPECIFICAR EVENTOS *\/*
#-------------------------------------------------------------------------------
# ** Para desactivar los interruptores locales de todos los mapas:
#   
#    clear_selfswitches(-1)
#-------------------------------------------------------------------------------
# ** Para desactivar los interruptores locales del mapa actual:
#   
#    clear_selfswitches(0)
#-------------------------------------------------------------------------------
# ** Para desactivar los interruptores de un mapa definido
#
#    clear_selfswitches(ID_del_Mapa)
# ej. clear_selfswitches(5)
#-------------------------------------------------------------------------------
# ** Para desactivar los interruptores de varios mapa a la vez:
#
#    clear_selfswitches([ID_del_Mapa, ID_del_Mapa, ID_del_Mapa, ...])
# ej. clear_selfswitches([5, 1, 6]) (El orden no importa)
#
# Debo aclarar que en este caso no puede ser -1. En caso de cometer
# este error...pero NADA XD Si se escribe 0, se tomara el ID del mapa actual.
#-------------------------------------------------------------------------------
#                  *\/* CASO ESPECIFICANDO EVENTOS *\/*
#
#    El trabajo con los mapas funciona igual que en el caso anterior!!
# La diferencia esta en que poniendo -1 en el mapa no se fijara en los eventos.
# No le veo mucho sentido a desactivar los interruptores del mismo ID de evento
# en todos los mapas :P
#-------------------------------------------------------------------------------
# ** Para desactivar los interruptores locales del evento actual:
#   
#    clear_selfswitches(Map_ID, 0)
#-------------------------------------------------------------------------------
# ** Para desactivar los interruptores de un evento definido
#
#    clear_selfswitches(Map_ID, ID_del_Evento)
# ej. clear_selfswitches(5, 6)
#-------------------------------------------------------------------------------
# ** Para desactivar los interruptores de varios eventos a la vez:
#
#    clear_selfswitches(Map_ID, [ID_del_Evento, ID_del_Evento, ID_del_Evento, ...])
# ej. clear_selfswitches(5, [6,5,8,9]) (El orden no importa)
#
# /*\ En este caso si agregamos el 0, que representa el evento actual, al grupo de
# ID's de eventos, SI LO CAMBIARA POR EL ID DEL EVENTO ACTUAL!
#-------------------------------------------------------------------------------
# \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
# Queria especificar que si ponemos, por ejemplo:
#    clear_selfswitches([5,8,1], [6,5,8,9])
# Desactivara los interruptores de los eventos 6,5,8,9 en los mapas 5,8,1. Tambien
# si ponen un ID que no exista, sea de evento o mapa, no sucedera nada; se salta
# ese valor.
# \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
#-------------------------------------------------------------------------------
#              *\/* CASO ESPECIFICANDO EL RESTO DE LOS COMANDOS *\/*
# Todo ese lio de los eventos y los mapas funciona exactamente igual a como
# he especificado. El usar los otros 2 argumentos es solo para activar/desactivar
# interruptores especificos en lugar de eliminarlos todos.
#-------------------------------------------------------------------------------
# check_selfswitch(id_mapa, evento, int)
# * Este comando chequea si el interruptor esta activado o desactivado
#
# id_mapa: Id del mapa en el cual se encuentra el evento
# evento: Evento(mas claro ni el agua) :P
# int: Interruptor al que se desea chequear su estado
#
# Si se le asigna 0 al id del mapa, busca el evento en el mapa actual
# Si se le asigna 0 al id del evento, cambiara/checara en el evento que se esta
# ejecutando
#-------------------------------------------------------------------------------
# change_selfswitches(Map_ID, ID_del_Evento, cond, switch)
#  Map_ID, ID_del_Evento: Funcionan como he explicado anteriormente.
#  cond: Si escribimos true/false en ese campo, entonces en lugar de desactivar,
#  activara/desactivara interruptores especificos. (Si se omite es false)
#  switch: Cuando hayamos puesto true/false en cond, debemos especifica cual interruptor
#  activar/desactivar. En este campo se especifica. Se tiene que poner usando el
#  siguiente formato (Si se omite es 'A')
#
# 'A' : Activa el interruptor A
# 'B' : Activa el interruptor B
# 'C' : Activa el interruptor C
# 'D' : Activa el interruptor D
#
# Ejemplo:                  change_selfswitches(5, 6, true, 'B')
# Activara el interruptor local B en el evento 6 del mapa 5
# Otro Ejemplo:            change_selfswitches(5, 6, false, 'B')
# Desactivara el interruptor local B en el evento 6 del mapa 5
# Otro Ejemplo:            change_selfswitches(5, -1, false, 'B')
# Desactivara el interruptor local B en TODOS LOS EVENTOS del mapa 5
# Otro Ejemplo:            change_selfswitches(-1, 5, false, 'B')
# ¡Buuuhhh! Error...No sucedera nada...A lo sumo se agregaran interruptores fan-
# tasmas, que estan pero no tendran ningun efecto...
#-------------------------------------------------------------------------------
# Otro mas:                clear_selfswitches(5, 6)
# Desactiva TODOS los interruptores del evento 6 del mapa 5
# Otro mas:                clear_selfswitches(5, -1)
#                          clear_selfswitches(5)
# Desactiva TODOS los interruptores de TODOS LOS EVENTOS del mapa 5
# Y el ultimo:              clear_selfswitches(-1, 5)
# Esto es otro error y un poco mas grave...desactivara todas los interruptores
# locales del juego, y no solo los de los eventos de ID 5 en todos los mapas,
# como algunos pueden pensar.
#=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
class Game_SelfSwitches
  def turn_off_all
    @data.each_key{|k|
    @data.delete(k)}
  end
 
  def change_in(maps_id, events, cond, switch)
    if cond
      if maps_id.is_a?(Array)
        maps_id.each{|map|
        if events.is_a?(Array)
          events.each{|e|
          @data[[map, e, switch]] = true}
        elsif events < 0
          mapdata = load_data(sprintf("Data/Map%03d.rxdata", map))
          mapdata.events.keys.each{|e|
          @data[[map, e, switch]] = true}
        else
          @data[[map, events, switch]] = true
        end}
      else
        if events.is_a?(Array)
          events.each{|e|
          @data[[maps_id, e, switch]] = true}
        elsif events < 0
          mapdata = load_data(sprintf("Data/Map%03d.rxdata", maps_id))
          mapdata.events.keys.each{|e|
          @data[[maps_id, e, switch]] = true}
        else
          @data[[maps_id, events, switch]] = true
        end
      end
    elsif cond == false
      if maps_id.is_a?(Array)
        maps_id.each{|map|
        if events.is_a?(Array)
          events.each{|e|
          @data[[map, e, switch]] = false}
        elsif events < 0
          mapdata = load_data(sprintf("Data/Map%03d.rxdata", map))
          mapdata.events.keys.each{|e|
          @data[[map, e, switch]] = false}
        else
          @data[[map, events, switch]] = false
        end}
      else
        if events.is_a?(Array)
          events.each{|e|
          @data[[maps_id, e, switch]] = false}
        elsif events < 0
          mapdata = load_data(sprintf("Data/Map%03d.rxdata", maps_id))
          mapdata.events.keys.each{|e|
          @data[[maps_id, e, switch]] = false}
        else
          @data[[maps_id, events, switch]] = false
        end
      end
    end
  end 
 
  def clear_switches(maps_id, events)
    if maps_id.is_a?(Array)
      @data.each_key{|k|
      if events.is_a?(Array)
        if maps_id.include?(k[0]) && events.include?(k[1])
          @data.delete(k)
        end
      elsif events > 0
        if maps_id.include?(k[0]) && events == k[1]
          @data.delete(k)
        end
      elsif events < 0
        if maps_id.include?(k[0])
          @data.delete(k)
        end
      end
      }
    elsif maps_id.is_a?(Integer)
      if maps_id < 0
        turn_off_all
        return
      else
        map_id = maps_id
      end
      @data.each_key{|k|
      if events.is_a?(Array)
        if events.include?(k[1]) && k[0] == map_id
          @data.delete(k)
        end
      elsif events > 0
        if events == k[1] && k[0] == map_id
          @data.delete(k)
        end
      elsif events < 0 && k[0] == map_id
        @data.delete(k)
      end
      }
    end
  end
 
  def clear_sw
    while @data.index(false)
      @data.delete(@data.index(false))
    end
  end
end

class Interpreter
  def change_selfswitches(maps_id, events = -1, cond = false, switch = 'A')
    if events.is_a?(Array)
      if events.include?(0)
        i = events.index(0)
        events[i] = @event_id
      end
    elsif events == 0
      events = @event_id
    end
    if maps_id.is_a?(Array)
      if maps_id.include?(0)
        i = maps_id.index(0)
        maps_id[i] = $game_map.map_id
      end
    elsif maps_id == 0
      maps_id = $game_map.map_id
    end
    $game_self_switches.change_in(maps_id, events, cond, switch)
    $game_map.need_refresh = true
    $game_self_switches.clear_sw
  end
 
  def clear_selfswitches(maps_id, events = -1)
    if events.is_a?(Array)
      if events.include?(0)
        i = events.index(0)
        events[i] = @event_id
      end
    elsif events == 0
      events = @event_id
    end
    if maps_id.is_a?(Array)
      if maps_id.include?(0)
        i = maps_id.index(0)
        maps_id[i] = $game_map.map_id
      end
    elsif maps_id == 0
      maps_id = $game_map.map_id
    end
    $game_self_switches.clear_switches(maps_id, events)
    $game_map.need_refresh = true
  end

  def check_selfswitch(m, event = 0, l = 'A')
    if m == 0
      map = $game_map.map_id
    else
      map = m
    end
    if event == 0
      ev = @event_id
    else
      ev = event
    end 
    key = [map, ev, l]
    return $game_self_switches[key]
  end
end
Imagenes no son necesarias...no sabria que mostrar xD

En fin, disfruten este script y usenlo...PERO DEN CREDITOS! youkai tiene cosas de maso y lo hizo con dolor de cabeza XDD
Respeten el trabajo ageno.
Saludos,
¥oukai

#2 Re: [RGSS1] Advanced SelfSwitcher Handler el Jue Abr 25, 2013 6:49 am

orochii

avatar
Veamos... ¿qué falta para que este script haga literalmente cualquier cosa con los SelfSwitches xD? Yo creo que sólo falta eso de que el array de eventos sea compatible con -1 (evento/s en TODOS los mapas seteen interruptor X a Y) xDDD, pero ya dijiste que no lo harías porque no le hallabas sentido. Digo, de hecho no hay mucho, tendrían que haber esos mismos eventos en absolutamente TODOS los mapas .-.

En fin, aportaxo,
Orochii Zouveleki

#3 Re: [RGSS1] Advanced SelfSwitcher Handler el Jue Abr 25, 2013 3:20 pm

youkai

avatar
Bueno orochii si quieres puedo hacer para que con -1 setee todos los eventos que tenga/n la ID que especifiques...no es muy dicifil XDDDD Lo que claro, carece de sentido algo asi. No creo que alguien se preocupe tanto por los ID's como para eso .?. Xp
En cualquier caso, muchas gracias por tus gracias (?) Cuando se me ocurra alguna otra idea loca de estas, ya la publicare ^^
Saludos,
¥oukai

PD: Aunque creo que voy a empezar a sacar scripts de mi taller para publicarlos...muchos de ellos estan bastante interesantes xD

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.