Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
YEM Keyboard Input
Autor Wiadomość
CreeperCrisis 



Preferowany:
RPG Maker VXAce

Pomógł: 32 razy
Dołączył: 01 Maj 2010
Posty: 395
Wysłany: Czw 07 Lip, 2011 20:20
YEM Keyboard Input
YEM Keyboard Input


Autor:

Yanfly

Opis: (Nauczcie się Angielskiego xD)

Spoiler:

This is a utility script that provides the functionality to return inputs
from the keyboard as well as free up more keys to be used in the Input module.
This script will also replace Scene_Name and allow for direct keyboard input
to type in an actor's name as well as fix the maximum characters shown from
the default base script.



Screenshot:
Spoiler:



Skrypt:
Spoiler:

Kod:
#===============================================================================
#
# OriginalWij and Yanfly Collaboration - Keyboard Input
# Last Date Updated: 2010.06.12
# Level: Normal
#
# This is a utility script that provides the functionality to return inputs
# from the keyboard as well as free up more keys to be used in the Input module.
# This script will also replace Scene_Name and allow for direct keyboard input
# to type in an actor's name as well as fix the maximum characters shown from
# the default base script.
#
#===============================================================================
# Updates
# -----------------------------------------------------------------------------
# o 2010.06.12 - Started and Finished Script.
#===============================================================================
# Instructions
# -----------------------------------------------------------------------------
# To install this script, open up your script editor and copy/paste this script
# to an open slot below  Materials but above  Main. Remember to save.
#
# For users:
#   The Name Input event has been now replaced. It not longer takes you to the
#   name entry scene, but instead, allows the player to enter in the name of
#   the desired actor right in the current screen itself without needing to
#   change the scene altogether.
#
# For scripters:
#   For those curious as to how to retrieve certain letters while coding their
#   Input commands, use the following as reference
#   
#   LETTERS['A'] through LETTERS['Z']
#     This returns true if the respective letter from A through Z is pressed.
#   
#   NUMBERS[0] through NUMBERS[9]
#     This returns true if the respective number on the top row of the keyboard
#     is pressed. This does not include the numberpad.
#   
#   NUMPAD[0] through NUMPAD[9]
#     This returns true if the respective number in the number pad is pressed.
#     This does not include the numbers found at the top row of the keyboard.
#   
#   Symbol Keys
#     
#     USCORE  - This returns true if the - key is pressed.
#     EQUALS  - This returns true if the = key is pressed.
#     SCOLON  - This returns true if the ; key is pressed.
#     QUOTE   - This returns true if the ' key is pressed.
#     COMMA   - This returns true if the , key is pressed.
#     PERIOD  - This returns true if the . key is pressed.
#     SLASH   - This returns true if the / key is pressed.
#     BSLASH  - This returns true if the \ key is pressed.
#     LBRACE  - This returns true if the [ key is pressed.
#     RBRACE  - This returns true if the ] key is pressed.
#     TILDE   - This returns true if the ~ key is pressed.
#   
#   Command Keys
#     
#     BACK    - This returns true if the backspace key is pressed.
#     ENTER   - This returns true if the enter/return key is pressed.
#     SPACE   - This returns true if the space bar is pressed.
#     ESC     - This returns true if the escape key is pressed.
#   
#   Module Methods
#     
#     Input.typing?
#       To check if typing is occurring. Returns true or false.
#     
#     Input.key_type
#       Returns whatever key is being used to type as a string.
#   
#   Example:
#   
#     if Input.typing?
#       string = Input.key_type
#     end
#
#===============================================================================

$imported = {} if $imported == nil
$imported["KeyboardInput"] = true

#===============================================================================
# Editting anything past this point may potentially result in causing computer
# damage, incontinence, explosion of user's head, coma, death, and/or halitosis.
# Therefore, edit at your own risk.
#===============================================================================

#===============================================================================
# Input
#===============================================================================

class << Input 
  #--------------------------------------------------------------------------
  # Aliases (Mods - Linked to Module) - Created by OriginalWij
  #--------------------------------------------------------------------------
  alias ow_dt_i_press press? unless $@
  alias ow_dt_i_trigger trigger? unless $@
  alias ow_dt_i_repeat repeat? unless $@
  alias ow_dt_i_update update unless $@
end

module Input
  #--------------------------------------------------------------------------
  # constants - Created by OriginalWij and Yanfly
  #--------------------------------------------------------------------------
  LETTERS = {}       
  LETTERS['A'] = 65; LETTERS['B'] = 66; LETTERS['C'] = 67; LETTERS['D'] = 68
  LETTERS['E'] = 69; LETTERS['F'] = 70; LETTERS['G'] = 71; LETTERS['H'] = 72
  LETTERS['I'] = 73; LETTERS['J'] = 74; LETTERS['K'] = 75; LETTERS['L'] = 76
  LETTERS['M'] = 77; LETTERS['N'] = 78; LETTERS['O'] = 79; LETTERS['P'] = 80
  LETTERS['Q'] = 81; LETTERS['R'] = 82; LETTERS['S'] = 83; LETTERS['T'] = 84
  LETTERS['U'] = 85; LETTERS['V'] = 86; LETTERS['W'] = 87; LETTERS['X'] = 88
  LETTERS['Y'] = 89; LETTERS['Z'] = 90
  NUMBERS = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57]
  NUMPAD = [96, 97, 98, 99, 100, 101, 102, 103, 104, 105]
  BACK   = 138; ENTER  = 143; SPACE  = 32;  SCOLON = 186; ESC    = 157
  QUOTE  = 222; EQUALS = 187; COMMA  = 188; USCORE = 189; PERIOD = 190
  SLASH  = 191; LBRACE = 219; RBRACE = 221; BSLASH = 220; TILDE  = 192
  F10    = 121; F11    = 122; CAPS   = 20;  NMUL   = 106; NPLUS  = 107
  NSEP   = 108; NMINUS = 109; NDECI  = 110; NDIV   = 111; Extras =
  [USCORE, EQUALS, LBRACE, RBRACE, BSLASH, SCOLON, QUOTE, COMMA, PERIOD, SLASH,
   NMUL, NPLUS, NSEP, NMINUS, NDECI, NDIV]

  #--------------------------------------------------------------------------
  # initial module settings - Created by OriginalWij and Yanfly
  #--------------------------------------------------------------------------
  GetKeyState = Win32API.new("user32", "GetAsyncKeyState", "i", "i")
  GetCapState = Win32API.new("user32", "GetKeyState", "i", "i")
  KeyRepeatCounter = {}
  module_function
  #--------------------------------------------------------------------------
  # alias method: update - Created by OriginalWij
  #--------------------------------------------------------------------------
  def update
    ow_dt_i_update
    for key in KeyRepeatCounter.keys
      if (GetKeyState.call(key).abs & 0x8000 == 0x8000)
        KeyRepeatCounter[key] += 1
      else
        KeyRepeatCounter.delete(key)
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # alias method: press? - Created by OriginalWij
  #--------------------------------------------------------------------------
  def press?(key)
    return ow_dt_i_press(key) if key < 30
    adjusted_key = adjust_key(key)
    return true unless KeyRepeatCounter[adjusted_key].nil?
    return key_pressed?(adjusted_key)
  end
 
  #--------------------------------------------------------------------------
  # alias method: trigger? - Created by OriginalWij
  #--------------------------------------------------------------------------
  def trigger?(key)
    return ow_dt_i_trigger(key) if key < 30
    adjusted_key = adjust_key(key)
    count = KeyRepeatCounter[adjusted_key]
    return ((count == 0) or (count.nil? ? key_pressed?(adjusted_key) : false))
  end
 
  #--------------------------------------------------------------------------
  # alias method: repeat? - Created by OriginalWij
  #--------------------------------------------------------------------------
  def repeat?(key)
    return ow_dt_i_repeat(key) if key < 30
    adjusted_key = adjust_key(key)
    count = KeyRepeatCounter[adjusted_key]
    return true if count == 0
    if count.nil?
      return key_pressed?(adjusted_key)
    else
      return (count >= 23 and (count - 23) % 6 == 0)
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: adjust_key - Created by OriginalWij
  #--------------------------------------------------------------------------
  def adjust_key(key)
    key -= 130 if key.between?(130, 158)
    return key
  end
 
  #--------------------------------------------------------------------------
  # new method: key_pressed? - Created by OriginalWij
  #--------------------------------------------------------------------------
  def key_pressed?(key)
    if (GetKeyState.call(key).abs & 0x8000 == 0x8000)
      KeyRepeatCounter[key] = 0
      return true
    end
    return false
  end
 
  #--------------------------------------------------------------------------
  # new method: typing? - Created by Yanfly
  #--------------------------------------------------------------------------
  def typing?
    return true if repeat?(SPACE)
    for i in 'A'..'Z'
      return true if repeat?(LETTERS[i])
    end
    for i in 0...NUMBERS.size
      return true if repeat?(NUMBERS[i])
      return true if repeat?(NUMPAD[i])
    end
    for key in Extras
      return true if repeat?(key)
    end
    return false
  end
 
  #--------------------------------------------------------------------------
  # new method: key_type - Created by Yanfly
  #--------------------------------------------------------------------------
  def key_type
    return " " if repeat?(SPACE)
    for i in 'A'..'Z'
      next unless repeat?(LETTERS[i])
      return upcase? ? i.upcase : i.downcase
    end
    for i in 0...NUMBERS.size
      return i.to_s if repeat?(NUMPAD[i])
      if !press?(SHIFT)
        return i.to_s if repeat?(NUMBERS[i])
      elsif repeat?(NUMBERS[i])
        case i
        when 1; return "!"
        when 2; return "@"
        when 3; return "#"
        when 4; return "$"
        when 5; return "%"
        when 6; return "^"
        when 7; return "&"
        when 8; return "*"
        when 9; return "("
        when 0; return ")"
        end
      end
    end
    for key in Extras
      next unless repeat?(key)
      case key
      when USCORE; return press?(SHIFT) ? "_" : "-"
      when EQUALS; return press?(SHIFT) ? "+" : "="
      when LBRACE; return press?(SHIFT) ? "{" : "["
      when RBRACE; return press?(SHIFT) ? "}" : "]"
      when BSLASH; return press?(SHIFT) ? "|" : "\\"
      when SCOLON; return press?(SHIFT) ? ":" : ";"
      when QUOTE;  return press?(SHIFT) ? '"' : "'"
      when COMMA;  return press?(SHIFT) ? "<" : ","
      when PERIOD; return press?(SHIFT) ? ">" : "."
      when SLASH;  return press?(SHIFT) ? "?" : "/"
      when NMUL;   return "*"
      when NPLUS;  return "+"
      when NSEP;   return ","
      when NMINUS; return "-"
      when NDECI;  return "."
      when NDIV;   return "/"
      end
    end
    return ""
  end
 
  #--------------------------------------------------------------------------
  # new method: upcase? - Created by Yanfly
  #--------------------------------------------------------------------------
  def upcase?
    return !press?(SHIFT) if GetCapState.call(CAPS) == 1
    return true if press?(SHIFT)
    return false
  end
 
