查看: 6800|回复: 30

[已经解决] 捕捉时宠物加入

[复制链接]
梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
发表于 2022-5-18 11:24:46 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 黑米馒头 于 2022-5-20 17:31 编辑

在脚本里用了个捕捉功能,

敌人对应角色ID,现在是单个敌人对应单个角色,如何改成单个敌人对应多个角色ID?

现在是8号敌人对应80号角色,如何改成8号对应80-100号角色,

当捕捉8号敌人的时候,队伍里有80-100角色的话,就去除已经获得的角色编号,当80-100号角色全在队伍里了,在次捕捉该敌人就捕捉不了了

注:一次只能捕捉1只宠物

# 捕捉系统设置
module BUZHUO_BABY
     ACID = [] # 敌人对应相应的角色  ACID[敌人id] = 角色id
  ACID[8] = 80
end



#获得宠物
@active_battler.kds_baby.push(BUZHUO_BABY::ACID[en.id])
$game_actors[BUZHUO_BABY::ACID[en.id]].zhuren = @active_battler.id

梦石
0
星屑
4756
在线时间
389 小时
注册时间
2012-11-8
回帖
235
发表于 2022-5-20 11:02:32 | 显示全部楼层
# 捕捉系统设置
module BUZHUO_BABY
  ACID = {1=>[a,b,c,d,e...],
               2=>[f,g,h,i...],
               …………} # 敌人对应相应的角色  ACID[敌人id] = [角色id数组]
end

# ACID = {敌人ID=>[对应角色ID数组]}

#获得宠物
BUZHUO_BABY::ACID[en.id].each do |i|
  unless @active_battler.kds_baby.include?(i)
    @active_battler.kds_baby.push(i)
    $game_actors[i].zhuren = @active_battler.id
    break
  end
end

没太明白楼主的意思,这段的意思是每个敌人ID可以对应多个角色id
获得时依次判定是否已有对应角色id,没有就加入,这个只能加入一个,如果要改为加入所有不存在的就去掉break

评分

