¡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
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3396 miembros registrados.
El último usuario registrado es Discorded.

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

[XP][Herramienta de Enginer] Custom Self Switches & Self Variables

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Wecoc el 2016-09-26, 18:33

En RPG maker XP los interruptores locales son ilimitados y pueden tener cualquier nombre, pero su acceso por script es bastante confuso, y por engine solo se pueden usar 4: 'A', 'B', 'C' y 'D'. Además no existen las variables locales.

Por eso implementé a parte mis propios interruptores locales y variables locales (no sobreescriben los normales, se pueden usar ámbos tipos)
Son muy fáciles de usar; son interruptores y variables normales, pero su nombre debe empezar por [Self]
Solo con eso en el engine ya funcionarán como locales, es decir su valor dependerá del evento en el que se estan usando.

Para enginers:

Todos los comandos de evento funcionan como con los interruptores y variables normales.

Tened en cuenta que en Scene_Debug éstos siempre saldran como OFF en el caso de interruptores y 0 en el caso de variables, y aunque los cambies ahí no se notarán cambios en los eventos. Además no se pueden usar como interruptor de condición para Eventos Comunes. En resumen, pasan a ser 'locales' en todos los aspectos, aunque los modifiques en un evento su valor 'global' no cambia.

Para scripters:

Para obtener o modificar un interruptor local usad:

$game_map.events[EVENT ID].self_switches[SWITCH ID]
$game_map.events[EVENT ID].self_switches[SWITCH ID] = (VALOR)


Para obtener o modificar una variable local usad:

$game_map.events[EVENT ID].self_variables[VARIABLE ID]
$game_map.events[EVENT ID].self_variables[VARIABLE ID] = (VALOR)


Para comprobar si un interruptor o variable son locales usad:

$game_temp.self_switch?(SWITCH ID)
$game_temp.self_variable?(VARIABLE ID)


Lo más habitual es que lo uséis sobre el evento acual; en ese caso no hace falta definir su id, podéis usar los siguientes atajos:

self_switches[SWITCH ID]
self_switches[SWITCH ID] = (VALOR)

self_variables[VARIABLE ID]
self_variables[VARIABLE ID] = (VALOR)

self_switch?(SWITCH ID)
self_variable?(VARIABLE ID)


Código:

Ponedlo encima de main. No requiere créditos.

