Project1

标题: VA中,如何在对话中显示N号队员的昵称 [打印本页]

作者: mymiao2012    时间: 2014-6-23 00:39
标题: VA中,如何在对话中显示N号队员的昵称
每个角色设置一个名字,还有一个昵称,可是如何在对话中显示N号队员的昵称
作者: tseyik    时间: 2014-6-23 00:54
本帖最后由 tseyik 于 2014-6-23 00:56 编辑

[box=Lime]# \Y[ID]  : IDで指定したアクターの二つ名
# \E[ID]  : IDで指定したエネミーの名前
# \T[ID]  : IDで指定したアイテムの名前
# \W[ID]  : IDで指定した武器の名前
# \A[ID]  : IDで指定した防具の名前
# \S[ID]  : IDで指定したスキルの名前
# \J[ID]  : IDで指定した職業の名前
# \M[ID]  : IDで指定したマップ名
# \R[ID]  : IDで指定した予約語[/box]
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-13 制御文字拡張  [Ver1.0.0]    by Claimh
  3. #------------------------------------------------------------------------------
  4. # メッセージ等で使用できる制御文字を増やします。
  5. #------------------------------------------------------------------------------
  6. # \Y[ID]  : IDで指定したアクターの二つ名
  7. # \E[ID]  : IDで指定したエネミーの名前
  8. # \T[ID]  : IDで指定したアイテムの名前
  9. # \W[ID]  : IDで指定した武器の名前
  10. # \A[ID]  : IDで指定した防具の名前
  11. # \S[ID]  : IDで指定したスキルの名前
  12. # \J[ID]  : IDで指定した職業の名前
  13. # \M[ID]  : IDで指定したマップ名
  14. # \R[ID]  : IDで指定した予約語
  15. #==============================================================================


  16. module ReserveName
  17.   #--------------------------------------------------------------------------
  18.   # ● 予約語取得
  19.   #--------------------------------------------------------------------------
  20.   def self.name(id)
  21.     case id
  22.     when 1; return "予約した言葉"
  23.     when 2; return "Reserved"
  24.     when 3; return $data_system.game_title      # ゲームタイトル
  25.     end
  26.     return ""
  27.   end
  28. end


  29. module MapName
  30.   #--------------------------------------------------------------------------
  31.   # ● マップ名取得
  32.   #--------------------------------------------------------------------------
  33.   def self.name(id)
  34.     return load_data(sprintf("Data/Map%03d.rvdata2", id)).display_name
  35.   end
  36. end




  37. #==============================================================================
  38. # ■ Window_Base
  39. #==============================================================================
  40. class Window_Base < Window
  41.   #--------------------------------------------------------------------------
  42.   # ● 制御文字の事前変換
  43.   #    実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。
  44.   #    文字「\」はエスケープ文字(\e)に変換。
  45.   #--------------------------------------------------------------------------
  46.   alias convert_escape_characters_add convert_escape_characters
  47.   def convert_escape_characters(text)
  48.     result = convert_escape_characters_add(text)
  49.     result.gsub!(/\eY\[(\d+)\]/i) { $game_actors[$1.to_i].nickname }
  50.     result.gsub!(/\eE\[(\d+)\]/i) { $data_enemies[$1.to_i].name }
  51.     result.gsub!(/\eT\[(\d+)\]/i) { $data_items[$1.to_i].name }
  52.     result.gsub!(/\eW\[(\d+)\]/i) { $data_weapons[$1.to_i].name }
  53.     result.gsub!(/\eA\[(\d+)\]/i) { $data_armors[$1.to_i].name }
  54.     result.gsub!(/\eS\[(\d+)\]/i) { $data_skills[$1.to_i].name }
  55.     result.gsub!(/\eJ\[(\d+)\]/i) { $data_classes[$1.to_i].name }
  56.     result.gsub!(/\eM\[(\d+)\]/i) { MapName.name($1.to_i) }
  57.     result.gsub!(/\eR\[(\d+)\]/i) { ReserveName.name($1.to_i) }
  58.     result
  59.   end
  60. end

复制代码

作者: VIPArcher    时间: 2014-6-23 01:27
本帖最后由 VIPArcher 于 2014-6-24 21:43 编辑

可以做到,只要改一点点脚本。
在脚本Window_Base里233行左右插入
RUBY 代码复制
  1. result.gsub!(/\eS\[(\d+)\]/i) { actor_nickname($1.to_i) }
  2.     result.gsub!(/\eM\[(\d+)\]/i) { party_member_nickname($1.to_i) }

在下面几行插入
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 获取第 n 号角色的称号
  3.   #--------------------------------------------------------------------------
  4.   def actor_nickname(n)
  5.     actor = n >= 1 ? $game_actors[n] : nil
  6.     actor ? actor.nickname : ""
  7.   end
  8.   #--------------------------------------------------------------------------
  9.   # ● 获取第 n 号队伍成员的称号
  10.   #--------------------------------------------------------------------------
  11.   def party_member_nickname(n)
  12.     actor = n >= 1 ? $game_party.members[n - 1] : nil
  13.     actor ? actor.nickname : ""
  14.   end

然后就可以在对话中使用\S[x]获取第X号角色的称号;\M[x]获取第X号队员的称号~\(≧▽≦)/~啦啦啦
可喜可贺,可喜可贺!

作者: moy    时间: 2014-6-23 02:03
本帖最后由 moy 于 2014-6-23 08:38 编辑
已过时

作者: VIPArcher    时间: 2014-6-23 02:06
本帖最后由 VIPArcher 于 2014-6-24 21:36 编辑

那个称号不能当昵称用吗?
作者: mymiao2012    时间: 2014-6-24 19:19
VIPArcher 发表于 2014-6-23 02:06
楼主这个帖子你怎么看

