Project1

标题: sailcat的脚本 技能依赖变量 怒气槽应用 [打印本页]

作者: 89444640    时间: 2018-5-22 07:53
标题: sailcat的脚本 技能依赖变量 怒气槽应用
本帖最后由 89444640 于 2018-5-22 09:15 编辑

需要 技能消耗依赖 v1.2 by SailCat
说明中有这样的说法
g) 技能消耗变量:cv={变量ID=>消耗值},写成hash形式,不能省略花括号
然后我考虑,做个怒气槽,
应用变量A记录数据,数值为1000 角色普通攻击时增加 增加值暂定为100 使用技能时增加技能增加增加值暂定为200,被攻击增加增加值暂定为100,当数值达到1000和1000以上时,清为0,记录变量B为1 相当于怒气攒了满一格,
变量B最大数值为3,当数值为3。数值0时不能使用必杀技,当数值为3的时候,不再增加。
当变量B为3时,变量A不增加。
发动超必杀技消耗一个变量B,变量B为0时不能使用(废话--b)
发动超必杀技,需要消耗两个变量B,因为消耗一回合爆豆太耽误时间了,取消这个设置

目前不知道怎么设置,让技能增加变量A,被攻击和普通攻击增加变量A
然后肯定每个角色不通用,有多少个角色设置多少个ORZ,总数量又让我头疼了……

角色战斗不能时,变量A、B均归为0
为了保持平衡,战斗结束时清空变量A B,避免boss战上来就放超必杀,避免提前攒怒气槽

设置一些使用后可增加怒气槽的道具。

大概这样,我尽量今天抽空弄出个能配合我这界面用的简单怒气槽去- -b

nimabi 人太多了,烦死。我每天思路都被打断,真想……
是这个样子。

如果可能的话,整合系统增加个开关,初期没有必杀技,菜单下面是空的,这个不就是所谓的跟着系统一起升级了吗。但是后果极其严重,没有必杀技槽时候,下面是空的。还得有图标重排的隐患。

然后如果能实现怒气槽满的瞬间又动态效果,可以给使用者提示,你赞满了一条怒气槽,画出来容易,但是程序不支持我就没辙了。
然后如果可能,怒气槽用N帧循环动画显示,表现满了的晶体也用动画
作者: soulsaga    时间: 2018-5-22 09:56
怒气槽用必杀?真头大..

QQ图片20180522095424.png (186.63 KB, 下载次数: 20)

QQ图片20180522095424.png

作者: 灯笼菜刀王    时间: 2018-5-22 10:56
本帖最后由 灯笼菜刀王 于 2018-5-22 11:06 编辑

开始想动UI啦,本来美工用默认窗口就是太LOW了

战斗窗口的UI也重新设计吧,改成VA式 横线竖直排列到一边(FF样式)比较适合横版战斗,还能加上角色的眼部头像什么的,角色名字固定的话,干脆连名字一起做成图片, 把战斗背景扩满480,战斗UI就直接透明背景,看起来战斗场景会大一些,像你这种规格的战斗图塞4个才不至于显得挤

血槽就别用什么填充矩形了,全换图片显示。

