O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Usar Item em Evento (Direto do Inventário)

Iniciado por Sly, 08/04/2014 às 19:58

08/04/2014 às 19:58 Última edição: 10/04/2014 às 19:17 por Sly
Usar Item em Evento
criado por: Sly

Engine: RPG Maker VX Ace
Compatibilidade: boa
Facilidade de uso: fácil
Lag gerado: desprezível
Requerimentos: 1 Evento Comum Fixo e 1 pra cada Item Usável, 1 Variável, 1 Switch e 2 Scripts (Sendo 1 Opcional).

[box class=titlebg]
Condições de Uso
[/box]
  Pode usar a vontade, basta creditar.

[box class=titlebg]
Para que serve o sistema
[/box]
Permite que determinado item quando usado (no inventario) interaja com o evento a frente do personagem reconhecendo o item que foi usado.
AVISO: Este sistema é uma tremenda gambiarra, mas funciona e eu não encontrei outra forma que eu pudesse faze-lo quando precisei. Use por sua conta e risco.^^

EDIT: Se for usar o sistema com pouca frequência e/ou em poucos itens/eventos recomendo o sistema do Lima, discutido nas mensagens seguintes, por não envolver scripts ou depender da config de teclas mas há o porem de ser mais "volumoso" e não permitir uma mensagem "pré-item".

[box class=titlebg]
Imagens
[/box]
Spoiler
[close]

