MBS - Chat com NPCs por digitação Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

MBS - Chat com NPCs por digitação

Ir para baixo

MBS - Chat com NPCs por digitação Empty MBS - Chat com NPCs por digitação

Mensagem por Masked maker Ter Nov 19, 2013 9:22 am

MBS - Chat com NPC por digitação


por Masked


Introdução:


Esse script foi pedido do matheusco na CRM


Características:


Esse script cria a opção de inserir uma mensagem em uma caixa de texto ao conversar com um NPC, dependendo do que você escrever, o NPC responderá à mensagem


Como usar:


Configure no script, é possível configurar uma mensagem para quando o texto for inválido e um texto a ser escrito para sair da janela.
Dentro do NPC[id] há as keywords (palavras reconhecidas) e as ReActions(reações, podem ser uma mensagem ou, se forem AÇÃO id, alterarão uma switch, como configurado na array ACTION[id], o id digitado depois de AÇÃO deve ser o id da ACTION
Para iniciar um chat digite
Código:
MBS_NPC_Talk.npc_talk(id)
OBS.: o id é o id do NPC configurado no script
OBS²: As palavras chave não devem conter acentos


Screenshots:


MBS - Chat com NPCs por digitação JSKXZKB


Script:


Código:
module MBS_NPC_Talk_Config
  
  NPC = []    # Não mecha
  ACTION = [] # Não mecha
  # Configure a mensagem de texto errado:
  Dont_Understand_Message = "Hein? O que você disse?"
  # Configure o texto a ser digitado para sair do chat:
  End_Chat_Input = "Nada"
  
  NPC[0] = [
  KeyWords = [
  # Palavra chave
       "ola",                
       "espada",             
        "loja"             
],
# Resposta, se for AÇÃO digite o id dela e configure-a em ACTIONS
ReActions = [
"Olá jogador",
"Peça para ver minha loja que mostrarei as espadas que tenho disponíveis.",
 "AÇÃO 0"
]
        ]
# Configuração das ações:


# Configure a id da switch que a ação vai mudar, true para ON e false para OFF,
            #id   #On/Off   
ACTION[0] = [1,     true]
end














































module Keys
  @getAsyncKeyState = Win32API.new('user32', 'GetAsyncKeyState', 'i', 'i')
  @last_array = Array.new(256, false)
  @trigger = Array.new(256, false)
  @press = Array.new(256, false)
  def self.update
    @trigger = Array.new(256, false)
    @press = Array.new(256, false)
    for i in 0..255
      @press[i] = (@getAsyncKeyState.call(i) == 0)? false : true
      if @last_array[i] == false and @press[i] == true
        @trigger[i] = true
      end
    end
    @last_array = @press
  end
  def self.trigger?(i)
    return @trigger[i]
  end
  def self.press?(i)
    return @press[i]
  end
end
module Input
  class << self
    alias keys_update update
  end
  def self.update
    self.keys_update
    Keys.update
  end
end
class Window_Name < Window_Base
  attr_reader   :name
  attr_reader   :index
  attr_reader   :max_char
  def initialize
    super(0, 416 - 200, 544, 200)
    @name = "Escreva aqui"
    @max_char = 20
    @default_name = @name
    @index = @name.size
    self.active = false
    refresh
    update_cursor
  end
  def restore_default
    @name = @default_name
    @index = @name.size
    refresh
    update_cursor
  end
  def add(character)
    if @index < @max_char and character != ''
      @name += character
      @index += 1
      refresh
      update_cursor
    end
  end
  def back
    if @index > 0
      name_array = @name.split(//)
      @name = ""
      for i in 0...name_array.size-1
        @name += name_array[i]
      end
      @index -= 1
      refresh
      update_cursor
    end
  end
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = 270 - (@max_char + 1) * 12 + index * 24
    rect.y = 36
    rect.width = 24
    rect.height = line_height
    return rect
  end
  def refresh
    self.contents.clear
    name_array = @name.split(//)
    for i in 0...@max_char
      c = name_array[i]
      c = '' if c == nil
      self.contents.draw_text(item_rect(i), c, 1)
    end
  end
  def update_cursor
    self.cursor_rect = item_rect(@index)
  end
  def update
    super
    update_cursor
  end
end
class MBS_NPC_Talk < Scene_MenuBase
  include MBS_NPC_Talk_Config
  CHARACTERS = [[65,'a'],[66,'b'],[67,'c'],[68,'d'],[69,'e'],[70,'f'],[71,'g'],[72,'h'],[73,'i'],[74,'j'],[75,'k'],[76,'l'],[77,'m'],[78,'n'],[79,'o'],[80,'p'],[81,'q'],[82,'r'],[83,'s'],[84,'t'],[85,'u'],[86,'v'],[87,'w'],[88,'x'],[89,'y'],[90,'z'],[48,'0'],[49,'1'],[50,'2'],[51,'3'],[52,'4'],[53,'5'],[54,'6'],[55,'7'],[56,'8'],[57,'9'],[32,' '],[96,'0'],[97,'1'],[98,'2'],[99,'3'],[100,'4'],[101,'5'],[102,'6'],[103,'7'],[104,'8'],[105,'9']]
  ENTER = 13
  BACKSPACE = 8
  LEFT_SHIFT = 160
  RIGHT_SHIFT = 161
  def start
    super
    @actor = $game_actors[$nome_id]
    @edit_window = Window_Name.new
  end
  def terminate
    super
    @edit_window.dispose
  end
  def update
    super
    @edit_window.update
    if Keys.trigger?(BACKSPACE)
      if @edit_window.index > 0
        @edit_window.back
      end
    elsif Keys.trigger?(ENTER)
check_message
    end
    for i in CHARACTERS
      if Keys.trigger?(i[0])
       unless @edit_window.index == @edit_window.max_char
          case shift?
          when true
            @edit_window.add(i[1].upcase)
          when false
            @edit_window.add(i[1])
          end
        end
      end
    end
  end
  def shift?
    return (Keys.press?(LEFT_SHIFT) or Keys.press?(RIGHT_SHIFT))
  end
    def check_message
      if @edit_window.name == End_Chat_Input
        SceneManager.call(Scene_Map)
        end
      for n in 0..NPC[$nome_id].size
      if @edit_window.name.include?(NPC[$nome_id][0][n])
        if NPC[$nome_id][1][n].include?("AÇÃO ")
          action_id = NPC[$nome_id][1][n].sub("AÇÃO ", "").to_i
            SceneManager.call(Scene_Map)
            $game_switches[ACTION[action_id][0]] = ACTION[action_id][1]
        else
          SceneManager.call(Scene_Map)
          $game_message.add(NPC[$nome_id][1][n])
        end
      else
        SceneManager.call(Scene_Map)
        $game_message.clear
        $game_message.add(Dont_Understand_Message)
        end
      end
  end
def self.npc_talk(id)
  $nome_id = id
  SceneManager.call(MBS_NPC_Talk)
end
end
 
Demo:


clique


Créditos e Agradecimentos:


- A mim, por criar e disponibilizar;
- Ao matheusco, pela ideia;
- Ao Raizen pelo script de inserir nome com o teclado, que eu usei de base.
Masked maker
Masked maker
Novato
Novato

Mensagens : 2
Créditos : 0

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos