Chamar o nome do Actor pelo script

6 Respostas   122 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

andrewzoka

  • *
  • Posts: 100
  • Ouros: 63
  • Nunca foi sorte, sempre foi Deus.
Tópico criado em: 26/04/2018 às 16:10

Talvez seja um procedimento bem simples, mas gostaria da ajuda de algum de vocês:
Estou com um script que consigo editar as missões do jogo dentro do script (texto).
Estes textos então entre aspas (""), porém, se eu coloco "\n[2]" por exemplo, ele não me trás o nome do actor no jogo.
Dentro de script é diferente? Como faz? Aguardo resposta.

Harus Game is coming.
https://www.indiexpo.net/pt/games/harus
© 2020 copyright.

Corvo

Resposta 1: 26/04/2018 às 16:15

Seria interessante saber qual sistema você está usando para saber se ele suporta os comandos ou se tem algum próprio, mas $game_actors[ID].name retorna o nome do personagem cujo ID é informado. Você pode definir esse valor para uma variável e tentar usar \v[ID] na mensagem.

andrewzoka

  • *
  • Posts: 100
  • Ouros: 63
  • Nunca foi sorte, sempre foi Deus.
Resposta 2: 26/04/2018 às 16:25 - Última modificação por andrewzoka em 26/04/2018 às 16:34