[box class=titlebg]
Como Funciona
[/box]
1- O Item Usável é configurado para ativar seu Evento Comum correspondente.
Spoiler
[close]
2- O Evento altera a Variável "UsarItem" para um valor correspondente ao item usado, aqui uso 1 (a ID da chave) pra facilitar. Depois ele ativa o Script que simula uma tecla pressionada durante 1 frame, no nosso caso a Z, por padrão referente ao botão C, que interage com os eventos. E ativa outro Evento Comum "ZerarItem".
Spoiler
[close]
Script - Input Simulator do Zalerinian:
Spoiler
$imported ||= {} 
$imported[:zf_input_sim] = 1.00
#+----------------------------------------------------------------------------+ 
#|   1 - Basic Info 
#-============================================================================- 
#|  Script:  Input Simulator 
#|  Version: 1.0.0 
#|  Updated: February 13th 2014 
#|  Author:  Zalerinian(~ZF) 
#------------------------------------------------------------------------------ 
#|   2 - Section Overview 
#-============================================================================- 
#|    1 - Basic Info 
#|    2 - Section Overview 
#|    3 - Script Summary 
#|    4 - Version History 
#|    5 - Script Support 
#|    6 - Attribution 
#|    7 - Method List 
#|    8 - Usage 
#|    9 - Known Issues 
#|   10 - Configuration 
#------------------------------------------------------------------------------ 
#|   3 - Script Summary 
#-============================================================================- 
#| This script allows the developer to send input to the game window, allowing 
#| them to control certain aspects of the game. This could be useful for 
#| creating tutorials, or for forcing general input to the game. 
#------------------------------------------------------------------------------ 
#|   4 - Version History 
#-============================================================================- 
#|  February 13th 2014 (1.0.0) 
#|   - Initial Release 
#------------------------------------------------------------------------------ 
#|   5 - Script Support 
#-============================================================================- 
#|  For support, bug reports, or feedback, please email scripts@razelon.tk, 
#|  or send me (Zalerinian) a private message (PM) on the RPG maker forums. 
#------------------------------------------------------------------------------ 
#|   6 - Attribution (Credit) 
#-============================================================================- 
#|  I do not require credit to be given. You may use this script in a 
#|  commercial or non-commercial game, so long as you do not claim that 
#|  you wrote it. You may port this script to another engine, and are free 
#|  to require credit for it. Do not claim that the original script was 
#|  yours. The script also must remain free for both commercial and 
#|  non-commercial use. 
#------------------------------------------------------------------------------ 
#|   7 - Method List 
#|    + = New Method 
#|    * = Aliased Method 
#|    ! = Overwritten Method 
#-============================================================================- 
#| Input 
#|  + simulate_key(key, duration) 
#|  * update 
#| 
#| Game_Sytem 
#|  + attr_accessor :really_force_sim_input 
#|  * update 
#| 
#| Game_Interpreter 
#|  + simulate_key(key, duration) 
#|  + toggle_sim_input_forced 
#|  + set_sim_input_forced 
#------------------------------------------------------------------------------ 
#|   8 - Usage 
#-============================================================================- 
#| To simulate a keypress, use a 'script...' command in an event and use 
#| simulate_key(key, duration) to force the key to be pressed. 
#| 
#| 'key' is a symbol (begins with ':') for a key. The symbols are all available 
#|   in the script, in the 'Input' section, where it says 'Sim_Keys ='. The  
#|   comments after the 'Sim_Keys =' details what each symbol corresponds to. 
#|   Each key appears to start with '_' and end with the colon, but when using 
#|   the key for the input, the colon must go first. For example, :_enter would 
#|   correspond to the enter key, and :_period would correspond to the period 
#|   key. 
#| 
#| 'duration' is a number specifying how long the key should be pressed. This 
#|   is meaured in frames, not seconds. There are 60 frames in a second, unless 
#|   it has been changed manually for you project. 
#------------------------------------------------------------------------------ 
#|   9 - Known Issues 
#-============================================================================- 
#| If Force_Input is set to false, pressing the key on the keyboard 
#|  will stop the key from being simulated as true. Forced input 
#|  may be changed during the game by using toggle_sim_input_forced, which will 
#|  turn it on or off, whichever it is not currently, or by using 
#|  set_sim_input_forced(on), where 'on' is either true or false, to set it 
#|  directly. 
#| 
#| Due to the way RM handles the keyboard, it is currently not possible to 
#|  detect how the player has their keyboard mapped. It is recommended you 
#|  either use a separate keyboard system for input, or my Keyboard Manager. 
#------------------------------------------------------------------------------ 
#|  10 - Configuration 
#-============================================================================- 
module Zale 
  module Input_Sim 
    # Don't touch this 
    Sim_Keys = { 
      _back: 0x08, _tab: 0x09, _enter: 0x0D, _shift: 0x10, _control: 0x11, _alt: 0x12, _capl: 0x14, _esc: 0x1B, _space: 0x20, 
      _pgup: 0x21, _pgdn: 0x22, _end: 0x23, _home: 0x24, _left: 0x25, _up: 0x26, _right: 0x27, _down: 0x28, _print_screen: 0x2C, 
      _insert: 0x2D, _delete: 0x2E, _help: 0x2F, _0: 0x30, _1: 0x31, _2: 0x32, _3: 0x33, _4: 0x34, _5: 0x35, _6: 0x36, _7: 0x37, 
      _8: 0x38, _9: 0x39, _a: 0x41, _b: 0x42, _c: 0x43, _d: 0x44, _e: 0x45, _f: 0x46, _g: 0x47, _h: 0x48, _i: 0x49, _j: 0x4A, 
      _k: 0x4B, _l: 0x4C, _m: 0x4D, _n: 0x4E, _o: 0x4F, _p: 0x50, _q: 0x51, _r: 0x52, _s: 0x53, _t: 0x54, _u: 0x55, _v: 0x56,  
      _w: 0x57, _x: 0x58, _y: 0x59, _z: 0x5A, _lwin: 0x5B, _rwin: 0x5C, _num0: 0x60, _num1: 0x61, _num2: 0x62, _num3: 0x63, 
      _num4: 0x64, _num5: 0x65, _num6: 0x66, _num7: 0x67, _num8: 0x68, _num9: 0x69, _multi: 0x6A, _add: 0x6B, _sub: 0x6D,  
      _dec: 0x6E, _div: 0x6F, _f1: 0x70, _f2: 0x71, _f3: 0x72, _f4: 0x73, _f5: 0x74, _f6: 0x75, _f7: 0x76, _f8: 0x77, 
      _f9: 0x78, _f10: 0x79, _f11: 0x7A, _f12: 0x7B, _f13: 0x7C, _f14: 0x7D, _f15: 0x7E, _f16: 0x7F, _f17: 0x80, _f18: 0x81, 
      _f19: 0x82, _f20: 0x83, _f21: 0x84, _f22: 0x85, _f23: 0x86, _f24: 0x87, _lshift: 0xA0, _rshift: 0xA1, _lcontrol: 0xA2,  
      _rcontrol: 0xA3, _lalt: 0xA4, _ralt: 0xA5, _colon: 0xBA, _equals: 0xBB, _comma: 0xBC, _minus: 0xBD, _period: 0xBE, 
      _slash: 0xBF, _tilde: 0xC0, _lbrace: 0xDB, _backslash: 0xDC, _rbrace: 0xDD, _quote: 0xDE 
    } 
# What each item means: 
  
# backspace, tab, enter, any shift, any control, any alt, caps lock, escape, spacebar 
# page up, page down, end, home, left arrow, up arrow, right arrow, down arrow, print screen 
# insert, delete, help, 0, 1, 2, 3, 4, 5, 6, 7 
# 8, 9, A, B, C, D, E, F, G, H, I, J 
# K, L, M, N, O, P, Q, R, S, T, U, V 
# W, X, Y, Z, left win, right win, numpad 0, numpad 1, numpad 2, numpad 3 
# numpad 4, numpad 5, numpad 6, numpad 7, numpad 8, numpad 9, numpad *, numpad +, numpad - 
# numpad ., numpad /, FN 1, FN 2, FN 3, FN 4, FN 5, FN 6, FN 7, FN 8 
# FN 9, FN 10, FN 11, FN 12, FN 13, FN 14, FN 15, FN 16, FN 17, FN 18 
# FN 19, FN 20, FN 21, FN 22, FN 23, FN 24, left shift, right shift, left ctrl 
# right ctrl, left alt, right alt, :, =, ',', -, . 
# /, `(~; The key next to 1), [, \, ], ' 
      
    # Feel free to edit below 
    
    Force_Input = true
  end
end
  
