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

Project1

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

[讨论] 刚则易折

[复制链接]

Lv4.逐梦者

梦石
0
星屑
17035
在线时间
4208 小时
注册时间
2013-7-18
帖子
2705
跳转到指定楼层
1
发表于 前天 13:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本来已经打算彻底退圈了,还有几个脑洞没解决,寝食难安那

1,蚂蚁噬心

连续伤害,每次只加1伤害,初始为10,或者开始50,第二次100,第三次150,不解就会越来越高

2,刚则易折

伤害超过对方血量1/4,则伤害有50%几率减半

3,拙劣演技

血量还剩30%,则人物会变大,然后伤害会固定为N,对敌人伤害也会固定为N,6回合后解除,人物也会变正常
退隐....

Lv4.逐梦者

素材区好人

梦石
3
星屑
11519
在线时间
4200 小时
注册时间
2011-7-21
帖子
2533

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

2
发表于 前天 23:06 | 只看该作者
本帖最后由 无忧谷主幻 于 2026-6-10 23:47 编辑

使用剩余回合数作为计数
记得设置好回合数,比如20回合
(如果想10回合解除就填11,20就填21)
RUBY 代码复制
  1. if self.state?(17)
  2.   remaining_turns = @states_turn[17]
  3.   calculated_damage = (21 - remaining_turns) * 50
  4.   self.damage = [calculated_damage, 9999].min
  5.       self.hp -= self.damage
  6. end


如果想模拟无法自然解除,可以这样做:解除条件依旧是20回合,但是解除概率改成0,这样第20回合后,每回合都会扣除9999(假设你用某个方法让角色一直存活),反正9999已经是最大值了
该方法未测试,感觉应该没问题

至于还有引入变量的,因为层数是全队共享的,比如1号角色已经叠加到3层,此时2号角色再中这个状态,是从第3层开始计算的,除非你给每个角色都关联一个单独的变量
这个方法太过麻烦,所以看看就可以了
使用变量作为计数

点评

那就对的了,扣血两次,只显示了一次,然后没血了就死了,实际是一次没显示就显示了下一次,因为什么都不做本身时间也很短就开始下一次显示了  发表于 昨天 18:29
因为什么也不做也算一回合,你换成普通毒也是一样  发表于 昨天 17:38
我的意思是,敌人什么都不做也算一次行动的,就是“什么都不做”,敌人行动列表里有的,算一次行动,也扣血。  发表于 昨天 16:23
应该是扣两次,我这里测试是没问题  发表于 昨天 13:32
这就跟普通的毒一样,普通毒是怎么判定的,这个就是怎么判定,你看看普通毒会不会显示两次吧  发表于 昨天 13:31
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
17035
在线时间
4208 小时
注册时间
2013-7-18
帖子
2705
3
 楼主| 发表于 昨天 05:35 | 只看该作者
1,定容

伤害有容量,固定为4000,打完伤害就为0,高级技能容量大一点,比如40000

2,变化莫测

属性可变,每次属性在三个之间随机,比如火,风,水,1,2,3号属性

3,认主

装备认主,如果只是一个人可以装备,那其他职业都不打勾就可以,现在要一个认主过程,即认主后其他人不可以装备

4,碎碎念

武器会碎碎念,打多了火鸡,就有几率说,杀鸡狂魔!扩展:打多了火鸡,沾了火鸡血剑会带有火属性
时间长了,打的东西越来越多,剑会不断跳出,杀鸡狂魔,一碗虾,天马游星犬,这种空耳也可以。

5,对等协议

不要琢磨技能伤害了,直接对等协议就可以了,3回合大家都防守好了,只能加血

6,高级协议

对等协议中,双方定容都打完了,还是没死,就开始预判对面的预判,如果双方加血则都减血,双方防御都减血
动作一样就减血

7,最终协议

无论做什么都开始减血,配合假死技能,会绝地得生。敌人会预判你加血给最低血人,则触发萨菲隆一号协议
也即该人即死,要不死就用假死技能。对敌也一样,苟且偷生后偷偷干掉所有敌人,腹黑最高境界。
退隐....
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41854
在线时间
5979 小时
注册时间
2006-11-10
帖子
6976
4
发表于 昨天 11:27 | 只看该作者
技能限定伤害总量是个不错的主意, 也算是对技能使用的一种限制, 具体做法不难, 难的是"你要怎么让玩家知道每个技能的伤害剩余量", 笑

想在说明里显示变量, 那就需要改动help脚本, 如果你的技能支持多人使用, 那更要考虑"导入使用者参数", 各种麻烦事一堆哦, 笑

UI方面要怎么做自己去想,  咱就帮你实现不难的技能效果吧