Seria para o VX ACE. Eu queria entender melhor onde coloco exatamente o "$game_actors[2].name" para então chamar o "\v[2]" na mensagem (lembrando que não é diretamente na mensagem do jogo, e sim dentro de um texto entre aspas no script.
Edit1:
Mas pensando por um lado, a lógica não seria a mesma para o "\n[2]"? Porque se eu usar o "\v[2]" também não iria funcionar...
Edit2:
Está aqui a imagem caso queira entender melhor:
Spoiler
[close]

Harus Game is coming.
https://www.indiexpo.net/pt/games/harus
© 2020 copyright.

Corvo

Resposta 3: 26/04/2018 às 16:56

Tecnicamente é a mesma lógica, mas alguns sistemas podem suportar uns e não outros. Como não sei qual sistema é esse não tenho como saber se é um deles. Adicione o valor assim:

andrewzoka

  • *
  • Posts: 100
  • Ouros: 63
  • Nunca foi sorte, sempre foi Deus.
Resposta 4: 26/04/2018 às 17:08

Desculpe, confundi engine com sistema. O sistema é o "Quest Menu".
É, não deu muito certo, talvez o sistema não funcione com esse método.

Sistema:
Código: [Selecionar]
#===============================================================================
#  *  Quest Menu
#  v. 1.00
#  Feb. 2nd, 2013
#  Written for: www.gdunlimited.net
#  Credits:  Lizzie S
#  Thanks to:  Moonpearl, for a small pearl of wisdom.
#              Marked, for keeping GDUnimited alive
#              RGangsta, for ACE.
#-------------------------------------------------------------------------------
#  Introduction:  This script allows a good quest log for your game, allowing
#                 the player to track quests, see how many they've completed,
#                 etc.
#-------------------------------------------------------------------------------
#  Features:
#    Keeps a tally of all known quests and how many have been completed.
#    Allows you to add or remove objectives.
#-------------------------------------------------------------------------------
#  Instructions:
#   • Place the script in the 'Materials' section.
#   • The script adds the first objective of the first mission automatically.
#   • You must input all the information of your missions in the module marked:
#       Missions
#       There is an example in place.
#   • To call the script, use: SceneManager.call(Scene_Mission)
#   • Use the following syntaxes to affect the script:
#       To add a mission:               $game_party.add_mis(mission_id)
#       To add an objective:            $game_party.add_obj(mission_id, objective_id)
#       To remove an objective:         $game_party.rem_obj(mission_id, objective_id)
#       To mark an objective complete:  $game_party.add_comp_obj(mission_id, objective_id)
#       To mark a mission as complete:  $game_party.comp_mis(mission_id)
#===============================================================================


#===============================================================================
#  *  Module
#===============================================================================
module Missions
 
  #-----------------------------------------------------------------------------
  #  Mission_Names = { mission_id => "Mission_Name"
  #-----------------------------------------------------------------------------
  Mission_Names = { 0 => "Encontre uma bateria",
                    1 => "tch a Pail of Water"
                  }
  #-----------------------------------------------------------------------------
  #  Mission_Desc = { mission_id => ["Description", ["sprite_sheet", index, "name"]]
  #-----------------------------------------------------------------------------
  Mission_Desc = { 0 => ["Nós precisamos ligar esta máquina. Uma bateria é essencial!",
                                ["vxc1", 0, "Robô"]],
                    1 => ["You have been asked by your mother to fetch a pail of water.",
                                ["Robô", 0, "Robô"]]
                        }
  #-----------------------------------------------------------------------------
  # Mission_Objectives = {mission_id => {obj_id => "Objective_text",...  }
  #-----------------------------------------------------------------------------
  Mission_Objectives = { 0 => {0 => "You need to go out and find a bucket, wooden is preferable..",
                               1 => "Find a nice sturdy rope. Not something that will decay easily in water. Just something more like nylon.",
                               2 => "Fetch water from the well."
                               },
                         1 => {0 => "a need to go out and find a bucket, wooden is preferable..",
                               1 => "a a nice sturdy rope. Not something that will decay easily in water. Just something more like nylon.",
                               2 => "Fetch water from the well."
                               }
                       }
     
end
#===============================================================================
# END Module
#===============================================================================


#===============================================================================
#  *  Game_Party
#===============================================================================
class Game_Party < Game_Unit
 
  attr_accessor :missions
  attr_accessor :comp_missions
  attr_accessor :act_obj
  attr_accessor :comp_obj
 
  alias lizzie_missions_gameparty_init initialize
 
  def initialize
    lizzie_missions_gameparty_init
    # Mission_IDs
    @missions = []
    #  Mission_Ids
    @comp_missions = []
    # Mission_Name => [Current_Objectives]
    @act_obj = {}
    @comp_obj = {}
  end
 
  def add_mis(id)
    if @missions.include?(id)
      return
    end
    @missions.push(id)
    mis = Missions
    @act_obj[id] = [0]
    @comp_obj[id] = []
    return
  end
 
  def rem_obj(id, obj_n)
    if @act_obj[id] != nil
      if @act_obj[id].include?(obj_n)
        @act_obj[id].delete(obj_n)
      end
    end
    return
  end
 
 
  def add_obj(id, obj_n)
    mis = Missions
    if @act_obj[id].include?(obj_n)
      return
    end
    @act_obj[id].push(obj_n)
    return
  end
 
 
  def add_comp_obj(id, obj_n)
    for i in 0...@act_obj[id].size
      if @act_obj[id][i] == obj_n
        @act_obj[id].delete(obj_n)
        @comp_obj[id].push(obj_n)
      end
    end
    return
  end
 
  def comp_mis(id)
    if @comp_missions.include?(id)
      return
    end
    @comp_missions.push(id)
    return
  end
 
end
#===============================================================================
# END Game_Party
#===============================================================================


#===============================================================================
#  *  Window_MissionInfo
#===============================================================================
class Window_MissionInfo < Window_Base
  def initialize
    super(0, 0, 416, 48)
    activate
    refresh
  end
 
 
  def refresh
    contents.clear
    contents.draw_text(0, 0, self.width - 24, 24, "Use L and R to scroll description.")
  end
end
#===============================================================================
#  *  Window_MissionInfo
#===============================================================================


#===============================================================================
#  *  Window_MissionComp
#===============================================================================
class Window_MissionComp < Window_Base
  def initialize
    super(416, 0, 128, 48)
    self.active = false
    refresh
  end
 
  def refresh
    self.contents.clear
    x = $game_party.missions.size.to_s
    y = $game_party.comp_missions.size.to_s
    self.contents.draw_text(0, 0, self.width - 24, 24, y + "/" + x, 2)
  end
end
#===============================================================================
# END Window_MissionComp
#===============================================================================


#===============================================================================
#  *  Window_Missions
#===============================================================================
class Window_Missions < Window_Selectable
  def initialize
    super(0, 48, 256, 368)
    self.index = 0
    activate
    @data = []
    refresh
  end
 
  def item_max
    $game_party.missions.size
  end
 
  def mission
    return @data[index]
  end
 
  def refresh
    self.contents.clear
    mis = Missions
    for i in 0...$game_party.missions.size
      x = $game_party.missions[i]
      @data.push(x)
      if $game_party.comp_missions.include?(x)
        change_color(Color.new(128, 128, 128, 255))
      else
        change_color(Color.new(255, 255, 255, 255))
      end
      self.contents.draw_text(4, i * 24, self.width - 24, 24, mis::Mission_Names[x])
    end
  end
 
 
end
#===============================================================================
# END Window_Missions
#===============================================================================


#===============================================================================
#  *  Window_MissionDesc
#===============================================================================
class Window_MissionDesc < Window_Selectable
  def initialize
    super(256, 48, 288, 368)
    self.index = -1
    activate
  end
 
  #-----------------------------------------------------------------------------
 
  def refresh(id)
    self.contents.clear
    if id == nil
      return
    end
    mis = Missions
   
    @lines = []
    @text_location_y = 0
    @comp_lines = []
   
    desc_text = mis::Mission_Desc[id][0]
    lines_update(desc_text)
   
    @lines.push("")
   
    for i in 0...$game_party.act_obj[id].size
      act_obj_text = " • " + mis::Mission_Objectives[id][$game_party.act_obj[id][i]]
      lines_update(act_obj_text)
    end
   
    if $game_party.act_obj[id].size != 0
      @lines.push("")
    end
   
    for i in 0...$game_party.comp_obj[id].size
      comp_obj_text = " • " +  mis::Mission_Objectives[id][$game_party.comp_obj[id][i]]
      comp_lines_update(comp_obj_text)
    end
   
    set_height
    self.contents = Bitmap.new(264, @n)
   
    draw_character(mis::Mission_Desc[id][1][0], mis::Mission_Desc[id][1][1], 24, 32)
    draw_text(48, 0, 240, 24, mis::Mission_Desc[id][1][2])
   
    for i in 0...@lines.size
      draw_text(0, i * 24 + 48, 264, 24, @lines[i])
      @text_location_y += 24
    end
   
    change_color(Color.new(128, 128, 128, 255))
   
    for i in 0...@comp_lines.size
      draw_text(0, i * 24 + 48 + @text_location_y, 264, 24, @comp_lines[i])
    end
  end
 
  #-----------------------------------------------------------------------------
 
  def lines_update(text)
    string = ""
    for word in text.split
      word_width = self.text_size(word).width + self.text_size(string).width + self.text_size(" ").width
      if word_width > (width - 24)
        @lines.push(string)
        string = ""
      end
      string += word + " "
    end
    unless @lines.include?(string)
      @lines.push(string)
      string = ""
    end
  end
 
  #-----------------------------------------------------------------------------
 
  def comp_lines_update(text)
    string = ""
    for word in text.split
      word_width = self.text_size(word).width + self.text_size(string).width + self.text_size(" ").width
      if word_width > (width - 24)
        @comp_lines.push(string)
        string = ""
      end
      string += word + " "
    end
    unless @comp_lines.include?(string)
      @comp_lines.push(string)
      string = ""
    end
  end
 
  #-----------------------------------------------------------------------------
 
  def set_height
    @n = (@lines.size + @comp_lines.size + 2) * 24
  end
 
end
#===============================================================================
# END Window_MissionDesc
#===============================================================================


#===============================================================================
#  *  Scene_Mission
#===============================================================================
class Scene_Mission < Scene_MenuBase
 
  alias liz_mission_self_update update_basic
 
  def start
    super
    create_list_window
    create_help_window
    create_comp_window
    create_desc_window
  end
 
  def create_help_window
    @help_window = Window_MissionInfo.new
  end
   
  def create_comp_window
    @comp_window = Window_MissionComp.new
  end
   
  def create_desc_window
    @desc_window = Window_MissionDesc.new
    @desc_window.refresh(@list_window.mission)
  end

  def create_list_window
    @list_window = Window_Missions.new
    @list_window.set_handler(:cancel, method(:return_scene))
    @list_window.set_handler(:pagedown, method(:scroll_down))
    @list_window.set_handler(:pageup, method(:scroll_up))
  end
 
  def scroll_down
    if @desc_window.oy < (@desc_window.contents.height - 344)
      @desc_window.oy += 24
    end
    @list_window.activate
    return
  end
 
  def update_basic
    liz_mission_self_update
    if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
      @desc_window.refresh(@list_window.mission)
    end
  end
 
  def scroll_up
    if @desc_window.oy != 0
      @desc_window.oy -= 24
    end
    @list_window.activate
    return
  end
end

Harus Game is coming.
https://www.indiexpo.net/pt/games/harus
© 2020 copyright.

Corvo

Resposta 5: 26/04/2018 às 17:57

Pois bem, este aí é um dos que são incompatíveis. Quando você cria uma mensagem pelo editor padrão, ela passa primeiro pelo Game_Interpreter, vai pra Scene desejada e sai na janela. Quando você inclui o texto diretamente pelo código você pulou duas etapas, entre as quais a responsável por alterar os caracteres precedidos por "\" para suas respectivas definições. Nesse caso você pode:

>>> Optar por frases que não precisem de um nome explícito.
>>> Aguardar até que alguém possa editar o código, caso você mesmo não possa.

Gabriel

Resposta 6: 26/04/2018 às 18:43

A melhor solução seria usar "$game_actors[ID].name" diretamente no código, dessa maneira:
Código: [Selecionar]
EXEMPLO = "Seu nome é #{$game_actors[ID].name} sabia?"Porém existe um problema muito chato que nos impede de fazer isso: Essa variável que guarda os textos é setada "antes" do jogo iniciar, isso é, antes do próprio $game_actors receber algum valor, então se utilizarmos ""$game_actors[ID].name" diretamente nela fará com que o código busque por algo que ainda não existe, o que resultará em erro.

A maneira mais fácil de burlar esse problema é setar esse texto em especifico uma segunda vez depois do jogo ser iniciado. Para fazer isso, em qualquer evento do jogo (provavelmente o primeiro) chame o código abaixo através do comando script call.
Código: [Selecionar]
Missions::Mission_Desc.each do |c, v|
  case c
  when 0
    v[0] = "Nós precisamos ligar este #{$game_actors[ID].name}. Uma bateria é essencial!"
  end
end
Neste caso, o texto original lá no código deve ser mantido em branco (ou de qualquer outra maneira). Você pode seguir essa lógica para alterar qualquer outro texto que seja necessário.