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

Project1

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

如何由防具的属性来实现反弹的效果?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
跳转到指定楼层
1
发表于 2008-10-21 17:49:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x

以下范例中攻击反弹和魔法反弹的效果由角色的状态实现的,我希望在原来不改变的基础上添加武器或防具的属性来实现反弹,比如:装备有反弹属性的盾牌也能实现反弹的效果。





[范例]吸收、无效、反弹的技能演示
http://rpg.blue/htm/Topic_14017.htm   


版务信息:本贴由楼主自主结贴~
HзO

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
2
 楼主| 发表于 2008-10-23 16:54:43 | 只看该作者
回复 支持 反对

使用道具 举报

Lv1.梦旅人

綾川司の姫様<

梦石
0
星屑
50
在线时间
796 小时
注册时间
2007-12-20
帖子
4520

贵宾第3届短篇游戏大赛R剧及RMTV组亚军

3
发表于 2008-10-27 10:12:51 | 只看该作者
  1. # ▼▲▼ XRXS27. 特殊効果 SuperEX「魔法反射」 ver.1.03 ▼▲▼
  2. # by 桜雅 在土, clum-sea

  3. #==============================================================================
  4. # □ カスタマイズポイント
  5. #==============================================================================
  6. class Scene_Battle
  7. MAGIC_REFREX_STATE_NAME         = "反射"   # 「魔法反射」ステート名
  8. MAGIC_REFREX_ANIMATION_ID       =  138          #  魔法反射のアニメーションID
  9. REFREX_PENETRATION_ELEMENT_NAME = "反射"   # 「反射貫通」属性名
  10. end
  11. class Scene_Battle
  12. #--------------------------------------------------------------------------
  13. # ○ スキルが魔法であるかどうか
  14. #--------------------------------------------------------------------------
  15. def skill_is_a_magic?(skill)
  16.    return false unless skill.is_a?(RPG::Skill)
  17.    return (skill.int_f > skill.str_f)
  18. end
  19. end

  20. #=============================================================================
  21. # ◇ 「魔法反射」ステート by 桜雅 在土
  22. #=============================================================================
  23. class Scene_Battle
  24. #--------------------------------------------------------------------------
  25. # ● スキルまたはアイテムの対象側バトラー設定
  26. #--------------------------------------------------------------------------
  27. alias xrxs_magic_refrex_set_target_battlers set_target_battlers
  28. def set_target_battlers(scope)
  29.    xrxs_magic_refrex_set_target_battlers(scope)
  30.    # スキル使用時
  31.    if @active_battler.current_action.kind == 1
  32.      # 魔法である場合
  33.      if skill_is_a_magic?(@skill)
  34.        element_id = get_refrex_penetration_id
  35.        # スキルに反射貫通が付加されているか。
  36.        skill_state_penetration(@skill, element_id, @active_battler)
  37.        if @active_battler.penetration != true
  38.          # 検索
  39.          for target in @target_battlers.dup
  40.            # 魔法反射ステートにかかっているか?
  41.            state_id = get_magical_refrex_id
  42.            if state_id != nil and target.state?(state_id)
  43.              # 反射---
  44.              target.refrexed = true
  45.              @target_battlers.delete(target)
  46.              unless @target_battlers.include?(@active_battler)
  47.                @target_battlers.push(@active_battler)
  48.              end
  49.              # ---反射の設定完了
  50.            end
  51.          end
  52.        end
  53.      end
  54.    end
  55. end
  56. #--------------------------------------------------------------------------
  57. # ● スキルに反射貫通属性が付加されているか
  58. #--------------------------------------------------------------------------
  59. def skill_state_penetration(skill, element_id, user)
  60.    if skill.element_set.include?(element_id)
  61.      # 反射フラグリセット
  62.      user.refrexed = false
  63.      # 貫通フラグをセット
  64.      user.penetration = true
  65.    end
  66. end
  67. #--------------------------------------------------------------------------
  68. # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  69. #--------------------------------------------------------------------------
  70. alias xrxs_magic_refrex_update_phase4_step4 update_phase4_step4
  71. def update_phase4_step4
  72.    # 対象側アニメーション
  73.    xrxs_magic_refrex_update_phase4_step4
  74.    # 魔法反射(貫通しない場合)
  75.    for target in $game_party.actors + $game_troop.enemies - @target_battlers
  76.      next if target.refrexed == nil or target.refrexed == false
  77.      target.animation_id = MAGIC_REFREX_ANIMATION_ID
  78.      target.animation_hit = (target.damage != "Miss")
  79.      # 反射フラグリセット
  80.      target.refrexed = false
  81.    end
  82.    for target in @target_battlers
  83.      # 反射フラグリセット
  84.      target.refrexed = false
  85.    end
  86.    # 貫通フラグリセット
  87.    @active_battler.penetration = false
  88. end
  89. #--------------------------------------------------------------------------
  90. # ○ 魔法反射ステートのID取得
  91. #--------------------------------------------------------------------------
  92. def get_magical_refrex_id
  93.    if @xrxs27_magic_refrex_state_id == nil
  94.      result = nil
  95.      for i in 1 ... $data_states.size
  96.        if $data_states[i].name[/\A#{MAGIC_REFREX_STATE_NAME}\Z/]
  97.          result = $data_states[i].id
  98.          break
  99.        end
  100.      end
  101.      @xrxs27_magic_refrex_state_id = result
  102.    end
  103.    return @xrxs27_magic_refrex_state_id
  104. end
  105. #--------------------------------------------------------------------------
  106. # ○ 反射貫通属性のID取得
  107. #--------------------------------------------------------------------------
  108. def get_refrex_penetration_id
  109.    if @xrxs27_refrex_penetration_element_id == nil
  110.      result = nil
  111.      for i in 1 ... $data_system.elements.size
  112.        if $data_system.elements[i] == REFREX_PENETRATION_ELEMENT_NAME
  113.          result = i
  114.          break
  115.        end
  116.      end
  117.      @xrxs27_refrex_penetration_element_id = result
  118.    end
  119.    return @xrxs27_refrex_penetration_element_id
  120. end
  121. end
  122. #==============================================================================
  123. # ■ Game_Battler
  124. #==============================================================================
  125. class Game_Battler
  126. attr_accessor :refrexed
  127. attr_accessor :penetration
  128. end
复制代码

反弹?类似这样的效果么- -

生命即是责任。自己即是世界。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
4
 楼主| 发表于 2008-10-27 20:16:50 | 只看该作者
楼上贴的是状态法反弹吧?我说的是由防具的属性来实现反弹
HзO
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
2 小时
注册时间
2008-7-9
帖子
121
5
发表于 2008-10-27 20:39:29 | 只看该作者
让防具上添加自动的状态呗,用属性的话,还要重写脚本。
如果楼主有脚本基础,我倒不介意教你。
雨~ 纯净~又有点感伤……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
6
 楼主| 发表于 2008-10-27 21:04:19 | 只看该作者
我是这么改的,不过好像和战斗特殊效果有些冲突

            # 这里添加当角色的装备中带有62号属性,反弹魔法
            if state_id != nil and target.state?(state_id) or $data_armors[target.armor1_id].guard_element_set.include?(62)
              
              # 反射---
              target.refrexed = true
              @target_battlers.delete(target)
              unless @target_battlers.include?(@active_battler)
                @target_battlers.push(@active_battler)
              end
HзO
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
2 小时
注册时间
2008-7-9
帖子
121
7
发表于 2008-10-27 21:38:19 | 只看该作者
首先,让我们分析以下这句:
$data_armors[target.armor1_id].guard_element_set.include?(62)

读取$data_armors的资料,其编号为装备的ID的属性是否包括62号属性。
这句脚本是针对全部的battler,可是敌人却没有armor1_id的,所以会出错,改一改判断方式:
if state_id != nil and target.state?(state_id)
  if target.is_a?(Game_Actor)
    if target.armor1_id != 0
      if $data_armors[target.armor1_id].guard_element_set.include?(62)
        target.refrexed = true
        @target_battlers.delete(target)
        unless @target_battlers.include?(@active_battler)
          @target_battlers.push(@active_battler)
        end
      end
    end
  else
    target.refrexed = true
    @target_battlers.delete(target)
    unless @target_battlers.include?(@active_battler)
      @target_battlers.push(@active_battler)
    end
  end
end

无测试,纯理论,要是那里手误了请自己修改。
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
雨~ 纯净~又有点感伤……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-22 18:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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