可以做到,只要改一点点脚本。

我不要显示称号,而是显示自定义的昵称,最好是在数据库里给每个角色加个昵称
作者: tseyik    时间: 2014-6-24 21:25
mymiao2012 发表于 2014-6-24 19:19
我不要显示称号,而是显示自定义的昵称,最好是在数据库里给每个角色加个昵称 ...

#==============================================================================
# □ 二つ名拡張 (for VX Ace)
#------------------------------------------------------------------------------
# Version : 1_20120112
# by サリサ・タイクーン
# http://www.tycoon812.com/rgss/
#==============================================================================

#==============================================================================
# □ 素材スイッチ
#==============================================================================
$rgsslab = {} if $rgsslab == nil
$rgsslab["二つ名拡張"] = true

if $rgsslab["二つ名拡張"]

#==============================================================================
# □ カスタマイズポイント
#==============================================================================
module RGSSLAB end
module RGSSLAB::NickName_Extension
  #--------------------------------------------------------------------------
  # ○ 二つ名拡張設定
  #    アクターの二つ名を設定します。
  #
  #    通常は、データベースで設定された二つ名が使われますが
  #    イベントコマンドのスクリプトの操作で変更する際に
  #    ここで指定したものを選択する事ができるようになります。
  #
  #    ・設定方法
  #     アクターID => ["二つ名", …],
  #    (最後の設定のみ、後ろのカンマを省略する事ができます)
  #--------------------------------------------------------------------------
  EXTENSION = {
   1 => ["サンプルヒーロー", "VX Ace主人公", "ラルフ2世", "アルシェス3世"],
  }
  #--------------------------------------------------------------------------
  # ○ ランダム機能
  #    trueにすると、EXTENSIONと現在の二つ名(デフォルト)の内
  #    ランダムに選択するようになります。
  #    (二つ名が表示されている箇所にて、表示する度にランダムで選ばれます)
  #
  #    ・イベントコマンドのスクリプトでの変更方法
  #     $game_actors[アクターID].random_nickname_flag = true/false
  #--------------------------------------------------------------------------
  RANDOM = true
end

# カスタマイズポイントは、ここまで

#==============================================================================
# □ RGSSLAB::NickName_Extension [module]
#==============================================================================
module RGSSLAB::NickName_Extension
  #--------------------------------------------------------------------------
  # ○ 素材設定用の定数定義
  #--------------------------------------------------------------------------
  MATERIAL_NAME = "二つ名拡張"
  VERSION       = 1
  RELEASE       = 20120112
end

#==============================================================================
# ■ Game_Actor [class]
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ○ モジュールの設定
  #--------------------------------------------------------------------------
  RGSSLAB_105 = RGSSLAB::NickName_Extension
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :use_nickname
  attr_accessor :random_nickname_flag
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化 [エイリアス]
  #     actor_id : アクターID
  #--------------------------------------------------------------------------
  alias nickname_extension_initialize initialize
  def initialize(actor_id)
    nickname_extension_initialize(actor_id)
    @use_nickname         = nil
    @random_nickname_flag = RGSSLAB_105::RANDOM
  end
  #--------------------------------------------------------------------------
  # ○ 二つ名の取得 [再定義]
  #--------------------------------------------------------------------------
  def nickname
    if @random_nickname_flag
      return @nickname if RGSSLAB_105::EXTENSION[@actor_id] == nil
      n = rand(RGSSLAB_105::EXTENSION[@actor_id].size + 1)
      return @nickname if RGSSLAB_105::EXTENSION[@actor_id][n] == nil
      return RGSSLAB_105::EXTENSION[@actor_id][n]
    end
    return @nickname if @use_nickname == nil
    result = @nickname
    if RGSSLAB_105::EXTENSION[@actor_id]
      if RGSSLAB_105::EXTENSION[@actor_id][@use_nickname]
        result = RGSSLAB_105::EXTENSION[@actor_id][@use_nickname]
      end
    end
    return result
  end
end

end
作者: feizhaodan    时间: 2014-6-26 20:40
  1. class Game_Actor
  2.   attr_accessor :cnickname
  3.   alias cnickname_setup setup
  4.   def setup(actor_id)
  5.     cnickname_setup(actor_id)
  6.     @cnickname = actor.cnickname
  7.   end
  8. end
  9. class RPG::Actor < RPG::BaseItem
  10.   def cnickname
  11.     @note.each_line do |l|
  12.       case l
  13.       when /\<nickname ([\w\W]+)\>/i
  14.         return $1
  15.       end
  16.     end
  17.     return ""
  18.   end
  19. end
  20. #==============================================================================
  21. # ■ Window_Base
  22. #------------------------------------------------------------------------------
  23. #  游戏中所有窗口的父类
  24. #==============================================================================

  25. class Window_Base < Window
  26.   #--------------------------------------------------------------------------
  27.   # ● 进行控制符的事前变换
  28.   #    在实际绘制前、将控制符替换为实际的内容。
  29.   #    为了减少歧异,文字「\」会被首先替换为转义符(\e)。
  30.   #--------------------------------------------------------------------------
  31.   alias cnick_name_convert_escape_characters convert_escape_characters
  32.   def convert_escape_characters(text)
  33.     cnick_name_convert_escape_characters(text).gsub!(/\eK\[(\d+)\]/i){ $game_actors[$1.to_i].cnickname}
  34.   end
  35. end
复制代码
在显示文章里用\k[n]来显示n号角色的昵称,昵称在角色的备注栏里设置,游戏中使用事件脚本$game_actors[n].cnickname = "xxx"来设置n号角色的昵称为xxx




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1