切换风格

默认晚霞 雪山 粉色心情 伦敦 花卉 绿野仙踪 加州 白云 星空 薰衣草 城市 简约黑色 龙珠
回复 9

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

[1.12.2]一个有点low,但不失实用的随机物品属性脚本[复制链接]
发表于 2019-4-29 17:46:07 | 显示全部楼层 |阅读模式

请注册论坛会员,已便查看高清图片!

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

x
本帖最后由 fankieqiu 于 2019-4-29 17:52 编辑

大家好我是白嫖怪Fankie,本lowb又来厚颜无耻发教程了。我写的脚本其实都比较简单,主要是介绍制作思路。
这次为大家带来的是一个“三随”脚本。
何为“三随”?意思是:随机属性个数,随机属性内容,随机属性数值。
举个例子,同一个怪掉落的同一种装备,它的属性可以为:
1.
直接伤害:15%
AoE 伤害:20%


2.
PvP 伤害:40%
命中几率:30%
暴击几率:12%


3.
直接伤害:21%
暴击几率:17%
命中几率:22%
暴击伤害:5x
吸血:7%


这样做的目的是什么呢?大量增加了物品属性的随机性。为了得到一件拥有更多属性条数,更好的属性内容(有些属性是垃圾属性),更高的属性数值,玩家必须大量地刷刷刷!


是不是觉得很有趣!(不)
那就请接着往下看


声明:
  • 你不能转载本帖。
  • 你不能声称作者是自己。

评分

参与人数 2人气 +3 钻石粒 +20 收起 理由
小坤 + 1 所以,这是随机lore还是随机属性 但我也赞一.
Guai_Shou + 2 + 20 赞一个!

查看全部评分

回复

使用道具 举报

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

发表于 2019-4-29 17:50:13 | 显示全部楼层
这次的教程以木剑为例,先写下基础的物品脚本。为了方便测试,我们先写成右键npc即掉落木剑。
  1. function interact(e){
  2. var drops=e.npc.getWorld().createItem("minecraft:wooden_sword",0,1)
  3. e.npc.dropItem(drops)
  4. }
复制代码
好了,我们来测试一下,右键这个npc,他会掉落木剑吗?
0.png
测试成功!这是一把普通的木剑。
回复

使用道具 举报

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

发表于 2019-4-29 17:51:45 | 显示全部楼层
本帖最后由 fankieqiu 于 2019-4-29 18:04 编辑

好了,接着我们要在这把大保健上做文章了。很多人做装备属性的时候都喜欢写上骚气的lore,我也不例外
我先写好一个自己喜欢的格式 2.png
水平有限,大家将就着看吧...

这段lore是这样写的(请勿抄袭哦):
"§5类型:§f武器  §5稀有度:§fN",
"§5元素:§f无",
"§4—§e—§2—§9—§5—§6†属性†§5—§9—§2—§e—§4—",
"§4—§e—§2—§9—§5—§6†描述†§5—§9—§2—§e—§4—",
"§3初心者常常使用的木剑",
"§3虽然不厉害,但是却非常耐用"


我们把这段骚气的lore加在木剑上:
  1. function interact(e){
  2. var drops=e.npc.getWorld().createItem("minecraft:wooden_sword",0,1)
  3. var lorearr=[
  4. "§5类型:§f武器  §5稀有度:§fN",
  5. "§5元素:§f无",
  6. "§4—§e—§2—§9—§5—§6†属性†§5—§9—§2—§e—§4—",
  7. "§4—§e—§2—§9—§5—§6†描述†§5—§9—§2—§e—§4—",
  8. "§3初心者常常使用的木剑",
  9. "§3虽然不厉害,但是却非常耐用"
  10. ]
  11. drops.setLore(lorearr)
  12. e.npc.dropItem(drops)
  13. }
复制代码


回复

使用道具 举报

20

主题

33

帖子

1323

积分

萌新

Rank: 10Rank: 10Rank: 10

积分
1323
人气
2 点
钻石粒
1993 粒
贡献
10 点
论坛币
160 个
爱心
30 点

论坛注册会员

发表于 2019-4-29 18:00:55 | 显示全部楼层
前排围观,支持一波~~~
回复

使用道具 举报

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

发表于 2019-4-29 18:05:13 | 显示全部楼层
Guai_Shou 发表于 2019-4-29 18:00
前排围观,支持一波~~~

慌了,版主大佬出现
回复

使用道具 举报

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

发表于 2019-4-29 18:10:19 | 显示全部楼层
本帖最后由 fankieqiu 于 2019-4-29 18:17 编辑

继续,我希望在脚本自己会搜索“属性”这行的位置,并在下面加上属性
那要怎么搜索呢?我们可以看出来,这堆lore其实是数组,我们要用indexOf去搜索某个元素在数组中的位置
  1. function interact(e){
  2. var drops=e.npc.getWorld().createItem("minecraft:wooden_sword",0,1)

  3. var lorearr=[
  4. "§5类型:§f武器  §5稀有度:§fN",
  5. "§5元素:§f无",
  6. "§4—§e—§2—§9—§5—§6†属性†§5—§9—§2—§e—§4—",
  7. "§4—§e—§2—§9—§5—§6†描述†§5—§9—§2—§e—§4—",
  8. "§3初心者常常使用的木剑",
  9. "§3虽然不厉害,但是却非常耐用"
  10. ]

  11. var attlore=lorearr.indexOf("§4—§e—§2—§9—§5—§6†属性†§5—§9—§2—§e—§4—")
  12. //属性在lore中的位置

  13. e.npc.say(attlore)

  14. drops.setLore(lorearr)
  15. e.npc.dropItem(drops)
  16. }
复制代码
我们试试给npc加上say,看看他能不能正确获取“属性”在第几行
3.png 获取正确,在位置2的行(第一行的位置是0,第三行的位置是2)

回复

使用道具 举报

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

发表于 2019-4-29 18:32:19 | 显示全部楼层
接下来,我们要开始第一个随机了--随机属性条数
我们假设要他随机出现2-5条属性,那首先要弄出来2-5这个随机数:
  1. Math.floor(Math.random()*4)+2
复制代码
然后用for循环,在物品上写上属性
每写一次,行数要递进一行
  1. attlore=attlore+1
复制代码
数组添加元素用splice
  1. function interact(e){
  2. var drops=e.npc.getWorld().createItem("minecraft:wooden_sword",0,1)

  3. var lorearr=[
  4. "§5类型:§f武器  §5稀有度:§fN",
  5. "§5元素:§f无",
  6. "§4—§e—§2—§9—§5—§6†属性†§5—§9—§2—§e—§4—",
  7. "§4—§e—§2—§9—§5—§6†描述†§5—§9—§2—§e—§4—",
  8. "§3初心者常常使用的木剑",
  9. "§3虽然不厉害,但是却非常耐用"
  10. ]

  11. var attlore=lorearr.indexOf("§4—§e—§2—§9—§5—§6†属性†§5—§9—§2—§e—§4—")
  12. //属性在lore中的位置


  13. for(var i=0;i<Math.floor(Math.random()*4)+2;i++){
  14. attlore=attlore+1
  15. lorearr.splice(attlore,0,"我是一条属性")
  16. }

  17. drops.setLore(lorearr)
  18. e.npc.dropItem(drops)
  19. }
复制代码
我们来测试一下
aa.png bb.png cc.png
回复

使用道具 举报

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

发表于 2019-4-29 18:41:28 | 显示全部楼层
写完了第一个随机了,接下来继续写第二个随机:随机属性内容。
我们为了让属性产生真实效果,所以得按照一些lore属性插件的格式来写。我这里用的是非凡RPG
先添加一个属性库数组
  1. var att=[
  2.                             "§f▸ 直接伤害: §f§f+10.0%",
  3.                             "§3▸ AoE 伤害: §f§f+10.0%",
  4.                             "§b▸ PvP 伤害: §f§f+10.0%",
  5.                             "§b▸ PvE 伤害: §f§f+10.0%",
  6.                             "§6▸ 命中几率: §f§f+10.0%",
  7.                             "§a▸ 暴击几率: §f§f+10.0%",
  8.                             "§a▸ 暴击伤害: §f3.5x",
  9.                             "§e▸ 攻击速度: §f§f+10.0%",
  10.                             "§c▸ 吸血: §f§f+10.0%",
  11.                             "§6⚔ 物理伤害: §f10.0 §7- §f30.0",
  12.                             "§d⚡ 光属性伤害: §f10.0 §7- §f30.0",
  13.                             "§c☀ 火属性伤害: §f10.0 §7- §f30.0",
  14.                             "§9⚓ 水属性伤害: §f10.0 §7- §f30.0",
  15.                             "§7⚕ 风属性伤害: §f10.0 §7- §f30.0",
  16.                             "§a☣ 暗属性伤害: §f10.0 §7- §f30.0",                                                        
  17. ]
复制代码
ps:有些属性是我自己改名了...能看懂就行
然后的思路是这样,我们每次循环,都从属性库里抽一条属性出来,插在lore里,并且在属性库里删掉他,这样就不会出现重复属性。
  1. var len=att.length//获取属性库长度
  2. var n=Math.floor(Math.random()*len)//随机选一条属性
  3. lorearr.splice(attlore,0,att[n])//把属性插入lore
  4. att.splice(n,1)//在属性库中删掉这条属性
复制代码
所以结合前面所写的,完成的脚本如下:
  1. function interact(e){
  2. var drops=e.npc.getWorld().createItem("minecraft:wooden_sword",0,1)

  3. var lorearr=[
  4. "§5类型:§f武器  §5稀有度:§fN",
  5. "§5元素:§f无",
  6. "§4—§e—§2—§9—§5—§6†属性†§5—§9—§2—§e—§4—",
  7. "§4—§e—§2—§9—§5—§6†描述†§5—§9—§2—§e—§4—",
  8. "§3初心者常常使用的木剑",
  9. "§3虽然不厉害,但是却非常耐用"
  10. ]

  11. var attlore=lorearr.indexOf("§4—§e—§2—§9—§5—§6†属性†§5—§9—§2—§e—§4—")
  12. //属性在lore中的位置

  13. var att=[
  14.                             "§f▸ 直接伤害: §f§f+10.0%",
  15.                             "§3▸ AoE 伤害: §f§f+10.0%",
  16.                             "§b▸ PvP 伤害: §f§f+10.0%",
  17.                             "§b▸ PvE 伤害: §f§f+10.0%",
  18.                             "§6▸ 命中几率: §f§f+10.0%",
  19.                             "§a▸ 暴击几率: §f§f+10.0%",
  20.                             "§a▸ 暴击伤害: §f3.5x",
  21.                             "§e▸ 攻击速度: §f§f+10.0%",
  22.                             "§c▸ 吸血: §f§f+10.0%",
  23.                             "§6⚔ 物理伤害: §f10.0 §7- §f30.0",
  24.                             "§d⚡ 光属性伤害: §f10.0 §7- §f30.0",
  25.                             "§c☀ 火属性伤害: §f10.0 §7- §f30.0",
  26.                             "§9⚓ 水属性伤害: §f10.0 §7- §f30.0",
  27.                             "§7⚕ 风属性伤害: §f10.0 §7- §f30.0",
  28.                             "§a☣ 暗属性伤害: §f10.0 §7- §f30.0",                                                        
  29. ]
  30. for(var i=0;i<Math.floor(Math.random()*4)+2;i++){
  31. attlore=attlore+1
  32. var len=att.length//获取属性库长度
  33. var n=Math.floor(Math.random()*len)//随机选一条属性
  34. lorearr.splice(attlore,0,att[n])//把属性插入lore
  35. att.splice(n,1)//在属性库中删掉这条属性
  36. }

  37. drops.setLore(lorearr)
  38. e.npc.dropItem(drops)
  39. }
复制代码
现在来测试一下
aa.png bb.png cc.png dd.png ee.png
回复

使用道具 举报

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

发表于 2019-4-29 18:43:15 | 显示全部楼层
第三个随机:随机属性数值。
如果你能看到这里,相信这一步对你来说已经很简单了,在属性库中动手脚就行。这就作为作业布置吧!(偷懒)
回复

使用道具 举报

4

主题

23

帖子

108

积分

论坛萌新

Rank: 1

积分
108
人气
3 点
钻石粒
46 粒
贡献
0 点
论坛币
19 个
爱心
0 点

论坛注册会员

发表于 2019-4-29 18:43:31 | 显示全部楼层
完结撒花~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|自定义NPC脚本中文论坛 ( 蜀ICP备17005795号-3 )

GMT+8, 2020-9-19 04:37 , Processed in 0.083913 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部