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

Project1

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

[已经解决] 【悬赏】从VX向VA移植脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
跳转到指定楼层
1
发表于 2014-8-18 08:40:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
前几天发了个帖子求助,要求好像太繁琐了,总是麻烦大家也不好,直接悬赏吧……
有意向帮忙的可以直接站内或者qq804548716联系,具体要求贴在楼下

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
2
 楼主| 发表于 2014-8-18 08:55:31 | 只看该作者
http://pan.baidu.com/s/1o6wmbvc
这是我之前汉化的一个游戏,里面的一个技能CP制的脚本给我非常深刻的印象(因为游戏本身是糟糕向的,上传的这份删了Audio和Pictures文件夹)
原脚本的效果是,打怪和事件的时候获得AP,消耗AP学习技能
菜单中增加了设定技能的选项,可以装备最多三个技能,同时每个技能需要不同的CP,总CP不能超过一定限度(这个数值随等级上升)
装备的主动技能可以在战斗中使用,被动技能可以生效增加属性
相对的,没有装备的技能不能使用,被动增加属性的效果也不会生效

这一串脚本中我需要的只有技能CP制的部分,这个脚本原作者已经移植到了VA上,(感谢tseyik和taroxd的帮助)
但是呢,这个移植的脚本只能实现【技能按照CP制装备,未装备的技能不能使用】,而被动技能增加属性的部分……我试过了几种不同的被动技能脚本,都不能很好的兼容,具体来说,就是技能只要学会了就一直生效增加属性,无论是否装备……那这样子还弄个装备技能的菜单有什么意义……
所以呢,最主要的是将原工程里面的《パッシヴスキル》脚本移植到VA上
但是我看里面的脚本说明,一层套一层,A要放在B后面,B放在C后面,C放在D后面……也不知道那些部分是必须的,所以将整个游戏都上传了
附带一提,下面这是移植后的VA版技能CP制 脚本

RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ スキルCP制 - KGC_SkillCPSystem ◆ VX Ace ◆
  3. #_/    ◇ Last update : 2009/09/13 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  戦闘中に使用可能なスキルを限定する機能を追加します。
  6. #_/============================================================================
  7. #_/ 【装備】≪スキル習得装備≫ より下に導入してください。
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  9. #==============================================================================
  10. #    ☆VXAce RGSS3 「スキルCP制」☆
  11. #      EnDlEss DREamER
  12. #     URL:[url]http://mitsu-evo.6.ql.bz/[/url]
  13. #     製作者 mitsu-evo
  14. #     Last:2014/5/8
  15. #   KGC様のスキルCP制RGSS3移植版
  16. #     ▼ 素材よりも下に。
  17. #==============================================================================
  18. =begin
  19. 5/8:ステータス画面のCPゲージ位置を修正。
  20. メニューコマンドからの挙動を修正。
  21.  
  22.  
  23.  
  24. =end
  25. #==============================================================================
  26. # ★ カスタマイズ項目 - Customize ★
  27. #==============================================================================
  28.  
  29. module KGC
  30. module SkillCPSystem
  31.   # ◆ 登録スキル最大数
  32.   MAX_SKILLS = 9
  33.   # ◆ CP の名称
  34.   VOCAB_CP   = "CP"
  35.   # ◆ CP の名称 (略)
  36.   VOCAB_CP_A = "C"
  37.   # ◆ ステータス画面に CP を表示する
  38.   SHOW_STATUS_CP = true
  39.  
  40.   # ◆ 消費 CP 既定値
  41.   #  消費 CP 未指定のスキルで使用。
  42.   DEFAULT_CP_COST = 1
  43.   # ◆ CP 上限
  44.   #  (固有 CP などを除いた) 素の状態での CP 上限。
  45.   CP_MAX = 15
  46.   # ◆ CP 下限
  47.   CP_MIN = 1
  48.   # ◆ 補正後の CP 上限
  49.   #  固有 CP や装備品による変動を含めた上限。
  50.   REVISED_CP_MAX = 20
  51.   # ◆ 補正後の CP 下限
  52.   REVISED_CP_MIN = 0
  53.   # ◆ 最大 CP 算出式
  54.   #   level..現在のレベル
  55.   #  自動的に整数変換するので、結果が小数になってもOK。
  56.   CP_CALC_EXP = "level * 0.6 + 1.0"
  57.   # ◆ アクター毎の最大 CP 算出式
  58.   PERSONAL_CP_CALC_EXP = []
  59.   #  ここから下に、アクターごとの最大 CP を
  60.   #   PERSONAL_CP_CALC_EXP[アクター ID] = "計算式"
  61.   #  という書式で指定。
  62.   #  計算式は CP_CALC_EXP と同様の書式。
  63.   #  指定しなかったアクターは CP_CALC_EXP を使用。
  64.   #   <例> ラルフだけ優遇
  65.   # PERSONAL_CP_CALC_EXP[1] = "level * 0.8 + 2.0"
  66.  
  67.   # ◆ 戦闘テスト時は無効化
  68.   #  true  : 戦闘テスト時は全スキルを使用可能。
  69.   #  false : 戦闘テスト時は (セットしない限り) 使用不可。
  70.   DISABLE_IN_BATTLETEST  = true
  71.   # ◆ 使用不可スキルもセット可能
  72.   SHOW_UNUSABLE_SKILL    = true
  73.   # ◆ 消費 CP 0 のスキルはセットしなくても使用可能
  74.   USABLE_COST_ZERO_SKILL = true
  75.   # ◆ パッシブスキルはセットしないと効果なし
  76.   #  ≪パッシブスキル≫ 導入時のみ有効。
  77.   PASSIVE_NEED_TO_SET    = true
  78.   # ◆ 新規習得スキルを自動的にセット
  79.   #  true  : 習得したスキルを空きスロットにセット。
  80.   #           ※ ≪スキル習得装備≫ で習得したスキルは無効。
  81.   #  false : 習得しただけではセットされない (手動でセット)。
  82.   AUTO_SET_NEW_SKILL     = true
  83.   # ◆ 消費 CP 0 の場合も消費 CP を表示する
  84.   #  true  : 消費 CP 0 でも表示
  85.   #  false : 消費 CP 1 以上の場合のみ表示
  86.   SHOW_ZERO_COST         = false
  87.  
  88.   # ◆ CP ゲージの色
  89.   #  数値  : \C[n] と同じ色。
  90.   #  Color : 指定した色。 ( Color.new(255, 128, 128) など )
  91.   GAUGE_START_COLOR = 13  # 開始色
  92.   GAUGE_END_COLOR   =  5  # 終了色
  93.  
  94.   # ◆ CP ゲージに汎用ゲージを使用する
  95.   #  ≪汎用ゲージ描画≫ 導入時のみ有効。
  96.   ENABLE_GENERIC_GAUGE = true
  97.   # ◆ CP ゲージ設定
  98.   #  画像は "Graphics/System" から読み込む。
  99.   GAUGE_IMAGE  = "GaugeCP"  # 画像
  100.   GAUGE_OFFSET = [-23, -2]  # 位置補正 [x, y]
  101.   GAUGE_LENGTH = -4         # 長さ補正
  102.   GAUGE_SLOPE  = 30         # 傾き (-89 ~ 89)
  103.  
  104.   # ◆ メニュー画面に「スキル設定」コマンドを追加する
  105.   #  追加する場所は、メニューコマンドの最下部です。
  106.   #  他の部分に追加したければ、≪カスタムメニューコマンド≫ をご利用ください。
  107.   USE_MENU_SET_SKILL_COMMAND = true
  108.   # ◆ メニュー画面の「スキル設定」コマンドの名称
  109.   VOCAB_MENU_SET_SKILL       = "スキル設定"
  110.  
  111.   # ◆ 未設定項目の表示文字列
  112.   BLANK_TEXT   = "-  EMPTY  -"
  113.   # ◆ 設定解除の表示文字列
  114.   RELEASE_TEXT = "( 設定解除 )"
  115. end
  116. end
  117.  
  118. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  119.  
  120. $imported = {} if $imported == nil
  121. $imported["SkillCPSystem"] = true
  122.  
  123. module KGC::SkillCPSystem
  124.   module Regexp
  125.     module BaseItem
  126.       # 最大 CP
  127.       MAXCP_PLUS = /<(?:MAX|最大)CP\s*([\-\+]?\d+)>/
  128.       # 登録スキル数
  129.       BATTLE_SKILL_MAX = /<(?:BATTLE_SKILL_MAX|登録スキル数)\s*([\-\+]?\d+)>/i
  130.     end
  131.  
  132.     module Skill
  133.       # 消費 CP
  134.       CP_COST = /<CP\s*(\d+)>/i
  135.       # 同時セット不可
  136.       EXCLUDE = /<(?:EXCLUDE|同時セット不可)\s*(\d+(?:\s*,\s*\d+)*)>/
  137.     end
  138.   end
  139. end
  140.  
  141. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  142.  
  143. #==============================================================================
  144. # □ KGC::Commands
  145. #==============================================================================
  146.  
  147. module KGC
  148. module Commands
  149.   module_function
  150.   #--------------------------------------------------------------------------
  151.   # ○ MaxCP 補正値の取得
  152.   #     actor_id    : アクター ID
  153.   #     variable_id : 取得した値を代入する変数の ID
  154.   #--------------------------------------------------------------------------
  155.   def get_actor_own_cp(actor_id, variable_id = 0)
  156.     value = $game_actors[actor_id].maxcp_plus
  157.     $game_variables[variable_id] = value if variable_id > 0
  158.     return value
  159.   end
  160.   alias get_own_cp get_actor_own_cp
  161.   #--------------------------------------------------------------------------
  162.   # ○ MaxCP 補正値の変更
  163.   #     actor_id : アクター ID
  164.   #     value    : MaxCP 補正値
  165.   #--------------------------------------------------------------------------
  166.   def set_actor_own_cp(actor_id, value)
  167.     $game_actors[actor_id].maxcp_plus = value
  168.   end
  169.   alias set_own_cp set_actor_own_cp
  170.   #--------------------------------------------------------------------------
  171.   # ○ アクターの MaxCP 補正値の増加
  172.   #     actor_id : アクター ID
  173.   #     value    : 増加量
  174.   #--------------------------------------------------------------------------
  175.   def gain_actor_cp(actor_id, value)
  176.     $game_actors[actor_id].maxcp_plus += value
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ○ 登録スキル最大数の取得
  180.   #     actor_id : アクター ID
  181.   #     variable_id : 取得した値を代入する変数の ID
  182.   #--------------------------------------------------------------------------
  183.   def get_battle_skill_max(actor_id, variable_id = 0)
  184.     value = $game_actors[actor_id].battle_skill_max
  185.     $game_variables[variable_id] = value if variable_id > 0
  186.     return value
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ○ 登録スキル最大数の変更
  190.   #     actor_id : アクター ID
  191.   #     value    : 登録可能数
  192.   #--------------------------------------------------------------------------
  193.   def set_battle_skill_max(actor_id, value = -1)
  194.     $game_actors[actor_id].battle_skill_max = value
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ○ スキルが登録されているか
  198.   #     actor_id : アクター ID
  199.   #     skill_id : 確認するスキル ID
  200.   #--------------------------------------------------------------------------
  201.   def battle_skill_set?(actor_id, skill_id)
  202.     return $game_actors[actor_id].battle_skill_ids.include?(skill_id)
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ○ スキルの登録
  206.   #     actor_id : アクター ID
  207.   #     index    : 登録箇所
  208.   #     skill_id : 登録するスキル ID (nil で解除)
  209.   #--------------------------------------------------------------------------
  210.   def set_battle_skill(actor_id, index, skill_id = nil)
  211.     actor = $game_actors[actor_id]
  212.     if skill_id.is_a?(Integer)
  213.       # 登録
  214.       skill = $data_skills[skill_id]
  215.       return unless actor.battle_skill_settable?(index, skill)  # セット不可
  216.  
  217.       actor.set_battle_skill(index, skill)
  218.       actor.restore_battle_skill
  219.     else
  220.       # 解除
  221.       actor.remove_battle_skill(index)
  222.     end
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ○ スキルの追加登録
  226.   #     actor_id : アクター ID
  227.   #     skill_id : 登録するスキル ID
  228.   #--------------------------------------------------------------------------
  229.   def add_battle_skill(actor_id, skill_id)
  230.     actor = $game_actors[actor_id]
  231.     skill = $data_skills[skill_id]
  232.     return if actor == nil || skill == nil
  233.  
  234.     actor.add_battle_skill(skill)
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ○ スキルの全解除
  238.   #     actor_id : アクター ID
  239.   #--------------------------------------------------------------------------
  240.   def clear_battle_skill(actor_id)
  241.     $game_actors[actor_id].clear_battle_skill
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ○ スキル設定画面の呼び出し
  245.   #     actor_index : アクターインデックス
  246.   #--------------------------------------------------------------------------
  247.   def call_set_battle_skill(actor_index = 0)
  248.     #return if $game_party.in_battle
  249.     #$game_temp.next_scene = :set_battle_skill
  250.     #$game_temp.next_scene_actor_index = actor_index
  251.     SceneManager.call(Scene_SetBattleSkill)
  252.     Fiber.yield
  253.   end
  254. end
  255. end
  256.  
  257. class Game_Interpreter
  258.   include KGC::Commands
  259. end
  260.  
  261. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  262.  
  263. #==============================================================================
  264. # ■ Vocab
  265. #==============================================================================
  266.  
  267. module Vocab
  268.   # CP
  269.   def self.cp
  270.     return KGC::SkillCPSystem::VOCAB_CP
  271.   end
  272.  
  273.   # CP (略)
  274.   def self.cp_a
  275.     return KGC::SkillCPSystem::VOCAB_CP_A
  276.   end
  277.  
  278.   # スキル設定
  279.   def self.set_battle_skill
  280.     return KGC::SkillCPSystem::VOCAB_MENU_SET_SKILL
  281.   end
  282. end
  283.  
  284. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  285.  
  286. #==============================================================================
  287. # ■ RPG::BaseItem
  288. #==============================================================================
  289.  
  290. class RPG::BaseItem
  291.   #--------------------------------------------------------------------------
  292.   # ○ スキルCP制のキャッシュを生成
  293.   #--------------------------------------------------------------------------
  294.   def create_skill_cp_system_cache
  295.     @__maxcp_plus = 0
  296.     @__battle_skill_max_plus = 0
  297.  
  298.     self.note.each_line { |line|
  299.       case line
  300.       when KGC::SkillCPSystem::Regexp::BaseItem::MAXCP_PLUS
  301.         # 最大 CP
  302.         @__maxcp_plus += $1.to_i
  303.       when KGC::SkillCPSystem::Regexp::BaseItem::BATTLE_SKILL_MAX
  304.         # 登録スキル数
  305.         @__battle_skill_max_plus += $1.to_i
  306.       end
  307.     }
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ○ 最大 CP 補正
  311.   #--------------------------------------------------------------------------
  312.   def maxcp_plus
  313.     create_skill_cp_system_cache if @__maxcp_plus == nil
  314.     return @__maxcp_plus
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ○ 登録スキル数補正
  318.   #--------------------------------------------------------------------------
  319.   def battle_skill_max_plus
  320.     create_skill_cp_system_cache if @__battle_skill_max_plus == nil
  321.     return @__battle_skill_max_plus
  322.   end
  323. end
  324.  
  325. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  326.  
  327. #==============================================================================
  328. # ■ RPG::Skill
  329. #==============================================================================
  330.  
  331. class RPG::Skill < RPG::UsableItem
  332.   #--------------------------------------------------------------------------
  333.   # ○ スキルCP制のキャッシュを生成
  334.   #--------------------------------------------------------------------------
  335.   def create_skill_cp_system_cache
  336.     @__cp_cost = KGC::SkillCPSystem::DEFAULT_CP_COST
  337.     # 攻撃・防御設定スキルならコスト0
  338.     @__cp_cost = 0 if @id == 1 or @id == 2
  339.     @__excluded_skills = []
  340.  
  341.     self.note.each_line { |line|
  342.       case line
  343.       when KGC::SkillCPSystem::Regexp::Skill::CP_COST
  344.         # 消費 CP
  345.         @__cp_cost = $1.to_i
  346.       when KGC::SkillCPSystem::Regexp::Skill::EXCLUDE
  347.         # 同時セット不可
  348.         $1.scan(/\d+/).each { |num| @__excluded_skills << num.to_i }
  349.         @__excluded_skills.uniq!
  350.       end
  351.     }
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ○ 消費 CP
  355.   #--------------------------------------------------------------------------
  356.   def cp_cost
  357.     create_skill_cp_system_cache if @__cp_cost == nil
  358.     return @__cp_cost
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ○ 同時セット不可
  362.   #--------------------------------------------------------------------------
  363.   def excluded_skills
  364.     create_skill_cp_system_cache if @__excluded_skills == nil
  365.     return @__excluded_skills
  366.   end
  367. end
  368.  
  369. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  370.  
  371. #==============================================================================
  372. # ■ Game_Battler
  373. #==============================================================================
  374.  
  375. class Game_Battler
  376.   #--------------------------------------------------------------------------
  377.   # ○ 戦闘用スキルセット済み判定
  378.   #     skill : スキル
  379.   #--------------------------------------------------------------------------
  380.   def battle_skill_set?(skill)
  381.     return true
  382.   end
  383. end
  384.  
  385. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  386.  
  387. #==============================================================================
  388. # ■ Game_Actor
  389. #==============================================================================
  390.  
  391. class Game_Actor < Game_Battler
  392.   #--------------------------------------------------------------------------
  393.   # ● 公開インスタンス変数
  394.   #--------------------------------------------------------------------------
  395.   attr_writer   :maxcp_plus               # MaxCP 補正値
  396.   #--------------------------------------------------------------------------
  397.   # ○ MaxCP 取得
  398.   #--------------------------------------------------------------------------
  399.   def maxcp
  400.     calc_exp = KGC::SkillCPSystem::PERSONAL_CP_CALC_EXP[self.id]
  401.     if calc_exp == nil
  402.       calc_exp = KGC::SkillCPSystem::CP_CALC_EXP
  403.     end
  404.     n = Integer(eval(calc_exp))
  405.     n = [[n, cp_limit].min, KGC::SkillCPSystem::CP_MIN].max
  406.     n += maxcp_plus + maxcp_plus_equip
  407.     return [[n, revised_cp_limit].min, KGC::SkillCPSystem::REVISED_CP_MIN].max
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ○ CP 取得
  411.   #--------------------------------------------------------------------------
  412.   def cp
  413.     return [maxcp - consumed_cp, 0].max
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ○ CP 消費量取得
  417.   #--------------------------------------------------------------------------
  418.   def consumed_cp
  419.     n = 0
  420.     battle_skills.compact.each { |skill| n += skill.cp_cost }
  421.     return n
  422.   end
  423.   #--------------------------------------------------------------------------
  424.   # ○ CP 上限取得
  425.   #--------------------------------------------------------------------------
  426.   def cp_limit
  427.     return KGC::SkillCPSystem::CP_MAX
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ○ 補正後の CP 上限取得
  431.   #--------------------------------------------------------------------------
  432.   def revised_cp_limit
  433.     return KGC::SkillCPSystem::REVISED_CP_MAX
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ○ MaxCP 補正値取得
  437.   #--------------------------------------------------------------------------
  438.   def maxcp_plus
  439.     if @maxcp_plus == nil
  440.       if @own_cp != nil
  441.         @maxcp_plus = @own_cp
  442.         @own_cp = nil
  443.       else
  444.         @maxcp_plus = 0
  445.       end
  446.     end
  447.     return @maxcp_plus
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ○ 装備品による MaxCP 補正値取得
  451.   #--------------------------------------------------------------------------
  452.   def maxcp_plus_equip
  453.     n = 0
  454.     equips.compact.each { |item| n += item.maxcp_plus }
  455.     return n
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● スキル取得
  459.   #--------------------------------------------------------------------------
  460.   alias skills_KGC_SkillCPSystem skills
  461.   def skills
  462.     return (skill_cp_restrict? ? restricted_skills : skills_KGC_SkillCPSystem)
  463.   end
  464.   #--------------------------------------------------------------------------
  465.   # ● スキルの習得済み判定
  466.   #--------------------------------------------------------------------------
  467.   def skill_learn?(skill)
  468.     skill.is_a?(RPG::Skill) && @skills.include?(skill.id)
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # ○ スキルを制限するか
  472.   #--------------------------------------------------------------------------
  473.   def skill_cp_restrict?
  474.     if $game_party.in_battle
  475.       # 戦闘テストでないか、戦闘テストでも制限する場合
  476.       return true unless $BTEST && KGC::SkillCPSystem::DISABLE_IN_BATTLETEST
  477.     end
  478.  
  479.     return false
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ○ スキルを制限
  483.   #--------------------------------------------------------------------------
  484.   def restricted_skills
  485.     result = all_skills
  486.     result.each_with_index { |skill, i|
  487.       # 消費 CP > 0 のスキルを除外
  488.       if !KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0
  489.         result[i] = nil
  490.       end
  491.       # パッシブスキルを除外
  492.       if $imported["PassiveSkill"] && KGC::SkillCPSystem::PASSIVE_NEED_TO_SET
  493.         if skill.passive &&
  494.             (!KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0)
  495.           result[i] = nil
  496.         end
  497.       end
  498.     }
  499.     result.compact!
  500.     # 戦闘スキルを追加
  501.     result |= battle_skills
  502.     result.sort! { |a, b| a.id <=> b.id }
  503.     return result
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # ○ 全スキル取得
  507.   #--------------------------------------------------------------------------
  508.   def all_skills
  509.     # 一時的に非戦闘中にする
  510.     #last_in_battle = $game_party.in_battle
  511.     #$game_party.on_battle_end
  512.  
  513.     result = skills_KGC_SkillCPSystem
  514.     if $imported["EquipLearnSkill"]
  515.       result |= (equipment_skills | full_ap_skills)
  516.       result.sort! { |a, b| a.id <=> b.id }
  517.     end
  518.  
  519.     # 戦闘中フラグを戻す
  520.     #$game_party.on_battle_start#in_battle = last_in_battle
  521.  
  522.     return result
  523.   end
  524.  
  525.   #--------------------------------------------------------------------------
  526.   # ○ 登録スキル最大数取得
  527.   #--------------------------------------------------------------------------
  528.   def battle_skill_max
  529.     @battle_skill_max = -1 if @battle_skill_max == nil
  530.     n = (@battle_skill_max < 0 ?
  531.       KGC::SkillCPSystem::MAX_SKILLS : @battle_skill_max)
  532.     n += equipment_battle_skill_max_plus
  533.     return [n, 0].max
  534.   end
  535.   #--------------------------------------------------------------------------
  536.   # ○ 装備品による登録スキル数補正
  537.   #--------------------------------------------------------------------------
  538.   def equipment_battle_skill_max_plus
  539.     n = 0
  540.     equips.compact.each { |item| n += item.battle_skill_max_plus }
  541.     return n
  542.   end
  543.   #--------------------------------------------------------------------------
  544.   # ○ 登録スキル最大数設定
  545.   #--------------------------------------------------------------------------
  546.   def battle_skill_max=(value)
  547.     @battle_skill_max = value
  548.     if @battle_skills == nil
  549.       @battle_skills = []
  550.     else
  551.       @battle_skills = @battle_skills[0...value]
  552.     end
  553.     restore_passive_rev if $imported["PassiveSkill"]
  554.   end
  555.   #--------------------------------------------------------------------------
  556.   # ○ 戦闘用スキル ID 取得
  557.   #--------------------------------------------------------------------------
  558.   def battle_skill_ids
  559.     @battle_skills = [] if @battle_skills == nil
  560.     return @battle_skills
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ○ 戦闘用スキル取得
  564.   #--------------------------------------------------------------------------
  565.   def battle_skills
  566.     result = []
  567.     battle_skill_ids.each { |i|
  568.       next if i == nil           # 無効なスキルは無視
  569.       result << $data_skills[i]
  570.     }
  571.     return result
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ○ 戦闘用スキル登録
  575.   #     index : 位置
  576.   #     skill : スキル (nil で解除)
  577.   #--------------------------------------------------------------------------
  578.   def set_battle_skill(index, skill)
  579.     if skill == nil
  580.       @battle_skills[index] = nil
  581.     else
  582.       return unless skill.is_a?(RPG::Skill)  # スキル以外
  583.       return if cp < skill.cp_cost           # CP 不足
  584.       if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
  585.         return
  586.       end
  587.  
  588.       @battle_skills[index] = skill.id
  589.     end
  590.     restore_passive_rev if $imported["PassiveSkill"]
  591.   end
  592.   #--------------------------------------------------------------------------
  593.   # ○ 戦闘用スキル追加登録
  594.   #     skill : スキル
  595.   #--------------------------------------------------------------------------
  596.   def add_battle_skill(skill)
  597.     return unless skill.is_a?(RPG::Skill)  # スキル以外
  598.     skills = battle_skill_ids
  599.     return if skills.include?(skill.id)    # 登録済み
  600.     return if cp < skill.cp_cost           # CP 不足
  601.     return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
  602.  
  603.     battle_skill_max.times { |i|
  604.       # 空きがあれば登録
  605.       if skills[i] == nil
  606.         set_battle_skill(i, skill)
  607.         break
  608.       end
  609.     }
  610.     restore_battle_skill
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # ○ 戦闘用スキル解除
  614.   #     index : 位置
  615.   #--------------------------------------------------------------------------
  616.   def remove_battle_skill(index)
  617.     @battle_skills[index] = nil
  618.     restore_passive_rev if $imported["PassiveSkill"]
  619.   end
  620.   #--------------------------------------------------------------------------
  621.   # ○ 戦闘用スキル全解除
  622.   #--------------------------------------------------------------------------
  623.   def clear_battle_skill
  624.     @battle_skills = []
  625.     restore_passive_rev if $imported["PassiveSkill"]
  626.   end
  627.   #--------------------------------------------------------------------------
  628.   # ○ 戦闘用スキルセット可否判定
  629.   #     index : 位置
  630.   #     skill : スキル
  631.   #--------------------------------------------------------------------------
  632.   def battle_skill_settable?(index, skill)
  633.     return false if battle_skill_max <= index  # 範囲外
  634.     return true  if skill == nil               # nil は解除なので OK
  635.  
  636.     return false if battle_skill_ids.include?(skill.id)  # セット済み
  637.  
  638.     curr_skill_id = battle_skill_ids[index]
  639.     curr_skill    = (curr_skill_id != nil ? $data_skills[curr_skill_id] : nil)
  640.  
  641.     # 同時セット不可
  642.     excluded  = excluded_battle_skill_ids
  643.     excluded -= curr_skill.excluded_skills if curr_skill != nil
  644.     return false if excluded.include?(skill.id)
  645.  
  646.     offset = (curr_skill != nil ? curr_skill.cp_cost : 0)
  647.     return false if self.cp < (skill.cp_cost - offset)  # CP 不足
  648.  
  649.     return true
  650.   end
  651.   #--------------------------------------------------------------------------
  652.   # ○ Exclude スキル ID 取得
  653.   #--------------------------------------------------------------------------
  654.   def excluded_battle_skill_ids
  655.     result = []
  656.     battle_skills.each { |skill| result |= skill.excluded_skills }
  657.     return result
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # ○ 戦闘用スキルを修復
  661.   #--------------------------------------------------------------------------
  662.   def restore_battle_skill
  663.     return
  664. =begin
  665.     result = battle_skill_ids.clone
  666.     usable_skills = all_skills
  667.  
  668.     result.each_with_index { |n, i|
  669.       next if n == nil
  670.       # 未修得の場合は解除
  671.       if (usable_skills.find { |s| s.id == n }) == nil
  672.         result[i] = nil
  673.       end
  674.     }
  675.     @battle_skills = result[0...battle_skill_max]
  676.     # CP 不足のスキルを下から順に外す
  677.     (battle_skill_max - 1).downto(0) { |i|
  678.       @battle_skills[i] = nil if maxcp - consumed_cp < 0
  679.     }
  680. =end
  681.   end
  682.   #--------------------------------------------------------------------------
  683.   # ● 装備の破棄
  684.   #     item : 破棄する武器 or 防具
  685.   #    武器/防具の増減で「装備品も含める」のとき使用する。
  686.   #--------------------------------------------------------------------------
  687.   alias discard_equip_KGC_SkillCPSystem discard_equip
  688.   def discard_equip(item)
  689.     discard_equip_KGC_SkillCPSystem(item)
  690.  
  691.     restore_battle_skill
  692.     restore_passive_rev if $imported["PassiveSkill"]
  693.   end
  694.   #--------------------------------------------------------------------------
  695.   # ● 経験値の変更
  696.   #     exp  : 新しい経験値
  697.   #     show : レベルアップ表示フラグ
  698.   #--------------------------------------------------------------------------
  699.   alias change_exp_KGC_SkillCPSystem change_exp
  700.   def change_exp(exp, show)
  701.     # 習得したスキルを表示するため、戦闘中フラグを一時的に解除
  702.     #last_in_battle = $game_party.in_battle
  703.     #$game_party.on_battle_end#in_battle = false
  704.  
  705.     change_exp_KGC_SkillCPSystem(exp, show)
  706.  
  707.     #$game_party.on_battle_start#in_battle = last_in_battle
  708.   end
  709.   if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL
  710.   #--------------------------------------------------------------------------
  711.   # ● スキルを覚える
  712.   #     skill_id : スキル ID
  713.   #--------------------------------------------------------------------------
  714.   alias learn_skill_KGC_SkillCPSystem learn_skill
  715.   def learn_skill(skill_id)
  716.     unless skill_learn?($data_skills[skill_id])
  717.       learn_skill_KGC_SkillCPSystem(skill_id)
  718.       add_battle_skill($data_skills[skill_id])
  719.     end
  720.   end
  721.   end  # <- if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL
  722.   #--------------------------------------------------------------------------
  723.   # ● スキルを忘れる
  724.   #     skill_id : スキル ID
  725.   #--------------------------------------------------------------------------
  726.   alias forget_skill_KGC_SkillCPSystem forget_skill
  727.   def forget_skill(skill_id)
  728.     # 忘れるスキルを戦闘用スキルから削除
  729.     battle_skill_ids.each_with_index { |s, i|
  730.       remove_battle_skill(i) if s == skill_id
  731.     }
  732.  
  733.     forget_skill_KGC_SkillCPSystem(skill_id)
  734.   end
  735.   #--------------------------------------------------------------------------
  736.   # ○ 戦闘用スキルセット済み判定
  737.   #     skill : スキル
  738.   #--------------------------------------------------------------------------
  739.   def battle_skill_set?(skill)
  740.     return false unless skill.is_a?(RPG::Skill)  # スキル以外
  741.  
  742.     return battle_skill_ids.include?(skill.id)
  743.   end
  744. end
  745.  
  746. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  747.  
  748. #==============================================================================
  749. # ■ Window_Base
  750. #==============================================================================
  751.  
  752. class Window_Base < Window
  753.   #--------------------------------------------------------------------------
  754.   # ○ CP の文字色を取得
  755.   #     actor : アクター
  756.   #--------------------------------------------------------------------------
  757.   def cp_color(actor)
  758.     return knockout_color if actor.maxcp > 0 && actor.cp == 0
  759.     return normal_color
  760.   end
  761.   #--------------------------------------------------------------------------
  762.   # ○ CP ゲージの色 1 の取得
  763.   #--------------------------------------------------------------------------
  764.   def cp_gauge_color1
  765.     color = KGC::SkillCPSystem::GAUGE_START_COLOR
  766.     return (color.is_a?(Integer) ? text_color(color) : color)
  767.   end
  768.   #--------------------------------------------------------------------------
  769.   # ○ CP ゲージの色 2 の取得
  770.   #--------------------------------------------------------------------------
  771.   def cp_gauge_color2
  772.     color = KGC::SkillCPSystem::GAUGE_END_COLOR
  773.     return (color.is_a?(Integer) ? text_color(color) : color)
  774.   end
  775.   #--------------------------------------------------------------------------
  776.   # ○ CP の描画
  777.   #     actor : アクター
  778.   #     x     : 描画先 X 座標
  779.   #     y     : 描画先 Y 座標
  780.   #     width : 幅
  781.   #--------------------------------------------------------------------------
  782.   def draw_actor_cp(actor, x, y, width = 120)
  783.     draw_actor_cp_gauge(actor, x, y, width)
  784.     self.contents.font.color = system_color
  785.     self.contents.draw_text(x, y, 30, line_height, Vocab::cp_a)
  786.     self.contents.font.color = cp_color(actor)
  787.     xr = x + width
  788.     if width < 120
  789.       self.contents.draw_text(xr - 40, y, 40, line_height, actor.cp, 2)
  790.     else
  791.       self.contents.draw_text(xr - 90, y, 40, line_height, actor.cp, 2)
  792.       self.contents.font.color = normal_color
  793.       self.contents.draw_text(xr - 50, y, 10, line_height, "/", 2)
  794.       self.contents.draw_text(xr - 40, y, 40, line_height, actor.maxcp, 2)
  795.     end
  796.     self.contents.font.color = normal_color
  797.   end
  798.   #--------------------------------------------------------------------------
  799.   # ○ CP ゲージの描画
  800.   #     actor : アクター
  801.   #     x     : 描画先 X 座標
  802.   #     y     : 描画先 Y 座標
  803.   #     width : 幅
  804.   #--------------------------------------------------------------------------
  805.   def draw_actor_cp_gauge(actor, x, y, width = 120)
  806.     if KGC::SkillCPSystem::ENABLE_GENERIC_GAUGE && $imported["GenericGauge"]
  807.       # 汎用ゲージ
  808.       draw_gauge(KGC::SkillCPSystem::GAUGE_IMAGE,
  809.         x, y, width, actor.cp, [actor.maxcp, 1].max,
  810.         KGC::SkillCPSystem::GAUGE_OFFSET,
  811.         KGC::SkillCPSystem::GAUGE_LENGTH,
  812.         KGC::SkillCPSystem::GAUGE_SLOPE)
  813.     else
  814.       # デフォルトゲージ
  815.       gw = width * actor.cp / [actor.maxcp, 1].max
  816.       gc1 = cp_gauge_color1
  817.       gc2 = cp_gauge_color2
  818.       self.contents.fill_rect(x, y + line_height - 8, width, 6, gauge_back_color)
  819.       self.contents.gradient_fill_rect(x, y + line_height - 8, gw, 6, gc1, gc2)
  820.     end
  821.   end
  822. end
  823.  
  824.  
  825. #==============================================================================
  826. # ■ Window_MenuCommand
  827. #------------------------------------------------------------------------------
  828. #  メニュー画面で表示するコマンドウィンドウです。
  829. #==============================================================================
  830.  
  831. class Window_MenuCommand < Window_Command
  832.   #--------------------------------------------------------------------------
  833.   # ● 独自コマンドの追加用
  834.   #--------------------------------------------------------------------------
  835.   alias add_original_commands_KGC_SkillCPSystem add_original_commands
  836.   def add_original_commands
  837.     add_original_commands_KGC_SkillCPSystem
  838.     add_command(Vocab.set_battle_skill, :battle_skill, battle_skill_enabled)
  839.   end
  840.   #--------------------------------------------------------------------------
  841.   # ● スキル設定の有効状態を取得
  842.   #--------------------------------------------------------------------------
  843.   def battle_skill_enabled
  844.     KGC::SkillCPSystem::USE_MENU_SET_SKILL_COMMAND  
  845.   end
  846. end
  847. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  848.  
  849. #==============================================================================
  850. # ■ Window_Status
  851. #==============================================================================
  852.  
  853. if KGC::SkillCPSystem::SHOW_STATUS_CP
  854. class Window_Status < Window_Selectable
  855.   #--------------------------------------------------------------------------
  856.   # ● 基本情報の描画
  857.   #     x : 描画先 X 座標
  858.   #     y : 描画先 Y 座標
  859.   #--------------------------------------------------------------------------
  860.   alias draw_basic_info_KGC_SkillCPSystem draw_basic_info
  861.   def draw_basic_info(x, y)
  862.     draw_basic_info_KGC_SkillCPSystem(x, y)
  863.  
  864.     draw_actor_cp(@actor, x, y + line_height * 1)
  865.   end
  866. end
  867. end
  868.  
  869. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  870.  
  871. #==============================================================================
  872. # □ Window_BattleSkillStatus
  873. #------------------------------------------------------------------------------
  874. #   戦闘スキル設定画面で、設定者のステータスを表示するウィンドウです。
  875. #==============================================================================
  876.  
  877. class Window_BattleSkillStatus < Window_Base
  878.   #--------------------------------------------------------------------------
  879.   # ● オブジェクト初期化
  880.   #     x     : ウィンドウの X 座標
  881.   #     y     : ウィンドウの Y 座標
  882.   #     actor : アクター
  883.   #--------------------------------------------------------------------------
  884.   def initialize(x, y, actor)
  885.     super(x, y, Graphics.width, line_height + 32)
  886.     @actor = actor
  887.     refresh
  888.   end
  889.   #--------------------------------------------------------------------------
  890.   # ● リフレッシュ
  891.   #--------------------------------------------------------------------------
  892.   def refresh
  893.     self.contents.clear
  894.     draw_actor_name(@actor, 4, 0)
  895.     draw_actor_level(@actor, 140, 0)
  896.     draw_actor_cp(@actor, 240, 0)
  897.   end
  898.   #--------------------------------------------------------------------------
  899.   # ● アクターの設定
  900.   #--------------------------------------------------------------------------
  901.   def actor=(actor)
  902.     return if @actor == actor
  903.     @actor = actor
  904.     refresh
  905.   end
  906. end
  907.  
  908. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  909.  
  910. #==============================================================================
  911. # □ Window_BattleSkillSlot
  912. #------------------------------------------------------------------------------
  913. #   戦闘スキル選択画面で、設定したスキルの一覧を表示するウィンドウです。
  914. #==============================================================================
  915.  
  916. class Window_BattleSkillSlot < Window_Selectable
  917.   #--------------------------------------------------------------------------
  918.   # ● オブジェクト初期化
  919.   #     x      : ウィンドウの X 座標
  920.   #     y      : ウィンドウの Y 座標
  921.   #     width  : ウィンドウの幅
  922.   #     height : ウィンドウの高さ
  923.   #     actor  : アクター
  924.   #--------------------------------------------------------------------------
  925.   def initialize(x, y, width, height, actor)
  926.     super(x, y, width, height)
  927.     @actor = actor
  928.     self.index = 0
  929.     self.active = false
  930.     refresh
  931.   end
  932.   #--------------------------------------------------------------------------
  933.   # ○ スキルの取得
  934.   #--------------------------------------------------------------------------
  935.   def skill
  936.     return @data[self.index]
  937.   end
  938.   #--------------------------------------------------------------------------
  939.   # ● リフレッシュ
  940.   #--------------------------------------------------------------------------
  941.   def refresh
  942.     @data = []
  943.     skill_ids = @actor.battle_skill_ids
  944.     @actor.battle_skill_max.times { |i|
  945.       if skill_ids[i] != nil
  946.         @data << $data_skills[skill_ids[i]]
  947.       else
  948.         @data << nil
  949.       end
  950.     }
  951.     @item_max = @data.size
  952.     create_contents
  953.     @item_max.times { |i| draw_item(i) }
  954.   end
  955.   #--------------------------------------------------------------------------
  956.   # ● 桁数の取得
  957.   #--------------------------------------------------------------------------
  958.   def col_max
  959.     return 1
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ● 項目数の取得
  963.   #--------------------------------------------------------------------------
  964.   def item_max
  965.     @data ? @data.size : 1
  966.   end
  967.   #--------------------------------------------------------------------------
  968.   # ● 前回の選択位置を復帰
  969.   #--------------------------------------------------------------------------
  970.   def select_last
  971.     select(@data.index(@actor.last_skill.object) || 0)
  972.   end
  973.   #--------------------------------------------------------------------------
  974.   # ● アクターの設定
  975.   #--------------------------------------------------------------------------
  976.   def actor=(actor)
  977.     return if @actor == actor
  978.     @actor = actor
  979.     refresh
  980.   end
  981.   #--------------------------------------------------------------------------
  982.   # ● 決定やキャンセルなどのハンドリング処理
  983.   #--------------------------------------------------------------------------
  984.   alias process_handling_KGC_SkillCPSystem process_handling
  985.   def process_handling
  986.     process_handling_KGC_SkillCPSystem
  987.     return unless open? && active
  988.     return call_handler(:remove_slot) if handle?(:remove_slot) && Input.trigger?(:A)
  989.   end
  990.   #--------------------------------------------------------------------------
  991.   # ● 決定処理の有効状態を取得
  992.   #--------------------------------------------------------------------------
  993.   def ok_enabled?
  994.     handle?(:ok)
  995.   end
  996.   #--------------------------------------------------------------------------
  997.   # ● キャンセル処理の有効状態を取得
  998.   #--------------------------------------------------------------------------
  999.   def cancel_enabled?
  1000.     handle?(:cancel)
  1001.   end
  1002.   #--------------------------------------------------------------------------
  1003.   # ○ 消費 CP 描画判定
  1004.   #--------------------------------------------------------------------------
  1005.   def cp_cost_show?(skill)
  1006.     return true if KGC::SkillCPSystem::SHOW_ZERO_COST
  1007.  
  1008.     return (skill.cp_cost > 0)
  1009.   end
  1010.   #--------------------------------------------------------------------------
  1011.   # ○ 項目の描画
  1012.   #     index : 項目番号
  1013.   #--------------------------------------------------------------------------
  1014.   def draw_item(index)
  1015.     rect = item_rect(index)
  1016.     self.contents.clear_rect(rect)
  1017.     skill = @data[index]
  1018.     if skill != nil
  1019.       rect.width -= 4
  1020.       draw_item_name(skill, rect.x, rect.y)
  1021.       self.contents.draw_text(rect, skill.cp_cost, 2) if cp_cost_show?(skill)
  1022.     else
  1023.       self.contents.draw_text(rect, KGC::SkillCPSystem::BLANK_TEXT, 1)
  1024.     end
  1025.   end
  1026.   #--------------------------------------------------------------------------
  1027.   # ● ヘルプテキスト更新
  1028.   #--------------------------------------------------------------------------
  1029.   def update_help
  1030.     @help_window.set_item(skill)
  1031.     #@help_window.set_text(skill == nil ? "" : skill.description)
  1032.   end
  1033. end
  1034.  
  1035. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1036.  
  1037. #==============================================================================
  1038. # □ Window_BattleSkillList
  1039. #------------------------------------------------------------------------------
  1040. #   戦闘スキル選択画面で、設定できるスキルの一覧を表示するウィンドウです。
  1041. #==============================================================================
  1042.  
  1043. class Window_BattleSkillList < Window_Selectable
  1044.   #--------------------------------------------------------------------------
  1045.   # ● 公開インスタンス変数
  1046.   #--------------------------------------------------------------------------
  1047.   attr_accessor :slot_index               # スロット番号
  1048.   #--------------------------------------------------------------------------
  1049.   # ● オブジェクト初期化
  1050.   #     x      : ウィンドウの X 座標
  1051.   #     y      : ウィンドウの Y 座標
  1052.   #     width  : ウィンドウの幅
  1053.   #     height : ウィンドウの高さ
  1054.   #     actor  : アクター
  1055.   #--------------------------------------------------------------------------
  1056.   def initialize(x, y, width, height, actor)
  1057.     super(x, y, width, height)
  1058.     @actor = actor
  1059.     @slot_index = 0
  1060.     self.index = 0
  1061.     self.active = false
  1062.     refresh
  1063.   end
  1064.   #--------------------------------------------------------------------------
  1065.   # ○ スキルの取得
  1066.   #--------------------------------------------------------------------------
  1067.   def skill
  1068.     return @data[self.index]
  1069.   end
  1070.   #--------------------------------------------------------------------------
  1071.   # ● アクターの設定
  1072.   #--------------------------------------------------------------------------
  1073.   def actor=(actor)
  1074.     return if @actor == actor
  1075.     @actor = actor
  1076.     refresh
  1077.   end
  1078.   #--------------------------------------------------------------------------
  1079.   # ● 前回の選択位置を復帰
  1080.   #--------------------------------------------------------------------------
  1081.   def select_last
  1082.     select(@data.index(@actor.last_skill.object) || 0)
  1083.   end
  1084.   #--------------------------------------------------------------------------
  1085.   # ● 桁数の取得
  1086.   #--------------------------------------------------------------------------
  1087.   def col_max
  1088.     return 1
  1089.   end
  1090.   #--------------------------------------------------------------------------
  1091.   # ● 項目数の取得
  1092.   #--------------------------------------------------------------------------
  1093.   def item_max
  1094.     @data ? @data.size : 1
  1095.   end
  1096.   #--------------------------------------------------------------------------
  1097.   # ● リフレッシュ
  1098.   #--------------------------------------------------------------------------
  1099.   def refresh
  1100.     @data = []
  1101.     # 選択可能なスキルのみを取得
  1102.     @actor.all_skills.each { |skill|
  1103.       @data.push(skill) if selectable?(skill)
  1104.     }
  1105.     @item_max = @data.size
  1106.     create_contents
  1107.     @item_max.times { |i| draw_item(i) }
  1108.   end
  1109.   #--------------------------------------------------------------------------
  1110.   # ○ スキル選択可否判定
  1111.   #     skill : スキル
  1112.   #--------------------------------------------------------------------------
  1113.   def selectable?(skill)
  1114.     return false if skill == nil
  1115.  
  1116.     # 消費 CP 0 なら常に使用可能な場合
  1117.     if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
  1118.       return false
  1119.     end
  1120.     # 戦闘時に使用可能ならOK
  1121.     return true if skill.battle_ok?
  1122.     # 使用不可でもセット可能な場合
  1123.     if KGC::SkillCPSystem::SHOW_UNUSABLE_SKILL && skill.occasion == 3
  1124.       return true
  1125.     end
  1126.  
  1127.     return false
  1128.   end
  1129.   #--------------------------------------------------------------------------
  1130.   # ○ 消費 CP 描画判定
  1131.   #--------------------------------------------------------------------------
  1132.   def cp_cost_show?(skill)
  1133.     return true if KGC::SkillCPSystem::SHOW_ZERO_COST
  1134.  
  1135.     return (skill.cp_cost > 0)
  1136.   end
  1137.   #--------------------------------------------------------------------------
  1138.   # ○ 項目の描画
  1139.   #     index : 項目番号
  1140.   #--------------------------------------------------------------------------
  1141.   def draw_item(index)
  1142.     rect = item_rect(index)
  1143.     self.contents.clear_rect(rect)
  1144.     skill = @data[index]
  1145.     if skill != nil
  1146.       rect.width -= 4
  1147.       enabled = @actor.battle_skill_settable?(@slot_index, skill)
  1148.       draw_item_name(skill, rect.x, rect.y, enabled)
  1149.       self.contents.draw_text(rect, skill.cp_cost, 2) if cp_cost_show?(skill)
  1150.     else
  1151.       self.contents.draw_text(rect, KGC::SkillCPSystem::RELEASE_TEXT, 1)
  1152.     end
  1153.   end
  1154.  
  1155.   #--------------------------------------------------------------------------
  1156.   # ● ヘルプテキスト更新
  1157.   #--------------------------------------------------------------------------
  1158.   def update_help
  1159.     @help_window.set_item(skill)
  1160.     #@help_window.set_text(skill == nil ? "" : skill.description)
  1161.   end
  1162. end
  1163.  
  1164. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1165.  
  1166. #==============================================================================
  1167. # ■ Scene_Menu
  1168. #==============================================================================
  1169.  
  1170. class Scene_Menu < Scene_MenuBase
  1171.  
  1172.   #--------------------------------------------------------------------------
  1173.   # ● コマンドウィンドウの作成
  1174.   #--------------------------------------------------------------------------
  1175.   alias create_command_window_KGC_SkillCPSystem create_command_window
  1176.   def create_command_window
  1177.     create_command_window_KGC_SkillCPSystem
  1178.     if KGC::SkillCPSystem::USE_MENU_SET_SKILL_COMMAND  
  1179.       @command_window.set_handler(:battle_skill,    method(:command_personal))
  1180.     end
  1181.   end
  1182.   #--------------------------------------------------------------------------
  1183.   # ● 個人コマンド[決定]
  1184.   #--------------------------------------------------------------------------
  1185.   alias on_personal_ok_KGC_SkillCPSystem on_personal_ok
  1186.   def on_personal_ok
  1187.     on_personal_ok_KGC_SkillCPSystem
  1188.     case @command_window.current_symbol
  1189.     when :battle_skill
  1190.       SceneManager.call(Scene_SetBattleSkill)
  1191.     end
  1192.   end
  1193.   #--------------------------------------------------------------------------
  1194.   # ● コマンド[スキル設定]
  1195.   #--------------------------------------------------------------------------
  1196.   def command_set_battle_skill
  1197.     SceneManager.call(Scene_SetBattleSkill)
  1198.   end
  1199. end
  1200.  
  1201. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1202.  
  1203. #==============================================================================
  1204. # □ Scene_SetBattleSkill
  1205. #------------------------------------------------------------------------------
  1206. #   戦闘スキル設定画面の処理を行うクラスです。
  1207. #==============================================================================
  1208.  
  1209. class Scene_SetBattleSkill < Scene_MenuBase
  1210.   #--------------------------------------------------------------------------
  1211.   # ○ 定数
  1212.   #--------------------------------------------------------------------------
  1213.   HOST_MENU   = 0  # 呼び出し元 : メニュー
  1214.   HOST_MAP    = 1  # 呼び出し元 : マップ
  1215.   #--------------------------------------------------------------------------
  1216.   # ● 開始処理
  1217.   #--------------------------------------------------------------------------
  1218.   def start
  1219.     super
  1220.     create_background
  1221.     create_help_window
  1222.     create_status_window
  1223.     create_slot_window
  1224.     create_list_window
  1225.   end
  1226.   #--------------------------------------------------------------------------
  1227.   # ● ヘルプウィンドウの作成
  1228.   #--------------------------------------------------------------------------
  1229.   def create_help_window
  1230.     @help_window = Window_Help.new
  1231.     @help_window.viewport = @viewport
  1232.   end
  1233.   #--------------------------------------------------------------------------
  1234.   # ● ステータスウィンドウの作成
  1235.   #--------------------------------------------------------------------------
  1236.   def create_status_window
  1237.     dy = @help_window.height
  1238.     @status_window = Window_BattleSkillStatus.new(0, dy, @actor)
  1239.   end
  1240.   #--------------------------------------------------------------------------
  1241.   # ● スロットウィンドウの作成
  1242.   #--------------------------------------------------------------------------
  1243.   def create_slot_window
  1244.     dy = @help_window.height + @status_window.height
  1245.     @slot_window = Window_BattleSkillSlot.new(
  1246.       0,
  1247.       dy,
  1248.       Graphics.width / 2,
  1249.       Graphics.height - dy,
  1250.       @actor)
  1251.     @slot_window.activate
  1252.     @slot_window.help_window = @help_window
  1253.     @slot_window.set_handler(:ok,    method(:on_slot_skill))
  1254.     @slot_window.set_handler(:remove_slot,    method(:remove_skill))
  1255.     @slot_window.set_handler(:cancel,   method(:return_scene))
  1256.     @slot_window.set_handler(:pagedown, method(:next_actor))
  1257.     @slot_window.set_handler(:pageup,   method(:prev_actor))
  1258.     @slot_window.select_last
  1259.   end
  1260.   #--------------------------------------------------------------------------
  1261.   # ● アクターの切り替え
  1262.   #--------------------------------------------------------------------------
  1263.   def on_actor_change
  1264.     @status_window.actor = @actor
  1265.     @slot_window.actor = @actor
  1266.     @list_window.actor = @actor
  1267.     @slot_window.activate
  1268.     refresh_window
  1269.   end
  1270.   #--------------------------------------------------------------------------
  1271.   # ● スキルの選択
  1272.   #--------------------------------------------------------------------------
  1273.   def on_slot_skill
  1274.     Sound.play_ok
  1275.     # リストウィンドウに切り替え
  1276.     @slot_window.deactivate
  1277.     @list_window.activate
  1278.   end
  1279.   #--------------------------------------------------------------------------
  1280.   # ● スキルを外す
  1281.   #--------------------------------------------------------------------------
  1282.   def remove_skill
  1283.     # 選択しているスキルを外す
  1284.     Sound.play_ok
  1285.     @actor.remove_battle_skill(@slot_window.index)
  1286.     refresh_window
  1287.   end
  1288.   #--------------------------------------------------------------------------
  1289.   # ● リストウィンドウの作成
  1290.   #--------------------------------------------------------------------------
  1291.   def create_list_window
  1292.     dy = @help_window.height + @status_window.height
  1293.     @list_window = Window_BattleSkillList.new(
  1294.       Graphics.width - @slot_window.width,
  1295.       dy,
  1296.       Graphics.width - @slot_window.width,
  1297.       Graphics.height - dy,
  1298.       @actor)
  1299.     @list_window.help_window = @help_window
  1300.     @list_window.set_handler(:ok,    method(:on_set_list_skill))
  1301.     @list_window.set_handler(:cancel,   method(:cancel_list_window))
  1302.     @list_window.select_last
  1303.   end
  1304.   #--------------------------------------------------------------------------
  1305.   # ● スキルリストからの選択
  1306.   #--------------------------------------------------------------------------
  1307.   def on_set_list_skill
  1308.     skill = @list_window.skill
  1309.     # セットできない場合
  1310.     unless @actor.battle_skill_settable?(@slot_window.index, skill)
  1311.       Sound.play_buzzer
  1312.       @slot_window.activate
  1313.       @list_window.deactivate
  1314.       return
  1315.     end
  1316.     Sound.play_ok
  1317.     set_skill(@slot_window.index, skill)
  1318.     # スロットウィンドウに切り替え
  1319.     @slot_window.activate
  1320.     @list_window.deactivate
  1321.   end
  1322.   #--------------------------------------------------------------------------
  1323.   # ● スキルリストから戻る
  1324.   #--------------------------------------------------------------------------
  1325.   def cancel_list_window
  1326.     Sound.play_cancel
  1327.     # スロットウィンドウに切り替え
  1328.     @slot_window.activate
  1329.     @list_window.deactivate
  1330.   end
  1331.  
  1332.   #--------------------------------------------------------------------------
  1333.   # ● 終了処理
  1334.   #--------------------------------------------------------------------------
  1335.   def terminate
  1336.     super
  1337.     dispose_background
  1338.     @help_window.dispose
  1339.     @status_window.dispose
  1340.     @slot_window.dispose
  1341.     @list_window.dispose
  1342.   end
  1343.   #--------------------------------------------------------------------------
  1344.   # ○ ウィンドウ再描画
  1345.   #--------------------------------------------------------------------------
  1346.   def refresh_window
  1347.     @status_window.refresh
  1348.     @slot_window.refresh
  1349.     @list_window.refresh
  1350.   end
  1351.  
  1352.   #--------------------------------------------------------------------------
  1353.   # ○ スキル設定
  1354.   #     index : 設定する場所
  1355.   #     skill : 設定するスキル
  1356.   #--------------------------------------------------------------------------
  1357.   def set_skill(index, skill)
  1358.     @actor.remove_battle_skill(index)
  1359.     if skill != nil
  1360.       @actor.set_battle_skill(index, skill)
  1361.     end
  1362.     refresh_window
  1363.   end
  1364.  
  1365. end
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

3
发表于 2014-8-18 09:04:46 | 只看该作者
把你正在制作的VA工程也发出来吧。包括所有导入的脚本和运行游戏必须的素材。

先声明:我说这句话不代表我一定会帮你做。
回复 支持 反对

使用道具 举报

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
4
发表于 2014-8-18 09:36:51 | 只看该作者
悬赏的vip在哪
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
5
 楼主| 发表于 2014-8-18 09:42:57 | 只看该作者
taroxd 发表于 2014-8-18 09:04
把你正在制作的VA工程也发出来吧。包括所有导入的脚本和运行游戏必须的素材。

先声明:我说这句话不代表我 ...

http://pan.baidu.com/s/1eQkXbA6
那个……说实话,这个不是现在正在做的
原本是两年前开的坑,后来毕业中断了,工作稳定之后又重新拾起来
自检了一下感觉……呃,眼高手低?总之无用的构思铺的太多,有生之年系列……
所以现在想先做个小短篇练练手,熟悉一下需要的脚本和希望完成的系统(除了新工程和一个测试脚本的房间还啥都没做,不过整体系统上是准备采用一样的构造),因此先传了这个
当初还想……因此还去学3D定制少女做cg……总之现在想想……都是年轻犯的错啊……

……现在回头看看超羞耻啊!说都说不出来总之就是好害羞啊!游戏也不是一定要发出来给大家玩嘛反正我有个什么想法然后做到游戏里面这个过程就很开心啦为什么还要玩羞耻play啊!

点评

我要的就是那个“新工程和一个测试脚本的房间”啊233  发表于 2014-8-18 09:56
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
6
 楼主| 发表于 2014-8-18 10:03:51 | 只看该作者
taroxd 发表于 2014-8-18 09:04
把你正在制作的VA工程也发出来吧。包括所有导入的脚本和运行游戏必须的素材。

先声明:我说这句话不代表我 ...

http://pan.baidu.com/s/1gdveybD
真是的……那我之前忍着羞耻心纠结那么半天算什么……
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

7
发表于 2014-8-18 10:28:11 | 只看该作者
本帖最后由 taroxd 于 2014-8-18 12:04 编辑
白玉楼的台阶 发表于 2014-8-18 10:03
http://pan.baidu.com/s/1gdveybD
真是的……那我之前忍着羞耻心纠结那么半天算什么…… ...


我也没有仔细研究这个系统,在你的工程上简单地测试了一下,貌似没什么问题。

钱的话你自己摸着良心随便给点吧= = 看在我翻了翻CP脚本的份上= = 好吧我承认我基本没做什么事情,都不好意思开价了。支付宝账号:[email protected]

小小的注意事项:不要把【特性】中添加的技能做成被动技能。要用被动技能的话,就让角色学会而不是装备附加吧。

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● 使用方法:在技能上备注<passive x>,
  3. #              表示习得该技能等同于装备了x号武器。
  4. #--------------------------------------------------------------------------
  5.  
  6. class RPG::Skill
  7.   def passive
  8.     @passive ||= @note =~ /<passive\s*(\d+)>/ ? $1.to_i : 0
  9.   end
  10. end
  11.  
  12. class Game_Actor < Game_Battler
  13.   #--------------------------------------------------------------------------
  14.   # ● 带有被动技能效果的所有实例
  15.   #--------------------------------------------------------------------------
  16.   def passive_objects
  17.     battle_skill_ids.compact.map {|id| $data_skills[id] }
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 以数组方式获取拥有特性所有实例
  21.   #--------------------------------------------------------------------------
  22.   alias fo_20140818 feature_objects
  23.   def feature_objects
  24.     fo_20140818 + passive_weapons
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 获取普通能力的附加值
  28.   #--------------------------------------------------------------------------
  29.   alias pp_20140818 param_plus
  30.   def param_plus(param_id)
  31.     passive_weapons.inject(pp_20140818(param_id)) {|a, item| a + item.params[param_id] }
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 被动技能/状态对应的武器实例构成的数组
  35.   #--------------------------------------------------------------------------
  36.   def passive_weapons
  37.     passive_objects.map {|obj| $data_weapons[obj.passive] }.compact
  38.   end
  39. end
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
8
 楼主| 发表于 2014-8-18 12:08:03 | 只看该作者
“报错的那一行改成这样
battle_skill_ids.compact.map {|id| $data_skills[id] }”
亲测有效,问题已解决,非常感谢
这贴炸不炸随意,这个脚本可以分享给需要的人,我不介意
以上,修改帖子分类吧
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 11:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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