要开关,要动画效果都不难,只要有图片(以及没有大佬插件来乾坤大挪移....

咱给你建好bese的方法,你直接像这样调用来做UI就会了吧。就是根据设计,分层填上各种图片名称,坐标,就OK, 坐标可以直接看PS的导航填



这个是咱的状态浏览窗口写法,一目了然吧

效果 ↓,


作者: 灯笼菜刀王    时间: 2018-5-22 11:54
本帖最后由 灯笼菜刀王 于 2018-5-22 11:58 编辑



  战斗UI 改一下,整体的画面感就大不同了,

东方风格的UI,大概这样吧。 自己看看效果呗, 不是比默认的瞬间高大上
作者: soulsaga    时间: 2018-5-22 13:05
新增UI麻烦在释放..不懂脚本的萌新止步..
作者: 89444640    时间: 2018-5-22 13:46
soulsaga 发表于 2018-5-22 13:05
新增UI麻烦在释放..不懂脚本的萌新止步..


反正这东西要真想用,必须调必须调的一步到位,而且必须风格一致,菜单那样,合成界面那样,回头战斗这样……更别扭- -b只能自己画,如果找同人素材用,后果不堪设想。
顺道,中午去剪树枝,蔷薇开的挺好,可是樱桃树没怎么结果,明年一定得施肥。红枫居然没死,可是张得特别不好,被埋在里面了。
花朵后面的树是樱桃,六年了才长这么高,必须早种,前人种树后人乘凉。

这个是蔷薇 很香~


作者: 灯笼菜刀王    时间: 2018-5-22 14:38
咱歪了一个大大的楼

补上主楼的问题答案.....

1变量设置: 不需要搞N个变量,你要4段必杀槽,一段1000,那直接一个变量 4000 就是4段了。

2角色属性设置: 默认变量有5000个,找个变量段来当角色的怒气值就是了 比如 变量 [1000+角色ID]
这样主角的怒气值就是 1001号变量。  用变量的优点是方便你用事件来控制增减,如果不想用变量,大可直接给角色添加新属性。

3技能消耗设置,猫大的脚本一行备注搞定

4技能限制设定, 猫大的脚本一行备注搞定

5攒必杀槽设定,猫大的脚本一行备注搞定

6清空必杀,猫大的脚本一行备注搞定

7物品增加必杀,猫大的..... 呃,公共事件搞定


作者: 89444640    时间: 2018-5-22 14:46
本帖最后由 89444640 于 2018-5-22 15:52 编辑
灯笼菜刀王 发表于 2018-5-22 14:38
咱歪了一个大大的楼

补上主楼的问题答案.....


其实我就只想用默认的,别人看着别扭但是我用的时间太长了,有人帮忙改的更好看当然愿意,但是,头像、立绘绘我被喷的都有阴影了,全是找毛病的,而且完全不给你解决方案,
你看我图区还发过东西吗XD,惹不起我躲得起行吗?
大概还是默认菜单界面,但是单独改了以后,讲面临无穷无尽的冲突。而且我改不了的几率非常高。

刚才照的花,花都是我种的,我手机照的,不服自己种去XD,看哪个再跟我提版权。
本来想找个枫叶,满眼标着版权,等秋天自己照去#
大概这个感觉吧,角色头像这里,不行我就宁可空着也再也不用任何人的版权素材!!!!!

更新了一下,缩小了能量槽的大小
把状态栏放在下面窗口中间了,没有态也没关系看着也比较合适,不过得把脚本中,在没有任何状态时现实正常这个给弄没了。

战斗菜单.rar (534.61 KB, 下载次数: 114)

作者: soulsaga    时间: 2018-5-22 17:35
本帖最后由 soulsaga 于 2018-5-22 20:00 编辑

我用立绘纸娃娃生成器搞了个主角立绘..233

LIN.png (181.66 KB, 下载次数: 21)

LIN.png

作者: 灯笼菜刀王    时间: 2018-5-22 18:57
你那堆脚本山, 还是直接做定制脚本,不做成插件了, 把昨天soulsaga君帮你改后的最终版本脚本发给我把~~

定制功能
1,每个角色添加独立TP槽,战后归0,不存储.
2,用猫大的注释扩展.*需要占用一个全局变量.

可选
1,怪物也可以使用TP,也有自己的TP,也可以显示(在HELP栏)
2,开关TP显示功能
3,TP上限可控 ,即可以自由改变某个角色在什么时候拥有多少TP上限 *需要占用一个全局变量
4, 上面扩展, TP上限为0不显示槽, 即可以设置某些角色没有TP槽









作者: 89444640    时间: 2018-5-22 19:02
本帖最后由 89444640 于 2018-5-22 22:37 编辑
灯笼菜刀王 发表于 2018-5-22 18:57
你那堆脚本山, 还是直接做定制脚本,不做成插件了, 把昨天soulsaga君帮你改后的最终版本脚本发给 ...


刚到家……但是,工程今天没复制回来,不影响吧?脚本应该都是一样的。


我先看一下细节吧,回头得弄吃的去……还没菜,只有个网纹瓜……吃不饱啊……

1,每个角色添加独立TP槽,战后归0,不存储.
没问题,避免闪轨这种超必杀秒boss的情况出现。
2,用猫大的注释扩展.*需要占用一个全局变量.
没问题,全局变量能自己设置就行前面几百个都占了。

可选
1,怪物也可以使用TP,也有自己的TP,也可以显示(在HELP栏)
希望容易使用。

2,开关TP显示功能
好!等这段剧情过去,正好能跟妖忌大叔学必杀技XD

3,TP上限可控 ,即可以自由改变某个角色在什么时候拥有多少TP上限 *需要占用一个全局变量
好,可以让初期只能用一级奥义,然后设置各种支线和收集奖励,好好玩的人能用潜在奥义,合体奥义似乎合体奥义我有做灵梦的,但是没法实现,动作让我干别的用了。

4, 上面扩展, TP上限为0不显示槽, 即可以设置某些角色没有TP槽
这个……留着吧,万一用得到呢。

血槽和气槽忘了加黑框了,加一个吧,保持与怒气槽的一致性
补充,我看了一下格斗的能量槽,就是TP增长方式,有个比较简易的动态,我这个能量槽数了,长度正好100,我做个长度25的带箭头的能量槽循环,大概这样的。

就是这个实现上怎么弄,因为能量槽是变化的,正常长度不一样,怎么让这个能量能好好的循环 播放?
图片上是把后面黑色的槽弄成透明的了,然后被黑色的遮挡了,视觉上没问题,但是实际运行时候,要有个黑色的槽作为底色。

然后,能量三个豆满了以后还能攒到头,但是到头后不再增加,原因是,能量槽动态的我觉得好看- -b

大概先想到这么多。赶紧买菜去……

试了一下合金弹头画风来表现能量宝石闪光

HP MP槽似乎也用像素过渡点表现更好
作者: soulsaga    时间: 2018-5-22 20:09
附件是PS用的图层文件..

LIN.zip

581.25 KB, 下载次数: 43


作者: 89444640    时间: 2018-5-22 21:43
本帖最后由 89444640 于 2018-5-22 21:47 编辑

伤害计算这东西简直谜一样,
帮忙看下合理性

武器攻击力+力量-防御/2=平砍伤害 不要力量放大率 分散度还是15%

技能 威力1增加1点伤害
1点魔力加1点魔法防御

攻击力这个原始的算法一直不明白似乎是乘法?如果是的话,这里

1攻击力等于+100点伤害,100点等于10000点伤害,够高了,避免漫天飞数字挡画面。
5点防御减少100点技能伤害,最高-5000。
魔防同上

然后原始设定中的魔法封锁得改一下,改成魔法封锁时候特接也不能使用,只能平砍,否则战士简直bug

速度=绝对出手顺序,速度相差20以上,必定速度高的先出手,20以内随机。因为回合制速度影响不大,大幅拉开速度差距

速度与回避关系……不会算 无视
灵巧与命中率关系不知道怎么算……无视
暴击率谜一样……无视

从简设定,单独设

所有攻击包括技能的命中都是100%,回避单独计算,
敌人1回避修正等于1%回避率
角色防具1回避修正等于1%回避率
简单明了

灵巧等于暴击率,初始暴击率调成5% 最低20回合一次暴击,四个角色,最低5回合有一个人出一次暴击,其他暴击靠装备属性,因为那个战斗特效能在属性里面直接设定暴击率,就是不知道这个暴击率不知道是和默认的累计还是覆盖。应该是累计更合理一些。
敌人暴击……5%固定算了,boss出个技能伤害就够看了,再来个全屏暴击还能玩?

从敌人角度考虑,我方HP按照9999算,防御999
敌人力量999 打999防御造成 500点伤害,不算太疼,。
敌人技能属性不相克最高可以造成10500的伤害,能秒了。


属性有效度A 135% B110% C100% D50% E0% F-100%
防御加成200%时候,999攻击打999防御打不动。
999攻击+技能10000 无状态也打不动……似乎逆天了……

头疼啊……



作者: 灯笼菜刀王    时间: 2018-5-23 02:06
本帖最后由 灯笼菜刀王 于 2018-5-23 02:45 编辑

不搞闪烁效果了, 一个战斗窗口都整的莫名其妙冒黑块...还会突然消失..., 猫大的那个脚本真不好玩~~

火大了, 咱直接删了几处捣乱的地方(我才不会说我摆不定它们),  初始效果算是做出来了

接栗子 TP.rar (381.98 KB, 下载次数: 58)   UI的用图片格式参照里面的,  角色相关的图片, 都要用"ID_XXXX"的格式命名

具体设置 在老地方~  TP上限 3999, 也就是 三个豆子+一条槽

技能   在备注 加上 tp=1000 就是消耗一个豆子 tp=2000就是消耗两个豆子  tp=500就是消耗半个豆子消耗半条槽
技能   在备注 加上 kp=500  是使用这个技能可以增加自己500TP(负数就是减少TP, 可以用 kp=-3999来设置技能使用后TP清空)
物品   在备注 加上 kp=500 这个物品的效果就是给吃的人增加500TP(负数就是减少TP, 可以用糖果降低敌人的怒气=.=)

可以用事件脚本:  修炼成仙(角色ID,0-3数字)   来调整角色的豆子上限, 默认全部是0
天下无双(角色ID,数值) 来增加或者减少角色的TP量  注意符号都要半角,   天下无双和KP的数值正负随意, 不会溢出., tp就必须正数

敌人也有TP, 增减规则一样, 可以给BOSS塞个 3000TP的大招, 然后权限为10, 其他技能权限为5, 这样只要一到3000TP, BOSS基本就会直接丢大招.

也可以取消敌人的TP限制, 这样敌人可以无视TP量直接丢大招........

敌人的TP技能没测试, 应该没BUG....


作者: 灯笼菜刀王    时间: 2018-5-23 10:32
本帖最后由 灯笼菜刀王 于 2018-5-23 10:37 编辑

1、修正的全屏动画异常又回来了

按soulsaga君给的方法做就好,咱没有研究全动画脚本,根本不知道哪里是BUG~

2、符号# (半角井号)用于区分备注与描述/名称正文,以及识别注释事件
     符号; (半角分号)用于给备注项分段
我描述为 #技能分类;kp=500应该没问题啊?

最好 #kp=500;@技能分类   这样写,就是让技能分类的标志在最后面,否则技能分类的名字会变成 XXXkp=500  =。=

3、脚本目前无效,请测试

你有打开开关么?

4、头像略微往下挪一点,位于中间即可

Window_BattleStatus 修改    这个脚本里

添图片(a,actor_x+1,0)

红色就是X和Y坐标,自己慢慢调到喜欢的位置就行

PS:头像宽度任意,
作者: 灯笼菜刀王    时间: 2018-5-23 11:14
对了,后面怪物功能调整,会造成用技能无视TP.......

Game_Battler 3    这个脚本  用下面的整个覆盖掉就可以解决

  1. #==============================================================================
  2. # ■ Game_Battler (分割定义 3)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  5. # 超级类来使用。
  6. #==============================================================================

  7. class Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 可以使用特技的判定
  10.   #     skill_id : 特技 ID
  11.   #--------------------------------------------------------------------------
  12.   def skill_can_use?(skill_id)
  13.     # SP 不足的情况下不能使用
  14.     if $data_skills[skill_id].sp_cost > self.sp
  15.       return false
  16.     end
  17.     # 战斗不能的情况下不能使用
  18.     if dead?
  19.       return false
  20.     end
  21.     # 沉默状态的情况下、物理特技以外的特技不能使用
  22.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  23.       return false
  24.     end
  25.     if $data_skills[skill_id]._tp != nil and $data_skills[skill_id]._tp > self.tp
  26.        return true if ENEMY_NO_TP and self.is_a?(Game_Enemy)
  27.        return false
  28.     end
  29.     # 获取可以使用的时机
  30.     occasion = $data_skills[skill_id].occasion
  31.     # 战斗中的情况下
  32.     if $game_temp.in_battle
  33.       # [平时] 或者是 [战斗中] 可以使用
  34.       return (occasion == 0 or occasion == 1)
  35.     # 不是战斗中的情况下
  36.     else
  37.       # [平时] 或者是 [菜单中] 可以使用
  38.       return (occasion == 0 or occasion == 2)
  39.     end
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 应用通常攻击效果
  43.   #     attacker : 攻击者 (battler)
  44.   #--------------------------------------------------------------------------
  45.   def attack_effect(attacker)
  46.     # 清除会心一击标志
  47.     self.critical = false
  48.     # 第一命中判定
  49.     hit_result = (rand(100) < attacker.hit)
  50.     # 命中的情况下
  51.     if hit_result == true
  52.       # 计算基本伤害
  53.       atk = [attacker.atk - self.pdef / 2, 0].max
  54.       self.damage = atk * (20 + attacker.str) / 20
  55.       # 属性修正
  56.       self.damage *= elements_correct(attacker.element_set)
  57.       self.damage /= 100
  58.       # 伤害符号正确的情况下
  59.       if self.damage > 0
  60.         # 会心一击修正
  61.         if rand(100) < 4 * attacker.dex / self.agi
  62.           self.damage *= 2
  63.           self.critical = true
  64.         end
  65.         # 防御修正
  66.         if self.guarding?
  67.           self.damage /= 2
  68.         end
  69.       end
  70.       # 分散
  71.       if self.damage.abs > 0
  72.         amp = [self.damage.abs * 15 / 100, 1].max
  73.         self.damage += rand(amp+1) + rand(amp+1) - amp
  74.       end
  75.       # 第二命中判定
  76.       eva = 8 * self.agi / attacker.dex + self.eva
  77.       hit = self.damage < 0 ? 100 : 100 - eva
  78.       hit = self.cant_evade? ? 100 : hit
  79.       hit_result = (rand(100) < hit)
  80.     end
  81.     # 命中的情况下
  82.     if hit_result == true
  83.       # 状态冲击解除
  84.       remove_states_shock
  85.       # HP 的伤害计算
  86.       self.hp -= self.damage
  87.       # 状态变化
  88.       @state_changed = false
  89.       states_plus(attacker.plus_state_set)
  90.       states_minus(attacker.minus_state_set)
  91.     # Miss 的情况下
  92.     else
  93.       # 伤害设置为 "Miss"
  94.       self.damage = "Miss"
  95.       # 清除会心一击标志
  96.       self.critical = false
  97.     end
  98.     # 过程结束
  99.     return true
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 应用特技效果
  103.   #     user  : 特技的使用者 (battler)
  104.   #     skill : 特技
  105.   #--------------------------------------------------------------------------
  106.   def skill_effect(user, skill)
  107.     p "S"
  108.     # 清除会心一击标志
  109.     self.critical = false
  110.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  111.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  112.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  113.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  114.       # 过程结束
  115.       return false
  116.     end

  117.     # 清除有效标志
  118.     effective = false
  119.     # 公共事件 ID 是有效的情况下,设置为有效标志
  120.     effective |= skill.common_event_id > 0
  121.     # 第一命中判定
  122.     hit = skill.hit
  123.     if skill.atk_f > 0
  124.       hit *= user.hit / 100
  125.     end
  126.     hit_result = (rand(100) < hit)
  127.     # 不确定的特技的情况下设置为有效标志
  128.     effective |= hit < 100
  129.     # 命中的情况下
  130.     if hit_result == true
  131.       # 计算威力
  132.       power = skill.power + user.atk * skill.atk_f / 100
  133.       if power > 0
  134.         power -= self.pdef * skill.pdef_f / 200
  135.         power -= self.mdef * skill.mdef_f / 200
  136.         power = [power, 0].max
  137.       end
  138.       # 计算倍率
  139.       rate = 20
  140.       rate += (user.str * skill.str_f / 100)
  141.       rate += (user.dex * skill.dex_f / 100)
  142.       rate += (user.agi * skill.agi_f / 100)
  143.       rate += (user.int * skill.int_f / 100)
  144.       # 计算基本伤害
  145.       self.damage = power * rate / 20
  146.       # 属性修正
  147.       self.damage *= elements_correct(skill.element_set)
  148.       self.damage /= 100
  149.       # 伤害符号正确的情况下
  150.       if self.damage > 0
  151.         # 防御修正
  152.         if self.guarding?
  153.           self.damage /= 2
  154.         end
  155.       end
  156.       # 分散
  157.       if skill.variance > 0 and self.damage.abs > 0
  158.         amp = [self.damage.abs * skill.variance / 100, 1].max
  159.         self.damage += rand(amp+1) + rand(amp+1) - amp
  160.       end
  161.       # 第二命中判定
  162.       eva = 8 * self.agi / user.dex + self.eva
  163.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  164.       hit = self.cant_evade? ? 100 : hit
  165.       hit_result = (rand(100) < hit)
  166.       # 不确定的特技的情况下设置为有效标志
  167.       effective |= hit < 100
  168.     end
  169.     # 命中的情况下
  170.     if hit_result == true
  171.       # 威力 0 以外的物理攻击的情况下
  172.       if skill.power != 0 and skill.atk_f > 0
  173.         # 状态冲击解除
  174.         remove_states_shock
  175.         # 设置有效标志
  176.         effective = true
  177.       end
  178.       # HP 的伤害减法运算
  179.       last_hp = self.hp
  180.       self.hp -= self.damage
  181.       effective |= self.hp != last_hp
  182.       # 状态变化
  183.       @state_changed = false
  184.       effective |= states_plus(skill.plus_state_set)
  185.       effective |= states_minus(skill.minus_state_set)
  186.       # 威力为 0 的场合
  187.       if skill.power == 0
  188.         # 伤害设置为空的字串
  189.         self.damage = ""
  190.         # 状态没有变化的情况下
  191.         unless @state_changed
  192.           # 伤害设置为 "Miss"
  193.           self.damage = "Miss"
  194.         end
  195.       end
  196.     # Miss 的情况下
  197.     else
  198.       # 伤害设置为 "Miss"
  199.       self.damage = "Miss"
  200.     end
  201.     # 不在战斗中的情况下
  202.     unless $game_temp.in_battle
  203.       # 伤害设置为 nil
  204.       self.damage = nil
  205.     end
  206.     # 过程结束
  207.     return effective
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● 应用物品效果
  211.   #     item : 物品
  212.   #--------------------------------------------------------------------------
  213.   def item_effect(item)
  214.     # 清除会心一击标志
  215.     self.critical = false
  216.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  217.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  218.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  219.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  220.       # 过程结束
  221.       return false
  222.     end
  223.     # 清除有效标志
  224.     effective = false
  225.     # 公共事件 ID 是有效的情况下,设置为有效标志
  226.     effective |= item.common_event_id > 0
  227.     # 命中判定
  228.     hit_result = (rand(100) < item.hit)
  229.     # 不确定的特技的情况下设置为有效标志
  230.     effective |= item.hit < 100
  231.     # 命中的情况
  232.     if hit_result == true
  233.       # 计算回复量
  234.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  235.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  236.       if recover_hp < 0
  237.         recover_hp += self.pdef * item.pdef_f / 20
  238.         recover_hp += self.mdef * item.mdef_f / 20
  239.         recover_hp = [recover_hp, 0].min
  240.       end
  241.       # 属性修正
  242.       recover_hp *= elements_correct(item.element_set)
  243.       recover_hp /= 100
  244.       recover_sp *= elements_correct(item.element_set)
  245.       recover_sp /= 100
  246.       # 分散
  247.       if item.variance > 0 and recover_hp.abs > 0
  248.         amp = [recover_hp.abs * item.variance / 100, 1].max
  249.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  250.       end
  251.       if item.variance > 0 and recover_sp.abs > 0
  252.         amp = [recover_sp.abs * item.variance / 100, 1].max
  253.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  254.       end
  255.       # 回复量符号为负的情况下
  256.       if recover_hp < 0
  257.         # 防御修正
  258.         if self.guarding?
  259.           recover_hp /= 2
  260.         end
  261.       end
  262.       # HP 回复量符号的反转、设置伤害值
  263.       self.damage = -recover_hp
  264.       # HP 以及 SP 的回复
  265.       last_hp = self.hp
  266.       last_sp = self.sp
  267.       self.hp += recover_hp
  268.       self.sp += recover_sp
  269.       effective |= self.hp != last_hp
  270.       effective |= self.sp != last_sp
  271.       # 状态变化
  272.       @state_changed = false
  273.       effective |= states_plus(item.plus_state_set)
  274.       effective |= states_minus(item.minus_state_set)
  275.       # 能力上升值有效的情况下
  276.       if item.parameter_type > 0 and item.parameter_points != 0
  277.         # 能力值的分支
  278.         case item.parameter_type
  279.         when 1  # MaxHP
  280.           @maxhp_plus += item.parameter_points
  281.         when 2  # MaxSP
  282.           @maxsp_plus += item.parameter_points
  283.         when 3  # 力量
  284.           @str_plus += item.parameter_points
  285.         when 4  # 灵巧
  286.           @dex_plus += item.parameter_points
  287.         when 5  # 速度
  288.           @agi_plus += item.parameter_points
  289.         when 6  # 魔力
  290.           @int_plus += item.parameter_points
  291.         end
  292.         # 设置有效标志
  293.         effective = true
  294.       end
  295.       # HP 回复率与回复量为 0 的情况下
  296.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  297.         # 设置伤害为空的字符串
  298.         self.damage = ""
  299.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  300.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  301.            (item.parameter_type == 0 or item.parameter_points == 0)
  302.           # 状态没有变化的情况下
  303.           unless @state_changed
  304.             # 伤害设置为 "Miss"
  305.             self.damage = "Miss"
  306.           end
  307.         end
  308.       end
  309.     # Miss 的情况下
  310.     else
  311.       # 伤害设置为 "Miss"
  312.       self.damage = "Miss"
  313.     end
  314.     # 不在战斗中的情况下
  315.     unless $game_temp.in_battle
  316.       # 伤害设置为 nil
  317.       self.damage = nil
  318.     end
  319.     # 过程结束
  320.     return effective
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # ● 应用连续伤害效果
  324.   #--------------------------------------------------------------------------
  325.   def slip_damage_effect
  326.     # 设置伤害
  327.     self.damage = self.maxhp / 10
  328.     # 分散
  329.     if self.damage.abs > 0
  330.       amp = [self.damage.abs * 15 / 100, 1].max
  331.       self.damage += rand(amp+1) + rand(amp+1) - amp
  332.     end
  333.     # HP 的伤害减法运算
  334.     self.hp -= self.damage
  335.     # 过程结束
  336.     return true
  337.   end
  338.   #--------------------------------------------------------------------------
  339.   # ● 属性修正计算
  340.   #     element_set : 属性
  341.   #--------------------------------------------------------------------------
  342.   def elements_correct(element_set)
  343.     # 無属性的情况
  344.     if element_set == []
  345.       # 返回 100
  346.       return 100
  347.     end
  348.     # 在被赋予的属性中返回最弱的
  349.     # ※过程 element_rate 是、本类以及继承的 Game_Actor
  350.     #   和 Game_Enemy 类的定义
  351.     weakest = -100
  352.     for i in element_set
  353.       weakest = [weakest, self.element_rate(i)].max
  354.     end
  355.     return weakest
  356.   end
  357. end
复制代码



作者: 灯笼菜刀王    时间: 2018-5-23 14:42
现在看昨天写的脚本就发现一堆愚蠢的问题....  emm昨天那肯定是我弟弟写的......

Scripts.rar (331.38 KB, 下载次数: 56)
此版本修复了

TP不限制问题
第二角色被return问题
状态图标opacity为0问题



作者: 89444640    时间: 2018-5-23 15:09
灯笼菜刀王 发表于 2018-5-23 14:42
现在看昨天写的脚本就发现一堆愚蠢的问题....  emm昨天那肯定是我弟弟写的......

图标正常了,技能继续看有没有啥奇怪东西,道具增加TP和敌人减少TP还没试

话说敌人那个ヽ( ̄▽ ̄)ノ不用改啦?
作者: 89444640    时间: 2018-5-23 15:39
本帖最后由 89444640 于 2018-5-23 16:21 编辑

Items.rar (1.67 KB, 下载次数: 43)
使用道具增加能量槽可以,但是减少时候出现问题。无论敌人的还是自己的,技能减少还没试。
字体改大点字号就好了,
      添字(actor.hp.to_s,actor_x+81,48,2,16,72,18)
      添字(actor.sp.to_s,actor_x+81,66,2,16,72,18)
16改20就清楚多了

战斗事件扩展脚本?没印象了,估计是只用到了某个功能其他不会用。
现在是这样


作者: 灯笼菜刀王    时间: 2018-5-23 16:00
89444640 发表于 2018-5-23 15:39
使用道具增加能量槽可以,但是减少时候出现问题。无论敌人的还是自己的,技能减少还没试。
字体改大点字号 ...

很好,我又漏了一个地方没填,难怪敌人看不到三个豆....

战斗时敌HP、MP显示  这个脚本,用下面的覆盖掉就解决了

  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================


  4. #==============================================================================
  5. # ■ Window_Help
  6. #------------------------------------------------------------------------------
  7. # 重新定义的内容,可以显示敌人的HP\MP百分比
  8. # 作者:carol3_柳柳
  9. #==============================================================================

  10. class Window_Help < Window_Base
  11.   def set_enemy(actor)
  12.     self.contents.clear
  13.     draw_actor_name(actor, 4, 0)
  14.     draw_actor_state(actor, 140, 0)
  15.     carol3_draw_hp_bar(actor, 284, 0)
  16.     carol3_draw_sp_bar(actor, 378, 0)
  17.     if $game_switches[TP_VISIBLE] and ENEMY_TP
  18.      添槽("TP血条",actor.tp % 1000,1000,500,14)
  19.      添槽("水晶体3",actor.tp / 1000,3,456,14)
  20.     end
  21.     @text = nil
  22.     self.visible = true
  23.   end
  24.   def carol3_draw_hp_bar(actor, x, y, width = 64) #宽度可调
  25.     self.contents.font.color = system_color
  26.     self.contents.fill_rect(x-1, y+17, width+2,6, Color.new(0, 0, 0, 255))
  27.     w = width * actor.hp / [actor.maxhp,1].max
  28.     self.contents.fill_rect(x, y+18, w,1, Color.new(255, 96, 96, 255))
  29.     self.contents.fill_rect(x, y+19, w,1, Color.new(255, 0, 0, 255))
  30.     self.contents.fill_rect(x, y+20, w,1, Color.new(128, 0, 0, 255))
  31.     self.contents.fill_rect(x, y+21, w,1, Color.new(0, 0, 0, 255))
  32.     self.contents.draw_text(x-24,y,128,32,$data_system.words.hp)
  33.     self.contents.font.color = normal_color
  34.   end
  35.   def carol3_draw_sp_bar(actor, x, y, width = 64)
  36.     self.contents.font.color = system_color
  37.     self.contents.fill_rect(x-1, y+17, width+2,6, Color.new(0, 0, 0, 255))
  38.     w = width * actor.sp / [actor.maxsp,1].max
  39.     self.contents.fill_rect(x, y+18, w,1, Color.new(128, 255, 255, 255))
  40.     self.contents.fill_rect(x, y+19, w,1, Color.new(0, 255, 255, 255))
  41.     self.contents.fill_rect(x, y+20, w,1, Color.new(0, 192, 192, 255))
  42.     self.contents.fill_rect(x, y+21, w,1, Color.new(0, 128, 128, 255))
  43.     self.contents.draw_text(x-24,y,128,32,$data_system.words.sp)
  44.     self.contents.font.color = normal_color
  45.   end
  46. end

  47. #==============================================================================
  48. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  49. #==============================================================================


复制代码

作者: 89444640    时间: 2018-5-23 18:00
本帖最后由 89444640 于 2018-5-24 07:49 编辑

继续改吧,把咲夜加进去了,然后我发现不知道是谁修的,现在没有待机动画的敌人,用RM默认的魔法攻击,不显示动画了。
用魁·魔理莎测试一下吧。
地址我私信两位。

作者: 灯笼菜刀王    时间: 2018-5-23 21:13
本帖最后由 灯笼菜刀王 于 2018-5-23 22:01 编辑

Scripts.rar (331.64 KB, 下载次数: 61)

动态槽还是没办法搞,不知道是我的写法问题还是什么脚本捣乱... 反正暂时先这样了 .  另外, 注意备注 都要用 # 把说明内容和备注隔开

此版修正
敌人不受TP限制BUG
物品增减TPBUG
物品增减TP会显示MISS

改动功能 : 技能备注 tp=-100  负数为 需要消耗TP 才能使用
                 技能备注 tp=100  正数为 使用后增加自身TP
                 技能备注 tp=0  这样备注, 使用不受TP限制,但是会消耗掉全部TP

                技能备注 kp=-100  负数为 给使用对象 扣TP
                技能备注 kp=100  正数为 给使用对象 加TP

                道具备注 kp=-100  负数为 给使用对象 扣TP
                道具备注 kp=100  正数为 给使用对象 加TP

                ※ kp=0 让目标TP归0

                B_SKILL_TP  设置修改为:  挨技能打增加TP量, 只对没有设置kp的技能有效

增加方法:  助纣为虐(id,±n)  该方法可以给队伍里第id号的敌人增加n点TP, 只能在战斗场合下使用.
                平生修为  该方法可以获得角色使用TP技能前的TP量

                 用法 $game_variables[编号] = 平生修为
                 把变量带入平生修为,  这个变量就是当前角色使用TP技能前所持有的TP量, 配合 tp=0 ,功能, 可以做出"使出全身气力"的招式, 也可以使用  天下无双(1,$game_variables[编号] ), 给某角色增加这个变量的TP量 = 转移怒气  

附带 : 优化敌人AI, 让它们在SP或者TP不够的情况下, 不会选择这招.
          增加 添白字 方法, 不想要带阴影的字, 把 添字,换成 添白字 就好了.

删除: 猫大的物品使用公式, 还我自由=.=
作者: soulsaga    时间: 2018-5-23 23:05
我在研究..在动画中按键取消当前播放动画再播放另一个动画..帶伤害..
还在摸索中..总是报错..郁闷啊..
作者: 89444640    时间: 2018-5-24 08:37
本帖最后由 89444640 于 2018-5-24 09:35 编辑

测试中,想起个事情,当年有个飞机游戏,就是流程特别特别长的哪个,如果通关能打大概2个小时以上,保险是下面有个槽,能自动提升,俗称 攒保险,第一关城市高速路,第二关海港,第三关是个漂浮的岛屿,大概是cps基板的。我这没法找名字
别的不用管了,主要着游戏当年有个谣传不知道是不是真的,在没事的时候摇杆多绕圈,可以让攒保险的速度增加。
然后我想起来这个了,感觉可以设定个隐藏的增加TP槽方法,

在角色行动的时候,反正看也是看,不如让玩家没事绕个圈,顺道毁自己键盘或者手柄XD,轮到在角色行动中时,按照顺序按↑←↓→,可以增加怒气值按一下增加1点,必须按照顺序逆时针按(对应游戏中角色朝向是正向摇杆一圈),乱按不增加。
因为搓招也是全键盘调用,目前不考虑手柄类比摇杆,那个绕的速度太快。

当然,这个使用的前提是,和别的不冲突,因为还有个搓招。冲突的话,设定成其他方法
程序上有问题吗?XD………………
咳咳上面的先不提了,继续报告bug,现在读盘出问题了。进入游戏 存盘,退出,什么都不动,再次进入游戏 读取,跳出这个


只有第一个角色标注TP=-1000时候有效,其他角色可以直接选择。

第一个角色使用KP=1000增加怒气无效
给别人增加TP  kp=1000 无效
减少敌人TP kp=-1000 无效
敌人特技攻击增加我方怒气值 无效
防御不增加怒气

我试着加上和减去回复类特技专用的属性,都不行。
作者: 灯笼菜刀王    时间: 2018-5-24 11:46
本帖最后由 灯笼菜刀王 于 2018-5-24 12:56 编辑
89444640 发表于 2018-5-24 08:37
测试中,想起个事情,当年有个飞机游戏,就是流程特别特别长的哪个,如果通关能打大概2个小时以上,保险是 ...




是你设置问题~~  

增加怒气值1000点#TP=1000;@蓄力  ←要用小写
降低敌人怒气值500点。#KP=500;@回复   ←扣元气要负数,TP KP都一样,正数+负数-,不管是对敌人还是我方

防御不加TP。 大姐,你防御+20哎,104像素的2%可不容易辨别= =,你防御50回合看看有没有一个豆子 ....

防御增加的TP是要等显示出“防御”才会增加的。而且挨打也会增加TP,就不容易辨别。
其实如果战斗中防御不是很重要的话,可以改成“蓄力”指令,然后去掉防御50%减伤功能,或者换成,增加50%伤害~ 这样用蓄力指令的时候挨打就要被counter

而且敌人也可以使用防御(蓄力)指令,可以做出一个只会憋大招的BOSS....

测试用小插件, 插到MAIN上面,不用的话可以删掉,战斗的时候就会弹出信息框提示,这样就方便测试有没有效果了吧。  然后要检查技能设置,建个NPC,输入脚本:葵花宝典(技能ID)   显示的不是nil就是设置正确。排除设置问题再来测试方便找BUG = =
RUBY 代码复制
  1. def 攒必杀(actor,n)
  2.   a = actor.tp
  3.   $game_variables[MAX_TP_ID][0] = a
  4.   if actor.is_a?(Game_Actor)
  5.     b = $game_variables[MAX_TP_ID][actor.id] != nil ? $game_variables[MAX_TP_ID][actor.id] : 0
  6.     if actor.hp <= 0 and DEAD_CLEAN_TP
  7.       actor.tp = 0
  8.     else
  9.      if ZERO_TP and b == 0
  10.        actor.tp = 0
  11.      else
  12.        if n != 0
  13.         actor.tp = [[a+n,b*1000+999].min,0].max
  14.        else
  15.         actor.tp = 0
  16.        end
  17.      end
  18.     end
  19.   else
  20.     if actor.hp <= 0 and DEAD_CLEAN_TP
  21.       actor.tp = 0
  22.     else
  23.       if n != 0
  24.        actor.tp = [[a+n,3999].min,0].max
  25.       else
  26.        actor.tp = 0
  27.       end
  28.     end
  29.   end
  30.   if n == 0
  31.    p actor.name +"的TP归0"
  32.   elsif n < 0
  33.    p actor.name +"增加"+ n.to_s + "TP"
  34.   else n > 0
  35.    p actor.name +"减少"+ n.to_s + "TP"
  36.   end
  37. end  
  38. def 葵花宝典(n)
  39.   a = $date_skills[n]._tp
  40.   b = $date_skills[n]._kp
  41.   p "TP是"+a.to_s+";KP是"+b.to_s
  42. end


挨技能打不增加TP,是我没打包进去= =   把  Scene_Battle 4  这个脚本内容用下面的覆盖就可以了   然后第一个脚本 增加一句  B_SKILL_TP = 200   这个就是技能挨打增加的TP

原本想用kp来+技能挨打TP就好了,帖子发了后,想了想,这样等于一堆技能全部要设置kp,就改了下,然后忘记更新=。=

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 4)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 开始主回合
  10.   #--------------------------------------------------------------------------
  11.   def start_phase4
  12.     # 转移到回合 4
  13.     @phase = 4
  14.     # 回合数计数
  15.     $game_temp.battle_turn += 1
  16.     # 搜索全页的战斗事件
  17.     for index in 0...$data_troops[@troop_id].pages.size
  18.       # 获取事件页
  19.       page = $data_troops[@troop_id].pages[index]
  20.       # 本页的范围是 [回合] 的情况下
  21.       if page.span == 1
  22.         # 设置已经执行标志
  23.         $game_temp.battle_event_flags[index] = false
  24.       end
  25.     end
  26.     # 设置角色为非选择状态
  27.     @actor_index = -1
  28.     @active_battler = nil
  29.     # 有效化同伴指令窗口
  30.     @party_command_window.active = false
  31.     @party_command_window.visible = false
  32.     # 无效化角色指令窗口
  33.     @actor_command_window.active = false
  34.     @actor_command_window.visible = false
  35.     # 设置主回合标志
  36.     $game_temp.battle_main_phase = true
  37.     # 生成敌人行动
  38.     for enemy in $game_troop.enemies
  39.       enemy.make_action
  40.     end
  41.     # 生成行动顺序
  42.     make_action_orders
  43.     # 移动到步骤 1
  44.     @phase4_step = 1
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 生成行动循序
  48.   #--------------------------------------------------------------------------
  49.   def make_action_orders
  50.     # 初始化序列 @action_battlers
  51.     @action_battlers = []
  52.     # 添加敌人到 @action_battlers 序列
  53.     for enemy in $game_troop.enemies
  54.       @action_battlers.push(enemy)
  55.     end
  56.     # 添加角色到 @action_battlers 序列
  57.     for actor in $game_party.actors
  58.       @action_battlers.push(actor)
  59.     end
  60.     # 确定全体的行动速度
  61.     for battler in @action_battlers
  62.       battler.make_action_speed
  63.     end
  64.     # 按照行动速度从大到小排列
  65.     @action_battlers.sort! {|a,b|
  66.       b.current_action.speed - a.current_action.speed }
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 刷新画面 (主回合)
  70.   #--------------------------------------------------------------------------
  71.   def update_phase4
  72.     case @phase4_step
  73.     when 1
  74.       update_phase4_step1
  75.     when 2
  76.       update_phase4_step2
  77.     when 3
  78.       update_phase4_step3
  79.     when 4
  80.       update_phase4_step4
  81.     when 5
  82.       update_phase4_step5
  83.     when 6
  84.       update_phase4_step6
  85.     end
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 刷新画面 (主回合步骤 1 : 准备行动)
  89.   #--------------------------------------------------------------------------
  90.   def update_phase4_step1
  91.     # 隐藏帮助窗口
  92.     @help_window.visible = false
  93.     # 判定胜败
  94.     if judge
  95.       # 胜利或者失败的情况下 : 过程结束
  96.       return
  97.     end
  98.     # 强制行动的战斗者不存在的情况下
  99.     if $game_temp.forcing_battler == nil
  100.       # 设置战斗事件
  101.       setup_battle_event
  102.       # 执行战斗事件中的情况下
  103.       if $game_system.battle_interpreter.running?
  104.         return
  105.       end
  106.     end
  107.     # 强制行动的战斗者存在的情况下
  108.     if $game_temp.forcing_battler != nil
  109.       # 在头部添加后移动
  110.       @action_battlers.delete($game_temp.forcing_battler)
  111.       @action_battlers.unshift($game_temp.forcing_battler)
  112.     end
  113.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  114.     if @action_battlers.size == 0
  115.       # 开始同伴命令回合
  116.       start_phase2
  117.       return
  118.     end
  119.     # 初始化动画 ID 和公共事件 ID
  120.     @animation1_id = 0
  121.     @animation2_id = 0
  122.     @common_event_id = 0
  123.     # 未行动的战斗者移动到序列的头部
  124.     @active_battler = @action_battlers.shift
  125.     # 如果已经在战斗之外的情况下
  126.     if @active_battler.index == nil
  127.       return
  128.     end
  129.     # 连续伤害
  130.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  131.       @active_battler.slip_damage_effect
  132.       @active_battler.damage_pop = true
  133.     end
  134.     # 自然解除状态
  135.     @active_battler.remove_states_auto
  136.     # 刷新状态窗口
  137.     @status_window.refresh
  138.     # 移至步骤 2
  139.     @phase4_step = 2
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 刷新画面 (主回合步骤 2 : 开始行动)
  143.   #--------------------------------------------------------------------------
  144.   def update_phase4_step2
  145.     # 如果不是强制行动
  146.     unless @active_battler.current_action.forcing
  147.       # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
  148.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  149.         # 设置行动为攻击
  150.         @active_battler.current_action.kind = 0
  151.         @active_battler.current_action.basic = 0
  152.       end
  153.       # 限制为 [不能行动] 的情况下
  154.       if @active_battler.restriction == 4
  155.         # 清除行动强制对像的战斗者
  156.         $game_temp.forcing_battler = nil
  157.         # 移至步骤 1
  158.         @phase4_step = 1
  159.         return
  160.       end
  161.     end
  162.     # 清除对像战斗者
  163.     @target_battlers = []
  164.     # 行动种类分支
  165.     case @active_battler.current_action.kind
  166.     when 0  # 基本
  167.       make_basic_action_result
  168.     when 1  # 特技
  169.       make_skill_action_result
  170.     when 2  # 物品
  171.       make_item_action_result
  172.     end
  173.     # 移至步骤 3
  174.     if @phase4_step == 2
  175.       @phase4_step = 3
  176.     end
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 生成基本行动结果
  180.   #--------------------------------------------------------------------------
  181.   def make_basic_action_result
  182.     # 攻击的情况下
  183.     if @active_battler.current_action.basic == 0
  184.       # 设置攻击 ID
  185.       @animation1_id = @active_battler.animation1_id
  186.       @animation2_id = @active_battler.animation2_id
  187.       # 行动方的战斗者是敌人的情况下
  188.       if @active_battler.is_a?(Game_Enemy)
  189.         if @active_battler.restriction == 3
  190.           target = $game_troop.random_target_enemy
  191.         elsif @active_battler.restriction == 2
  192.           target = $game_party.random_target_actor
  193.         else
  194.           index = @active_battler.current_action.target_index
  195.           target = $game_party.smooth_target_actor(index)
  196.         end
  197.       end
  198.       # 行动方的战斗者是角色的情况下
  199.       if @active_battler.is_a?(Game_Actor)
  200.         if @active_battler.restriction == 3
  201.           target = $game_party.random_target_actor
  202.         elsif @active_battler.restriction == 2
  203.           target = $game_troop.random_target_enemy
  204.         else
  205.           index = @active_battler.current_action.target_index
  206.           target = $game_troop.smooth_target_enemy(index)
  207.         end
  208.       end
  209.       # 设置对像方的战斗者序列
  210.       @target_battlers = [target]
  211.       # 应用通常攻击效果
  212.       for target in @target_battlers
  213.         target.attack_effect(@active_battler)
  214.         攒必杀(target,BEAT_TP)
  215.       end
  216.       攒必杀(@active_battler,ATTACK_TP)
  217.       return
  218.     end
  219.     # 防御的情况下
  220.     if @active_battler.current_action.basic == 1
  221.       攒必杀(@active_battler,DEFENSE_TP)
  222.       # 帮助窗口显示"防御"
  223.       @help_window.set_text($data_system.words.guard, 1)
  224.       return
  225.     end
  226.     # 逃跑的情况下
  227.     if @active_battler.is_a?(Game_Enemy) and
  228.        @active_battler.current_action.basic == 2
  229.       #  帮助窗口显示"逃跑"
  230.       @help_window.set_text("逃跑", 1)
  231.       # 逃跑
  232.       @active_battler.escape
  233.       return
  234.     end
  235.     # 什么也不做的情况下
  236.     if @active_battler.current_action.basic == 3
  237.       # 清除强制行动对像的战斗者
  238.       $game_temp.forcing_battler = nil
  239.       # 移至步骤 1
  240.       @phase4_step = 1
  241.       return
  242.     end
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 设置物品或特技对像方的战斗者
  246.   #     scope : 特技或者是物品的范围
  247.   #--------------------------------------------------------------------------
  248.   def set_target_battlers(scope)
  249.     # 行动方的战斗者是敌人的情况下
  250.     if @active_battler.is_a?(Game_Enemy)
  251.       # 效果范围分支
  252.       case scope
  253.       when 1  # 敌单体
  254.         index = @active_battler.current_action.target_index
  255.         @target_battlers.push($game_party.smooth_target_actor(index))
  256.       when 2  # 敌全体
  257.         for actor in $game_party.actors
  258.           if actor.exist?
  259.             @target_battlers.push(actor)
  260.           end
  261.         end
  262.       when 3  # 我方单体
  263.         index = @active_battler.current_action.target_index
  264.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  265.       when 4  # 我方全体
  266.         for enemy in $game_troop.enemies
  267.           if enemy.exist?
  268.             @target_battlers.push(enemy)
  269.           end
  270.         end
  271.       when 5  # 我方单体 (HP 0)
  272.         index = @active_battler.current_action.target_index
  273.         enemy = $game_troop.enemies[index]
  274.         if enemy != nil and enemy.hp0?
  275.           @target_battlers.push(enemy)
  276.         end
  277.       when 6  # 我方全体 (HP 0)
  278.         for enemy in $game_troop.enemies
  279.           if enemy != nil and enemy.hp0?
  280.             @target_battlers.push(enemy)
  281.           end
  282.         end
  283.       when 7  # 使用者
  284.         @target_battlers.push(@active_battler)
  285.       end
  286.     end
  287.     # 行动方的战斗者是角色的情况下
  288.     if @active_battler.is_a?(Game_Actor)
  289.       # 效果范围分支
  290.       case scope
  291.       when 1  # 敌单体
  292.         index = @active_battler.current_action.target_index
  293.         @target_battlers.push($game_troop.smooth_target_enemy(index))
  294.       when 2  # 敌全体
  295.         for enemy in $game_troop.enemies
  296.           if enemy.exist?
  297.             @target_battlers.push(enemy)
  298.           end
  299.         end
  300.       when 3  # 我方单体
  301.         index = @active_battler.current_action.target_index
  302.         @target_battlers.push($game_party.smooth_target_actor(index))
  303.       when 4  # 我方全体
  304.         for actor in $game_party.actors
  305.           if actor.exist?
  306.             @target_battlers.push(actor)
  307.           end
  308.         end
  309.       when 5  # 我方单体 (HP 0)
  310.         index = @active_battler.current_action.target_index
  311.         actor = $game_party.actors[index]
  312.         if actor != nil and actor.hp0?
  313.           @target_battlers.push(actor)
  314.         end
  315.       when 6  # 我方全体 (HP 0)
  316.         for actor in $game_party.actors
  317.           if actor != nil and actor.hp0?
  318.             @target_battlers.push(actor)
  319.           end
  320.         end
  321.       when 7  # 使用者
  322.         @target_battlers.push(@active_battler)
  323.       end
  324.     end
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● 生成特技行动结果
  328.   #--------------------------------------------------------------------------
  329.   def make_skill_action_result
  330.     # 获取特技
  331.     @skill = $data_skills[@active_battler.current_action.skill_id]
  332.     # 如果不是强制行动
  333.     unless @active_battler.current_action.forcing
  334.       # 因为 SP 耗尽而无法使用的情况下
  335.       unless @active_battler.skill_can_use?(@skill.id)
  336.         # 清除强制行动对像的战斗者
  337.         $game_temp.forcing_battler = nil
  338.         # 移至步骤 1
  339.         @phase4_step = 1
  340.         return
  341.       end
  342.     end
  343.     # 消耗 SP
  344.     @active_battler.sp -= @skill.sp_cost
  345.     攒必杀(@active_battler,@skill._tp) if @skill._tp != nil
  346.     # 刷新状态窗口
  347.     @status_window.refresh
  348.     # 在帮助窗口显示特技名
  349.     #@help_window.set_text(@skill.name, 1)   
  350.     if @active_battler.is_a?(Game_Enemy)
  351.     @help_window.set_text(@skill.name, 1)
  352.     end
  353.     # 设置动画 ID
  354.     @animation1_id = @skill.animation1_id
  355.     @animation2_id = @skill.animation2_id
  356.     # 设置公共事件 ID
  357.     @common_event_id = @skill.common_event_id
  358.     # 设置对像侧战斗者
  359.     set_target_battlers(@skill.scope)
  360.     # 应用特技效果
  361.     a = @skill._kp != nil ? @skill._kp : B_SKILL_TP
  362.     for target in @target_battlers
  363.       target.skill_effect(@active_battler, @skill)
  364.       攒必杀(target,a)
  365.     end
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● 生成物品行动结果
  369.   #--------------------------------------------------------------------------
  370.   def make_item_action_result
  371.     # 获取物品
  372.     @item = $data_items[@active_battler.current_action.item_id]
  373.     # 因为物品耗尽而无法使用的情况下
  374.     unless $game_party.item_can_use?(@item.id)
  375.       # 移至步骤 1
  376.       @phase4_step = 1
  377.       return
  378.     end
  379.     # 消耗品的情况下
  380.     if @item.consumable
  381.       # 使用的物品减 1
  382.       $game_party.lose_item(@item.id, 1)
  383.     end
  384.     # 在帮助窗口显示物品名
  385.     @help_window.set_text(@item.name, 1)
  386.     # 设置动画 ID
  387.     @animation1_id = @item.animation1_id
  388.     @animation2_id = @item.animation2_id
  389.     # 设置公共事件 ID
  390.     @common_event_id = @item.common_event_id
  391.     # 确定对像
  392.     index = @active_battler.current_action.target_index
  393.     target = $game_party.smooth_target_actor(index)
  394.     # 设置对像侧战斗者
  395.     set_target_battlers(@item.scope)
  396.     # 应用物品效果
  397.     for target in @target_battlers
  398.       target.item_effect(@item)
  399.     end
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  403.   #--------------------------------------------------------------------------
  404.   def update_phase4_step3
  405.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  406.     if @animation1_id == 0
  407.       @active_battler.white_flash = true
  408.     else
  409.       @active_battler.animation_id = @animation1_id
  410.       @active_battler.animation_hit = true
  411.     end
  412.     # 移至步骤 4
  413.     @phase4_step = 4
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● 刷新画面 (主回合步骤 4 : 对像方动画)
  417.   #--------------------------------------------------------------------------
  418.   def update_phase4_step4
  419.     # 对像方动画
  420.     for target in @target_battlers
  421.       target.animation_id = @animation2_id
  422.       target.animation_hit = (target.damage != "Miss")
  423.     end
  424.     # 限制动画长度、最低 8 帧
  425.     @wait_count = 8
  426.     # 移至步骤 5
  427.     @phase4_step = 5
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  431.   #--------------------------------------------------------------------------
  432.   def update_phase4_step5
  433.     # 隐藏帮助窗口
  434.     @help_window.visible = false
  435.     # 刷新状态窗口
  436.     @status_window.refresh
  437.     # 显示伤害
  438.     for target in @target_battlers
  439.       if target.damage != nil
  440.         target.damage_pop = true
  441.       end
  442.     end
  443.     # 移至步骤 6
  444.     @phase4_step = 6
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 刷新画面 (主回合步骤 6 : 刷新)
  448.   #--------------------------------------------------------------------------
  449.   def update_phase4_step6
  450.     # 清除强制行动对像的战斗者
  451.     $game_temp.forcing_battler = nil
  452.     # 公共事件 ID 有效的情况下
  453.     if @common_event_id > 0
  454.       # 设置事件
  455.       common_event = $data_common_events[@common_event_id]
  456.       $game_system.battle_interpreter.setup(common_event.list, 0)
  457.     end
  458.     # 移至步骤 1
  459.     @phase4_step = 1
  460.   end
  461. end