参与人数 1星屑 +200 赞 +1 收起 理由
RyanBern + 200 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2022-5-20 17:32:11 | 显示全部楼层
qq634488405 发表于 2022-5-20 11:02
# 捕捉系统设置
module BUZHUO_BABY
  ACID = {1=>[a,b,c,d,e...],

应该是上次卡了,问题没打全,现在写全了,你帮我看看
回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2022-5-20 22:29:17 | 显示全部楼层
qq634488405 发表于 2022-5-20 11:02
# 捕捉系统设置
module BUZHUO_BABY
  ACID = {1=>[a,b,c,d,e...],

发现1个问题,我把敌人数组改成  ACID = {8=>[51,52,53]} ,3个宠物ID

然后捕捉的时候队伍里设置2个角色,当角色1和2同时捕捉敌人1的时候,
会同时出现捕捉数组里面同1个宠物的情况,如何改成,同时捕捉同1个敌人的时候,
宠物在队里了,就去除一个ID,比如1先行动,捕捉敌人,然后51号宠物入队了,
2号捕捉的时候只能捕捉其它两只,当这个数组里面的所有宠物都被捕捉了,
然后再次去捕捉改敌人的时候,就显示,无法继续捕捉该宠物了

1.png

下面是我的捕捉系统

[pre lang="ruby"]#==============================================================================
# ■ Scene_Battle (分割定义 4)
#------------------------------------------------------------------------------
#  处理战斗画面的类。
#==============================================================================

class Scene_Battle
  
  #======================================================
  # 【捕捉系统】
  # 生成提示窗口
  alias bnzz main
  def main
    @tip_window = Window_Tip1.new
    bnzz
    @tip_window.dispose
  end
  alias tgbmj update
  def update
    @tip_window.update
    tgbmj
  end
  def make_buzhuo_action_result # 捕捉
    # 设置动画ID
    @animation1_id = BUZHUO_BABY::ANI[@active_battler.id][0]
    @animation2_id = BUZHUO_BABY::ANI[@active_battler.id][1]
    # 法术值消耗
    if @active_battler.sp - BUZHUO_BABY::COMP >= 0
      @active_battler.sp -= BUZHUO_BABY::COMP
    end
    # 应用动画
    index = @active_battler.current_action.target_index
    en = $game_troop.smooth_target_enemy(index)
    @target_battlers = [en]
   
    # 帮助窗口显示"捕捉"
    @help_window.set_text(@active_battler.name + "发动了捕捉", 1)   
   
    # 队伍中的宠物
    acca = []
    for i in $game_party.actors
      acca += i.kds_baby
    end
    # 限制处理
    if @active_battler.kds_baby.size >= 8  # 测试用,身上8只宠物【仓库满】
      @active_battler.damage = "!c[4]" + @active_battler.name + "!c[6]携带的宠物已满!无法继续捕捉!c[2]" + en.name+"!c[6]!"
      @phase4_step = 3
      return
    elsif @active_battler.sp < BUZHUO_BABY::COMP     #【MP不足】
      @active_battler.damage = "!c[4]" + @active_battler.name + "!c[6]的!c[1]MP!c[6]不足!无法捕捉!c[2]" + en.name+"!c[6]!"
      @phase4_step = 3
      return
    elsif BUZHUO_BABY::LV[en.id] > @active_battler.level#【等级不够】
      @active_battler.damage = "!c[4]" + @active_battler.name + "!c[6]的等级低于!c[2]"+BUZHUO_BABY::LV[en.id].to_s+"!c[6]无法捕捉!c[2]" + en.name+"!c[6]!"
      @phase4_step = 3
      return
    elsif BUZHUO_BABY::UNENID.include?(en.id)#【无效目标】
      @active_battler.damage = "!c[4]" + @active_battler.name + "!c[6]无法捕捉该目标!c[2]" + en.name+"!c[6]!"
      @phase4_step = 3
      return
    elsif acca.include?(BUZHUO_BABY::ACID[en.id])#【无效目标】
      @active_battler.damage = "!c[2]" + en.name + "!c[6]已经在队伍中的召唤兽!"
      @phase4_step = 3
      return
    end
    # 突破限制捕捉处理
    if rand(10 + 100 * en.hp / en.maxhp) < BUZHUO_BABY::PC[@active_battler.id]
      @active_battler.damage = "!c[6]恭喜!c[4]"+@active_battler.name+"!c[6]成功捕获了!c[2]"+en.name+"!c[6]作为召唤兽!"
      
      #获得宠物
  #    @active_battler.kds_baby.push(BUZHUO_BABY::ACID[en.id])
  #    $game_actors[BUZHUO_BABY::ACID[en.id]].zhuren = @active_battler.id
      
      #获得宠物
      BUZHUO_BABY::ACID[en.id].each do |i|
        unless @active_battler.kds_baby.include?(i)
          @active_battler.kds_baby.push(i)
          $game_actors.zhuren = @active_battler.id
          break
        end
      end      
      
      
      # 在update_phase4_step5中让其死亡,被捕捉标志
      en.damage = "捕捉"
    else
      @active_battler.damage = "!c[2]" + en.name+"!c[6]十分机智的逃脱了!c[4]"+@active_battler.name+"!c[6]的捕捉!"
    end
  end
[/pre]
回复

使用道具 举报

梦石
0
星屑
4756
在线时间
389 小时
注册时间
2012-11-8
回帖
235
发表于 2022-5-20 22:33:50 | 显示全部楼层
黑米馒头 发表于 2022-5-20 17:32
应该是上次卡了,问题没打全,现在写全了,你帮我看看

意思是捕捉8号后添加到$game_party,放在80-100的空位?
回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2022-5-20 22:38:50 | 显示全部楼层
qq634488405 发表于 2022-5-20 22:33
意思是捕捉8号后添加到$game_party,放在80-100的空位?


是的,8号是个例子,后面还要设置好多宠物,因为我这个宠物系统,里面的宠物等同于角色,同个ID的宠物又不能同时出现在2个以上的角色身上,所以只能弄得这么复杂,弄多点数组,看起来好像捕捉敌人可以捕捉好多次一样~
回复

使用道具 举报

梦石
0
星屑
4756
在线时间
389 小时
注册时间
2012-11-8
回帖
235
发表于 2022-5-21 00:50:00 | 显示全部楼层
黑米馒头 发表于 2022-5-20 22:38
是的,8号是个例子,后面还要设置好多宠物,因为我这个宠物系统,里面的宠物等同于角色,同个ID的宠物又 ...

那这个捕捉系统要大改,ACID单对多ACID[en.id]的类型是数组,而原脚本ACID[en.id]是数字,所有用到这个的地方都要改
回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2022-5-21 06:51:47 | 显示全部楼层
本帖最后由 黑米馒头 于 2022-5-21 06:54 编辑
qq634488405 发表于 2022-5-21 00:50
那这个捕捉系统要大改,ACID单对多ACID[en.id]的类型是数组,而原脚本ACID[en.id]是数字,所有用到这个的 ...


[pre lang="ruby"]# 捕捉系统设置
module BUZHUO_BABY
  
  UNENID = [1,2,9,10] # 不可以捕捉的敌人id
  COMP = 20 # 消耗MP
  
  LV = [] # 敌人等级  LV[敌人ID] = 等级
  LV[1] = 1  
  LV[2] = 1   
  LV[8] = 1
  LV[9] = 10
  LV[10] = 1
  
  PC = [] # 成功概率 PC[角色id] = 概率
  PC[1] = 100
  PC[2] = 100
  PC[3] = 100
  PC[4] = 100
  PC[5] = 100
  
  ANI = [] # 动画   ANI[角色id] = [我方动画id, 敌方动画id]
  ANI[1] = [136, 69]
  ANI[2] = [70, 69]
  ANI[3] = [70, 69]
  ANI[4] = [70, 69]
  ANI[5] = [70, 69]
  
  ACID = [] # 敌人对应相应的角色  ACID[敌人id] = 角色id
  
  ACID[8] = 51
  
end[/pre]


整个捕捉系统就这两段脚本
回复

使用道具 举报

梦石
0
星屑
4756
在线时间
389 小时
注册时间
2012-11-8
回帖
235
发表于 2022-5-21 09:42:55 | 显示全部楼层
    elsif acca.include?(BUZHUO_BABY::ACID[en.id])#【无效目标】
      @active_battler.damage = "!c[2]" + en.name + "!c[6]已经在队伍中的召唤兽!"
      @phase4_step = 3
      return
    end
这一段的判断条件改一下就好,用数组交集运算判断是否有重复
回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2022-5-21 09:47:41 | 显示全部楼层
qq634488405 发表于 2022-5-21 09:42
elsif acca.include?(BUZHUO_BABY::ACID[en.id])#【无效目标】
      @active_battler.damage = "!c[2] ...

大佬帮忙改下吧,自己表示看都看不太懂
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部