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

Project1

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

[已经解决] 如何让队伍中某个角色的攻击力随队伍成员发生改变

[复制链接]

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

跳转到指定楼层
1
发表于 2014-5-27 16:24:38 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 喵呜喵5 于 2014-5-27 16:28 编辑

想实现这样一个效果,队伍中特定角色的攻击力在队伍中存在特定职业的成员时会上升。
目前的做法是修改Game_actor类里获取人物能力的方法,增加上判断队伍成员职业的语句,但是默认的判断队伍成员的语句会再次调用获取人物能力的方法,最终造成死循环。
目前的解决方法是获取队伍中人物职业时跳过这名角色,但是队伍中存在既能提升攻击力又拥有特定职业的角色时判定变得很头疼...

于是,如何如何让队伍中某个角色的攻击力随队伍成员发生改变?

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

13
发表于 2014-5-30 17:40:21 | 只看该作者
本帖最后由 taroxd 于 2014-6-2 09:52 编辑
喵呜喵5 发表于 2014-5-30 17:27
……但我还是不知道怎么解决


比如说一个解决办法
RUBY 代码复制
  1. class Game_Actor
  2.   alias m5_20140525_param_plus param_plus
  3.   def param_plus(param_id)
  4.     a_par = m5_20140525_param_plus(param_id)
  5.     return a_par if !@last_skill || # uninitialized
  6.       @actor_id != 1 # test_database
  7.     data = {1=>[1,2,3,4,5,6,7,8]} # test_database
  8.     $game_party.all_members.each do |actor|
  9.       class_id = actor.class_id
  10.       a_par += data[class_id][param_id] if data.has_key?(class_id)
  11.     end
  12.     a_par
  13.   end
  14. end

缺点:第一次初始化的完全恢复时,是按照未加成的mhp等进行计算的
但是这个随便处理一下,游戏玩家就看不出来了。比如Game_Actors中初始化角色之后立刻完全恢复之类。

如果怕由于其他人改脚本, @last_skill 的判断不可靠的话,可以在 Game_Actors 里面定义个 initialized? 或者 include? 之类的方法。这样应该就没什么问题了。

再比如说,如果不求功能完整的话,可以放弃mhp、mmp这两个属性

@Sion 结贴

评分

参与人数 2星屑 +120 梦石 +1 收起 理由
Sion + 1 认可答案
喵呜喵5 + 120 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

12
 楼主| 发表于 2014-5-30 17:27:15 | 只看该作者
taroxd 发表于 2014-5-30 17:03
测试代码:
$count = 0

……但我还是不知道怎么解决

点评

如果怕由于其他人改脚本, @last_skill 的判断不可靠的话,可以在 Game_Actors 里面定义个 initialized? 或者 include? 之类的方法。这样应该就没什么问题了。  发表于 2014-5-30 17:55
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

11
发表于 2014-5-30 17:03:38 | 只看该作者
本帖最后由 taroxd 于 2014-5-30 19:30 编辑
喵呜喵5 发表于 2014-5-28 19:04
我要提升的是角色所有技能的攻击力不是一个技能的攻击力......


测试代码:
RUBY 代码复制
  1. $count = 0
  2.  
  3. class Game_Actor
  4.   alias m5_20140525_param_plus param_plus
  5.   def param_plus(param_id)
  6.     a_par = m5_20140525_param_plus(param_id)
  7.     return a_par unless @actor_id == 1
  8.     $count += 1
  9.     data = {1=>[1,2,3,4,5,6,7,8]}
  10.     if $count >= 5
  11.       puts caller
  12.       Graphics.update until Input.trigger?(:C)
  13.     end
  14.     $game_party.all_members.each do |actor|
  15.       class_id = actor.class_id
  16.       a_par += data[class_id][param_id] if data.has_key?(class_id)
  17.     end
  18.     $count -= 1
  19.     a_par
  20.   end
  21. end


测试结果的一部分(发生问题的原因):

都是初始化的时候refresh惹的祸!!!


解决办法不用我说了吧~  你想怎么解决就怎么解决啦!

At Last,求糖!

评分

参与人数 1星屑 +120 收起 理由
喵呜喵5 + 120 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

10
 楼主| 发表于 2014-5-28 19:04:18 手机端发表。 | 只看该作者
紫苍焰 发表于 2014-5-28 18:52
……
话说,技能公式能做到用特定职业数目来增加攻击力不?能的话只需要用那个把默认的攻击指定为特定技能 ...

我要提升的是角色所有技能的攻击力不是一个技能的攻击力......
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
486 小时
注册时间
2007-5-27
帖子
807
9
发表于 2014-5-28 18:52:59 | 只看该作者
……
话说,技能公式能做到用特定职业数目来增加攻击力不?能的话只需要用那个把默认的攻击指定为特定技能的脚本加上公式就完美解决了……
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

8
发表于 2014-5-28 12:32:10 | 只看该作者
喵呜喵5 发表于 2014-5-28 11:01
三个断点都没p出来,只有
$game_party.all_members.each do |actor|这句前的断点可以出来,还是以死循环 ...


等到我有环境的时候再看看吧……话说你不是说只要去掉角色本身就不会死循环的么
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

7
 楼主| 发表于 2014-5-28 11:01:21 | 只看该作者
taroxd 发表于 2014-5-27 17:33
很抱歉我还是看不出哪里会死循环……看不出的话我自己写估计也会死循环的
脚本水平低,又没环境无法调试 ...

三个断点都没p出来,只有
$game_party.all_members.each do |actor|这句前的断点可以出来,还是以死循环的方式无限的p出来直到堆栈过深
回复 支持 反对

使用道具 举报

Lv2.观梦者

无节操

梦石
0
星屑
607
在线时间
795 小时
注册时间
2009-2-6
帖子
3939

开拓者贵宾

6
发表于 2014-5-27 18:56:33 | 只看该作者
换个方向,特定职业无非有几种情况,入队离队外加改职业,从这三个方向入手避开成员迭代呗。
atk那里只是+某变量,在上面3个情况修改这个变量,这样不就好了?
Brandnew day, Brandnew Life
                              实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

5
发表于 2014-5-27 17:33:03 | 只看该作者
本帖最后由 taroxd 于 2014-5-27 17:46 编辑
喵呜喵5 发表于 2014-5-27 16:54
@taroxd


很抱歉我还是看不出哪里会死循环……看不出的话我自己写估计也会死循环的
脚本水平低,又没环境无法调试真是不爽
如果是去掉自身就不会死循环的话,我只能这样看看了……
  1. class Game_Actor
  2.   alias m5_20140525_param_plus param_plus
  3.   def param_plus(param_id)
  4.   a_par = m5_20140525_param_plus(param_id)
  5.   return a_par if @actor_id != ACTOR1 && @actor_id != ACTOR2
  6.   data = CLASS
  7.   $game_party.all_members.each do |actor|
  8.     p '断点1' if actor.id == @actor_id
  9.   class_id = actor.class_id
  10.     p '断点2' if actor.id == @actor_id
  11.   a_par += data[class_id][param_id] if data.has_key?(class_id)
  12.     p '断点3' if actor.id == @actor_id
  13.   end
  14.   a_par
  15.   end
  16. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 17:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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