首先, 在吸蓝吸血的脚本里,  def 吸蓝 这句下面, 加上一句   def damcost ;@description[/DCT\=(\d+)/] ;return $1.to_i ;end

然后, main前插入这个脚本
RUBY 代码复制
  1. class Game_Battler
  2.   attr_accessor :skill_damcost
  3.   alias caidao_initialize initialize
  4.   def initialize
  5.     caidao_initialize
  6.     @skill_damcost = {}
  7.   end
  8.   def ski_damcost(ski,dam)
  9.     return dam if (r=ski.damcost) == 0
  10.     @skill_damcost[ski.id] = r if @skill_damcost[ski.id].nil?
  11.     d = [@skill_damcost[ski.id],dam].min
  12.     @skill_damcost[ski.id] = [@skill_damcost[ski.id] - d,0].max
  13.     return d
  14.   end
  15.   alias caidao_remove_states_battle remove_states_battle
  16.   def remove_states_battle
  17.     caidao_remove_states_battle
  18.     @skill_damcost.clear
  19.   end
  20. end


然后, 到 def skill_effect 这个脚本下面, 找到  self.hp -= self.damage  在它上面加上一句  self.damage = user.ski_damcost(skill,self.damage)

然后, 要限制伤害量的技能, 说明里加上  DCT=999999 , 这样,一场战斗里这个技能就只能造成999999点伤害(群攻时为伤害总和)

点评

6楼  发表于 昨天 12:05
出错是什么提示  发表于 昨天 11:54
脚本第9行出错  发表于 昨天 11:53
现在人么,你什么都显示,做各种效果被宠坏了,他胃口就越来越刁了,我要开始复古了,难实现的效果就不要了,简单一点,这是总原则  发表于 昨天 11:39
不需要知道存储量,只需要知道总伤害量,显示这个东西总是很难做的,以前的古早游戏什么说明都没有的,连基本伤害都没有的,也一样照打,现在  发表于 昨天 11:36
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41854
在线时间
5979 小时
注册时间
2006-11-10
帖子
6976
5
发表于 昨天 11:37 | 只看该作者
本帖最后由 灯笼菜刀王 于 2026-6-11 17:12 编辑

属性变化, 直接用公共事件

f = [1,2,3]
a = f[rand(f.size)] ;ski= $data_skills[10086]
ski.element_set = [a]
ski.animation1_id = 10086+a  #动画根据 随机到的状态id + 固定数值来区分
ski.animation2_id = 10186+a

这样, 每次使用后,技能就会随机变成其他属性,  如果想第一次使用就随机, 那找到  Scene_Title 这个脚本, 在 Graphics.freeze 下面也加上上面那三句


注意, 如果你有使用像"多种战斗特效"这种用勾上技能属性来设置特殊效果的话,  要在 [a] 里填上你用于设置的属性ID , 例如 [a,12,14,18]  需要换行就从逗号处换

----------
其实, 如果只是属性随机变换, 那其实没啥用, 除非你能让玩家知道变换成什么属性, 这样才有一定的战略意义, 笑, 当然,这和上面一样, 如何"让玩家掌握实际信息"方面是个难点, 笑


也可以像这样,增加个被动, 让玩家可以主动控制"随机结果", 也是一种策略, 笑

我同时也有这种技能, 可以配合, 笑



-----------------------------------

另外, 如果你的属性只是体现在伤害不同上, 那属性随机其实也没什么特别之处, 反正对玩家来说, 就是冒的伤害不同罢了, 笑


我的属性攻击是会有标志以及挨打方特效表演的, 笑

点评

其实也可以改变属性后,顺便把动画也一起改了, 这样至少,玩家可以看到"随机的结果", 笑  发表于 昨天 17:09
所以这个属性变化也没什么战略性,开始是为了迷惑敌人的,可敌人也没有什么智力,他不会判断我使用对了属性加了伤害,也不会规避,等于白瞎了  发表于 昨天 12:59
其实这个是配合阵法用的,阵法设置9个穴道,其中初级有三个穴道可以打击,就是属性,打击这三个穴道,才能造成伤害,打击其他没有伤害  发表于 昨天 12:04
你是在太可怕了,啥都有,侬主剥碜‌是啥玩意,目前只有定容你没有是吗,我必须祭出你没有的了。  发表于 昨天 12:03
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
17035
在线时间
4208 小时
注册时间
2013-7-18
帖子
2705
6
 楼主| 发表于 昨天 12:00 | 只看该作者



第九行,使用技能就出错

点评

成功了,是添加地方错了,添加到了下面去了,笑!  发表于 昨天 12:20
添加了啊,怎么可能没有,每一步都按你的做的,我在重新复制一下  发表于 昨天 12:17
你没把 def damcost ;@description[/DCT\=(\d+)/] ;return $1.to_i ;end 这句添加到吸蓝脚本里  发表于 昨天 12:06
退隐....
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41854
在线时间
5979 小时
注册时间
2006-11-10
帖子
6976
7
发表于 昨天 16:47 | 只看该作者
本帖最后由 灯笼菜刀王 于 2026-6-11 18:59 编辑

装备绑定

把这个脚本塞到 main 前
RUBY 代码复制
  1. module RPG
  2.   #把要装备绑定的ID写到中括号内,武器正数,防具负数
  3.   Arm_only = [1,-2]
  4.   #====================================================
  5.   class Weapon
  6.     def rid ;return @id ;end
  7.     def 绑装? ;return Arm_only.include?(@id) ;end
  8.   end
  9.   class Armor
  10.     def rid ;return -@id ;end
  11.     def 绑装? ;return Arm_only.include?(-@id) ;end
  12.   end
  13. end
  14.  
  15. class Game_System
  16.   attr_accessor :arm_only
  17.   alias caidao_initialize initialize
  18.   def initialize
  19.     caidao_initialize
  20.     @arm_only = {}
  21.   end
  22. end
  23.  
  24. class Game_Actor < Game_Battler
  25.   def only_equip_ok?(tmrid)
  26.     return true if !RPG::Arm_only.include?(tmrid)
  27.     return true if (r=$game_system.arm_only[tmrid]).nil?
  28.     return r == self.id
  29.   end
  30.   def weapon_set
  31.     f=$data_classes[@class_id].weapon_set.find_all{|i| only_equip_ok?(i)}
  32.     return f
  33.   end
  34.   def armor_set
  35.     f=$data_classes[@class_id].armor_set.find_all{|i| only_equip_ok?(-i)}
  36.     return f
  37.   end  
  38.   alias caidao_equippable? equippable?
  39.   def equippable?(item)
  40.     return false if !only_equip_ok?(item.rid)
  41.     return caidao_equippable?(item)
  42.   end
  43.   alias caidao_equip equip
  44.   def equip(equip_type, id)
  45.     caidao_equip(equip_type, id)
  46.     tm = equip_type == 0 ? $data_weapons[@weapon_id] : \
  47.     eval("$data_armors[@armor#{equip_type}_id]")
  48.     return if tm.nil? or !tm.绑装? or $game_system.arm_only[tm.rid] != nil
  49.     $game_system.arm_only[tm.rid] = self.id ; tm.name += "(#{self.name})"
  50.   end
  51. end
  52.  
  53. class Scene_Load < Scene_File
  54.   alias caidao_read_save_data read_save_data
  55.   def read_save_data(file)
  56.     caidao_read_save_data(file)
  57.     for i in $game_system.arm_only
  58.       if i[0] < 0 ;$data_armors[-i[0]].name += "(#{$game_actors[i[1]].name})"
  59.       else ;$data_weapons[i[0]].name += "(#{$game_actors[i[1]].name})"
  60.       end
  61.     end
  62.   end
  63. end


考虑到你有可能有用装备强化脚本,装备分类脚本之类的, 之后的步骤要你自己去脚本里改,
全局搜索  $data_classes[@actor.class_id].weapon_set  把这部分改成  @actor.weapon_set  ,注意, 只改动搜索的那部分代码, 不管同一句里它前面和后面有啥玩意都不要动

然后搜索 $data_classes[@actor.class_id].armor_set 一样把它改成 @actor.armor_set

最后, 在脚本第三行的中括号内设置好要装备绑定的ID, 该ID的装备以后就只会让第一次装备它的人装备, 别人即使是相同职业也一样不能装备(初始就装备着的情况下无效)

如果想取消绑定, 执行一次 $game_system.arm_only.delete(武器为正防具为负ID)  ,  全部取消就 $game_system.arm_only.clear

点评

当然可以,我战棋用的就是独立道具, XP应该也有相关脚本, 当然,使用门槛也是挺高的, 笑  发表于 7 小时前
XP没有独立道具吧,记得MV可以有独立道具,因为有前缀后缀系统,必须每一个都不一样  发表于 9 小时前
你又不是独立道具, 当然是一起变化, 如果是独立道具,保存名字什么的就不用曲线了, 笑  发表于 9 小时前
可以了,这样就是专属了,唯一不足的就是两个装备就只能是一个人的,当然可以只设置唯一装备。  发表于 昨天 21:22
曲线救了下, 每次读档都重新改次名字来实现保存, 脚本更新了下, 现在去试试看  发表于 昨天 19:00
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41854
在线时间
5979 小时
注册时间
2006-11-10
帖子
6976
8
发表于 昨天 16:55 | 只看该作者
本帖最后由 灯笼菜刀王 于 2026-6-11 16:59 编辑

