Project1

标题: 求装备附带技能的脚本 [打印本页]

作者: sqz1000    时间: 2008-2-10 20:27
标题: 求装备附带技能的脚本
希望效果为:
1装备装备后可附带1个以上的技能即可,暂时就是如此,PLEASE
作者: 诡异の猫    时间: 2008-2-10 20:34
备注能帮上很大的忙
RMVX的备注是一个很强大的东西
先占个楼
作者: 死圣    时间: 2008-2-10 20:38
可不可以不用脚本撒
作者: 雪流星    时间: 2008-2-10 21:29
スキル習得装備(VX 専用)

スキル習得装備(VX 専用) 就是习得技能装备的意思

正在汉化中…

汉化好了贴上来
作者: 鸭狐    时间: 2008-2-10 21:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: sqz1000    时间: 2008-2-10 22:31
不用脚本?备注?以可以啊,还有用技能习得的脚本,哪个 效率高i用哪个
作者: 雪流星    时间: 2008-2-10 23:03
汉化结束{/cy}

说明请看注释

太长了
用txt档上传

http://rpg.blue/upload_program/f ... _equip_83084504.txt

这个脚本正是用备注
作者: sqz1000    时间: 2008-2-11 00:16
点开后没有自动换行/。//
作者: 雪流星    时间: 2008-2-11 00:22
以下引用sqz1000于2008-2-10 16:16:32的发言:
<点开后没有自动换行/。//


什麽东西没有换行??

连结应该没问题吧?
作者: sqz1000    时间: 2008-2-11 00:23
连接点开后,密密麻麻一片脚本
作者: sqz1000    时间: 2008-2-11 00:24
没换行,看起来晕乎~
作者: 死圣    时间: 2008-2-11 00:34
应该可以用事件作吧
作者: sqz1000    时间: 2008-2-11 00:51
snstar2006女侠。我希望保存这个脚本,装备该物品时,就有技能;
能去掉关于AP学习技能的内容吗。
作者: 雪流星    时间: 2008-2-11 01:00
以下引用sqz1000于2008-2-10 16:24:31的发言:
没换行,看起来晕乎~


不用管他换不换行
先复制到工程里看就比较好些了。

使用方法

如果你只需要「装备附带技能」这种简单的功能而已的话

要附带技能的装备
在数据库中的备注栏设置
        <learn_skill n>
n代表要学习的技能的ID

接着在要学习的技能里的备注栏设置
        <need_ap 0>

在来打开脚本编辑器
59行
  USE_MENU_AP_VIEWER_COMMAND = true
改成
  USE_MENU_AP_VIEWER_COMMAND = false



如果你想要更复杂的功能
在技能的备注里设置<need_ap 20>
那麽此技能就需要赚取到20点AP来学习
那麽设置就更复杂(还要设置敌人之类的)



