Project1

标题: 求日文翻译:多个选择项及酒店系统范例+怪物AI系统 [打印本页]

作者: 企鹅达达    时间: 2010-9-5 16:45
标题: 求日文翻译:多个选择项及酒店系统范例+怪物AI系统
本帖最后由 企鹅达达 于 2010-9-11 09:08 编辑

相信这个是很麻烦的范例,因为它的设置在事件的注释里……不过,相信我,这是很好用的范例 expansion_choices_sample_project.rar (311.88 KB, 下载次数: 480)
没人翻译的话就当偶分享的算了 =.=
另外再加一个操纵开关的敌人AI系统,会翻译的大家分享一下,不懂的直接拿走就好,多谢捧场哈 敌人AI.rar (273.56 KB, 下载次数: 384)
作者: SVM伟    时间: 2010-9-5 16:56
日文盲飘过+尝试用工具翻译
作者: untrueterry    时间: 2010-9-5 17:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: SVM伟    时间: 2010-9-5 18:23
LZ,过几天我给你哈,现在没时间
作者: 冰舞蝶恋    时间: 2010-9-5 18:24
试试吧……利用google翻译的人飘过~~
作者: 冰舞蝶恋    时间: 2010-9-5 18:36
哎呀手都酸了……先汉化某个脚本的一部分 囧……
全程使用google翻译,所以有些语句不通顺……呃~~
大概看看吧……唉
  1. #==============================================================================
  2. #
  3. #□■Ver.1.00生产者Damiakuta□:周一绅士
  4. #
  5. #· RPG游戏制作商为RGSS2 VX的脚本
  6. #
  7. #●...重写的方法(注冲突)◎○别名方法... ...新方法
  8. #
  9. #中禁止分布※!条款是分销商。请务必在那里寻找。
  10. #==============================================================================
  11. =begin

  12. 这个脚本是很容易的创建一个事件脚本。


  13. 演员“Damiakuta”的
  14. 游戏似乎没有提供一个虚拟演员顾名思义。

  15. 而在自定义变量设置到指定的项目的ID脚本
  16. 事件被设置为目标Damiakuta
  17. 游戏中的ID变量在运行到演员,这是剧本的作品。

  18. 即使演员命令来获取有关信息的命令和条件分支
  19. 如果您选择Damiakuta进程ID是在一个向演员变量。

  20. #-----------------------------------------------------------------------------

  21. 通过改变游戏中的变量和获得利益,
  22. 易“改变事件”可。

  23. 只有通过一个命令脚本事件,
  24. 如果没有为该脚本知识
  25. VX是一种优势,你可以轻松地设置使用原来的接口。

  26. 我使用的脚本需要照顾,还建议对那些中间。

  27. 主要的接口,因为它使用VX毒剂
  28. 处理更具可读性(明显的操纵或别的什么)是可能带来的好处。
  29. =end
  30. #==============================================================================
  31. # □ 選択肢機能拡張・モジュール(カスタマイズ項目)
  32. #==============================================================================

  33. module Dummy_Actor
  34.   
  35.   DUMMY_ACTOR_ID = 9
  36.   #在ID虚拟演员在这里。
  37.   #创建一个新的演员,演员请注明编号。
  38.   
  39.   ACTOR_ID_VARIABLES = 2
  40.   #其中更换Damiakuta游戏者的实际活动
  41.   #这里指定的编号用于指定变量的数目。
  42.   #
  43.   #果您需要#※ver.3.00在你以前的选择方式Damiakuta功能增强
  44.   #延长选项设置此变量,请ARGET_ACTOR_ID_VARIABLES和一致。
  45.   #可以组合引入一个新的途径,我们建议保持一致。

  46.   TARGET_AUTO_INPUT = true
  47.   #编号:当使用的演员技能和目标ID
  48.   #你可以设置是否这些ACTOR_ID_VARIABLES自动分配给指定的变量。
  49.   #=真正的自动赋值,=虚假任何转让。
  50.   #也就是说,称之为Komonibento技能项目
  51.   #编号:Damiakuta目标技能
  52.   #将永远是一个国家。 (输入0值的设计是整个目标)  
  53. end

  54. #==============================================================================
  55. # ■ Window_Message
  56. #------------------------------------------------------------------------------
  57. #  它是用来显示文本信息的窗口
  58. #==============================================================================

  59. class Window_Message < Window_Selectable
  60.   #--------------------------------------------------------------------------
  61.   # ◎ 特殊文字の変換
  62.   #--------------------------------------------------------------------------
  63.   alias tig_da_convert_special_characters convert_special_characters
  64.   def convert_special_characters
  65.     actor = $game_actors[$game_variables[Dummy_Actor::ACTOR_ID_VARIABLES]]
  66.     if $game_variables[Dummy_Actor::ACTOR_ID_VARIABLES] == 0
  67.       name = $game_party.name
  68.     elsif actor == nil
  69.       name = ""
  70.     else
  71.       name = actor.name
  72.     end
  73.    
  74.     @text.gsub!(/\\N\[ダミーアクター\]/i) { name }
  75.     @text.gsub!(/\\N\[ダミー\]/i) { name }
  76.     @text.gsub!(/\\N\[dummy\]/i) { name }
  77.     @text.gsub!(/\\\*/){ "" }   
  78.     tig_da_convert_special_characters
  79.   end
  80. end

  81. #==============================================================================
  82. # ■ Game_Party
  83. #------------------------------------------------------------------------------
  84. #应对阶级政党。包括如黄金和物品的信息。这一网络
  85. #实例被引用在拉斯维加斯$ game_party。
  86. #==============================================================================

  87. class Game_Party < Game_Unit
  88.   #--------------------------------------------------------------------------
  89.   # ○ 公開インスタンス変数
  90.   #--------------------------------------------------------------------------
  91.   attr_accessor :object_user
  92.   attr_accessor :object_target
  93.   #--------------------------------------------------------------------------
  94.   # ◎ オブジェクト初期化
  95.   #--------------------------------------------------------------------------
  96.   alias tig_da_initialize initialize
  97.   def initialize
  98.     tig_da_initialize
  99.     @object_user = 999
  100.     @object_target = 999
  101.   end
  102. end

  103. #==============================================================================
  104. # ■ Scene_Item
  105. #------------------------------------------------------------------------------
  106. #  处理类库屏幕。
  107. #==============================================================================

  108. class Scene_Item < Scene_Base
  109.   #--------------------------------------------------------------------------
  110.   # ◎ 使用Items(非用于副作用申请。)
  111.   #--------------------------------------------------------------------------
  112.   alias tig_da_use_item_nontarget use_item_nontarget
  113.   def use_item_nontarget
  114.     $game_party.object_user = @actor.id
  115.     $game_party.object_target = 999   #一对临时指派禁用命令数
  116.     if @item.for_friend?
  117.       if @item.for_all?
  118.         $game_party.object_target = 0
  119.       else
  120.         $game_party.object_target = $game_party.members[@target_window.index].id
  121.       end
  122.     end
  123.     if Dummy_Actor::TARGET_AUTO_INPUT
  124.       $game_variables[Dummy_Actor::ACTOR_ID_VARIABLES] = $game_party.object_target
  125.     end
  126.    
  127.     tig_da_use_item_nontarget
  128.   end
  129. end

  130. #==============================================================================
  131. # ■ Scene_Skill
  132. #------------------------------------------------------------------------------
  133. #  屏幕处理技能课。
  134. #==============================================================================

  135. class Scene_Skill < Scene_Base
  136.   #--------------------------------------------------------------------------
  137.   # ◎ 使用技能(不使用的副作用适用。)
  138.   #--------------------------------------------------------------------------
  139.   alias tig_da_use_skill_nontarget use_skill_nontarget
  140.   def use_skill_nontarget
  141.     $game_party.object_user = @actor.id
  142.     $game_party.object_target = 999   # 临时指派一数到命令禁用
  143.     if @skill.for_friend?
  144.       if @skill.for_all?
  145.         $game_party.object_target = 0
  146.       elsif @skill.for_user?
  147.         $game_party.object_target = @actor.id
  148.       else
  149.         $game_party.object_target = $game_party.members[@target_window.index].id
  150.       end
  151.     end
  152.     if Dummy_Actor::TARGET_AUTO_INPUT
  153.       $game_variables[Dummy_Actor::ACTOR_ID_VARIABLES] = $game_party.object_target
  154.     end
  155.    
  156.     tig_da_use_skill_nontarget
  157.   end
  158. end
  159.   
  160. #==============================================================================
  161. # ■ Game_Interpreter
  162. #------------------------------------------------------------------------------
  163. # 事件命令解释器。这个类Game_Map类
  164. # Game_Troop类,Game_Event使用的类。
  165. #==============================================================================

  166. class Game_Interpreter
  167.   #--------------------------------------------------------------------------
  168.   # ○ 定数
  169.   #--------------------------------------------------------------------------
  170.     TARGET_V = Dummy_Actor::ACTOR_ID_VARIABLES
  171.   #--------------------------------------------------------------------------
  172.   # ◎ 条件分岐 (ダミー処理の追加)
  173.   #变演员※ID不存在,结果是假的(假)似乎是。
  174.   #进程ID如果已经离开故意Damiakuta自己的变量。
  175.   #--------------------------------------------------------------------------
  176.   alias tig_da_command_111 command_111
  177.   def command_111
  178.     if @params[0] == 4 and @params[1] == Dummy_Actor::DUMMY_ACTOR_ID
  179.       keep = @params[1]
  180.       @params[1] = $game_variables[TARGET_V]
  181.     end
  182.     result = tig_da_command_111
  183.     @params[1] = keep if keep != nil
  184.     return result
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ◎ 変数の操作 (ダミー処理の追加)
  188.   #变演员※ID不存在,这个数字被视为零。
  189.   #进程ID如果已经离开故意Damiakuta自己的变量。
  190.   #--------------------------------------------------------------------------
  191.   alias tig_da_command_122 command_122
  192.   def command_122
  193.     if @params[3] == 4 and @params[4] == Dummy_Actor::DUMMY_ACTOR_ID
  194.       keep = @params[4]
  195.       @params[4] = $game_variables[TARGET_V]
  196.     end
  197.     result = tig_da_command_122
  198.     @params[4] = keep if keep != nil
  199.     return result
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ◎ メンバーの入れ替え (ダミー処理の追加)
  203.   #  ※编号Damiakuta变量替换,如果它没有得到执行。
  204.   #--------------------------------------------------------------------------
  205.   alias tig_da_command_129 command_129
  206.   def command_129
  207.     return true if dummy_actor_to_self?
  208.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID
  209.       keep = @params[0]
  210.       @params[0] = $game_variables[TARGET_V]
  211.     end      
  212.     result = tig_da_command_129
  213.     @params[0] = keep if keep != nil
  214.     return result
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ◎ 名前入力の処理 (ダミー処理の追加)
  218.   #  ※当处理变量名已经离开了自己的故意Damiakuta。
  219.   #--------------------------------------------------------------------------
  220.   alias tig_da_command_303 command_303
  221.   def command_303
  222.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  223.       keep = @params[0]
  224.       @params[0] = $game_variables[TARGET_V]
  225.     end
  226.     result = tig_da_command_303
  227.     @params[0] = keep if keep != nil
  228.     return result
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ◎ HP の増減 (ダミー処理の追加)
  232.   #  ※如果你拥有一个变量DamiakutaID是没有实施惠普的变化。
  233.   #--------------------------------------------------------------------------
  234.   alias tig_da_command_311 command_311
  235.   def command_311
  236.     return true if dummy_actor_to_self?
  237.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  238.       keep = @params[0]
  239.       @params[0] = $game_variables[TARGET_V]
  240.     end
  241.     result = tig_da_command_311
  242.     @params[0] = keep if keep != nil
  243.     return result
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ◎ MP の増減 (ダミー処理の追加)
  247.   #  ※如果你拥有一个变量DamiakutaID是没有实施重大计划的变化。
  248.   #--------------------------------------------------------------------------
  249.   alias tig_da_command_312 command_312
  250.   def command_312
  251.     return true if dummy_actor_to_self?
  252.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  253.       keep = @params[0]
  254.       @params[0] = $game_variables[TARGET_V]
  255.     end
  256.     result = tig_da_command_312
  257.     @params[0] = keep if keep != nil
  258.     return result
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ◎ ステートの変更 (ダミー処理の追加)
  262.   #  ※ID变量,当它的状态改变Damiakuta不执行。
  263.   #--------------------------------------------------------------------------
  264.   alias tig_da_command_313 command_313
  265.   def command_313
  266.     return true if dummy_actor_to_self?
  267.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID
  268.       keep = @params[0]
  269.       @params[0] = $game_variables[TARGET_V]
  270.     end
  271.     result = tig_da_command_313
  272.     @params[0] = keep if keep != nil
  273.     return result
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ◎ 全回復 (ダミー処理の追加)
  277.   # ※ID变量Damiakuta自己的案件得不到执行,完全恢复。
  278.   #--------------------------------------------------------------------------
  279.   alias tig_da_command_314 command_314
  280.   def command_314
  281.     return true if dummy_actor_to_self?
  282.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  283.       keep = @params[0]
  284.       @params[0] = $game_variables[TARGET_V]
  285.     end
  286.     result = tig_da_command_314
  287.     @params[0] = keep if keep != nil
  288.     return result
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ◎ 経験値の増減 (ダミー処理の追加)
  292.   #  ※编号Damiakuta变量是在他的案件的经验,改变不会提供。
  293.   #--------------------------------------------------------------------------
  294.   alias tig_da_command_315 command_315
  295.   def command_315
  296.     return true if dummy_actor_to_self?
  297.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  298.       keep = @params[0]
  299.       @params[0] = $game_variables[TARGET_V]
  300.     end
  301.     result = tig_da_command_315
  302.     @params[0] = keep if keep != nil
  303.     return result
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ◎ レベルの増減 (ダミー処理の追加)
  307.   #  ※编号Damiakuta变量是在他的案件的经验,改变不会提供。
  308.   #--------------------------------------------------------------------------
  309.   alias tig_da_command_316 command_316
  310.   def command_316
  311.     return true if dummy_actor_to_self?
  312.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  313.       keep = @params[0]
  314.       @params[0] = $game_variables[TARGET_V]
  315.     end
  316.     result = tig_da_command_316
  317.     @params[0] = keep if keep != nil
  318.     return result
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ◎ 能力値の増減 (ダミー処理の追加)
  322.   #  ※编号Damiakuta变量是增加或减少其价值,如果不进行身份。
  323.   #--------------------------------------------------------------------------
  324.   alias tig_da_command_317 command_317
  325.   def command_317
  326.     return true if dummy_actor_to_self?
  327.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  328.       keep = @params[0]
  329.       @params[0] = $game_variables[TARGET_V]
  330.     end
  331.     result = tig_da_command_317
  332.     @params[0] = keep if keep != nil
  333.     return result
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ◎ スキルの増減 (ダミー処理の追加)
  337.   #  ※ 変数IDがダミーアクター自身の場合はスキルの増減は実施されません。
  338.   #--------------------------------------------------------------------------
  339.   alias tig_da_command_318 command_318
  340.   def command_318
  341.     return true if dummy_actor_to_self?
  342.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  343.       keep = @params[0]
  344.       @params[0] = $game_variables[TARGET_V]
  345.     end
  346.     result = tig_da_command_318
  347.     @params[0] = keep if keep != nil
  348.     return result
  349.   end
  350.   #--------------------------------------------------------------------------
  351.   # ◎ 装備の変更 (ダミー処理の追加)
  352.   #  ※ 変数IDがダミーアクター自身の場合は装備の変更は実施されません。
  353.   #--------------------------------------------------------------------------
  354.   alias tig_da_command_319 command_319
  355.   def command_319
  356.     return true if dummy_actor_to_self?
  357.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  358.       keep = @params[0]
  359.       @params[0] = $game_variables[TARGET_V]
  360.     end
  361.     result = tig_da_command_319
  362.     @params[0] = keep if keep != nil
  363.     return result
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ◎ 名前の変更 (ダミー処理の追加)
  367.   #  ※ 変数IDがダミーアクター自身の場合の処理はあえて残してあります。
  368.   #--------------------------------------------------------------------------
  369.   alias tig_da_command_320 command_320
  370.   def command_320
  371.     return true if dummy_actor_to_self?
  372.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  373.       keep = @params[0]
  374.       @params[0] = $game_variables[TARGET_V]
  375.     end
  376.     result = tig_da_command_320
  377.     @params[0] = keep if keep != nil
  378.     return result
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ◎ 職業の変更 (ダミー処理の追加)
  382.   #  ※ 変数IDがダミーアクター自身の場合は職業の変更は実施されません。
  383.   #--------------------------------------------------------------------------
  384.   alias tig_da_command_321 command_321
  385.   def command_321
  386.     return true if dummy_actor_to_self?
  387.     return true if dummy_actor_to_self?
  388.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  389.       keep = @params[0]
  390.       @params[0] = $game_variables[TARGET_V]
  391.     end
  392.     result = tig_da_command_321
  393.     @params[0] = keep if keep != nil
  394.     return result
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ◎ アクターのグラフィック変更 (ダミー処理の追加)
  398.   #  ※ 変数IDがダミーアクター自身の場合はグラフィック変更は実施されません。
  399.   #--------------------------------------------------------------------------
  400.   alias tig_da_command_322 command_322
  401.   def command_322
  402.     return true if dummy_actor_to_self?
  403.     if @params[0] == Dummy_Actor::DUMMY_ACTOR_ID   
  404.       keep = @params[0]
  405.       @params[0] = $game_variables[TARGET_V]
  406.     end
  407.     result = tig_da_command_322
  408.     @params[0] = keep if keep != nil
  409.     return result
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ○ ダミーアクター
  413.   #--------------------------------------------------------------------------
  414.   def dummy_actor
  415.     if $game_actors[$game_variables[TARGET_V]] == nil
  416.       return $game_actors[1]
  417.     end
  418.     return $game_actors[$game_variables[TARGET_V]]
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ○ ダミーアクターが無効?
  422.   #    party : 対象がパーティー(変数の内容が 0 )の場合に返すフラグ
  423.   #            メンバーのみ有効、ということにしたいなら true
  424.   #            パーティーを含んだ場合も有効、ということにしたいなら false
  425.   #--------------------------------------------------------------------------
  426.   def dummy_actor_invalidity?(party = true)
  427.     return true if dummy_actor_to_self?
  428.     return party if dummy_actor_to_party?
  429.     return $game_actors[$game_variables[TARGET_V]] == nil
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ○ ダミーアクターの対象がパーティー?
  433.   #--------------------------------------------------------------------------
  434.   def dummy_actor_to_party?
  435.     return $game_variables[TARGET_V] == 0
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ○ ダミーアクターの対象がダミーアクター自身?
  439.   #--------------------------------------------------------------------------
  440.   def dummy_actor_to_self?
  441.     return $game_variables[TARGET_V] == Dummy_Actor::DUMMY_ACTOR_ID
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # ○ アイテム・スキルの使用者のIDを指定変数に取得
  445.   #--------------------------------------------------------------------------
  446.   def input_user(variable_id)
  447.     $game_variables[variable_id] = $game_party.object_user
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ○ アイテム・スキルのターゲットのIDを指定変数に取得
  451.   #--------------------------------------------------------------------------
  452.   def input_target(variable_id)
  453.     $game_variables[variable_id] = $game_party.object_target
  454.   end
  455. end
