¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Últimos temas
» Invocar Estilo Final Fantasy
por akito_squall Hoy a las 16:20

» El poder oculto (Demo)
por alex1633 Ayer a las 20:56

» Tutorial Interactivo [Uso de interruptores]
por Ledai Ayer a las 16:58

» Necesito Script
por Elian84 Ayer a las 04:44

» Holaaa a tod@s!!!
por chronoMxx Ayer a las 03:41

» [AYUDA]Hootshot de moghunter
por Rudy_kinneas Ayer a las 01:06

» El poder oculto (Segunda entrega)
por alex1633 2016-12-03, 23:18

» Hola mucho gusto
por Hk Diamond 2016-12-03, 13:49

» SoraDeathss se presenta!
por chronoMxx 2016-12-03, 07:50

» {AYUDA}Blizz-ABS Script
por chronoMxx 2016-12-03, 06:45

Afiliados
Estadísticas
Tenemos 3383 miembros registrados.
El último usuario registrado es LordBaium.

Nuestros miembros han publicado un total de 79770 mensajes en 11248 argumentos.
Navega con Google Chrome
[DESCARGA]

[RGSS1] Advanced SelfSwitcher Handler

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RGSS1] Advanced SelfSwitcher Handler

Mensaje por youkai el 2013-04-25, 13:28

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.
# \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
#                              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.#{defined?(Graphics.wait) ? 'vx' : 'rx'}data#{defined?(Graphics.play_movie) ? "2" : ""}", 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.#{defined?(Graphics.wait) ? 'vx' : 'rx'}data#{defined?(Graphics.play_movie) ? "2" : ""}", map))
          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.#{defined?(Graphics.wait) ? 'vx' : 'rx'}data#{defined?(Graphics.play_movie) ? "2" : ""}", 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.#{defined?(Graphics.wait) ? 'vx' : 'rx'}data#{defined?(Graphics.play_movie) ? "2" : ""}", map))
          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

youkai
Soñador
Soñador

0/3

Créditos 280

Gracias : 10

http://sharingannf.wordpress.com/

Volver arriba Ir abajo

RPG Maker XP Re: [RGSS1] Advanced SelfSwitcher Handler

Mensaje por Wecoc el 2013-04-27, 14:20

Te felicito, está bien estructurado y montado (Claro que no tiene sentido poner -1 en la array xD Sería como decir "Quiero desactivar el 3, el 4 y también todos los demás" xDD)

A los que os preguntéis: ¿Para qué puede servir ésto?

Bueno, yo me imaginé algo así como un mapa que lo pudieras hacer muchas veces completo (y de 0) y lo que contara fueran los puntos logrados (o el tiempo tardado en completarlo) Es un tipo de jugabilidad común, aunque no mucho en RPGs xD
Aún así podría servir perfectamente para algún minijuego.


Wecoc
Administrador
Administrador



Créditos 8263

Gracias : 372

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

Permisos de este foro:
No puedes responder a temas en este foro.