查看: 870|回复: 8

[有事请教] 挨打获得四维

[复制链接]
梦石
0
星屑
17561
在线时间
4249 小时
注册时间
2013-7-18
回帖
2491
发表于 2026-4-25 11:37:27 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 y967 于 2026-4-25 11:42 编辑

获得一个神通天赋,装备可以获得一个状态,该状态下,挨打获得防御+1,其他四维也可以加,挨打攻击+2,挨打魔力+2,挨打速度+1,也可以不要状态,就装备一个防具,挨打获得四维,使用状态是方便解除,该神通只能一场战斗内生效,战斗结束归零。脚本怎么写

对了,怎么悬赏,100星屑
退隐....
梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2026-4-25 16:58:33 | 显示全部楼层
首先, 要临时生效,那就考虑用什么储存,  可以在game battler 里建个实变量, 也可以用全局变量, 根据 角色ID + N 的变量作为临时面板用, 然后战斗结束后把它归零就实现战斗后清除

第二步是让新变量和你想要的属性挂钩, 在 game battler 里找到 def pdef , 把临时面板的变量给它加上去, 如果是用全局变量,就到 game actor 里去加

第三步, 找到伤害公式(平A,技能,道具 三个公式), 在 self.hp -= self.damage 下面, 加上判断, if state?(10086) , 或者 if self.is_a?(Game_Actor) and @armor10086_id == 10086  时, 把临时面板变量增加/减少需要的值,  搞定收工

如果想状态取消的同时把变量归零, 那找到 def remove_state 在最后给它加个判断, if state_id == 10086 , 把变量 = 0

点评

这几个地方都是修改战斗相关热门打卡点, 你总不会只想要一种特效吧,笑, 也就几个句子而已,自己尝试在脚本内添加才能有更多的操作空间  发表于 2026-4-25 18:42
不过我确实脚本很废,最好把脚本写出来,另外插进去,不动原脚本,改动后怕错乱,一般我用新写的game battler 插到下面  发表于 2026-4-25 18:09
用状态是方便解除,状态可以设置为战斗后解除,状态解除时清除变量对应的四维,没错,是这个思路  发表于 2026-4-25 18:06
回复

使用道具 举报

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2026-4-28 01:08:07 | 显示全部楼层
本帖最后由 无忧谷主幻 于 2026-4-28 01:28 编辑

我帮你写一个吧,不过我的技术不如楼上,估计有些繁琐
第一步,确定一个变量
Game_Battler 3
[pre lang="ruby"]      # HP 的伤害计算
      self.hp -= self.damage[/pre]
下面加上
[pre lang="ruby"]# 带有10号状态且受到大于0的伤害时,变量增加
if self.damage > 0 and self.state?(10)
  $game_variables[1] += 1
end[/pre]
特技也要加,在这下面
[pre lang="ruby"]    # HP 的伤害减法运算
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp[/pre]
道具的话看情况,毕竟敌人是不会用道具的,你自己应该也不会用道具打自己


第二步,把这个变量应用于状态中
Game_Battler 1
[pre lang="ruby"]  #--------------------------------------------------------------------------
  # ● 获取力量
  #--------------------------------------------------------------------------
  def str
    n = [[base_str + @str_plus, 1].max, 999].min
    for i in @states
      n *= $data_states.str_rate / 100.0
    end
    n = [[Integer(n), 1].max, 999].min
    return n
  end[/pre]
将其改成
[pre lang="ruby"]# ● 获取力量
def str
  n = [[base_str + @str_plus, 1].max, 999].min
  for i in @states
    n *= $data_states.str_rate / 100.0
  end
  # 带有10号状态时,力量增加变量1的数值
  if self.state?(10)
    n += $game_variables[1]
  end
  n = [[Integer(n), 1].max, 999].min
  return n
end[/pre]
如果你想改成魔力之类的,也是差不多的改法

第三步,也就是最重要的,如何在战斗结束后重置
[pre lang="ruby"]  #--------------------------------------------------------------------------
  # ● 胜负判定
  #--------------------------------------------------------------------------
  def judge
    # 全灭判定是真、并且同伴人数为 0 的情况下
    if $game_party.all_dead? or $game_party.actors.size == 0
      # 允许失败的情况下
      if $game_temp.battle_can_lose
        # 还原为战斗开始前的 BGM
        $game_system.bgm_play($game_temp.map_bgm)[/pre]
[pre lang="ruby"]# 如果存在任意 1 个敌人就返回 false
for enemy in $game_troop.enemies
  if enemy.exist?
    return false
  end
end[/pre]
[pre lang="ruby"]  # 逃跑成功判定
    success = rand(100) < 50 * actors_agi / enemies_agi
    # 成功逃跑的情况下
    if success[/pre]
的下面,统统加上
[pre lang="ruby"]$game_variables[1] = 0[/pre]

最后放上工程
Project2.zip (201.97 KB, 下载次数: 2)



点评

不错,非常美妙,技术大佬总是令人敬仰  发表于 2026-4-29 12:03
为了研究各种有趣的状态,这几处都是之前研究过的地方  发表于 2026-4-28 19:09
我去,想不到你这么厉害!记得几年前真实商店的事情你还在请教别人,如今已能自己写脚本了!  发表于 2026-4-28 15:33

评分

参与人数 2赞 +2 收起 理由
y967 + 1 塞糖
小怪兽奇奇侠 + 1 思路清晰,操作稳健,夯

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部