[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: sqz1000    时间: 2008-2-11 01:14
十分感谢= =,用你的方法把日文版的脚本激活了,您的TXT复制到脚本里只有1行超长的,我还不知道怎么弄。
作者: 雪流星    时间: 2008-2-11 01:37
您的TXT复制到脚本里只有1行超长的


不会吧
帮你贴上来算了
分两次贴应该够了

  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ スキル習得装備 - KGC_EquipLearnSkill ◆ VX ◆
  3. #_/    ◇ Last update : 2008/02/06 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  スキルを習得する装備品を作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. $data_system = load_data("Data/System.rvdata") if $data_system == nil

  8. #==============================================================================
  9. # ★ カスタマイズ項目 - Customize ★
  10. #==============================================================================

  11. module KGC
  12. module EquipLearnSkill
  13.   # ◆ AP の名称
  14.   #  ゲーム中の表記のみ変化。
  15.   # ◆ AP的名称
  16.   #  在游戏中显现ㄉ的名称
  17.   VOCAB_AP     = "AP"
  18.   
  19.   # ◆ AP のデフォルト値
  20.   #  所持 AP を指定しなかったエネミーの AP。
  21.   # ◆ AP预设值
  22.   #  没有设定AP值的敌人所持有的AP
  23.   DEFAULT_AP   = 1
  24.   
  25.   
  26.   # ◆ 装備しただけでは習得しない
  27.   #  true にすると、AP が溜まるまでスキルを使用できない。
  28.   # ◆ 由装備所习得的技能设定
  29.   #  true 当AP未满时不能使用技能。
  30.   NEED_FULL_AP = false

  31.   # ◆ リザルト画面での獲得 AP の表示
  32.   #  %s : 獲得した AP
  33.   # ◆ 获得AP时显示的文字
  34.   #  %s : 獲得 AP 数量
  35.   VOCAB_RESULT_OBTAIN_AP         = "獲得 %s 点 #{VOCAB_AP}!"
  36.   
  37.   # ◆ リザルト画面でスキルをマスターした際のメッセージ
  38.   #  %s : アクター名
  39.   # ◆ 学会技能时显现的文字
  40.   #  %s : 角色名称
  41.   VOCAB_RESULT_MASTER_SKILL      = "角色%s"
  42.   # ◆ リザルト画面でマスターしたスキルの表示
  43.   #  %s : マスターしたスキルの名前
  44.   # ◆ 显示学会的技能的名称文字
  45.   #  %s : 角色学会的技能名称
  46.   VOCAB_RESULT_MASTER_SKILL_NAME = "领悟%s!"

  47.   # ◆ メニュー画面に「AP ビューア」コマンドを追加する
  48.   #  追加する場所は、メニューコマンドの最下部です。
  49.   #  他の部分に追加したければ、≪カスタムメニューコマンド≫ をご利用ください。
  50.   
  51.   # ◆ 增加AP察看菜单选项
  52.   #  置於菜单选项最下面
  53.   #  他の部分に追加したければ、≪カスタムメニューコマンド≫ をご利用ください。
  54.   USE_MENU_AP_VIEWER_COMMAND = true
  55.   
  56.   # ◆ メニュー画面の「AP ビューア」コマンドの名称
  57.   # ◆ 在菜单画面查看AP画面的指令名称
  58.   VOCAB_MENU_AP_VIEWER       = "察看 #{VOCAB_AP} 状态"

  59.   # ◆ マスター(完全習得)したスキルの AP 欄
  60.   # ◆ 技能完全学会时在 AP 欄显示的文字
  61.   VOCAB_MASTER_SKILL      = " - 已学会 - "
  62.   
  63.   # ◆ 蓄積 AP が 0 のスキルも AP ビューアに表示
  64.   # ◆ 显示不需积蓄AP的技能。(false的话会忽视而不显现)
  65.   SHOW_ZERO_AP_SKILL      = true
  66.   
  67.   # ◆ 蓄積 AP が 0 のスキルの名前を隠す
  68.   # ◆ 屏蔽不需积蓄AP的技能。(false的话会忽视而显现)
  69.   MASK_ZERO_AP_SKILL_NAME = true
  70.   
  71.   # ◆ 累積 AP が 0 のスキルに表示する名前
  72.   #  1文字だけ指定すると、スキル名と同じ長さに拡張されます。
  73.   # ◆ 屏蔽不需积蓄AP的技能时所用的文字
  74.   #  只需要指定一个字符,它会自动替代与技能名称同长的字串
  75.   ZERO_AP_NAME_MASK       = "?"
  76.   
  77.   # ◆ 累積 AP が 0 のスキルのヘルプを隠す
  78.   # ◆ 屏蔽不需积蓄AP的技能的说明
  79.   HIDE_ZERO_AP_SKILL_HELP = true
  80.   
  81.   # ◆ 累積 AP が 0 のスキルに表示するヘルプ
  82.   # ◆ 屏蔽不需积蓄AP的技能的说明时所用的文字
  83.   ZERO_AP_SKILL_HELP      = "????????"

  84.   # ◆ 除外装備品配列
  85.   #  配列の添字がアクター ID に対応。
  86.   #  習得装備から除外する武器・防具の ID を配列に格納。
  87.   # ◆ 设置例外装備
  88.   #  数组内的数字与角色ID对应
  89.   #  赋值的数组内的数字与装备ID对应
  90.   EXCLUDE_WEAPONS = []  # 武器
  91.   EXCLUDE_ARMORS  = []  # 防具
  92.   
  93.   # ここから下に定義。
  94.   #  <例>
  95.   #  アクターID:1 は、武器ID:50 と 70 のスキルを習得できない。
  96.   # EXCLUDE_WEAPONS[1] = [50, 70]
  97.   # 设置方式如下。
  98.   #  <例>
  99.   # 1 号角色 无法习得  50和70号武器的技能, 就是:
  100.   # EXCLUDE_WEAPONS[1] = [50, 70]

  101.   # ◆ 除外スキル配列
  102.   #  配列の添字がアクター ID と対応。
  103.   #  装備では習得不可能にするスキル ID を配列に格納。
  104.   # ◆ 设置例外技能
  105.   #  数组内的数字与角色ID对应
  106.   #  赋值的数组内的数字与技能ID对应
  107.   EXCLUDE_SKILLS = []
  108.   #  <例>
  109.   #  アクターID:1 は、スキルID:30 を装備品で習得することはできない。
  110.   # EXCLUDE_SKILLS[1] = [30]
  111.   #  <例>
  112.   #  1号角色 装备了任何装备都无法习得30号技能,就是:
  113.   # EXCLUDE_SKILLS[1] = [30]
  114. end
  115. end
  116. #==============================================================================
  117. #          设置结束
  118. #==============================================================================
  119. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  120. $imported = {} if $imported == nil
  121. $imported["EquipLearnSkill"] = true

  122. module KGC::EquipLearnSkill
  123.   # 正規表現
  124.   module Regexp
  125.     # ベースアイテム
  126.     module BaseItem
  127.       # 習得スキル
  128.       LEARN_SKILL = /<(?:LEARN_SKILL|スキル習得)[ ]*(\d+(?:[ ]*,[ ]*\d+)*)>/i
  129.     end

  130.     # スキル
  131.     module Skill
  132.       # 必要 AP
  133.       NEED_AP = /<(?:NEED_AP|必要AP)[ ]*(\d+)>/i
  134.     end

  135.     # エネミー
  136.     module Enemy
  137.       # 所持 AP
  138.       AP = /<AP[ ]*(\d+)>/i
  139.     end
  140.   end
  141. end

  142. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  143. #==============================================================================
  144. # □ KGC::Commands
  145. #==============================================================================

  146. module KGC::Commands
  147.   module_function
  148.   #--------------------------------------------------------------------------
  149.   # ○ AP の獲得
  150.   #     actor_id : アクター ID
  151.   #     ap       : 獲得 AP
  152.   #     show     : マスター表示フラグ
  153.   #--------------------------------------------------------------------------
  154.   def gain_actor_ap(actor_id, ap, show = false)
  155.     $game_actors[actor_id].gain_ap(ap, show)
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ○ AP の変更
  159.   #     actor_id : アクター ID
  160.   #     skill_id : スキル ID
  161.   #     ap       : AP
  162.   #--------------------------------------------------------------------------
  163.   def change_actor_ap(actor_id, skill_id, ap)
  164.     skill = $data_skills[skill_id]
  165.     return if skill == nil
  166.     $game_actors[actor_id].change_ap(skill, ap)
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ○ AP ビューアの呼び出し
  170.   #     actor_index : アクターインデックス
  171.   #--------------------------------------------------------------------------
  172.   def call_ap_viewer(actor_index = 0)
  173.     return if $game_temp.in_battle
  174.     $game_temp.next_scene = :ap_viewer
  175.     $game_temp.next_scene_actor_index = actor_index
  176.   end
  177. end

  178. class Game_Interpreter
  179.   include KGC::Commands
  180. end

  181. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  182. #==============================================================================
  183. # ■ Vocab
  184. #==============================================================================

  185. module Vocab
  186.   # 戦闘終了メッセージ
  187.   ObtainAP              = KGC::EquipLearnSkill::VOCAB_RESULT_OBTAIN_AP
  188.   ResultFullAPSkill     = KGC::EquipLearnSkill::VOCAB_RESULT_MASTER_SKILL
  189.   ResultFullAPSkillName = KGC::EquipLearnSkill::VOCAB_RESULT_MASTER_SKILL_NAME

  190.   # AP
  191.   def self.ap
  192.     return KGC::EquipLearnSkill::VOCAB_AP
  193.   end

  194.   # マスターしたスキル
  195.   def self.full_ap_skill
  196.     return KGC::EquipLearnSkill::VOCAB_MASTER_SKILL
  197.   end

  198.   # AP ビューア
  199.   def self.ap_viewer
  200.     return KGC::EquipLearnSkill::VOCAB_MENU_AP_VIEWER
  201.   end
  202. end

  203. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  204. #==============================================================================
  205. # ■ RPG::BaseItem
  206. #==============================================================================

  207. class RPG::BaseItem
  208.   #--------------------------------------------------------------------------
  209.   # ○ スキル習得装備のキャッシュ生成
  210.   #--------------------------------------------------------------------------
  211.   def create_equip_learn_skill_cache
  212.     @__learn_skills = []

  213.     self.note.split(/[\r\n]+/).each { |line|
  214.       case line
  215.       when KGC::EquipLearnSkill::Regexp::BaseItem::LEARN_SKILL  # スキル習得
  216.         $1.scan(/\d+/).each { |num|
  217.           skill_id = num.to_i
  218.           # 存在するスキルならリストに加える
  219.           @__learn_skills << skill_id if $data_skills[skill_id] != nil
  220.         }
  221.       end
  222.     }
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ○ 習得するスキル ID の配列
  226.   #--------------------------------------------------------------------------
  227.   def learn_skills
  228.     create_equip_learn_skill_cache if @__learn_skills == nil
  229.     return @__learn_skills
  230.   end
  231. end

  232. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  233. #==============================================================================
  234. # ■ RPG::Skill
  235. #==============================================================================

  236. class RPG::Skill < RPG::UsableItem
  237.   #--------------------------------------------------------------------------
  238.   # ○ クラス変数
  239.   #--------------------------------------------------------------------------
  240.   @@__masked_name =
  241.     KGC::EquipLearnSkill::ZERO_AP_NAME_MASK  # マスク名
  242.   @@__expand_masked_name = false             # マスク名拡張表示フラグ

  243.   if @@__expand_masked_name != nil
  244.     @@__expand_masked_name = (@@__masked_name.scan(/./).size == 1)
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ○ スキル習得装備のキャッシュ生成
  248.   #--------------------------------------------------------------------------
  249.   def create_equip_learn_skill_cache
  250.     @__need_ap = 0

  251.     self.note.split(/[\r\n]+/).each { |line|
  252.       case line
  253.       when KGC::EquipLearnSkill::Regexp::Skill::NEED_AP  # 必要 AP
  254.         @__need_ap = $1.to_i
  255.       end
  256.     }
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ○ マスク名
  260.   #--------------------------------------------------------------------------
  261.   def masked_name
  262.     if KGC::EquipLearnSkill::MASK_ZERO_AP_SKILL_NAME
  263.       if @@__expand_masked_name
  264.         # マスク名を拡張して表示
  265.         return @@__masked_name * self.name.scan(/./).size
  266.       else
  267.         return @@__masked_name
  268.       end
  269.     else
  270.       return self.name
  271.     end
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ○ 習得に必要な AP
  275.   #--------------------------------------------------------------------------
  276.   def need_ap
  277.     create_equip_learn_skill_cache if @__need_ap == nil
  278.     return @__need_ap
  279.   end
  280. end

  281. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  282. #==============================================================================
  283. # ■ RPG::Enemy
  284. #==============================================================================

  285. class RPG::Enemy
  286.   #--------------------------------------------------------------------------
  287.   # ○ スキル習得装備のキャッシュ生成
  288.   #--------------------------------------------------------------------------
  289.   def create_equip_learn_skill_cache
  290.     @__ap = KGC::EquipLearnSkill::DEFAULT_AP

  291.     self.note.split(/[\r\n]+/).each { |line|
  292.       case line
  293.       when KGC::EquipLearnSkill::Regexp::Enemy::AP  # 所持 AP
  294.         @__ap = $1.to_i
  295.       end
  296.     }
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ○ 所持 AP
  300.   #--------------------------------------------------------------------------
  301.   def ap
  302.     create_equip_learn_skill_cache if @__ap == nil
  303.     return @__ap
  304.   end
  305. end

  306. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  307. #==============================================================================
  308. # ■ Game_Temp
  309. #==============================================================================

  310. unless $imported["CustomMenuCommand"]
  311. class Game_Temp
  312.   #--------------------------------------------------------------------------
  313.   # ● 公開インスタンス変数
  314.   #--------------------------------------------------------------------------
  315.   attr_accessor :next_scene_actor_index   # 次のシーンのアクターインデックス
  316.   #--------------------------------------------------------------------------
  317.   # ● オブジェクト初期化
  318.   #--------------------------------------------------------------------------
  319.   alias initialize_KGC_EquipLearnSkill initialize
  320.   def initialize
  321.     initialize_KGC_EquipLearnSkill

  322.     @next_scene_actor_index = 0
  323.   end
  324. end
  325. end

  326. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  327. #==============================================================================
  328. # ■ Game_Actor
  329. #==============================================================================

  330. class Game_Actor < Game_Battler
  331.   #--------------------------------------------------------------------------
  332.   # ● セットアップ
  333.   #     actor_id : アクター ID
  334.   #--------------------------------------------------------------------------
  335.   alias setup_KGC_EquipLearnSkill setup
  336.   def setup(actor_id)
  337.     setup_KGC_EquipLearnSkill(actor_id)

  338.     @skill_ap = []
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ○ 指定スキルの AP 取得
  342.   #     skill_id : スキル ID
  343.   #--------------------------------------------------------------------------
  344.   def skill_ap(skill_id)
  345.     @skill_ap = [] if @skill_ap == nil
  346.     return (@skill_ap[skill_id] != nil ? @skill_ap[skill_id] : 0)
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ○ AP 変更
  350.   #     skill : スキル
  351.   #     ap    : 新しい AP
  352.   #--------------------------------------------------------------------------
  353.   def change_ap(skill, ap)
  354.     @skill_ap = [] if @skill_ap == nil
  355.     @skill_ap[skill.id] = [[ap, skill.need_ap].min, 0].max
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ○ マスターしたスキルの表示
  359.   #     new_skills : 新しくマスターしたスキルの配列
  360.   #--------------------------------------------------------------------------
  361.   def display_full_ap_skills(new_skills)
  362.     $game_message.new_page
  363.     text = sprintf(Vocab::ResultFullAPSkill, name)
  364.     $game_message.texts.push(text)
  365.     new_skills.each { |skill|
  366.       text = sprintf(Vocab::ResultFullAPSkillName, skill.name)
  367.       $game_message.texts.push(text)
  368.     }
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ○ AP 獲得
  372.   #     ap   : AP の増加量
  373.   #     show : マスタースキル表示フラグ
  374.   #--------------------------------------------------------------------------
  375.   def gain_ap(ap, show)
  376.     last_full_ap_skills = full_ap_skills

  377.     # 装備品により習得しているスキルに AP を加算
  378.     equipment_skills(true).each { |skill|
  379.       change_ap(skill, skill_ap(skill.id) + ap)
  380.     }

  381.     # マスターしたスキルを表示
  382.     if show && last_full_ap_skills != full_ap_skills
  383.       display_full_ap_skills(full_ap_skills - last_full_ap_skills)
  384.     end
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # ● スキルオブジェクトの配列取得
  388.   #--------------------------------------------------------------------------
  389.   alias skills_KGC_EquipLearnSkill skills
  390.   def skills
  391.     result = skills_KGC_EquipLearnSkill

  392.     # 装備品と AP 蓄積済みのスキルを追加
  393.     additional_skills = equipment_skills | full_ap_skills
  394.     return (result | additional_skills).sort { |a, b| a.id <=> b.id }
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ○ 装備品の習得スキル取得
  398.   #     all : 使用不可能なスキルも含める
  399.   #--------------------------------------------------------------------------
  400.   def equipment_skills(all = false)
  401.     result = []
  402.     equips.compact.each { |item|
  403.       next if exclude_learnable_equipment?(item)       # 除外装備なら無視

  404.       item.learn_skills.each { |i|
  405.         skill = $data_skills[i]
  406.         next if exclude_equipment_skill?(skill)        # 除外スキルなら無視
  407.         if !all && KGC::EquipLearnSkill::NEED_FULL_AP  # 要蓄積の場合
  408.           next unless ap_full?(skill)                   # 未達成なら無視
  409.         end
  410.         result << skill
  411.       }
  412.     }
  413.     return result
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ○ スキル習得装備除外判定
  417.   #     item : 判定装備
  418.   #--------------------------------------------------------------------------
  419.   def exclude_learnable_equipment?(item)
  420.     case item
  421.     when RPG::Weapon  # 武器
  422.       # 除外武器に含まれている場合
  423.       if KGC::EquipLearnSkill::EXCLUDE_WEAPONS[id] != nil &&
  424.           KGC::EquipLearnSkill::EXCLUDE_WEAPONS[id].include?(item.id)
  425.         return true
  426.       end
  427.     when RPG::Armor   # 防具
  428.       # 除外防具に含まれている場合
  429.       if KGC::EquipLearnSkill::EXCLUDE_ARMORS[id] != nil &&
  430.           KGC::EquipLearnSkill::EXCLUDE_ARMORS[id].include?(item.id)
  431.         return true
  432.       end
  433.     else              # 装備品以外
  434.       return true
  435.     end

  436.     return false
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ○ 装備品による習得スキル除外判定
  440.   #     skill : スキル
  441.   #--------------------------------------------------------------------------
  442.   def exclude_equipment_skill?(skill)
  443.     # 自身が除外されている場合
  444.     if KGC::EquipLearnSkill::EXCLUDE_SKILLS[id] != nil &&
  445.         KGC::EquipLearnSkill::EXCLUDE_SKILLS[id].include?(skill.id)
  446.       return true
  447.     end

  448.     return false
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ○ AP 蓄積済みのスキルを取得
  452.   #--------------------------------------------------------------------------
  453.   def full_ap_skills
  454.     result = []
  455.     (1...$data_skills.size).each { |i|
  456.       skill = $data_skills[i]
  457.       result << skill if ap_full?(skill) && !exclude_equipment_skill?(skill)
  458.     }
  459.     return result
  460.   end
  461.   #--------------------------------------------------------------------------
  462.   # ○ AP 蓄積可能なスキルを取得
  463.   #--------------------------------------------------------------------------
  464.   def can_gain_ap_skills
  465.     result = []
  466.     equips.compact.each { |item|
  467.       next if exclude_learnable_equipment?(item)  # 除外装備なら無視

  468.       item.learn_skills.each { |i|
  469.         skill = $data_skills[i]
  470.         next if exclude_equipment_skill?(skill)   # 除外スキルなら無視
  471.         result << skill
  472.       }
  473.     }
  474.     return (result - full_ap_skills)              # マスターしたものを除く
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ○ AP 蓄積済み判定
  478.   #     skill : スキル
  479.   #--------------------------------------------------------------------------
  480.   def ap_full?(skill)
  481.     return false if skill == nil                  # スキルが存在しない
  482.     return false if skill.need_ap == 0            # 必要 AP が 0
  483.     return false if @skills.include?(skill.id)    # 習得済み

  484.     return (skill_ap(skill.id) >= skill.need_ap)
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ● スキルの使用可能判定
  488.   #     skill : スキル
  489.   #--------------------------------------------------------------------------
  490.   def skill_can_use?(skill)
  491.     return super
  492.   end
  493. end
复制代码

作者: 雪流星    时间: 2008-2-11 01:38
紧接着下去的:


  1. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  2. #==============================================================================
  3. # ■ Game_Enemy
  4. #==============================================================================

  5. class Game_Enemy < Game_Battler
  6.   #--------------------------------------------------------------------------
  7.   # ○ AP の取得
  8.   #--------------------------------------------------------------------------
  9.   def ap
  10.     return enemy.ap
  11.   end
  12. end

  13. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  14. #==============================================================================
  15. # ■ Game_Troop
  16. #==============================================================================

  17. class Game_Troop < Game_Unit
  18.   #--------------------------------------------------------------------------
  19.   # ○ AP の合計計算
  20.   #--------------------------------------------------------------------------
  21.   def ap_total
  22.     ap = 0
  23.     for enemy in dead_members
  24.       ap += enemy.ap unless enemy.hidden
  25.     end
  26.     return ap
  27.   end
  28. end

  29. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  30. #==============================================================================
  31. # ■ Window_Command
  32. #==============================================================================

  33. class Window_Command < Window_Selectable
  34.   unless method_defined?(:add_command)
  35.   #--------------------------------------------------------------------------
  36.   # ○ コマンドを追加
  37.   #    追加した位置を返す
  38.   #--------------------------------------------------------------------------
  39.   def add_command(command)
  40.     @commands << command
  41.     @item_max = @commands.size
  42.     item_index = @item_max - 1
  43.     refresh_command
  44.     draw_item(item_index)
  45.     return item_index
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ○ コマンドをリフレッシュ
  49.   #--------------------------------------------------------------------------
  50.   def refresh_command
  51.     buf = self.contents.clone
  52.     self.height = [self.height, row_max * WLH + 32].max
  53.     create_contents
  54.     self.contents.blt(0, 0, buf, buf.rect)
  55.     buf.dispose
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ○ コマンドを挿入
  59.   #--------------------------------------------------------------------------
  60.   def insert_command(index, command)
  61.     @commands.insert(index, command)
  62.     @item_max = @commands.size
  63.     refresh_command
  64.     refresh
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ○ コマンドを削除
  68.   #--------------------------------------------------------------------------
  69.   def remove_command(command)
  70.     @commands.delete(command)
  71.     @item_max = @commands.size
  72.     refresh
  73.   end
  74.   end
  75. end

  76. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  77. #==============================================================================
  78. # □ Window_APViewer
  79. #------------------------------------------------------------------------------
  80. #  AP ビューアでスキルを表示するウィンドウです。
  81. #==============================================================================

  82. class Window_APViewer < Window_Selectable
  83.   #--------------------------------------------------------------------------
  84.   # ● オブジェクト初期化
  85.   #     x      : ウィンドウの X 座標
  86.   #     y      : ウィンドウの Y 座標
  87.   #     width  : ウィンドウの幅
  88.   #     height : ウィンドウの高さ
  89.   #     actor  : アクター
  90.   #--------------------------------------------------------------------------
  91.   def initialize(x, y, width, height, actor)
  92.     super(x, y, width, height)
  93.     @actor = actor
  94.     @can_gain_ap_skills = []
  95.     self.index = 0
  96.     refresh
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ○ スキルの取得
  100.   #--------------------------------------------------------------------------
  101.   def skill
  102.     return @data[self.index]
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ○ リフレッシュ
  106.   #--------------------------------------------------------------------------
  107.   def refresh
  108.     @data = []
  109.     @can_gain_ap_skills = @actor.can_gain_ap_skills
  110.     equipment_skills = @actor.equipment_skills(true)

  111.     (1...$data_skills.size).each { |i|
  112.       skill = $data_skills[i]
  113.       next if skill.need_ap == 0
  114.       unless KGC::EquipLearnSkill::SHOW_ZERO_AP_SKILL
  115.         # AP が 0 、かつ装備品で習得していないものは無視
  116.         if @actor.skill_ap(skill.id) == 0 && !equipment_skills.include?(skill)
  117.           next
  118.         end
  119.       end
  120.       @data.push(skill)
  121.     }
  122.     @item_max = @data.size
  123.     create_contents
  124.     @item_max.times { |i| draw_item(i) }
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ○ 項目の描画
  128.   #     index : 項目番号
  129.   #--------------------------------------------------------------------------
  130.   def draw_item(index)
  131.     rect = item_rect(index)
  132.     self.contents.clear_rect(rect)
  133.     skill = @data[index]
  134.     if skill != nil
  135.       rect.width -= 4
  136.       draw_item_name(skill, rect.x, rect.y, enable?(skill))
  137.       if @actor.ap_full?(skill) || @actor.skill_learn?(skill)
  138.         # マスター
  139.         text = Vocab.full_ap_skill
  140.       else
  141.         # AP 蓄積中
  142.         text = sprintf("%s %4d/%4d",
  143.           Vocab.ap, @actor.skill_ap(skill.id), skill.need_ap)
  144.       end
  145.       # AP を描画
  146.       self.contents.font.color = normal_color
  147.       self.contents.draw_text(rect, text, 2)
  148.     end
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ○ スキルを有効状態で表示するかどうか
  152.   #     skill : スキル
  153.   #--------------------------------------------------------------------------
  154.   def enable?(skill)
  155.     return true if @actor.skill_learn?(skill)           # 習得済み
  156.     return true if @actor.ap_full?(skill)               # マスター
  157.     return true if @can_gain_ap_skills.include?(skill)  # AP 蓄積可能

  158.     return false
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ○ スキルをマスクなしで表示するかどうか
  162.   #     skill : スキル
  163.   #--------------------------------------------------------------------------
  164.   def no_mask?(skill)
  165.     return true if @actor.skill_learn?(skill)           # 習得済み
  166.     return true if @actor.skill_ap(skill.id) > 0        # AP が 1 以上
  167.     return true if @can_gain_ap_skills.include?(skill)  # AP 蓄積可能

  168.     return false
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● アイテム名の描画
  172.   #     item    : アイテム (スキル、武器、防具でも可)
  173.   #     x       : 描画先 X 座標
  174.   #     y       : 描画先 Y 座標
  175.   #     enabled : 有効フラグ。false のとき半透明で描画
  176.   #--------------------------------------------------------------------------
  177.   def draw_item_name(item, x, y, enabled = true)
  178.     draw_icon(item.icon_index, x, y, enabled)
  179.     self.contents.font.color = normal_color
  180.     self.contents.font.color.alpha = enabled ? 255 : 128
  181.     self.contents.draw_text(x + 24, y, 172, WLH,
  182.       no_mask?(item) ? item.name : item.masked_name)
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● フレーム更新
  186.   #--------------------------------------------------------------------------
  187.   def update
  188.     super
  189.     return unless self.active

  190.     if Input.repeat?(Input::RIGHT)
  191.       cursor_pagedown
  192.     elsif Input.repeat?(Input::LEFT)
  193.       cursor_pageup
  194.     end
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● ヘルプテキスト更新
  198.   #--------------------------------------------------------------------------
  199.   def update_help
  200.     if KGC::EquipLearnSkill::HIDE_ZERO_AP_SKILL_HELP && !no_mask?(skill)
  201.       @help_window.set_text(KGC::EquipLearnSkill::ZERO_AP_SKILL_HELP)
  202.     else
  203.       @help_window.set_text(skill == nil ? "" : skill.description)
  204.     end
  205.   end
  206. end

  207. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  208. #==============================================================================
  209. # ■ Scene_Map
  210. #==============================================================================

  211. class Scene_Map < Scene_Base
  212.   #--------------------------------------------------------------------------
  213.   # ● 画面切り替えの実行
  214.   #--------------------------------------------------------------------------
  215.   alias update_scene_change_KGC_EquipLearnSkill update_scene_change
  216.   def update_scene_change
  217.     return if $game_player.moving?    # プレイヤーの移動中?

  218.     if $game_temp.next_scene == :ap_viewer
  219.       call_ap_viewer
  220.       return
  221.     end

  222.     update_scene_change_KGC_EquipLearnSkill
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ○ AP ビューアへの切り替え
  226.   #--------------------------------------------------------------------------
  227.   def call_ap_viewer
  228.     $game_temp.next_scene = nil
  229.     $scene = Scene_APViewer.new($game_temp.next_scene_actor_index,
  230.       0, Scene_APViewer::HOST_MAP)
  231.   end
  232. end

  233. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  234. #==============================================================================
  235. # ■ Scene_Menu
  236. #==============================================================================

  237. class Scene_Menu < Scene_Base
  238.   if KGC::EquipLearnSkill::USE_MENU_AP_VIEWER_COMMAND
  239.   #--------------------------------------------------------------------------
  240.   # ● コマンドウィンドウの作成
  241.   #--------------------------------------------------------------------------
  242.   alias create_command_window_KGC_EquipLearnSkill create_command_window
  243.   def create_command_window
  244.     create_command_window_KGC_EquipLearnSkill

  245.     return if $imported["CustomMenuCommand"]

  246.     @__command_ap_viewer_index = @command_window.add_command(Vocab.ap_viewer)
  247.     if @command_window.oy > 0
  248.       @command_window.oy -= Window_Base::WLH
  249.     end
  250.     @command_window.index = @menu_index
  251.   end
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● コマンド選択の更新
  255.   #--------------------------------------------------------------------------
  256.   alias update_command_selection_KGC_EquipLearnSkill update_command_selection
  257.   def update_command_selection
  258.     call_ap_viewer_flag = false
  259.     if Input.trigger?(Input::C)
  260.       case @command_window.index
  261.       when @__command_ap_viewer_index  # AP ビューア
  262.         call_ap_viewer_flag = true
  263.       end
  264.     end

  265.     # AP ビューアに移行
  266.     if call_ap_viewer_flag
  267.       if $game_party.members.size == 0
  268.         Sound.play_buzzer
  269.         return
  270.       end
  271.       Sound.play_decision
  272.       start_actor_selection
  273.       return
  274.     end

  275.     update_command_selection_KGC_EquipLearnSkill
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● アクター選択の更新
  279.   #--------------------------------------------------------------------------
  280.   alias update_actor_selection_KGC_EquipLearnSkill update_actor_selection
  281.   def update_actor_selection
  282.     if Input.trigger?(Input::C)
  283.       $game_party.last_actor_index = @status_window.index
  284.       Sound.play_decision
  285.       case @command_window.index
  286.       when @__command_ap_viewer_index  # AP ビューア
  287.         $scene = Scene_APViewer.new(@status_window.index,
  288.           @__command_ap_viewer_index, Scene_APViewer::HOST_MENU)
  289.         return
  290.       end
  291.     end

  292.     update_actor_selection_KGC_EquipLearnSkill
  293.   end
  294. end

  295. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  296. #==============================================================================
  297. # □ Scene_APViewer
  298. #------------------------------------------------------------------------------
  299. #   AP ビューアの処理を行うクラスです。
  300. #==============================================================================

  301. class Scene_APViewer < Scene_Base
  302.   HOST_MENU   = 0
  303.   HOST_MAP    = 1
  304.   #--------------------------------------------------------------------------
  305.   # ● オブジェクト初期化
  306.   #     actor_index : アクターインデックス
  307.   #     menu_index  : コマンドのカーソル初期位置
  308.   #     host_scene  : 呼び出し元 (0..メニュー  1..マップ)
  309.   #--------------------------------------------------------------------------
  310.   def initialize(actor_index = 0, menu_index = 0, host_scene = HOST_MENU)
  311.     @actor_index = actor_index
  312.     @menu_index = menu_index
  313.     @host_scene = host_scene
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 開始処理
  317.   #--------------------------------------------------------------------------
  318.   def start
  319.     super
  320.     create_menu_background
  321.     @actor = $game_party.members[@actor_index]
  322.     @help_window = Window_Help.new
  323.     if $imported["HelpExtension"]
  324.       @help_window.row_max = KGC::HelpExtension::ROW_MAX
  325.     end
  326.     @status_window = Window_SkillStatus.new(0, @help_window.height, @actor)
  327.     dy = @help_window.height + @status_window.height
  328.     @skill_window = Window_APViewer.new(0, dy,
  329.       Graphics.width, Graphics.height - dy, @actor)
  330.     @skill_window.help_window = @help_window
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 終了処理
  334.   #--------------------------------------------------------------------------
  335.   def terminate
  336.     super
  337.     dispose_menu_background
  338.     @help_window.dispose
  339.     @status_window.dispose
  340.     @skill_window.dispose
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ○ 元の画面へ戻る
  344.   #--------------------------------------------------------------------------
  345.   def return_scene
  346.     case @host_scene
  347.     when HOST_MENU
  348.       $scene = Scene_Menu.new(@menu_index)
  349.     when HOST_MAP
  350.       $scene = Scene_Map.new
  351.     end
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ○ 次のアクターの画面に切り替え
  355.   #--------------------------------------------------------------------------
  356.   def next_actor
  357.     @actor_index += 1
  358.     @actor_index %= $game_party.members.size
  359.     $scene = Scene_APViewer.new(@actor_index, @menu_index, @host_scene)
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ○ 前のアクターの画面に切り替え
  363.   #--------------------------------------------------------------------------
  364.   def prev_actor
  365.     @actor_index += $game_party.members.size - 1
  366.     @actor_index %= $game_party.members.size
  367.     $scene = Scene_APViewer.new(@actor_index, @menu_index, @host_scene)
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ● フレーム更新
  371.   #--------------------------------------------------------------------------
  372.   def update
  373.     super
  374.     update_menu_background
  375.     @help_window.update
  376.     @skill_window.update
  377.     @status_window.update
  378.     if @skill_window.active
  379.       update_skill_selection
  380.     end
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ○ スキル選択の更新
  384.   #--------------------------------------------------------------------------
  385.   def update_skill_selection
  386.     if Input.trigger?(Input::B)
  387.       Sound.play_cancel
  388.       return_scene
  389.     elsif Input.trigger?(Input::R)
  390.       Sound.play_cursor
  391.       next_actor
  392.     elsif Input.trigger?(Input::L)
  393.       Sound.play_cursor
  394.       prev_actor
  395.     end
  396.   end
  397. end

  398. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  399. #==============================================================================
  400. # ■ Scene_Battle
  401. #==============================================================================

  402. class Scene_Battle < Scene_Base
  403.   #--------------------------------------------------------------------------
  404.   # ● メッセージ表示が終わるまでウェイト
  405.   #--------------------------------------------------------------------------
  406.   alias wait_for_message_KGC_EquipLearnSkill wait_for_message
  407.   def wait_for_message
  408.     return if @ignore_wait_for_message  # メッセージ終了までのウェイトを無視

  409.     wait_for_message_KGC_EquipLearnSkill
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ● 獲得した経験値とお金の表示
  413.   #--------------------------------------------------------------------------
  414.   alias display_exp_and_gold_KGC_EquipLearnSkill display_exp_and_gold
  415.   def display_exp_and_gold
  416.     @ignore_wait_for_message = true

  417.     display_exp_and_gold_KGC_EquipLearnSkill

  418.     display_ap
  419.     @ignore_wait_for_message = false
  420.     wait_for_message
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ● レベルアップの表示
  424.   #--------------------------------------------------------------------------
  425.   alias display_level_up_KGC_EquipLearnSkill display_level_up
  426.   def display_level_up
  427.     display_level_up_KGC_EquipLearnSkill

  428.     display_master_equipment_skill
  429.   end
  430.   #--------------------------------------------------------------------------
  431.   # ○ 獲得 AP の表示
  432.   #--------------------------------------------------------------------------
  433.   def display_ap
  434.     ap = $game_troop.ap_total
  435.     if ap > 0
  436.       text = sprintf(Vocab::ObtainAP, ap)
  437.       $game_message.texts.push('\.' + text)
  438.     end
  439.     wait_for_message
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # ○ マスターしたスキルの表示
  443.   #--------------------------------------------------------------------------
  444.   def display_master_equipment_skill
  445.     ap = $game_troop.ap_total
  446.     $game_party.existing_members.each { |actor|
  447.       last_skills = actor.skills
  448.       actor.gain_ap(ap, true)
  449.     }
  450.     wait_for_message
  451.   end
  452. end

复制代码

作者: sqz1000    时间: 2008-2-11 05:05
USE_MENU_AP_VIEWER_COMMAND = false
只是菜单里没有最后1项
怎么才能完全取消学习系统,如果我想要2种功能,能不能做到
A类装备,装上有技能,不能学习
B类装备,装备能学习,不直接用

女侠{/hx},拜托了!
作者: sqz1000    时间: 2008-2-11 05:16
= =不能坚持伸手党的作风,我自己研究一下
作者: wsffx13    时间: 2008-2-11 08:20
这个,这个脚本比较烂……不过比较简单…………
http://rpg.blue/viewthread.php?tid=72265&ntime=2008%2D2%2D11+0%3A17%3A26

日文那几个脚本的确很不错。而且连整合都完全考虑到了,可惜现在我完全使用了一种全新算法的系统,比较投机。
作者: 雪流星    时间: 2008-2-11 09:49
以下引用sqz1000于2008-2-10 21:05:18的发言:
USE_MENU_AP_VIEWER_COMMAND = false
只是菜单里没有最后1项<br>
怎么才能完全取消学习系统,如果我想要2种功能,能不能做到
A类装备,装上有技能,不能学习
B类装备,装备能学习,不直接用

女侠,拜托了!


直接学习的话,就像我前面所说的
装备直接设置
<need_ap 0>

至於你说的那两种功能我没看明白
能解释一下吗?

以下是我的猜测:
   A类装备,装上有技能,不能学习
      就是不需学习,一装上装备就学会了
      设置方法:<need_ap 0>
        也就是不需要AP的意思

   B类装备,装备能学习,不直接用
      就是装备後看的到技能,但是不能使用,需要用AP学习学习
      设置方法:<need_ap n>
        n 为所需AP值
      获得AP的方式是打敌人,默认打败没有设置AP的敌人都会获得1AP(可以在脚本内修改)。或是在个别敌人的备注理打上<AP n>,n为能获得的AP点数



作者: sqz1000    时间: 2008-2-11 19:44
3Q,已经弄明白了。
作者: sqz1000    时间: 2008-2-12 04:37
遇到一个问题,举例:
在使用<eed_ap n>的情况下
比如1个战士角色装备被1把剑,就能使用和学习剑术A,AP状态能看看  “剑术A      AP 0/N”
但是换1位不能装备剑的法师角色,查看AP状态,就永远会出现“????   AP 0/n”
希望能在角色不能装备该武器或防具时,AP状态里就不显示那个装备附带的技能。
作者: 真の邵东    时间: 2008-2-12 04:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: sqz1000    时间: 2008-2-12 04:45
我想要不同职业的 AP查看 不同,只显示自己职业需要学习的技能。
作者: sqz1000    时间: 2008-2-12 06:02
= =大概修改的思路就是,查看AP状态的时候,不能装备该物品的角色,就屏蔽该装备附带的技能显示。
作者: 雪流星    时间: 2008-2-12 07:23
cannot type Chinese now,let me try to explain in English (translate later)

If #1 actor cannot learn the skill of #50 and #70 equipment
then include in the script:
     EXCLUDE_WEAPON[1] = [50, 70] #for weapons or
     EXCLUDE_ARMOR[1] = [50, 70]  #for armors

If #1 actor cannot learn skill #30 by equipping any equipment
then include in the script:
     EXCLUDE_SKILL[1] = [30]
作者: xq2009    时间: 2009-1-3 04:07
10楼的,MS是你的问题?
[LINE]1,#dddddd[/LINE]版主对此帖的评论:『挖坟,MS是你的问题』,积分『-5』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: badutib    时间: 2009-5-11 16:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: badutib    时间: 2009-5-18 14:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: badutib    时间: 2009-5-18 14:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: badutib    时间: 2009-5-18 15:00
提示: 作者被禁止或删除 内容自动屏蔽




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