Project1
标题: 关于变量护盾,求脚本大神帮助 [打印本页]
作者: zhaoxun96 时间: 2014-7-22 21:15
标题: 关于变量护盾,求脚本大神帮助
我的设想是释放一个技能,给指定角色附加一个状态,该角色在受到伤害时不消耗自身血量而是消耗指定变量的值,当指定变量小于0时状态自动解除。
求各位大神帮助
作者: 双黄连2_副本2 时间: 2014-7-23 00:09
我是事件党,脚本请看楼下大神。
那么我有问题,如果我方护盾剩余400,敌人打了我500,那么多余的100是消掉还是继续减到血上?
此状态战斗结束是否解除?
护盾是否对地形伤害/中毒之类的/事件里的减血有效?
护盾是否能顶住即死技能?
作者: taroxd 时间: 2014-7-23 05:58
本帖最后由 taroxd 于 2014-7-23 06:09 编辑
class Game_Battler
alias apply_guard_without_state apply_guard
def apply_guard(value)
value = apply_guard_without_state(value)
if state?(50) && value > 0 # 50 号状态
v = $game_variables
if v[30] >= value # 30 号变量
v[30] -= value
0
else
value -= v[30]
v[30] = 0
remove_state(50)
value
end
else
value
end
end
end
class Game_Battler
alias apply_guard_without_state apply_guard
def apply_guard(value)
value = apply_guard_without_state(value)
if state?(50) && value > 0 # 50 号状态
v = $game_variables
if v[30] >= value # 30 号变量
v[30] -= value
0
else
value -= v[30]
v[30] = 0
remove_state(50)
value
end
else
value
end
end
end
未测试-。-
作者: qq19750508 时间: 2014-7-23 10:04
taroxd 发表于 2014-7-23 05:58 
class Game_Battler
alias apply_guard_without_state apply_guard
哦,原来是酱紫。
作者: zhaoxun96 时间: 2014-7-23 12:30
taroxd 发表于 2014-7-23 05:58 
class Game_Battler
alias apply_guard_without_state apply_guard
感谢!就是在使用以后再次对不同对象使用会让两人共享护盾,但是只有遭到攻击那个人才会被解除护盾,另外一个人虽然还有护盾状态但是一点作用都不起...我在考虑利用您的开关控制技能的脚本在有人为护盾状态时禁掉这个技能,但是感觉还是要用敌群脚本来判定有些麻烦......
作者: VIPArcher 时间: 2014-7-23 16:08
本帖最后由 VIPArcher 于 2014-7-23 16:25 编辑
zhaoxun96 发表于 2014-7-23 12:30 
感谢!就是在使用以后再次对不同对象使用会让两人共享护盾,但是只有遭到攻击那个人才会被解除护盾,另外 ...
脚本看楼下
我再给你个思路,你看看,用多个变量来给每个角色设置变量盾。在计算伤害时判断角色就可以了另外在释放盾这个技能时附加状态后再运行一下这个公共事件来给变量赋值
不要在意公共事件里的那个p $game_variables[1]
作者: taroxd 时间: 2014-7-23 16:17
本帖最后由 taroxd 于 2014-7-23 18:16 编辑
VIPArcher 发表于 2014-7-23 16:08 
我再给你个思路,你看看,用多个变量来给每个角色设置变量盾。在计算伤害时判断角色就可以了另外在释放盾 ...
class Game_Actor
alias apply_guard_without_state apply_guard
def apply_guard(value)
value = apply_guard_without_state(value)
var_id = @actor_id + 30 # 变量[30 + 角色ID]
if state?(50) && value > 0 # 50 号状态
v = $game_variables
if v[var_id] >= value
v[var_id] -= value
0
else
value -= v[var_id]
v[var_id] = 0
remove_state(50)
value
end
else
value
end
end
end
class Game_Actor
alias apply_guard_without_state apply_guard
def apply_guard(value)
value = apply_guard_without_state(value)
var_id = @actor_id + 30 # 变量[30 + 角色ID]
if state?(50) && value > 0 # 50 号状态
v = $game_variables
if v[var_id] >= value
v[var_id] -= value
0
else
value -= v[var_id]
v[var_id] = 0
remove_state(50)
value
end
else
value
end
end
end
代码的重用你懂不懂……
上下两段除了变量ID都是一样的……
而且actor_id不是1或2的时候会返回nil啊……
依旧未测试
作者: zhaoxun96 时间: 2014-7-23 18:08
本帖最后由 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
作者: taroxd 时间: 2014-7-23 19:31
zhaoxun96 发表于 2014-7-23 18:08 
为什么我的报错了.....
class Game_Actor
alias apply_guard_without_state apply_guard
def apply_guard(value)
value = apply_guard_without_state(value)
if state?(50) && value > 0 # 50 号状态
v = $game_variables
if v[30] >= value # 30 号变量
v[30] -= value
0
else
value -= v[30]
v[30] = 0
$game_party.members.each {|actor| actor.remove_state(50) }
value
end
else
value
end
end
end
class Game_Actor
alias apply_guard_without_state apply_guard
def apply_guard(value)
value = apply_guard_without_state(value)
if state?(50) && value > 0 # 50 号状态
v = $game_variables
if v[30] >= value # 30 号变量
v[30] -= value
0
else
value -= v[30]
v[30] = 0
$game_party.members.each {|actor| actor.remove_state(50) }
value
end
else
value
end
end
end
未测试
作者: zhaoxun96 时间: 2014-7-23 20:15
taroxd 发表于 2014-7-23 19:31 
class Game_Actor
alias apply_guard_without_state apply_guard
感谢!就是怎么让变量值去掉小数部分?
作者: VIPArcher 时间: 2014-7-24 02:16
zhaoxun96 发表于 2014-7-23 20:15 
感谢!就是怎么让变量值去掉小数部分?
喵,我又想到点东西,现在这样没提示是不是感觉不科学?于是随便写了一下,我感觉没啥问题,你最好自己再看看有没别的问题,(死- class Game_Battler
-
- alias apply_guard_without_state apply_guard
- def apply_guard(value)
- value = apply_guard_without_state(value)
- var_id = @actor_id #+ 30 # @actor_id + 30 号变量
- if state?(27) && value > 0 # 50 号状态
- v = $game_variables
- if v[var_id] >= value
- $Hurt_Shield = value
- $Magic_Shield = "have"
- v[var_id] -= value.to_i
- 0
- else
- value -= v[var_id]
- $Hurt_Shield = value
- $Magic_Shield = "have"
- v[var_id] = 0
- remove_state(27)
- value
- end
- else
- $Magic_Shield = ""
- value
- end
- end
- end
- class Game_ActionResult
- #--------------------------------------------------------------------------
- # ● 获取 HP 伤害的文字
- #--------------------------------------------------------------------------
- def hp_damage_text
- if @hp_drain > 0
- fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
- sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
- elsif @hp_damage > 0
- fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
- sprintf(fmt, @battler.name, @hp_damage)
- elsif @hp_damage < 0
- fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
- sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
- elsif $Magic_Shield == "have"
- fmt = "魔法之盾抵消了%s点伤害"
- sprintf(fmt,$Hurt_Shield.to_i)
- else
- fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
- sprintf(fmt, @battler.name)
- end
- end
- end
复制代码 未详细测试,出大问题请放弃或者再修改。
作者: zhaoxun96 时间: 2014-7-26 14:06
VIPArcher 发表于 2014-7-24 02:16 
喵,我又想到点东西,现在这样没提示是不是感觉不科学?于是随便写了一下,我感觉没啥问题,你最好自己再 ...
- class Game_Actor
-
- alias apply_guard_without_state apply_guard
- def apply_guard(value)
- value = apply_guard_without_state(value)
- if state?(50) && value > 0 # 50 号状态
- v = $game_variables
- if v[30] >= value # 30 号变量
- $Hurt_Shield = value
- $Magic_Shield = "have"
- v[30] -= value
- 0
- else
- value -= v[30]
- $Hurt_Shield = value
- $Magic_Shield = "have"
- v[30] = 0
- $game_party.members.each {|actor| actor.remove_state(50) }
- value
- end
- else
- $Magic_Shield = ""
- value
- end
- end
- end
- class Game_ActionResult
- #--------------------------------------------------------------------------
- # ● 获取 HP 伤害的文字
- #--------------------------------------------------------------------------
- def hp_damage_text
- if @hp_drain > 0
- fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
- sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
- elsif @hp_damage > 0
- fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
- sprintf(fmt, @battler.name, @hp_damage)
- elsif @hp_damage < 0
- fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
- sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
- elsif $Magic_Shield == "have"
- fmt = "魔法之盾抵消了%s点伤害"
- sprintf(fmt,$Hurt_Shield.to_i)
- else
- fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
- sprintf(fmt, @battler.name)
- end
- end
- end
复制代码 感谢!将9L和11L的脚本融合过后完全没问题了并且完美解决了我的问题,此贴可以改为“已经解决”了....
作者: 3106345123 时间: 2014-7-31 15:50
不用那么麻烦
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |