用户:
AbnormalLOG查看:0 回复:0 评论:0 创建时间:2020-12-18T17:35:58
//-----setup-----
const Parkour = /^跑酷/i;//跑酷聊天命令
const end_Parkour = /^停止跑酷/i;
const help_message = /^help/i;
const help = `
欢迎来到${world.projectName}~
合作人员:
天真的流星猫fiED(https://box3.codemao.cn/u/8NDS6dhsAkDUq58)
幸运喵mmGZ(https://box3.codemao.cn/u/SVgLoUtviMWRLuz)
功夫熊猫666(https://box3.codemao.cn/u/3EQGZs9K9KCtsic)
我的个人主页:https://box3.codemao.cn/u/P10dpwtEjNjnKvg
地图里有许多彩蛋~
想要跑酷请说:跑酷,
停止跑酷说:停止跑酷,
帮助:help
`
const GIFT_NUMBER = {}
var ADMIN_PLAYER = ["__name__", "吉吉喵", "搬砖喵", "美术喵"]
const TOOL = require('./TOOL.js');
function gift() {
var mesh = TOOL.listsGetRandomItem(['mesh/圣诞礼物6.vb', 'mesh/圣诞礼物7.vb', 'mesh/圣诞礼物8.vb', 'mesh/圣诞礼物9.vb'])
var random = Math.random() * 1
var z = world.createEntity({
mesh: `${mesh}`,
position: world.querySelector(".xq").position,
meshScale: [random / 16, random / 16, random / 16],
meshColor: new Box3RGBAColor(253, 180, 23, 255),
meshEmissive: 0.14
})
z.addTag("礼物"); z.addTag("动物")
}
(async function () {
for (var i = 0; i < 50; i++) {
var name = TOOL.listsGetRandomItem(['雷电猴', '阿若法狗', '编程猫', '猫老祖','新手指引宠物'])
var z = world.createEntity({
mesh: `mesh/${name}.vb`,
position: [39, 13, 56.5],
meshScale: [1 / 16, 1 / 16, 1 / 16],
interact: true,
interactHint: `${name}`,
interactColor: new Box3RGBAColor(50, 50, 50, 50),
id: name
})
z.addTag("动物")
z.enableInteract = true
}
var j = world.createEntity({
mesh: "mesh/S喵-警笛头.vb",
position: [122, 3, 51],
meshScale: [1.7 / 16, 1.7 / 16, 1.7 / 16],
})
j.addTag("警笛头")
for (var i = 0; i < 100; i++) {
gift()
await sleep(100)
}
world.say("礼物已生成!由papyrus提供,sans发送!")
})();
setInterval(() => {
world.say("礼物由papyrus提供,sans发送!")
}, 1000 * 60 * 2);
world.onPlayerJoin(async ({ entity }) => {
entity.addTag(entity.player.name)
world.say(`${entity.player.name},欢迎进入地图`)
entity.player.canFly = false
entity.position = new Box3Vector3(73, 12, 118)
entity.player.spawnPoint.copy(entity.position)
TOOL.Notice(`欢迎${entity.player.name}~~~`)
entity.enableDamage = true; entity.maxHp = 100
if (GIFT_NUMBER[entity.player.name] === undefined) {
GIFT_NUMBER[entity.player.name] = 0
}
if (ADMIN_PLAYER.includes(entity.player.name)) {
entity.player.canFly = true
entity.player.addWearable({
bodyPart: Box3BodyPart.HIPS,
mesh: 'mesh/光环.vb',
orientation: new Box3Quaternion(0, 1, 0, 0).rotateY(Math.PI/2),
scale: new Box3Vector3(0.5, 0.5, 0.5),
offset: new Box3Vector3(0, 2, 0),emissive:0.14
})
entity.player.addWearable({
bodyPart: Box3BodyPart.HIPS,
mesh: 'mesh/天使之翼.vb',
orientation: new Box3Quaternion(0, 1, 0, 0).rotateY(Math.PI/2),
scale: new Box3Vector3(0.5, 0.5, 0.5),
offset: new Box3Vector3(0, 0.5, -0.5),emissive:0.14
})
}
entity.player.enable3DCursor = true;
})
world.onDie(({ entity }) => {
if (entity.isPlayer) {
TOOL.Notice(`${entity.player.name}喵亡,将在3秒后复活`)
sleep(3000).then(() => { entity.player.forceRespawn() })
}
})
world.onInteract(async ({ entity, targetEntity }) => {
if (targetEntity.hasTag("sans")) {
await entity.player.dialog({
type: Box3DialogType.TEXT,
title: "undertale sans",
content: "hi,可能你有很大的胆子来看我,你敢碰我吗?"
})
}
if (targetEntity.hasTag("GGM")) {
var g = await entity.player.dialog({
type: Box3DialogType.INPUT,
title: `${entity.id}`,
confirmText: '确定',
content: `输入地图作者的个性签名,我才放你出去!`,
placeholder: "去 https://box3.codemao.cn/u/P10dpwtEjNjnKvg 看看~"
})
if (g != "我是__name__") {
targetEntity.say(`❌你说了${g},答案错误!❌`)
} else {
entity.position = new Box3Vector3(73, 12, 118)
entity.player.spawnPoint.copy(entity.position)
entity.player.directMessage(`欢迎出狱!(……)`)
entity.player.muted = false
}
}
if (targetEntity.hasTag("开关")) {
targetEntity.say(entity.player.name + ",欢迎回来~")
voxels.setVoxel(86, 15, 118, 0)
voxels.setVoxel(86, 15, 117, 0)
voxels.setVoxel(86, 15, 116, 0)
voxels.setVoxel(86, 14, 118, 0)
voxels.setVoxel(86, 14, 117, 0)
voxels.setVoxel(86, 14, 116, 0)
voxels.setVoxel(86, 13, 118, 0)
voxels.setVoxel(86, 13, 117, 0)
voxels.setVoxel(86, 13, 116, 0)
voxels.setVoxel(86, 12, 118, 0)
voxels.setVoxel(86, 12, 117, 0)
voxels.setVoxel(86, 12, 116, 0)
/****/await sleep(3000)
voxels.setVoxel(86, 15, 118, 'palace_cloud')
voxels.setVoxel(86, 15, 117, 'palace_cloud')
voxels.setVoxel(86, 15, 116, 'palace_cloud')
voxels.setVoxel(86, 14, 118, 'palace_cloud')
voxels.setVoxel(86, 14, 117, 'palace_cloud')
voxels.setVoxel(86, 14, 116, 'palace_cloud')
voxels.setVoxel(86, 13, 118, 'palace_cloud')
voxels.setVoxel(86, 13, 117, 'palace_cloud')
voxels.setVoxel(86, 13, 116, 'palace_cloud')
voxels.setVoxel(86, 12, 118, 'palace_cloud')
voxels.setVoxel(86, 12, 117, 'palace_cloud')
voxels.setVoxel(86, 12, 116, 'palace_cloud')
}
if (targetEntity.hasTag("开关2")) {
targetEntity.say(entity.player.name + ",一路顺风~")
voxels.setVoxel(86, 15, 118, 0)
voxels.setVoxel(86, 15, 117, 0)
voxels.setVoxel(86, 15, 116, 0)
voxels.setVoxel(86, 14, 118, 0)
voxels.setVoxel(86, 14, 117, 0)
voxels.setVoxel(86, 14, 116, 0)
voxels.setVoxel(86, 13, 118, 0)
voxels.setVoxel(86, 13, 117, 0)
voxels.setVoxel(86, 13, 116, 0)
voxels.setVoxel(86, 12, 118, 0)
voxels.setVoxel(86, 12, 117, 0)
voxels.setVoxel(86, 12, 116, 0)
/****/await sleep(3000)
voxels.setVoxel(86, 15, 118, 'palace_cloud')
voxels.setVoxel(86, 15, 117, 'palace_cloud')
voxels.setVoxel(86, 15, 116, 'palace_cloud')
voxels.setVoxel(86, 14, 118, 'palace_cloud')
voxels.setVoxel(86, 14, 117, 'palace_cloud')
voxels.setVoxel(86, 14, 116, 'palace_cloud')
voxels.setVoxel(86, 13, 118, 'palace_cloud')
voxels.setVoxel(86, 13, 117, 'palace_cloud')
voxels.setVoxel(86, 13, 116, 'palace_cloud')
voxels.setVoxel(86, 12, 118, 'palace_cloud')
voxels.setVoxel(86, 12, 117, 'palace_cloud')
voxels.setVoxel(86, 12, 116, 'palace_cloud')
}
if (targetEntity.hasTag("世界爆炸")) {
await entity.player.dialog({
type: "text",
title: "世界爆炸",
content: "点击我!"
})
}
if (targetEntity.hasTag("地图")) {
await entity.player.dialog({ type: "text", title: "雪人", content: "圣诞快乐~" })
}
})
world.onClick(async ({ entity, clicker }) => {
if (clicker.isPlayer) {
if (entity.hasTag("世界爆炸")) {
TOOL.Notice(clicker.player.name + "点击了世界爆炸按钮!世界将在20秒后爆炸!")
for (var time = 0; time < 20; time++) {
await sleep(1000)
TOOL.Notice(time + "...")
}
world.querySelectorAll("player").forEach((p) => {
if (p.player.name != clicker.player.name) {
p.hurt(100)
}
TOOL.Notice("世界已爆炸.")
})
}
}
})
world.onEntityContact(async ({ entity, other }) => {
if (other.isPlayer) {
if (entity.hasTag("飞机")) {
other.mesh = entity.mesh
other.meshScale = entity.meshScale
other.meshOrientation = new Box3Quaternion(0, 1, 0, 0)
other.player.invisible = true;
other.player.flySpeed = 10
world.say(`${other.player.name}开走了飞机`)
other.player.canFly = true
Object.assign(other, {
particleRate: 1000,
particleSize: [1, 1, 1, 1, 1, 1],
particleLifetime: 100,
particleVelocity: new Box3Vector3(0, 0.5, 0),
particleColor: [
new Box3RGBColor(1, 0, 0),
new Box3RGBColor(0, 1, 0),
new Box3RGBColor(0, 0, 1),
new Box3RGBColor(1, 0, 0),
new Box3RGBColor(0, 1, 0),
new Box3RGBColor(0, 0, 1),
]
});
}
if (entity.hasTag("礼物")) {
entity.destroy()
GIFT_NUMBER[other.player.name]++
other.player.directMessage("你获得了一个礼物,当前你有礼物" + GIFT_NUMBER[other.player.name] + '个')
gift()
}
if (entity.hasTag("光环")) {
other.player.addWearable({
bodyPart: Box3BodyPart.HIPS,
mesh: 'mesh/光环.vb',
orientation: new Box3Quaternion(0, 1, 0, 0).rotateY(Math.PI/2),
scale: new Box3Vector3(0.5, 0.5, 0.5),
offset: new Box3Vector3(0, 2, 0),emissive:0.14
})
}
if (entity.hasTag("缩小")) {
other.player.scale = 0.5
other.player.forceRespawn()
}
if (entity.hasTag('飞行彩蛋')) {
other.player.canFly = true
other.player.addWearable({
bodyPart: Box3BodyPart.HIPS,
mesh: 'mesh/天使之翼.vb',
orientation: new Box3Quaternion(0, 1, 0, 0).rotateY(Math.PI/2),
scale: new Box3Vector3(0.5, 0.5, 0.5),
offset: new Box3Vector3(0, 0.5, -0.5),emissive:0.14
});other.player.forceRespawn()
TOOL.Notice(other.player.name + "获得飞行")
}
if (entity.hasTag("飞")) {
other.player.canFly = true
TOOL.Notice(`${other.player.name}获得飞行功能~`)
}
if (entity.hasTag("幽灵")) {
other.player.spectator = true
}
if (entity.hasTag("狗")) {
TOOL.entity_hurt(100, other, await_ = 50)
}
if (entity.hasTag("sans")) {
other.position = new Box3Vector3(122, 3, 51)
other.player.spawnPoint.copy(other.position)
other.player.muted = true
TOOL.Notice(
`
最近,Box3.0通缉的犯人${other.player.name}被捉住,进入监狱
`
)
}
if (entity.hasTag("电视")) {
//for (let i=0;i<50*500000;i++) {
/*other.hurt(100000);*/
other.hurt(-100000)
//}
}
if (entity.hasTag("挂机")) {
if (Math.random() < 0.1) {
other.position = new Box3Vector3(124, 13, 42)
} else if (Math.random() > 0.3) {
other.position = new Box3Vector3(124, 13, 48)
} else {
other.position = new Box3Vector3(124, 13, 54)
}
}
if (entity.hasTag('跑酷1')) {
TOOL.Notice(`${other.player.name}开始跑酷啦`)
other.player.canFly = false
world.addCollisionFilter('.'+other.player.name,'player')
other.addTag("跑酷")
other.addTag('跑酷01')
other.player.spawnPoint = new Box3Vector3(
entity.position.x,
entity.position.y + 3,
entity.position.z
)
TOOL.aura(entity)
}
if (entity.hasTag('跑酷2')) {
world.say(`${other.player.name}冲破了跑酷第1关~`)
other.player.spawnPoint = new Box3Vector3(
entity.position.x,
entity.position.y + 3,
entity.position.z
)
TOOL.aura(entity)
other.addTag('跑酷02')
}
if (entity.hasTag('跑酷3')) {
world.say(`${other.player.name}冲破了跑酷第2关~`)
other.player.spawnPoint = new Box3Vector3(
entity.position.x,
entity.position.y + 3,
entity.position.z
)
TOOL.aura(entity);other.addTag('跑酷03')
}
if (entity.hasTag('终点')) {
if (other.hasTag("跑酷") && (other.hasTag("跑酷01") && (other.hasTag("跑酷02") && other.hasTag("跑酷03")))) {
world.removeCollisionFilter("."+other.player.name,"player")
TOOL.Notice(`恭喜${other.player.name}冲破了终点!`)
TOOL.aura(entity)
other.removeTag('跑酷')
other.position = new Box3Vector3(73, 13, 118)
other.player.spawnPoint.copy(entity.position)
other.player.canFly = true
}
}
}
})
world.onVoxelContact(({ entity, voxel, x, y, z }) => {
if (entity.isPlayer) {
if (voxel == voxels.id("exclamation_mark")) {
if (x === 35 && (z == 56 || z == 57)) {
voxels.setVoxel(35, 15, 57, 0)
voxels.setVoxel(35, 15, 56, 0)
voxels.setVoxel(35, 14, 57, 0)
voxels.setVoxel(35, 14, 56, 0)
voxels.setVoxel(35, 13, 57, 0)
voxels.setVoxel(35, 13, 56, 0)
sleep(3000).then(() => {
voxels.setVoxel(35, 15, 57, "exclamation_mark")
voxels.setVoxel(35, 15, 56, "exclamation_mark")
voxels.setVoxel(35, 14, 57, "exclamation_mark")
voxels.setVoxel(35, 14, 56, "exclamation_mark")
voxels.setVoxel(35, 13, 57, "exclamation_mark")
voxels.setVoxel(35, 13, 56, "exclamation_mark")
})
}
}
}
})
world.onChat(({ entity, message }) => {
if (entity.isPlayer) {
if (message.match(Parkour)) {
entity.position = new Box3Vector3(
world.querySelector(".跑酷1").position.x,
world.querySelector(".跑酷1").position.y + 3,
world.querySelector(".跑酷1").position.z,
)
}
if (message.match(help_message)) {
entity.player.directMessage(help)
}
}
})
world.onTick(({ tick }) => {
world.querySelectorAll(".xq").forEach((xq) => {
xq.position.x -= 1
if (xq.position.x < 5) {
xq.position.x = 117.8
}
})
world.querySelector(".lr").position = new Box3Vector3(world.querySelector(".xq").position.x + 3,
world.querySelector(".xq").position.y, world.querySelector(".xq").position.z)
world.querySelector(".地图").enableInteract = true
world.querySelector(".sans").enableInteract = true; world.querySelector(".GGM").enableInteract = true; world.querySelector(".踏板").collides = true
world.querySelectorAll(".跑酷").forEach((e) => { if (e.position.y < 117) { TOOL.entity_hurt(100, e, await_ = 10) } })
world.querySelector(".开关").enableInteract = true; world.querySelector(".开关2").enableInteract = true; world.querySelector(".世界爆炸").enableInteract = true
world.querySelectorAll(".动物").forEach((e) => {
const sdxz = Math.abs(e.velocity.x) + Math.abs(e.velocity.z);
if (sdxz > 0.1) {
const angle = Math.floor(Math.atan2(e.velocity.z, e.velocity.x) / (2. * Math.PI) * 256) * 2. * Math.PI / 256;
const orientation = new Box3Quaternion(0, 0, 0, 1).rotateY(angle).rotateY(Math.PI / 4);
e.meshOrientation.copy(orientation);
} else {
const randTheta = Math.random() * Math.PI * 2;
const mag = Math.random() + Math.random();
e.velocity.x = mag * Math.sin(randTheta);
e.velocity.z = mag * Math.cos(randTheta);
}
e.onVoxelContact(({ voxel }) => {
e.velocity.y = 0.3 + Math.random() * 0.7
})
e.onInteract(async ({ entity }) => {
await entity.player.dialog({
type: 'text',
content: TOOL.listsGetRandomItem(['你好~', '知道不,图主为了干这个地图的跑酷喵了几十次', "图主告诉我,这个图有许多彩蛋!"]),
title: e.id
})
})
});
const Quat = new Box3Quaternion(0, 0, 0, 1)// box引擎默认的旋转朝向
let allPlayers = []//所有玩家
let allZombies = []//所有僵尸
allPlayers = world.querySelectorAll('player')
allZombies = world.querySelectorAll('.警笛头')
allZombies.forEach(async (e) => {
let zomPos = e.position
if (tick % 11 === 0) {
let target = allPlayers.sort((a, b) => {
return a.position.distance(zomPos) - b.position.distance(zomPos)
})[0]
if (target) {
e.target = target
}
}
if (e.target && !e.target.destroyed) {
var direction = e.target.position.sub(zomPos);
var dist = direction.mag()
var speed = 0.2 + Math.random() * 0.3
e.velocity.x = direction.x * speed / dist
e.velocity.z = direction.z * speed / dist
var orientation = Quat.rotateY(Math.atan2(e.velocity.z, e.velocity.x))
e.meshOrientation.copy(orientation)
}
})
world.querySelectorAll('.地图').forEach((e)=>{
var type='p';
world.onTick(()=>{
if(e.meshOrientation.x>=0.5){
e.meshOrientation.x-=0.1;
type='m';
} else if(e.meshOrientation.x<=-0.5){
e.meshOrientation.x+=0.1;
type='p';
} else{
if(type==='p'){
e.meshOrientation.x+=0.1;
} else{
e.meshOrientation.x-=0.1;
}
}
})
})
})
TOOL(新建一个文件,命名为TOOL.js)
function listsGetRandomItem(list, remove=false) {
var x = Math.floor(Math.random() * list.length);
if (remove) {
return list.splice(x, 1)[0];
} else {
return list[x];
}
}
async function entity_hurt(hurt_number,entity,await_=50,hurt_=1) {
for (var hu=0;hu<hurt_number+1;hu++) {
entity.hurt(hurt_)
await sleep(await_)
}
}
async function Notice(string,entity=world.querySelector(".告示")) {
entity.say(string)
}
async function aura(entity, color = [
new Box3RGBColor(0.033, 1, 10), //3个值分别代表红光、绿光、蓝光的含量,大小为0到正无穷
new Box3RGBColor(10, 0.025, 10),
new Box3RGBColor(0.05, 1, 10),
new Box3RGBColor(10, 0.5, 10),
new Box3RGBColor(0.2, 1, 10)
], time=1000) {
// 设置粒子特效参数
entity.particleRate = 500;//实体每秒产生粒子的数量
entity.particleLimit = 500;//产生的粒子总数的上限
entity.particleLifetime = 0.8;//每颗粒子的存活时间,以秒为单位
entity.particleSize = [5,3,5,3,5];//粒子大小按时间变化的模式,平均分为5个阶段
entity.particleSizeSpread = 2;//粒子大小的随机变化范围
entity.particleColor = color;//随时间变化的粒子颜色,同样分为5个阶段
entity.particleAcceleration = new Box3Vector3(0, 1, 0);//粒子的加速度,是竖直向上的
entity.particleNoise = 5;//粒子运动随机偏离的大小
entity.particleNoiseFrequency = 10;//粒子随机偏离的频率
entity.particleVelocity = new Box3Vector3(0, 5, 0);//粒子的初速度
// 让粒子特效在经历时间time(ms)后停止
await sleep(time);//静待一段时间,time是输入的参数,默认值为1000毫秒
entity.particleRate = 0;//将产生粒子的数量设为0,也就是停止粒子特效
entity.particleLimit = 0;//将产生粒子上限数量设为0
}
function mathRandomInt(a, b) {
if (a > b) {
// Swap a and b to ensure a is 喵aller.
var c = a;
a = b;
b = c;
}
return Math.floor(Math.random() * (b - a + 1) + a);
}
module.exports = {
listsGetRandomItem,
entity_hurt,
Notice,
aura,
mathRandomInt,
}
(来源:圣诞公园代码编辑器,作者:__name__)