切换风格

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

3

主题

5

帖子

126

积分

论坛萌新

Rank: 1

积分
126
人气
3 点
钻石粒
88 粒
贡献
0 点
论坛币
30 个
爱心
0 点

论坛注册会员

[1.7.10][ECMA]一个简单的敌人针对玩家潜行ai[复制链接]
发表于 2019-4-17 17:10:40 | 显示全部楼层 |阅读模式
脚本例子
脚本版本: 1.1
适用版本: 1.7.10 
编写语言: ECMA
最后更新: 2019-04-21
代码版权: 强版权

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

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

x
本帖最后由 本杰明i 于 2019-4-29 06:01 编辑

声明:
1.你不能转载本帖
2.你不能声称作者是自己

很简单,只是我在写的时候觉得比较绕
有带佬感兴趣,可以优化一下代码

init/运行
npc.removeTempData("fxj1");
npc.removeTempData("fxj2");
npc.removeTempData("jg");


target/得到目标
/*判断玩家状态,开关事件
警报系统用延迟判断
*/
var pp=event.getTarget();
var a=pp.getPotionEffect(14);
var hand=pp.getHeldItem();
//判断内容玩家是否处于隐身药水状态和是否Sneaking或者等级3的隐身效果手上没拿东西
if(((pp.isSneaking()==true&&a==0)||(a==2&&hand==null)||(a==2&&pp.isSneaking()==true))&&(world.hasTempData("jingbao")==false)){
        event.setCancelled(true);
     var x=npc.isNavigating();
        if(npc.hasTempData("fxj1")==false&&x==false){
                npc.setTempData("fxj1",true);
                     npc.say("嗯?什么东西过去了?")
                        }
                 //当NPC站立不动,玩家进入感知范围
        if(npc.hasTempData("fxj2")==false&&x==true){
                npc.setTempData("fxj2",true);
                     npc.say("嗯?··奇怪··")
               }
                 //当NPC走动时,玩家进入感知范围
}
else{
   npc.say("我逮到你了!")
}
       //被发现执行代码
if(event.isCancelled()==false&&npc.hasTempData("jg")==false&&world.hasTempData("jingbao")==false){
       pp.sendMessage("§c警告:你已被卫兵发现");
       npc.setTempData("jg",true);
       var pp=event.getTarget();
      //向世界输出警报信息
       world.setTempData("jingbao",pp);
//延迟输出
function setTimeout(fn,millis){
var Thread = Java.type("java.lang.Thread");
var MyRun = Java.extend(Java.type("java.lang.Runnable"), {
    run: function() {
        Thread.sleep(millis)
try {
fn.apply();
}catch(err){throw err;} 
    }
});
new Thread(new MyRun()).start()
}

var millis=6000;msl=8000;
setTimeout(function (){
        if(npc.isAlive()==true&&pp.isAlive()==true){
                npc.say("来人啊抓刺客啊!");
        }
},millis)

        setTimeout(function (){
if(npc.isAlive()==true&&pp.isAlive()==true){
        pp.sendMessage("§e失去同步");

        //注意:此代码块为潜行失败后的玩家处理,根据自身需求自行编辑↓
                var name=pp.getName();
                npc.executeCommand("/noppes dialog show "+(name)+" 705 任务失败");                pp.addPotionEffect(2,6,2,false);
                pp.setPosition(-928,74,1119)
        //↑                        

                                //重置警报和npc
                world.removeTempData("jingbao");
                npc.reset()
                }
else{
        pp.sendMessage("§7威胁解除");
             npc.removeTempData("fxj1");
             npc.removeTempData("fxj2");
             npc.removeTempData("jg");
                        world.removeTempData("jingbao");
                }
        },msl)
}


评分

参与人数 2人气 +3 收起 理由
Hueihuea + 1 支持一下
Guai_Shou + 2 赞一个!

查看全部评分

回复

使用道具 举报

10

主题

17

帖子

466

积分

大区版主

漫步烟雨

Rank: 7Rank: 7Rank: 7

积分
466
人气
25 点
钻石粒
409 粒
贡献
0 点
论坛币
85 个
爱心
0 点

论坛审核会员论坛注册会员

QQ
发表于 2019-4-19 00:40:24 | 显示全部楼层
有些部分个人感觉其实可以优化一下,但说真的做的不错。
可优化部分
//被发现执行代码
if(event.isCancelled()==false&&npc.hasTempData("jg")==false&&world.hasTempData("jingbao")==false)

//此处可以修改为
if(!(event.isCancelled()||npc.hasTempData("jg")||world.hasTempData("jingbao")))


因为 event.isCancelled() 输出布尔值,可直接应用在if上而不用再去比较。

而且如果需要求反向布尔值,只需要在这之前加上!即可。

(我的代码也不太成熟,此处仅供参考,具体看大佬。)


回复

使用道具 举报

0

主题

2

帖子

13

积分

论坛萌新

Rank: 1

积分
13
人气
0 点
钻石粒
25 粒
贡献
0 点
论坛币
3 个
爱心
0 点
发表于 2019-5-8 11:54:59 | 显示全部楼层
期待作者的下次作品!(我没有在水经验)
其实我是在活跃论坛
回复

使用道具 举报

0

主题

13

帖子

60

积分

论坛萌新

Rank: 1

积分
60
人气
0 点
钻石粒
12 粒
贡献
0 点
论坛币
18 个
爱心
0 点
发表于 2019-8-18 21:06:07 | 显示全部楼层
小马利亚 发表于 2019-5-8 11:54
期待作者的下次作品!(我没有在水经验)

awa awa awa awa
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-7-11 01:21 , Processed in 0.086718 second(s), 35 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部