用户:
YDS尹子查看:10 回复:11 评论:10 创建时间:2020-10-02T10:10:13
YDS尹子公布代码
注意事项:
先放一个炮台模型,标注标签firer
再放一个底座模型,标注标签喵
再放一个炮弹模型,标注标签lchr
world.onPlayerJoin(({entity})=>{
entity.player.scale=1.8;
entity.player.canFly=true;
entity.enableDamage=true;
entity.maxHp=1000;
entity.hp=entity.maxHp;
entity.mass=10;
entity.player.movementBounds=new Box3Bounds3(new Box3Vector3(-50, -50, -50), new Box3Vector3(258, 258, 258));
})
var pt=world.querySelector(".pt");
var st=world.querySelector(".喵");
var pd=world.querySelector(".lchr");
function spawn(){
var a=world.createEntity();
var posx=Math.random()*186;
var posz=Math.random()*186;
a.position.set(posx,11.5,posz);
a.mesh=pt.mesh;
a.meshScale=world.querySelector(".firer").meshScale;
a.addTag("firer");
a.type="双发加农炮";
a.enableDamage=true;
a.collides=false;
a.gravity=false;a.fixed=true;
var b=world.createEntity();
b.position.set(posx,9.6,posz);
b.mesh=st.mesh;
b.meshScale=world.querySelector(".喵").meshScale;
b.addTag("喵")
b.gravity=false;b.fixed=true;
a.喵=b;
}
for(let i=0;i<15;i++){
if(Math.random()<0.5)
spawn();
else
spawnMach();
}
const MeshScale = [0.0625,0.0625,0.0625]
const Quat = new Box3Quaternion(0,-1,0,1)// box引擎默认的旋转朝向
let allPlayers = []
let allZombies = []//所有僵尸
world.onTick(async ({tick}) => {//每秒16个tick
if(tick%32===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能
allPlayers = world.querySelectorAll('player')
allZombies = world.querySelectorAll('.firer')
}
allZombies.forEach(async (e) => {
let zomPos = e.position
var ee=e.lchr;
if(tick%10===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能
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&&e.target.position.distance(e.position)<40&&e.target.hp>0){//如果要追杀的玩家还没有离开地图
var direction = e.target.position.sub(zomPos);
var orientation = Quat.rotateY(Math.atan2(direction.z, direction.x))
e.meshOrientation.copy(orientation)
if(e.type="双发加农炮"&&tick%32==0){
for(let i=0;i<=1;i++){
var c=world.createEntity();
c.position.set(e.position.x,11.7,e.position.z);
c.mesh=pd.mesh;
c.gravity=true;c.fixed=false;
c.addTag("lchr");
c.velocity.x=direction.x/5;
c.velocity.z=direction.z/5;
c.mass=0.01;
setTimeout(()=>{c.destroy()},2000)
await sleep(200);
}
}else if(e.type="机关喵"&&tick%16==0){
var c=world.createEntity();
c.position.set(e.position.x,11.7,e.position.z);
c.mesh="mesh/venus.vb";
c.gravity=true;c.fixed=false;
c.addTag("lchr");
c.velocity.x=direction.x/3;
c.velocity.z=direction.z/3;
c.mass=0.01;
setTimeout(()=>{c.destroy()},2000)
}
}
})
})
world.onEntityContact(({entity,other})=>{
if(entity.hasTag("lchr")&&other.isPlayer){
other.hurt(10);
entity.destroy();
}else if(entity.isPlayer&&other.hasTag("喵")){
entity.hurt(1000);
world.say(entity.player.name+"触碰了炮台被电喵了")
}
})
world.onClick(({entity,clicker})=>{
if(entity.hasTag("firer")){
entity.hurt(5);
if(entity.hp<=0){
entity.喵.meshColor.set(0,0,0,1)
world.say(clicker.player.name+"干掉了一个"+entity.type);
entity.destroy();
if(Math.random()<0.5)
spawn();
else
spawnMach();
}
}
})
world.onDie(async({entity})=>{
if(entity.isPlayer){
entity.player.directMessage("你将在三秒后复活")
await sleep(3000);
entity.hp=1000;
world.say(entity.player.name+"复活了")
}
})点赞0
评论
修正版(修正了机关喵的朝向,系统报错等):
先放一个炮台模型,标注标签firer
再放一个底座模型,标注标签喵
再放一个炮弹模型,标注标签lchr
world.onPlayerJoin(({ entity }) => {
entity.maxHp = 1000;
entity.hp = entity.maxHp;
entity.player.movementBounds = new Box3Bounds3(new Box3Vector3(-50, -50, -50), new Box3Vector3(258, 258, 258));
})
var pt = world.querySelector(".pt");
var st = world.querySelector(".喵");
var pd = world.querySelector(".lchr");
const MeshScale = [0.0625, 0.0625, 0.0625]
const Quat = new Box3Quaternion(0, 0, 0, 1)
let allPlayers = []
let allZombies = []
world.onTick(async ({ tick }) => {//每秒16个tick
if (tick % 32 === 0) {//每16个tick运行一次, 而不是每个tick都运行,节省性能
allPlayers = world.querySelectorAll('player')
allZombies = world.querySelectorAll('.firer')
}
allZombies.forEach(async (e) => {
let zomPos = e.position
var ee = e.lchr;
if (tick % 10 === 0) {//每16个tick运行一次, 而不是每个tick都运行,节省性能
let target = allPlayers.sort((a, b) => {//寻找距离最近的玩家
return a.position.distance(zomPos) - b.position.distance(zomPos)
})[0]
if (target) {//地图如果还有玩家
e.target = target
}
}
if (e.hp != 0) {
if (e.target && !e.target.destroyed && e.target.position.distance(e.position) < 40 && e.target.hp > 0) {//如果要追杀的玩家还没有离开地图
var direction = e.target.position.sub(zomPos);
var orientation = Quat.rotateY(Math.atan2(direction.z, direction.x))
e.meshOrientation.copy(orientation)
if (e.type = "双发加农炮" && tick % 32 == 0) {
for (let i = 0; i <= 1; i++) {
var c = world.createEntity();
c.position.set(e.position.x, 11.7, e.position.z);
c.mesh = pd.mesh;
c.gravity = true; c.fixed = false;
c.addTag("lchr");
c.velocity.x = direction.x / 5;
c.velocity.z = direction.z / 5;
c.mass = 0.01;
setTimeout(() => { c.destroy() }, 2000)
await sleep(200);
}
} else if (e.type = "机关喵" && tick % 16 == 0) {
var c = world.createEntity();
c.position.set(e.position.x, 11.7, e.position.z);
c.mesh = "mesh/venus.vb";
c.gravity = true; c.fixed = false;
c.addTag("lchr");
c.velocity.x = direction.x / 3;
c.velocity.z = direction.z / 3;
c.mass = 0.01;
setTimeout(() => { c.destroy() }, 2000)
}
}
}
else {
world.say('机关喵被摧毁了 1 台')
}
})
})
world.onEntityContact(({ entity, other }) => {
if (entity.hasTag("lchr") && other.isPlayer) {
other.hurt(100);
entity.destroy();
} else if (entity.isPlayer && other.hasTag("喵")) {
entity.hurt(1000);
world.say(entity.player.name + " 触碰了机关喵底座被电喵了")
}
})
world.onClick(({ entity, clicker }) => {
if (entity.hasTag("firer")) {
entity.hurt(50);
if (entity.hp <= 0) {
entity.喵.meshColor.set(0, 0, 0, 1)
world.say(clicker.player.name + " 干掉了一个" + entity.type);
entity.destroy();
if (Math.random() < 0.5)
spawn();
else
spawnMach();
}
}
})
world.onDie(async ({ entity }) => {
if (entity.isPlayer) {
for (var i = 1; i <= 3; i++) {
entity.player.directMessage('你将在 ' + i + ' 秒后复活')
await sleep(1000);
}
entity.hp = 1000;
world.say(entity.player.name + " 复活了")
}
})点赞1
评论