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

Project1

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

[已经解决] 困扰了我2天,RTAB战斗如何做损伤(恢复)SP值的技能?

[复制链接]

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
跳转到指定楼层
1
发表于 2010-9-7 21:33:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我想通过给技能属性来改变技能损伤SP值,也就是如果技能带有19号属性那么技能的伤害值就判定为SP,这样就能制作回复SP的技能了。
RTAB脚本太复杂,我简单试了一下下面的写法(在game_battler中),但是用起来好像不行,依旧是损伤HP。请教一下应该怎么写呢?
  1. # HP の変動判定
  2. if skill.element_set.include?(19)
  3.   last_sp = [[self.sp - self.damage[user], self.maxsp].min, 0].max
  4.   # 効果判定
  5.   effective |= self.sp != last_sp
  6. else
  7.   last_hp = [[self.hp - self.damage[user], self.maxhp].min, 0].max
  8.   # 効果判定
  9.   effective |= self.hp != last_hp
  10. end
复制代码

点评

还没得到解答……版主您可以帮帮我吗?  发表于 2010-10-5 01:29
问题得到解答后请去认可帖认可[url]http://bbs.66rpg.com/thread-155199-1-1.html[/url]  发表于 2010-9-28 02:55
哇……都20人浏览了还没回复啊。看来RTAB脚本比我想象的复杂喔。  发表于 2010-9-7 22:26

Lv2.观梦者

梦石
0
星屑
564
在线时间
169 小时
注册时间
2008-10-29
帖子
431
2
发表于 2010-9-8 01:40:00 | 只看该作者
本帖最后由 clap_pl 于 2010-9-8 02:07 编辑

仔细研究了一下 基本实现了这个功能 也不知道有没有什么不可预料的问题
效果如下

击中后损耗SP的同时对其造成了等量伤害
怪物的SP损耗这么多而减为0了


首先找到 RTAB 战斗系统中的
def skill_effect(user,skill)
注意不是默认脚本列表里 Game_Battler 3里面的def skill_effect(user,skill)
否则改了无效

在这个函数中最后有一句
return effective

在这句话之前加上如下内容

   
#=============================
if skill.element_set.include?(19) #判断技能是否带有19号属性,如果带有,则为SP损耗技能  
      if self.damage[user] == "" or self.damage[user] == "Miss"
        self.recover_sp[user] = 0                         #如果技能未命中,则不损耗SP
        else                                                       #反之如果技能命中,则损耗SP
      self.recover_sp[user] = -self.damage[user]   
      #损耗SP的值为技能的伤害量,即技能的威力等关联属性可以控制SP损耗量
       self.damage[user] = 0 #不造成伤害,如果想在损耗SP的同时造成等量伤害,这句话去掉。
      #如果想在损耗SP的同时造成SP损耗半数伤害 则可以改成 self.damage[user] /=2, 以此类推
      #这有点类似WAR3里面恶魔猎手的抽蓝技能了。
      end
      end

#=============================

此外在RTAB战斗系统中 找到如下函数
def damage_effect(battler, item)
在其中有这么一句

  if item == 2
      self.hp += self.recover_hp[battler]
      self.sp += self.recover_sp[battler]
      if self.recover_sp[battler] != 0
        self.damage_sp[battler] = -self.recover_sp[battler]
      end
    else

在这之后加上如下内容
#======================================SP损伤
      if self.recover_sp[battler] != 0  #如果sp恢复不为0,我们是通过SP的负恢复量代表损耗
        self.damage_sp[battler] = self.recover_sp[battler]  
        self.sp += self.recover_sp[battler]       #sp实际损耗
        end      
#==================================================


注意哦,如此修改之后,带有19号属性的技能的威力攻击力 等在数据库中设置的相关属性将影响sp伤害
而此技能的命中情况,以及分散度等等的计算都交给了技能原威力计算中完成,也就是说数据库中的数据修改都会有效,
这会比较方便。
如果不行,就要看看你的RTAB脚本了,我的是早些站上的RMXP增强补丁里面一起带的纵版战斗的RTAB
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
3
 楼主| 发表于 2010-9-9 19:54:49 | 只看该作者
用了楼上前辈的方法使用技能后会报错喔,问题好像出在伤害演算的self.recover_sp[battler] 里。还是感谢你,谢谢。

其实我不需要扣血的同时扣蓝这么复杂的脚本!我只需要在演算伤害的地方分歧,如果使用的是带有19号属性的技能的话那么本来HP扣伤害的就改成SP扣伤害。

请各位前辈再帮我看看吧!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
564
在线时间
169 小时
注册时间
2008-10-29
帖子
431
4
发表于 2010-9-9 21:31:58 | 只看该作者
那只好请你附上你的RTAB脚本或简单工程了 脚本之间还是有冲突的
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
5
 楼主| 发表于 2010-9-10 22:18:24 | 只看该作者
本帖最后由 daiboy12 于 2010-9-10 22:41 编辑

问题出在
  1. self.sp += self.recover_sp[battler]       #sp
复制代码
实际损耗这一行,

报错是:TypeError,nil cannot convert Fixnum into String

好像是字符串问题啊……

还有,前辈,这是我的脚本,只发这一段可以吗?
  1. #==============================================================================
  2. # ■ Game_Battler (分割定義 1)
  3. #------------------------------------------------------------------------------
  4. #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
  5. # スのスーパークラスとして使用されます。
  6. #==============================================================================

  7. class Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 公開インスタンス変数追加
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor :up_level                  # レベルアップ数
  12.   attr_accessor :at                        # AT(タイムゲージ)
  13.   attr_accessor :atp                       # AT(表示用)
  14.   attr_accessor :rt                        # RP(詠唱ゲージ)
  15.   attr_accessor :rtp                       # RP(詠唱必要量)
  16.   attr_accessor :spell                     # 合成スキル発動中
  17.   attr_accessor :recover_hp                # HP回復量
  18.   attr_accessor :recover_sp                # SP回復量
  19.   attr_accessor :state_p                   # ステータス異常配列
  20.   attr_accessor :state_m                   # ステータス異常配列
  21.   attr_accessor :damage_sp                 # SPダメージ表示フラグ
  22.   attr_accessor :animation                 # アニメーション ID, Hitの配列
  23.   attr_accessor :phase
  24.   attr_accessor :wait
  25.   attr_accessor :target
  26.   attr_accessor :anime1
  27.   attr_accessor :anime2
  28.   attr_accessor :event
  29.   #--------------------------------------------------------------------------
  30.   # ● オブジェクト初期化
  31.   #--------------------------------------------------------------------------
  32.   alias :initialize_rtab :initialize
  33.   def initialize
  34.     initialize_rtab
  35.     @damage_pop = {}
  36.     @damage = {}
  37.     @damage_sp = {}
  38.     @critical = {}
  39.     @recover_hp = {}
  40.     @recover_sp = {}
  41.     @state_p = {}
  42.     @state_m = {}
  43.     @animation = []
  44.     @phase = 1
  45.     @wait = 0
  46.     @target = []
  47.     @anime1 = 0
  48.     @anime2 = 0
  49.     @event = 0
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 存在判定
  53.   #--------------------------------------------------------------------------
  54.   def exist?
  55.     return (not @hidden and (@hp > 0 or @immortal or @damage_pop.size > 0))
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● ステートの解除
  59.   #     state_id : ステート ID
  60.   #     force    : 強制解除フラグ (オートステートの処理で使用)
  61.   #--------------------------------------------------------------------------
  62.   def remove_state(state_id, force = false)
  63.     # このステートが付加されている場合
  64.     if state?(state_id)
  65.       # 強制付加されたステートで、かつ解除が強制ではない場合
  66.       if @states_turn[state_id] == -1 and not force
  67.         # メソッド終了
  68.         return
  69.       end
  70.       # 現在の HP が 0 かつ オプション [HP 0 の状態とみなす] が有効の場合
  71.       if @hp == 0 and $data_states[state_id].zero_hp
  72.         # ほかに [HP 0 の状態とみなす] ステートがあるかどうか判定
  73.         zero_hp = false
  74.         for i in @states
  75.           if i != state_id and $data_states[i].zero_hp
  76.             zero_hp = true
  77.           end
  78.         end
  79.         # 戦闘不能を解除してよければ、HP を 1 に変更
  80.         if zero_hp == false
  81.           @hp = 1
  82.         end
  83.       end
  84.       unless self.movable?
  85.         # ステート ID を @states 配列および @states_turn ハッシュから削除
  86.         @states.delete(state_id)
  87.         @states_turn.delete(state_id)
  88.         if self.movable?
  89.           self.at = 0
  90.         end
  91.       else
  92.         # ステート ID を @states 配列および @states_turn ハッシュから削除
  93.         @states.delete(state_id)
  94.         @states_turn.delete(state_id)
  95.       end
  96.     end
  97.     # HP および SP の最大値チェック
  98.     @hp = [@hp, self.maxhp].min
  99.     @sp = [@sp, self.maxsp].min
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 通常攻撃の効果適用
  103.   #     attacker : 攻撃者 (バトラー)
  104.   #--------------------------------------------------------------------------
  105.   def attack_effect(attacker)
  106.     # クリティカルフラグをクリア
  107.     self.critical[attacker] = false
  108.     state_p[attacker] = []
  109.     state_m[attacker] = []
  110.     # 第一命中判定
  111.     hit_result = (rand(100) < attacker.hit)
  112.     # 命中の場合
  113.     if hit_result == true
  114.       # 基本ダメージを計算
  115.       atk = [attacker.atk - self.pdef / 10, 0].max
  116.       self.damage[attacker] = atk * (20 + attacker.str) / 20
  117.       # 属性修正
  118.       self.damage[attacker] *= elements_correct(attacker.element_set)
  119.       self.damage[attacker] /= 100
  120.       # ダメージの符号が正の場合
  121.       if self.damage[attacker] > 0
  122.         # クリティカル修正
  123.         if rand(100) < 4 * attacker.dex / self.agi
  124.           self.damage[attacker] *= 2
  125.           self.critical[attacker] = true
  126.         end
  127.         # 防御修正
  128.         if self.guarding?
  129.           self.damage[attacker] /= 2
  130.         end
  131.       end
  132.       # 分散
  133.       if self.damage[attacker].abs > 0
  134.         amp = [self.damage[attacker].abs * 15 / 100, 1].max
  135.         self.damage[attacker] += rand(amp+1) + rand(amp+1) - amp
  136.       end
  137.       # 第二命中判定
  138.       eva = 8 * self.agi / attacker.dex + self.eva
  139.       hit = self.damage[attacker] < 0 ? 100 : 100 - eva
  140.       hit = self.cant_evade? ? 100 : hit
  141.       hit_result = (rand(100) < hit)
  142.     end
  143.     # 命中の場合
  144.     if hit_result == true
  145.       # ステート衝撃解除
  146.       remove_states_shock
  147.       # HP からダメージを減算
  148.       # ステート変化
  149.       @state_changed = false
  150.       states_plus(attacker, attacker.plus_state_set)
  151.       states_minus(attacker, attacker.minus_state_set)
  152.     # ミスの場合
  153.     else
  154.       # ダメージに "Miss" を設定
  155.       self.damage[attacker] = "Miss"
  156.       # クリティカルフラグをクリア
  157.       self.critical[attacker] = false
  158.     end
  159.     # メソッド終了
  160.     return true
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● スキルの効果適用
  164.   #     user  : スキルの使用者 (バトラー)
  165.   #     skill : スキル
  166.   #--------------------------------------------------------------------------
  167.   def skill_effect(user, skill)
  168.     if skill.element_set.include?(19)
  169.       $game_switches[1] = true
  170.     else
  171.       $game_switches[1] = false
  172.     end
  173.     # クリティカルフラグをクリア
  174.     self.critical[user] = false
  175.     state_p[user] = []
  176.     state_m[user] = []
  177.     # スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0、
  178.     # またはスキルの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
  179.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  180.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  181.       # メソッド終了
  182.       return false
  183.     end
  184.     # 有効フラグをクリア
  185.     effective = false
  186.     # コモンイベント ID が有効の場合は有効フラグをセット
  187.     effective |= skill.common_event_id > 0
  188.     # 第一命中判定
  189.     hit = skill.hit
  190.     if skill.atk_f > 0
  191.       hit *= user.hit / 100
  192.     end
  193.     hit_result = (rand(100) < hit)
  194.     # 不確実なスキルの場合は有効フラグをセット
  195.     effective |= hit < 100
  196.     # 命中の場合
  197.     if hit_result == true
  198.       # 威力を計算
  199.       power = skill.power + user.atk * skill.atk_f / 20
  200.       if power > 0
  201.         power -= self.pdef * skill.pdef_f / 1000
  202.         power -= self.mdef * skill.mdef_f / 1000
  203.         power = [power, 0].max
  204.       end
  205.       # 倍率を計算
  206.       rate = 20
  207.       rate += (user.str * skill.str_f / 20)
  208.       rate += (user.dex * skill.dex_f / 20)
  209.       rate += (user.agi * skill.agi_f / 20)
  210.       rate += (user.int * skill.int_f / 20)
  211.       # 基本ダメージを計算
  212.       self.damage[user] = power * rate / 20
  213.       # 属性修正
  214.       self.damage[user] *= elements_correct(skill.element_set)
  215.       self.damage[user] /= 100
  216.       # ダメージの符号が正の場合
  217.       if self.damage[user] > 0
  218.         # 防御修正
  219.         if self.guarding?
  220.           self.damage[user] /= 2
  221.         end
  222.       end
  223.       # 分散
  224.       if skill.variance > 0 and self.damage[user].abs > 0
  225.         amp = [self.damage[user].abs * skill.variance / 100, 1].max
  226.         self.damage[user] += rand(amp+1) + rand(amp+1) - amp
  227.       end
  228.       # 第二命中判定
  229.       eva = 8 * self.agi / user.dex + self.eva
  230.       hit = self.damage[user] < 0 ? 100 : 100 - eva * skill.eva_f / 100
  231.       hit = self.cant_evade? ? 100 : hit
  232.       hit_result = (rand(100) < hit)
  233.       # 不確実なスキルの場合は有効フラグをセット
  234.       effective |= hit < 100
  235.     end
  236.     # 命中の場合
  237.     if hit_result == true
  238.       # 威力 0 以外の物理攻撃の場合
  239.       if skill.power != 0 and skill.atk_f > 0
  240.         # ステート衝撃解除
  241.         remove_states_shock
  242.         # 有効フラグをセット
  243.         effective = true
  244.       end
  245.       # HP の変動判定
  246.       last_hp = [[self.hp - self.damage[user], self.maxhp].min, 0].max
  247.       # 効果判定
  248.       effective |= self.hp != last_hp
  249.       # ステート変化
  250.       @state_changed = false
  251.       effective |= states_plus(user, skill.plus_state_set)
  252.       effective |= states_minus(user, skill.minus_state_set)
  253.       unless $game_temp.in_battle
  254.         self.damage_effect(user, 1)
  255.       end
  256.       # 威力が 0 の場合
  257.       if skill.power == 0
  258.         # ダメージに空文字列を設定
  259.         self.damage[user] = ""
  260.         # ステートに変化がない場合
  261.         unless @state_changed
  262.           # ダメージに "Miss" を設定
  263.           self.damage[user] = "Miss"
  264.         end
  265.       end
  266.     # ミスの場合
  267.     else
  268.       # ダメージに "Miss" を設定
  269.       self.damage[user] = "Miss"
  270.     end
  271.     # 戦闘中でない場合
  272.     unless $game_temp.in_battle
  273.       # ダメージに nil を設定
  274.       self.damage[user] = nil
  275.     end
  276.     if skill.element_set.include?(19) #判断技能是否带有19号属性,如果带有,则为SP损耗技能  
  277.       if self.damage[user] == "" or self.damage[user] == "Miss"
  278.         self.recover_sp[user] = 0                         #如果技能未命中,则不损耗SP
  279.         else                                                       #反之如果技能命中,则损耗SP
  280.       self.recover_sp[user] = -self.damage[user].to_s   
  281.       #损耗SP的值为技能的伤害量,即技能的威力等关联属性可以控制SP损耗量
  282.        self.damage[user] = 0 #不造成伤害,如果想在损耗SP的同时造成等量伤害,这句话去掉。
  283.       #如果想在损耗SP的同时造成SP损耗半数伤害 则可以改成 self.damage[user] /=2, 以此类推
  284.       #这有点类似WAR3里面恶魔猎手的抽蓝技能了。
  285.       end
  286.     end
  287.     return effective
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● アイテムの効果適用
  291.   #     item : アイテム
  292.   #--------------------------------------------------------------------------
  293.   def item_effect(item, user = $game_party.actors[0])
  294.     # クリティカルフラグをクリア
  295.     self.critical[user] = false
  296.     state_p[user] = []
  297.     state_m[user] = []
  298.     # アイテムの効果範囲が HP 1 以上の味方で、自分の HP が 0、
  299.     # またはアイテムの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
  300.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  301.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  302.       # メソッド終了
  303.       return false
  304.     end
  305.     # 有効フラグをクリア
  306.     effective = false
  307.     # コモンイベント ID が有効の場合は有効フラグをセット
  308.     effective |= item.common_event_id > 0
  309.     # 命中判定
  310.     hit_result = (rand(100) < item.hit)
  311.     # 不確実なスキルの場合は有効フラグをセット
  312.     effective |= item.hit < 100
  313.     # 命中の場合
  314.     if hit_result == true
  315.       # 回復量を計算
  316.       self.recover_hp[user] = maxhp * item.recover_hp_rate / 100 +
  317.                               item.recover_hp
  318.       self.recover_sp[user] = maxsp * item.recover_sp_rate / 100 +
  319.                               item.recover_sp
  320.       if self.recover_hp[user] < 0
  321.         self.recover_hp[user] += self.pdef * item.pdef_f / 20
  322.         self.recover_hp[user] += self.mdef * item.mdef_f / 20
  323.         self.recover_hp[user] = [self.recover_hp[user], 0].min
  324.       end
  325.       # 属性修正
  326.       self.recover_hp[user] *= elements_correct(item.element_set)
  327.       self.recover_hp[user] /= 100
  328.       self.recover_sp[user] *= elements_correct(item.element_set)
  329.       self.recover_sp[user] /= 100
  330.       # 分散
  331.       if item.variance > 0 and self.recover_hp[user].abs > 0
  332.         amp = [self.recover_hp[user].abs * item.variance / 100, 1].max
  333.         self.recover_hp[user] += rand(amp+1) + rand(amp+1) - amp
  334.       end
  335.       if item.variance > 0 and self.recover_sp[user].abs > 0
  336.         amp = [self.recover_sp[user].abs * item.variance / 100, 1].max
  337.         self.recover_sp[user] += rand(amp+1) + rand(amp+1) - amp
  338.       end
  339.       # 回復量の符号が負の場合
  340.       if self.recover_hp[user] < 0
  341.         # 防御修正
  342.         if self.guarding?
  343.           self.recover_hp[user] /= 2
  344.         end
  345.       end
  346.       # HP 回復量の符号を反転し、ダメージの値に設定
  347.       self.damage[user] = -self.recover_hp[user]
  348.       # HP および SP の変動判定
  349.       last_hp = [[self.hp + self.recover_hp[user], self.maxhp].min, 0].max
  350.       last_sp = [[self.sp + self.recover_sp[user], self.maxsp].min, 0].max
  351.       effective |= self.hp != last_hp
  352.       effective |= self.sp != last_sp
  353.       # ステート変化
  354.       @state_changed = false
  355.       effective |= states_plus(user, item.plus_state_set)
  356.       effective |= states_minus(user, item.minus_state_set)
  357.       unless $game_temp.in_battle
  358.         self.damage_effect(user, 2)
  359.       end
  360.       # パラメータ上昇値が有効の場合
  361.       if item.parameter_type > 0 and item.parameter_points != 0
  362.         # パラメータで分岐
  363.         case item.parameter_type
  364.         when 1  # MaxHP
  365.           @maxhp_plus += item.parameter_points
  366.         when 2  # MaxSP
  367.           @maxsp_plus += item.parameter_points
  368.         when 3  # 腕力
  369.           @str_plus += item.parameter_points
  370.         when 4  # 器用さ
  371.           @dex_plus += item.parameter_points
  372.         when 5  # 素早さ
  373.           @agi_plus += item.parameter_points
  374.         when 6  # 魔力
  375.           @int_plus += item.parameter_points
  376.         end
  377.         # 有効フラグをセット
  378.         effective = true
  379.       end
  380.       # HP 回復率と回復量が 0 の場合
  381.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  382.         # ダメージに空文字列を設定
  383.         self.damage[user] = ""
  384.         # SP 回復率と回復量が 0、パラメータ上昇値が無効の場合
  385.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  386.            (item.parameter_type == 0 or item.parameter_points == 0)
  387.           # ステートに変化がない場合
  388.           unless @state_changed
  389.             # ダメージに "Miss" を設定
  390.             self.damage[user] = "Miss"
  391.           end
  392.         end
  393.       end
  394.     # ミスの場合
  395.     else
  396.       # ダメージに "Miss" を設定
  397.       self.damage[user] = "Miss"
  398.     end
  399.     # 戦闘中でない場合
  400.     unless $game_temp.in_battle
  401.       # ダメージに nil を設定
  402.       self.damage[user] = nil
  403.     end
  404.     # メソッド終了
  405.     return effective
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● ステート変化 (+) の適用
  409.   #     plus_state_set  : ステート変化 (+)
  410.   #--------------------------------------------------------------------------
  411.   def states_plus(battler, plus_state_set)
  412.     # 有効フラグをクリア
  413.     effective = false
  414.     # ループ (付加するステート)
  415.     for i in plus_state_set
  416.       # このステートが防御されていない場合
  417.       unless self.state_guard?(i)
  418.         # このステートがフルでなければ有効フラグをセット
  419.         effective |= self.state_full?(i) == false
  420.         # ステートが [抵抗しない] の場合
  421.         if $data_states[i].nonresistance
  422.           # ステート変化フラグをセット
  423.           @state_changed = true
  424.           # ステートを付加
  425.           add_state(i)
  426.         # このステートがフルではない場合
  427.         elsif self.state_full?(i) == false
  428.           # ステート有効度を確率に変換し、乱数と比較
  429.           if rand(100) < [0,100,80,60,40,20,0][self.state_ranks[i]]
  430.             # ステート変化フラグをセット
  431.             @state_changed = true
  432.             # ステートを付加
  433.             self.state_p[battler].push(i)
  434.           end
  435.         end
  436.       end
  437.     end
  438.     # メソッド終了
  439.     return effective
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # ● ステート変化 (-) の適用
  443.   #     minus_state_set : ステート変化 (-)
  444.   #--------------------------------------------------------------------------
  445.   def states_minus(battler, minus_state_set)
  446.     # 有効フラグをクリア
  447.     effective = false
  448.     # ループ (解除するステート)
  449.     for i in minus_state_set
  450.       # このステートが付加されていれば有効フラグをセット
  451.       effective |= self.state?(i)
  452.       # ステート変化フラグをセット
  453.       @state_changed = true
  454.       # ステートを解除
  455.       self.state_m[battler].push(i)
  456.     end
  457.     # メソッド終了
  458.     return effective
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # ● ダメージ演算
  462.   #--------------------------------------------------------------------------
  463.   def damage_effect(battler, item)
  464.     if item == 2
  465.       self.hp += self.recover_hp[battler]
  466.       self.sp += self.recover_sp[battler]
  467.       if self.recover_sp[battler] != 0
  468.         self.damage_sp[battler] = self.recover_sp[battler]
  469.       end
  470.     else
  471.       if self.recover_sp[battler] != 0  #如果sp恢复不为0,我们是通过SP的负恢复量代表损耗
  472.         self.damage_sp[battler] = self.recover_sp[battler]  
  473.         self.sp += self.recover_sp[battler]      #sp实际损耗
  474.       end      
  475.       if self.damage[battler].class != String
  476.         self.hp -= self.damage[battler]
  477.       end
  478.     end
  479.     for i in self.state_p[battler]
  480.       add_state(i)
  481.     end
  482.     for i in self.state_m[battler]
  483.       remove_state(i)
  484.     end
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ● スリップダメージの効果適用
  488.   #--------------------------------------------------------------------------
  489.   def slip_damage_effect
  490.     # ダメージを設定
  491.     self.damage["slip"] = self.dex + self.agi - self.str
  492.     # 分散
  493.     if self.damage["slip"].abs > 0
  494.       amp = [self.damage["slip"].abs * 15 / 100, 1].max
  495.       self.damage["slip"] += rand(amp+1) + rand(amp+1) - amp
  496.     end
  497.     # HP からダメージを減算
  498.     self.hp -= self.damage["slip"]
  499.     # メソッド終了
  500.     return true
  501.   end
  502. end
