用户:
DebugDynamo查看:8 回复:14 评论:8 创建时间:2022-01-09T10:01:44
话不多说上代码
//调用氰的击飞代码
async function hit_fly(center/*这里是武器的位置*/, power/*击飞的力量,推荐0.6左右*/, entity/*这是玩家……*/) {// hit fly
entity.velocity = new Box3Vector3(
(entity.position.x - center.x) * power,
(entity.position.y - center.y) * power,
(entity.position.z - center.z) * power
)
}
//调用轩的爆炸特效
async function destroy(shell/*这是武器实体作为参数*/, e/*这是玩家实体作为参数*/, hu/*这里是爆炸伤害*/ , xx/*这里是爆炸范围,推荐5*/) { //首先定义一个函数,也就是承接爆炸特效
for (let i = 3; i > 0; i--) { //主冲击波生成3个
const texiao = world.createEntity({
mesh: 'mesh/火球.vb', //这里用的是“mesh/炮弹.vb”模型,在你的图中自行调整
position: shell.position,
fixed: true,
gravity: false,
meshEmissive:1,
collides: false,
meshScale: [0.5, 0.5, 0.5],
particleLifetime: 0.5,
particleLimit: 100,
particleRate: 100,
particleSize: [5, 4, 3, 2, 1],
particleColor: new Box3RGBColor(1, 0, 0),
meshColor: new Box3RGBColor(1, 0.2, 0),
meshEmissive: 0.1,
meshShininess: 1,
meshMetalness: 100,
})
texiao.addTag(e.player.name + '爆炸') //给主冲击波实体添加玩家标签
}
for (let i = 10; i > 0; i--) { //火花生成10个
const texiao2 = world.createEntity({
mesh: 'mesh/球形炮弹.vb', //这里用的是“mesh/炮弹.vb”模型,在你的图中自行调整
position: shell.position,
fixed: false,
meshEmissive:1,
gravity: true, //火花要允许下落,以便设置速度后自动向下滑行
collides: false,
meshScale: [0.001, 0.001, 0.001],
particleLifetime: 0.5,
particleLimit: 100,
particleRate: 100,
particleSize: [2, 1.8, 1.6, 1.4, 1.2],
particleColor: new Box3RGBColor(0.5, 0.2, 0),
meshColor: new Box3RGBColor(1, 0.2, 0),
})
texiao2.addTag(e.player.name + '火花') //给火花实体添加玩家标签
texiao2.velocity.set(Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1) //给火花实体设置速度
}
for (const pl of world.querySelectorAll('player')) {
if (pl.position.distance(shell.position) <= xx) {
hit_fly(shell.position, 0.57, pl)
if (pl == e) {
continue
}
pl.hurt(hu, {
attacker: e
})//pl.position.distance(shell.position)
}
}
const start_tick = world.currentTick //记录特效开始的时刻
while (world.currentTick - start_tick < 10) { //若当前时刻-开始时刻 小于10(也就是特效还没结束),则一直执行循环中的代码
world.querySelectorAll('.' + e.player.name + '爆炸').forEach(async (texiao) => { //获取此玩家造成的所有主冲击波实体
texiao.velocity.set(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5) //随机速度
texiao.meshScale.x -= 0.02 //减小x缩放
texiao.meshScale.z -= 0.02 //减小z缩放
texiao.meshScale.y -= 0.02 //减小y缩放
})
await sleep(100)
}
//若当前时刻-开始时刻 大于或等于10(也就是特效结束了),跳出上方循环,执行下方代码
world.querySelectorAll('.' + e.player.name + '爆炸').forEach((e) => { //获取此玩家造成的所有主冲击波实体
e.destroy() //删除实体
})
world.querySelectorAll('.' + e.player.name + '火花').forEach((e) => { //获取此玩家造成的所有火花实体
e.destroy() //删除实体
})
}
//我自己的代码()()
async function texiao2(entity, mesh, meshs, gravity, v, quat, hu, raycast, shi) {
if (entity.leng == false) {
return
}
const d = entity.player.facingDirection //玩家的朝向
const knife = world.createEntity({
mesh: mesh,
meshScale: meshs,
collides: true, // 开启碰撞
meshEmissive:1,
gravity: gravity, // 不受重力影响
position: entity.position, // 在玩家的位置生成飞刀
velocity: d.scale(v), // 飞刀的初速度是玩家朝向向量的2倍
meshOrientation: quat.rotateX(Math.atan2(raycast.direction.y, Math.sqrt(raycast.direction.x ** 2 + raycast.direction.z ** 2))).rotateY(Math.atan2(raycast.direction.z, raycast.direction.x))//这里是神奇的旋转) // 刀头指向玩家的朝向
})
knife.id = entity.player.userKey //将小刀的id设置成玩家userKey, 便于碰撞过滤器识别
knife.velocity.x = raycast.direction.x * v
knife.velocity.y = raycast.direction.y * v
knife.velocity.z = raycast.direction.z * v
entity.velocity.x = -raycast.direction.x * 0.155/*后坐力*/
entity.velocity.z = -raycast.direction.z * 0.155
knife.onEntityContact(({ other }) => {//每当飞刀碰到另一个实体
other.hurt(hu, {
attacker: entity
})//被碰实体受10点伤害
knife.destroy()//清除飞刀, 防止飞刀数量太多超过服务器负载
destroy(knife, entity, hu / 20, 5) //轩的爆炸特效
})
knife.onVoxelContact(({ voxel, x, y, z }) => {//每当飞刀碰到另一个方块
voxels.setVoxel(x, y, z, 0)
knife.destroy()//清除飞刀, 防止飞刀数量太多超过服务器负载
destroy(knife, entity, hu / 20, 5) //还是轩的爆炸特效
})
entity.leng = false
await sleep(shi)
entity.leng = true
}
/*
注意,texiao2中的形参含义:
entity:玩家的实体
mesh:武器的………………mesh(doge)
meshs:武器的大小?
gravity:是否受到重力影响?(是:true;否:false)
v:武器的速度?
quat:武器的旋转?
hu:伤害?
raycast:管那么多干啥,填raycast就好了()()()
shi:武器的CD………………(单位是毫秒)
*/
//调用函数(这里只举一个例子!!!)
world.onPlayerJoin(async/*这个async可以不用填在这里……*/({entity})=>{
entity.leng = true //这个代码不能删!!!
entity.enableDamage = true //开启伤害()()
entity.player.onPress(async({button,raycast})=>{
if(button == Box3ButtonType.ACTION0){
texiao2(entity, 'mesh/子弹.vb', [1 / 16, 1 / 16, 1 / 16], false, 4, new Box3Quaternion(0, 0, 0, 1), 10, raycast, 1)
}
})
})
//喵亡复活我就不写了,反正你们都会
//排版不要没啊!!!!!!
DebugDynamo喜欢的给个关注 不喜欢的不要喷 imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"
点赞1
评论
沙拉黄//我自己的代码()()
async function texiao2(entity, mesh, meshs, gravity, v, quat, hu, raycast, shi) {
if (entity.leng == false) {
return
}
function后面忘记加};了,害我找了好久。。。。。。。。。
点赞0
评论
未名用户imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"
点赞0
评论