然后存档初始化问题, Scene_Title  这个脚本内容用下面的覆盖

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  处理标题画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Title
  8.   #--------------------------------------------------------------------------
  9.   # ● 住处理
  10.   #--------------------------------------------------------------------------
  11.   def main
  12.     # 战斗测试的情况下
  13.     if $BTEST
  14.       battle_test
  15.       return
  16.     end
  17.     # 载入数据库
  18.     $data_actors        = load_data("Data/Actors.rxdata")
  19.     $data_classes       = load_data("Data/Classes.rxdata")
  20.     $data_skills        = load_data("Data/Skills.rxdata")
  21.     $data_items         = load_data("Data/Items.rxdata")
  22.     $data_weapons       = load_data("Data/Weapons.rxdata")
  23.     $data_armors        = load_data("Data/Armors.rxdata")
  24.     $data_enemies       = load_data("Data/Enemies.rxdata")
  25.     $data_troops        = load_data("Data/Troops.rxdata")
  26.     $data_states        = load_data("Data/States.rxdata")
  27.     $data_animations    = load_data("Data/Animations.rxdata")
  28.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  29.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  30.     $data_system        = load_data("Data/System.rxdata")
  31.     # 生成系统对像
  32.     $game_system = Game_System.new
  33.     # 生成标题图形
  34.     @sprite = Sprite.new
  35.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  36.     $game_variables[MAX_TP_ID] = []
  37.     # 生成命令窗口
  38.     s1 = "新游"
  39.     s2 = "继续"
  40.     s3 = "退出"
  41.     @command_window = Window_Command.new(192, [s1, s2, s3])
  42.     @command_window.back_opacity = 160
  43.     @command_window.x = 320 - @command_window.width / 2
  44.     @command_window.y = 288
  45.     # 判定继续的有效性
  46.     # 存档文件一个也不存在的时候也调查
  47.     # 有効为 @continue_enabled 为 true、無効为 false
  48.     @continue_enabled = false
  49.     for i in 0..3
  50.       if FileTest.exist?("Save#{i+1}.rxdata")
  51.         @continue_enabled = true
  52.       end
  53.     end
  54.     # 继续为有效的情况下、光标停止在继续上
  55.     # 无效的情况下、继续的文字显示为灰色
  56.     if @continue_enabled
  57.       @command_window.index = 1
  58.     else
  59.       @command_window.disable_item(1)
  60.     end
  61.     # 演奏标题 BGM
  62.     $game_system.bgm_play($data_system.title_bgm)
  63.     # 停止演奏 ME、BGS
  64.     Audio.me_stop
  65.     Audio.bgs_stop
  66.     # 执行过渡
  67.     Graphics.transition
  68.     # 主循环
  69.     loop do
  70.       # 刷新游戏画面
  71.       Graphics.update
  72.       # 刷新输入信息
  73.       Input.update
  74.       # 刷新画面
  75.       update
  76.       # 如果画面被切换就中断循环
  77.       if $scene != self
  78.         break
  79.       end
  80.     end
  81.     # 装备过渡
  82.     Graphics.freeze
  83.     # 释放命令窗口
  84.     @command_window.dispose
  85.     # 释放标题图形
  86.     @sprite.bitmap.dispose
  87.     @sprite.dispose
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 刷新画面
  91.   #--------------------------------------------------------------------------
  92.   def update
  93.     # 刷新命令窗口
  94.     @command_window.update
  95.     # 按下 C 键的情况下
  96.     if Input.trigger?(Input::C)
  97.       # 命令窗口的光标位置的分支
  98.       case @command_window.index
  99.       when 0  # 新游戏
  100.         command_new_game
  101.       when 1  # 继续
  102.         command_continue
  103.       when 2  # 退出
  104.         command_shutdown
  105.       end
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 命令 : 新游戏
  110.   #--------------------------------------------------------------------------
  111.   def command_new_game
  112.     # 演奏确定 SE
  113.     $game_system.se_play($data_system.decision_se)
  114.     # 停止 BGM
  115.     Audio.bgm_stop
  116.     # 重置测量游戏时间用的画面计数器
  117.     Graphics.frame_count = 0
  118.     # 生成各种游戏对像
  119.     $game_temp          = Game_Temp.new
  120.     $game_system        = Game_System.new
  121.     $game_switches      = Game_Switches.new
  122.     $game_variables     = Game_Variables.new
  123.     $game_self_switches = Game_SelfSwitches.new
  124.     $game_screen        = Game_Screen.new
  125.     $game_actors        = Game_Actors.new
  126.     $game_party         = Game_Party.new
  127.     $game_troop         = Game_Troop.new
  128.     $game_map           = Game_Map.new
  129.     $game_player        = Game_Player.new
  130.     # 设置初期同伴位置
  131.     $game_party.setup_starting_members
  132.     # 设置初期位置的地图
  133.     $game_map.setup($data_system.start_map_id)
  134.     # 主角向初期位置移动
  135.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  136.     # 刷新主角
  137.     $game_player.refresh
  138.     # 执行地图设置的 BGM 与 BGS 的自动切换
  139.     $game_map.autoplay
  140.     # 刷新地图 (执行并行事件)
  141.     $game_map.update
  142.     $game_variables[MAX_TP_ID] = []
  143.     # 切换地图画面
  144.     $scene = Scene_Map.new
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 命令 : 继续
  148.   #--------------------------------------------------------------------------
  149.   def command_continue
  150.     # 继续无效的情况下
  151.     unless @continue_enabled
  152.       # 演奏无效 SE
  153.       $game_system.se_play($data_system.buzzer_se)
  154.       return
  155.     end
  156.     # 演奏确定 SE
  157.     $game_system.se_play($data_system.decision_se)
  158.     # 切换到读档画面
  159.     $scene = Scene_Load.new
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● 命令 : 退出
  163.   #--------------------------------------------------------------------------
  164.   def command_shutdown
  165.     # 演奏确定 SE
  166.     $game_system.se_play($data_system.decision_se)
  167.     # BGM、BGS、ME 的淡入淡出
  168.     Audio.bgm_fade(800)
  169.     Audio.bgs_fade(800)
  170.     Audio.me_fade(800)
  171.     # 退出
  172.     $scene = nil
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 战斗测试
  176.   #--------------------------------------------------------------------------
  177.   def battle_test
  178.     # 载入数据库 (战斗测试用)
  179.     $data_actors        = load_data("Data/BT_Actors.rxdata")
  180.     $data_classes       = load_data("Data/BT_Classes.rxdata")
  181.     $data_skills        = load_data("Data/BT_Skills.rxdata")
  182.     $data_items         = load_data("Data/BT_Items.rxdata")
  183.     $data_weapons       = load_data("Data/BT_Weapons.rxdata")
  184.     $data_armors        = load_data("Data/BT_Armors.rxdata")
  185.     $data_enemies       = load_data("Data/BT_Enemies.rxdata")
  186.     $data_troops        = load_data("Data/BT_Troops.rxdata")
  187.     $data_states        = load_data("Data/BT_States.rxdata")
  188.     $data_animations    = load_data("Data/BT_Animations.rxdata")
  189.     $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
  190.     $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
  191.     $data_system        = load_data("Data/BT_System.rxdata")
  192.     # 重置测量游戏时间用的画面计数器
  193.     Graphics.frame_count = 0
  194.     # 生成各种游戏对像
  195.     $game_temp          = Game_Temp.new
  196.     $game_system        = Game_System.new
  197.     $game_switches      = Game_Switches.new
  198.     $game_variables     = Game_Variables.new
  199.     $game_self_switches = Game_SelfSwitches.new
  200.     $game_screen        = Game_Screen.new
  201.     $game_actors        = Game_Actors.new
  202.     $game_party         = Game_Party.new
  203.     $game_troop         = Game_Troop.new
  204.     $game_map           = Game_Map.new
  205.     $game_player        = Game_Player.new
  206.     # 设置战斗测试用同伴
  207.     $game_party.setup_battle_test_members
  208.     $game_variables[MAX_TP_ID] = []
  209.     # 设置队伍 ID、可以逃走标志、战斗背景
  210.     $game_temp.battle_troop_id = $data_system.test_troop_id
  211.     $game_temp.battle_can_escape = true
  212.     $game_map.battleback_name = $data_system.battleback_name
  213.     # 演奏战斗开始 BGM
  214.     $game_system.se_play($data_system.battle_start_se)
  215.     # 演奏战斗 BGM
  216.     #$game_system.bgm_play($game_system.battle_bgm)
  217.     # 切换到战斗画面
  218.     $scene = Scene_Battle.new
  219.   end
  220. end

