Project1

标题: 在各大站转了好长时间,一个老问题还是解决不了! [打印本页]

作者: zreo    时间: 2008-3-29 00:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小幽的马甲    时间: 2008-3-29 00:12
lz要的是什么效果……
是状态附加maxhp上升么- -
作者: 水野·迪尔    时间: 2008-3-29 00:26
LZ要的是装备能够增加体力
作者: wy29    时间: 2008-3-29 00:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: 越前リョーマ    时间: 2008-3-29 01:10
有被动技能脚本啊,

请自己找。
作者: 八云紫    时间: 2008-3-29 02:10
嘛,为什么你们要的东西我都有呢?

  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ パッシブスキル - KGC_PassiveSkill ◆ VX ◆
  3. #_/    ◇ Last update : 2008/02/10 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  習得するだけで能力値上昇効果を発揮するスキルを作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. $imported = {} if $imported == nil
  8. $imported["PassiveSkill"] = true

  9. module KGC
  10. module PassiveSkill
  11.   # パッシブスキル用パラメータリスト
  12.   PARAMS = {
  13.     :maxhp => "MAXHP|最大HP",
  14.     :maxmp => "MAXMP|最大MP",
  15.     :atk   => "ATK|攻撃力",
  16.     :def   => "DEF|防御力",
  17.     :spi   => "SPI|精神力",
  18.     :agi   => "AGI|敏捷性",
  19.     :hit   => "HIT|命中率",
  20.     :eva   => "EVA|回避率",
  21.     :cri   => "CRI|クリティカル率",
  22.     :odds  => "ODDS|狙われやすさ",
  23.   }

  24.   # パッシブスキル用属性・ステートリスト
  25.   ARRAYS = {
  26.     :attack_element => "ATTACK_ELEMENT|攻撃属性",
  27.     :plus_state     => "PLUS_STATE|付加ステート",
  28.     :invalid_state  => "INVALID_STATE|無効化ステート",
  29.   }

  30.   # 正規表現
  31.   module Regexp
  32.     # スキル
  33.     module Skill
  34.       # パッシブスキル開始
  35.       BEGIN_PASSIVE = /<(?:PASSIVE_SKILL|パッシブスキル)>/i
  36.       # パッシブスキル終了
  37.       END_PASSIVE = /<\/(?:PASSIVE_SKILL|パッシブスキル)>/i

  38.       # パラメータ修正
  39.       #  MAXHP +20  など
  40.       PASSIVE_PARAMS = /^\s*([^:\+\-\d\s]+)\s*([\+\-]\d+)([%%])?/
  41.       # 属性・ステートリスト
  42.       #  攻撃属性 1,2,3  など
  43.       PASSIVE_ARRAYS = /^\s*([^:\+\-\d\s]+)\s*(\d+(?:\s*,\s*\d+)*)/
  44.     end
  45.   end
  46. end
  47. end

  48. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  49. #==============================================================================
  50. # □ KGC::Commands
  51. #==============================================================================

  52. module KGC::Commands
  53.   module_function
  54.   #--------------------------------------------------------------------------
  55.   # ○ パッシブスキルの修正値を再設定
  56.   #--------------------------------------------------------------------------
  57.   def restore_passive_rev
  58.     (1...$data_actors.size).each { |i|
  59.       actor = $game_actors[i]
  60.       actor.restore_passive_rev
  61.     }
  62.   end
  63. end

  64. class Game_Interpreter
  65.   include KGC::Commands
  66. end

  67. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  68. #==============================================================================
  69. # ■ RPG::Skill
  70. #==============================================================================

  71. class RPG::Skill < RPG::UsableItem
  72.   #--------------------------------------------------------------------------
  73.   # ○ パッシブスキルのキャッシュを生成
  74.   #--------------------------------------------------------------------------
  75.   def create_passive_skill_cache
  76.     @__passive = false
  77.     @__passive_params = {}
  78.     @__passive_params_rate = {}
  79.     @__passive_arrays = {}

  80.     passive_flag = false
  81.     self.note.split(/[\r\n]+/).each { |line|
  82.       case line
  83.       when KGC::PassiveSkill::Regexp::Skill::BEGIN_PASSIVE
  84.         # パッシブスキル定義開始
  85.         passive_flag = true
  86.         @__passive = true
  87.       when KGC::PassiveSkill::Regexp::Skill::END_PASSIVE
  88.         # パッシブスキル定義終了
  89.         passive_flag = false
  90.       when KGC::PassiveSkill::Regexp::Skill::PASSIVE_PARAMS
  91.         # 能力値修正
  92.         if passive_flag
  93.           apply_passive_params($1, $2.to_i, $3 != nil)
  94.         end
  95.       when KGC::PassiveSkill::Regexp::Skill::PASSIVE_ARRAYS
  96.         # 属性・ステート
  97.         if passive_flag
  98.           apply_passive_arrays($1, $2.scan(/\d+/))
  99.         end
  100.       end
  101.     }
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ○ パッシブスキルの能力値修正を適用
  105.   #     param : 対象パラメータ
  106.   #     value : 修正値
  107.   #     rate  : true なら % 指定
  108.   #--------------------------------------------------------------------------
  109.   def apply_passive_params(param, value, rate)
  110.     KGC::PassiveSkill::PARAMS.each { |k, v|
  111.       if param =~ /(?:#{v})/i
  112.         if rate
  113.           @__passive_params_rate[k] = 0 if @__passive_params_rate[k] == nil
  114.           @__passive_params_rate[k] += value
  115.         else
  116.           @__passive_params[k] = 0 if @__passive_params[k] == nil
  117.           @__passive_params[k] += value
  118.         end
  119.         break
  120.       end
  121.     }
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ○ パッシブスキルの追加属性・ステートを適用
  125.   #     param : 対象パラメータ
  126.   #     list  : 属性・ステート一覧
  127.   #--------------------------------------------------------------------------
  128.   def apply_passive_arrays(param, list)
  129.     KGC::PassiveSkill::ARRAYS.each { |k, v|
  130.       if param =~ /(?:#{v})/i
  131.         values = []
  132.         list.each { |num| values << num.to_i }
  133.         @__passive_arrays[k] = [] if @__passive_arrays[k] == nil
  134.         @__passive_arrays[k] |= values
  135.         break
  136.       end
  137.     }
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ○ パッシブスキルであるか
  141.   #--------------------------------------------------------------------------
  142.   def passive
  143.     create_passive_skill_cache if @__passive == nil
  144.     return @__passive
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ○ パッシブスキルの能力値修正 (即値)
  148.   #--------------------------------------------------------------------------
  149.   def passive_params
  150.     create_passive_skill_cache if @__passive_params == nil
  151.     return @__passive_params
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ○ パッシブスキルの能力値修正 (割合)
  155.   #--------------------------------------------------------------------------
  156.   def passive_params_rate
  157.     create_passive_skill_cache if @__passive_params_rate == nil
  158.     return @__passive_params_rate
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ○ パッシブスキルの属性・ステートリスト
  162.   #--------------------------------------------------------------------------
  163.   def passive_arrays
  164.     create_passive_skill_cache if @__passive_arrays == nil
  165.     return @__passive_arrays
  166.   end
  167. end

  168. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  169. #==============================================================================
  170. # ■ Game_Actor
  171. #==============================================================================

  172. class Game_Actor < Game_Battler
  173.   #--------------------------------------------------------------------------
  174.   # ● セットアップ
  175.   #     actor_id : アクター ID
  176.   #--------------------------------------------------------------------------
  177.   alias setup_KGC_PassiveSkill setup
  178.   def setup(actor_id)
  179.     setup_KGC_PassiveSkill(actor_id)

  180.     restore_passive_rev
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ○ パッシブスキルの修正値を再設定
  184.   #--------------------------------------------------------------------------
  185.   def restore_passive_rev
  186.     # 初期化
  187.     @passive_params = {}
  188.     @passive_params_rate = {}
  189.     @passive_arrays = {}
  190.     KGC::PassiveSkill::PARAMS.each_key { |k|
  191.       @passive_params[k] = 0
  192.       @passive_params_rate[k] = 100
  193.     }
  194.     KGC::PassiveSkill::ARRAYS.each_key { |k| @passive_arrays[k] = [] }

  195.     # ≪スキルCP制≫ の併用を考慮し、戦闘中フラグを一時的にオン
  196.     last_in_battle = $game_temp.in_battle
  197.     $game_temp.in_battle = true
  198.     # 修正値を取得
  199.     self.skills.each { |skill|
  200.       next unless skill.passive

  201.       skill.passive_params.each { |k, v| @passive_params[k] += v }
  202.       skill.passive_params_rate.each { |k, v| @passive_params_rate[k] += v }
  203.       skill.passive_arrays.each { |k, v| @passive_arrays[k] |= v }
  204.     }
  205.     $game_temp.in_battle = last_in_battle

  206.     # HP/MP を修正
  207.     self.hp = self.hp
  208.     self.mp = self.mp
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ○ パッシブスキルによるパラメータ修正値 (即値)
  212.   #--------------------------------------------------------------------------
  213.   def passive_params
  214.     restore_passive_rev if @passive_params == nil
  215.     return @passive_params
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ○ パッシブスキルによるパラメータ修正値 (割合)
  219.   #--------------------------------------------------------------------------
  220.   def passive_params_rate
  221.     restore_passive_rev if @passive_params_rate == nil
  222.     return @passive_params_rate
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ○ パッシブスキルによる追加属性・ステート
  226.   #--------------------------------------------------------------------------
  227.   def passive_arrays
  228.     restore_passive_rev if @passive_arrays == nil
  229.     return @passive_arrays
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 装備の変更 (オブジェクトで指定)
  233.   #     equip_type : 装備部位 (0..4)
  234.   #     item       : 武器 or 防具 (nil なら装備解除)
  235.   #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  236.   #--------------------------------------------------------------------------
  237.   alias change_equip_KGC_PassiveSkill change_equip
  238.   def change_equip(equip_type, item, test = false)
  239.     change_equip_KGC_PassiveSkill(equip_type, item, test)

  240.     restore_passive_rev unless test
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 装備の破棄
  244.   #     item : 破棄する武器 or 防具
  245.   #    武器/防具の増減で「装備品も含める」のとき使用する。
  246.   #--------------------------------------------------------------------------
  247.   alias discard_equip_KGC_PassiveSkill discard_equip
  248.   def discard_equip(item)
  249.     discard_equip_KGC_PassiveSkill(item)

  250.     restore_passive_rev
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● ステート無効化判定
  254.   #     state_id : ステート ID
  255.   #--------------------------------------------------------------------------
  256.   alias state_resist_KGC_PassiveSkill? state_resist?
  257.   def state_resist?(state_id)
  258.     return true if passive_arrays[:invalid_state].include?(state_id)

  259.     return state_resist_KGC_PassiveSkill?(state_id)
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 通常攻撃の属性取得
  263.   #--------------------------------------------------------------------------
  264.   alias element_set_KGC_PassiveSkill element_set
  265.   def element_set
  266.     return (element_set_KGC_PassiveSkill | passive_arrays[:attack_element])
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ● 通常攻撃の追加効果 (ステート変化) 取得
  270.   #--------------------------------------------------------------------------
  271.   alias plus_state_set_KGC_PassiveSkill plus_state_set
  272.   def plus_state_set
  273.     return (plus_state_set_KGC_PassiveSkill | passive_arrays[:plus_state])
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 基本 MaxHP の取得
  277.   #--------------------------------------------------------------------------
  278.   alias base_maxhp_KGC_PassiveSkill base_maxhp
  279.   def base_maxhp
  280.     n = base_maxhp_KGC_PassiveSkill + passive_params[:maxhp]
  281.     n = n * passive_params_rate[:maxhp] / 100
  282.     return n
  283.   end
  284.   #--------------------------------------------------------------------------
  285.   # ● 基本 MaxMP の取得
  286.   #--------------------------------------------------------------------------
  287.   alias base_maxmp_KGC_PassiveSkill base_maxmp
  288.   def base_maxmp
  289.     n = base_maxmp_KGC_PassiveSkill + passive_params[:maxmp]
  290.     n = n * passive_params_rate[:maxmp] / 100
  291.     return n
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● 基本攻撃力の取得
  295.   #--------------------------------------------------------------------------
  296.   alias base_atk_KGC_PassiveSkill base_atk
  297.   def base_atk
  298.     n = base_atk_KGC_PassiveSkill + passive_params[:atk]
  299.     n = n * passive_params_rate[:atk] / 100
  300.     return n
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 基本防御力の取得
  304.   #--------------------------------------------------------------------------
  305.   alias base_def_KGC_PassiveSkill base_def
  306.   def base_def
  307.     n = base_def_KGC_PassiveSkill + passive_params[:def]
  308.     n = n * passive_params_rate[:def] / 100
  309.     return n
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 基本精神力の取得
  313.   #--------------------------------------------------------------------------
  314.   alias base_spi_KGC_PassiveSkill base_spi
  315.   def base_spi
  316.     n = base_spi_KGC_PassiveSkill + passive_params[:spi]
  317.     n = n * passive_params_rate[:spi] / 100
  318.     return n
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● 基本敏捷性の取得
  322.   #--------------------------------------------------------------------------
  323.   alias base_agi_KGC_PassiveSkill base_agi
  324.   def base_agi
  325.     n = base_agi_KGC_PassiveSkill + passive_params[:agi]
  326.     n = n * passive_params_rate[:agi] / 100
  327.     return n
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ● 命中率の取得
  331.   #--------------------------------------------------------------------------
  332.   alias hit_KGC_PassiveSkill hit
  333.   def hit
  334.     n = hit_KGC_PassiveSkill + passive_params[:hit]
  335.     n = n * passive_params_rate[:hit] / 100
  336.     return n
  337.   end
  338.   #--------------------------------------------------------------------------
  339.   # ● 回避率の取得
  340.   #--------------------------------------------------------------------------
  341.   alias eva_KGC_PassiveSkill eva
  342.   def eva
  343.     n = eva_KGC_PassiveSkill + passive_params[:eva]
  344.     n = n * passive_params_rate[:eva] / 100
  345.     return n
  346.   end
  347.   #--------------------------------------------------------------------------
  348.   # ● クリティカル率の取得
  349.   #--------------------------------------------------------------------------
  350.   alias cri_KGC_PassiveSkill cri
  351.   def cri
  352.     n = cri_KGC_PassiveSkill + passive_params[:cri]
  353.     n = n * passive_params_rate[:cri] / 100
  354.     return n
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # ● 狙われやすさの取得
  358.   #--------------------------------------------------------------------------
  359.   alias odds_KGC_PassiveSkill odds
  360.   def odds
  361.     n = odds_KGC_PassiveSkill + passive_params[:odds]
  362.     n = n * passive_params_rate[:odds] / 100
  363.     return n
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ● スキルを覚える
  367.   #     skill_id : スキル ID
  368.   #--------------------------------------------------------------------------
  369.   alias learn_skill_KGC_PassiveSkill learn_skill
  370.   def learn_skill(skill_id)
  371.     learn_skill_KGC_PassiveSkill(skill_id)

  372.     restore_passive_rev
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● スキルを忘れる
  376.   #     skill_id : スキル ID
  377.   #--------------------------------------------------------------------------
  378.   alias forget_skill_KGC_PassiveSkill forget_skill
  379.   def forget_skill(skill_id)
  380.     forget_skill_KGC_PassiveSkill(skill_id)

  381.     restore_passive_rev
  382.   end
  383. end

  384. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  385. #==============================================================================
  386. # ■ Scene_File
  387. #==============================================================================

  388. class Scene_File < Scene_Base
  389.   #--------------------------------------------------------------------------
  390.   # ● セーブデータの読み込み
  391.   #     file : 読み込み用ファイルオブジェクト (オープン済み)
  392.   #--------------------------------------------------------------------------
  393.   alias read_save_data_KGC_PassiveSkill read_save_data
  394.   def read_save_data(file)
  395.     read_save_data_KGC_PassiveSkill(file)

  396.     KGC::Commands.restore_passive_rev
  397.     Graphics.frame_reset
  398.   end
  399. end
复制代码


使用说明:
用下面的格式在装备的「备注」里写:

    <passive_skill>
    MAXHP +10%
    MAXMP -5%
    atk +30
    attack_element 10,11
    </passive_skill>



夹在<passive_skill>和</passive_skill>之间的就成了被动技能的定义。
当技能习得时,里面的各种能力值就会加值,记得一行写一种。

    能力值名称 +n   # n 增加
    能力值名称 -n   # n 减少
    能力值名称 +n%  # n% 增加
    能力值名称 -n%  # n% 减少



可以定义很多种能力值增减,没有顺序规定。

使用能力值名称时:
MAXHP 最大HP
MAXMP 最大MP
ATK   攻击力
DEF   防御力
SPI   精神力
AGI   敏捷性
HIT   命中率
EVA   闪躲率
CRI   会心一击率
ODDS  受敌攻击率(就是跟职业里设置的位置相关)

除了能力值以外,状态和攻击属性也能设定
设定方式:
名称 id1   # 单一设定
名称 id1, id2, id3.... #多数设定

例子:

    attack_element 10, 11
    plus_state 2
    invalid_state 3, 4, 5



attack_element 攻击属性
plus_state     附加状态
invalid_state  无效化状态

两个可以和在一起用

    <passive_skill>
    MAXHP +10%
    MAXMP -5%
    atk +30
    attack_element 10,11
    plus_state 2
    invalid_state 3, 4, 5
    </passive_skill>      
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: zreo    时间: 2008-3-29 05:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2008-3-29 05:29
以下引用zreo于2008-3-28 21:19:30的发言:
越前大大~~~您根本没仔细看俺的帖子<img src="expression/ll.gif" height="20" width="20">........被动技能俺现在正在用......

汗,貌似我也理解错了。
{/ll}
作者: LiSteve    时间: 2008-3-29 21:21
被動技能的網站裡面有個腳本スキル習得装備(VX 専用)
只要搭配這個應該就可以了

把裝備設置為裝備上去後馬上學到增加HP上限的被動技能
然後不設定永久學習這項技能的AP量

就可以做出裝備上去後立即增加最大HP,取消裝備就會回復原來狀態的裝備了




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