class Game_System 
  include Zale::Input_Sim 
  attr_accessor :really_force_sim_input
  alias zale_siminput_gsys_init_AOIsdi1192 initialize 
  def initialize 
    zale_siminput_gsys_init_AOIsdi1192 
    @really_force_sim_input = Force_Input 
  end
end
  
module Input 
  include Zale::Input_Sim 
  Keyboard = Win32API.new("user32.dll", "keybd_event", "nnnn", "v") 
    
  class << self
    alias zale_siminput_input_update_1290UIWDw9db update 
  end
    
  @sim_key_presses = [] 
  def self.simulate_key(key, duration) 
    vk = Sim_Keys[key] 
    vk.nil? ? (return false) : nil
    Keyboard.call(vk, 0, 0, 0) 
    @sim_key_presses.push([vk, duration]) 
  end
    
  def self.update 
    if @sim_key_presses.size > 0
      @sim_key_presses.each_with_index{ |keyset, i| 
        if keyset[1] - 1 <= 0
          Keyboard.call(keyset[0], 0, 2, 0) 
          @sim_key_presses.delete_at(i) 
        else
          keyset[1] -= 1
          @sim_key_presses[i] = keyset 
          if $game_system.really_force_sim_input 
            Keyboard.call(keyset[0], 0, 0, 0) 
          end
        end
      } 
    end
    zale_siminput_input_update_1290UIWDw9db 
  end
end
  
class Game_Interpreter 
  def simulate_key(key, duration) 
    Input.simulate_key(key, duration) 
  end
    
  def toggle_sim_input_forced 
    $game_system.really_force_sim_input ^= true
    $game_system.really_force_sim_input 
  end
    
  def set_sim_input_forced(on = true) 
    (on != true && on != false) ? return : nil
    $game_system.really_force_sim_input = on 
    on 
  end
end
[close]
  3- O Evento quando iniciado reconhece o Item usado (pelo valor que você estabeleceu, no exemplo a ID), e reage da forma que você quiser e ao fim desativa a variável "UsarItem" e Ativa uma Swicth Local para que o evento se torne "usado".
Spoiler
[close]
  4- A pagina dois do evento se ativa pelo Switch Local e mostra uma mensagem, pro caso do jogador tentar usa-lo novamente.
Spoiler
[close]
  5- O Evento Comum "ZerarItem" ativo no passo 2 fica funcionando durante todo o processo aguardando que o jogador se mova para que ele zere a variavel "UsarItem" e se auto-desligue. Evitando que um item usado longe de um evento continue válido enquanto o personagem perambula pelo mapa.
Spoiler
[close]

[box class=titlebg]
Inconvenientes
[/box]
1- Por depender da tecla Z agindo como botão C esse método não funciona caso o jogador altere a função da tecla Z. Pra remediar isto você pode usar este Script que pré-configura as teclas, impedindo que o jogador altere a função do Z.