Código:
#==============================================================================
# ** CSV for Events - Custom Self Switches & Self Variables v1.1
#------------------------------------------------------------------------------
# Autor: Wecoc (no credits required)
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  alias custom_self_ini initialize unless $@
  def initialize
    custom_self_ini
    data = load_data("Data/System.rxdata")
    @switches = []
    switches = data.switches
    for i in 1...switches.size
      if switches[i].upcase.include?("[SELF]")
        @switches.push(i)
      end
    end
    @variables = []
    variables = data.variables
    for i in 1...variables.size
      if variables[i].upcase.include?("[SELF]")
        @variables.push(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Check if a switch is a Self Switch
  #--------------------------------------------------------------------------
  def self_switch?(id)
    return @switches.include?(id)
  end
  #--------------------------------------------------------------------------
  # * Check if a variable is a Self Variable
  #--------------------------------------------------------------------------
  def self_variable?(id)
    return @variables.include?(id)
  end
end

#==============================================================================
# * Game_Event
#==============================================================================

class Game_Event
 
  attr_reader :self_switches
  attr_reader :self_variables
 
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  alias custom_self_ini initialize unless $@
  def initialize(*args)
    @self_switches = {}
    @self_switches.default = false
    @self_variables = {}
    @self_variables.default = 0
    custom_self_ini(*args)
  end
  #--------------------------------------------------------------------------
  # * Check if a switch is a Self Switch
  #--------------------------------------------------------------------------
  def self_switch?(id)
    return $game_temp.self_switch?(id)
  end
  #--------------------------------------------------------------------------
  # * Check if a variable is a Self Variable
  #--------------------------------------------------------------------------
  def self_variable?(id)
    return $game_temp.self_variable?(id)
  end
  #--------------------------------------------------------------------------
  # * Move Type : Custom
  #--------------------------------------------------------------------------
  def move_type_custom
    return if jumping? or moving?
    while @move_route_index < @move_route.list.size
      command = @move_route.list[@move_route_index]
      if command.code == 0
        if @move_route.repeat
          @move_route_index = 0
        end
        unless @move_route.repeat
          if @move_route_forcing and not @move_route.repeat
            @move_route_forcing = false
            @move_route = @original_move_route
            @move_route_index = @original_move_route_index
            @original_move_route = nil
          end
          @stop_count = 0
        end
        return
      end
      if command.code <= 14
        case command.code
          when 1  ; move_down                # Move down
          when 2  ; move_left                # Move left
          when 3  ; move_right              # Move right
          when 4  ; move_up                  # Move up
          when 5  ; move_lower_left          # Move lower left
          when 6  ; move_lower_right        # Move lower right
          when 7  ; move_upper_left          # Move upper left
          when 8  ; move_upper_right        # Move upper right
          when 9  ; move_random              # Move at random
          when 10 ; move_toward_player      # Move toward player
          when 11 ; move_away_from_player    # Move away from player
          when 12 ; move_forward            # 1 step forward
          when 13 ; move_backward            # 1 step backward
          when 14 ; jump(command.parameters[0], command.parameters[1]) # Jump
        end
        return if not @move_route.skippable and not moving? and not jumping?
        @move_route_index += 1
        return
      end
      if command.code == 15
        @wait_count = command.parameters[0] * 2 - 1
        @move_route_index += 1
        return
      end
      if command.code >= 16 and command.code <= 26
        case command.code
          when 16 ; turn_down              # Turn down
          when 17 ; turn_left              # Turn left
          when 18 ; turn_right            # Turn right
          when 19 ; turn_up                # Turn up
          when 20 ; turn_right_90          # Turn 90° right
          when 21 ; turn_left_90          # Turn 90° left
          when 22 ; turn_180              # Turn 180°
          when 23 ; turn_right_or_left_90  # Turn 90° right or left
          when 24 ; turn_random            # Turn at Random
          when 25 ; turn_toward_player    # Turn toward player
          when 26 ; turn_away_from_player  # Turn away from player
        end
        @move_route_index += 1
        return
      end
      # If other command
      if command.code >= 27
        # Branch by command code
        case command.code
        when 27  # Switch ON
          if self.self_switch?(command.parameters[0])
            @self_switches[command.parameters[0]] = true
          else
            $game_switches[command.parameters[0]] = true
          end
          $game_map.need_refresh = true
        when 28  # Switch OFF
          if self.self_switch?(command.parameters[0])
            @self_switches[command.parameters[0]] = false
          else
            $game_switches[command.parameters[0]] = false
          end
          $game_map.need_refresh = true
        when 29  # Change speed
          @move_speed = command.parameters[0]
        when 30  # Change freq
          @move_frequency = command.parameters[0]
        when 31  # Move animation ON
          @walk_anime = true
        when 32  # Move animation OFF
          @walk_anime = false
        when 33  # Stop animation ON
          @step_anime = true
        when 34  # Stop animation OFF
          @step_anime = false
        when 35  # Direction fix ON
          @direction_fix = true
        when 36  # Direction fix OFF
          @direction_fix = false
        when 37  # Through ON
          @through = true
        when 38  # Through OFF
          @through = false
        when 39  # Always on top ON
          @always_on_top = true
        when 40  # Always on top OFF
          @always_on_top = false
        when 41  # Change Graphic
          @tile_id = 0
          @character_name = command.parameters[0]
          @character_hue = command.parameters[1]
          if @original_direction != command.parameters[2]
            @direction = command.parameters[2]
            @original_direction = @direction
            @prelock_direction = 0
          end
          if @original_pattern != command.parameters[3]
            @pattern = command.parameters[3]
            @original_pattern = @pattern
          end
        when 42  # Change Opacity
          @opacity = command.parameters[0]
        when 43  # Change Blending
          @blend_type = command.parameters[0]
        when 44  # Play SE
          $game_system.se_play(command.parameters[0])
        when 45  # Script
          result = eval(command.parameters[0])
        end
        @move_route_index += 1
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    new_page = nil
    unless @erased
      for page in @event.pages.reverse
        c = page.condition
        if c.switch1_valid
          if self.self_switch?(c.switch1_id)
            next if @self_switches[c.switch1_id] == false
          else
            next if $game_switches[c.switch1_id] == false
          end
        end
        if c.switch2_valid
          if self.self_switch?(c.switch2_id)
            next if @self_switches[c.switch2_id] == false
          else
            next if $game_switches[c.switch2_id] == false
          end
        end
        if c.variable_valid
          if self.self_variable?(c.variable_id)
            next if @self_variables[c.variable_id] < c.variable_value
          else
            next if $game_variables[c.variable_id] < c.variable_value
          end
        end
        if c.self_switch_valid
          key = [@map_id, @event.id, c.self_switch_ch]
          next if $game_self_switches[key] != true
        end
        new_page = page
        break
      end
    end
    return if new_page == @page
    @page = new_page
    clear_starting
    if @page == nil
      @tile_id = 0
      @character_name = ""
      @character_hue = 0
      @move_type = 0
      @through = true
      @trigger = nil
      @list = nil
      @interpreter = nil
      return
    end
    @tile_id = @page.graphic.tile_id
    @character_name = @page.graphic.character_name
    @character_hue = @page.graphic.character_hue
    if @original_direction != @page.graphic.direction
      @direction = @page.graphic.direction
      @original_direction = @direction
      @prelock_direction = 0
    end
    if @original_pattern != @page.graphic.pattern
      @pattern = @page.graphic.pattern
      @original_pattern = @pattern
    end
    @opacity = @page.graphic.opacity
    @blend_type = @page.graphic.blend_type
    @move_type = @page.move_type
    @move_speed = @page.move_speed
    @move_frequency = @page.move_frequency
    @move_route = @page.move_route
    @move_route_index = 0
    @move_route_forcing = false
    @walk_anime = @page.walk_anime
    @step_anime = @page.step_anime
    @direction_fix = @page.direction_fix
    @through = @page.through
    @always_on_top = @page.always_on_top
    @trigger = @page.trigger
    @list = @page.list
    @interpreter = nil
    if @trigger == 4
      @interpreter = Interpreter.new
    end
    check_event_trigger_auto
  end
end

#==============================================================================
# * Interpreter
#==============================================================================

class Interpreter
  #--------------------------------------------------------------------------
  # * Conditional Branch
  #--------------------------------------------------------------------------
  def command_111
    result = false
    case @parameters[0]
    when 0  # switch
      switch_id = @parameters[1]
      value = (@parameters[2] == 0)
      if self_switch?(switch_id)
        result = (self_switches[switch_id] == value)
      else
        result = ($game_switches[switch_id] == value)
      end
    when 1  # variable
      if self_variable?(@parameters[1])
        value1 = self_variables[@parameters[1]]
      else
        value1 = $game_variables[@parameters[1]]
      end
      if @parameters[2] == 0
        value2 = @parameters[3]
      else
        if self_variable?(@parameters[3])
          value2 = self_variables[@parameters[3]]
        else
          value2 = $game_variables[@parameters[3]]
        end
      end
      result = case @parameters[4]
        when 0 ; (value1 == value2)
        when 1 ; (value1 >= value2)
        when 2 ; (value1 <= value2)
        when 3 ; (value1 > value2)
        when 4 ; (value1 < value2)
        when 5 ; (value1 != value2)
      end
    when 2  # self switch
      if @event_id > 0
        key = [$game_map.map_id, @event_id, @parameters[1]]
        if @parameters[2] == 0
          result = ($game_self_switches[key] == true)
        else
          result = ($game_self_switches[key] != true)
        end
      end
    when 3  # timer
      if $game_system.timer_working
        sec = $game_system.timer / Graphics.frame_rate
        if @parameters[2] == 0
          result = (sec >= @parameters[1])
        else
          result = (sec <= @parameters[1])
        end
      end
    when 4  # actor
      actor = $game_actors[@parameters[1]]
      if actor != nil
        case @parameters[2]
        when 0  # in party
          result = ($game_party.actors.include?(actor))
        when 1  # name
          result = (actor.name == @parameters[3])
        when 2  # skill
          result = (actor.skill_learn?(@parameters[3]))
        when 3  # weapon
          result = (actor.weapon_id == @parameters[3])
        when 4  # armor
          result = (actor.armor1_id == @parameters[3] or
                    actor.armor2_id == @parameters[3] or
                    actor.armor3_id == @parameters[3] or
                    actor.armor4_id == @parameters[3])
        when 5  # state
          result = (actor.state?(@parameters[3]))
        end
      end
    when 5  # enemy
      enemy = $game_troop.enemies[@parameters[1]]
      if enemy != nil
        case @parameters[2]
        when 0  # appear
          result = (enemy.exist?)
        when 1  # state
          result = (enemy.state?(@parameters[3]))
        end
      end
    when 6  # character
      character = get_character(@parameters[1])
      if character != nil
        result = (character.direction == @parameters[2])
      end
    when 7  # gold
      if @parameters[2] == 0
        result = ($game_party.gold >= @parameters[1])
      else
        result = ($game_party.gold <= @parameters[1])
      end
    when 8  # item
      result = ($game_party.item_number(@parameters[1]) > 0)
    when 9  # weapon
      result = ($game_party.weapon_number(@parameters[1]) > 0)
    when 10  # armor
      result = ($game_party.armor_number(@parameters[1]) > 0)
    when 11  # button
      result = (Input.press?(@parameters[1]))
    when 12  # script
      result = eval(@parameters[1])
    end
    @branch[@list[@index].indent] = result
    if @branch[@list[@index].indent] == true
      @branch.delete(@list[@index].indent)
      return true
    end
    return command_skip
  end
  #--------------------------------------------------------------------------
  # * Control Switches
  #--------------------------------------------------------------------------
  def command_121
    value = (@parameters[2] == 0)
    for i in @parameters[0]..@parameters[1]
      if self_switch?(i)
        self_switches[i] = value
      else
        $game_switches[i] = value
      end
    end
    $game_map.need_refresh = true
    return true
  end
  #--------------------------------------------------------------------------
  # * Control Variables
  #--------------------------------------------------------------------------
  def command_122
    value = 0
    case @parameters[3]
    when 0  # invariable
      value = @parameters[4]
    when 1  # variable
      if self_variable?(@parameters[4])
        value = self_variables[@parameters[4]]
      else
        value = $game_variables[@parameters[4]]
      end
    when 2  # random number
      value = @parameters[4] + rand(@parameters[5] - @parameters[4] + 1)
    when 3  # item
      value = $game_party.item_number(@parameters[4])
    when 4  # actor
      actor = $game_actors[@parameters[4]]
      if actor != nil
        case @parameters[5]
        when 0  # level
          value = actor.level
        when 1  # EXP
          value = actor.exp
        when 2  # HP
          value = actor.hp
        when 3  # SP
          value = actor.sp
        when 4  # MaxHP
          value = actor.maxhp
        when 5  # MaxSP
          value = actor.maxsp
        when 6  # strength
          value = actor.str
        when 7  # dexterity
          value = actor.dex
        when 8  # agility
          value = actor.agi
        when 9  # intelligence
          value = actor.int
        when 10  # attack power
          value = actor.atk
        when 11  # physical defense
          value = actor.pdef
        when 12  # magic defense
          value = actor.mdef
        when 13  # evasion
          value = actor.eva
        end
      end
    when 5  # enemy
      enemy = $game_troop.enemies[@parameters[4]]
      if enemy != nil
        case @parameters[5]
        when 0  # HP
          value = enemy.hp
        when 1  # SP
          value = enemy.sp
        when 2  # MaxHP
          value = enemy.maxhp
        when 3  # MaxSP
          value = enemy.maxsp
        when 4  # strength
          value = enemy.str
        when 5  # dexterity
          value = enemy.dex
        when 6  # agility
          value = enemy.agi
        when 7  # intelligence
          value = enemy.int
        when 8  # attack power
          value = enemy.atk
        when 9  # physical defense
          value = enemy.pdef
        when 10  # magic defense
          value = enemy.mdef
        when 11  # evasion correction
          value = enemy.eva
        end
      end
    when 6  # character
      character = get_character(@parameters[4])
      if character != nil
        case @parameters[5]
        when 0  # x-coordinate
          value = character.x
        when 1  # y-coordinate
          value = character.y
        when 2  # direction
          value = character.direction
        when 3  # screen x-coordinate
          value = character.screen_x
        when 4  # screen y-coordinate
          value = character.screen_y
        when 5  # terrain tag
          value = character.terrain_tag
        end
      end
    when 7  # other
      case @parameters[4]
      when 0  # map ID
        value = $game_map.map_id
      when 1  # number of party members
        value = $game_party.actors.size
      when 2  # gold
        value = $game_party.gold
      when 3  # steps
        value = $game_party.steps
      when 4  # play time
        value = Graphics.frame_count / Graphics.frame_rate
      when 5  # timer
        value = $game_system.timer / Graphics.frame_rate
      when 6  # save count
        value = $game_system.save_count
      end
    end
    for i in @parameters[0]..@parameters[1]
      iterator = case @parameters[2]
        when 0 then "="  # substitute
        when 1 then "+=" # add
        when 2 then "-=" # subtract
        when 3 then "*=" # multiply
        when 4 then "/=" # divide
        when 5 then "%=" # remainder
      end
      if self_variable?(i)
        eval("self_variables[i] #{iterator} #{value}") rescue nil
      else
        eval("$game_variables[i] #{iterator} #{value}") rescue nil
      end
    end
    $game_map.need_refresh = true
    return true
  end
  #--------------------------------------------------------------------------
  # * Button Input
  #--------------------------------------------------------------------------
  def input_button
    n = 0
    keys = []
    for k in Input.constants
      keys.push eval("Input::#{k}")
    end
    for i in keys
      next if !i.is_a?(Integer)
      if Input.trigger?(i)
        n = i
      end
    end
    if n > 0
      if self_variable?(@button_input_variable_id)
        self_variables[@button_input_variable_id] = n
      else
        $game_variables[@button_input_variable_id] = n
      end
      $game_map.need_refresh = true
      @button_input_variable_id = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Calculate Operated Value
  #--------------------------------------------------------------------------
  def operate_value(operation, operand_type, operand)
    if operand_type == 0
      value = operand
    else
      if self_variable?(operand)
        value = self_variables[operand]
      else
        value = $game_variables[operand]
      end
    end
    if operation == 1
      value = -value
    end
    return value
  end
  #--------------------------------------------------------------------------
  # * Transfer Player (Command)
  #--------------------------------------------------------------------------
  def command_201
    return true if $game_temp.in_battle
    if $game_temp.player_transferring or
      $game_temp.message_window_showing or
      $game_temp.transition_processing
      return false
    end
    if @parameters[0] == 0
      new_map_id = @parameters[1]
      new_x = @parameters[2]
      new_y = @parameters[3]
    else
      if self_variable?(@parameters[1])
        new_map_id = self_variables[@parameters[1]]
      else
        new_map_id = $game_variables[@parameters[1]]
      end
      if self_variable?(@parameters[2])
        new_x = self_variables[@parameters[2]]
      else
        new_x = $game_variables[@parameters[2]]
      end
      if self_variable?(@parameters[3])
        new_y = self_variables[@parameters[3]]
      else
        new_y = $game_variables[@parameters[3]]
      end
    end
    new_direction = @parameters[4]
    fade = (@parameters[5] == 0)
    transfer(new_map_id, new_x, new_y, new_direction, fade)
    @index += 1
    return false
  end
  #--------------------------------------------------------------------------
  # * Transfer Player (Method)
  #--------------------------------------------------------------------------
  def transfer(map_id, x, y, direction=$game_player.direction, fade=false)
    $game_temp.player_transferring = true
    $game_temp.player_new_map_id = map_id
    $game_temp.player_new_x = x
    $game_temp.player_new_y = y
    $game_temp.player_new_direction = direction
    if fade == true
      Graphics.freeze
      $game_temp.transition_processing = true
      $game_temp.transition_name = ""
    end
    return true
  end
  #--------------------------------------------------------------------------
  # * Set Event Location
  #--------------------------------------------------------------------------
  def command_202
    return true if $game_temp.in_battle
    character = get_character(@parameters[0])
    return true if character == nil
    if @parameters[1] == 0
      new_x = @parameters[2]
      new_y = @parameters[3]
      character.moveto(new_x, new_y)
    elsif @parameters[1] == 1
      if self_variable?(@parameters[2])
        new_x = self_variables[@parameters[2]]
      else
        new_x = $game_variables[@parameters[2]]
      end
      if self_variable?(@parameters[3])
        new_y = self_variables[@parameters[3]]
      else
        new_y = $game_variables[@parameters[3]]
      end
      character.moveto(new_x, new_y)
    else
      old_x = character.x
      old_y = character.y
      character2 = get_character(@parameters[2])
      if character2 != nil
        character.moveto(character2.x, character2.y)
        character2.moveto(old_x, old_y)
      end
    end
    case @parameters[4]
      when 2 ; character.turn_down    # down
      when 4 ; character.turn_left    # left
      when 6 ; character.turn_right  # right
      when 8 ; character.turn_up      # up
    end
    return true
  end
  #--------------------------------------------------------------------------
  # * Show Picture
  #--------------------------------------------------------------------------
  def command_231
    number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
    name = @parameters[1]
    origin = @parameters[2]
    if @parameters[3] == 0
      x = @parameters[4]
      y = @parameters[5]
    else
      if self_variable?(@parameters[4])
        x = self_variables[@parameters[4]]
      else
        x = $game_variables[@parameters[4]]
      end
      if self_variable?(@parameters[5])
        y = self_variables[@parameters[5]]
      else
        y = $game_variables[@parameters[5]]
      end
    end
    zoom_x    = @parameters[6]
    zoom_y    = @parameters[7]
    opacity    = @parameters[8]
    blend_type = @parameters[9]
    $game_screen.pictures[number].show(name, origin, x, y, zoom_x, zoom_y,
    opacity, blend_type)
    return true
  end
  #--------------------------------------------------------------------------
  # * Move Picture
  #--------------------------------------------------------------------------
  def command_232
    number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
    frames = @parameters[1] * 2
    origin = @parameters[2]
    if @parameters[3] == 0
      x = @parameters[4]
      y = @parameters[5]
    else
      if self_variable?(@parameters[4])
        x = self_variables[@parameters[4]]
      else
        x = $game_variables[@parameters[4]]
      end
      if self_variable?(@parameters[5])
        y = self_variables[@parameters[5]]
      else
        y = $game_variables[@parameters[5]]
      end
    end
    zoom_x    = @parameters[6]
    zoom_y    = @parameters[7]
    opacity    = @parameters[8]
    blend_type = @parameters[9]
    $game_screen.pictures[number].move(frames, origin, x, y, zoom_x, zoom_y,
    opacity, blend_type)
    return true
  end
  #--------------------------------------------------------------------------
  # * Shortcuts
  #--------------------------------------------------------------------------
  def self_switches
    $game_map.events[@event_id].self_switches
  end
  def self_variables
    $game_map.events[@event_id].self_variables
  end
  def self_switch?(switch_id)
    return false if $game_map.events[@event_id].nil?
    return $game_temp.self_switch?(switch_id)
  end
  def self_variable?(variable_id)
    return false if $game_map.events[@event_id].nil?
    return $game_temp.self_variable?(variable_id)
  end
end


Última edición por Wecoc el 2016-09-27, 20:56, editado 5 veces

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Ledai el 2016-09-26, 18:53

Fabuloso, solo una pregunta que me lo facilitaría todo o me lo dejaría igual que antes... (En el caso de poder usarlo o no)

Si por ejemplo tengo la variable de ID 1 con el Self delante y la uso en un evento determinado, (evento de mapa id 1) y luego copipasteo dicho evento tal cual, y tengo en uso la misma variable de ID 1, ¿Entrarían en conflicto los valores de esas dos variables?

El caso práctico:
La vida de un enemigo en mapa guardada en una de esas variable, y el enemigo copiado 5 veces en mapa en 5 eventos, ¿Si matas a uno, los matas a todos?

Ledai
Aventurero
Aventurero

0/3

Créditos 1368

Gracias : 126

http://ahurallg.blogspot.com.es/

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Wecoc el 2016-09-26, 19:08

Pongo dos eventos iguales. En la primera capa se cambia la variable local 1 a valor 1.
La segunda capa cambia de gráfico, y su condición es que su valor sea mayor o igual que 1.

Capas:

(Sí, la variable se llama '[Self] Pollo', qué chistoso soy (?) xD)

Resultado:

Espero haber respondido a tu pregunta ;D

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Ledai el 2016-09-26, 19:14

Acabo de probarlo y me salta un error de  método indefinido en la linea 527 y he hecho lo mismo mismo que tu ejemplo @~@

Ledai
Aventurero
Aventurero

0/3

Créditos 1368

Gracias : 126

http://ahurallg.blogspot.com.es/

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Wecoc el 2016-09-26, 19:28

No entiendo si es undefined method 'self_variable?' for nil: NilClass o bien undefined method 'self_variable?' for Game_Event o algo así
Siempre es mejor poner captura del error.

Creo que es una incompatibilidad x_x En parte lo veía a venir, la verdad es que el script modifica varios métodos y no pude aplicar alias en prácticamente ninguno así que será difícil de arreglar. Aunque si se detecta el script con el que da problemas quizá haya esperanza.

El script puede ser conflitivo con:

Game_Event:initialize (alias)
Game_Character:move_type_custom
Game_Event:refresh

Interpreter:command_111 (conditional branch)
Interpreter:command_121 (control switches)
Interpreter:command_122 (control variables)
Interpreter:input_button
Interpreter:operate_value
Interpreter:command_201 (transfer)
Interpreter:transfer
Interpreter:command_202 (set event location)
Interpreter:command_231 (show picture)
Interpreter:command_232 (move picture)


Siento que haya tantos, es que es un script que modifica bastantes aspectos estructurales.




Si el undefined method es el primer caso que he puesto, lo más probable es que sea problema de alguno de los tres últimos, mientras que si es el segundo caso, de alguno los tres primeros. Aunque si tuviera que meter el pollo la mano en el fuego diría que será uno de los tres primeros.


Última edición por Wecoc el 2016-09-28, 10:46, editado 1 vez

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Ledai el 2016-09-26, 20:12

OK, lo mas raro que he visto... me he vuelto loca descartando todos los Script que uso para dar con el problema, y NINGUNO da el error, se trata de un evento común en paralelo, el cual tiene un esperar 40 frames y después un calculo de interruptores y variables, lo curioso es que me da error cuando tras ese esperar frames hay algo relacionado con variables y interruptores, me he asegurado y en ese evento comun no uso ninguna variable con el Self delante, así que... no sé qué pasa, voy a probar a recrear el error en un proyecto nuevo y ver si en limpio tambie sucede.


Edt:
OK, error recreado con exito:
Para invocar el error.
Solo debes crear un evento en paralelo y común, con un interruptor que lo active y en su interior un interruptor x activo o un variable = X y listo!! Error de Script!

Ledai
Aventurero
Aventurero

0/3

Créditos 1368

Gracias : 126

http://ahurallg.blogspot.com.es/

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Wecoc el 2016-09-27, 07:36

Ah claro, los eventos comunes, no había contado con eso xD
Gracias por buscar el error. Creo que ya está arreglado todo lo que respecta a los eventos comunes (tanto asignar interruptor/variable como las condiciones y efectos)

Pronto subiré una nueva versión, porque en algunos comandos que pueden usar variables (como transportar) no les asigné variables locales, y hacerlo dará aún más juego al sistema.

Además me dí cuenta de que los métodos self_switch? y self_variable? no están bien optimizados y pueden causar lag, pero creo que es fácil arreglar eso.

Otra cosa que me dí cuenta y que no había caído en ella es que en los mensajes \v[1] no funciona con Self Variables, solo con las variables normales. Implementar eso en el mismo script es un poco peligroso nuevamente por cosas de compatibilidad, así que cuando pueda haré otro script a parte (como un add-on) para que ese código también funcione con las variables locales.

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Wecoc el 2016-09-27, 11:41

¡Update Versión 1.1!

- Solucionado bug que causaba lag
- Ampliado uso de variables locales: Asignar tecla
- Ampliado uso de variables locales: Transportar
- Ampliado uso de variables locales: Definir posición de evento
- Ampliado uso de variables locales: Mostrar / Mover imagen

Ahora ya todos los comandos de evento pueden funcionar con interruptores y variables locales (fuera de batalla)
Lo único que no funciona con variables locales es el código de mensaje \v[ID], y como dije subiré un script a parte para implementar eso.

Extra:
Por cierto, cambié un poco el funcionamiento de Asignar tecla; si usáis un Input personalizado con más teclas también las detectará, y si usáis un Keyboard para teclado entero y os interesa adaptarlo deberíais ser capaces de hacerlo vosotros mismos, solo hay que cambiar en el método input_button el nombre "Input" por "Keyboard", "Keys" o el que sea que use vuestro script de teclado.

Recordad que si usáis otros scripts que usan interruptores o variables esos deben ser globales (es decir los de siempre), reservad los locales para los engines que los requieran. Si un script concreto os interesa mucho que vaya por interruptor o variable local contactad conmigo y os lo adaptaré.

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Wecoc el 2016-09-28, 10:38

Pongo un script extra que permite usar variables locales en los mensajes, concretamente en los códigos \v[1] y en el Input Number.

Código:
#==============================================================================
# ** CSV for Events - Message Support (Add-On)
#------------------------------------------------------------------------------
# Put this script under Custom Self Switches & Self Variables v1.1
#------------------------------------------------------------------------------
# Autor: Wecoc (no credits required)
#==============================================================================

class Game_Temp
  attr_accessor :message_event_id
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  alias message_event_ini initialize unless $@
  def initialize
    message_event_ini
    @message_event_id = 0
  end
end

#==============================================================================
# * Window_Message
#==============================================================================

class Window_Message
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    x = y = 0
    @cursor_width = 0
    if $game_temp.choice_start == 0
      x = 8
    end
    event_id = $game_temp.message_event_id
    event = $game_map.events[event_id]
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) do
          if !event.nil? && $game_temp.self_variable?($1.to_i)
            event.self_variables[$1.to_i]
          else
            $game_variables[$1.to_i]
          end
        end
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      text.gsub!(/\\\\/) { "\000" }
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      while ((c = text.slice!(/./m)) != nil)
        if c == "\000"
          c = "\\"
        end
        if c == "\001"
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          next
        end
        if c == "\002"
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          next
        end
        if c == "\n"
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          y += 1
          x = 0
          x = 8 if y >= $game_temp.choice_start
          next
        end
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
        x += self.contents.text_size(c).width
      end
    end
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      if !event.nil? && $game_temp.self_variable?($1.to_i)
        number = event.self_variables[$game_temp.num_input_variable_id]
      else
        number = $game_variables[$game_temp.num_input_variable_id]
      end
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
end

#==============================================================================
# * Interpreter
#==============================================================================

class Interpreter
  #--------------------------------------------------------------------------
  # * Show Text
  #--------------------------------------------------------------------------
  def command_101
    return false if $game_temp.message_text != nil
    @message_waiting = true
    $game_temp.message_proc = Proc.new { @message_waiting = false }
    $game_temp.message_text = @list[@index].parameters[0] + "\n"
    $game_temp.message_event_id = @event_id
    line_count = 1
    loop do
      if @list[@index+1].code == 401
        $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
        line_count += 1
      else
        if @list[@index+1].code == 102
          if @list[@index+1].parameters[0].size <= 4 - line_count
            @index += 1
            $game_temp.choice_start = line_count
            setup_choices(@list[@index].parameters)
          end
        elsif @list[@index+1].code == 103
          if line_count < 4
            @index += 1
            $game_temp.num_input_start = line_count
            $game_temp.num_input_variable_id = @list[@index].parameters[0]
            $game_temp.num_input_digits_max = @list[@index].parameters[1]
          end
        end
        return true
      end
      @index += 1
    end
  end
  #--------------------------------------------------------------------------
  # * Show Choices
  #--------------------------------------------------------------------------
  def command_102
    return false if $game_temp.message_text != nil
    @message_waiting = true
    $game_temp.message_proc = Proc.new { @message_waiting = false }
    $game_temp.message_text = ""
    $game_temp.message_event_id = @event_id
    $game_temp.choice_start = 0
    setup_choices(@parameters)
    return true
  end
  #--------------------------------------------------------------------------
  # * Input Number
  #--------------------------------------------------------------------------
  def command_103
    return false if $game_temp.message_text != nil
    @message_waiting = true
    $game_temp.message_proc = Proc.new { @message_waiting = false }
    $game_temp.message_text = ""
    $game_temp.message_event_id = @event_id
    $game_temp.num_input_start = 0
    $game_temp.num_input_variable_id = @parameters[0]
    $game_temp.num_input_digits_max = @parameters[1]
    return true
  end
end

Éste script modifica:

Window_Message:refresh
Interpreter:command_101 (show text)
Interpreter:command_102 (show choices)
Interpreter:command_103 (input number)


No es compatible con scripts de Mensajería avanzada (UMS, AMS...), por eso lo he puesto a parte.

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Herramienta de Enginer] Custom Self Switches & Self Variables

Mensaje por Contenido patrocinado Hoy a las 06:57


Contenido patrocinado


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.