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

Project1

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

[已经解决] 请教写事件时,如何实现指定队列人物随机学习到技能?

[复制链接]

Lv2.观梦者

梦石
0
星屑
723
在线时间
530 小时
注册时间
2010-6-9
帖子
840
跳转到指定楼层
1
发表于 2016-3-10 19:44:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
实话,标题还是被吃了好,不知道怎么表达。下边才是详细的:
请教写事件时,如何实现指定队列人物随机学习到指定范围内的技能?
举个栗子:
事件设置中设置选择分支:
#1重置1号位                                    #排在队列中一号位(不一定是数据库ID为1)的队员,
更改队伍成员:移除 二狗
更改队伍成员:添加 二狗(初始化) #实现了二狗的初始化
增减技能 二狗,+狂吼                      #这个是重点要解决的问题,如何学习到指定范围内的技能,例如某个范围(1到15这些技能中任学两个、三个、或四个,如此。)
#2重置2号位
#3重置3号位
#4重置4号位
#5...
#6...

Lv2.观梦者

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
帖子
873
2
发表于 2016-3-10 20:37:15 | 只看该作者
假如要學十個隨機技能
變量1~10

變量等於1時學A

=2 學B

如此類推
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
帖子
219
3
发表于 2016-3-10 21:14:27 | 只看该作者
本帖最后由 andrewx 于 2016-3-10 21:56 编辑

事件里执行脚本:
JAVASCRIPT 代码复制
  1. var actorId = 1, lowerBound = 1, upperBound = 15, learnNum = 4;
  2. //修改以上参数,分别是角色ID,最小技能ID,最大技能ID,学习个数
  3. var actor = $gameActors.actor(actorId);
  4. var unlearned = 0; for (var i = lowerBound; i <= upperBound; i++) {if (!actor.isLearnedSkill(i)) {unlearned++;}}
  5. if (unlearned <= learnNum) {for (var i = lowerBound; i <= upperBound; i++) {actor.learnSkill(i);}} else {for (var i = 0; i < learnNum; i++) {while (true) {var skillId = Math.floor(Math.random() * (upperBound - lowerBound + 1) + lowerBound);if (!actor.isLearnedSkill(skillId)) {actor.learnSkill(skillId);break;}}}}

或者:
JAVASCRIPT 代码复制
  1. var memberIndex = 0, lowerBound = 1, upperBound = 15, learnNum = 4;
  2. //修改以上参数,分别是队列index,最小技能ID,最大技能ID,学习个数
  3. var actor = $gameParty.members()[memberIndex];
  4. var unlearned = 0; for (var i = lowerBound; i <= upperBound; i++) {if (!actor.isLearnedSkill(i)) {unlearned++;}}
  5. if (unlearned <= learnNum) {for (var i = lowerBound; i <= upperBound; i++) {actor.learnSkill(i);}} else {for (var i = 0; i < learnNum; i++) {while (true) {var skillId = Math.floor(Math.random() * (upperBound - lowerBound + 1) + lowerBound);if (!actor.isLearnedSkill(skillId)) {actor.learnSkill(skillId);break;}}}}

第二种是按队列位置,注意index从0开始,即第一个队员index=0

未详细测试,如果指定范围内未学技能数量小于等于学习个数,则强制学习未学的全部技能。其他情况随机在未习得技能里学习指定个数技能,不过这随机的效率很差。
扔完就跑,你问我为啥不换行?谁让编辑器只能写12行呢wwwww

点评

嚯嚯嚯~感谢感谢,已验证成功。认可答案。  发表于 2016-3-10 22:25
我用起来是这样的,而且并不能拆分到两个命令来写。所以只适合做些很简单的东西  发表于 2016-3-10 22:22
QQQ  发表于 2016-3-10 22:19
说起来,编辑器只能 12 行吗?没怎么用编辑器试过..  发表于 2016-3-10 22:16
因为懒[笑]。。。写插件要写好多多余的东西。。。还要写备注文档好麻烦。。。楼主也说要事件里随用随扔嘛[借口]  发表于 2016-3-10 22:02

评分

参与人数 1星屑 +30 收起 理由
负零 + 30 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
81 小时
注册时间
2016-1-6
帖子
150
4
发表于 2016-3-10 22:11:52 | 只看该作者
大概写了一下,细节上还不完善,你试试看,我是建立一个事件,然后选择肢选择队员,把队员编号放进20号变量,然后再调用公共事件,事件代码在下面,为了方便查看,每句都写的很短


  1. var actorid=parseInt($gameVariables.value(20))//把20号变量放入自定义变量actorid,这是为了方便楼主阅读
  2. var skillnum=Math.floor(Math.random()*3)+2;//随机人物可获得2-4个技能
  3. var skillid;//自定义变量,下面要用
  4. for(var x=1;x<=skillnum;x++){
  5.     skillid=Math.floor(Math.random()*10)+11;
  6.     $gameActors.actor(actorid).learnSkill(skillid);//循环一次增加一个技能,因为有可能重复,所以实际人物可能得到的技能数量是1-4个,这个你自己完善一下
  7. };
复制代码

点评

认可两个答案,各有优点。可行?  发表于 2016-3-10 22:35
感谢,我抱走学习去了。  发表于 2016-3-10 22:26
我怎么就忘了公共事件!感谢  发表于 2016-3-10 22:17

评分

参与人数 1星屑 +30 收起 理由
负零 + 30 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
5
发表于 2016-3-10 22:29:16 | 只看该作者
andrewx 发表于 2016-3-10 21:14
事件里执行脚本:

var actorId = 1, lowerBound = 1, upperBound = 15, learnNum = 4;

  1. //事件里执行脚本的增强,应该可以用吧 ,保存成插件用就好.....
  2. Game_Interpreter.prototype.command355 = function() {
  3.     var script = this.currentCommand().parameters[0] + '\n';
  4.     while (this.nextEventCode() === 655  || this.nextEventCode() === 355) {
  5.         this._index++;
  6.         script += this.currentCommand().parameters[0] + '\n';
  7.     }
  8.     eval(script);
  9.     return true;
  10. };
复制代码

点评

赞,都没想到还可以这么玩儿。果然我是个安于现状的人233收藏备用噜  发表于 2016-3-10 22:34
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 00:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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