查看: 1823|回复: 2

[已经解决] 如何获取战斗中使用技能的队员的ID(有范例)

[复制链接]
梦石
0
星屑
90
在线时间
357 小时
注册时间
2006-3-3
回帖
163
发表于 2015-3-26 16:29:27 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 duchen5779 于 2015-3-26 20:20 编辑

用了一个技能熟练度升级的脚本。其中自己加了一些东西,见27行-29行:当目前使用的技能的属性为30号属性时,150号变量数组里的当前使用技能的这个队员的ID号变量加10。
具体意思就是,150号变量是我设置的一个数组,数组里的每一个变量是和相应的队友的ID是绑定的,比如02号队友,用的就是[150][2]号来储存一个系数。这样在战斗中当技能升级时,可以方便的增加这个系数的值。
但测试的时候出现 ‘no implicit conversion from nil to integer“的错误,第28行的,我估计是和变量没有转换有关系。可是到底应该怎么写?$game_party.members[@actor_index]?还是$game_party.members[@actor_index].id?虽然查了好多地方,但是对于这些还是一知半解,求解答。

[pre lang="ruby"]=begin
在可以升级的技能的备注栏里写上
下等级技能编号
升级经验
每次增加经验
例
下等级技能编号2
升级经验10
每次增加经验2
=end
class Game_Actor
  MULTISKILLS = false#true时可以同时学会高等级技能和低等级技能,
                    #false时候学会高等级技能后会遗忘低等级技能
  alias supersetup setup
  def setup(*args)
    supersetup(*args)
    @skillexp = {}

    end
  def addskillexp
    return unless @action.skill.updatable?
    @skillexp[@action.skill.id] = 0 if @skillexp[@action.skill.id].nil?
    @skillexp[@action.skill.id] += @action.skill.eachexp
    if @skillexp[@action.skill.id] >= @action.skill.maxexp
      return if @skills.include?(@action.skill.nextskillid)
      learn_skill(@action.skill.nextskillid)  
    if @action.skill.element_set.include?(30)      
    $game_variables[150][$game_party.members[@actor_index]] += 10
     end
      forget_skill(@action.skill.id) unless MULTISKILLS
      $game_message.new_page
      text = "技能" + @action.skill.name + "升级"
      $game_message.texts.push(text)
      text = "学会" + $data_skills[@action.skill.nextskillid].name
      $game_message.texts.push(text)

   
    end
    end
  end
  
  
  
class Game_Enemy
  def addskillexp
  end
end
module RPG
  class Skill
    def updatable?
      @note =~ /下等级技能编号(\d+)/
      return !$1.nil?
    end
    def nextskillid
      @note =~ /下等级技能编号(\d+)/
      return $1.to_i
    end
    def maxexp
      @note =~ /升级经验(\d+)/
      return $1.to_i
    end
    def eachexp
      @note =~ /每次增加经验(\d+)/
      return $1.to_i
    end
  end
end
class Scene_Battle
  alias superexecute_action_skill execute_action_skill
  def execute_action_skill
    superexecute_action_skill
    @active_battler.addskillexp
  end
end
[/pre]

上传了一个范例……战斗的时候用“炎”这个技能之后报错,求助!谢谢!感激不尽!!
@正太君  
@怪蜀黍  

Project3.rar

238.3 KB, 下载次数: 47

梦石
0
星屑
90
在线时间
357 小时
注册时间
2006-3-3
回帖
163
 楼主| 发表于 2015-3-27 10:48:39 | 显示全部楼层
本帖最后由 duchen5779 于 2015-3-27 11:16 编辑

试了一下,没问题。
额……才看明白,第一行代码是初始化变量数组吧?其实我在地图上弄了一个这样的事件:$game_variables[150] = []
其实问题主要是在那个@actor.id那里……先前觉得肯定很复杂,搞了好多复杂的用索引用ID的办法……结果没想到一个简单的@actor.id就代表了当前使用技能的队员的编号……看来还得摸索啊……
另:不知道这个帖子 https://rpg.blue/thread-377590-1-1.html   里面的那个不同队员不同经验值是不是能做呢
回复

使用道具 举报

八宝粥的基叔

梦石
0
星屑
4957
在线时间
5234 小时
注册时间
2009-4-29
回帖
14054

贵宾

发表于 2015-3-27 09:15:05 | 显示全部楼层
事件1:
  1. $game_variables[1] = Array.new($data_actors.size + 1){0} unless $game_variables[1].is_a?(Array)
复制代码
独立开关: A = ON


脚本编辑器:
  1.   def addskillexp
  2.     return unless @action.skill.updatable?
  3.     @skillexp[@action.skill.id] = 0 if @skillexp[@action.skill.id].nil?
  4.     @skillexp[@action.skill.id] += @action.skill.eachexp
  5.     if @skillexp[@action.skill.id] >= @action.skill.maxexp
  6.       return if @skills.include?(@action.skill.nextskillid)
  7.       learn_skill(@action.skill.nextskillid)  
  8.     if @action.skill.element_set.include?(10)      
  9.       $game_variables[1][@actor_id] += 10
  10.     end
  11.       forget_skill(@action.skill.id) unless MULTISKILLS
  12.       $game_message.new_page
  13.       text = "技能" + @action.skill.name + "升级"
  14.       $game_message.texts.push(text)
  15.       text = "学会" + $data_skills[@action.skill.nextskillid].name
  16.       $game_message.texts.push(text)
  17.     end
  18.   end
复制代码

评分

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

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部