mirror of
https://github.com/danbulant/flying-squid
synced 2026-07-03 10:10:40 +00:00
fix entity dying, add /killall commands, add entity.takeDamage method, remove despawnPlayers (same as despawnEntities)
This commit is contained in:
parent
959100ef7d
commit
c34ebb1f5e
3 changed files with 48 additions and 36 deletions
14
doc/API.md
14
doc/API.md
|
|
@ -84,6 +84,7 @@
|
||||||
- [entity.getNearby()](#entitygetnearby)
|
- [entity.getNearby()](#entitygetnearby)
|
||||||
- [entity.getNearbyPlayers()](#entitygetnearbyplayers)
|
- [entity.getNearbyPlayers()](#entitygetnearbyplayers)
|
||||||
- [entity.nearbyPlayers()](#entitynearbyplayers)
|
- [entity.nearbyPlayers()](#entitynearbyplayers)
|
||||||
|
- [entity.takeDamage({sound='game.player.hurt', damage=1, velocity=new Vec3(0,0,0), maxVelocity=new Vec3(4, 4, 4), animation=true})](#entitytakedamagesoundgameplayerhurt-damage1-velocitynew-vec3000-maxvelocitynew-vec34-4-4-animationtrue)
|
||||||
- [Low level Methods](#low-level-methods)
|
- [Low level Methods](#low-level-methods)
|
||||||
- [entity._writeOthers(packetName, packetFields)](#entity_writeotherspacketname-packetfields)
|
- [entity._writeOthers(packetName, packetFields)](#entity_writeotherspacketname-packetfields)
|
||||||
- [entity._writeOthersNearby(packetName, packetFields)](#entity_writeothersnearbypacketname-packetfields)
|
- [entity._writeOthersNearby(packetName, packetFields)](#entity_writeothersnearbypacketname-packetfields)
|
||||||
|
|
@ -129,7 +130,6 @@
|
||||||
- [player.updateHealth(health)](#playerupdatehealthhealth)
|
- [player.updateHealth(health)](#playerupdatehealthhealth)
|
||||||
- [player.changeWorld(world, opt)](#playerchangeworldworld-opt)
|
- [player.changeWorld(world, opt)](#playerchangeworldworld-opt)
|
||||||
- [player.spawnAPlayer(spawnedPlayer)](#playerspawnaplayerspawnedplayer)
|
- [player.spawnAPlayer(spawnedPlayer)](#playerspawnaplayerspawnedplayer)
|
||||||
- [player.despawnPlayers(despawnedPlayers)](#playerdespawnplayersdespawnedplayers)
|
|
||||||
- [player.updateAndSpawnNearbyPlayers()](#playerupdateandspawnnearbyplayers)
|
- [player.updateAndSpawnNearbyPlayers()](#playerupdateandspawnnearbyplayers)
|
||||||
- [player.playSound(sound, opt)](#playerplaysoundsound-opt)
|
- [player.playSound(sound, opt)](#playerplaysoundsound-opt)
|
||||||
- [Low level properties](#low-level-properties)
|
- [Low level properties](#low-level-properties)
|
||||||
|
|
@ -575,6 +575,14 @@ Gets all nearby players regardless of what client thinks
|
||||||
|
|
||||||
Gets all nearby players that client can see
|
Gets all nearby players that client can see
|
||||||
|
|
||||||
|
#### entity.takeDamage({sound='game.player.hurt', damage=1, velocity=new Vec3(0,0,0), maxVelocity=new Vec3(4, 4, 4), animation=true})
|
||||||
|
|
||||||
|
* sound: Sound to play (default is game.player.hurt)
|
||||||
|
* damage: Damage to deal (default is based off player's weapon, player's potions, attackEntity's potions, and attackedEntity armor)
|
||||||
|
* velocity: Which way should attackedEntity move when hit
|
||||||
|
* maxVelocity: maxVelocity from consecutive hits
|
||||||
|
* animation: Play death/hit animation
|
||||||
|
|
||||||
### Low level Methods
|
### Low level Methods
|
||||||
|
|
||||||
#### entity._writeOthers(packetName, packetFields)
|
#### entity._writeOthers(packetName, packetFields)
|
||||||
|
|
@ -860,10 +868,6 @@ The world object which the player is in (use serv.overworld, serv.netherworld, s
|
||||||
|
|
||||||
Spawn `spawnedPlayer` for `player`.
|
Spawn `spawnedPlayer` for `player`.
|
||||||
|
|
||||||
#### player.despawnPlayers(despawnedPlayers)
|
|
||||||
|
|
||||||
Despawn `despawnedPlayers` for `player`.
|
|
||||||
|
|
||||||
#### player.updateAndSpawnNearbyPlayers()
|
#### player.updateAndSpawnNearbyPlayers()
|
||||||
|
|
||||||
Spawn and despawn the correct players depending on distance for `player`.
|
Spawn and despawn the correct players depending on distance for `player`.
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,5 @@
|
||||||
module.exports.player=function(player,serv)
|
module.exports.player=function(player,serv)
|
||||||
{
|
{
|
||||||
player.despawnPlayers = despawnedPlayers => {
|
|
||||||
player._client.write('entity_destroy', {
|
|
||||||
'entityIds': despawnedPlayers.map(p => p.id)
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
player.despawnEntities = entities => player._client.write('entity_destroy', {
|
player.despawnEntities = entities => player._client.write('entity_destroy', {
|
||||||
'entityIds': entities.map(e => e.id)
|
'entityIds': entities.map(e => e.id)
|
||||||
});
|
});
|
||||||
|
|
@ -19,7 +13,7 @@ module.exports.player=function(player,serv)
|
||||||
UUID: player._client.uuid
|
UUID: player._client.uuid
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
player.nearbyPlayers().forEach(otherPlayer => otherPlayer.despawnPlayers([player]));
|
player.nearbyPlayers().forEach(otherPlayer => otherPlayer.despawnEntities([player]));
|
||||||
delete serv.entities[player.id];
|
delete serv.entities[player.id];
|
||||||
player.emit('disconnected');
|
player.emit('disconnected');
|
||||||
var index = serv.players.indexOf(player);
|
var index = serv.players.indexOf(player);
|
||||||
|
|
|
||||||
|
|
@ -19,29 +19,8 @@ module.exports.player=function(player,serv)
|
||||||
|
|
||||||
player.behavior('attack', {
|
player.behavior('attack', {
|
||||||
attackedEntity: attackedEntity,
|
attackedEntity: attackedEntity,
|
||||||
sound: 'game.player.hurt',
|
velocity: attackedEntity.position.minus(player.position).plus(new Vec3(0, 0.5, 0)).scaled(5)
|
||||||
playSound: true,
|
}, (o) => o.attackedEntity.takeDamage(o));
|
||||||
damage: 1,
|
|
||||||
velocity: attackedEntity.position.minus(player.position).plus(new Vec3(0, 0.5, 0)).scaled(5),
|
|
||||||
maxVelocity: new Vec3(4, 4, 4),
|
|
||||||
animation: true
|
|
||||||
}, ({attackedEntity, sound, damage, velocity, maxVelocity, animation}) => {
|
|
||||||
attackedEntity.updateHealth(attackedEntity.health - damage);
|
|
||||||
serv.playSound(sound, player.world, attackedEntity.position.scaled(1/32));
|
|
||||||
|
|
||||||
attackedEntity.sendVelocity(velocity.scaled(1/32), maxVelocity);
|
|
||||||
|
|
||||||
if(attackedEntity.health<=0 && animation)
|
|
||||||
attackedEntity._writeOthers('entity_status',{
|
|
||||||
entityId:attackedEntity.id,
|
|
||||||
entityStatus:3
|
|
||||||
});
|
|
||||||
else if (animation)
|
|
||||||
attackedEntity._writeOthers('animation',{
|
|
||||||
entityId:attackedEntity.id,
|
|
||||||
animation:1
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player._client.on("use_entity", ({mouse,target} = {}) => {
|
player._client.on("use_entity", ({mouse,target} = {}) => {
|
||||||
|
|
@ -49,10 +28,45 @@ module.exports.player=function(player,serv)
|
||||||
attackEntity(target);
|
attackEntity(target);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
player.commands.add({
|
||||||
|
base: 'killall',
|
||||||
|
info: 'Kill everything',
|
||||||
|
usage: '/killall',
|
||||||
|
action() {
|
||||||
|
Object.keys(serv.entities).forEach(key => serv.entities[key].takeDamage({damage:20}));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.entity=function(entity)
|
module.exports.entity=function(entity,serv)
|
||||||
{
|
{
|
||||||
|
entity.takeDamage=({sound='game.player.hurt', damage=1, velocity=new Vec3(0,0,0), maxVelocity=new Vec3(4, 4, 4), animation=true}) => {
|
||||||
|
entity.updateHealth(entity.health - damage);
|
||||||
|
serv.playSound(sound, entity.world, entity.position.scaled(1/32));
|
||||||
|
|
||||||
|
entity.sendVelocity(velocity.scaled(1/32), maxVelocity);
|
||||||
|
|
||||||
|
if(entity.health<=0 && animation) {
|
||||||
|
entity._writeOthers('entity_status', {
|
||||||
|
entityId: entity.id,
|
||||||
|
entityStatus: 3
|
||||||
|
});
|
||||||
|
if(entity.type!="player") {
|
||||||
|
delete serv.entities[entity.id];
|
||||||
|
setTimeout(() => {
|
||||||
|
entity.nearbyPlayers().forEach(otherPlayer => otherPlayer.despawnEntities([entity]));
|
||||||
|
},2000);
|
||||||
|
// this is the duration of the despawning animation, it should change for every entity (see EnderDragon)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (animation)
|
||||||
|
entity._writeOthers('animation',{
|
||||||
|
entityId:entity.id,
|
||||||
|
animation:1
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
if (entity.type != 'player') {
|
if (entity.type != 'player') {
|
||||||
entity.updateHealth = (health) => {
|
entity.updateHealth = (health) => {
|
||||||
entity.health = health;
|
entity.health = health;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue