查看: 2328|回复: 7

[已经解决] VA中,如何在对话中显示N号队员的昵称

[复制链接]
梦石
0
星屑
65
在线时间
43 小时
注册时间
2013-7-29
回帖
3
发表于 2014-6-23 00:39:35 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
每个角色设置一个名字,还有一个昵称,可是如何在对话中显示N号队员的昵称
梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2014-6-23 00:54:58 | 显示全部楼层
本帖最后由 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

复制代码
回复

使用道具 举报

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-6-23 01:27:32 | 显示全部楼层
本帖最后由 VIPArcher 于 2014-6-24 21:43 编辑

可以做到,只要改一点点脚本。
在脚本Window_Base里233行左右插入[pre lang="ruby" line="236"]result.gsub!(/\eS\[(\d+)\]/i) { actor_nickname($1.to_i) }
    result.gsub!(/\eM\[(\d+)\]/i) { party_member_nickname($1.to_i) }[/pre]
在下面几行插入[pre lang="ruby" line="248"] #--------------------------------------------------------------------------
  # ● 获取第 n 号角色的称号
  #--------------------------------------------------------------------------
  def actor_nickname(n)
    actor = n >= 1 ? $game_actors[n] : nil
    actor ? actor.nickname : ""
  end
  #--------------------------------------------------------------------------
  # ● 获取第 n 号队伍成员的称号
  #--------------------------------------------------------------------------
  def party_member_nickname(n)
    actor = n >= 1 ? $game_party.members[n - 1] : nil
    actor ? actor.nickname : ""
  end[/pre]
然后就可以在对话中使用\S[x]获取第X号角色的称号;\M[x]获取第X号队员的称号~\(≧▽≦)/~啦啦啦
可喜可贺,可喜可贺!

评分

参与人数 1星屑 +10 收起 理由
Sion + 10 已合并

查看全部评分

回复

使用道具 举报

无节操

梦石
0
星屑
608
在线时间
795 小时
注册时间
2009-2-6
回帖
3910

开拓者贵宾

发表于 2014-6-23 02:03:06 | 显示全部楼层
本帖最后由 moy 于 2014-6-23 08:38 编辑

已过时插入脚本
[pre lang="ruby" line="1"]#==============================================================================
# ☆ Custom Adventure 自定义控制符变换
# -- Last Updated: 2014.6.23
# -- by Moy
# -- 转载请保留以上信息
#==============================================================================
#   可以很方便的进行扩展的控制符变换,现在你可以使用显示文本做任何事了(笑),前提
# 是你知道该怎么做。
#==============================================================================
module CA_EVENT
  USE_CUSTOM_CONVERT = true     # 是否开启自定义控制符变换
  #--------------------------------------------------------------------------
  # 简单变换:     左侧是操作符,右侧是脚本实现
  #   以默认脚本为例就是\G
  #--------------------------------------------------------------------------
  SIMPLE_CONVERT = {
  }#SIMPLE_CONVERT
  #--------------------------------------------------------------------------
  # 数组形式变换: 左侧是操作符,右侧是脚本实现
  #   以默认脚本为例就是\V[n]
  #--------------------------------------------------------------------------
  ARRAY_CONVERT = {
    "nn" => "actor_nickname($1.to_i)"
  }#ARRAY_CONVERT
  # 变换的基础,勿动
  SIMPLE_CONVERT_BASE = /\e%s/.to_s
  ARRAY_CONVERT_BASE  = /\e%s\[(\d+)\]/i.to_s
end

#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
  include CA_EVENT
  #--------------------------------------------------------------------------
  # ● 进行控制符的事前变换
  #    在实际绘制前、将控制符替换为实际的内容。
  #    为了减少歧异,文字「\」会被首先替换为转义符(\e)。
  #--------------------------------------------------------------------------
  alias ca_convert_escape_characters convert_escape_characters
  def convert_escape_characters(text)
    return ca_convert_escape_characters(text) unless USE_CUSTOM_CONVERT
    #------------------------------------------------------------------------
    # 默认部分
    #------------------------------------------------------------------------
    result = text.to_s.clone
    result.gsub!(/\\/)            { "\e" }
    result.gsub!(/\e\e/)          { "\\" }
    result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
    result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
    result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
    result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
    result.gsub!(/\eG/i)          { Vocab::currency_unit }
    #------------------------------------------------------------------------
    # 自定义的实现
    #------------------------------------------------------------------------
    SIMPLE_CONVERT.each{|key,value|
    re = sprintf(SIMPLE_CONVERT_BASE,key)
    result.gsub!(/#{re}/){eval(value)}
    }
    ARRAY_CONVERT.each{|key,value|
    re = sprintf(ARRAY_CONVERT_BASE,key)
    result.gsub!(/#{re}/){eval(value)}
    }
    #------------------------------------------------------------------------
    result
  end
  #--------------------------------------------------------------------------
  # ● 获取第 n 号角色的名字
  #--------------------------------------------------------------------------
  def actor_nickname(n)
    actor = n >= 1 ? $game_actors[n] : nil
    actor ? actor.nickname : ""
  end
end

#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  attr_accessor :nickname
end[/pre]
在事件中事先设定(只要设定一次就可以了)
  1. $game_actors[1].nickname = "小苹果"
复制代码
然后在显示文章中使用 \nn[1] ,显示的就是“小苹果”了

点评

moy
我完全没有想过那玩意叫啥(捶地  发表于 2014-6-23 08:37
是啊是啊  发表于 2014-6-23 08:35
moy
有吗,咦,有吗,啊咧,难道是那个称号一样的东西  发表于 2014-6-23 08:34
nickname在数据库有设置的啊喂  发表于 2014-6-23 05:40
moy
不过我没测试- -  发表于 2014-6-23 02:05
Brandnew day, Brandnew Life
                             规 实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复

使用道具 举报

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-6-23 02:06:24 | 显示全部楼层
本帖最后由 VIPArcher 于 2014-6-24 21:36 编辑

那个称号不能当昵称用吗?

点评

已测试!!  发表于 2014-6-23 02:08

评分

参与人数 1星屑 +15 收起 理由
Mr.Jin + 15

查看全部评分

回复

使用道具 举报

梦石
0
星屑
65
在线时间
43 小时
注册时间
2013-7-29
回帖
3
 楼主| 发表于 2014-6-24 19:19:02 | 显示全部楼层
VIPArcher 发表于 2014-6-23 02:06
楼主这个帖子你怎么看

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

我不要显示称号,而是显示自定义的昵称,最好是在数据库里给每个角色加个昵称

点评

那个称号可以当成昵称使用 啊~喂!  发表于 2014-6-24 19:58
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2014-6-24 21:25:03 | 显示全部楼层
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

点评

只有二個設定(隨機和設定角色的二の名),不難巴  发表于 2014-6-24 22:27
楼主需要谷歌翻译......  发表于 2014-6-24 21:42
你怎么什么乱七八糟的脚本都有……and 你确定楼主看得懂使用方式吗?  发表于 2014-6-24 21:31

评分

参与人数 1星屑 +200 收起 理由
taroxd + 200 认可答案

查看全部评分

回复

使用道具 举报

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
回帖
2982

贵宾

发表于 2014-6-26 20:40:01 | 显示全部楼层
  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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部