复制代码

作者: untrueterry    时间: 2010-9-5 21:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: lxdsh2009    时间: 2010-9-5 21:38
翻译器鸡肋……
还是手动好……
几年前学日语却一直学不下去……
作者: SVM伟    时间: 2010-9-6 19:13
体力话真的很累啊,LS已经有了个翻译,MS这个脚本还有个,我翻那个,基本纯手动,有些歧义请理解
作者: SVM伟    时间: 2010-9-6 20:05
本帖最后由 SVM伟 于 2010-9-7 20:36 编辑

脚本已经更新完一个,在下面回帖中
作者: SVM伟    时间: 2010-9-7 20:38
本帖最后由 SVM伟 于 2010-9-8 19:25 编辑

我并没有把选择给改了,我怕会出错
估计会龟速把剩下的翻译
已经重新翻译成功,44吧

  1. #==============================================================================
  2. #
  3. #■多个选择项及酒店系统拓展系统Ver.3.11 製作者:月紳士
  4. #
  5. #· RPG游戏制作软件为RGSS2 VX的脚本
  6. #
  7. #重写的方法(注冲突)○别名方法 新方法
  8. #
  9. #第二次发布!原来是利用脚本(不确定)。请一定要往下看。
  10. #------------------------------------------------------------------------------
  11. #更新记录
  12. #  Ver3.11 主角的选择时不符合时修正。
  13. #  Ver3.10附加可选功能。
  14. #  Ver3.01初始设定项目增加。
  15. #  Ver3.00大幅度修改结构和增加脚本。
  16. #  增加一个脚本功能。
  17. #  列出功能(废止变更方向)。
  18. #==============================================================================
  19. =begin
  20. 这个脚本下面最重要。
  21. 现在可以被看作项目或有五个选择。
  22. 如果超过五个选择有介绍项目的选择
  23. 将会滚动在窗口里。
  24. 和消息窗口将显示在窗口中
  25. 您可以查看一个特定的选择。
  26. 你可以选择一个动态现在选择的项目。
  27. ※Ver.3.00 现在提供一个脚本到另一个脚本。

  28. Ver.3.00类似于以前一样单独的使用
  29. 脚本设置是必需的。
  30. 如需帮助,请参阅手动设定。

  31. =end
  32. #==============================================================================
  33. # □ 扩展选择的模块(自定义模块)
  34. #==============================================================================

  35. module Expansion_Choices

  36.   CHOICE_RESUIT_VARIABLES = 1
  37.    # 指定选择项目的结果容纳的变量。
  38.    # 玩家选择的选择项目的数量,这个参数将输出给变量。
  39.   
  40.   TARGET_ACTOR_ID_VARIABLES = 2
  41.    # 指定选择的結果容纳变量的。
  42.    # 主角选择特殊的ID、这要得到很多变量。
  43.    #(当使用脚本Damiakuta合并
  44.    # 这个脚本和ACTOR_ID_VARIABLES Damiakuta
  45.    # 推荐对齐。 )
  46.    
  47.    
  48.   EX_CHOICES_DELAY = 25
  49.    # 取消决定输入的选择以及其他选择
  50.    # 设置的帧延迟时间。
  51.   
  52. end

  53. #==============================================================================
  54. # □ Game_Choices
  55. #------------------------------------------------------------------------------
  56. #  这一类特殊的选择来管理选择。
  57. #==============================================================================

  58. class Game_Choices
  59.   #--------------------------------------------------------------------------
  60.   # ○ 定数
  61.   #--------------------------------------------------------------------------
  62.     CHOICE_V = Expansion_Choices::CHOICE_RESUIT_VARIABLES
  63.     TARGET_V = Expansion_Choices::TARGET_ACTOR_ID_VARIABLES
  64.   #--------------------------------------------------------------------------
  65.   # ○ 公共的变量
  66.   #--------------------------------------------------------------------------
  67.   attr_accessor :choices                   # 变量
  68.   attr_accessor :actor_id                  # 主角编号
  69.   attr_accessor :help_text                 # 选项的说明文字
  70.   attr_accessor :window_type               # 类型显示窗口
  71.   attr_accessor :column                    # 选择量横向显示
  72.   attr_accessor :cancel_type               # 取消项目时取消
  73.   attr_accessor :choice_cancel             # 自动选择时,自动选择
  74.   attr_accessor :choice_show_fast          # 自动选择一次
  75.   attr_accessor :choices_check             # 检查选项
  76.   attr_accessor :choices_ready             # 编写的选择
  77.   attr_accessor :can_not_select            # 非选项的选择
  78.   attr_accessor :choice_hide               # 隐藏选项
  79.   attr_accessor :icon                      # 选择的图标
  80.   attr_accessor :price                     # 价格选项
  81.   attr_accessor :pick_up                   # 选项选择
  82.   attr_accessor :pick_up_result            # 给主角特定的ID号(变量值)
  83.   attr_accessor :face_name                 # 接口文件名
  84.   attr_accessor :face_index                # 脸图像指数
  85.   attr_accessor :re_face                   # 扭转脸图像显示位置
  86.   #--------------------------------------------------------------------------
  87.   # ○  对象初始化
  88.   #--------------------------------------------------------------------------
  89.   def initialize
  90.     clear
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ○ 清除画面
  94.   #--------------------------------------------------------------------------
  95.   def clear
  96.     @cancel_type = -1
  97.     @choices = []
  98.     @actor_id = []
  99.     @help_text = []
  100.     @window_type = -1
  101.     @column = false
  102.     @choice_cancel = false
  103.     @choice_show_fast = false
  104.     @choices_check = false
  105.     @choices_ready = false
  106.     @can_not_select = []
  107.     @choice_hide = []
  108.     @icon = []
  109.     @price = []
  110.     @pick_up = nil
  111.     @pick_up_result = 0
  112.     @face_name = ""
  113.     @face_index = 0
  114.     @re_face = false
  115.     @item_name_memory = false
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ○ 主角选择什么项目?
  119.   #--------------------------------------------------------------------------
  120.   def actor_choice?
  121.     return false if @actor_id.empty?
  122.     return true
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ○ 获取画面的选择要显示的坐标
  126.   #--------------------------------------------------------------------------
  127.   def display_item_index
  128.     array = []
  129.     @choices.size.times do |i|
  130.       next if @choice_hide.include?(i)
  131.       next if @pick_up and @pick_up.include?(i)
  132.       array.push(i)
  133.     end
  134.     return array
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ○  获取项目要显示的选择
  138.   #--------------------------------------------------------------------------
  139.   def item
  140.     array = []
  141.     display_item_index.each{|i|array.push(@choices[i])}
  142.     return array
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ○ 显示项目的选择
  146.   #--------------------------------------------------------------------------
  147.   def size
  148.     return display_item_index.size
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ○ 获取选项,您可以选择项目数
  152.   #--------------------------------------------------------------------------
  153.   def active_item_index
  154.     array = []
  155.     @choices.size.times do |i|
  156.       next if @choice_hide.include?(i)
  157.       next if @pick_up and @pick_up.include?(i)
  158.       next if @can_not_select.include?(i)
  159.       array.push(i)
  160.     end
  161.     return array
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ○ 该项目的不可选择时○(不包括重组项目和隐藏的变量【重组项目MS是公共事件吧】)
  165.   #--------------------------------------------------------------------------
  166.   def can_not_select_active
  167.     array = []
  168.     n = 0
  169.     @choices.size.times do |i|
  170.       next if @choice_hide.include?(i)
  171.       next if @pick_up and @pick_up.include?(i)
  172.       array.push(n) if @can_not_select.include?(i)
  173.       n += 1
  174.     end
  175.     return array
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ○ 设置回复时选择
  179.   #--------------------------------------------------------------------------
  180.   def proc
  181.     choice_proc = Proc.new{|n|
  182.       if n < 0                # 扩展选项取消时(特殊返回值)的场合
  183.         if @cancel_type == -1 #  项目没有设定取消
  184.           $game_variables[CHOICE_V] = 0
  185.         else                  # 项目有设定取消
  186.           $game_variables[CHOICE_V] = @cancel_type
  187.           $game_variables[TARGET_V] = @actor_id[@cancel_type-1] if actor_choice?
  188.         end
  189.       else
  190.         index = display_item_index[n]
  191.         $game_variables[CHOICE_V] = index + 1
  192.         $game_variables[TARGET_V] = @actor_id[index] if actor_choice?
  193.         $game_temp.last_select_choice = @choices[index] if @item_name_memory
  194.       end
  195.     }
  196.     return choice_proc
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ○ 获取选项的文字
  200.   #--------------------------------------------------------------------------
  201.   def get_option(text)
  202.     @column = true if /[\##]/i =~ text            # 获取项目的选择横行显示
  203.     @item_name_memory = true if /[\@@]/i =~ text  # 获取项目的选择横行显示
  204.     @choice_cancel = true if /[\'’]/ =~ text      # 自动选择项目时,自动选择
  205.     @choice_show_fast = true if /[\>>]/ =~ text   # 项目一次自动选择选项
  206.     if /\[(\d+)\]/ =~ text                         # 获取窗口选择类型
  207.       @window_type = $1.to_i
  208.     else
  209.       @window_type = -1
  210.     end
  211.     if /[\((](\d+)[\))]/ =~ text                 # 获取文本时取消的项目
  212.       @cancel_type = $1.to_i
  213.     elsif /[\((][\**][\))]/ =~ text             # 获取文本不是取消
  214.       @cancel_type = 0
  215.     else
  216.       @cancel_type = -1
  217.     end
  218.     if /face\{(\w+)\/([0-7])\}/i =~ text
  219.       @face_name = $1
  220.       @face_index = $2.to_i
  221.       if /re_face\{/i =~ text
  222.         @re_face = true
  223.       end
  224.     elsif /face\{top_actor\}/i =~ text
  225.       actor = $game_party.members[0]
  226.       @face_name = actor.face_name
  227.       @face_index = actor.face_index
  228.       if /re_face\{/i =~ text
  229.         @re_face = true
  230.       end
  231.     end
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ○ 创建一个自由选择到项目
  235.   #--------------------------------------------------------------------------
  236.   def create_free_choices(text)
  237.     choices = text.split(/[\|\s]/)
  238.     choices.delete("")
  239.     for i in choices
  240.       i.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  241.       i.gsub!(/\<cns\>/i, "")
  242.       if $&
  243.         @can_not_select.push(@choices.size)
  244.       end
  245.       i.gsub!(/\<ch\>/i, "")
  246.       if $&
  247.         @choice_hide.push(@choices.size)
  248.       end
  249.       i.gsub!(/\\i\[([0-9]+)\]/i, "")
  250.       if $&
  251.         @icon[@choices.size] = $1.to_i
  252.       end
  253.       i.gsub!(/\\g\[([0-9]+)\]/i, "")
  254.       if $&
  255.         @price[@choices.size] = $1.to_i
  256.       end
  257.       @choices.push(i)
  258.     end
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ○ 生成一个文本帮助
  262.   #--------------------------------------------------------------------------
  263.   def set_help(text, index = nil)
  264.     if index
  265.       @help_text[index] = text
  266.     else
  267.       @help_text.push(text)
  268.     end
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ○ 调整主角选项的选择
  272.   #--------------------------------------------------------------------------
  273.   def actor_choice_addition(addition_type, addition_id, icon_index = nil)
  274.     return unless actor_choice?
  275.     if addition_type == 1 or addition_type == 3
  276.       addition_id = @actor_id - addition_id
  277.     end
  278.     for i in addition_id.compact
  279.       ind = @actor_id.index(i)
  280.       next if ind.nil?
  281.       case addition_type
  282.       when 0, 1
  283.         @can_not_select.push(ind)
  284.       when 2, 3
  285.         @choice_hide.push(ind)
  286.       when 4
  287.         @icon[ind] = icon_index
  288.       end
  289.     end
  290.   end
  291. end

  292. #==============================================================================
  293. # ■ Game_Temp
  294. #------------------------------------------------------------------------------
  295. #  保存数据不包括在同一个类的临时数据处理。
  296. # 请参考$ Game_temp被引用的场合。
  297. #==============================================================================

  298. class Game_Temp
  299.   #--------------------------------------------------------------------------
  300.   # ○ 公共实例变量
  301.   #--------------------------------------------------------------------------
  302.   attr_accessor :choices
  303.   attr_accessor :last_select_choice
  304.   #--------------------------------------------------------------------------
  305.   # ◎ 对象初始化
  306.   #--------------------------------------------------------------------------
  307. alias tig_ec_initialize initialize
  308.   def initialize
  309.     tig_ec_initialize
  310.     @choices = Game_Choices.new
  311.     @last_select_choice = ""
  312.   end
  313. end

  314. #==============================================================================
  315. # ■ Game_Message
  316. #------------------------------------------------------------------------------
  317. #  这一个模块来处理选择窗口(不确定),以显示这些句子和选择的坐标。
  318. #   这类的实例参照$ game_message。
  319. #==============================================================================

  320. class Game_Message
  321.   #--------------------------------------------------------------------------
  322.   # ○ 公共实例变量
  323.   #--------------------------------------------------------------------------
  324.   attr_accessor :can_not_select             #  禁止选择项目
  325.   attr_accessor :last_face_name             # face_name 履历
  326.   attr_accessor :last_face_index            # face_index 履历
  327.   attr_accessor :last_background            # background 履历
  328.   attr_accessor :last_position              # position 履历
  329.   attr_accessor :cancel_input               # 当发送选项或获取取消?
  330.   attr_accessor :show_ex_choices
  331.   #--------------------------------------------------------------------------
  332.   # ◎ 清除画面
  333.   #--------------------------------------------------------------------------
  334.   alias tig_ec_clear clear
  335.   def clear
  336.     tig_ec_clear
  337.     @cancel_input = false
  338.     @can_not_select = []
  339.     @show_ex_choices = nil
  340.   end
  341. end

  342. #==============================================================================
  343. # ■ Game_Party
  344. #------------------------------------------------------------------------------
  345. #  对变更等级 变更职业(不确定)。包括如金钱和物品的信息。
  346. # 这一实例被引用在脚本$ game_party。
  347. #==========================================================================

  348. class Game_Party < Game_Unit
  349.   #--------------------------------------------------------------------------
  350.   # ○ 公共变量
  351.   #--------------------------------------------------------------------------
  352.   attr_accessor :group                                # 主角
  353.   attr_accessor :reserve_choice_id                    # 主角ID(不确定)
  354.   #--------------------------------------------------------------------------
  355.   # ○ 是否已达到最大数量?
  356.   #--------------------------------------------------------------------------
  357.   def max?
  358.     return @actors.size >= MAX_MEMBERS
  359.   end
  360. end

  361. #==============================================================================
  362. # ■ Game_Event
  363. #------------------------------------------------------------------------------
  364. #  这一个模块来处理事件。地图切换或有条件的切换,
  365. # 并行处理有其他特定的活动,如跑步,Game_Map使用的模块。
  366. #==============================================================================

  367. class Game_Event < Game_Character
  368.   #--------------------------------------------------------------------------
  369.   # ◎ 地图切换或有条件的切换条件符合
  370.   #--------------------------------------------------------------------------
  371.   alias tig_ec_conditions_met? conditions_met?
  372.   def conditions_met?(page)
  373.     c = page.condition
  374.     if c.actor_valid and c.variable_valid and
  375.                    c.variable_id == Expansion_Choices::CHOICE_RESUIT_VARIABLES
  376.       return $game_party.group[c.variable_value].include?(c.actor_id)
  377.     end

  378.     return tig_ec_conditions_met?(page)
  379.   end
  380. end

  381. #==============================================================================
  382. # ■ Game_Interpreter
  383. #------------------------------------------------------------------------------
  384. #  命令解释器。这个类Game_Map类Game_Troop类和Game_Event使用的类
  385. #==============================================================================

  386. class Game_Interpreter
  387.   #--------------------------------------------------------------------------
  388.   # ○ 定义变量
  389.   #--------------------------------------------------------------------------
  390.     MAX_LINE = 4                            # 消息窗口最大数量
  391.     CHOICE_V = Expansion_Choices::CHOICE_RESUIT_VARIABLES
  392.     TARGET_V = Expansion_Choices::TARGET_ACTOR_ID_VARIABLES
  393.   #--------------------------------------------------------------------------
  394.   # ◎ 清除画面
  395.   #--------------------------------------------------------------------------
  396.   alias tig_ec_clear clear
  397.   def clear
  398.     tig_ec_clear
  399.     $game_message.last_face_name = ""
  400.     $game_message.last_face_index = 0
  401.     $game_message.last_background = 0
  402.     $game_message.last_position = 2
  403.     if $game_party.group.nil?
  404.       $game_party.group = [[], [], [], [], [], []] # 选项0〜5初始化
  405.     end
  406.     $game_party.reserve_choice_id = 1
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ◎ 加载画面选项
  410.   #--------------------------------------------------------------------------
  411.   alias tig_ec_setup_choices setup_choices
  412.   def setup_choices(params)
  413.     $game_temp.choices.clear
  414.     tig_ec_setup_choices(params)
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ○ 特殊的选择
  418.   #--------------------------------------------------------------------------
  419.   def expansion_choice?(index = nil)
  420.     index = @index unless index
  421.     return false if @list[index].code != 108
  422.     return /\A選択肢/ =~ @list[index].parameters[0]
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # ◎ 命令和事件
  426.   #  ※ 中断处理和一个特殊的命令选项 ※延时执行
  427.   #--------------------------------------------------------------------------
  428.   alias tig_ec_execute_command execute_command
  429.   def execute_command
  430.     if @index >= @list.size-1
  431.       command_end
  432.       return true
  433.     else
  434.       if expansion_choice?
  435.         return setup_expansion_choice
  436.       elsif choices_command
  437.         return true
  438.       end
  439.     end
  440.     return tig_ec_execute_command
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   # ◎ 设置画面和等待回调消息的设定
  444.   #  ※ 在句子显示扩展选项过程中遵循的适合选择
  445.   #--------------------------------------------------------------------------
  446.   alias tig_ec_set_message_waiting set_message_waiting
  447.   def set_message_waiting
  448.     unless $game_message.texts.size == 0
  449.       unless @list[(@index - 1)].code == 102 or @list[(@index - 1)].code == 103
  450.         setup_expansion_choice if expansion_choice?
  451.       end
  452.     end
  453.    
  454.     tig_ec_set_message_waiting
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ○ 设置一个特别的选择排序过程
  458.   #--------------------------------------------------------------------------
  459.   def setup_expansion_choice
  460.     text = @list[@index].parameters[0]
  461.     if /\A選択肢開始/ =~ text
  462.       @index += 1 if start_display_choices
  463.       return false
  464.     elsif /\A選択肢ピックアップ/ =~ text
  465.       $game_temp.choices.pick_up = []
  466.       $game_temp.choices.pick_up_result = -1
  467.       if /\[(\d+)\]/ =~ text
  468.         $game_temp.choices.pick_up_result = $1.to_i
  469.       end
  470.       $game_temp.choices.window_type = -1
  471.       @index += 1 if start_display_choices
  472.       return false
  473.     elsif /\A選択肢の?初期化/ =~ text
  474.       $game_temp.choices.clear
  475.       return true
  476.     elsif /[::]パーティー/ =~ text
  477.       return command_setup_actor_choice
  478.     elsif /[::]グループ\[(\d+)\]/ =~ text
  479.       return command_setup_actor_choice($1.to_i)
  480.     else
  481.       return command_setup_free_choice
  482.     end
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # ○ 选择主角(命令)
  486. # 这个方法是一种类似事件命令。
  487. # 我们将并行处理目标。
  488. # 但是,如果有选择画面产生,
  489. # 只显示作为结果返回,指数并没有提前。(最后一句不明白)
  490.   #--------------------------------------------------------------------------
  491.   def command_setup_actor_choice(group_id = nil, test_index = nil)
  492.     index = test_index ? test_index : @index
  493.     if group_id
  494.       choices = setup_group_choice(group_id)
  495.     else
  496.       choices = setup_party_choice
  497.     end
  498.    
  499.     unless /[::]/ =~ @list[index].parameters[0]
  500.       if test_index
  501.         return choices
  502.       else
  503.         return
  504.       end
  505.     end
  506.    
  507.     option_text = $`
  508.     choices.get_option(option_text)
  509.    
  510.     index += 1
  511.     while @list[index].code == 408
  512.       index += 1
  513.       texts = @list[index-1].parameters[0].split(/[\|\s]/)
  514.       for text in texts
  515.         if /[::]/ =~ text
  516.           addition_type_text = $`
  517.           addition_id_text = $'
  518.           # 調整画面的取得
  519.           if /\A選択不能/ =~ addition_type_text
  520.             addition_type = 0
  521.           elsif /\A選択限定/ =~ addition_type_text
  522.             addition_type = 1
  523.           elsif /\A除外/ =~ addition_type_text
  524.             addition_type = 2
  525.           elsif /\A共通/ =~ addition_type_text
  526.             addition_type = 3
  527.           elsif /\Aアイコン付加\[(\d+)\]/ =~ addition_type_text
  528.             addition_type = 4
  529.             icon_index = $1.to_i
  530.           else
  531.             next
  532.           end
  533.           # 调整获取的ID
  534.           if /\Aパーティー/ =~ addition_id_text
  535.             addition_id = actor_choice_addition_party
  536.           elsif /\Aグループ\[(\d+)\]/ =~ addition_id_text
  537.             addition_id = actor_choice_addition_group($1.to_i)
  538.           elsif /\Aステート\[(\d+)\]/ =~ addition_id_text
  539.             addition_id = actor_choice_addition_state($1.to_i)
  540.           elsif /\Aレベル\[(\d+)\]/ =~ addition_id_text
  541.             addition_id = actor_choice_addition_level($1.to_i)
  542.           elsif /\A負傷者/ =~ addition_id_text
  543.             addition_id = actor_choice_addition_injure
  544.           else
  545.             next
  546.           end
  547.         end
  548.         choices.actor_choice_addition(addition_type, addition_id, icon_index)
  549.       end
  550.     end
  551.    
  552.     if test_index
  553.       return choices
  554.     else
  555.       $game_temp.choices = choices
  556.       if choices_check?(option_text)                   # 检查是否选择
  557.         $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = $game_temp.choices.active_item_index.size
  558.         return true
  559.       elsif $game_temp.choices.active_item_index.size == 0       # 如果该选项被禁用
  560.         $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = -1
  561.         return true
  562.       elsif $game_temp.choices.size == 1 and choices_one?(option_text)
  563.                                                        # 如果自我选择
  564.         $game_temp.choices.proc.call($game_temp.choices.active_item_index[0])
  565.         return true
  566.       elsif choices_start?(option_text)                # 选择开始
  567.         if start_display_choices
  568.           @index = index
  569.           return false
  570.         else
  571.           return true
  572.         end
  573.       end
  574.     end
  575.   end
  576.   #--------------------------------------------------------------------------
  577.   # ○ 自动选择○(命令)
  578. # 这个方法是一种类似事件命令。
  579. # 我们将并行处理目标。
  580. # 但是,如果有选择画面产生,
  581. # 只显示作为结果返回,指数并没有提前。(最后一句还是不明白)
  582.   #--------------------------------------------------------------------------
  583.   def command_setup_free_choice(test_index = nil)
  584.     index = test_index ? test_index : @index
  585.     choices = Game_Choices.new
  586.    
  587.     unless /[::]/ =~ @list[index].parameters[0]
  588.       if test_index
  589.         return choices
  590.       else
  591.         return
  592.       end
  593.     end
  594.    
  595.     option_text = $`
  596.     choices.get_option(option_text)
  597.     text = conversion_choices_switch_data($')
  598.     choices.create_free_choices(text)
  599.    
  600.     index += 1
  601.     while @list[index].code == 408           # 添加数据注释
  602.       text = conversion_choices_switch_data(@list[index].parameters[0])
  603.       choices.create_free_choices(text)
  604.       index += 1
  605.     end
  606.     while @list[index].code == 108 and         # 添加其他选项
  607.           (/\A追加選択肢\s?[::]/ =~ @list[index].parameters[0])
  608.       text = conversion_choices_switch_data($')
  609.       choices.create_free_choices(text)
  610.       index += 1
  611.       while @list[index].code == 408   # 添加更多的注释
  612.         text = conversion_choices_switch_data(@list[index].parameters[0])
  613.         choices.create_free_choices(text)
  614.         index += 1
  615.       end
  616.     end
  617.    
  618.     if test_index
  619.       return choices
  620.     else
  621.       $game_temp.choices = choices
  622.       if choices_check?(option_text)                   # 检查是否选择的場合
  623.         $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = $game_temp.choices.active_item_index.size
  624.         return true
  625.       elsif $game_temp.choices.active_item_index.size == 0       # 如果该选项被禁用的場合
  626.         $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = -1
  627.         return true
  628.       elsif $game_temp.choices.size == 1 and choices_one?(option_text)
  629.                                                        # 如果替代的自动选择
  630.         $game_temp.choices.proc.call($game_temp.choices.active_item_index[0])
  631.         return true
  632.       elsif choices_start?(option_text)                # 选择開始
  633.         if start_display_choices
  634.           @index = index
  635.           return false
  636.         else
  637.           return true
  638.         end
  639.       end
  640.     end
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # ○ 代码将在数据转换开关中自由选择
  644.   #--------------------------------------------------------------------------
  645.   def conversion_choices_switch_data(text)
  646.    
  647.     # 获取隐藏的开关
  648.     while text =~ /\\S\[([0-9]+)\]/i
  649.       if $game_switches[$1.to_i] # 如果你不关掉自动隐藏(应该是下一句的反义词,不清楚)
  650.         text = text.sub(/\\S\[#{$1.to_i}\]/i, "")
  651.       else                       # 如果你关掉自动隐藏
  652.         text = text.sub(/\\S\[#{$1.to_i}\]/i, "<ch>")
  653.       end
  654.     end
  655.    
  656.     # 从自我隐藏的开关
  657.     while text =~ /\\S\[([A-D])\]/i
  658.       if @original_event_id > 0          # 地图无事件?
  659.         key = [@map_id, @original_event_id, $1.upcase]
  660.         unless $game_self_switches[key]  # 如果关掉自我隐藏
  661.           text = text.sub(/\\S\[#{$1}\]/i, "<ch>")
  662.         end
  663.       end
  664.       text = text.sub(/\\S\[#{$1}\]/i, "") # 必须显示适当的画面
  665.     end
  666.    
  667.     # 选项不可以选择
  668.     while text =~ /\\S\'\[([0-9]+)\]/i
  669.       if $game_switches[$1.to_i] # 如果你没有关掉自动隐藏
  670.         text = text.sub(/\\S\'\[#{$1.to_i}\]/i, "")
  671.       else                       # 如果你关掉自动隐藏
  672.         text = text.sub(/\\S\'\[#{$1.to_i}\]/i, "<cns>")
  673.       end
  674.     end
  675.    
  676.     # 获取非自我选择开关
  677.     while text =~ /\\S\'\[([A-D])\]/i
  678.       if @original_event_id > 0          # 地图无事件?
  679.         key = [@map_id, @original_event_id, $1.upcase]
  680.         unless $game_self_switches[key]  # 如果您选择不关掉自我隐藏
  681.           text = text.sub(/\\S\'\[#{$1}\]/i, "<cns>")
  682.         end
  683.       end
  684.       text = text.sub(/\\S\'\[#{$1}\]/i, "") #选择是正确的
  685.     end
  686.     return text
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ○ 创建一个新的选择
  690.   #--------------------------------------------------------------------------
  691.   def setup_party_choice
  692.     choices = Game_Choices.new
  693.     for i in 0...$game_party.members.size
  694.       actor = $game_party.members[i]
  695.       choices.choices.push(actor.name)
  696.       choices.actor_id.push(actor.id)
  697.     end
  698.     return choices
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # ○ 创建一个选择组
  702.   #--------------------------------------------------------------------------
  703.   def setup_group_choice(group_id)
  704.     choices = Game_Choices.new
  705.     unless $game_party.group[group_id].nil?
  706.       for i in 0...$game_party.group[group_id].size
  707.         actor = $game_actors[$game_party.group[group_id][i]]
  708.         choices.choices.push(actor.name)
  709.         choices.actor_id.push(actor.id)
  710.       end
  711.     end
  712.     return choices
  713.   end
  714.   #--------------------------------------------------------------------------
  715.   # ○ 获得主角ID
  716.   #--------------------------------------------------------------------------
  717.   def actor_choice_addition_party
  718.     array = []
  719.     for actor in $game_party.members
  720.       array.push(actor.id)
  721.     end
  722.     return array
  723.   end
  724.   #--------------------------------------------------------------------------
  725.   # ○ 获得主角ID组
  726.   #--------------------------------------------------------------------------
  727.   def actor_choice_addition_group(group_id)
  728.     return [] if $game_party.group[group_id].nil?
  729.     array = $game_party.group[group_id]
  730.     return array
  731.   end
  732.   #--------------------------------------------------------------------------
  733.   # ○ 获得附加的ID
  734.   #--------------------------------------------------------------------------
  735.   def actor_choice_addition_state(state_id)
  736.     array = []
  737.     for i in 1...$data_actors.size
  738.       actor = $game_actors[i]
  739.       array.push(i) if actor.state?(state_id)
  740.     end
  741.     return array
  742.   end
  743.   #--------------------------------------------------------------------------
  744.   # ○ 获得选择
  745.   #--------------------------------------------------------------------------
  746.   def actor_choice_addition_level(level)
  747.     array = []
  748.     for i in 1...$data_actors.size
  749.       actor = $game_actors[i]
  750.       array.push(i) if actor.level >= level
  751.     end
  752.     return array
  753.   end
  754.   #--------------------------------------------------------------------------
  755.   # ○ 负伤者ID的获取(不清楚)
  756.   #--------------------------------------------------------------------------
  757.   def actor_choice_addition_injure
  758.     array = []
  759.     for i in 1...$data_actors.size
  760.       actor = $game_actors[i]
  761.       array.push(i) if actor.hp < actor.maxhp
  762.     end
  763.     return array
  764.   end
  765.   #--------------------------------------------------------------------------
  766.   # ○ 显示选项
  767.   #--------------------------------------------------------------------------
  768.   def start_display_choices
  769.     if $game_temp.choices.window_type != -1 or
  770.        $game_temp.choices.pick_up or
  771.        $game_message.texts.size == 0 or
  772.        $game_message.texts.size + $game_temp.choices.size <= MAX_LINE

  773.       $game_message.face_name = $game_message.last_face_name
  774.       $game_message.face_index = $game_message.last_face_index
  775.       $game_message.background = $game_message.last_background
  776.       $game_message.position = $game_message.last_position
  777.       $game_message.choice_start = $game_message.texts.size
  778.       $game_message.can_not_select = $game_temp.choices.can_not_select_active
  779.             
  780.       if $game_temp.choices.window_type != -1 or $game_temp.choices.pick_up
  781.         $game_message.choice_max = 4
  782.         $game_message.show_ex_choices = $game_temp.choices
  783.       else
  784.         $game_message.choice_max = $game_temp.choices.size
  785.         for i in 0...$game_temp.choices.size
  786.           text = $game_temp.choices.item[i]
  787.           text = "\x06" + text if $game_temp.choices.choice_show_fast
  788.           if $game_message.can_not_select.include?(i)
  789.             text = "\x01[#{8}]" + text + "\x01[#{0}]"
  790.           end
  791.           $game_message.texts.push(text)
  792.         end
  793.       end

  794.       if $game_temp.choices.cancel_type == 0
  795.         $game_message.choice_cancel_type = 0
  796.       else
  797.         $game_message.choice_cancel_type = -1
  798.       end
  799.       
  800.       $game_message.choice_proc = $game_temp.choices.proc
  801.       tig_ec_set_message_waiting
  802.       return true
  803.     end
  804.     return false
  805.   end
复制代码

作者: SVM伟    时间: 2010-9-7 20:44
本帖最后由 SVM伟 于 2010-9-8 19:27 编辑
  1.     #--------------------------------------------------------------------------
  2.   # ○ 获得选项,立即执行确定选择方案
  3.   #--------------------------------------------------------------------------
  4.   def choices_start?(option_text)
  5.     return false if option_text.include?("準備")         # 准备好唯一的选择的场合
  6.     return false if choices_check?(option_text)          # 检查是否选择
  7.     return true
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # ○ 获得选项检查,以确定是否选择替代
  11.   #--------------------------------------------------------------------------
  12.   def choices_check?(option_text)
  13.     return true if option_text.include?("チェック")     #检查得到的选项
  14.     return false
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ○ 从一个确定的选项时自动选择一个选择
  18.   #--------------------------------------------------------------------------
  19.   def choices_one?(option_text)
  20.     return true if /[\'’]/ =~ option_text        # 自动选择时,选择选项
  21.     return false
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ○ 其他过滤选项命令与注释
  25.   #--------------------------------------------------------------------------
  26.   def choices_command
  27.     return false if @list[@index].code != 108
  28.     text = @list[@index].parameters[0]
  29.     if /\A追加選択肢\s?[::]/ =~ text
  30.       additional_choices
  31.       return true
  32.     elsif /\Aオプションを?取得[::]/ =~ text
  33.       $game_temp.choices.get_option($')
  34.       return true
  35.     elsif /\Aヘルプ/ =~ text
  36.       if /[::]/ =~ text
  37.         text = $'
  38.         if /\[(\d+)\]/ =~ $`
  39.           index = $1.to_i - 1
  40.         else
  41.           index = nil
  42.         end
  43.         $game_temp.choices.set_help(text, index)
  44.       end
  45.       return true
  46.     elsif /\A有効な?選択肢数を?取得/ =~ text
  47.       $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = $game_temp.choices.size
  48.       return true
  49.     elsif /\Aグループ\[/ =~ text or /\AG\[/i =~ text
  50.       if /\[(\d+)\]を?初期化/ =~ text
  51.         $game_party.group[$1.to_i] = []
  52.         $game_map.need_refresh = true
  53.         return true
  54.       elsif /\[(\d+)\]を?作成[::]/ =~ text
  55.         group_number = $1.to_i
  56.         crowd = $'
  57.         $game_party.group[group_number] = []
  58.         if /\Aパーティー/ =~ crowd
  59.           for actor in $game_party.members
  60.             $game_party.group[group_number].push(actor.id)
  61.           end
  62.         else
  63.           before_group = crowd.split(/[\|\s]/)
  64.           before_group.delete("")
  65.           for i in before_group
  66.             $game_party.group[group_number].push(i.to_i)
  67.           end
  68.         end
  69.         $game_map.need_refresh = true
  70.         return true
  71.       elsif /\[(\d+)\]に?[\((](\d+)[\))]を?追加/ =~ text
  72.         $game_party.group[$1.to_i] = [] if $game_party.group[$1.to_i].nil?
  73.         unless $game_party.group[$1.to_i].include?($2.to_i)
  74.           $game_party.group[$1.to_i].push($2.to_i)
  75.         end
  76.         $game_map.need_refresh = true
  77.         return true
  78.       elsif /\[(\d+)\]に?選択アクターを?追加/ =~ text
  79.         $game_party.group[$1.to_i] = [] if $game_party.group[$1.to_i].nil?
  80.         unless $game_party.group[$1.to_i].include?($game_variables[TARGET_V])
  81.           $game_party.group[$1.to_i].push($game_variables[TARGET_V])
  82.         end
  83.         $game_map.need_refresh = true
  84.         return true
  85.       elsif /\[(\d+)\]か?ら?[\((](\d+)[\))]を?削除/ =~ text
  86.         $game_party.group[$1.to_i] = [] if $game_party.group[$1.to_i].nil?
  87.         $game_party.group[$1.to_i].delete($2.to_i)
  88.         $game_map.need_refresh = true
  89.         return true
  90.       elsif /\[(\d+)\]か?ら?選択アクターを?削除/ =~ text
  91.         $game_party.group[$1.to_i] = [] if $game_party.group[$1.to_i].nil?
  92.         $game_party.group[$1.to_i].delete($game_variables[TARGET_V])
  93.         $game_map.need_refresh = true
  94.         return true
  95.       elsif /\[(\d+)\]へ?に?パーティーを?変更/ =~ text
  96.         $game_party.group[$1.to_i] = [] if $game_party.group[$1.to_i].nil?
  97.         return true if $game_party.group[$1.to_i].empty?
  98.         for m in $game_party.members
  99.           $game_party.remove_actor(m.id)
  100.         end
  101.         for i in $game_party.group[$1.to_i]
  102.           $game_party.add_actor(i)
  103.         end
  104.         $game_map.need_refresh = true
  105.         return true
  106.       end
  107.     elsif /\A選択アクターを?予備に?へ?格納/ =~ text
  108.       $game_party.reserve_choice_id = $game_variables[TARGET_V]
  109.     elsif /\A選択アクターを?予備か?ら?[習取]得/ =~ text
  110.       $game_variables[TARGET_V] = $game_party.reserve_choice_id
  111.     end
  112.     return false
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ○ 追加额外的选择
  116. #  ※ 这不是一个命令
  117. #     被视为唯一的例外。(不确定)
  118. #     这种方法本身是不足以自动处理。
  119.   #--------------------------------------------------------------------------
  120.   def additional_choices
  121.     return unless /[::]/ =~ @list[@index].parameters[0]
  122.     text = conversion_choices_switch_data($')
  123.     $game_temp.choices.create_free_choices(text)
  124.     temp_index = 1
  125.     while @list[@index+temp_index].code == 408 # さらに注釈データから追加
  126.       text = conversion_choices_switch_data(@list[@index+temp_index].parameters[0])
  127.       $game_temp.choices.create_free_choices(text)
  128.       temp_index += 1
  129.     end
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ○ 获取下一个选择
  133.   #--------------------------------------------------------------------------
  134.   def next_choices_search
  135.     index = @index + 1
  136.     while @list[index].code == 401 or
  137.           @list[index].code == 355 or @list[index].code == 655
  138.       index += 1
  139.     end
  140.     return nil if index >= @list.size - 1
  141.     return nil unless @list[index].code == 108
  142.     return nil if /\A選択肢開始/ =~ @list[index].parameters[0]
  143.     return index if /\A選択肢/ =~ @list[index].parameters[0]
  144.     return nil
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ◎文本视图
  148.   #--------------------------------------------------------------------------
  149.   alias tig_ec_command_101 command_101
  150.   def command_101
  151.    
  152.     # 有效的选择和替代选择,隐藏前面的文章(不清楚啊)
  153.     if /\\\*/ =~ @list[@index + 1].parameters[0]
  154.       next_choices_index = next_choices_search
  155.       unless next_choices_index.nil?
  156.         text = @list[next_choices_index].parameters[0]
  157.         if /[::]パーティー/ =~ text
  158.           choices = command_setup_actor_choice(nil, next_choices_index)
  159.         elsif /[::]グループ\[(\d+)\]/ =~ text
  160.           choices = command_setup_actor_choice($1.to_i, next_choices_index)
  161.         else
  162.           choices = command_setup_free_choice(next_choices_index)
  163.         end
  164.         return true if choices.size == 1 or choices.active_item_index.size == 0
  165.       end
  166.     end
  167.    
  168.     $game_message.last_face_name = @params[0]
  169.     $game_message.last_face_index = @params[1]
  170.     $game_message.last_background = @params[2]
  171.     $game_message.last_position = @params[3]
  172.     return tig_ec_command_101
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ◎ 选项出现
  176.   #--------------------------------------------------------------------------
  177.   alias tig_ec_command_102 command_102
  178.   def command_102                      # 得到的坐标
  179.     $game_message.face_name = $game_message.last_face_name
  180.     $game_message.face_index = $game_message.last_face_index
  181.     $game_message.background = $game_message.last_background
  182.     $game_message.position = $game_message.last_position
  183.     return tig_ec_command_102
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ○ 初始化文本显示参数
  187. #  ※ 如果你不想继续选择
  188. #     运行脚本继续事件
  189.   #--------------------------------------------------------------------------
  190.   def last_parameters_clear
  191.     $game_message.last_face_name = ""
  192.     $game_message.last_face_index = 0
  193.     $game_message.last_background = 0
  194.     $game_message.last_position = 2
  195.   end
  196. end

  197. #==============================================================================
  198. # ■ Window_Message
  199. #------------------------------------------------------------------------------
  200. #  用来显示文字信息窗口的。
  201. #==============================================================================

  202. class Window_Message < Window_Selectable
  203.   #--------------------------------------------------------------------------
  204.   # ◎对象初始化
  205.   #--------------------------------------------------------------------------
  206.   alias tig_ec_initialize initialize
  207.   def initialize
  208.     tig_ec_initialize
  209.     create_frame_choices_window
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ◎ 释放
  213.   #--------------------------------------------------------------------------
  214.   alias tig_ec_dispose dispose
  215.   def dispose
  216.     tig_ec_dispose
  217.     dispose_frame_choices_window
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ○ 创建一个窗口的其他选择
  221.   #--------------------------------------------------------------------------
  222.   def create_frame_choices_window
  223.     @frame_choices_window = Window_Choice.new
  224.     @frame_choices_window.openness = 0
  225.     @frame_choices_picjkup_window = Window_Pickup.new(@frame_choices_window)
  226.     @frame_choices_picjkup_window.visible = false
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ○ 其他选择的自由选择窗口
  230.   #--------------------------------------------------------------------------
  231.   def dispose_frame_choices_window
  232.     @frame_choices_window.dispose
  233.     @frame_choices_picjkup_window.dispose
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ◎ 视图更新
  237.   #--------------------------------------------------------------------------
  238.   alias tig_ec_update update
  239.   def update
  240.     update_frame_choices_window
  241.     tig_ec_update
  242.     unless @opening or @closing
  243.       if self.openness == 0
  244.         if $game_message.show_ex_choices and @frame_choices_window.openness == 0
  245.           start_ex_choice
  246.         end
  247.       end
  248.     end
  249.     unless @face_sprite.nil?
  250.       @face_sprite.visible = self.openness == 255 unless @face_sprite.disposed?
  251.     end
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ○ 更新其他选择窗口
  255.   #--------------------------------------------------------------------------
  256.   def update_frame_choices_window
  257.     @frame_choices_window.update
  258.     @frame_choices_picjkup_window.update
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ◎ 选择的開始
  262.   #--------------------------------------------------------------------------
  263.   alias tig_ec_start_choice start_choice
  264.   def start_choice
  265.     return start_ex_choice if $game_message.show_ex_choices
  266.     tig_ec_start_choice
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ○ 启动其他选择窗口
  270.   #--------------------------------------------------------------------------
  271.   def start_ex_choice
  272.     self.active = true
  273.     self.index = -1
  274.     @frame_choices_window.setting($game_message.show_ex_choices)
  275.     @frame_choices_window.open
  276.     @frame_choices_window.index = 0
  277.     @frame_choices_picjkup_window.refresh
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ◎ 选择结束
  281.   #--------------------------------------------------------------------------
  282.   alias tig_ec_terminate_message terminate_message
  283.   def terminate_message
  284.     tig_ec_terminate_message
  285.     $game_message.show_ex_choices = nil
  286.     @frame_choices_window.close
  287.     @frame_choices_window.index = -1
  288.     @frame_choices_picjkup_window.visible = false
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 选择输入处理
  292.   #--------------------------------------------------------------------------
  293.   def input_choice
  294.     return input_pick_up if $game_temp.choices.pick_up ###
  295.     if $game_message.show_ex_choices                   ###
  296.       return if @frame_choices_window.delay != 0
  297.       index = @frame_choices_window.index              ### 追加部分
  298.     else                                               ###
  299.       index = self.index                               ###
  300.     end                                                ###
  301.       
  302.     if Input.trigger?(Input::B)
  303.       Sound.play_cancel                                ### 追加部分
  304.       if $game_message.choice_cancel_type != 0         ### 変更部分  > → !=
  305.         #Sound.play_cancel                             ###文本
  306.         scroll_contents_clear                          ### 追加部分
  307.         $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
  308.         terminate_message
  309.       end
  310.     elsif Input.trigger?(Input::C)
  311.       return if can_not_select?(index)                 ### 追加・変更部分
  312.       Sound.play_decision
  313.       scroll_contents_clear                            ### 追加部分
  314.       $game_message.choice_proc.call(index)            ### 変更部分
  315.       terminate_message
  316.     end
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ○选择项处理
  320.   #--------------------------------------------------------------------------
  321.   def input_pick_up
  322.     if Input.trigger?(Input::B)
  323.       Sound.play_cancel
  324.       if $game_message.show_ex_choices.pick_up.empty?
  325.         $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = 0
  326.         scroll_contents_clear
  327.         $game_message.show_ex_choices.pick_up = nil
  328.         $game_message.show_ex_choices.pick_up_result = -1
  329.         terminate_message
  330.       else
  331.         $game_message.show_ex_choices.pick_up.pop
  332.         @frame_choices_window.index = [@frame_choices_window.index, 0].max
  333.         @frame_choices_window.refresh
  334.         @frame_choices_picjkup_window.refresh
  335.       end
  336.     elsif Input.trigger?(Input::C)
  337.       if @frame_choices_window.index == -1
  338.         Sound.play_decision
  339.         if $game_message.show_ex_choices.actor_choice?
  340.           array = []
  341.           for i in $game_message.show_ex_choices.pick_up
  342.             array.push($game_message.show_ex_choices.actor_id[i])
  343.           end
  344.           if $game_message.show_ex_choices.pick_up_result >= 0
  345.             $game_party.group[$game_message.show_ex_choices.pick_up_result] = array
  346.           end
  347.         else
  348.           array = []
  349.           for i in $game_message.show_ex_choices.pick_up
  350.             array.push(i + 1)
  351.           end
  352.           if $game_message.show_ex_choices.pick_up_result >= 0
  353.             $game_party.group[$game_message.show_ex_choices.pick_up_result] = $game_message.show_ex_choices.pick_up
  354.           end  
  355.         end
  356.         $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = $game_party.group[$game_message.show_ex_choices.pick_up_result][0]
  357.         scroll_contents_clear
  358.         $game_message.show_ex_choices.pick_up = nil
  359.         $game_message.show_ex_choices.pick_up_result = 0
  360.         terminate_message
  361.       else
  362.         return if can_not_select?(@frame_choices_window.index)
  363.         Sound.play_decision
  364.         $game_message.show_ex_choices.pick_up.push($game_message.show_ex_choices.display_item_index[@frame_choices_window.index])
  365.         @frame_choices_window.refresh
  366.         @frame_choices_picjkup_window.refresh
  367.       end
  368.     end
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ○  当您在选择一个项目选定的不是正确的
  372. #  ※ 如果您选择是,负伤者的警告音响起的结果返回。(应该是返回选择)
  373.   #--------------------------------------------------------------------------
  374.   def can_not_select?(index)
  375.     return false if $game_temp.choices.display_item_index.empty?
  376.     if $game_temp.choices.can_not_select_active.include?(index)
  377.       Sound.play_buzzer
  378.       return true
  379.     elsif $game_temp.choices.price[$game_temp.choices.display_item_index[index]]
  380.       if $game_temp.choices.price[$game_temp.choices.display_item_index[index]] > $game_party.gold
  381.         Sound.play_buzzer
  382.         return true
  383.       end
  384.     end
  385.     return false
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ○ 初始化后,项目选择选项4个窗口
  389.   #--------------------------------------------------------------------------
  390.   def scroll_contents_clear  
  391.     if $game_message.choice_max > MAX_LINE
  392.       @item_max = 0
  393.       self.oy = 0
  394.       create_contents
  395.     end
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ◎ 转换特殊字符
  399.   #--------------------------------------------------------------------------
  400.   alias tig_ec_convert_special_characters convert_special_characters
  401.   def convert_special_characters
  402.     @text.gsub!(/\\N\[選択アクター\]/i) { $game_actors[$game_variables[Expansion_Choices::TARGET_ACTOR_ID_VARIABLES]].name }
  403.     @text.gsub!(/\\N\[選択\]/i) { $game_actors[$game_variables[Expansion_Choices::TARGET_ACTOR_ID_VARIABLES]].name }
  404.     @text.gsub!(/\\N\[choice\]/i) { $game_actors[$game_variables[Expansion_Choices::TARGET_ACTOR_ID_VARIABLES]].name }
  405.     @text.gsub!(/\\N\[予備アクター\]/i) { $game_actors[$game_party.reserve_choice_id].name }
  406.     @text.gsub!(/\\N\[予備\]/i) { $game_actors[$game_party.reserve_choice_id].name }
  407.     @text.gsub!(/\\N\[reserve\]/i) { $game_actors[$game_party.reserve_choice_id].name }
  408.     @text.gsub!(/\\N\[選択項目\]/i) { $game_temp.last_select_choice }
  409.     @text.gsub!(/\\\*/){ "" }   
  410.     tig_ec_convert_special_characters
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ◎ 消息开始(估计是帮助)
  414.   #--------------------------------------------------------------------------
  415.   alias tig_ec_start_message start_message
  416.   def start_message
  417.     face_sprite_dispose
  418.     tig_ec_start_message
  419.     if @item_max > MAX_LINE
  420.       create_contents        # 最大項目以上の選択肢の際に項目をすべて線画させる
  421.       unless $game_message.face_name.empty?
  422.         draw_face_sprite($game_message.face_name, $game_message.face_index)
  423.       end
  424.     end
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # ◎ 分页进程处理
  428.   #--------------------------------------------------------------------------
  429.   alias tig_ec_new_page new_page
  430.   def new_page
  431.     tig_ec_new_page
  432.     if @item_max > 4
  433.       @line_count = 4 - @item_max
  434.     end
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # ○ 工作面图形(精灵【就是活动版块吧】)的描绘
  438. #     face_name  : 图形文件名称
  439. #     face_index : 图形对照的参数
  440. #     size       : 查看尺寸
  441.   #--------------------------------------------------------------------------
  442.   def draw_face_sprite(face_name, face_index, size = 96)
  443.     rect = Rect.new(0, 0, 0, 0)
  444.     rect.x = face_index % 4 * 96 + (96 - size) / 2
  445.     rect.y = face_index / 4 * 96 + (96 - size) / 2
  446.     rect.width = size
  447.     rect.height = size
  448.     @face_sprite = Sprite.new
  449.     @face_sprite.bitmap = Cache.face(face_name)
  450.     @face_sprite.src_rect = rect
  451.     @face_sprite.z = 200
  452.     @face_sprite.x = self.x + 16
  453.     @face_sprite.y = self.y + 16
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ○ 开放脸图形(精灵)
  457.   #--------------------------------------------------------------------------
  458.   def face_sprite_dispose
  459.     unless @face_sprite.nil?
  460.       @face_sprite.dispose unless @face_sprite.disposed?
  461.     end
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ○ 开放脸图形
  465.   #--------------------------------------------------------------------------
  466.   def dispose
  467.     super
  468.     face_sprite_dispose
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # ○ 关闭脸图形
  472.   #--------------------------------------------------------------------------
  473.   def close
  474.     super
  475.     face_sprite_dispose
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ● 更新光标
  479.   #--------------------------------------------------------------------------
  480.   def update_cursor
  481.     if @index < 0                   # 光标位置小于0
  482.       self.cursor_rect.empty        # 禁用光标
  483.     else                            # 如果光标位置大于0
  484.       row = @index / @column_max    # 就获取当前行
  485.       if row < top_row              # 第一行被显示之前(这个和下面那个都不懂啊)
  486.         self.top_row = row          # 显示目前的第一行
  487.       end
  488.       if row > bottom_row           # 对于后面的最后一排更不被显示
  489.         self.bottom_row = row       # 滚动到末尾,使当前行隐藏
  490.       end
  491.       x = $game_message.face_name.empty? ? 0 : 112
  492.       y = ($game_message.choice_start + @index) * WLH
  493.       y -= self.oy
  494.       self.cursor_rect.set(x, y, contents.width - x, WLH)
  495.     end
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ◎ 发送输入处理
  499.   #--------------------------------------------------------------------------
  500.   alias tig_ec_input_pause input_pause
  501.   def input_pause
  502.     if $game_message.cancel_input
  503.       if Input.trigger?(Input::B)
  504.         Sound.play_cancel
  505.         $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = 0
  506.       elsif Input.trigger?(Input::C)
  507.         Sound.play_decision
  508.         $game_variables[Expansion_Choices::CHOICE_RESUIT_VARIABLES] = -1
  509.       end
  510.     end
  511.     tig_ec_input_pause
  512.   end
  513. end

  514. #==============================================================================
  515. # □ Window_Choice
  516. #------------------------------------------------------------------------------
  517. #  窗口显示其他选择
  518. #==============================================================================

  519. class Window_Choice < Window_Selectable
  520.   #--------------------------------------------------------------------------
  521.   # ○ 公共实例变量
  522.   #--------------------------------------------------------------------------
  523.   attr_reader   :choice
  524.   attr_reader   :window_row_max
  525.   attr_accessor :delay
  526.   #--------------------------------------------------------------------------
  527.   # ○ 对象初始化
  528.   #--------------------------------------------------------------------------
  529.   def initialize
  530.     super(0, 0, 64, 64)
  531.     @column_max = 1
  532.     @spacing = 16
  533.     @delay = 0
  534.     create_help_window
  535.     create_gold_window
  536.   end
  537.   #--------------------------------------------------------------------------
  538.   # ○ 获取窗口类型
  539.   #--------------------------------------------------------------------------
  540.   def window_type
  541.     return -1 if @choice == nil
  542.     return @choice.window_type
  543.   end
  544.   #--------------------------------------------------------------------------
  545.   # ○  设置窗口
  546.   #--------------------------------------------------------------------------
  547.   def setting(choice)
  548.     @choice = choice
  549.     @item_max = @choice.size
  550.     case @choice.window_type
  551.     when -1 # 使用的坐标定位选项
  552.       @window_row_max = 9
  553.       set_column_max
  554.       self.width = choise_width
  555.       self.height = choise_height
  556.       self.x = 288
  557.       self.y = center_y(144)
  558.     when 0 #  为窗口的位置定义(不清楚)
  559.       @window_row_max = 4
  560.       set_column_max
  561.       self.width = 544
  562.       self.height = 128
  563.       self.x = 0
  564.       case $game_message.position
  565.       when 0 ; self.y = 288 # 上
  566.       when 1 ; self.y = 288 # 真ん中
  567.       when 2 ; self.y = 0   # 下
  568.       end
  569.     when 1 #  当1号的消息窗口向上或向下时,选择适当的位置
  570.       @window_row_max = 4
  571.       set_column_max
  572.       self.width = choise_width
  573.       self.height = choise_height
  574.       self.x = align_right_x(480)
  575.       self.y = center_y(208)
  576.     when 2 # 帮助窗口,并为稍低的位置选择合适的位置
  577.       @window_row_max = 7
  578.       set_column_max
  579.       self.width = choise_width
  580.       self.height = choise_height
  581.       self.x = align_right_x(480)
  582.       self.y = center_y(172)
  583.     when 3 #  中心窗口的位置
  584.       @window_row_max = 4
  585.       set_column_max
  586.       self.width = choise_width
  587.       self.height = choise_height
  588.       self.x = center_x(272)
  589.       self.y = center_y(208)
  590.     when 4 # 使用金币的帮助下显示位置位于商店
  591.       @window_row_max = 7
  592.       set_column_max
  593.       self.width = choise_width
  594.       self.height = choise_height
  595.       self.x = 50
  596.       self.y = center_y(172)
  597.     end
  598.     self.index = 0
  599.     refresh
  600.   end
  601.   #--------------------------------------------------------------------------
  602.   # ○ 坐标和位置 (不清楚啊)
  603.   #--------------------------------------------------------------------------
  604.   def set_column_max
  605.     if @choice.column
  606.       @column_max = @choice.size / @window_row_max
  607.       @column_max += 1 if @choice.size % @window_row_max != 0
  608.     else
  609.       @column_max = 1
  610.     end
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # ○ 获得整个选择窗口
  614.   #--------------------------------------------------------------------------
  615.   def choise_width
  616.     size = 32
  617.     for i in @choice.choices
  618.       size = [size, self.contents.text_size(i).width].max + 1
  619.     end
  620.     unless @choice.icon.empty?     # 如果图标显示范围太长就延长(好像是这样的)
  621.       size += 24
  622.     end
  623.     unless @choice.price.empty?    #  如果价格显示太长就延长(一样)
  624.       size += 80
  625.       cx = contents.text_size(Vocab::gold).width
  626.       size += cx if contents.text_size(Vocab::gold).width <= 36
  627.     end
  628.     size *= @column_max
  629.     unless @choice.face_name == "" # 如果宽度显示短,并延伸宽度
  630.       size += 112
  631.     end
  632.     return size + (@spacing * (@column_max - 1)) + 32 + 1
  633.   end
  634.   #--------------------------------------------------------------------------
  635.   # ○ 根据选择获取窗口的高度
  636.   #--------------------------------------------------------------------------
  637.   def choise_height
  638.     row = row_max
  639.     row += @choice.pick_up.size if @choice.pick_up
  640.     height = row * WLH
  641.     unless @choice.face_name == ""
  642.       height = [96, height].max
  643.     end
  644.     max_height = @window_row_max * WLH
  645.     return [height, max_height].min + 32
  646.   end
  647.   #--------------------------------------------------------------------------
  648.   # ○ 中心窗口  X坐标(中心)
  649.   #--------------------------------------------------------------------------
  650.   def center_x(x)
  651.     return x - self.width / 2
  652.   end
  653.   #--------------------------------------------------------------------------
  654.   # ○ 得到完成窗口和窗口时的终点  X坐标(右对齐)
  655.   #--------------------------------------------------------------------------
  656.   def align_right_x(x)
  657.     return x - self.width
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # ○ 中心窗口  Y坐标(中心)
  661.   #--------------------------------------------------------------------------
  662.   def center_y(y)
  663.     return y - self.height / 2
  664.   end
  665.   #--------------------------------------------------------------------------
  666.   # ○ 得到完窗成口和窗口时的终点  Y坐标(下)
  667.   #--------------------------------------------------------------------------
  668.   def align_bottom_y(y)
  669.     return y - self.height
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ○ 创建一个帮助窗口
  673.   #--------------------------------------------------------------------------
  674.   def create_help_window
  675.     @help_window = Window_Help.new
  676.     @help_window.visible = false
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ○ 创建一个所持金币窗口
  680.   #--------------------------------------------------------------------------
  681.   def create_gold_window
  682.     @gold_window = Window_Gold.new(384, 0)
  683.     @gold_window.visible = false
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ○ 打开窗口
  687.   #--------------------------------------------------------------------------
  688.   def dispose
  689.     super
  690.     face_sprite_dispose
  691.     dispose_gold_window
  692.     dispose_gold_window
  693.   end
  694.   #--------------------------------------------------------------------------
  695.   # ○ 帮助的窗口释放
  696.   #--------------------------------------------------------------------------
  697.   def dispose_help_window
  698.     @help_window.dispose
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # ○ 所持金币窗口的释放
  702.   #--------------------------------------------------------------------------
  703.   def dispose_gold_window
  704.     @gold_window.dispose
  705.   end
  706.   #--------------------------------------------------------------------------
  707.   # ○ 刷新窗口
  708.   #--------------------------------------------------------------------------
  709.   def refresh
  710.     @item_max = @choice.size
  711.     create_contents
  712.     return if @choice.nil?
  713.     unless @choice.face_name == ""               # 人脸图形
  714.       draw_face_sprite(@choice.face_name, @choice.face_index, @choice.re_face)
  715.     end
  716.     for i in 0...@item_max
  717.       draw_item(i)
  718.     end
  719.     @index = [@index, @item_max - 1].min
  720.     unless @index < 0
  721.       self.bottom_row = [@index / @column_max, self.bottom_row].min  
  722.     end
  723.   end
  724.   #--------------------------------------------------------------------------
  725.   # ○  获取项目窗口
  726.   #      index : 项目编号
  727.   #--------------------------------------------------------------------------
  728.   def item_rect(index)
  729.     rect = Rect.new(0, 0, 0, 0)
  730.     width = contents.width
  731.     width -= 112 if @choice.face_name != ""
  732.     rect.width = (width + @spacing) / @column_max - @spacing
  733.     rect.height = WLH
  734.     rect.x = index % @column_max * (rect.width + @spacing)
  735.     rect.x += 112 if @choice.face_name != "" and not @choice.re_face
  736.     rect.y = index / @column_max * WLH
  737.     return rect
  738.   end
  739.   #--------------------------------------------------------------------------
  740.   # ○ 窗口(或者是选择,不确定)描绘
  741.   #--------------------------------------------------------------------------
  742.   def draw_item(index)
  743.     rect = item_rect(index)
  744.     self.contents.clear_rect(rect)
  745.     if @choice.icon[@choice.display_item_index[index]]           # 加上图标
  746.       draw_icon(@choice.icon[@choice.display_item_index[index]], rect.x, rect.y, enabled(index))
  747.     end
  748.     unless @choice.icon.empty?
  749.       rect.x += 24
  750.       rect.width -= 24
  751.     end
  752.     self.contents.font.color = normal_color
  753.     self.contents.font.color.alpha = enabled(index) ? 255 : 128
  754.     self.contents.draw_text(rect, @choice.item[index])
  755.     if @choice.price[@choice.display_item_index[index]]          # 查看价格值
  756.       value = @choice.price[@choice.display_item_index[index]]
  757.       rect.width -= 4
  758.       cx = contents.text_size(Vocab::gold).width
  759.       if cx <= 36            # 短时期显示货币,你隐藏窗口长时间(不确定)
  760.         self.contents.font.color = system_color
  761.         self.contents.font.color.alpha = enabled(index) ? 255 : 128
  762.         self.contents.draw_text(rect, Vocab::gold, 2)
  763.         rect.width -= ( cx + 2 )
  764.       end
  765.       self.contents.font.color = normal_color
  766.       self.contents.font.color.alpha = enabled(index) ? 255 : 128
  767.       self.contents.draw_text(rect, value, 2)
  768.     end
  769.   end
  770.   #--------------------------------------------------------------------------
  771.   # ○ 描画工作面图形(精灵)
  772. #     face_name  : 图形文件名称
  773. #     face_index : 图形对应参数
  774. #     size       : 查看尺寸
  775.   #--------------------------------------------------------------------------
  776.   def draw_face_sprite(face_name, face_index, re_fase, size = 96)
  777.    
  778.     rect = Rect.new(0, 0, 0, 0)
  779.     rect.x = face_index % 4 * 96 + (96 - size) / 2
  780.     rect.y = face_index / 4 * 96 + (96 - size) / 2
  781.     rect.width = size
  782.     rect.height = size
  783.     @face_sprite = Sprite.new
  784.     @face_sprite.bitmap = Cache.face(face_name)
  785.     @face_sprite.src_rect = rect
  786.     @face_sprite.z = 200
  787.     if re_fase
  788.       @face_sprite.x = self.x + self.width - size - 16
  789.       @face_sprite.mirror = true
  790.     else
  791.       @face_sprite.x = self.x + 16
  792.     end
  793.     @face_sprite.y = self.y + 16
  794.   end
  795.   #--------------------------------------------------------------------------
  796.   # ○ 开放脸图形(精灵)
  797.   #--------------------------------------------------------------------------
  798.   def face_sprite_dispose
  799.     unless @face_sprite.nil?
  800.       @face_sprite.dispose unless @face_sprite.disposed?
  801.     end
  802.   end
  803.   #--------------------------------------------------------------------------
  804.   # ○启用编号标志
  805.   #--------------------------------------------------------------------------
  806.   def enabled(index)
  807.     return false if @choice.can_not_select_active.include?(index)
  808.     if @choice.price[@choice.display_item_index[index]]
  809.       if @choice.price[@choice.display_item_index[index]] > $game_party.gold
  810.         return false
  811.       end
  812.     end
  813.     return true
  814.   end
  815.   #--------------------------------------------------------------------------
  816.   # ○ 窗口更新
  817.   #--------------------------------------------------------------------------
  818.   def update
  819.     super
  820.     @delay -= 1 unless @delay == 0
  821.     @help_window.update
  822.     @gold_window.update
  823.     unless @face_sprite.nil?
  824.       @face_sprite.visible = self.openness == 255 unless @face_sprite.disposed?
  825.     end
  826.   end
  827.   #--------------------------------------------------------------------------
  828.   # ○ 打开一个窗口
  829.   #--------------------------------------------------------------------------
  830.   def open
  831.     super
  832.     return unless @opening
  833.     if $game_message.show_ex_choices.help_text != []
  834.       @help_window.visible = true
  835.     end
  836.     unless @choice.price.empty?
  837.       @gold_window.y = $game_message.show_ex_choices.help_text.empty? ? 0 : 56
  838.       @gold_window.refresh
  839.       @gold_window.visible = true
  840.     end
  841.     @delay = Expansion_Choices::EX_CHOICES_DELAY  #延迟的时间(不确定)
  842.   end
  843.   #--------------------------------------------------------------------------
  844.   # ○ 关闭窗口
  845.   #--------------------------------------------------------------------------
  846.   def close
  847.     super
  848.     return unless @closing
  849.     face_sprite_dispose
  850.     @help_window.visible = false
  851.     @gold_window.visible = false
  852.   end
  853.   #--------------------------------------------------------------------------
  854.   # ○ 说明文字更新
  855.   #--------------------------------------------------------------------------
  856.   def update_help
  857.     return if @choice.nil?
  858.     if @choice.display_item_index[@index].nil?
  859.       @help_window.set_text("")
  860.     else
  861.       text = @choice.help_text[@choice.display_item_index[@index]]
  862.       @help_window.set_text(text.nil? ? "" : text)
  863.     end
  864.   end
  865. end

  866. #==============================================================================
  867. # □ Window_Pickup
  868. #------------------------------------------------------------------------------
  869. # 对于您所选择的选项处理窗口。
  870. #==============================================================================

  871. class Window_Pickup < Window_Selectable
  872.   #--------------------------------------------------------------------------
  873.   # ○ 对象初始化
  874.   #--------------------------------------------------------------------------
  875.   def initialize(choice_window)
  876.     @choice_window = choice_window
  877.     super(0, 0, 64, 64)
  878.   end
  879.   #--------------------------------------------------------------------------
  880.   # ○ 刷新窗口
  881.   #--------------------------------------------------------------------------
  882.   def refresh
  883.     self.x = @choice_window.x - @choice_window.width - 32
  884.     self.y = @choice_window.y
  885.     self.width = @choice_window.width
  886.     self.height = @choice_window.height
  887.     create_contents
  888.     return if @choice_window.choice.nil?
  889.     return if @choice_window.choice.pick_up.nil?
  890.     self.visible = true
  891.     @item_max = [@choice_window.choice.pick_up.size, @choice_window.window_row_max].min
  892.     y = 0
  893.     ([@choice_window.choice.pick_up.size - @item_max, 0].max).upto(@choice_window.choice.pick_up.size) do |i|
  894.       draw_item(i, y)
  895.       y += 1
  896.     end
  897.   end
  898.   #--------------------------------------------------------------------------
  899.   # ○ 項目的描绘
  900.   #--------------------------------------------------------------------------
  901.   def draw_item(index, y)
  902.     return if @choice_window.choice.pick_up[index].nil?
  903.     rect = item_rect(y)
  904.     self.contents.clear_rect(rect)
  905.     self.contents.font.color = normal_color
  906.     self.contents.draw_text(rect, @choice_window.choice.choices[@choice_window.choice.pick_up[index]])
  907.   end
  908. end
复制代码

作者: SVM伟    时间: 2010-9-7 20:45
本帖最后由 SVM伟 于 2010-9-7 20:51 编辑

那个,不小心把这个给翻译的了

丫丫啊,脚本786行出错了,MS错在Temp上,呼唤脚本帝
  1. =begin


  2. ●对用户脚本资料

  3. *当使用该脚本,并在互联网上发布,
  4. 在这个位置创建一个新的部分,粘贴。
  5. (弹出菜单左侧列表框“插入”选择。)

  6. (上面这句话就是说没有空的就右键插入新建一个)

  7. *此外,如果您有特殊的制作材料的说明,请遵守规则。

  8. *作为一个规则RPG游戏制作的XP的脚本,是不是兼容,
  9. RPG MAKER VX的请测试来验证该脚本。


  10. ●脚本和脚本制作者

  11. *当开发者为用户提供一个脚本来脚本不兼容(貌似是这样的),
  12. 尽可能使用其他名称或重新定义,只贴上这一立场(前面这句话不清楚)
  13. 我们建议您调整工作。


  14. =end
复制代码

作者: 企鹅达达    时间: 2010-9-7 21:23
回复 SVM伟 的帖子
好长啊~~~
果然以我的脚本水平还是要看着范例慢慢研究才行……先拿走参考参考,伟哥多谢啦
   
作者: SVM伟    时间: 2010-9-8 18:17
本帖最后由 SVM伟 于 2010-9-8 18:33 编辑

为什么!谷歌翻译会把加号什么的去掉,让我在重新调整一下

郁闷啊。。。大家要将我这个加上原件互相修改。。。
作者: 企鹅达达    时间: 2010-9-11 09:07
恩,看来是没人翻译范例了,也好,大家一边熟悉设置一边翻译好了……
作者: aike    时间: 2011-8-3 19:04
提示: 作者被禁止或删除 内容自动屏蔽




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