查看: 2169|回复: 9

[已经解决] 请教DQ技能组别脚本改后的问题

[复制链接]
梦石
0
星屑
115
在线时间
121 小时
注册时间
2009-7-17
回帖
113
发表于 2014-11-2 16:04:58 | 显示全部楼层 |阅读模式

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

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

×
请教各位大大,原脚本为九夜神尊的技能组别范围脚本,我现在改为了读取技能备注,然后改变攻击对象的效果,但是发现只能读取第一个横排的效果,第二个竖排的攻击对象仍旧是横排的,请大大们帮忙看看,谢谢
[pre lang="ruby" line="1"]#=================================================
# ■ 技能组别范围
#



=begin

使用方法:设置技能的作用范围为四个随机敌人,原有的4随机敌人定义被取消。

改自九夜神尊的技能组别范围

=end

class RPG::UsableItem < RPG::BaseItem
#------------------------------------------------
# ●需要选择
#------------------------------------------------
def need_selection?
[1, 6,7, 9].include?(@scope)
end
#------------------------------------------------
# ●随机对象
#------------------------------------------------

def for_random?
[3, 4, 5].include?(@scope)
end
#------------------------------------------------
# ●组别对象
#------------------------------------------------
def for_group?
@scope==6
end


end

#encoding:utf-8
#==============================================================================
# ■ Game_Action
#------------------------------------------------------------------------------
#  处理战斗中的行动的类。本类在 Game_Battler 类的内部使用。
#==============================================================================

class Game_Action
#--------------------------------------------------------------------------
# ● 目标为敌人
#--------------------------------------------------------------------------

  
alias swtf_targets_for_opponents targets_for_opponents
  def targets_for_opponents
   if $data_skills[80].note.include?("横排")
      if item.for_group?
      return opponents_unit.group_target1(@target_index)
      end
   else #$data_skills[80].note.include?("竖排")
      if item.for_group?
      return opponents_unit.group_target2(@target_index)
      end
   end
  swtf_targets_for_opponents
  end
end
#encoding:utf-8
#==============================================================================
# ■ Game_Unit
#------------------------------------------------------------------------------
#  管理游戏单位的类。是 Game_Party 和 Game_Troop 类的父类。
#==============================================================================

class Game_Unit

#--------------------------------------------------------------------------
# ● 决定组别目标
#
#--------------------------------------------------------------------------

def group_target1(index)   #横排目标数据
   group1 = []
   member = members[index]
   members.each do |enemy|
   if enemy.enemy_id == $game_troop.members[0].enemy_id  
   group1.push enemy if enemy.alive?
   end
   if enemy.enemy_id == $game_troop.members[1].enemy_id  
   group1.push enemy if enemy.alive?
   end
   if enemy.enemy_id == $game_troop.members[2].enemy_id  
   group1.push enemy if enemy.alive?
end

end
   return group1
end



def group_target2(index)    #竖排目标数据
   group2 = []
   member = members[index]
   members.each do |enemy|
   if enemy.enemy_id == $game_troop.members[1].enemy_id  
   group2.push enemy if enemy.alive?
   end
   if enemy.enemy_id == $game_troop.members[4].enemy_id  
   group2.push enemy if enemy.alive?
   end

end
   return group2

end

end[/pre]


@taroxd   @VIPArcher   @tseyik

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-11-2 17:06:01 | 显示全部楼层
看不懂你的问题。根据脚本来看,只读取80号技能的备注有什么意义?

评分

参与人数 1星屑 +132 收起 理由
VIPArcher + 132 我很赞同

查看全部评分

回复

使用道具 举报

无限の剣制

梦石
0
星屑
10450
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-11-2 18:55:26 | 显示全部楼层
看不懂你的问题。根据脚本来看,54行你大概是要这样if item.note.include?("横排")
回复

使用道具 举报

梦石
0
星屑
115
在线时间
121 小时
注册时间
2009-7-17
回帖
113
 楼主| 发表于 2014-11-2 21:00:11 | 显示全部楼层
taroxd 发表于 2014-11-2 17:06
看不懂你的问题。根据脚本来看,只读取80号技能的备注有什么意义?


只读取80号是为了测试,实际使用此数值与角色ID挂钩,现在的问题就是,此脚本貌似在战斗中只运行一次,选取新的技能时就不再运行了,比如我的80号技能选的类别是随机4人,然后备注横排,战斗中使用效果就是攻击对方1号,2号,3号敌人,然后又随便找了个技能,类别也选随机4人(写不写备注就无所谓了,因为只要for_group就可以了,同样是为了测试),结果攻击的也是对方1号,2号,3号敌人,所以我觉得是脚本只运行了一次,就是如何使其在每次选取我方技能时就判断一次,重新给其攻击目标赋值,请大大赐教
@taroxd
@VIPArcher
回复

使用道具 举报

无限の剣制

梦石
0
星屑
10450
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-11-2 21:04:17 | 显示全部楼层
morningboo 发表于 2014-11-2 21:00
只读取80号是为了测试,实际使用此数值与角色ID挂钩,现在的问题就是,此脚本貌似在战斗中只运行一次,选 ...

你只读取$data_skills[80].note.include?("横排")那么无论你用什么技能,只要80号技能有备注"横排",那么这里永远返回true。这样说你明白了吗?

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
115
在线时间
121 小时
注册时间
2009-7-17
回帖
113
 楼主| 发表于 2014-11-2 21:33:40 | 显示全部楼层
VIPArcher 发表于 2014-11-2 21:04
你只读取$data_skills[80].note.include?("横排")那么无论你用什么技能,只要80号技能有备注"横排",那么 ...

嗯,懂了,那么请问大大,应该怎么样写呢?
望不吝赐教,脚本新手。

点评

看地板  发表于 2014-11-2 21:46
回复

使用道具 举报

梦石
0
星屑
115
在线时间
121 小时
注册时间
2009-7-17
回帖
113
 楼主| 发表于 2014-11-3 09:50:41 | 显示全部楼层
谢谢大大,问题解决了,还有个小问题,就是我用什么判断敌人使用此技能的时候对我方也达到同样效果呢?
我在def targets_for_opponents中用item.for_friend?或item.for_opponent?判断都会出现问题,只能单项实现效果,轮到对方时就会出现没有定义enemy_id或id方法,下面的def group_target2(index)我改写成这样了:
  1. class Game_Unit

  2. #--------------------------------------------------------------------------
  3. # ● 决定组别目标
  4. #
  5. #--------------------------------------------------------------------------

  6. def group_target1(index)   #横排目标数据我方攻击敌方
  7.    group1 = []
  8.    member = members[index]
  9.    members.each do |enemy|
  10.    if enemy.enemy_id == $game_troop.members[0].enemy_id  
  11.    group1.push enemy if enemy.alive?
  12.    end
  13.    if enemy.enemy_id == $game_troop.members[1].enemy_id  
  14.    group1.push enemy if enemy.alive?
  15.    end
  16.    if enemy.enemy_id == $game_troop.members[2].enemy_id  
  17.    group1.push enemy if enemy.alive?
  18. end

  19. end
  20.    return group1
  21. end



  22. def group_target2(index)    #竖排目标数据我方攻击敌方
  23.    group2 = []
  24.    member = members[index]
  25.    members.each do |enemy|
  26.    if enemy.enemy_id == $game_troop.members[1].enemy_id  
  27.    group2.push enemy if enemy.alive?
  28.    end
  29.    if enemy.enemy_id == $game_troop.members[4].enemy_id  
  30.    group2.push enemy if enemy.alive?
  31.    end

  32. end
  33.    return group2

  34. end

  35. def group_target3(index)   #横排目标数据敌方攻击我方
  36.    group3 = []
  37.    member = members[index]
  38.    members.each do |enemy|
  39.    if enemy.id == $game_party.members[0].id
  40.    group3.push enemy if enemy.alive?
  41.    end
  42.    if enemy.id == $game_party.members[1].id
  43.    group3.push enemy if enemy.alive?
  44.    end
  45.    if enemy.id == $game_party.members[2].id
  46.    group3.push enemy if enemy.alive?
  47. end

  48. end
  49.    return group3
  50. end



  51. def group_target4(index)    #竖排目标数据敌方攻击我方
  52.    group4 = []
  53.    member = members[index]
  54.    members.each do |enemy|
  55.    if enemy.id == $game_party.members[1].id
  56.    group4.push enemy if enemy.alive?
  57.    end
  58.    if enemy.id == $game_party.members[4].id
  59.    group4.push enemy if enemy.alive?
  60.    end

  61. end
  62.    return group4

  63. end

  64. end
复制代码
请大大指教
@VIPArcher @taroxd
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-11-3 12:33:13 | 显示全部楼层
morningboo 发表于 2014-11-3 09:50
谢谢大大,问题解决了,还有个小问题,就是我用什么判断敌人使用此技能的时候对我方也达到同样效果呢?
我 ...


没看出你为什么要读取id。members是一个数组,直接用id索引不就可以了,为什么要each再多绕一圈

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
115
在线时间
121 小时
注册时间
2009-7-17
回帖
113
 楼主| 发表于 2014-11-3 15:10:11 | 显示全部楼层
本帖最后由 morningboo 于 2014-11-3 16:18 编辑
taroxd 发表于 2014-11-3 12:33
没看出你为什么要读取id。members是一个数组,直接用id索引不就可以了,为什么要each再多绕一圈 ...


请问,如何不用each,能就我这个举个例子吗?
还有请问技能效果想让敌方对我方产生同样效果怎么做呢?
或者这么问,请教如何判断行动方是敌方还是我方?
@VIPArcher @taroxd @三途亚梦  
回复

使用道具 举报

梦石
0
星屑
115
在线时间
121 小时
注册时间
2009-7-17
回帖
113
 楼主| 发表于 2014-11-3 16:56:56 | 显示全部楼层
问题解决了,用subject.is_a?(Game_Actor),请版主结贴,谢谢各位的解答。@taroxd @VIPArcher

点评

谢谢版主解答,.actor?我试了的,貌似不能在Game_Action中使用,会出错,显示未定义方法  发表于 2014-11-5 11:24
如果非要这样的话,subject.actor? 就可以  发表于 2014-11-3 17:17
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部