作者: soulsaga    时间: 2018-5-24 13:47
话说有没东方角色全身图?
作者: 89444640    时间: 2018-5-24 15:14
灯笼菜刀王 发表于 2018-5-24 11:46
是你设置问题~~  

增加怒气值1000点#TP=1000;@蓄力  ←要用小写

#tp=-1000;@招式名称  脚本 葵花宝典(86) 是跳[] nil

这样算设置正常吧?进去测试时到是确实是不能选择的灰色
然后套着调测试脚本运行
会跳出这个

不知道是什么意思?

我直接测试吧。

防御还得要……濒死防一下,加血加上就没事了。,到是战斗特效的脚本有个蓄力,不过没看明白什么意思,从来没用过。
说起来这TP和蓄力,让我想起空轨恶名昭著的新人杀手,跳跳猫宝箱,跳跳猫正在蓄力…………

然后回复楼上,没有全身像,别人的有的是,我没画……
不过中午抽时间把低下的小半身头像风格做的一致了。

然后读取进度,覆盖了,还是不行,在脚本 系统设置319行跳出
319   $game_variables[MAX_TP_ID] = []
你确定是 Scene_Title有问题,不是由于Window_SaveFile(改)这个脚本有问题?


这个全体增加减少tp效果有了,道具增加自己减少敌人的效果也有了,但是就是现实失误特别恶心,感觉是彩虹神剑闹得,伤害为0的技能强制为失误,已有的状态再用同样状态攻击也现实失误。怎么调一下好?
恢复技能专用这个属性只能让有恢复数值的不显示miss。


然后回复soulsaga
东方角色半身像……一直没花,
到是刚才中午补了一下灵梦的,让整体风格,算是一致或者接近了,挑毛病我也没办法,因为如果这个脚本能修理正常了,必须得画,大概一个角色画半天吧,熟的角色和有草图的还好,直接拿个草图描一遍就行了,个别复杂的角色还得单起草图,
效果如下。

确实需要个同一角色可更换头像的系统,主角这衣服小半身像不露胳膊就没动作了。
可以考虑用变量控制,自己选择头像。反正主角战斗能用的三套,目前行走图用的五套,这个就是战斗时描绘个图像,与人物仓库脚本用变量记录主角战斗动画组的选择不冲突。
作者: soulsaga    时间: 2018-5-24 15:42
89444640 发表于 2018-5-24 15:14
#tp=-1000;@招式名称  脚本 葵花宝典(86) 是跳[] nil

这样算设置正常吧?进去测试时到是确实是不能选择 ...

别人的也行..我只是想拿来參考一下..
作者: 89444640    时间: 2018-5-24 17:01
添字(actor.hp.to_s,actor_x+81,48,2,20,72,16)#( 描绘的字,x,y, 对齐,字体大小,显示字体矩形的长,显示字体矩形的高,color)  
能改字体颜色啊?
那个最后一个颜色我加上,n 无论是按照系统默认的0~7还是猫大的脚本中的写,都跳出
跳出位置是     
con't convert fixnum into color
Window_Base
337  self.contents.font.color = color
作者: soulsaga    时间: 2018-5-24 17:10
89444640 发表于 2018-5-24 17:01
添字(actor.hp.to_s,actor_x+81,48,2,20,72,16)#( 描绘的字,x,y, 对齐,字体大小,显示字体矩形的长,显示字体 ...


Color.new(0,48,96,255)
Color.new(R,G,B,不透明度)
作者: soulsaga    时间: 2018-5-24 17:40
本帖最后由 soulsaga 于 2018-5-24 17:47 编辑

UI弱项..菜单也是随便弄..

FMBS1.png (466.48 KB, 下载次数: 39)

FMBS1.png

FMBS2.png (797.44 KB, 下载次数: 35)

FMBS2.png

FMBS3.png (133.52 KB, 下载次数: 32)

FMBS3.png

作者: 89444640    时间: 2018-5-24 17:49
本帖最后由 89444640 于 2018-5-24 22:41 编辑

然后,现在两个问题,来回来去的复制,我把修正好的全动画脚本给覆盖了,现在动画显示又异常了,麻烦soulsaga再发我一次。
第二,那个字体颜色描绘,不会用,现在还是用默认的算了,但是为啥写成描白字都感觉不清楚,肯定是字体原因了……只能别换颜色了。
其实同人漫,去个背景当立绘挺不错的,当年挺喜欢这上色风格的。

色彩不用太浓线条简单,有手绘感觉。
作者: soulsaga    时间: 2018-5-24 19:01
640*320动画播放脚本里
56行
改成
if full_screen and sprite.bitmap.width == 640

就改这一行..异常就修好了
简单操暴乳..真的简单操暴乳..
作者: 灯笼菜刀王    时间: 2018-5-24 21:56
本帖最后由 灯笼菜刀王 于 2018-5-25 10:39 编辑

动态槽搞定~~   分两个脚本替换掉就OK.

动态槽为竖向排列N祯的图片, N任意.  最后一祯之后会循环到第一祯开始 做素材的时候留意.  水晶槽和TP槽的帧数要一致.  注意要保留原来的槽哦,因为敌人还是用原来的槽,(所以可以给敌人画不一样的TP槽和水晶槽)

把 Scene_Battle 1 这个脚本用下面的覆盖掉
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 初始化战斗用的各种暂时数据
  12.     $game_temp.in_battle = true
  13.     $game_temp.battle_turn = 0
  14.     $game_temp.battle_event_flags.clear
  15.     $game_temp.battle_abort = false
  16.     $game_temp.battle_main_phase = false
  17.     $game_temp.battleback_name = $game_map.battleback_name
  18.     $game_temp.forcing_battler = nil
  19.     back = Sprite.new
  20.     back.bitmap = Bitmap.new("Graphics/Windowskins/战斗窗口")
  21.     back.y = 320
  22.     # 初始化战斗用事件解释器
  23.     $game_system.battle_interpreter.setup(nil, 0)
  24.     # 准备队伍
  25.     @troop_id = $game_temp.battle_troop_id
  26.     $game_troop.setup(@troop_id)
  27.     # 生成角色命令窗口
  28.     s1 = $data_system.words.attack
  29.     s2 = $data_system.words.skill
  30.     s3 = $data_system.words.guard
  31.     s4 = $data_system.words.item
  32.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  33.     @actor_command_window.z = 9999 #小改动
  34.     @actor_command_window.y = 160
  35.     @actor_command_window.back_opacity = 160
  36.     @actor_command_window.active = false
  37.     @actor_command_window.visible = false
  38.     # 生成其它窗口
  39.     @party_command_window = Window_PartyCommand.new
  40.     @help_window = Window_Help.new
  41.     @help_window.back_opacity = 160
  42.     @help_window.visible = false
  43.     @status_window = Window_BattleStatus.new
  44.     @message_window = Window_Message.new
  45.     @tp_show = Window_tpshow.new if $game_switches[TP_VISIBLE]
  46.     # 生成活动块
  47.     @spriteset = Spriteset_Battle.new
  48.     # 初始化等待计数
  49.     @wait_count = 0
  50.     # 执行过渡
  51.     if $data_system.battle_transition == ""
  52.       Graphics.transition(20)
  53.     else
  54.       Graphics.transition(40, "Graphics/Transitions/" +
  55.         $data_system.battle_transition)
  56.     end
  57.     # 开始自由战斗回合
  58.     start_phase1
  59.     # 主循环
  60.     loop do
  61.       # 刷新游戏画面
  62.       Graphics.update
  63.       # 刷新输入信息
  64.       Input.update
  65.       # 刷新画面
  66.       update
  67.       @tp_show.update if @tp_show != nil
  68.       # 如果画面切换的话就中断循环
  69.       if $scene != self
  70.         break
  71.       end
  72.     end
  73.     # 刷新地图
  74.     $game_map.refresh
  75.     # 准备过渡
  76.     Graphics.freeze
  77.     # 释放窗口
  78.     @actor_command_window.dispose
  79.     @party_command_window.dispose
  80.     @help_window.dispose
  81.     @status_window.dispose
  82.     @message_window.dispose
  83.     back.dispose
  84.     back.bitmap.dispose
  85.     @tp_show.dispose if @tp_show != nil
  86.     if @skill_window != nil
  87.       @skill_window.dispose
  88.     end
  89.     if @item_window != nil
  90.       @item_window.dispose
  91.     end
  92.     if @result_window != nil
  93.       @result_window.dispose
  94.     end
  95.     # 释放活动块
  96.     @spriteset.dispose
  97.     # 标题画面切换中的情况
  98.     if $scene.is_a?(Scene_Title)
  99.       # 淡入淡出画面
  100.       Graphics.transition
  101.       Graphics.freeze
  102.     end
  103.     # 战斗测试或者游戏结束以外的画面切换中的情况
  104.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  105.       $scene = nil
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 胜负判定
  110.   #--------------------------------------------------------------------------
  111.   def judge
  112.     # 全灭判定是真、并且同伴人数为 0 的情况下
  113.     if $game_party.all_dead? or $game_party.actors.size == 0
  114.       # 允许失败的情况下
  115.       if $game_temp.battle_can_lose
  116.         # 还原为战斗开始前的 BGM
  117.         $game_system.bgm_play($game_temp.map_bgm)
  118.         # 战斗结束
  119.         battle_end(2)
  120.         # 返回 true
  121.         return true
  122.       end
  123.       # 设置游戏结束标志
  124.       $game_temp.gameover = true
  125.       # 返回 true
  126.       return true
  127.     end
  128.     # 如果存在任意 1 个敌人就返回 false
  129.     for enemy in $game_troop.enemies
  130.       if enemy.exist?
  131.         return false
  132.       end
  133.     end
  134.     # 开始结束战斗回合 (胜利)
  135.     start_phase5
  136.     # 返回 true
  137.     return true
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ● 战斗结束
  141.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  142.   #--------------------------------------------------------------------------
  143.   def battle_end(result)
  144.     # 清除战斗中标志
  145.     $game_temp.in_battle = false
  146.     # 清除全体同伴的行动
  147.     $game_party.clear_actions
  148.     # 解除战斗用状态
  149.     for actor in $game_party.actors
  150.       actor.remove_states_battle
  151.       actor.tp = 0 if END_CLEAN_TP
  152.     end
  153.     # 清除敌人
  154.     $game_troop.enemies.clear
  155.     # 调用战斗返回调用
  156.     if $game_temp.battle_proc != nil
  157.       $game_temp.battle_proc.call(result)
  158.       $game_temp.battle_proc = nil
  159.     end
  160.     # 切换到地图画面
  161.     $scene = Scene_Map.new
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 设置战斗事件
  165.   #--------------------------------------------------------------------------
  166.   def setup_battle_event
  167.     # 正在执行战斗事件的情况下
  168.     if $game_system.battle_interpreter.running?
  169.       return
  170.     end
  171.     # 搜索全部页的战斗事件
  172.     for index in 0...$data_troops[@troop_id].pages.size
  173.       # 获取事件页
  174.       page = $data_troops[@troop_id].pages[index]
  175.       # 事件条件可以参考 c
  176.       c = page.condition
  177.       # 没有指定任何条件的情况下转到下一页
  178.       unless c.turn_valid or c.enemy_valid or
  179.              c.actor_valid or c.switch_valid
  180.         next
  181.       end
  182.       # 执行完毕的情况下转到下一页
  183.       if $game_temp.battle_event_flags[index]
  184.         next
  185.       end
  186.       # 确认回合条件
  187.       if c.turn_valid
  188.         n = $game_temp.battle_turn
  189.         a = c.turn_a
  190.         b = c.turn_b
  191.         if (b == 0 and n != a) or
  192.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  193.           next
  194.         end
  195.       end
  196.       # 确认敌人条件
  197.       if c.enemy_valid
  198.         enemy = $game_troop.enemies[c.enemy_index]
  199.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  200.           next
  201.         end
  202.       end
  203.       # 确认角色条件
  204.       if c.actor_valid
  205.         actor = $game_actors[c.actor_id]
  206.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  207.           next
  208.         end
  209.       end
  210.       # 确认开关条件
  211.       if c.switch_valid
  212.         if $game_switches[c.switch_id] == false
  213.           next
  214.         end
  215.       end
  216.       # 设置事件
  217.       $game_system.battle_interpreter.setup(page.list, 0)
  218.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  219.       if page.span <= 1
  220.         # 设置执行结束标志
  221.         $game_temp.battle_event_flags[index] = true
  222.       end
  223.       return
  224.     end
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● 刷新画面
  228.   #--------------------------------------------------------------------------
  229.   def update
  230.     # 执行战斗事件中的情况下
  231.     if $game_system.battle_interpreter.running?
  232.       # 刷新解释器
  233.       $game_system.battle_interpreter.update
  234.       # 强制行动的战斗者不存在的情况下
  235.       if $game_temp.forcing_battler == nil
  236.         # 执行战斗事件结束的情况下
  237.         unless $game_system.battle_interpreter.running?
  238.           # 继续战斗的情况下、再执行战斗事件的设置
  239.           unless judge
  240.             setup_battle_event
  241.           end
  242.         end
  243.         # 如果不是结束战斗回合的情况下
  244.         if @phase != 5
  245.           # 刷新状态窗口
  246.           @status_window.refresh
  247.         end
  248.       end
  249.     end
  250.     # 系统 (计时器)、刷新画面
  251.     $game_system.update
  252.     $game_screen.update
  253.     # 计时器为 0 的情况下
  254.     if $game_system.timer_working and $game_system.timer == 0
  255.       # 中断战斗
  256.       $game_temp.battle_abort = true
  257.     end
  258.     # 刷新窗口
  259.     @help_window.update
  260.     @party_command_window.update
  261.     @actor_command_window.update
  262.     @status_window.update
  263.     @message_window.update
  264.     # 刷新活动块
  265.     @spriteset.update
  266.     # 处理过渡中的情况下
  267.     if $game_temp.transition_processing
  268.       # 清除处理过渡中标志
  269.       $game_temp.transition_processing = false
  270.       # 执行过渡
  271.       if $game_temp.transition_name == ""
  272.         Graphics.transition(20)
  273.       else
  274.         Graphics.transition(40, "Graphics/Transitions/" +
  275.           $game_temp.transition_name)
  276.       end
  277.     end
  278.     # 显示信息窗口中的情况下
  279.     if $game_temp.message_window_showing
  280.       return
  281.     end
  282.     # 显示效果中的情况下
  283.     if @spriteset.effect?
  284.       return
  285.     end
  286.     # 游戏结束的情况下
  287.     if $game_temp.gameover
  288.       # 切换到游戏结束画面
  289.       $scene = Scene_Gameover.new
  290.       return
  291.     end
  292.     # 返回标题画面的情况下
  293.     if $game_temp.to_title
  294.       # 切换到标题画面
  295.       $scene = Scene_Title.new
  296.       return
  297.     end
  298.     # 中断战斗的情况下
  299.     if $game_temp.battle_abort
  300.       # 还原为战斗前的 BGM
  301.       $game_system.bgm_play($game_temp.map_bgm)
  302.       # 战斗结束
  303.       battle_end(1)
  304.       return
  305.     end
  306.     # 等待中的情况下
  307.     if @wait_count > 0
  308.       # 减少等待计数
  309.       @wait_count -= 1
  310.       return
  311.     end
  312.     # 强制行动的角色存在、
  313.     # 并且战斗事件正在执行的情况下
  314.     if $game_temp.forcing_battler == nil and
  315.        $game_system.battle_interpreter.running?
  316.       return
  317.     end
  318.     # 回合分支
  319.     case @phase
  320.     when 1  # 自由战斗回合
  321.       update_phase1
  322.     when 2  # 同伴命令回合
  323.       update_phase2
  324.     when 3  # 角色命令回合
  325.       update_phase3
  326.     when 4  # 主回合
  327.       update_phase4
  328.     when 5  # 战斗结束回合
  329.       update_phase5
  330.     end
  331.   end
  332. end
复制代码