4, 碎碎念

给你一个武器附带公共事件, 平砍后就会调用对应的公共事件, 要怎么玩自己去公共事件里搞

把它塞到main前 , 然后, 武器的说明里 一样#后面不显示, 在#后面设置  公事=10086 , 这样平砍后就调用10086号公共事件
  1. module RPG
  2.   class Weapon
  3.     def description ;return @description.split(/#/)[0] ;end
  4.     def common_event_id ;@description[/公事=(\d+)/] ;return $1.to_i ;end
  5.   end
  6. end

  7. class Scene_Battle
  8.   alias caidao_make_basic_action_result make_basic_action_result
  9.   def make_basic_action_result
  10.     if (act=@active_battler).is_a?(Game_Actor) and
  11.     act.current_action.basic == 0 and (wea=$data_weapons[act.weapon_id]) != nil
  12.       @common_event_id = wea.common_event_id
  13.     end
  14.     caidao_make_basic_action_result
  15.   end
  16. end
复制代码


结合之前给你的  受方 这个函数,  去用条件分歧  受方.id == 火鸡id  给变量1 += 1  ,  这样就是砍火鸡一刀 1号变量+1,  然后在去用这个变量分歧去搞你要的表演即可

----

下面那些, 你先搞定"敌人的AI" 再说, 否则没意义, 毕竟XP默认敌人可不会判断什么情况下用什么技能 ,笑

点评

可以了,直接在公共事件里加变量+1就可以了,然后再表演就可以了,反正每砍一次都要调用这个公共事件  发表于 昨天 18:12
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
11519
在线时间
4200 小时
注册时间
2011-7-21
帖子
2533

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

9
发表于 昨天 21:35 | 只看该作者
本帖最后由 无忧谷主幻 于 2026-6-11 22:42 编辑

拙劣演技
血量还剩30%,则人物会变大,然后伤害会固定为N,对敌人伤害也会固定为N,6回合后解除,人物也会变正常

首先是血量30%变大,由于不知道你用的是什么战斗脚本,所以位置只能你自己找了,大约是描绘战斗图坐标的附近
RUBY 代码复制
  1. # ★ 状态87:HP低于30%时 立刻2倍放大
  2. if @battler && !@battler.dead? && !@battler.hidden
  3.   if @battler.state?(87) && @battler.hp <= @battler.maxhp * 0.3
  4.     self.opacity = 255
  5.     self.color = Color.new(0,0,0,0)
  6.     @final_zoom = @battler.real_zoom * 2.0
  7.   else
  8.     self.color = Color.new(0,0,0,0)
  9.     @final_zoom = @battler.real_zoom
  10.   end
  11. end
  12.  
  13. # スプライトの座標を設定
  14. self.x = @battler.screen_x + @effect_ox
  15. self.y = @battler.screen_y + @effect_oy
  16. self.z = @battler.screen_z
  17. # 最终缩放
  18. self.zoom_x = @final_zoom
  19. self.zoom_y = @final_zoom



伤害会固定为N,对敌人伤害也会固定为N
Game_Battler 3 没错,还是这个
RUBY 代码复制
  1. # 分散
  2.       if skill.variance > 0 and self.damage.abs > 0
  3.         amp = [self.damage.abs * skill.variance / 100, 1].max
  4.         self.damage += rand(amp+1) + rand(amp+1) - amp

下面
RUBY 代码复制
  1. # 1. 攻击时造成的伤害固定500
  2.   if user.state?(87) && user.hp <= user.maxhp * 0.3
  3.     self.damage = 500
  4.   # 2. 被攻击者时受到的伤害固定500
  5.   elsif self.state?(87) && self.hp <= self.maxhp * 0.3
  6.     self.damage = 500

不是防御修正,而是分散之后,这是为了不被分散度影响

可能会出现的问题:在播放技能动画的开始,人物可能就会变大,这是因为战斗系统执行顺序的原因,默认的战斗系统是先扣血,再播放技能动画,如果在意的话你可以自己改一改
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
616
在线时间
315 小时
注册时间
2015-2-2
帖子
89
10
发表于 昨天 23:47 | 只看该作者
都退圈了解决又有啥用?顺便告诉你只要自定义系统逻辑方面的问题想要什么都可以实现。

点评

还请大佬指导  发表于 12 小时前
为什么要想那么多呢?夜空之下,冷风之中,其实也是一种呢。一定会开启,梦之旅的!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-6-12 19:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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