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

Project1

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

[已经解决] 制作强化装备某一属性的技能

[复制链接]

Lv1.梦旅人

梦石
0
星屑
158
在线时间
69 小时
注册时间
2014-12-19
帖子
25
跳转到指定楼层
1
发表于 2015-1-14 01:16:40 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
譬如我想设计个技能叫【盾牌专精】,效果是提升盾牌附加防御力的10%,而不是固定的防御数值或者与自身防御力挂钩的百分比数值。
我知道这个用脚本应该挺容易实现的,但是自己不懂,也没搜到相关的,求大神解惑。

评分

参与人数 1星屑 +10 收起 理由
chd114 + 10 你也看刀塔死亡学院?

查看全部评分

Lv1.梦旅人

梦石
0
星屑
158
在线时间
69 小时
注册时间
2014-12-19
帖子
25
8
 楼主| 发表于 2015-1-18 16:54:03 | 只看该作者
本帖最后由 黑曜秘法 于 2015-1-18 17:27 编辑
chd114 发表于 2015-1-17 16:54
按照taroxd的思路做的,这个只针对已经学会146号技能的角色身上的1号类型的装备(盾牌,0为武器)加的物理 ...


RUBY 代码复制
  1. class Game_Actor              #定义类
  2.   alias_method :c4_20150117, :param_plus
  3.   def param_plus(id)      
  4.     old = c4_20150117(id)     
  5.     for i in 0...equips.size  #把0到(装备数量-1,for in后两数之间三个点)的数一一代入循环
  6.       if equips[i]!=nil       #第一个判断,若某部位的装备不为(逻辑判断)空
  7.         if id == 3            #第二个判断,若属性对应id全等于(逻辑判断)3(物理防御,不为时可自行编辑)
  8.           if skill?(146)      #第三个判断,若第146号技能(自行编辑)已习得(这里省略“==true”)
  9.             old+=equips[i].params[3]/10 if equips[i].etype_id==1   
  10.             #old(属性加成量)加上equips[i].params[3]/10 (某装备的对应属性加成量除以10,公式可自行编辑)
  11.             #第四个判断,若装备的编号为1(1是盾牌,不为盾牌时可自行编辑)时
  12.           end
  13.         end
  14.       end
  15.     end
  16.     old  
  17.   end
  18. end


非常感谢!你的脚本我完全理解了,不仅为我解决了脚本本身的问题,对我的理解学习帮助也非常大。
或许也会有和我一样的新手戳进我的提问帖,所以我把脚本自己添加了作为新手的理解注释,如果有偏差请你指出。

@taroxd  谢谢指出,为了避免误导,还是把你说的那几行注释删了 。确实你在沙发楼的回复没有用到循环,unless直接把非指定(装备、属性)的id排除了,因此只需要判断一次就出结果,楼上给我写好了访问需要数值的语法,我会自己改改看的。
嗯,等有时间,我一定会再仔细学学的,太励志了。

点评

看你的注释,你没有理解这段代码中的第 2、3、4、16 行。想要学脚本的话,再加把油吧。  发表于 2015-1-18 17:02
我在沙发写的可根本没有用到循环的说~  发表于 2015-1-18 16:58
看你的注释,似乎你没有完全理解呢- - 而且根本不需要循环,总之楼上这段脚本没用的部分太多了- -  发表于 2015-1-18 16:56
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

7
发表于 2015-1-17 16:54:10 | 只看该作者
  1. class Game_Actor
  2.   alias_method :c4_20150117, :param_plus
  3.   def param_plus(id)
  4.     old = c4_20150117(id)
  5.     for i in 0...equips.size
  6.       if equips[i]!=nil
  7.         if id == 3#物理防御
  8.           if skill?(146)#盾牌专精
  9.             old+=equips[i].params[3]/10 if equips[i].etype_id==1
  10.           end
  11.         end
  12.       end
  13.     end
  14.     old
  15.   end
  16. end
复制代码
按照taroxd的思路做的,这个只针对已经学会146号技能的角色身上的1号类型的装备(盾牌,0为武器)加的物理防御(params[3]为物理防御)
需要使用这里的https://rpg.blue/thread-365967-1-1.html脚本

或者添加一小段
  1. class Game_Battler < Game_BattlerBase
  2. def skills
  3.     (basic_skills | added_skills).sort.map {|id| $data_skills[id] }
  4.   end
  5. end
复制代码

评分

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

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2009-7-17
帖子
139
6
发表于 2015-1-17 14:19:00 | 只看该作者
回答一个不算回答的回答,可以这样判断,如果某个角色拥有盾牌专精的技能,那么当他装备盾牌类装备时,防御力上升x%,这个还是很好实现的,用到的语句也不多,楼主可以参考下,恕本人脚本渣,只能想到这个愚笨的不是办法的办法

点评

谢谢解答,你的思路我明白了,不过我是脚本和语法苦手所以没能自行解决。不过现在已经搞定了,楼下。  发表于 2015-1-18 16:59
额,不好意思,没仔细看,请大大见谅。  发表于 2015-1-17 15:55
这不就是我在沙发所做的事情吗?  发表于 2015-1-17 15:00
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
158
在线时间
69 小时
注册时间
2014-12-19
帖子
25
5
 楼主| 发表于 2015-1-15 23:21:15 | 只看该作者
到此为止了吧,思路我知道了。版主请结帖。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
158
在线时间
69 小时
注册时间
2014-12-19
帖子
25
4
 楼主| 发表于 2015-1-15 00:09:29 | 只看该作者
@chd114 不啊,我随便起了个ID,不过你这么说还确实有点像“黑鸟出秘法鞋”的意思。
@三途亚梦 嗯,我现在是反应过来了,“装备了盾牌”和“盾牌防御力”只是概念上的解释,不是脚本语言本身。
照这个思路我继续学学看吧,先等等看还有没有其他回复,明晚再找版主结帖。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
158
在线时间
69 小时
注册时间
2014-12-19
帖子
25
3
 楼主| 发表于 2015-1-14 17:32:32 | 只看该作者
taroxd 发表于 2015-1-14 12:48
你为什么会产生这个挺容易实现的错觉(虽然我承认不难)- - 要实现的话得破坏原来计算属性的统一方法了

就 ...

哈哈,毕竟不甘心一直都做事件党啊,脚本尝试了解但是不专心的话看不懂。
我只知道要先定义类和方法,但是具体怎么调用数据的方法就不知道了。
你的解答我能看懂1、5、6、7行,先定义Game_Actor的类(其实也不是很懂,这个不是原系统已经有定义了吗,再定义一次无法理解);再定义param_plus的方法(这个我知道,是增加常规属性的方法),设置一个仅在此脚本中生效的变量,然后把变量赋值(unless分歧条件首先判断装备附加的属性是不是等于我们技能的对应属性,再判断有没有学习专精技能和装备盾牌)。
不过其余的我有疑问啊,“装备了盾牌”和“盾牌防御力”我用Ctrl+Shift+F查了一下没有定义过,复制脚本之后运行游戏也果然报错。
我知道这个问题对于你而言肯定就像要耐心解释1+1=2一样,不过请原谅我不懂脚本。

点评

这个不是再定义而是添加···  发表于 2015-1-17 13:28
TD触只是给你提供了思路,想要脱离纯事件得从脚本基础学起哦~  发表于 2015-1-14 19:41
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

2
发表于 2015-1-14 12:48:00 | 只看该作者
你为什么会产生这个挺容易实现的错觉(虽然我承认不难)- - 要实现的话得破坏原来计算属性的统一方法了

就思路而言大致是这样的:
RUBY 代码复制
  1. class Game_Actor
  2.  
  3.   alias_method :pp_20150114, :param_plus
  4.  
  5.   def param_plus(id)
  6.     old = pp_20150114(id)
  7.     return old unless id == 对应防御力的id
  8.     return old unless skill_learn?($data_skills[技能的id])
  9.     return old unless 装备了盾牌?
  10.     old + 盾牌防御力 / 10
  11.   end
  12. end

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 17:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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