Script - Keyboard Manager do Zalerinian:
Spoiler
$imported ||= {} 
$imported[:zf_keyboard_manager] = 1.01
#+----------------------------------------------------------------------------+ 
#|   1 - Basic Info 
#-============================================================================- 
#|  Script:  Keyboard Manager 
#|  Version: 1.0.1 
#|  Updated: March 11th 2014 
#|  Author:  Zalerinian(~ZF) 
#------------------------------------------------------------------------------ 
#|   2 - Section Overview 
#-============================================================================- 
#|    1 - Basic Info 
#|    2 - Section Overview 
#|    3 - Script Summary 
#|    4 - Version History 
#|    5 - Script Support 
#|    6 - Attribution 
#|    7 - Method List 
#|    8 - Usage 
#|    9 - Known Issues 
#|   10 - Configuration 
#------------------------------------------------------------------------------ 
#|   3 - Script Summary 
#-============================================================================- 
#| This script allows the developer to set the controls for the game, without 
#| needing to worry about the player's control setup. 
#------------------------------------------------------------------------------ 
#|   4 - Version History 
#-============================================================================- 
#|  v1.0.1 - March 11th, 2014 
#|   - Fixed a bug when using conditional branches in events 
#| 
#|  v1.0.0 - March 9th 2014 
#|   - Initial Release 
#------------------------------------------------------------------------------ 
#|   5 - Script Support 
#-============================================================================- 
#|  For support, bug reports, or feedback, please email scripts@razelon.tk, 
#|  or send me (Zalerinian) a private message (PM) on the RPG maker forums. 
#------------------------------------------------------------------------------ 
#|   6 - Attribution (Credit) 
#-============================================================================- 
#|  I do not require credit to be given. You may use this script in a 
#|  commercial or non-commercial game, so long as you do not claim that 
#|  you wrote it. You may port this script to another engine, and are free 
#|  to require credit for it. Do not claim that the original script was 
#|  yours. The script also must remain free for both commercial and 
#|  non-commercial use. 
#------------------------------------------------------------------------------ 
#|   7 - Method List 
#|    + = New Method 
#|    * = Aliased Method 
#|    ! = Overwritten Method 
#-============================================================================- 
#| Input 
#|  + any_key? 
#|  + released?(key) 
#|  * press?(key) 
#|  * trigger?(key) 
#|  ! repeat?(key) 
#------------------------------------------------------------------------------ 
#|   8 - Usage 
#-============================================================================- 
#| This script is plug-n-play, with configuration explained below. 
#------------------------------------------------------------------------------ 
#|   9 - Known Issues 
#-============================================================================- 
#| Bound keys will not function with gamepads, only those that do not get 
#| rebound will function with gamepads, however RMs gamepad system is designed 
#| to work with a controller setup that is not similar to those found on the 
#| Xbox or Playstation. 
#| 
#| Rebinding keys is not currently possible in-game. A future update will 
#| provide this feature. 
#------------------------------------------------------------------------------ 
#|  10 - Configuration 
#-============================================================================- 
module Zale 
  module Keyboard_Manager 
    # Editable Area below! 
    # Don't touch this 
    Keys = { 
  #   backspace    tab         enter         any shift     any control     any alt     caps lock    escape      spacebar 
      _back: 0x08, _tab: 0x09, _enter: 0x0D, _shift: 0x10, _control: 0x11, _alt: 0x12, _capl: 0x14, _esc: 0x1B, _space: 0x20, 
  #   page up      page down    end         home         left arrow   up arrow   right arrow   down arrow   print screen key 
      _pgup: 0x21, _pgdn: 0x22, _end: 0x23, _home: 0x24, _left: 0x25, _up: 0x26, _right: 0x27, _down: 0x28, _print_screen: 0x2C, 
  #   insert         delete         help         0         1         2         3         4         5         6         7 
      _insert: 0x2D, _delete: 0x2E, _help: 0x2F, _0: 0x30, _1: 0x31, _2: 0x32, _3: 0x33, _4: 0x34, _5: 0x35, _6: 0x36, _7: 0x37, 
  #   8          9         A         B         C         D         E         F         G         H         I         J 
      _8: 0x38, _9: 0x39, _a: 0x41, _b: 0x42, _c: 0x43, _d: 0x44, _e: 0x45, _f: 0x46, _g: 0x47, _h: 0x48, _i: 0x49, _j: 0x4A, 
  #   K         L         M         N         O         P         Q         R         S         T         U         V 
      _k: 0x4B, _l: 0x4C, _m: 0x4D, _n: 0x4E, _o: 0x4F, _p: 0x50, _q: 0x51, _r: 0x52, _s: 0x53, _t: 0x54, _u: 0x55, _v: 0x56,  
  #   W         X         Y         Z         left win     right win    numpad 0    numpad 1      numpad 2     numpad 3 
      _w: 0x57, _x: 0x58, _y: 0x59, _z: 0x5A, _lwin: 0x5B, _rwin: 0x5C, _num0: 0x60, _num1: 0x61, _num2: 0x62, _num3: 0x63, 
  #   numpad 4     numpad 5     numpad 6     numpad 7     numpad 8     numpad 9     numpad *      numpad +    numpad - 
      _num4: 0x64, _num5: 0x65, _num6: 0x66, _num7: 0x67, _num8: 0x68, _num9: 0x69, _multi: 0x6A, _add: 0x6B, _sub: 0x6D,  
  #   numpad .    numpad /    FN 1       FN 2       FN 3       FN 4       FN 5       FN 6       FN 7       FN 8 
      _dec: 0x6E, _div: 0x6F, _f1: 0x70, _f2: 0x71, _f3: 0x72, _f4: 0x73, _f5: 0x74, _f6: 0x75, _f7: 0x76, _f8: 0x77, 
  #   FN 9       FN 10       FN 11       FN 12       FN 13       FN 14       FN 15       FN 16       FN 17       FN 18 
      _f9: 0x78, _f10: 0x79, _f11: 0x7A, _f12: 0x7B, _f13: 0x7C, _f14: 0x7D, _f15: 0x7E, _f16: 0x7F, _f17: 0x80, _f18: 0x81, 
  #   FN 19       FN 20       FN 21       FN 22       FN 23       FN 24       left shift     right shift    left ctrl 
      _f19: 0x82, _f20: 0x83, _f21: 0x84, _f22: 0x85, _f23: 0x86, _f24: 0x87, _lshift: 0xA0, _rshift: 0xA1, _lcontrol: 0xA2,  
  #   right xtrl       left alt     right alt    :             =              ,             -             . 
      _rcontrol: 0xA3, _lalt: 0xA4, _ralt: 0xA5, _colon: 0xBA, _equals: 0xBB, _comma: 0xBC, _minus: 0xBD, _period: 0xBE, 
  #   /             ` (~)         [              \                 ]              ' (") 
      _slash: 0xBF, _tilde: 0xC0, _lbrace: 0xDB, _backslash: 0xDC, _rbrace: 0xDD, _quote: 0xDE 
    } 
      
    # Edit here:  
    # Each key binding is stored in the format: 
    # internal_button: array of keyboard keys to check. 
      
    # Using this, you can create your own key bindings for 
    # special functions. These names are used internally to 
    # check for input. Each key on the keyboard is stored 
    # in the Keys hash above. Ex: 
      
    # JUMP: [Keys[:_space] ] 
      
    # Now if whenever we use Input.trigger?(:JUMP), Input.press?(:JUMP), 
    # or similar, it will check to see if the spacebar has been 
    # pressed down, or just released if you use Input.released?(:JUMP). 
      
    # The default RM controls are setup by default. If  
    # wish to allow the player to change some controls, 
    # comment out (place a # before), or remove each 
    # control you wish to leave up to the player. Currently, 
    # this is the only way to change controls during the 
    # game. A later update will change this. 
    Key_Bindings = { 
      A:     [Keys[:_shift] ], 
      B:     [Keys[:_esc] ], 
      C:     [Keys[:_enter], Keys[:_space], Keys[:_z] ], 
      X:     [Keys[:_a] ], 
      Y:     [Keys[:_s] ], 
      Z:     [Keys[:_d] ], 
      L:     [Keys[:_q] ],  
      R:     [Keys[:_w] ], 
      UP:    [Keys[:_up], Keys[:_num8] ], 
      DOWN:  [Keys[:_down], Keys[:_num2] ], 
      RIGHT: [Keys[:_right], Keys[:_num6] ], 
      LEFT:  [Keys[:_left], Keys[:_num4] ], 
      SHIFT: [Keys[:_shift] ], 
      CTRL:  [Keys[:_control] ], 
      ALT:   [Keys[:_alt] ], 
      F5:    [Keys[:_f5] ], 
      F6:    [Keys[:_f6] ], 
      F7:    [Keys[:_f7] ], 
      F8:    [Keys[:_f8] ], 
      F9:    [Keys[:_f9] ] 
    } 
  end
