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

Project1

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

[已经解决] 请问怎么制作一个“伤害连接”的状态?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2019
在线时间
1871 小时
注册时间
2009-8-17
帖子
256
跳转到指定楼层
1
发表于 2013-9-26 23:20:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
例如,有敌人A和B,并且中了“连接”状态,那么A受到伤害,B也同样受到伤害(反之亦然)。
不知道怎样才能使拥有“连接”状态的敌人同时受到伤害。。

评分

参与人数 1星屑 +35 收起 理由
弗雷德 + 35 手动认可奖励。

查看全部评分

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 2013-9-27 09:49:53 | 只看该作者
本帖最后由 RyanBern 于 2013-9-28 09:25 编辑

我做了一个,不知道是否满足楼主的要求,如果不满足,请及时提出来。
放到Main组之前即可。新工程测试无误。
  1. #============================================================================
  2. # 技能连锁 Ver 1.0
  3. # 作者:RyanBern
  4. #============================================================================
  5. # 功能特色:
  6. #     设定一个特殊状态A,每次攻击,除了常规目标受到伤害外,持有该特殊状态的
  7. #     角色(或敌人)也要受到伤害。
  8. #     所受伤害值等同于A受到的伤害,如果攻击A无效,那么连锁伤害无效。
  9. #     如果是群体攻击,并且A和B连锁,那么如果A和B都中了群体伤害的话,伤害值为
  10. #         两个人中较大的伤害,多个人也一样。
  11. #============================================================================
  12. # 使用方法:
  13. #     更改下面的常量LINK_STATUS = x,表示x号状态为连锁状态。
  14. #     设定死亡后或者战斗结束后,连锁状态自动解除(需要编者自行设定)。
  15. #     一般情况下,受到攻击时,连锁状态不会解除,当然编者可以自行更改。
  16. #============================================================================

  17. LINK_STATE = 17

  18. class Game_Battler
  19.   #--------------------------------------------------------------------------
  20.   # 连锁伤害
  21.   #--------------------------------------------------------------------------
  22.   def link_damage
  23.     count = 0
  24.     # 没有造成伤害或者没有连锁状态的时候返回false
  25.     if !self.damage.is_a?(Fixnum) or !self.state?(LINK_STATE)
  26.       return false
  27.     end
  28.     # 除此以外的情况
  29.     if self.is_a?(Game_Actor)
  30.       # 搜索同队伍的所有成员,不包括本身
  31.       for actor in $game_party.actors - [self]
  32.         # 如果符合条件
  33.         if actor.state?(LINK_STATE)
  34.           # 被附加的人也具有伤害的情况下
  35.           if actor.damage.is_a?(Fixnum)
  36.             # 保留较大伤害
  37.             if actor.damage < self.damage
  38.               actor.damage = self.damage
  39.             end
  40.           else
  41.             # 这以外的情况,伤害值复制
  42.             actor.damage = self.damage
  43.           end
  44.           if actor.damage.is_a?(Fixnum)
  45.             actor.hp -= actor.damage
  46.           end
  47.           actor.damage_pop = true
  48.           # 计数器加1
  49.           count += 1
  50.         end
  51.       end
  52.       return count > 0 ? true : false
  53.     end
  54.     if self.is_a?(Game_Enemy)
  55.       # 搜索敌人队伍所有成员,不包括本身
  56.       for enemy in $game_troop.enemies - [self]
  57.         if enemy.state?(LINK_STATE)
  58.           # 被附加的人也具有伤害的情况下
  59.           if enemy.damage.is_a?(Fixnum)
  60.             # 保留较大伤害
  61.             if enemy.damage < self.damage
  62.               enemy.damage = self.damage
  63.             end
  64.           else
  65.             # 这以外的情况,伤害值复制
  66.             enemy.damage = self.damage
  67.           end
  68.           if enemy.damage.is_a?(Fixnum)
  69.             enemy.hp -= enemy.damage
  70.           end
  71.           enemy.damage_pop = true
  72.           # 计数器加1
  73.           count += 1
  74.         end
  75.       end
  76.       return count > 0 ? true : false
  77.     end
  78.   end
  79. end


  80. class Scene_Battle
  81.   #--------------------------------------------------------------------------
  82.   # ● 刷新画面 (主回合步骤 1 : 准备行动)
  83.   #--------------------------------------------------------------------------
  84.   def update_phase4_step1
  85.     # 隐藏帮助窗口
  86.     @help_window.visible = false
  87.     # 判定胜败
  88.     if judge
  89.       # 胜利或者失败的情况下 : 过程结束
  90.       return
  91.     end
  92.     # 强制行动的战斗者不存在的情况下
  93.     if $game_temp.forcing_battler == nil
  94.       # 设置战斗事件
  95.       setup_battle_event
  96.       # 执行战斗事件中的情况下
  97.       if $game_system.battle_interpreter.running?
  98.         return
  99.       end
  100.     end
  101.     # 强制行动的战斗者存在的情况下
  102.     if $game_temp.forcing_battler != nil
  103.       # 在头部添加后移动
  104.       @action_battlers.delete($game_temp.forcing_battler)
  105.       @action_battlers.unshift($game_temp.forcing_battler)
  106.     end
  107.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  108.     if @action_battlers.size == 0
  109.       # 开始同伴命令回合
  110.       start_phase2
  111.       return
  112.     end
  113.     # 初始化动画 ID 和公共事件 ID
  114.     @animation1_id = 0
  115.     @animation2_id = 0
  116.     @common_event_id = 0
  117.     # 未行动的战斗者移动到序列的头部
  118.     @active_battler = @action_battlers.shift
  119.     # 如果已经在战斗之外的情况下
  120.     if @active_battler.index == nil
  121.       return
  122.     end
  123.     # 连续伤害
  124.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  125.       @active_battler.slip_damage_effect
  126.       @active_battler.damage_pop = true
  127.     end
  128.     # 连锁伤害
  129.     @active_battler.link_damage
  130.     # 自然解除状态
  131.     @active_battler.remove_states_auto
  132.     # 刷新状态窗口
  133.     @status_window.refresh
  134.     # 移至步骤 2
  135.     @phase4_step = 2
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  139.   #--------------------------------------------------------------------------
  140.   def update_phase4_step5
  141.     # 隐藏帮助窗口
  142.     @help_window.visible = false
  143.     # 刷新状态窗口
  144.     @status_window.refresh
  145.     # 显示伤害
  146.     for target in @target_battlers
  147.       if target.damage != nil
  148.         target.damage_pop = true
  149.         # 连锁伤害
  150.         target.link_damage
  151.       end
  152.     end
  153.     # 移至步骤 6
  154.     @phase4_step = 6
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 刷新画面 (主回合步骤 6 : 刷新)
  158.   #--------------------------------------------------------------------------
  159.   def update_phase4_step6
  160.     # 清除强制行动对像的战斗者
  161.     $game_temp.forcing_battler = nil
  162.     # 公共事件 ID 有效的情况下
  163.     if @common_event_id > 0
  164.       # 设置事件
  165.       common_event = $data_common_events[@common_event_id]
  166.       $game_system.battle_interpreter.setup(common_event.list, 0)
  167.     end
  168.     # 移至步骤 1
  169.     @phase4_step = 1
  170.   end
  171. end
复制代码

另外如果有什么乱码的地方,就是显示url一串奇怪的东西,删掉就好。

点评

群攻法术那个设置不科学  发表于 2013-9-28 10:53
群攻法术那个设置不科学  发表于 2013-9-28 10:53
嗯,第一个脚本写的时候思路有问题,我已经改过了。另外默认受到攻击后,连锁状态不会解除。  发表于 2013-9-28 09:29
有"连接"状态的目标不能放入@target_battler数组中,应该另外建立一个数组,专门结算。还有是否考虑"连接"伤害后解除该状态?  发表于 2013-9-27 21:59
先谢谢帮助了,晚点回家试试。  发表于 2013-9-27 10:00

评分

参与人数 1星屑 +168 收起 理由
弗雷德 + 168 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2019
在线时间
1871 小时
注册时间
2009-8-17
帖子
256
3
 楼主| 发表于 2013-9-27 21:44:29 | 只看该作者
RyanBern 发表于 2013-9-27 09:49
我做了一个,不知道是否满足楼主的要求,如果不满足,请及时提出来。
放到Main组之前即可。新工程测试无误 ...

总体效果非常满意。再次谢谢你的帮助。
不知道能否使连接状态的敌人受到的伤害相等?
比如,A受到100点伤害,B也受到100点伤害。
又比如攻击A,A闪避了,那么对B也不造成伤害。(现在的脚本的话,对A造成伤害,B是有可能闪避的。这种情况对于连接状态来说感觉非常的尴尬啊。)
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2013-9-27 23:03:30 | 只看该作者
351323331 发表于 2013-9-27 21:44
总体效果非常满意。再次谢谢你的帮助。
不知道能否使连接状态的敌人受到的伤害相等?
比如,A受到100点伤 ...

嗯,其实我对这个脚本也不太满意,原理不是很好,我再改改。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

5
发表于 2013-9-28 09:27:12 | 只看该作者
351323331 发表于 2013-9-27 21:44
总体效果非常满意。再次谢谢你的帮助。
不知道能否使连接状态的敌人受到的伤害相等?
比如,A受到100点伤 ...

更改后的代码已经放到了2L的位置,原来那个代码可以不要了。效果跟你说的差不多,但是还有值得改善的地方。当然有什么BUG的话及时告诉我就好。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2019
在线时间
1871 小时
注册时间
2009-8-17
帖子
256
6
 楼主| 发表于 2013-9-29 11:53:24 | 只看该作者
RyanBern 发表于 2013-9-28 09:27
更改后的代码已经放到了2L的位置,原来那个代码可以不要了。效果跟你说的差不多,但是还有值得改善的地方 ...

非常满意。谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 19:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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