再把 Window_BattleStatus 修改  这个脚本用下面的覆盖掉.   然后 TP_SHOW_TIME = 4  #动态槽帧数 这里设置动态槽帧数, 帧数任意, 但是要注意TP槽和水晶槽帧数要一致.

  1. TP_SHOW_TIME = 4  #动态槽帧数

  2. #==============================================================================
  3. # ■ Window_BattleStatus
  4. #------------------------------------------------------------------------------
  5. #  显示战斗画面同伴状态的窗口。
  6. #==============================================================================

  7. class Window_BattleStatus < Window_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(-16, 304, 672, 192)
  13.     self.contents = Bitmap.new(width - 32, height - 32)
  14.     @level_up_flags = [false, false, false, false]
  15.     self.opacity = 0
  16.     refresh
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 释放
  20.   #--------------------------------------------------------------------------
  21.   def dispose
  22.     super
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 设置升级标志
  26.   #     actor_index : 角色索引
  27.   #--------------------------------------------------------------------------
  28.   def level_up(actor_index)
  29.     @level_up_flags[actor_index] = true
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 刷新
  33.   #--------------------------------------------------------------------------
  34.   def refresh
  35.     self.contents.clear
  36.     @item_max = $game_party.actors.size
  37.     for i in 0...$game_party.actors.size
  38.       actor = $game_party.actors[i]
  39.       actor_x = i * 160
  40.       if actor.hp <= 0
  41.         a = actor.id.to_s + "_dead"
  42.       else
  43.         a = actor.id.to_s + "_head"
  44.       end
  45.       添图片(a,actor_x+1,0)
  46.       添图片(actor.id.to_s + "_name", actor_x+65, 15)
  47.       添槽("HP血条",actor.hp,actor.maxhp,actor_x+83,58)
  48.       添槽("SP血条",actor.sp,actor.maxsp,actor_x+83,74)
  49.       添字(actor.hp.to_s,actor_x+81,48,2,20,72,16)
  50.       添字(actor.sp.to_s,actor_x+81,66,2,20,72,16)
  51.       if @level_up_flags[i]
  52.         添字("升级",actor_x+22,120,1,22,116,32)
  53.       else
  54.         draw_actor_state(actor, actor_x+22, 120)
  55.       end
  56.       if $game_switches[TP_VISIBLE]
  57.       a = $game_variables[MAX_TP_ID][actor.id] != nil ? $game_variables[MAX_TP_ID][actor.id] : 0
  58.       添图片("动态TP条空",actor_x+50,98) if not ZERO_TP
  59.       添图片("动态水晶空"+a.to_s,actor_x+6+(3-a)*13,97) if a != 0
  60.       end
  61.     end
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 刷新画面
  65.   #--------------------------------------------------------------------------
  66.   def update
  67.     super
  68.     # 主界面的不透明度下降
  69.     if $game_temp.battle_main_phase
  70.       self.contents_opacity -= 4 if self.contents_opacity > 191
  71.     else
  72.       self.contents_opacity += 4 if self.contents_opacity < 255
  73.     end
  74.   end
  75. end

  76. class Window_tpshow < Window_Base
  77.   #--------------------------------------------------------------------------
  78.   # ● 初始化窗口
  79.   #--------------------------------------------------------------------------
  80.   def initialize
  81.     super(-16,304, 672, 192)
  82.     self.contents = Bitmap.new(width - 32, height - 32)
  83.     @bar_show = 0
  84.     self.opacity = 0
  85.     refresh
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 刷新
  89.   #--------------------------------------------------------------------------
  90.   def refresh
  91.     self.contents.clear
  92.     for i in 0...$game_party.actors.size
  93.      actor = $game_party.actors[i]
  94.      a = $game_variables[MAX_TP_ID][actor.id] != nil ? $game_variables[MAX_TP_ID][actor.id] : 0
  95.      添动槽("动态TP条",actor.tp%1000,1000,i+50,98) if not ZERO_TP
  96.      添动槽("动态水晶"+a.to_s,actor.tp/1000,a,i+6+(3-a)*13,97) if a != 0
  97.     end
  98.   end
  99.   def 添动槽(bar,up,down,x,y)
  100.     bitmap = RPG::Cache.windowskin(bar)
  101.     cw = bitmap.width
  102.     ch = bitmap.height / TP_SHOW_TIME
  103.     n = up.to_f / down
  104.     src_rect = Rect.new(0, @bar_show * ch , cw * n, ch)
  105.     self.contents.blt(x,y, bitmap, src_rect)
  106.   end
  107.   def update
  108.     @bar_show += 1
  109.     @bar_show = 0 if @bar_show >= TP_SHOW_TIME
  110.     refresh
  111.   end
  112. end
复制代码


动态条素材规格.rar (6.92 KB, 下载次数: 73)

注意,动态槽和槽底部在不同的地方描绘,(为了省FPS), 不会改的话就按我起的名字换素材就好 , 素材大小不受底图限制, 可以使用的面积和战斗状态窗口一样大

所以画在框外燃烧的火焰效果也可以(然而之后要慢慢调好坐标和底槽重合=3=)   水晶槽注意 1,2,3个豆子的图要按  1倍宽,2倍宽,3倍宽 来画
作者: soulsaga    时间: 2018-5-24 22:02
还原度一般..

灵梦假.png (57.05 KB, 下载次数: 39)

灵梦假.png

作者: 灯笼菜刀王    时间: 2018-5-25 00:10
搞完那堆脚本山之后,看咱的工程脚本, 好清爽好可爱.......


作者: 89444640    时间: 2018-5-25 07:25
灯笼菜刀王 发表于 2018-5-24 21:56
动态槽搞定~~   分两个脚本替换掉就OK.

动态槽为竖向排列N祯的图片, N任意.  最后一祯之后会循 ...

测试汇报

我现改怒气槽去
作者: 89444640    时间: 2018-5-25 11:26
89444640 发表于 2018-5-25 07:25
测试汇报

我现改怒气槽去

更新Scene_Battle 1
重新搜索 tp_show
46 @tp_show = Window_tpshow.new if $game_switches[TP_VISIBLE]
68 @tp_show.update if tp_show != nil
86 @tp_show.dispose if tp_show != nil
没了
跳出位置还是68行。

作者: 灯笼菜刀王    时间: 2018-5-25 12:06
本帖最后由 灯笼菜刀王 于 2018-5-25 12:09 编辑
89444640 发表于 2018-5-25 11:26
更新Scene_Battle 1
重新搜索 tp_show
46 @tp_show = Window_tpshow.new if $game_switches[TP_VISIBLE]


,其他人不显示是因为忘记乘160了... 给i后面加上 *160就OK

添动槽("动态TP条",actor.tp%1000,1000,i*160+50,98) if not ZERO_TP
添动槽("动态水晶"+a.to_s,actor.tp/1000,a,i*160+6+(3-a)*13,97) if a != 0

偏一点也是因为这个i变成增加X N点像素的缘故, 现在调Y就正常了(蓝色就是动槽的Y), 底槽和动态槽的图片在不同的地方,看汉字应该知道吧
作者: 89444640    时间: 2018-5-25 14:20
本帖最后由 89444640 于 2018-5-25 15:01 编辑
灯笼菜刀王 发表于 2018-5-25 12:06
,其他人不显示是因为忘记乘160了... 给i后面加上 *160就OK

添动槽("动态TP条",actor.tp%1000, ...




上面为显示效果,
下面为我想要的效果。怎么调一下呢?歪了这个我调过来了但是遮挡,我想让它跟调好的HP MP一样槽遮挡,那两个我是改了图像长宽了。
但是这个,我直接把动态TP低槽图像长宽各增加2也不行,外框总是被能量遮挡。
动态槽由于箭头的关系,宽度再缩小不好看了。而且这长度是数好了,13*8,正好循环过来,缩小了没无缝法循环了。

果然刚才被人搅和的智商又变低了,没改X数值,我说怎么左右两侧老对不上
反馈一下,现在显示完美了,顺手修了个圆角


继续下一个课题,怎么给角色替换状态用半身像。主角目前三套战斗用的衣服,还非常蛋疼的想加一身白色连衣裙--b。其他角色,暂且不考虑更换头像问题。
推荐在游戏中以变量进行设置,在用变量记录主角在更衣室更换的衣服时顺道更改角色此衣服对应的图像,未设置时候用默认1号的头像。
然后我试了一下当年街霸的感觉,战败时候头像会显得被打的很惨的样子XD
真有乐趣XD
ps,那个领口我死活倒不过来正常角度了,回头慢慢改
正常

战斗不能


然后,是不是咱们应该再来个眨眼动画?反正这个眨眼特别好画,每个角色3帧足矣,但是会显得很生动XD,眨眼时间是随机数,最长N秒,战斗不能时候取消眨眼动画。

进攻时候更换动作表情和受创时候的表情这个,我虽然觉得不难实现,但是有点没必要了,战斗的注意力应该在上面人物动作而不是下面的头像,下面做动作的那是RM默认竖版战斗方式。人物出招更换一个出招表情可以出所有招式那种,做这个还用全动画脚本干嘛--b直接就cg包揽一切了。
作者: 灯笼菜刀王    时间: 2018-5-25 15:29
本帖最后由 灯笼菜刀王 于 2018-5-25 15:48 编辑
89444640 发表于 2018-5-25 14:20
上面为显示效果,
下面为我想要的效果。怎么调一下呢?歪了这个我调过来了但是遮挡,我想让它跟调好的H ...


你那些脑洞,咱现在给的功能已经足够实现。咱要做出来是很容易啦,不过这个课题就留给你自己研究,以后想加什么东西才能为所欲为

给你个提示
1,用变量换头像。 描绘头像原理你知道了, 添图片(a,actor_x+1,0) 这个a就是上面公式获得的“文件名称” 目前采用的是,角色id+固定后缀,来获得头像名称。

if actor.hp <= 0  #当角色的HP 小于等于0的时候
    a = actor.id.to_s + "_dead   #a的名称
else #除此以外
    a = actor.id.to_s + "_head"   #a的名称
end

所以,只要让这个a成为你想要的文件名称,那就是换头像成功。

你只要让主角换头像,大可让这个a直接成为你要的文件名。游戏流程能直接操作的方法,最简单的自然就是全局变量了。所以,就再加个分歧

if actor.id == 1  #当角色的ID等于1的时候
  if actor.hp <= 0
   a = $game_variables[编号].to_s + "_dead"
else
   a = $game_variables[编号].to_s + "_head"  
end
else
  if actor.hp <= 0  #当角色的HP 小于等于0的时候
    a = actor.id.to_s + "_dead"   #a的名称
else #除此以外
    a = actor.id.to_s + "_head"   #a的名称
end
end

这样,主角的头像就由 N号变量+ 后缀 来控制了,然后流程里改变这个变量的值,就达到换装的效果了。

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

然后眨眼。

咱给的刷新窗口是"覆盖整个战斗状态栏的" ,也就是说,想要的话,你都可以让它们全部动态(只要FPS受得住=。=)

只要在动态血条的那个窗口,相应坐标上加上动态图层就可以,添动槽(bar,up,down,x,y)  up和down都填1,那就不会有槽的效果,而且槽的长宽咱是没限制的哦,可以直接当一个循环帧图片使用,这样就知道怎么实现咋眼之类的动作了吧?

默认的是共用一个帧指数,需要不同帧,大可把方法复制一份,把 TP_SHOW_TIME 换成别的数字就可以用别的帧指数了(TP_SHOW_TIME有两个地方,搜索下可以找到,一起换掉)
作者: 89444640    时间: 2018-5-25 17:02
本帖最后由 89444640 于 2018-5-25 17:07 编辑

  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors
      actor_x = i * 160
  if actor.id == 1  #当角色的ID等于1的时候
  if actor.hp <= 0
   a = $game_variables[216].to_s + "dead"
   #216号变量编号控制头像,长袖校服变量99 巫女服变量98 变量数值等于素材编号
else
   a = $game_variables[216].to_s + "head"#216号变量编号控制头像
end
else
  if actor.hp <= 0  #当其他角色的HP 小于等于0的时候
    a = actor.id.to_s + "_dead"   #a的名称
else #除此以外
    a = actor.id.to_s + "_head"   #a的名称
end
end

代入变量216 数值为99
素材名称
99_head

跳出对话框
找不到99head
怀疑少了个下划线?尝试加一个。

果然……应该是  _head
现在成功显示半袖,长袖,回家画巫女服去XD
然后……需要一片半身头像……全体先锋公主风吧XD,像素相对容易控制风格统一。
作者: 89444640    时间: 2018-5-25 20:44

更新了一下妖梦的半身像……这回应该好多了……配色是先锋公主的,不过这胸怎么画成平的?
妖梦不应该有胸的……
还有帕秋莉有现成的,其他的角色的………慢慢补吧……
作者: soulsaga    时间: 2018-5-25 23:08
本帖最后由 soulsaga 于 2018-5-25 23:10 编辑

战斗报告提示脚本真不错啊..

FMBS1.png (323.24 KB, 下载次数: 36)

FMBS1.png

FMBS2.png (552.42 KB, 下载次数: 31)

FMBS2.png

FMBS3.png (548.59 KB, 下载次数: 28)

FMBS3.png

FMBS4.png (391.25 KB, 下载次数: 30)

FMBS4.png

作者: Tsar_NicholasII    时间: 2018-6-13 11:27
楼上一堆4级dalao




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1