end
  
module Input 
  @released = Hash.new{} 
  @triggers = Hash.new{} 
  @pressed  = Hash.new{} 
  @timer    = Hash.new{} 
  @table = { 
    2 => :DOWN, 
    4 => :LEFT, 
    6 => :RIGHT, 
    8 => :UP, 
    11 => :A, 
    12 => :B, 
    13 => :C, 
    14 => :X, 
    15 => :Y, 
    16 => :Z, 
    17 => :L, 
    18 => :R, 
  } 
    
  KEY   = Win32API.new("user32.dll", "GetKeyState",      ["i"], "i") 
  AKEY  = Win32API.new("user32.dll", "GetAsyncKeyState", ["i"], "i") 
    
  class << self
    include Zale::Keyboard_Manager 
    #-------------------------------------------------------------------------- 
    # Input: Update                                             ALIASED METHOD 
    #  * Update will update the status of each key for input check. 
    #-------------------------------------------------------------------------- 
    alias zale_keyman_input_update_CIO223cjcivoa update 
    def update 
      zale_keyman_input_update_CIO223cjcivoa 
      Keys.each_value{ |key| 
        @pressed[key]  == nil ? @pressed[key]  = false : nil
        @triggers[key] == nil ? @triggers[key] = false : nil
        @released[key] == nil ? @released[key] = false : nil
        @timer[key]    == nil ? @timer[key]    = 30    : nil
        (@pressed[key] == false && AKEY.call(key) != 0) ? @triggers[key] = true : @triggers[key] = false
        (AKEY.call(key) != 0) ? @pressed[key] = true : @pressed[key] = false
        (@pressed[key] == true && AKEY.call(key) == 0) ? @released[key] = true : @released[key] = false
      } 
    end
      
    #-------------------------------------------------------------------------- 
    # Input: Press?                                             ALIASED METHOD 
    #  * Press will check if the given key is pressed down on the keyboard. 
    #  * This method does not take into account any delays, if the key is 
    #  * down, this will return true. 
    #-------------------------------------------------------------------------- 
    alias zale_keyman_input_press_DIOjd2iovjs press? 
    def press?(key) 
      if @table[key] 
        key = @table[key] 
      end
      if Key_Bindings[key] 
        Key_Bindings[key].any?{|k| @pressed[k] } 
      elsif !@pressed[Keys[key]].nil? 
        @pressed[Keys[key]] 
      else
        zale_keyman_input_press_DIOjd2iovjs(key) 
      end
    end
  
    #-------------------------------------------------------------------------- 
    # Input: Trigger?                                           ALIASED METHOD 
    #  * Trigger checks if the key was just immediately pressed. This returns 
    #  * true only for the first frame the key is pressed down. To check for 
    #  * the key being down at any time, use press?, described above. 
    #-------------------------------------------------------------------------- 
    alias zale_keyman_input_trigger_389fHUKWquihc trigger? 
    def trigger?(key) 
      if @table[key] 
        key = @table[key] 
      end
      if Key_Bindings[key] 
        Key_Bindings[key].any?{|k| @triggers[k] } 
      elsif !@triggers[Keys[key]].nil? 
        @triggers[Keys[key]] 
      else
        zale_keyman_input_trigger_389fHUKWquihc(key) 
      end
    end
      
    #-------------------------------------------------------------------------- 
    # Input: Repeat?                                        OVERWRITTEN METHOD 
    #  * Repeat will check if a key is pressed down, similar to press?,  
    #  * however, repeat? will take into account a delay. After initially 
    #  * pressing the button, the delay will 30 frames (one half of second). 
    #  * After, the delay will be 5 frames (one 12th of a second) 
    #-------------------------------------------------------------------------- 
    def repeat?(key) 
      if @table[key] 
        key = @table[key] 
      end
      if !press?(key) || @timer[key].nil? 
        @timer[key] = 30
      end
      if trigger?(key) 
        return true
      else
        if @timer[key] <= 0
          @timer[key] = 5
          true
        else
          @timer[key] -= 1
          false
        end
      end
    end
  
    #-------------------------------------------------------------------------- 
    # Input: Toggle?                                                NEW METHOD 
    #  * Toggle checks the specified key to see if it is 'on or off'. This is 
    #  * useless for most keys, however capslock can by checked with this. 
    #-------------------------------------------------------------------------- 
    def toggle?(key) 
      if @table[key] 
        key = @table[key] 
      end
      key = Keys[key] 
      key ? nil : (return false) 
      if KEY.call(key) == 1
        return true
      else
        return false
      end
    end
  
    #-------------------------------------------------------------------------- 
    # Input: Released?                                              NEW METHOD 
    #  * Similar to trigger?, release will check if a key has jut been 
    #  * released. Again, this only returns true for the first frame 
    #-------------------------------------------------------------------------- 
    def released?(key) 
      if @table[key] 
        key = @table[key] 
      end
      if Key_Bindings[key] 
        Key_Bindings[key].all?{ |bind| @released[bind] } 
      else
        @released[key] 
      end
    end
  
    #-------------------------------------------------------------------------- 
    # Input: Any_key?                                               NEW METHOD 
    #  * Any_key? will check to see if any key on the entire keyboard has been 
    #  * pressed down. If any single key is down, this returns true, otherwise 
    #  * false. 
    #-------------------------------------------------------------------------- 
    def any_key? 
      @pressed.any?{|i| i[1] == true} 
    end
  end