复制代码
这个脚本已经加入了您写的脚本,就是这个脚本我用起来会出问题。我只在属性F对技能的影响和毒的伤害这两个地方改动过,其他的应该是原封的了。

请您再帮我看一看,麻烦您了啊……
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
564
在线时间
169 小时
注册时间
2008-10-29
帖子
431
6
发表于 2010-9-11 10:56:04 | 只看该作者
我看过了,我把你的脚本丢到我的游戏里是正常的
唯一出错的地方是这句
self.recover_sp[user] = -self.damage[user].to_s   
这句 我记得我写的是
self.recover_sp[user] = -self.damage[user]
不用转数据格式
如果不是这里出问题,单凭这个脚本我检查不出其他问题
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
7
 楼主| 发表于 2010-9-11 11:23:40 | 只看该作者
本帖最后由 daiboy12 于 2010-9-11 11:29 编辑

啊 是的 这是我出了问题之后自己加上去的,忘记删掉了对不起。不麻烦您再另外写啦,把您的脚本给我吧,我再试试看行不。

我刚刚新建了个工程吧脚本放了进去还是不行。看来是我RTAB脚本的问题了。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
564
在线时间
169 小时
注册时间
2008-10-29
帖子
431
8
发表于 2010-9-13 12:12:41 | 只看该作者
我的RTAB已经被我改得面目全非了 改动了很多窗口 找不到纯净版的了-。-
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2010-9-13
帖子
5
9
发表于 2010-9-13 12:51:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
10
 楼主| 发表于 2010-9-13 19:06:05 | 只看该作者
要不前辈您看看错误代码是怎么回事吧!感觉好像不难解决的样子。

是在不行就只能麻烦前辈看看这个了,我用的RTAB脚本是这个。
http://rpg.blue/upload_program/files/RTAB.txt

感激不尽!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-6 00:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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