设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 955|回复: 0
打印 上一主题 下一主题

[已经过期] 角色离队时,副将自动卸下来

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
跳转到指定楼层
1
发表于 2022-4-7 19:49:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 fjm 于 2022-4-7 19:55 编辑

角色离队时,副将有时候忘记卸下来,就没有了,问下怎样让角色离队时,副将自动解除,卸下来,谢谢


RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-38 精霊システム [Ver.1.0.0]             by Claimh
  3. #------------------------------------------------------------------------------
  4. # ・アクターごとに精霊をパートナーにすることができます。
  5. # ・パートナーになるとパラメータ上昇、スキル習得など
  6. #   (パートナーのパラメータ、特徴が加算されます)
  7. # ・精霊はパートナーになっている状態で戦闘に参加することでレベルが上昇します
  8. # ・精霊のデータはデータベース上のアクターとして作成してください。
  9. #------------------------------------------------------------------------------
  10. # ☆精霊加入
  11. #  $game_party.add_spirit(精霊ID)
  12. # ☆精霊脱退
  13. #  $game_party.del_spirit(精霊ID)
  14. # ☆精霊パートナー化
  15. #  Spirits.add_partner(アクターID, 精霊ID)
  16. # ☆精霊パートナー解消
  17. #  Spirits.remove_partner(アクターID, 精霊ID)
  18. # ☆精霊パートナー最大数変更
  19. #  $game_actors[アクターID].max_spirits = n
  20. #==============================================================================
  21.  
  22. module Spirits
  23.   AFNTY=[{0=>3}]; MAX=[1] # 変更禁止
  24. ### 精霊設定 ##################################################################
  25.   # 精霊 ※精霊ID:0 は使用禁止
  26.   SPIRIT_ACTOR = {
  27.   # 精霊ID => アクターID
  28.     1  => 300,
  29.     2  => 301,
  30.     3  => 302,
  31.     4  => 303,
  32.     5  => 304,
  33.     6  => 305,
  34.     7  => 306,
  35.     8  => 307,
  36.     9  => 308,
  37.     10  => 309,
  38.     11  => 310,
  39.     12  => 311,
  40.     13  => 312,
  41.     14  => 313,
  42.     15  => 314,
  43.     16  => 315,
  44.     17  => 316,
  45.     18  => 317,
  46.     19  => 318,
  47.     20  => 319,
  48.     21  => 320,
  49.     22  => 321,
  50.     23  => 322,
  51.     24  => 323,
  52.     25  => 324,
  53.  
  54.     }
  55.  
  56.  
  57. ### 初期状態設定 ##############################################################
  58.   # 初期状態で加入している精霊
  59.   # START_V = [精霊ID, …]
  60.   START_V = [1]
  61.  
  62.   # 初期状態のパートナー
  63.   #  (注) 初期メンバーおよび初期精霊以外は設定不可
  64.   # START_P = {アクターID => 精霊ID, …}
  65.   START_P = {1=>12}#{4=>1}  #{1=>3, 2=>4, 3=>2, 4=>1}
  66.  
  67.  
  68. ### パートナー数設定 ##########################################################
  69.   # 最大パートナー数(初期値)
  70.   # MAX[アクターID] = 最大数
  71.   MAX[1] = 1
  72.   MAX[2] = 1
  73.   MAX[3] = 1
  74.   MAX[4] = 1
  75.   MAX[5] = 3
  76.   MAX[6] = 3
  77.   MAX[7] = 3
  78.   MAX[8] = 3
  79.   MAX[9] = 3
  80.   MAX[10] = 3
  81.   MAX[11] = 3
  82.   MAX[12] = 3
  83.   MAX[13] = 3
  84.   MAX[14] = 3
  85.   MAX[15] = 3
  86.   MAX[16] = 3
  87.   MAX[17] = 3
  88.   MAX[18] = 3
  89.   MAX[19] = 1
  90.   MAX[20] = 1
  91.   MAX[21] = 1
  92.   MAX[22] = 1
  93.   MAX[23] = 1
  94.   MAX[24] = 1
  95.   MAX[25] = 1
  96.   MAX[26] = 1
  97.   MAX[27] = 1
  98.   MAX[28] = 1
  99.   MAX[29] = 1
  100.   MAX[30] = 1
  101.   MAX[31] = 1
  102.   MAX[32] = 1
  103.   MAX[33] = 1
  104.   MAX[34] = 1
  105.   MAX[35] = 1
  106.   MAX[36] = 1
  107.   MAX[37] = 1
  108.   MAX[38] = 1
  109.   MAX[39] = 1
  110.   MAX[40] = 1
  111.   MAX[41] = 1
  112.   MAX[42] = 1
  113.   MAX[43] = 1
  114.   MAX[44] = 1
  115.   MAX[45] = 1
  116.   MAX[46] = 1
  117.   MAX[47] = 1
  118.   MAX[48] = 1
  119.   MAX[49] = 1
  120.   MAX[50] = 1
  121.   MAX[51] = 1
  122.   MAX[52] = 1
  123.   MAX[53] = 1
  124.   MAX[54] = 1
  125.   MAX[55] = 1
  126.   MAX[56] = 1
  127.   MAX[57] = 1
  128.   MAX[58] = 1
  129.   MAX[59] = 1
  130.   MAX[60] = 1
  131.   MAX[61] = 1
  132.   MAX[62] = 1
  133.   MAX[63] = 1
  134.   MAX[64] = 1
  135.   MAX[65] = 1
  136.   MAX[66] = 1
  137.   MAX[67] = 1
  138.   MAX[68] = 1
  139.   MAX[69] = 1
  140.   MAX[70] = 1
  141.   MAX[71] = 1
  142.   MAX[72] = 1
  143.   MAX[73] = 1
  144.   MAX[74] = 1
  145.   MAX[75] = 1
  146.   MAX[76] = 1
  147.   MAX[77] = 1
  148.   MAX[78] = 1
  149.   MAX[79] = 1
  150.   MAX[80] = 1
  151.   MAX[81] = 1
  152.   MAX[82] = 1
  153.   MAX[83] = 1
  154.   MAX[84] = 1
  155.   MAX[85] = 1
  156.   MAX[86] = 1
  157.   MAX[87] = 1
  158.   MAX[88] = 1
  159.   MAX[89] = 1
  160.   MAX[90] = 1
  161.   MAX[91] = 1
  162.   MAX[92] = 1
  163.   MAX[93] = 1
  164.   MAX[94] = 1
  165.   MAX[95] = 1
  166.   MAX[96] = 1
  167.   MAX[97] = 1
  168.   MAX[98] = 1
  169.   MAX[99] = 1
  170.   MAX[100] = 1
  171.   MAX[101] = 1
  172.   MAX[102] = 1
  173.   MAX[103] = 1
  174.   MAX[104] = 1
  175.   MAX[105] = 1
  176.   MAX[106] = 1
  177.   MAX[107] = 1
  178.   MAX[108] = 1
  179.   MAX[109] = 1
  180.   MAX[110] = 1
  181.   MAX[111] = 1
  182.   MAX[112] = 1
  183.   MAX[113] = 1
  184.   MAX[114] = 1
  185.   MAX[115] = 1
  186.   MAX[116] = 1
  187.   MAX[117] = 1
  188.   MAX[118] = 1
  189.   MAX[119] = 1
  190.   MAX[120] = 1
  191.   MAX[121] = 1
  192.   MAX[122] = 1
  193.   MAX[123] = 1
  194.   MAX[124] = 1
  195.   MAX[125] = 1
  196.   MAX[126] = 1
  197.   MAX[127] = 1
  198.   MAX[128] = 1
  199.   MAX[129] = 1
  200.   MAX[130] = 1
  201.   MAX[131] = 1
  202.   MAX[132] = 1
  203.   MAX[133] = 1
  204.   MAX[134] = 1
  205.   MAX[135] = 1
  206.   MAX[136] = 1
  207.   MAX[137] = 1
  208.   MAX[138] = 1
  209.   MAX[139] = 1
  210.   MAX[140] = 1
  211.   MAX[141] = 1
  212.   MAX[142] = 1
  213.   MAX[143] = 1
  214.   MAX[144] = 1
  215.   MAX[145] = 1
  216.   MAX[146] = 1
  217.   MAX[147] = 1
  218.   MAX[148] = 1
  219.   MAX[149] = 1
  220.   MAX[150] = 1
  221.   MAX[151] = 3
  222.   MAX[152] = 3
  223.   MAX[153] = 3
  224.   MAX[154] = 3
  225.   MAX[155] = 3
  226.   MAX[156] = 3
  227.   MAX[157] = 3
  228.   MAX[158] = 3
  229.   MAX[159] = 3
  230.   MAX[160] = 3
  231.   MAX[161] = 3
  232.   MAX[162] = 3
  233.   MAX[163] = 3
  234.   MAX[164] = 3
  235.   MAX[165] = 3
  236.   MAX[166] = 3
  237.   MAX[167] = 3
  238.   MAX[168] = 3
  239.   MAX[169] = 3
  240.   MAX[170] = 3
  241.   MAX[171] = 3
  242.   MAX[172] = 3
  243.   MAX[173] = 3
  244.   MAX[174] = 3
  245.   MAX[175] = 3
  246.   MAX[176] = 3
  247.   MAX[177] = 3
  248.   MAX[178] = 3
  249.   MAX[179] = 3
  250.   MAX[180] = 3
  251.   MAX[181] = 3
  252.   MAX[182] = 3
  253.   MAX[183] = 3
  254.   MAX[184] = 3
  255.   MAX[185] = 3
  256.   MAX[186] = 3
  257.   MAX[187] = 3
  258.   MAX[188] = 3
  259.   MAX[189] = 3
  260.   MAX[190] = 3
  261.   MAX[191] = 3
  262.   MAX[192] = 3
  263.   MAX[193] = 3
  264.   MAX[194] = 3
  265.   MAX[195] = 3
  266.   MAX[196] = 3
  267.   MAX[197] = 3
  268.   MAX[198] = 3
  269.   MAX[199] = 3
  270.   MAX[200] = 3
  271.   MAX[201] = 3
  272.   MAX[202] = 3
  273.   MAX[203] = 3
  274.   MAX[204] = 3
  275.   MAX[205] = 3
  276.   MAX[206] = 3
  277.   MAX[207] = 3
  278.   MAX[208] = 3
  279.   MAX[209] = 3
  280.   MAX[210] = 3
  281.   MAX[211] = 3
  282.   MAX[212] = 3
  283.   MAX[213] = 3
  284.   MAX[214] = 3
  285.   MAX[215] = 3
  286.   MAX[216] = 3
  287.   MAX[217] = 3
  288.   MAX[218] = 3
  289.   MAX[219] = 3
  290.   MAX[220] = 3
  291.   MAX[221] = 3
  292.   MAX[222] = 3
  293.   MAX[223] = 3
  294.   MAX[224] = 3
  295.   MAX[225] = 3
  296.   MAX[226] = 3
  297.   MAX[227] = 3
  298.   MAX[228] = 3
  299.   MAX[229] = 3
  300.   MAX[230] = 3
  301.   MAX[231] = 3
  302.   MAX[232] = 3
  303.   MAX[233] = 3
  304.   MAX[234] = 3
  305.   MAX[235] = 3
  306.   MAX[236] = 3
  307.   MAX[237] = 3
  308.   MAX[238] = 3
  309.   MAX[239] = 3
  310.   MAX[240] = 3
  311.   MAX[241] = 3
  312.   MAX[242] = 3
  313.   MAX[243] = 3
  314.   MAX[244] = 3
  315.   MAX[245] = 3
  316.   MAX[246] = 3
  317.   MAX[247] = 3
  318.   MAX[248] = 3
  319.   MAX[249] = 3
  320.   MAX[250] = 3
  321.   MAX[251] = 3
  322.   MAX[252] = 3
  323.   MAX[253] = 3
  324.   MAX[254] = 3
  325.   MAX[255] = 3
  326.   MAX[256] = 3
  327.   MAX[257] = 3
  328.   MAX[258] = 3
  329.   MAX[259] = 3
  330.   MAX[260] = 3
  331.  
  332.  
  333. ### 相性設定 ##################################################################
  334.   # 5段階で各アクターと各精霊の相性を設定できます。
  335.   #---------------------------------------------------
  336.   #   5   : 非常に良い(能力上昇:1.5倍)
  337.   #   4   : やや良い  (能力上昇:1.2倍)
  338.   #   3   : 普通      (能力上昇:1.0倍)
  339.   #   2   : やや悪い  (能力上昇:0.8倍)
  340.   #   1   : 非常に悪い(能力上昇:0.5倍)
  341.   #   0   : パートナーにできない
  342.   #---------------------------------------------------
  343.   # [アクターID] = {精霊ID=>相性, …}
  344.   #AFNTY[1] = {1=>3, 2=>2, 3=>5, 4=>1}
  345.   #AFNTY[2] = {1=>3, 2=>3, 3=>1, 4=>5}
  346.   #AFNTY[3] = {1=>1, 2=>5, 3=>3, 4=>4}
  347. #AFNTY[4] = {1=>5, 2=>1, 3=>3, 4=>4}
  348. # AFNTY[8] = {0=>0} # 全ての精霊をパートナーにできない
  349.  
  350.  
  351. ### 精霊レベル設定 ############################################################
  352.   # レベル上昇あり
  353.   USE_LV = true
  354.  
  355.   # 経験値入手対象
  356.   #   0 : 戦闘メンバーのパートナーとなっている精霊のみ
  357.   #   1 : 全メンバーのパートナーとなっている精霊のみ
  358.   #   2 : 全精霊
  359.   EXP_TARGET = 2
  360.  
  361.   # 経験値入出種別
  362.   #   0 : 戦闘回数でLvUP
  363.   #   1 : アクターと同じEXP
  364.   EXP_TYPE = 1
  365.  
  366.  
  367. ### 閾値設定 ##################################################################
  368.   # 各能力の閾値設定
  369.   #   追加パラメータ = データベース上のパラメータ - PRM_BASE
  370.   PRM_BASE = [
  371.     0,   # 最大HP
  372.     0,   # 最大MP
  373.     0,    # 攻撃力
  374.     0,    # 防御力
  375.     0,    # 魔法力
  376.     0,    # 魔法防御
  377.     0,    # 敏捷性
  378.     0     # 運
  379.   ]
  380.  
  381.  
  382. ### ステータス画面表示設定 ####################################################
  383.   # 特徴ステータス表示と表示順序(上から順)
  384.   STS = {
  385.     :status => true,   # ステータス表示(LVあり用)
  386.     :stskl  => true,  # ステータス表示(LVなし用)
  387.     :skills => true,   # 習得スキル
  388.     :feater => true   # 特徴
  389.   }
  390.  
  391.  
  392. ### 入替え画面表示設定 ########################################################
  393.   # 特徴ステータス表示と表示順序(上から順)
  394.   SHOW_ST = {
  395.     :text   => false,  # 解説
  396.     :status => true,   # 能力パラメータ
  397.     :skills => true,   # 習得スキル
  398.     :rate   => false,  # 耐性(属性有効度, 弱体有効度, ステート有効度, ステート無効化)
  399.     :param  => false,#false,     # 能力値(通常. 追加, 特殊)
  400.     :attack => false,  # 攻撃(属性、ステート, 速度補正, 追加回数)
  401.     :skill  => false,  # スキル(タイプ追加・封印, 追加・封印)
  402.     :equip  => false,  # 装備(武器タイプ, 防具タイプ, 固定, 封印, スロットタイプ)
  403.     :other  => false   # その他(行動回数追加, 特殊フラグ, パーティ能力)
  404.   }
  405.  
  406.   # スキル表示時の列数(1-2)
  407.   SKILL_NUM = 2
  408.  
  409. end




RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-38 精霊システム <入替画面>             by Claimh
  3. #==============================================================================
  4.  
  5. #==============================================================================
  6. # ■ Window_MenuCommand
  7. #==============================================================================
  8. class Window_MenuCommand < Window_Command
  9.   #--------------------------------------------------------------------------
  10.   # ● 独自コマンドの追加用
  11.   #--------------------------------------------------------------------------
  12.   alias add_original_commands_partner add_original_commands
  13.   def add_original_commands
  14.     add_original_commands_partner
  15.     add_command("部下", :partner, partner_enable?) # if $game_switches[1]
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● コマンド追加?[パートナー設定]
  19.   #--------------------------------------------------------------------------
  20.   def add_spirits?
  21.     $game_party.members.size > 0 and $game_party.spirit_num > 0 #and $game_switches[1]
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● コマンド可能?[パートナー設定]
  25.   #--------------------------------------------------------------------------
  26.   def partner_enable?
  27.     $game_party.spirit_num > 0 # and $game_switches[1]
  28.   end
  29. end
  30.  
  31. #==============================================================================
  32. # ■ Scene_Menu
  33. #==============================================================================
  34. class Scene_Menu < Scene_MenuBase
  35.   #--------------------------------------------------------------------------
  36.   # ● コマンドウィンドウの作成
  37.   #--------------------------------------------------------------------------
  38.   alias create_command_window_partner create_command_window
  39.   def create_command_window
  40.     create_command_window_partner
  41.     @command_window.set_handler(:partner, method(:command_personal))
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● コマンド[パートナー設定]
  45.   #--------------------------------------------------------------------------
  46.   def command_partner
  47.     SceneManager.call(Scene_EditPartner)
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 個人コマンド[決定]
  51.   #--------------------------------------------------------------------------
  52.   alias on_personal_ok_partner on_personal_ok
  53.   def on_personal_ok
  54.     if @command_window.current_symbol == :partner
  55.       command_partner
  56.     else
  57.       on_personal_ok_partner
  58.     end
  59.   end
  60. end
  61.  
  62.  
  63.  
  64. #==============================================================================
  65. # ■ Window_SptActor
  66. #==============================================================================
  67. class Window_SptActor < Window_Base
  68.   attr_accessor :index   # 入れ替え対象index
  69.   #--------------------------------------------------------------------------
  70.   # ● オブジェクト初期化
  71.   #--------------------------------------------------------------------------
  72.   def initialize(actor)
  73.     @actor  = actor
  74.     @spirit = nil
  75.     @index  = 0
  76.     @diff_on = false
  77.     super(0, 0, Graphics.width, fitting_height(9))
  78.     refresh
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 描画エリア
  82.   #--------------------------------------------------------------------------
  83.   def redraw_area
  84.     Rect.new(100, line_height, 150, contents.height - line_height)
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 差分描画on/off
  88.   #--------------------------------------------------------------------------
  89.   def diff_on
  90.     @diff_on = true
  91.     part_refresh
  92.   end
  93.   def diff_off
  94.     @diff_on = false
  95.     @spirit = nil
  96.     part_refresh
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● アクター設定
  100.   #--------------------------------------------------------------------------
  101.   def actor=(a)
  102.     return if @actor == a
  103.     @actor = a
  104.     @spirit = nil
  105.     refresh
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 精霊設定
  109.   #--------------------------------------------------------------------------
  110.   def spirit=(s)
  111.     return if @spirit == s
  112.     @spirit = s
  113.     part_refresh
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● リフレッシュ
  117.   #--------------------------------------------------------------------------
  118.   def refresh
  119.     contents.clear
  120.     return if @actor.nil?
  121.     draw_actor_name(@actor, 0, 0)
  122.     draw_actor_face(@actor, 140, 0)
  123.     draw_status_vocab
  124.     part_refresh(false)
  125.     change_color(system_color)
  126.     draw_text(contents_width - 200, 0, 200, line_height, "部下")
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● リフレッシュ
  130.   #--------------------------------------------------------------------------
  131.   def part_refresh(clear=true)
  132.     contents.fill_rect(redraw_area, Color.new(0,0,0,0)) if clear
  133.     return if @actor.nil?
  134.     draw_actor_status
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 顔グラフィックの描画
  138.   #     enabled : 有効フラグ。false のとき半透明で描画
  139.   #--------------------------------------------------------------------------
  140.   def draw_face(face_name, face_index, x, y, enabled = true)
  141.     bitmap = Cache.face(face_name)
  142.     h = line_height
  143.     hh = (96 - h) / 2
  144.     rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96 + hh, 96, h)
  145.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  146.     bitmap.dispose
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● ステータス描画
  150.   #--------------------------------------------------------------------------
  151.   def draw_status_vocab
  152.     8.times do |i|
  153.       draw_param_vocab(20, i * line_height + line_height, i)
  154.     end
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● パラメータVcab描画
  158.   #--------------------------------------------------------------------------
  159.   def draw_param_vocab(x, y, param_id)
  160.     change_color(system_color)
  161.     draw_text(x, y, 120, line_height, Vocab::param(param_id))
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● ステータス描画
  165.   #--------------------------------------------------------------------------
  166.   def draw_actor_status
  167.     8.times do |i|
  168.       draw_actor_param(@actor, @spirit, 10, i * line_height + line_height, i, 300)
  169.     end
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● パラメータ描画
  173.   #--------------------------------------------------------------------------
  174.   def draw_actor_param(actor, spirit, x, y, param_id, width)
  175.     now = actor.param(param_id)
  176.     change_color(normal_color)
  177.     draw_text(x+90, y, 60, line_height, now, 2)
  178.     return if !@diff_on or (spirit.nil? and @actor.partners[@index].nil?)
  179.     # 差分描画
  180.     draw_actor_new_param(actor, spirit, x, y, param_id, width)
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● パラメータ描画
  184.   #--------------------------------------------------------------------------
  185.   def draw_actor_new_param(actor, spirit, x, y, param_id, width)
  186.     now = actor.param(param_id)
  187.     spirit_id = spirit.nil? ? 0 : spirit.spirit_id
  188.     new = @actor.v_chg_param(spirit_id, @index, param_id)
  189.     change_color(system_color)
  190.     draw_text(x+150, y, 32, line_height, "→")
  191.     change_color(param_change_color(new - now))
  192.     draw_text(x+170, y, 60, line_height, new, 2)
  193.   end
  194. end
  195.  
  196.  
  197. #==============================================================================
  198. # ■ Window_SptListBase
  199. #==============================================================================
  200. class Window_SptListBase < Window_Selectable
  201.   attr_accessor :info_window         # help_window2
  202.   #--------------------------------------------------------------------------
  203.   # ● ウィンドウのアクティブ化
  204.   #--------------------------------------------------------------------------
  205.   def activate
  206.     select(0) if @index < 0
  207.     super
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● アイテムの取得
  211.   #--------------------------------------------------------------------------
  212.   def item
  213.     i_item(index)
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● アイテムの取得
  217.   #--------------------------------------------------------------------------
  218.   def i_item(index)
  219.     @data && index >= 0 ? @data[index] : nil
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 選択項目の有効状態を取得
  223.   #--------------------------------------------------------------------------
  224.   def current_item_enabled?
  225.     enable?(item)
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 許可状態で表示するかどうか
  229.   #--------------------------------------------------------------------------
  230.   def enable?(item)
  231.     item.nil?
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ● 項目の描画
  235.   #--------------------------------------------------------------------------
  236.   def draw_item(index)
  237.     item = i_item(index)
  238.     rect = item_rect(index)
  239.     if item
  240.       enabled = enable?(item)
  241.       rect.x += draw_actor_line_graphic(item, rect.x, rect.y, enabled)
  242.       draw_spirit_name(item, rect.x, rect.y, enabled)
  243.     else
  244.       draw_empty_text(rect)
  245.     end
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ● 空項目の描画
  249.   #--------------------------------------------------------------------------
  250.   def draw_empty_text(rect)
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● アクター設定
  254.   #--------------------------------------------------------------------------
  255.   def actor=(a)
  256.     return if @actor == a
  257.     @actor = a
  258.     data_refresh
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● カーソルを右に移動
  262.   #--------------------------------------------------------------------------
  263.   def cursor_right(wrap = false)
  264.     @help_window.next_page
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● カーソルを左に移動
  268.   #--------------------------------------------------------------------------
  269.   def cursor_left(wrap = false)
  270.     @help_window.prev_page
  271.   end
  272. end
  273.  
  274. #==============================================================================
  275. # ■ Window_SptPartner
  276. #==============================================================================
  277. class Window_SptPartner < Window_SptListBase
  278.   #--------------------------------------------------------------------------
  279.   # ● オブジェクト初期化
  280.   #--------------------------------------------------------------------------
  281.   def initialize(x, height, actor)
  282.     @actor = actor
  283.     @data  = actor.partners
  284.     y = line_height
  285.     super(x, y, Graphics.width - x, height - y)
  286.     self.z += 10
  287.     self.opacity = 0
  288.     refresh
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● リフレッシュ
  292.   #--------------------------------------------------------------------------
  293.   def data_refresh
  294.     @data  = @actor.partners
  295.     refresh
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 項目数の取得
  299.   #--------------------------------------------------------------------------
  300.   def item_max
  301.     @actor.max_spirits
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● 許可状態で表示するかどうか
  305.   #--------------------------------------------------------------------------
  306.   def enable?(item)
  307.     return false if item_max == 0
  308.     super(item) or !item.partner_locked
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● 空項目の描画
  312.   #--------------------------------------------------------------------------
  313.   def draw_empty_text(rect)
  314.     draw_text(rect.x, rect.y, contents_width-8, line_height, "-- 空缺 --", 1)
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● ヘルプテキスト更新
  318.   #--------------------------------------------------------------------------
  319.   def update_help
  320.     @help_window.spirit = item
  321.     @info_window.index = @index unless @info_window.nil?
  322.   end
  323. end
  324.  
  325. #==============================================================================
  326. # ■ Window_SptSpiritList
  327. #==============================================================================
  328. class Window_SptSpiritList < Window_SptListBase
  329.   #--------------------------------------------------------------------------
  330.   # ● オブジェクト初期化
  331.   #--------------------------------------------------------------------------
  332.   def initialize(x, y, actor)
  333.     @actor = actor
  334.     @data = $game_party.spirit_stay_members + [nil]
  335.     super(x, y, Graphics.width - x, Graphics.height - y)
  336.     refresh
  337.   end
  338.   #--------------------------------------------------------------------------
  339.   # ● リフレッシュ
  340.   #--------------------------------------------------------------------------
  341.   def data_refresh
  342.     @data = $game_party.spirit_stay_members + [nil]
  343.     refresh
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ● 項目数の取得
  347.   #--------------------------------------------------------------------------
  348.   def item_max
  349.     (@data ? @data.size : 0)
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 許可状態で表示するかどうか
  353.   #--------------------------------------------------------------------------
  354.   def enable?(item)
  355.     super(item) or @actor.can_partner(item.spirit_id)
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● ヘルプテキスト更新
  359.   #--------------------------------------------------------------------------
  360.   def update_help
  361.     @help_window.spirit = item
  362.     @info_window.spirit = item unless @info_window.nil?
  363.   end
  364. end
  365.  
  366.  
  367.  
  368. #==============================================================================
  369. # ■ Window_SptSpirit
  370. #==============================================================================
  371. class Window_SptSpirit < Window_Base
  372.   #--------------------------------------------------------------------------
  373.   # ● オブジェクト初期化
  374.   #--------------------------------------------------------------------------
  375.   def initialize(y, width)
  376.     @spirit = nil
  377.     @page = 0
  378.     @data = Spirits.status
  379.     @max = @data.size
  380.     @skill_start = @data.index(:skills)
  381.     super(0, y, width, Graphics.height - y)
  382.     refresh
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ● 1ページに表示するスキル数
  386.   #--------------------------------------------------------------------------
  387.   def page_skills
  388.     ((contents.height - (line_height * 2)) / line_height) * sr
  389.   end
  390.   def sr
  391.     Spirits::SKILL_NUM
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # ● ページ切り替え
  395.   #--------------------------------------------------------------------------
  396.   def page=(n)
  397.     @page = [0, [@max-1, n].min].max
  398.     refresh
  399.   end
  400.   def next_page
  401.     self.page = @page + 1
  402.   end
  403.   def prev_page
  404.     self.page = @page - 1
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● ウィンドウ内容の幅を計算
  408.   #--------------------------------------------------------------------------
  409.   def contents_width
  410.     super + (@spirit.nil? ? 0 : 10)
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ● 精霊設定
  414.   #--------------------------------------------------------------------------
  415.   def spirit=(s)
  416.     return if @spirit == s
  417.     @spirit = s
  418.     is_skill = @data[@page] == :skills
  419.     data_refresh
  420.     refresh
  421.     self.page = @data.index(:skills) if is_skill
  422.   end
  423.   #--------------------------------------------------------------------------
  424.   # ● データリフレッシュ
  425.   #--------------------------------------------------------------------------
  426.   def data_refresh
  427.     @data = Spirits.status
  428.     @skill_start = @data.index(:skills)
  429.     unless @spirit.nil?
  430.       n = @spirit.skills.size
  431.       if n > page_skills
  432.         (n / page_skills).times {|i| @data.insert(@skill_start, :skills) }
  433.       end
  434.     end
  435.     @max = @data.size
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● リフレッシュ
  439.   #--------------------------------------------------------------------------
  440.   def refresh
  441.     contents_width != contents.width ? create_contents : contents.clear
  442.     self.ox = 0
  443.     return if @spirit.nil?
  444.     self.ox = (@page == 0 ? 0 : (@page == (@max-1) ? 10 : 5))
  445.     draw_spirit_name(@spirit, self.ox, 0)
  446.     draw_actor_level(@spirit, self.ox + 170, 0) if Spirits::USE_LV
  447.     draw_actor_face(@spirit, self.ox + contents_width - 100, 0)
  448.     case @data[@page]
  449.     when :text    # description
  450.       draw_actor_nickname(@spirit, self.ox + 100, line_height)
  451.       draw_text_ex(self.ox, line_height * 2, @spirit.description)
  452.     when :status  # status
  453.       draw_actor_status
  454.     when :skills  # skill
  455.       i = @page - @skill_start
  456.       n = page_skills
  457.       draw_actor_skills(@spirit.skills[i*n, n])
  458.     else    # feature
  459.       draw_feature_status
  460.     end
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ● 顔グラフィックの描画
  464.   #     enabled : 有効フラグ。false のとき半透明で描画
  465.   #--------------------------------------------------------------------------
  466.   def draw_face(face_name, face_index, x, y, enabled = true)
  467.     bitmap = Cache.face(face_name)
  468.     h = line_height * 2
  469.     hh = (96 - h) / 2
  470.     rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96 + hh, 96, h)
  471.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  472.     bitmap.dispose
  473.   end
  474.   #--------------------------------------------------------------------------
  475.   # ● 能力値の描画
  476.   #--------------------------------------------------------------------------
  477.   def draw_actor_status
  478.     change_color(system_color)
  479.     draw_text(self.ox, line_height, 100, line_height, "部下实力")
  480.     change_color(normal_color)
  481.     8.times do |i|
  482.       x = self.ox + i % 2 * contents_width / 2
  483.       y = i / 2 * line_height + line_height * 2
  484.       draw_spirit_param(@spirit, x, y, i)
  485.     end
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● スキルの描画
  489.   #--------------------------------------------------------------------------
  490.   def draw_actor_skills(skills)
  491.     change_color(system_color)
  492.     draw_text(self.ox, line_height, 100, line_height, "计谋战技")
  493.     change_color(normal_color)
  494.     skills.each_with_index do |skill, i|
  495.       x = self.ox + i % sr * contents_width / sr
  496.       y = i / sr * line_height + line_height * 2
  497.       draw_item_name(skill, x, y)
  498.     end
  499.   end
  500.   #--------------------------------------------------------------------------
  501.   # ● 特徴の描画
  502.   #--------------------------------------------------------------------------
  503.   def draw_feature_status
  504.     ft = Spirits::Features.new(@spirit)
  505.     case @data[@page]
  506.     when :rate;   draw_feature_rate(ft)
  507.     when :param;  draw_feature_param(ft)
  508.     when :attack; draw_feature_attack(ft)
  509.     when :skill;  draw_feature_skill(ft)
  510.     when :equip;  draw_feature_equip(ft)
  511.     when :other;  draw_feature_other(ft)
  512.     end
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ● 特徴テキストの描画
  516.   #--------------------------------------------------------------------------
  517.   def draw_feature_text(features, x, y, w=contents_width, col_max=2)
  518.     features.each_with_index do |ft, i|
  519.       ww = w / col_max
  520.       xx = x + i % col_max * ww
  521.       yy = y + i / col_max * line_height
  522.       draw_text(xx, yy, ww, line_height, ft[0])
  523.       draw_text(xx, yy, ww, line_height, ft[1], 2) unless ft[1].nil?
  524.     end
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● 特徴:耐性の描画
  528.   #--------------------------------------------------------------------------
  529.   def draw_feature_rate(ft)
  530.     change_color(system_color)
  531.     draw_text(self.ox, line_height, 100, line_height, "耐性")
  532.     change_color(normal_color)
  533.     draw_feature_text(ft.rate, self.ox, line_height * 2)
  534.   end
  535.   #--------------------------------------------------------------------------
  536.   # ● 特徴:能力の描画
  537.   #--------------------------------------------------------------------------
  538.   def draw_feature_param(ft)
  539.     change_color(system_color)
  540.     draw_text(self.ox, line_height, 100, line_height, "能力特性")
  541.     change_color(normal_color)
  542.     draw_feature_text(ft.param, self.ox, line_height * 2)
  543.   end
  544.   #--------------------------------------------------------------------------
  545.   # ● 特徴:攻撃の描画
  546.   #--------------------------------------------------------------------------
  547.   def draw_feature_attack(ft)
  548.     change_color(system_color)
  549.     draw_text(self.ox, line_height, 100, line_height, "攻击特性")
  550.     change_color(normal_color)
  551.     draw_feature_text(ft.attack, self.ox, line_height * 2)
  552.   end
  553.   #--------------------------------------------------------------------------
  554.   # ● 特徴:スキルの描画
  555.   #--------------------------------------------------------------------------
  556.   def draw_feature_skill(ft)
  557.     change_color(system_color)
  558.     draw_text(self.ox, line_height, 100, line_height, "技能特性")
  559.     change_color(normal_color)
  560.     draw_feature_text(ft.skill, self.ox, line_height * 2)
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ● 特徴:装備の描画
  564.   #--------------------------------------------------------------------------
  565.   def draw_feature_equip(ft)
  566.     change_color(system_color)
  567.     draw_text(self.ox, line_height, 100, line_height, "装备特性")
  568.     change_color(normal_color)
  569.     draw_feature_text(ft.equip, self.ox, line_height * 2)
  570.   end
  571.   #--------------------------------------------------------------------------
  572.   # ● 特徴:その他の描画
  573.   #--------------------------------------------------------------------------
  574.   def draw_feature_other(ft)
  575.     change_color(system_color)
  576.     draw_text(self.ox, line_height, 100, line_height, "特性")
  577.     change_color(normal_color)
  578.     draw_feature_text(ft.other, self.ox, line_height * 2)
  579.   end
  580. end
  581.  
  582.  
  583.  
  584. #==============================================================================
  585. # ■ Scene_EditPartner
  586. #==============================================================================
  587. class Scene_EditPartner < Scene_MenuBase
  588.   #--------------------------------------------------------------------------
  589.   # ● 開始処理
  590.   #--------------------------------------------------------------------------
  591.   def start
  592.     super
  593.     create_actor_window
  594.     create_partner_window
  595.     create_sptlist_window
  596.     create_spirit_window
  597.     @sptlist_window.info_window = @actor_window
  598.     @sptlist_window.help_window = @spirit_window
  599.     @partner_window.info_window = @actor_window
  600.     @partner_window.help_window = @spirit_window
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ● アクターウィンドウ作成
  604.   #--------------------------------------------------------------------------
  605.   def create_actor_window
  606.     @actor_window = Window_SptActor.new(@actor)
  607.   end
  608.   #--------------------------------------------------------------------------
  609.   # ● パートナーリストウィンドウ作成
  610.   #--------------------------------------------------------------------------
  611.   def create_partner_window
  612.     @partner_window = Window_SptPartner.new(@actor_window.width-200, @actor_window.height, @actor)
  613.     @partner_window.set_handler(:ok,       method(:partner_ok))
  614.     @partner_window.set_handler(:cancel,   method(:return_scene))
  615.     @partner_window.set_handler(:pagedown, method(:next_actor))
  616.     @partner_window.set_handler(:pageup,   method(:prev_actor))
  617.     @partner_window.activate
  618.   end
  619.   #--------------------------------------------------------------------------
  620.   # ● パートナーウィンドウ : OK
  621.   #--------------------------------------------------------------------------
  622.   def partner_ok
  623.     @actor_window.diff_on
  624.     @sptlist_window.activate
  625.   end
  626.   #--------------------------------------------------------------------------
  627.   # ● 精霊リストウィンドウ作成
  628.   #--------------------------------------------------------------------------
  629.   def create_sptlist_window
  630.     @sptlist_window = Window_SptSpiritList.new(@partner_window.x, @actor_window.height, @actor)
  631.     @sptlist_window.set_handler(:ok,       method(:sptlist_ok))
  632.     @sptlist_window.set_handler(:cancel,   method(:sptlist_cancel))
  633.   end
  634.   #--------------------------------------------------------------------------
  635.   # ● 精霊リストウィンドウ : OK
  636.   #--------------------------------------------------------------------------
  637.   def sptlist_ok
  638.     if @sptlist_window.item.nil?
  639.       unless @partner_window.item.nil?
  640.         @actor.change_partner(0, @partner_window.index)
  641.       end
  642.     else
  643.       @actor.change_partner(@sptlist_window.item.spirit_id, @partner_window.index)
  644.       @sptlist_window.item.change_partner(@actor.id)
  645.     end
  646.     unless @partner_window.item.nil?
  647.       @partner_window.item.change_partner(0)
  648.     end
  649.     @sptlist_window.data_refresh
  650.     @partner_window.data_refresh
  651.     @partner_window.activate
  652.     @actor_window.diff_off
  653.   end
  654.   #--------------------------------------------------------------------------
  655.   # ● 精霊リストウィンドウ : Cancel
  656.   #--------------------------------------------------------------------------
  657.   def sptlist_cancel
  658.     @partner_window.activate
  659.     @actor_window.diff_off
  660.   end
  661.   #--------------------------------------------------------------------------
  662.   # ● 精霊ウィンドウ作成
  663.   #--------------------------------------------------------------------------
  664.   def create_spirit_window
  665.     @spirit_window = Window_SptSpirit.new(@actor_window.height, @partner_window.x)
  666.   end
  667.   #--------------------------------------------------------------------------
  668.   # ● アクターの切り替え
  669.   #--------------------------------------------------------------------------
  670.   def on_actor_change
  671.     @actor_window.actor   = @actor
  672.     @partner_window.actor = @actor
  673.     @sptlist_window.actor = @actor
  674.     @partner_window.select(0)
  675.     @sptlist_window.select(0)
  676.     @partner_window.activate
  677.   end
  678. end




RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-38 精霊システム <database>             by Claimh
  3. #==============================================================================
  4.  
  5. #==============================================================================
  6. # ■ Spirits
  7. #==============================================================================
  8. module Spirits
  9.   #--------------------------------------------------------------------------
  10.   # ● 精霊パートナー化
  11.   #--------------------------------------------------------------------------
  12.   def self.add_partner(actor_id, spirit_id)
  13.     return unless $game_party.include_spirit?(spirit_id)
  14.     return unless $game_actors[actor_id].can_join_partner(spirit_id)
  15.     s_act_id = self.actor_id(spirit_id)
  16.     return unless $game_actors[s_act_id].can_join_partner(actor_id)
  17.     $game_actors[actor_id].add_partner(spirit_id)
  18.     $game_actors[s_act_id].add_partner(actor_id)
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 精霊パートナー解消
  22.   #--------------------------------------------------------------------------
  23.   def self.remove_partner(actor_id, spirit_id)
  24.     $game_actors[actor_id].remove_partner(spirit_id)
  25.     $game_actors[self.actor_id(spirit_id)].remove_partner(actor_id)
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 精霊パートナー固定化
  29.   #--------------------------------------------------------------------------
  30.   def self.lock_partner(spirit_id)
  31.     spirit = $game_actors[self.actor_id(spirit_id)]
  32.     return unless spirit.has_partner?
  33.     spirit.lock_partner
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 精霊パートナー固有化解除
  37.   #--------------------------------------------------------------------------
  38.   def self.unlock_partner(spirit_id)
  39.     spirit = $game_actors[self.actor_id(spirit_id)]
  40.     return unless spirit.has_partner?
  41.     spirit.unlock_partner
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 精霊?
  45.   #--------------------------------------------------------------------------
  46.   def self.spirit?(actor_id)
  47.     SPIRIT_ACTOR.has_value?(actor_id)
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 精霊ID => アクターID
  51.   #--------------------------------------------------------------------------
  52.   def self.actor_id(spirit_id)
  53.     SPIRIT_ACTOR[spirit_id].nil? ? 0 : SPIRIT_ACTOR[spirit_id]
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● アクターID => 精霊ID
  57.   #--------------------------------------------------------------------------
  58.   def self.spirit_id(actor_id)
  59.     id = SPIRIT_ACTOR.index(actor_id)
  60.     id.nil? ? 0 : id
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● パートナー最大数
  64.   #--------------------------------------------------------------------------
  65.   def self.max(actor_id)
  66.     MAX[actor_id].nil? ? MAX[0] : MAX[actor_id]
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 相性
  70.   #--------------------------------------------------------------------------
  71.   def self.affinity(actor_id, spirit_id)
  72.     if AFNTY[actor_id].nil?
  73.       return AFNTY[0][0]
  74.     elsif AFNTY[actor_id][spirit_id].nil?
  75.       return AFNTY[actor_id][0].nil? ? AFNTY[0][0] : AFNTY[actor_id][0]
  76.     else
  77.       return AFNTY[actor_id][spirit_id]
  78.     end
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 相性計算
  82.   #--------------------------------------------------------------------------
  83.   def self.affinity_param(param, actor_id, spirit_id)
  84.     prm = [0, 0.5, 0.8, 1.0, 1.2, 1.5]  # 相性補正
  85.     n = affinity(actor_id, spirit_id)
  86.     p "[#{actor_id}, #{spirit_id}] => #{n}" if n.nil?
  87.     (param * prm[affinity(actor_id, spirit_id)]).truncate
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 有効ステータス表示
  91.   #--------------------------------------------------------------------------
  92.   def self.sts
  93.     STS.select {|key, v| v}.keys
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 有効ステータス表示
  97.   #--------------------------------------------------------------------------
  98.   def self.status
  99.     SHOW_ST.select {|key, v| v}.keys
  100.   end
  101. end
  102.  
  103. #==============================================================================
  104. # ■ Spirits::Features      : 特徴情報抽出
  105. #==============================================================================
  106. class Spirits::Features
  107.   #--------------------------------------------------------------------------
  108.   # ● 定数(特徴)
  109.   #--------------------------------------------------------------------------
  110.   FEATURE_ELEMENT_RATE  = 11              # 属性有効度
  111.   FEATURE_DEBUFF_RATE   = 12              # 弱体有効度
  112.   FEATURE_STATE_RATE    = 13              # ステート有効度
  113.   FEATURE_STATE_RESIST  = 14              # ステート無効化
  114.   FEATURE_PARAM         = 21              # 通常能力値
  115.   FEATURE_XPARAM        = 22              # 追加能力値
  116.   FEATURE_SPARAM        = 23              # 特殊能力値
  117.   FEATURE_ATK_ELEMENT   = 31              # 攻撃時属性
  118.   FEATURE_ATK_STATE     = 32              # 攻撃時ステート
  119.   FEATURE_ATK_SPEED     = 33              # 攻撃速度補正
  120.   FEATURE_ATK_TIMES     = 34              # 攻撃追加回数
  121.   FEATURE_STYPE_ADD     = 41              # スキルタイプ追加
  122.   FEATURE_STYPE_SEAL    = 42              # スキルタイプ封印
  123.   FEATURE_SKILL_ADD     = 43              # スキル追加
  124.   FEATURE_SKILL_SEAL    = 44              # スキル封印
  125.   FEATURE_EQUIP_WTYPE   = 51              # 武器タイプ装備
  126.   FEATURE_EQUIP_ATYPE   = 52              # 防具タイプ装備
  127.   FEATURE_EQUIP_FIX     = 53              # 装備固定
  128.   FEATURE_EQUIP_SEAL    = 54              # 装備封印
  129.   FEATURE_SLOT_TYPE     = 55              # スロットタイプ
  130.   FEATURE_ACTION_PLUS   = 61              # 行動回数追加
  131.   FEATURE_SPECIAL_FLAG  = 62              # 特殊フラグ
  132.   FEATURE_COLLAPSE_TYPE = 63              # 消滅エフェクト
  133.   FEATURE_PARTY_ABILITY = 64              # パーティ能力
  134.   #--------------------------------------------------------------------------
  135.   # ● パーティ能力定数
  136.   #--------------------------------------------------------------------------
  137.   ABILITY_ENCOUNTER_HALF    = 0           # エンカウント半減
  138.   ABILITY_ENCOUNTER_NONE    = 1           # エンカウント無効
  139.   ABILITY_CANCEL_SURPRISE   = 2           # 不意打ち無効
  140.   ABILITY_RAISE_PREEMPTIVE  = 3           # 先制攻撃率アップ
  141.   ABILITY_GOLD_DOUBLE       = 4           # 獲得金額二倍
  142.   ABILITY_DROP_ITEM_DOUBLE  = 5           # アイテム入手率二倍
  143.   #--------------------------------------------------------------------------
  144.   # ● オブジェクト初期化
  145.   #--------------------------------------------------------------------------
  146.   def initialize(spirit)
  147.     @obj = spirit
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 属性耐性
  151.   #--------------------------------------------------------------------------
  152.   def element_rate
  153.     fts = @obj.features(FEATURE_ELEMENT_RATE)
  154.     fts.collect {|ft| ["#{$data_system.elements[ft.data_id]}属性耐性", sprintf("%d %", ft.value)] }
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 弱体耐性
  158.   #--------------------------------------------------------------------------
  159.   def debuff_rate
  160.     fts = @obj.features(FEATURE_DEBUFF_RATE)
  161.     fts.collect {|ft| ["#{$data_system.terms.params[ft.data_id]}弱体耐性", sprintf("%d %", ft.value)] }
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● ステート耐性
  165.   #--------------------------------------------------------------------------
  166.   def state_rate
  167.     fts = @obj.features(FEATURE_STATE_RATE)
  168.     fts.collect {|ft| ["#{$data_states[ft.data_id].name}耐性", sprintf("%d %", ft.value)] }
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● ステート無効化
  172.   #--------------------------------------------------------------------------
  173.   def state_regist
  174.     fts = @obj.features(FEATURE_STATE_RESIST)
  175.     fts.collect {|ft| ["#{$data_states[ft.data_id].name}无效化", nil] }
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 耐性情報取得
  179.   #--------------------------------------------------------------------------
  180.   def rate
  181.     element_rate + debuff_rate + state_rate + state_regist
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 通常能力情報取得
  185.   #--------------------------------------------------------------------------
  186.   def nparam
  187.     fts = @obj.features(FEATURE_PARAM)
  188.     fts.collect {|ft| ["#{$data_system.terms.params[ft.data_id]}", sprintf("%+d %", ft.value * 100)] }
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 追加能力情報取得
  192.   #--------------------------------------------------------------------------
  193.   def xparam
  194.     txt = ["命中率", "闪避", "会心一击", "会心闪避",
  195.            "兵法闪避", "策反", "反击",
  196.            "#{$data_system.terms.basic[2]}恢复",
  197.            "#{$data_system.terms.basic[4]}恢复",
  198.            "#{$data_system.terms.basic[6]}恢复"]
  199.     fts = @obj.features(FEATURE_XPARAM)
  200.     fts.collect {|ft| ["#{txt[ft.data_id]}", sprintf("%+d %  ", ft.value * 100)] }
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 特殊能力情報取得
  204.   #--------------------------------------------------------------------------
  205.   def sparam
  206.     txt = ["被攻击率", "防御効果率", "回复効果率", "草药知识",
  207.             "#{$data_system.terms.basic[4]}消费率",
  208.             "#{$data_system.terms.basic[6]}消费率",
  209.            "武力伤害率", "计谋伤害率", "地图伤害率", "经验获得率"]
  210.     fts = @obj.features(FEATURE_SPARAM)
  211.     fts.collect {|ft| ["#{$data_system.terms.params[ft.data_id]}", sprintf("%+d %  ", ft.value * 100)] }
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 能力情報取得
  215.   #--------------------------------------------------------------------------
  216.   def param
  217.     nparam + xparam + sparam
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 攻撃属性情報取得
  221.   #--------------------------------------------------------------------------
  222.   def atk_element
  223.     fts = @obj.features(FEATURE_ATK_ELEMENT)
  224.     fts.collect {|ft| ["攻击时 属性", $data_system.elements[ft.data_id]] }
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● 攻撃ステート情報取得
  228.   #--------------------------------------------------------------------------
  229.   def atk_state
  230.     fts = @obj.features(FEATURE_ATK_STATE)
  231.     fts.collect {|ft| ["攻击时 状态附加", $data_states[ft.data_id].name] }
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ● 攻撃速度補正情報取得
  235.   #--------------------------------------------------------------------------
  236.   def atk_speed
  237.     fts = @obj.features(FEATURE_ATK_SPEED)
  238.     fts.collect {|ft| ["攻击速度修正", ft.value.to_s] }
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 攻撃回数情報取得
  242.   #--------------------------------------------------------------------------
  243.   def atk_times
  244.     fts = @obj.features(FEATURE_ATK_TIMES)
  245.     fts.collect {|ft| ["#{ft.value}回攻击", nil] }
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ● 攻撃情報取得
  249.   #--------------------------------------------------------------------------
  250.   def attack
  251.     atk_element + atk_state + atk_speed + atk_times
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● スキルタイプ追加情報取得
  255.   #--------------------------------------------------------------------------
  256.   def skill_add_type
  257.     fts = @obj.features(FEATURE_STYPE_ADD)
  258.     fts.collect {|ft| ["タイプ「#{$data_system.skill_types[ft.data_id]}」追加", nil] }
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● スキルタイプ封印情報取得
  262.   #--------------------------------------------------------------------------
  263.   def skill_seal_type
  264.     fts = @obj.features(FEATURE_STYPE_SEAL)
  265.     fts.collect {|ft| ["タイプ「#{$data_system.skill_types[ft.data_id]}」封印", nil] }
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● スキル追加情報取得
  269.   #--------------------------------------------------------------------------
  270.   def skill_add
  271.     fts = @obj.features(FEATURE_SKILL_ADD)
  272.     fts.collect {|ft| ["「#{$data_skills[ft.data_id].name}」追加", nil] }
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ● スキル封印情報取得
  276.   #--------------------------------------------------------------------------
  277.   def skill_seal
  278.     fts = @obj.features(FEATURE_SKILL_SEAL)
  279.     fts.collect {|ft| ["「#{$data_skills[ft.data_id].name}」封印", nil] }
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ● スキル情報取得
  283.   #--------------------------------------------------------------------------
  284.   def skill
  285.     skill_add_type + skill_seal_type # + skill_add + skill_seal
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ● 武器タイプ装備情報取得
  289.   #--------------------------------------------------------------------------
  290.   def equip_wtype
  291.     fts = @obj.features(FEATURE_EQUIP_WTYPE)
  292.     fts.collect {|ft| ["「#{$data_sytem.weapon_types[ft.data_id]}」装備", nil] }
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● 防具タイプ装備情報取得
  296.   #--------------------------------------------------------------------------
  297.   def equip_atype
  298.     fts = @obj.features(FEATURE_EQUIP_ATYPE)
  299.     fts.collect {|ft| ["「#{$data_sytem.armor_types[ft.data_id]}」装備", nil] }
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ● 装備固定情報取得
  303.   #--------------------------------------------------------------------------
  304.   def equip_fix
  305.     fts = @obj.features(FEATURE_EQUIP_FIX)
  306.     fts.collect {|ft| ["「#{$data_sytem.terms.etypes[ft.data_id]}」装備固定化", nil] }
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 装備封印情報取得
  310.   #--------------------------------------------------------------------------
  311.   def equip_seal
  312.     fts = @obj.features(FEATURE_EQUIP_SEAL)
  313.     fts.collect {|ft| ["「#{$data_sytem.terms.etypes[ft.data_id]}」装備封印", nil] }
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 装備情報取得
  317.   #--------------------------------------------------------------------------
  318.   def equip
  319.     equip_wtype + equip_atype + equip_fix + equip_seal
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 行動回数追加情報取得
  323.   #--------------------------------------------------------------------------
  324.   def action_plus
  325.     fts = @obj.features(FEATURE_ACTION_PLUS)
  326.     fts.collect {|ft| ["「#{[ft.value]}」回行動", nil] }
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 特殊フラグ情報取得
  330.   #--------------------------------------------------------------------------
  331.   def special_flag
  332.     str = []
  333.     str.push(["自动战斗", nil]) if @obj.auto_battle?
  334.     str.push(["自动防御", nil]) if @obj.guard?
  335.     str.push(["援军", nil]) if @obj.substitute?
  336.     str.push(["#{$data_system.terms.basic[6]}装备", nil]) if @obj.substitute?
  337.     str
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● パーティー能力情報取得
  341.   #--------------------------------------------------------------------------
  342.   def party_ability
  343.     fts = @obj.features(FEATURE_PARTY_ABILITY)
  344.     str = []
  345.     str.push(["遇敌率减半", nil])   if fts.any? {|ft| ft.code_id == ABILITY_ENCOUNTER_HALF }
  346.     str.push(["不会遇敌", nil])   if fts.any? {|ft| ft.code_id == ABILITY_ENCOUNTER_NONE }
  347.     str.push(["不会被偷袭", nil])       if fts.any? {|ft| ft.code_id == ABILITY_CANCEL_SURPRISE }
  348.     str.push(["偷袭几率", nil])   if fts.any? {|ft| ft.code_id == ABILITY_RAISE_PREEMPTIVE }
  349.     str.push(["获得金双倍", nil])       if fts.any? {|ft| ft.code_id == ABILITY_GOLD_DOUBLE }
  350.     str.push(["掉宝双倍", nil]) if fts.any? {|ft| ft.code_id == ABILITY_DROP_ITEM_DOUBLE }
  351.     str
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ● その他情報取得
  355.   #--------------------------------------------------------------------------
  356.   def other
  357.     action_plus + special_flag + party_ability
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ● 全特徴取得
  361.   #--------------------------------------------------------------------------
  362.   def all
  363.     Spirits.status.inject([]) do |r, st|
  364.       case st
  365.       when :rate;   r += self.rate
  366.       when :param;  r += self.param
  367.       when :attack; r += self.attack
  368.       when :skill;  r += self.skill
  369.       when :equip;  r += self.equip
  370.       when :other;  r += self.other
  371.       end
  372.     end
  373.    end
  374. end
  375.  
  376.  
  377. #==============================================================================
  378. # ■ Game_Actor
  379. #==============================================================================
  380. class Game_Actor < Game_Battler
  381.   attr_reader :max_spirits        # 最大精霊数
  382.   attr_reader :partner_locked     # 固定パートナー
  383.   #--------------------------------------------------------------------------
  384.   # ● セットアップ
  385.   #--------------------------------------------------------------------------
  386.   alias setup_spirit setup
  387.   def setup(actor_id)
  388.     @partners = []
  389.     @max_spirits = Spirits.max(actor_id)
  390.     @parent_id = 0
  391.     @partner_locked = false
  392.     @is_spirit = Spirits.spirit?(actor_id)
  393.     setup_spirit(actor_id)
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ● 精霊?
  397.   #--------------------------------------------------------------------------
  398.   def spirit?
  399.     @is_spirit
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● 最大精霊数変更
  403.   #--------------------------------------------------------------------------
  404.   def max_spirits=(num)
  405.     @max_spirits = [1, num].max unless spirit?
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 精霊ID
  409.   #--------------------------------------------------------------------------
  410.   def spirit_id
  411.     spirit? ? Spirits.spirit_id(@actor_id) : 0
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● 精霊付与可能?
  415.   #--------------------------------------------------------------------------
  416.   def can_partner(spirit_id)
  417.     spirit? ? false : (Spirits.affinity(@actor_id, spirit_id) != 0)
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● 精霊交換可能?
  421.   #--------------------------------------------------------------------------
  422.   def can_change_partner(index)
  423.     return false if spirit?
  424.     return true  if @partners[index] == 0
  425.     $game_actors[@partners[index]].partner_locked
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● 精霊付与可能?
  429.   #--------------------------------------------------------------------------
  430.   def can_join_partner(partner_id=0)
  431.     return (@parent_id == 0) if spirit?
  432.     return false unless can_partner(partner_id)
  433.     (@partners.size < @max_spirits)
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ● パートナー追加
  437.   #--------------------------------------------------------------------------
  438.   def add_partner(partner_id)
  439.     if spirit?
  440.       @parent_id = partner_id
  441.     else
  442.       return if @max_spirits == partner_num
  443.       @partners.push(partner_id) unless @partners.include?(partner_id)
  444.     end
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● パートナー削除
  448.   #--------------------------------------------------------------------------
  449.   def remove_partner(partner_id)
  450.     if spirit?
  451.       @parent_id = 0
  452.       unlock_partner
  453.     else
  454.       @partners.delete(partner_id)
  455.     end
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● パートナー変更
  459.   #--------------------------------------------------------------------------
  460.   def change_partner(partner_id, index=0)
  461.     if spirit?
  462.       @parent_id = partner_id
  463.     else
  464.       @partners[index] = partner_id
  465.     end
  466.   end
  467.   #--------------------------------------------------------------------------
  468.   # ● 仮想パートナー変更 パラメータ取得
  469.   #--------------------------------------------------------------------------
  470.   def v_chg_param(partner_id, index, param_id)
  471.     return 0 if spirit?
  472.     now_partner = @partners[index]
  473.     change_partner(partner_id, index)
  474.     prm = self.param(param_id)
  475.     change_partner(now_partner, index)
  476.     prm
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # ● パートナー有り?
  480.   #--------------------------------------------------------------------------
  481.   def has_partner?
  482.     spirit? ? (@parent_id != 0) : (!@partners.empty?)
  483.   end
  484.   def has_spirit?
  485.     spirit? ? false : (!@partners.empty?)
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● 精霊パートナー固定化
  489.   #--------------------------------------------------------------------------
  490.   def lock_partner
  491.     return unless spirit?
  492.     @partner_locked = true
  493.   end
  494.   #--------------------------------------------------------------------------
  495.   # ● 精霊パートナー固有化解除
  496.   #--------------------------------------------------------------------------
  497.   def unlock_partner
  498.     @partner_locked = false
  499.   end
  500.   #--------------------------------------------------------------------------
  501.   # ● パートナー参照
  502.   #--------------------------------------------------------------------------
  503.   def partners
  504.     return (has_partner? ? [$game_actors[@parent_id]] : []) if spirit?
  505.     @partners.collect {|id| id.nil? ? nil : $game_actors[Spirits.actor_id(id)]}
  506.   end
  507.   def partners_objs
  508.     partners.compact
  509.   end
  510.   #--------------------------------------------------------------------------
  511.   # ● パートナー数参照
  512.   #--------------------------------------------------------------------------
  513.   def partner_num
  514.     @partners.size
  515.   end
  516.   #--------------------------------------------------------------------------
  517.   # ● 追加スキルの取得
  518.   #--------------------------------------------------------------------------
  519.   def added_skills
  520.     has_spirit? ? partners_objs.inject(super) {|r, s| r |= s.skillids} : super
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ● スキルID郡 取得
  524.   #--------------------------------------------------------------------------
  525.   def skillids
  526.     @skills
  527.   end
  528.  
  529.   #--------------------------------------------------------------------------
  530.   # ● 通常能力値の取得
  531.   #--------------------------------------------------------------------------
  532.   def param(param_id)
  533.     super(param_id) - (spirit? ? Spirits::PRM_BASE[param_id] : 0)
  534. end
  535.    alias org_param param
  536.   def param(param_id)
  537.     org = org_param(param_id)
  538.     if has_spirit?
  539.       partners_objs.each do |s|
  540.         org += Spirits.affinity_param(s.org_param(param_id), @actor_id, s.spirit_id)
  541.       end
  542.     end
  543.     org
  544.   end
  545.  
  546.   #--------------------------------------------------------------------------
  547.   # ● 特徴を保持する全オブジェクトの配列取得
  548.   #--------------------------------------------------------------------------
  549.   alias org_feature_objects feature_objects
  550.   def feature_objects
  551.     org = org_feature_objects
  552.     partners_objs.collect {|s| s.org_feature_objects }.each {|obj| org += obj} if has_spirit?
  553.     org
  554.   end
  555.   #--------------------------------------------------------------------------
  556.   # ● 控えメンバーの経験獲得率を取得
  557.   #--------------------------------------------------------------------------
  558.   alias reserve_members_exp_rate_spirits reserve_members_exp_rate
  559.   def reserve_members_exp_rate
  560.     spirit? ? 1 : reserve_members_exp_rate_spirits
  561.   end
  562. end
  563.  
  564.  
  565. #==============================================================================
  566. # ■ Game_Party
  567. #==============================================================================
  568. class Game_Party < Game_Unit
  569.   #--------------------------------------------------------------------------
  570.   # ● オブジェクト初期化
  571.   #--------------------------------------------------------------------------
  572.   alias initialize_spirits initialize
  573.   def initialize
  574.     initialize_spirits
  575.     @spirits = []
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● 初期パーティのセットアップ
  579.   #--------------------------------------------------------------------------
  580.   alias setup_starting_members_spirits setup_starting_members
  581.   def setup_starting_members
  582.     setup_starting_members_spirits
  583.     @spirits = Spirits::START_V
  584.     Spirits::START_P.each_pair do |aid, sid|
  585.       if @actors.include?(aid) and @spirits.include?(sid)
  586.         $game_actors[aid].add_partner(sid)
  587.         $game_actors[Spirits.actor_id(sid)].add_partner(aid)
  588.         $game_actors[aid].recover_all
  589.       else
  590.         p "START_P[#{aid} => #{sid}] is bad arg."
  591.       end
  592.     end
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ● 精霊を加える
  596.   #--------------------------------------------------------------------------
  597.   def include_spirit?(spirit_id)
  598.     @spirits.include?(spirit_id)
  599.   end
  600.   #--------------------------------------------------------------------------
  601.   # ● 精霊を加える
  602.   #--------------------------------------------------------------------------
  603.   def add_spirit(spirit_id)
  604.     @spirits.push(spirit_id) unless include_spirit?(spirit_id)
  605.   end
  606.   #--------------------------------------------------------------------------
  607.   # ● 精霊を外す
  608.   #--------------------------------------------------------------------------
  609.   def remove_spirit(spirit_id)
  610.     members.each {|actor| actor.remove_partner(spirit_id)}
  611.     @spirits.delete(spirit_id)
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ● 精霊リスト
  615.   #--------------------------------------------------------------------------
  616.   def spirit_members
  617.     @spirits.collect {|id| spirit(id)}
  618.   end
  619.   #--------------------------------------------------------------------------
  620.   # ● 待機 精霊リスト
  621.   #--------------------------------------------------------------------------
  622.   def spirit_stay_members
  623.     spirit_members.select {|spirit| !spirit.has_partner?}
  624.   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 精霊数
  627.   #--------------------------------------------------------------------------
  628.   def spirit_num
  629.     @spirits.size
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ● 精霊データ
  633.   #--------------------------------------------------------------------------
  634.   def spirit(spirit_id)
  635.     $game_actors[Spirits.actor_id(spirit_id)]
  636.   end
  637. end
  638.  
  639.  
  640.  
  641. #==============================================================================
  642. # ■ Window_Base
  643. #==============================================================================
  644. class Window_Base < Window
  645.   #--------------------------------------------------------------------------
  646.   # ● 歩行グラフィックの描画
  647.   #--------------------------------------------------------------------------
  648.   def draw_line_character(character_name, character_index, x, y, enabled=true)
  649.     return unless character_name
  650.     bitmap = Cache.character(character_name)
  651.     sign = character_name[/^[\!\$]./]
  652.     if sign && sign.include?('$')
  653.       cw = bitmap.width / 3
  654.       ch = bitmap.height / 4
  655.     else
  656.       cw = bitmap.width / 12
  657.       ch = bitmap.height / 8
  658.     end
  659.     y += (line_height - ch) / 2 if ch < line_height
  660.     n = character_index
  661.     src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, [ch, line_height].min)
  662.     contents.blt(x, y, bitmap, src_rect, enabled ? 255 : translucent_alpha)
  663.     cw
  664.   end
  665.   #--------------------------------------------------------------------------
  666.   # ● アクターの歩行グラフィック描画
  667.   #--------------------------------------------------------------------------
  668.   def draw_actor_line_graphic(actor, x, y, enabled=true)
  669.     draw_line_character(actor.character_name, actor.character_index, x, y, enabled)
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ● パートナー名描画
  673.   #--------------------------------------------------------------------------
  674.   def draw_partner_name(actor, x, y)
  675.     change_color(system_color)
  676.     draw_text(x, y, contents_width, line_height, actor.spirit? ? "将领" : "副将")
  677.     x += 100
  678.     change_color(normal_color)
  679.     if actor.has_partner?
  680.       actor.partners.each_with_index {|s, i| draw_actor_line_graphic(s, x + 48 * i, y)}
  681.     else
  682.       draw_text(x, y, contents_width, line_height, "―――")
  683.     end
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ● 名前の描画
  687.   #--------------------------------------------------------------------------
  688.   def draw_spirit_name(actor, x, y, enabled=true, width = 112)
  689.     change_color(normal_color, enabled)
  690.     draw_text(x, y, width, line_height, actor.name)
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # ● 能力値の描画
  694.   #--------------------------------------------------------------------------
  695.   def draw_spirit_param(actor, x, y, param_id)
  696.     change_color(system_color)
  697.     draw_text(x, y, 120, line_height, Vocab::param(param_id))
  698.     prm = actor.param(param_id)
  699.     change_color(param_change_color(prm))
  700.     if prm == 0
  701.       draw_text(x + 100, y, 56, line_height, "----", 2)
  702.     else
  703.       draw_text(x + 100, y, 56, line_height, sprintf("%+d", prm), 2)
  704.     end
  705.   end
  706. end
  707.  
  708.  
  709. class << BattleManager
  710.   #--------------------------------------------------------------------------
  711.   # ● 経験値の獲得とレベルアップの表示
  712.   #--------------------------------------------------------------------------
  713.   alias gain_exp_spirits gain_exp
  714.   def gain_exp
  715.     gain_exp_spirits
  716.     gain_spirit_exp if Spirits::USE_LV
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ● 精霊の経験値獲得
  720.   #--------------------------------------------------------------------------
  721.   def gain_spirit_exp
  722.     case Spirits::EXP_TARGET
  723.     when 0
  724.       $game_party.battle_members.each do |actor|
  725.         actor.partners.compact.each do |spirit|
  726.           spirit.gain_exp(spirit_exp)
  727.         end
  728.       end
  729.     when 1
  730.       $game_party.all_members.each do |actor|
  731.         actor.partners.compact.each do |spirit|
  732.           spirit.gain_exp(spirit_exp)
  733.         end
  734.       end
  735.     when 2
  736.       $game_party.spirit_members.each do |spirit|
  737.         spirit.gain_exp(spirit_exp)
  738.       end
  739.     end
  740.     wait_for_message
  741.   end
  742.   #--------------------------------------------------------------------------
  743.   # ● 精霊用経験値
  744.   #--------------------------------------------------------------------------
  745.   def spirit_exp
  746.     Spirits::EXP_TYPE == 0 ? 1 : $game_troop.exp_total
  747.   end
  748. end
  749.  
  750.  
  751. if defined?(BtlrFv)
  752. class << BattleManager
  753.   #--------------------------------------------------------------------------
  754.   # ● 獲得した経験値の表示
  755.   #--------------------------------------------------------------------------
  756.   alias display_result_spirit display_result
  757.   def display_result
  758.     display_result_spirit
  759.     gain_spirit_exp if Spirits::USE_LV
  760.   end
  761. end
  762. end # BtlrFv
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 21:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表