end
[close]
  2- Eventos não configurados para receber Itens iniciarão, como se o jogador os tivesse ativado. Para resolver, você pode configura-los com uma condição para quando a variável "ItemUsado" for diferente de "0" eles mostrarem uma mensagem de fracasso no uso do item, tendo como exceção a reação normal do evento.
Assim:
Spoiler
[close]
Alem disso você pode criar uma Switch que é ativada apenas nos mapas que utilizam o sistema e condicionar o conteúdo dos Eventos Comuns dos Itens a ela. Tendo como exceção a mensagem de fracasso. Assim você só terá que configurar os itens nos mapas em que o sistema estiver ativo.
Assim:
Spoiler
[close]

[box class=titlebg]
Download
[/box]

[box class=titlebg]
Créditos e Avisos
[/box]
Criador : Sly
Scripts: Zalerinian
Postado por: Sly
_______________________________________
Gosta de RPG? Visite-nos:

Pelo que vejo, parece ser um dos seus primeiros sistemas, e está indo muito bem! Só que tem algumas coisas que eu não percebo:

- O objetivo do sistema é possuir uma chave, e só quando possui a chave é que consegue abrir o baú? É que se for assim dá para fazer de um método mais fácil

- Para que usa o script "simulate_key"? Não percebi bem o seu objetivo


Bem é isso! +ouro

Citação de: Lima online 10/04/2014 às 09:13
Pelo que vejo, parece ser um dos seus primeiros sistemas, e está indo muito bem! Só que tem algumas coisas que eu não percebo:

- O objetivo do sistema é possuir uma chave, e só quando possui a chave é que consegue abrir o baú? É que se for assim dá para fazer de um método mais fácil

- Para que usa o script "simulate_key"? Não percebi bem o seu objetivo


Bem é isso! +ouro

O objetivo principal é fazer com que o jogador possa usar o item direto do inventario (sem janelas adicionais) em um evento a sua frente. O meu problema com os outros jeitos que vi é que fica óbvio para o jogador que aquele evento precisa de um item, por que ele pede especificamente para escolher um item no inventário ou então nem pede, "usa" por conta própria, o que na minha visão consegue ser pior (a não ser pra chaves, ai é quase plausível, por que ainda assim o jogador milagrosamente sabe que chave vai em que porta).

Pro exemplo da chave não faz tanta diferença, mas imagine que o jogador precisa usar uma "Chave de Fenda" em uma entrada de ventilação por exemplo. Do modo comum o evento pediria um item e ficaria óbvia a necessidade do mesmo e ele poderia simplesmente tentar tudo que tem até que funcione.

Já como fiz, o jogador tem que saber o que está fazendo, ele não ganha uma "dica descarada" do jogo quanto a precisar de um item, e não pode simplesmente tentar todos os itens em tudo por que TODOS os eventos reagem ao item, mesmo que negativamente. Ou seja, ele nunca saberá que evento precisa realmente de um item, a menos que descubra por conta própria durante o jogo (como eu acho que deve ser).
Pra mim o evento abrir a "Seleção de Item" é um spoiler pesado e sempre me incomodou. rs

O exemplo com a chave foi só por ser o uso mais comum. ^^

