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

Project1

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

[有事请教] 判定隊伍中某項數值最高的人物 (已解決)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
244
在线时间
23 小时
注册时间
2017-11-10
帖子
12
跳转到指定楼层
1
发表于 2017-12-21 22:02:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 yamatonadesiko0 于 2017-12-23 22:47 编辑

如題,想寫一個事件由成員中幸運最高的一位發言,但是要判定隊伍中誰的幸運最高,我只想到可以用事件比較變量大小,步驟實在太多,不知道有沒有簡單一點的寫法?

Lv2.观梦者

梦石
0
星屑
352
在线时间
377 小时
注册时间
2013-1-30
帖子
219
2
发表于 2017-12-22 00:16:38 | 只看该作者
这是个死办法,要取巧也没办法简化太多,仅提供下个人的思路
假设你的队伍只有四个人(更多人的话还是同样的方法,只不过工作量更大)
如果1号角色的幸运≥2号角色且≥3号角色且≥4号角色,那么1号角色发言,否则分歧一下,让2号角色来比较是不是最大,否则再分歧一下,让三号角色来比较是不是最大,否则就4号角色发言
这个办法需要分歧三轮。
当然,你的队伍不一定是四个人,假设是n个人(n≥2),那么这个方法需要分歧(n-1)轮,使用2n个临时变量(一个变量储存角色的ID值、一个变量储存角色的幸运值),不需要开关,总的来说还是比较简单的(大概)

也许你知道了,但还是附带一下你会用到的脚本写法:
令变量1等于“游戏数据”第1个成员的角色ID,然后变量2等于脚本“$gameActors.actor($gameVariables.value(1)).luk”(1号变量ID角色的幸运值)
要发言时,对话框中
\P[1]  显示出队伍第一个角色的名字
同理
\P[2]  显示出队伍第二个角色的名字

最后,因为还是不知道你队伍中会有几个人,所以别忘了计算一下队伍人数,别分歧到不存在的队友身上去了(比如说你队伍中只有三个人,你却用脚本储存第四个人的幸运值有多少,那就可能令游戏报错)
回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
244
在线时间
23 小时
注册时间
2017-11-10
帖子
12
3
 楼主| 发表于 2017-12-22 03:24:36 | 只看该作者
qknight 发表于 2017-12-22 00:16
这是个死办法,要取巧也没办法简化太多,仅提供下个人的思路
假设你的队伍只有四个人(更多人的话还是同样 ...

看來也只能先這樣寫了,頭疼啊
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33525
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

4
发表于 2017-12-22 09:01:53 | 只看该作者
  1. var data = $gameParty.members().map(function(a){return a.luk;});
  2. var max = Math.max.apply(Math, data);
  3. var index = data.indexOf(max);
复制代码


这个 index 就是幸运最高的角色在队伍中的序号

点评

太感謝了!  发表于 2017-12-22 22:44
高效精简!赞  发表于 2017-12-22 09:50

评分

参与人数 1+1 收起 理由
yamatonadesiko0 + 1

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 2 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
244
在线时间
23 小时
注册时间
2017-11-10
帖子
12
5
 楼主| 发表于 2017-12-23 01:00:04 | 只看该作者
芯☆淡茹水 发表于 2017-12-22 09:01
这个 index 就是幸运最高的角色在队伍中的序号

再請教一下,我想把index當作2號變數運用,腳本內這樣寫:
$gameVariables.value(2) += index
似乎不行,該如何改寫是好?

点评

再次感謝!  发表于 2017-12-23 15:41
$gameVariables.setValue(2, index);  发表于 2017-12-23 08:23
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
244
在线时间
23 小时
注册时间
2017-11-10
帖子
12
6
 楼主| 发表于 2017-12-23 17:39:04 | 只看该作者
@芯☆淡茹水 @全世界
唉...果然實際動手後發現許多之前沒想過的問題...
根據之前說的,實際執行發現如果有兩個以上隊員運氣數值相同時就會回傳0作為結果,所以我試著改寫了一下:
  1. var data = $gameParty.members().map(function(a){return a.luk;});
  2. var result = data.filter(function(element, index, arr){return arr.indexOf(element) === index;});
  3. alert(result)
  4. var max = Math.max.apply(Math, result);
  5. alert(max)
  6. var index = data.indexOf(max);
  7. alert(index)
  8. $gameVariables.setValue(2, index);
复制代码

得到的結果是(28,40,38,40)、(40)、(1)
似乎是在把(40)這個數值還原成隊員序號的時候出了問題,有可能實現在兩個或兩個以上數值相同的隊員中選出一個嗎?

点评

数值相同默认取靠前面的。如果要选择,那你得先做一个角色选择窗口。  发表于 2017-12-23 19:55
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33525
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

7
发表于 2017-12-23 20:03:57 | 只看该作者
本帖最后由 芯☆淡茹水 于 2017-12-23 20:08 编辑

var data = $gameParty.members().map(function(a){return a.luk;});
var max = Math.max.apply(Math, data);
var result =  $gameParty.members().filter(function(a){return a.luk == max;});

这个 result  数组里面就包含所有幸运最大的角色,是 Game_Actor 对象。
如果 result.length == 1 就只有一个,  result.length > 1 就是多个,具体怎么选可以用这个  result 数组去操作

点评

備註一下,得出來的result是$gameActors.actor(x)的形式。目前順利投入運作當中,再次感謝前輩!  发表于 2017-12-23 22:40
理解,感謝您!  发表于 2017-12-23 20:27

评分

参与人数 1+1 收起 理由
yamatonadesiko0 + 1

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 2 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-5 10:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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