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

Project1

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

[已经解决] 关于变量护盾,求脚本大神帮助

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
115 小时
注册时间
2012-11-15
帖子
119
跳转到指定楼层
1
发表于 2014-7-22 21:15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我的设想是释放一个技能,给指定角色附加一个状态,该角色在受到伤害时不消耗自身血量而是消耗指定变量的值,当指定变量小于0时状态自动解除。
求各位大神帮助

Lv1.梦旅人

梦石
0
星屑
50
在线时间
196 小时
注册时间
2013-5-10
帖子
410
2
发表于 2014-7-23 00:09:23 | 只看该作者
我是事件党,脚本请看楼下大神。
那么我有问题,如果我方护盾剩余400,敌人打了我500,那么多余的100是消掉还是继续减到血上?
此状态战斗结束是否解除?
护盾是否对地形伤害/中毒之类的/事件里的减血有效?
护盾是否能顶住即死技能?
大前年的作品《猪刀历险记》
前年的作品《深蓝之心》
上面都是黑历史!
开学了我终于要长久潜水了!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

3
发表于 2014-7-23 05:58:24 | 只看该作者
本帖最后由 taroxd 于 2014-7-23 06:09 编辑

RUBY 代码复制
  1. class Game_Battler
  2.  
  3.   alias apply_guard_without_state apply_guard
  4.   def apply_guard(value)
  5.     value = apply_guard_without_state(value)
  6.     if state?(50) && value > 0   # 50 号状态
  7.       v = $game_variables      
  8.       if v[30] >= value       # 30 号变量
  9.         v[30] -= value
  10.         0
  11.       else
  12.         value -= v[30]
  13.         v[30] = 0
  14.         remove_state(50)
  15.         value
  16.       end
  17.     else
  18.       value
  19.     end
  20.   end
  21. end


未测试-。-

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
186 小时
注册时间
2014-6-14
帖子
213
4
发表于 2014-7-23 10:04:10 | 只看该作者
taroxd 发表于 2014-7-23 05:58
class Game_Battler

  alias apply_guard_without_state apply_guard

哦,原来是酱紫。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
115 小时
注册时间
2012-11-15
帖子
119
5
 楼主| 发表于 2014-7-23 12:30:45 | 只看该作者
taroxd 发表于 2014-7-23 05:58
class Game_Battler

  alias apply_guard_without_state apply_guard

感谢!就是在使用以后再次对不同对象使用会让两人共享护盾,但是只有遭到攻击那个人才会被解除护盾,另外一个人虽然还有护盾状态但是一点作用都不起...我在考虑利用您的开关控制技能的脚本在有人为护盾状态时禁掉这个技能,但是感觉还是要用敌群脚本来判定有些麻烦......

点评

没有办法达到即时的效果啊,回合结束这个可以,但是战斗即时不行,会因为一直执行事件卡住... 这也不出个战斗的并行事件  发表于 2014-7-23 13:32
你在事件页里条件分歧不就可以了……  发表于 2014-7-23 13:23
敌群事件无法用变量作为条件真是蛋疼啊,要不然这个问题就解决了......  发表于 2014-7-23 13:12
上面的脚本只是一个思路,你完全可以修改……  发表于 2014-7-23 13:01
你可以试试用多个变量来解决,判断一些角色ID来决定使用的变量。  发表于 2014-7-23 12:38
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
9971
在线时间
5019 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

6
发表于 2014-7-23 16:08:56 | 只看该作者
本帖最后由 VIPArcher 于 2014-7-23 16:25 编辑
zhaoxun96 发表于 2014-7-23 12:30
感谢!就是在使用以后再次对不同对象使用会让两人共享护盾,但是只有遭到攻击那个人才会被解除护盾,另外 ...

脚本看楼下
我再给你个思路,你看看,用多个变量来给每个角色设置变量盾。在计算伤害时判断角色就可以了

  1. 曾经这里有一段错误的脚本,会造成无敌哦 233
复制代码
另外在释放盾这个技能时附加状态后再运行一下这个公共事件来给变量赋值
不要在意公共事件里的那个p  $game_variables[1]
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

7
发表于 2014-7-23 16:17:01 | 只看该作者
本帖最后由 taroxd 于 2014-7-23 18:16 编辑
VIPArcher 发表于 2014-7-23 16:08
我再给你个思路,你看看,用多个变量来给每个角色设置变量盾。在计算伤害时判断角色就可以了另外在释放盾 ...


RUBY 代码复制
  1. class Game_Actor
  2.   alias apply_guard_without_state apply_guard
  3.   def apply_guard(value)
  4.     value = apply_guard_without_state(value)
  5.     var_id = @actor_id + 30 # 变量[30 + 角色ID]
  6.     if state?(50) && value > 0   # 50 号状态
  7.       v = $game_variables
  8.       if v[var_id] >= value
  9.         v[var_id] -= value
  10.         0
  11.       else
  12.         value -= v[var_id]
  13.         v[var_id] = 0
  14.         remove_state(50)
  15.         value
  16.       end
  17.     else
  18.       value
  19.     end
  20.   end
  21. end


代码的重用你懂不懂……
上下两段除了变量ID都是一样的……

而且actor_id不是1或2的时候会返回nil啊……

依旧未测试

点评

小的知错了  发表于 2014-7-23 16:20

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 测试可用.

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
115 小时
注册时间
2012-11-15
帖子
119
8
 楼主| 发表于 2014-7-23 18:08:28 | 只看该作者
本帖最后由 zhaoxun96 于 2014-7-23 18:14 编辑
taroxd 发表于 2014-7-23 16:17
class Game_Battler

  alias apply_guard_without_state apply_guard


为什么我的报错了.....


脚本“护盾脚本”第 6 行:发生 NoMethodError 。

undefined method `+' for nil:NilClass

点评

测试可行了...但是我想问一下可不可以做成全队公用的一个护盾,当变量小于0触发技能解除全队的状态......  发表于 2014-7-23 19:28
因为我刚刚忘了考虑敌人没有“角色id”这一说-。-  发表于 2014-7-23 18:19
已经修正。作为代价,敌人将不能使用这个护盾。如果需要敌人使用的话再找我吧  发表于 2014-7-23 18:17
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

9
发表于 2014-7-23 19:31:38 | 只看该作者
zhaoxun96 发表于 2014-7-23 18:08
为什么我的报错了.....

RUBY 代码复制
  1. class Game_Actor
  2.  
  3.   alias apply_guard_without_state apply_guard
  4.   def apply_guard(value)
  5.     value = apply_guard_without_state(value)
  6.     if state?(50) && value > 0   # 50 号状态
  7.       v = $game_variables      
  8.       if v[30] >= value       # 30 号变量
  9.         v[30] -= value
  10.         0
  11.       else
  12.         value -= v[30]
  13.         v[30] = 0
  14.         $game_party.members.each {|actor| actor.remove_state(50) }
  15.         value
  16.       end
  17.     else
  18.       value
  19.     end
  20.   end
  21. end


未测试
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
115 小时
注册时间
2012-11-15
帖子
119
10
 楼主| 发表于 2014-7-23 20:15:49 | 只看该作者
taroxd 发表于 2014-7-23 19:31
class Game_Actor

  alias apply_guard_without_state apply_guard

感谢!就是怎么让变量值去掉小数部分?

点评

v[30] -= value.to_i  发表于 2014-7-23 20:27
我试过在脚本的end前加 v[30] = v[30].to_i 但是不行,要报错... 脚本定义过v = $game_variables  发表于 2014-7-23 20:25
.to_i  发表于 2014-7-23 20:21
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-23 01:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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