查看: 3676|回复: 13

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

[复制链接]
梦石
0
星屑
244
在线时间
23 小时
注册时间
2017-11-10
回帖
11
发表于 2017-12-21 22:02:42 | 显示全部楼层 |阅读模式

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

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

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

如題,想寫一個事件由成員中幸運最高的一位發言,但是要判定隊伍中誰的幸運最高,我只想到可以用事件比較變量大小,步驟實在太多,不知道有沒有簡單一點的寫法?
梦石
0
星屑
342
在线时间
377 小时
注册时间
2013-1-30
回帖
162
发表于 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

使用道具 举报

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

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

使用道具 举报

梦石
0
星屑
34462
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 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

使用道具 举报

梦石
0
星屑
244
在线时间
23 小时
注册时间
2017-11-10
回帖
11
 楼主| 发表于 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
回复

使用道具 举报

梦石
0
星屑
244
在线时间
23 小时
注册时间
2017-11-10
回帖
11
 楼主| 发表于 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
回复

使用道具 举报

梦石
0
星屑
34462
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部