end # Input

#===============================================================================
# Game_Interpreter
#===============================================================================

class Game_Interpreter
 
  #--------------------------------------------------------------------------
  # overwrite method: command_303 (Name Input Processing)
  #--------------------------------------------------------------------------
  def command_303
    if $data_actors[@params[0]] != nil
      $scene.name_entry(@params[0], @params[1])
    end
    @index += 1
    return false
  end
 
end # Game_Interpreter

#===============================================================================
# Window_NameEdit
#===============================================================================

class Window_NameEdit < Window_Base
 
  #--------------------------------------------------------------------------
  # overwrite method: initialize
  #--------------------------------------------------------------------------
  def initialize(actor, max_char)
    dw = Graphics.width - 176
    dy = (Graphics.height - 128) / 2
    if $game_message.visible
      difference = Graphics.height - 128
      case $game_message.position
      when 0; dy += 64
      when 1; dy += 0
      when 2; dy -= 64
      end
    end
    super(88, dy, dw, 128)
    @actor = actor
    @name = actor.name
    @max_char = max_char
    name_array = @name.split(//)[0...@max_char]
    @name = ""
    for i in 0...name_array.size
      @name += name_array[i]
    end
    @default_name = @name
    @index = name_array.size
    self.active = false
    refresh
    update_cursor
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: item_rect
  #--------------------------------------------------------------------------
  def item_rect(index)
    if index == @max_char
      rect = Rect.new(0, 0, 0, 0)
    else
      rect = Rect.new(0, 0, 0, 0)
      rect.x = 112 + index * 12
      rect.y = 36
      rect.width = 24
      rect.height = WLH
    end
    return rect
  end
 
end # Window_NameEdit

#===============================================================================
# Scene_Base
#===============================================================================

class Scene_Base
 
  #--------------------------------------------------------------------------
  # new method: name_entry
  #--------------------------------------------------------------------------
  def name_entry(actor_id, max_char)
    @name_actor_id = actor_id
    @name_entry_max = max_char
    start_name_entry
    end_name_entry
  end
 
  #--------------------------------------------------------------------------
  # new method: start_name_entry
  #--------------------------------------------------------------------------
  def start_name_entry
    Graphics.freeze
    actor = $game_actors[@name_actor_id]
    @edit_window = Window_NameEdit.new(actor, @name_entry_max)
    Graphics.transition(10)
    loop do
      update_name_entry
      if Input.repeat?(Input::BACK) and @edit_window.index > 0
        Sound.play_cancel
        @edit_window.back
      elsif Input.typing? and @edit_window.index != @edit_window.max_char
        Sound.play_cursor
        @edit_window.add(Input.key_type)
      elsif Input.trigger?(Input::ENTER)
        Sound.play_decision
        actor.name = @edit_window.name
        break
      elsif Input.trigger?(Input::ESC)
        Sound.play_cancel
        break
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: update_name_entry
  #--------------------------------------------------------------------------
  def update_name_entry
    update_menu_background
    Graphics.update
    Input.update
    if $scene.is_a?(Scene_Map)
      $game_map.update
      @spriteset.update
    elsif $scene.is_a?(Scene_Battle)
      Graphics.update
      Input.update
      $game_system.update
      $game_troop.update
      @spriteset.update
      @message_window.update
    end
    @edit_window.update
  end
 
  #--------------------------------------------------------------------------
  # end_name_entry
  #--------------------------------------------------------------------------
  def end_name_entry
    @edit_window.dispose
    @edit_window = nil
    @name_actor_id = nil
    @name_entry_max = nil
  end
 
end # Scene_Base

#===============================================================================
#
# END OF FILE
#
#===============================================================================



PS Najważniejsze jest okienko na górze z awatarem. xD Dół jest zrobiony zdarzeniami. :D
Nie musicie konfigurować skryptu, ponieważ to nie wymaga konfiguracji... :)
 
 
Mantiq 




Pomógł: 1 raz
Dołączył: 12 Mar 2011
Posty: 48
Wysłany: Czw 07 Lip, 2011 21:49
Taki skrypt już chyba istnieje.
Cytat:
Opis: (Nauczcie się Angielskiego xD)

:kable:
 
 
CreeperCrisis 



Preferowany:
RPG Maker VXAce

Pomógł: 32 razy
Dołączył: 01 Maj 2010
Posty: 395
Wysłany: Czw 07 Lip, 2011 22:23
Tak istnieje, ale to wersja prostrza i stworzona przez Yanfly... :kable:

...a z tym Angielskim to tylko tak napisałem, a takich jak ty to nie powinno być na forum gdyż to nie było na temat skryptu. :kable: x2

PS ...a żebyście nie powariowali aferą z Angielskim ( :kable: ) to może wam to przetłumaczę w skrócie:

To jest skrypt, który podmienia Scene_Name (czyli klasę, gdzie się podstawia imię) na zmianę imienia poprzez wpisywanie tego klawiaturą i większą ilością znaków takich jak (!, @, #, $, % i inne)...
 
 
Unnamed 




Preferowany:
RPG Maker XP

Dołączył: 29 Lip 2009
Posty: 59
Skąd: from Hell
Wysłany: Czw 07 Lip, 2011 23:07
Cytat:
Opis: (Nauczcie się Angielskiego xD)
Cytat:
This is a utility script that provides the functionality to return inputs
from the keyboard as well as free up more keys to be used in the Input module.
This script will also replace Scene_Name and allow for direct keyboard input
to type in an actor's name as well as fix the maximum characters shown from
the default base script.


skoro wystawiasz cos na polskim forum to tlumacz to na polski a nie zgrywasz cwaniaka
sry za off
________________________
Time to Play :!:

 
 
CreeperCrisis 



Preferowany:
RPG Maker VXAce

Pomógł: 32 razy
Dołączył: 01 Maj 2010
Posty: 395
Wysłany: Pią 08 Lip, 2011 14:27
Nie jestem cwaniakiem... xD Tak sobie napisałem... :D ...chociaż się cieszcie, że przetłumaczyłem. :)
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene