自定义NPC脚本论坛

搜索
查看: 170|回复: 1

[1.12.2]低配版CustomLevel

[复制链接]

1

主题

3

帖子

209

积分

Lv.5 深海明珠

Rank: 8Rank: 8

积分
209

论坛元老勋章

QQ
发表于 2021-8-16 22:59:54 | 显示全部楼层 |阅读模式
本帖最后由 治不起脑瘫的兲 于 2021-8-16 23:02 编辑

闲着没事干玩服务器的时候看到别的服有自定义等级插件
然后又闲着没事干想用脚本做一下看看
获得经验后的提示自己看着改改 我懒得弄得那么好康了
这是作者的第一个1.12.2的脚本
制作过程中由于酱油大佬的教程里面有个地方有点问题还浪费了很多时间研究经验值与等级互转(
没有已知bug 有bug记得找作者!!!
用的是timer 如果有冲突记得改id(id:114514) 由于是第一次不知道有什么更好的
最好是给作者说一下1.12.2的监听怎么用 直接改成监听版本的效果会更好
粘贴至 Player 中
主要效果:
1,自定义每级需要的经验
2,没了
彳亍了 不罗嗦了 上代码
  1. var LvneedExp = new Array();
  2. //在这里设置每级需要经验
  3. LvneedExp[0] = 100;//0级
  4. for (var i = 1; i < 10; i++) {//1-10级
  5.     LvneedExp[i] = LvneedExp[i - 1] + 10;
  6. }
  7. for (var i = 10; i < 20; i++) {//11-20级
  8.     LvneedExp[i] = LvneedExp[i - 1] + 20;
  9. }
  10. for (var i = 20; i < 30; i++) {//21-30级
  11.     LvneedExp[i] = LvneedExp[i - 1] + 100;
  12. }
  13. for (var i = 30; i < 40; i++) {
  14.     LvneedExp[i] = LvneedExp[i - 1] + 200;
  15. }
  16. for (var i = 40; i < 50; i++) {
  17.     LvneedExp[i] = LvneedExp[i - 1] + 300;
  18. }
  19. for (var i = 50; i < 60; i++) {
  20.     LvneedExp[i] = LvneedExp[i - 1] + 500;
  21. }
  22. for (var i = 60; i < 70; i++) {
  23.     LvneedExp[i] = LvneedExp[i - 1] + 500;
  24. }
  25. for (var i = 70; i < 80; i++) {
  26.     LvneedExp[i] = LvneedExp[i - 1] + 500;
  27. }
  28. for (var i = 80; i < 90; i++) {
  29.     LvneedExp[i] = LvneedExp[i - 1] + 1000;
  30. }
  31. for (var i = 90; i < 95; i++) {
  32.     LvneedExp[i] = LvneedExp[i - 1] + 10000;
  33. }
  34. for (var i = 95; i < 99; i++) {
  35.     LvneedExp[i] = LvneedExp[i - 1] + 50000;
  36. }
  37. for (var i = 10; i < 99; i += 10) {
  38.     LvneedExp[i] = 9999999999;
  39. }
  40. LvneedExp[99] = 9999999999;
  41. function init(event) {
  42.     event.player.timers.forceStart(114514, 1, true);
  43. }
  44. function timer(e) {
  45.     if (e.id == 114514) {
  46.         var player = e.player;
  47.         var storeddata = player.getStoreddata();
  48.         if (!storeddata.has("displayExp")) {//玩家真实经验条经验值
  49.             storeddata.put("displayExp", 0);
  50.         }
  51.         if (!storeddata.has("trueExp")) {//修改每级需要经验后的经验值
  52.             storeddata.put("trueExp", 0);
  53.         }
  54.         if (!storeddata.has("trueLv")) {//修改每级需要经验后的等级
  55.             storeddata.put("trueLv", 0);
  56.         }
  57.         if (storeddata.get("displayExp") < getEXP(player)) {//如果玩家经验增加了执行假经验事件函数
  58.             FAKEgetExpEvent(player, getEXP(player) - storeddata.get("displayExp"), e);
  59.             storeddata.put("displayExp", getEXP(player));
  60.         }
  61.     }
  62. }
  63. function FAKEgetExpEvent(player, vault, e) {
  64.     var storeddata = player.getStoreddata();
  65.     var exp = storeddata.get("trueExp");//获取当前经验
  66.     var lvl = storeddata.get("trueLv");//获取当前等级
  67.     storeddata.put("trueExp", exp + vault);//给玩家增加经验
  68.     exp = storeddata.get("trueExp");
  69.     if (exp >= LvneedExp[lvl]) {//达到升级条件
  70.         while (exp >= LvneedExp[lvl]) {
  71.             exp -= LvneedExp[lvl];
  72.             lvl++;
  73.         }
  74.         storeddata.put("trueExp", exp);
  75.         storeddata.put("trueLv", lvl);
  76.     }
  77.     player.setExpLevel(-1);
  78.     player.setExpLevel(lvl);//修改玩家经验条经验
  79.     var num = (exp / 1.0) / (LvneedExp[lvl] / 1.0);
  80.     player.getMCEntity().func_71023_q(Math.floor(player.getMCEntity().func_71050_bK() * num));//给予玩家经验
  81.     sendActionbar(player, exp + "/" + LvneedExp[lvl] + "[lv" + lvl + "]");
  82. }
  83. function sendActionbar(player, message) {
  84.     title(player, "ACTIONBAR", "[{"text":"" + message + ""}]", 1, 3, 1);
  85. }
  86. function getEXP(player) {//获取玩家当前经验值
  87.     return player.getMCEntity().field_71067_cb;
  88. }
  89. /*
  90. function ExptoLevel(exp) {//经验值转等级
  91.     switch (true) {
  92.         case exp <= 315:
  93.             return Math.floor(Math.sqrt((exp + 9)) - 3.0);
  94.         case exp <= 1395:
  95.             return Math.floor(Math.sqrt((40 * exp - 7839)) / 10.0 + 8.1);
  96.         case 1:
  97.             return Math.floor((Math.sqrt((72 * exp - 54215)) + 325.0) / 18.0);
  98.     }
  99. }
  100. function LeveltoExp(level) {//等级转经验值
  101.     switch (true) {
  102.         case level <= 16:
  103.             return Math.pow(level, 2) + 6 * level;
  104.         case level <= 31:
  105.             return 2.5 * Math.pow(level, 2) + 40.5 * level;
  106.         case level >= 32:
  107.             return 4.5 * Math.pow(level, 2) + 162.5 * level;
  108.     }
  109. }*/
  110. function sendActionbar(player, message) {
  111.     title(player, "ACTIONBAR", "[{"text":"" + message + ""}]", 1, 3, 1);
  112. }
  113. function title(player, type, message, fadeIn, display, fadeOut) {
  114.     var SPacketTitle = Java.type("net.minecraft.network.play.server.SPacketTitle");
  115.     var IPlayer = Java.type("noppes.npcs.api.entity.IPlayer");
  116.     var EntityPlayerMP = Java.type("net.minecraft.entity.player.EntityPlayerMP");
  117.     var SPacketTitle = Java.type("net.minecraft.network.play.server.SPacketTitle");
  118.     var ITextComponent = Java.type("net.minecraft.util.text.ITextComponent");
  119.     if (player instanceof IPlayer) {
  120.         player = player.getMCEntity();
  121.     } else if (!(player instanceof EntityPlayerMP)) {
  122.         throw "player必须为 实例化[IPlayer]或[EntityPlayerMP]";
  123.     }
  124.     if (message != null && !(message instanceof ITextComponent)) {
  125.         message = ITextComponent.Serializer.func_150699_a(message);
  126.     }
  127.     var packet = new SPacketTitle(SPacketTitle.Type.func_179969_a(type), message, fadeIn, display, fadeOut);
  128.     player.field_71135_a.func_147359_a(packet);
  129. }
复制代码

评分

参与人数 2人气 +2 金粒 +1 收起 理由
早上 + 1 代码质量过差
咸鱼羊 + 2 (可以给负的评分是什么鬼啦

查看全部评分

回复

使用道具 举报

7

主题

8

帖子

183

积分

Lv.4 地上月影

Rank: 6Rank: 6

积分
183

论坛元老勋章

QQ
发表于 2021-8-17 23:42:33 | 显示全部楼层
推荐使用代码高亮,
[pre][/pre]

ps:版规里面也有
挺肝的,很棒,之前虽然有类似的想法但是懒得写xD
事件的话,除了可以参考酱油大佬的脚本句型用法外
也可以看一下DOC中noppes.npcs.api.event包下的类,大部分会有个说明(函数名)
暂时没有想好
回复

使用道具 举报

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

本版积分规则

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