Obrigado por perguntar, a gente faz pra si mesmo e acaba se perdendo rs
_______________________________________
Gosta de RPG? Visite-nos:

Bem isso dá para fazer apenas por eventos, vou explicar:


Spoiler




[close]


Espero que não fique chateado só estou tentando ajudar ;) Se não perceber alguma coisa avise!


10/04/2014 às 17:30 #4 Última edição: 10/04/2014 às 18:06 por Sly
Eu entendi o que você indicou, e refiz aqui passo a passo.
Funciona como indicado mas pro meu objetivo não sei se é a melhor opção por que senti algumas limitações.
Pelo que percebi por exemplo, se ele está entre dois eventos e usa um item os dois se ativam, se eu por uma condição quanto a direção do jogador ele ainda assim pode usar o item numa direção, falhar e depois se virar ou até andar pelo mapa e o evento se ativa á distância quando ele se virar na direção correta.
Se eu colocar o "ZerarItem" da forma que fiz antes resolve o problema de andar mas o de se virar permanece.

Também não vi como por uma mensagem quando o jogador simplesmente interagir com o evento, tentei e a mensagem aparece mas o sistema para de funcionar, n sei por que. rs

Mas como pretendo usar em um projeto que interagir itens em eventos é muito frequente a estrutura pra fazer desse modo me parece meio "colossal". Pra mim o modo anterior ainda parece mais fácil de manejar com uma quantidade grande de eventos e itens interagindo entre si.

Eu posso estar sendo só "cego", afinal não sou um conhecedor profundo do Maker.

Obrigado pela ajuda, se eu ainda não tiver entendido nada, por favor me diga. rs
_______________________________________
Gosta de RPG? Visite-nos:

Citação de: Sly online 10/04/2014 às 17:30
Eu entendi o que você indicou, e refiz aqui passo a passo.
Funciona como indicado mas pro meu objetivo não sei se é a melhor opção por que senti algumas limitações.
Pelo que percebi por exemplo, se ele está entre dois eventos e usa um item os dois se ativam, se eu por uma condição quanto a direção do jogador ele ainda assim pode usar o item numa direção, falhar e depois se virar ou até andar pelo mapa e o evento se ativa á distância quando ele se virar na direção correta.
Se eu colocar o "ZerarItem" da forma que fiz antes resolve esse problema.

Também não vi como por uma mensagem quando o jogador simplesmente interagir com o evento, tentei e a mensagem aparece mas o sistema para de funcionar, n sei por que. rs

Mas como pretendo usar em um projeto que interagir itens em eventos é muito frequente a estrutura pra fazer desse modo me parece meio "colossal". Pra mim o modo anterior ainda parece mais fácil de manejar com uma quantidade grande de eventos e itens interagindo entre si.

Eu posso estar sendo só "cego", afinal não sou um conhecedor profundo do Maker.

Obrigado pela ajuda, se eu ainda não tiver entendido nada, por favor me diga. rs

Tem o problema de andar pelo mapa? Então é só ir nos eventos comuns e colocar nos dois se não swtich 2 off e pronto, fica do jeito que você quer, mais alguma limitação?

Citação de: Lima online 10/04/2014 às 18:06
Citação de: Sly online 10/04/2014 às 17:30
Eu entendi o que você indicou, e refiz aqui passo a passo.
Funciona como indicado mas pro meu objetivo não sei se é a melhor opção por que senti algumas limitações.
Pelo que percebi por exemplo, se ele está entre dois eventos e usa um item os dois se ativam, se eu por uma condição quanto a direção do jogador ele ainda assim pode usar o item numa direção, falhar e depois se virar ou até andar pelo mapa e o evento se ativa á distância quando ele se virar na direção correta.
Se eu colocar o "ZerarItem" da forma que fiz antes resolve esse problema.

Também não vi como por uma mensagem quando o jogador simplesmente interagir com o evento, tentei e a mensagem aparece mas o sistema para de funcionar, n sei por que. rs

Mas como pretendo usar em um projeto que interagir itens em eventos é muito frequente a estrutura pra fazer desse modo me parece meio "colossal". Pra mim o modo anterior ainda parece mais fácil de manejar com uma quantidade grande de eventos e itens interagindo entre si.

Eu posso estar sendo só "cego", afinal não sou um conhecedor profundo do Maker.

Obrigado pela ajuda, se eu ainda não tiver entendido nada, por favor me diga. rs

Tem o problema de andar pelo mapa? Então é só ir nos eventos comuns e colocar nos dois se não swtich 2 off e pronto, fica do jeito que você quer, mais alguma limitação?

Mesmo pondo isso ele continua podendo andar pelo mapa e ativar o item de longe.
Por exemplo:
Temos um baú acima e um a direita. Se ele tentar usar a chave no da direita, falhando ou não, quando ele se virar para o de cima ele tbm abrirá. Se sem se virar ele recuar e mais tarde olhar pra cima, o de cima tbm se abre.

Será que to fazendo errado? E a questão da mensagem quando interagir?

Obrigado, e desculpe se estou sendo "burro" mas fazer o que rs
_______________________________________
Gosta de RPG? Visite-nos:

Só agora percebi o que quis dizer, então você vai ao local do baú onde tem a condição da switch 2 on e abre o baú adiciona depois da switch 2 on a condição do personagem estar olhando para cima fica na 3 aba das condições, e no senão dessa condição mete switch 2 off, resultou? mais alguma coisa?

Citação de: Lima online 10/04/2014 às 18:25
Só agora percebi o que quis dizer, então você vai ao local do baú onde tem a condição da switch 2 on e abre o baú adiciona depois da switch 2 on a condição do personagem estar olhando para cima fica na 3 aba das condições, e no senão dessa condição mete switch 2 off, resultou? mais alguma coisa?

Funciona perfeitamente agora. Obrigado.
Pra concluir essa outra opção de fazer a coisa:
Como eu faria a mensagem de quando o jogador simplesmente interage com o evento?
_______________________________________
Gosta de RPG? Visite-nos:

Não percebi bem, mas estaria a dizer quando o jogador pressiona enter perto do evento?

Se for isso está a ver onde tem aquele evento atrás do baú aí coloca a mesma condição que colocou no evento comum só que mete também a tecla ser pressionada porque está em processo paralelo, e depois mete a mensagem aconselho a não usar o enter senão irá estar sempre a aparecer a mensagem!

Citação de: Lima online 10/04/2014 às 18:45
Não percebi bem, mas estaria a dizer quando o jogador pressiona enter perto do evento?

Se for isso está a ver onde tem aquele evento atrás do baú aí coloca a mesma condição que colocou no evento comum só que mete também a tecla ser pressionada porque está em processo paralelo, e depois mete a mensagem aconselho a não usar o enter senão irá estar sempre a aparecer a mensagem!

Bom com qualquer botão que não seja o (C) funciona bem mas a mensagem fica meio constante, aparece quando o baú abre, e quando ele já está aberto. Creio que por estarem em eventos diferentes a mensagem não é afetada pela Switch Local do baú fazendo ela sempre aparecer.

Alguma sugestão?

Obrigado
_______________________________________
Gosta de RPG? Visite-nos:

Citação de: Sly online 10/04/2014 às 18:56
Citação de: Lima online 10/04/2014 às 18:45
Não percebi bem, mas estaria a dizer quando o jogador pressiona enter perto do evento?

Se for isso está a ver onde tem aquele evento atrás do baú aí coloca a mesma condição que colocou no evento comum só que mete também a tecla ser pressionada porque está em processo paralelo, e depois mete a mensagem aconselho a não usar o enter senão irá estar sempre a aparecer a mensagem!

Bom com qualquer botão que não seja o (C) funciona bem mas a mensagem fica meio constante, aparece quando o baú abre, e quando ele já está aberto. Creio que por estarem em eventos diferentes a mensagem não é afetada pela Switch Local do baú fazendo ela sempre aparecer.

Alguma sugestão?

Obrigado

Sim xD só tem de colocar mais uma condição que a switch 2 tem de estar off, resultou?

Citação de: Lima online 10/04/2014 às 19:00
Citação de: Sly online 10/04/2014 às 18:56
Citação de: Lima online 10/04/2014 às 18:45
Não percebi bem, mas estaria a dizer quando o jogador pressiona enter perto do evento?

Se for isso está a ver onde tem aquele evento atrás do baú aí coloca a mesma condição que colocou no evento comum só que mete também a tecla ser pressionada porque está em processo paralelo, e depois mete a mensagem aconselho a não usar o enter senão irá estar sempre a aparecer a mensagem!

Bom com qualquer botão que não seja o (C) funciona bem mas a mensagem fica meio constante, aparece quando o baú abre, e quando ele já está aberto. Creio que por estarem em eventos diferentes a mensagem não é afetada pela Switch Local do baú fazendo ela sempre aparecer.

Alguma sugestão?

Obrigado

Sim xD só tem de colocar mais uma condição que a switch 2 tem de estar off, resultou?

Resolveu o depois, mas ainda aparece quando o baú abre e agora pra abrir depois de usar o item eu tenho que interagir com o baú, rs Ta difícil rs

Pela quantidade de coisas no evento é mais aconselhado pra jogos que usam pouco esse sistema, por q no que pretendo um evento pode receber vários itens e reagir de formas diferentes quanto a eles. Imagina a tonelada de condições rs

Obrigado pela disposição em ajudar, se puder achar um modo de resolver esse ultimo problema é legal ficar aqui uma outra opção pro pessoal usar dependendo do estilo de jogo e da frequência de uso do sistema. ^^
_______________________________________
Gosta de RPG? Visite-nos:

Bem está ficando complicado aqui funcionou, mas está a ficar maior que aí é melhor deixar assim!

Citação de: Lima online 10/04/2014 às 19:07
Bem está ficando complicado aqui funcionou, mas está a ficar maior que aí é melhor deixar assim!

Deixarei junto ao aviso no topico a indicação pra esse outro modo caso o sistema vá ser utilizado com baixa frequência no jogo.
Obrigado pela ajuda ^^
_______________________________________
Gosta de RPG? Visite-nos: