hytopia 0.3.6 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/boilerplate/assets/map.json +191 -43
- package/docs/server.playercameramode.md +14 -0
- package/examples/hygrounds/README.md +0 -0
- package/examples/hygrounds/assets/audio/sfx/chest-open-1.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/chest-open-2.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/machine-gun-reload.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/machine-gun-shoot.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/medpack-consume.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/mining-drill-drilling.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/pistol-reload.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/pistol-shoot.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/player-hurt.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/potion-consume.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/rifle-reload.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/rifle-shoot.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/rocket-launcher-explosion.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/rocket-launcher-reload.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/rocket-launcher-shoot.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/shield.png +0 -0
- package/examples/hygrounds/assets/audio/sfx/shotgun-reload.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/shotgun-shoot.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/sniper-reload.mp3 +0 -0
- package/examples/hygrounds/assets/audio/sfx/sniper-shoot.mp3 +0 -0
- package/examples/hygrounds/assets/icons/ak-47.png +0 -0
- package/examples/hygrounds/assets/icons/ammo.png +0 -0
- package/examples/hygrounds/assets/icons/auto-shotgun.png +0 -0
- package/examples/hygrounds/assets/icons/auto-sniper.png +0 -0
- package/examples/hygrounds/assets/icons/block.png +0 -0
- package/examples/hygrounds/assets/icons/bolt-action-sniper.png +0 -0
- package/examples/hygrounds/assets/icons/crown-bronze.png +0 -0
- package/examples/hygrounds/assets/icons/crown-gold.png +0 -0
- package/examples/hygrounds/assets/icons/crown-silver.png +0 -0
- package/examples/hygrounds/assets/icons/gravity-potion.png +0 -0
- package/examples/hygrounds/assets/icons/heart.png +0 -0
- package/examples/hygrounds/assets/icons/light-machine-gun.png +0 -0
- package/examples/hygrounds/assets/icons/medpack.png +0 -0
- package/examples/hygrounds/assets/icons/mining-drill.png +0 -0
- package/examples/hygrounds/assets/icons/pickaxe.png +0 -0
- package/examples/hygrounds/assets/icons/pistol.png +0 -0
- package/examples/hygrounds/assets/icons/revolver.png +0 -0
- package/examples/hygrounds/assets/icons/rocket-launcher.png +0 -0
- package/examples/hygrounds/assets/icons/shield-potion.png +0 -0
- package/examples/hygrounds/assets/icons/shield.png +0 -0
- package/examples/hygrounds/assets/icons/shotgun.png +0 -0
- package/examples/hygrounds/assets/icons/submachine-gun.png +0 -0
- package/examples/hygrounds/assets/map.json +31796 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion/explosion-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion/explosion.glb +0 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion/explosion.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion-2/explosion-2-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion-2/explosion-2.glb +0 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion-2/explosion-2.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion-3/explosion-3-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion-3/explosion-3.glb +0 -0
- package/examples/hygrounds/assets/models/environment/.optimized/explosion-3/explosion-3.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/environment/.optimized/helicopter/helicopter-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/environment/.optimized/helicopter/helicopter.glb +0 -0
- package/examples/hygrounds/assets/models/environment/.optimized/helicopter/helicopter.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/environment/chest.gltf +1 -0
- package/examples/hygrounds/assets/models/environment/explosion.glb +0 -0
- package/examples/hygrounds/assets/models/environment/muzzle-flash.gltf +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/medkit/medkit-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/medkit/medkit.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/medkit/medkit.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/medpack/medpack-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/medpack/medpack.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/medpack/medpack.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/mining-drill/mining-drill-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/mining-drill/mining-drill.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/mining-drill/mining-drill.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/rocket-missile/rocket-missile-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/rocket-missile/rocket-missile.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/rocket-missile/rocket-missile.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/shield-potion/shield-potion-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/shield-potion/shield-potion.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/shield-potion/shield-potion.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/shield-potion-2/shield-potion-2-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/shield-potion-2/shield-potion-2.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/shield-potion-2/shield-potion-2.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/ak-47.glb +0 -0
- package/examples/hygrounds/assets/models/items/auto-shotgun.glb +0 -0
- package/examples/hygrounds/assets/models/items/auto-sniper.glb +0 -0
- package/examples/hygrounds/assets/models/items/bolt-action-sniper.glb +0 -0
- package/examples/hygrounds/assets/models/items/gravity-potion.glb +0 -0
- package/examples/hygrounds/assets/models/items/light-machine-gun.glb +0 -0
- package/examples/hygrounds/assets/models/items/medpack.glb +0 -0
- package/examples/hygrounds/assets/models/items/mining-drill.glb +0 -0
- package/examples/hygrounds/assets/models/items/pickaxe.gltf +1 -0
- package/examples/hygrounds/assets/models/items/pistol.glb +0 -0
- package/examples/hygrounds/assets/models/items/revolver.glb +0 -0
- package/examples/hygrounds/assets/models/items/rocket-launcher.glb +0 -0
- package/examples/hygrounds/assets/models/items/rocket-missile.glb +0 -0
- package/examples/hygrounds/assets/models/items/shield-potion.glb +0 -0
- package/examples/hygrounds/assets/models/items/shotgun.glb +0 -0
- package/examples/hygrounds/assets/models/items/submachine-gun.glb +0 -0
- package/examples/hygrounds/assets/models/players/soldier-player.gltf +1 -0
- package/examples/hygrounds/assets/ui/images/scope.png +0 -0
- package/examples/hygrounds/assets/ui/index.html +1122 -0
- package/examples/hygrounds/bun.lock +503 -0
- package/examples/hygrounds/classes/ChestEntity.ts +133 -0
- package/examples/hygrounds/classes/GameManager.ts +422 -0
- package/examples/hygrounds/classes/GamePlayerEntity.ts +595 -0
- package/examples/hygrounds/classes/GunEntity.ts +259 -0
- package/examples/hygrounds/classes/ItemEntity.ts +225 -0
- package/examples/hygrounds/classes/ItemFactory.ts +61 -0
- package/examples/hygrounds/classes/MeleeWeaponEntity.ts +138 -0
- package/examples/hygrounds/classes/TerrainDamageManager.ts +56 -0
- package/examples/hygrounds/classes/items/GravityPotionEntity.ts +48 -0
- package/examples/hygrounds/classes/items/MedPackEntity.ts +43 -0
- package/examples/hygrounds/classes/items/ShieldPotionEntity.ts +43 -0
- package/examples/hygrounds/classes/weapons/AK47Entity.ts +43 -0
- package/examples/hygrounds/classes/weapons/AutoShotgunEntity.ts +80 -0
- package/examples/hygrounds/classes/weapons/AutoSniperEntity.ts +43 -0
- package/examples/hygrounds/classes/weapons/BoltActionSniperEntity.ts +46 -0
- package/examples/hygrounds/classes/weapons/LightMachineGunEntity.ts +43 -0
- package/examples/hygrounds/classes/weapons/MiningDrillEntity.ts +38 -0
- package/examples/hygrounds/classes/weapons/PickaxeEntity.ts +38 -0
- package/examples/hygrounds/classes/weapons/PistolEntity.ts +46 -0
- package/examples/hygrounds/classes/weapons/RevolverEntity.ts +46 -0
- package/examples/hygrounds/classes/weapons/RocketLauncherEntity.ts +195 -0
- package/examples/hygrounds/classes/weapons/ShotgunEntity.ts +84 -0
- package/examples/hygrounds/classes/weapons/SubmachineGunEntity.ts +43 -0
- package/examples/hygrounds/gameConfig.ts +430 -0
- package/examples/hygrounds/index.ts +41 -0
- package/examples/hygrounds/package.json +16 -0
- package/examples/player-persistence/README.md +3 -0
- package/examples/player-persistence/assets/map.json +2623 -0
- package/examples/player-persistence/dev/persistence/player-player-1.json +6 -0
- package/examples/player-persistence/dev/persistence/test.json +3 -0
- package/examples/player-persistence/index.ts +126 -0
- package/examples/player-persistence/package.json +16 -0
- package/package.json +1 -1
- package/server.api.json +21 -0
- package/server.d.ts +2 -1
- package/server.js +113 -113
@@ -0,0 +1,126 @@
|
|
1
|
+
import {
|
2
|
+
startServer,
|
3
|
+
PlayerEntity,
|
4
|
+
PlayerEvent,
|
5
|
+
Player,
|
6
|
+
PersistenceManager,
|
7
|
+
} from 'hytopia';
|
8
|
+
|
9
|
+
import worldMap from './assets/map.json';
|
10
|
+
|
11
|
+
startServer(world => {
|
12
|
+
world.loadMap(worldMap);
|
13
|
+
|
14
|
+
// Handle player join
|
15
|
+
world.on(PlayerEvent.JOINED_WORLD, ({ player }) => {
|
16
|
+
const playerEntity = new PlayerEntity({
|
17
|
+
player,
|
18
|
+
name: 'Player',
|
19
|
+
modelUri: 'models/players/player.gltf',
|
20
|
+
modelLoopedAnimations: ['idle'],
|
21
|
+
modelScale: 0.5,
|
22
|
+
});
|
23
|
+
|
24
|
+
playerEntity.spawn(world, { x: 0, y: 10, z: 0 });
|
25
|
+
|
26
|
+
help(player);
|
27
|
+
});
|
28
|
+
|
29
|
+
// Handle player leave
|
30
|
+
world.on(PlayerEvent.LEFT_WORLD, ({ player }) => {
|
31
|
+
world.entityManager.getPlayerEntitiesByPlayer(player).forEach(entity => entity.despawn());
|
32
|
+
});
|
33
|
+
|
34
|
+
// Command definitions with help text
|
35
|
+
type Command = {
|
36
|
+
command: string;
|
37
|
+
description: string;
|
38
|
+
args?: string;
|
39
|
+
handler: (player: Player, args: string[]) => void;
|
40
|
+
};
|
41
|
+
|
42
|
+
const commands: Record<string, Command> = {
|
43
|
+
help: {
|
44
|
+
command: '/help',
|
45
|
+
description: 'Shows all available commands',
|
46
|
+
handler: (player: Player) => help(player),
|
47
|
+
},
|
48
|
+
whoami: {
|
49
|
+
command: '/whoami',
|
50
|
+
description: 'Shows your username and ID',
|
51
|
+
handler: (player: Player) => {
|
52
|
+
sendMessage(player, `You are ${player.username} | Your ID is ${player.id}`);
|
53
|
+
}
|
54
|
+
},
|
55
|
+
setPlayerKeyValue: {
|
56
|
+
command: '/setplayerkeyvalue',
|
57
|
+
description: 'Sets a player state key with a string value',
|
58
|
+
args: '<key> <value>',
|
59
|
+
handler: (player: Player, args: string[]) => {
|
60
|
+
const [key, ...value] = args;
|
61
|
+
if (!key || value.length === 0) return sendMessage(player, 'Usage: /setplayerkeyvalue <key> <value>', 'FF0000');
|
62
|
+
|
63
|
+
player.setPersistedData({ [key]: value.join(' ') });
|
64
|
+
sendMessage(player, `Set player state: ${key} = ${value.join(' ')}`);
|
65
|
+
}
|
66
|
+
},
|
67
|
+
setPlayerKeyJson: {
|
68
|
+
command: '/setplayerkeyjson',
|
69
|
+
description: 'Sets a player state key with a JSON value',
|
70
|
+
args: '<key> <json>',
|
71
|
+
handler: (player: Player, args: string[]) => {
|
72
|
+
const [key, ...value] = args;
|
73
|
+
if (!key || value.length === 0) return sendMessage(player, 'Usage: /setplayerkeyjson <key> <json>', 'FF0000');
|
74
|
+
|
75
|
+
try {
|
76
|
+
const jsonValue = JSON.parse(value.join(' '));
|
77
|
+
player.setPersistedData({ [key]: jsonValue });
|
78
|
+
sendMessage(player, `Set player state: ${key} = ${JSON.stringify(jsonValue)}`);
|
79
|
+
} catch (e) {
|
80
|
+
sendMessage(player, 'Invalid JSON value', 'FF0000');
|
81
|
+
}
|
82
|
+
}
|
83
|
+
},
|
84
|
+
getPlayerState: {
|
85
|
+
command: '/getplayerstate',
|
86
|
+
description: 'Gets all player state',
|
87
|
+
handler: async (player: Player) => {
|
88
|
+
const value = await player.getPersistedData();
|
89
|
+
sendMessage(player, `Player state: ${JSON.stringify(value, null, 2)}`);
|
90
|
+
}
|
91
|
+
},
|
92
|
+
deletePlayerKey: {
|
93
|
+
command: '/deleteplayerkey',
|
94
|
+
description: 'Deletes a player state key',
|
95
|
+
args: '<key>',
|
96
|
+
handler: (player: Player, args: string[]) => {
|
97
|
+
const [key] = args;
|
98
|
+
if (!key) return sendMessage(player, 'Usage: /deleteplayerkey <key>', 'FF0000');
|
99
|
+
|
100
|
+
player.setPersistedData({ [key]: undefined });
|
101
|
+
sendMessage(player, `Deleted player state key: ${key}`);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
};
|
105
|
+
|
106
|
+
// Helper function for sending messages
|
107
|
+
function sendMessage(player: Player, message: string, color = '00FF00') {
|
108
|
+
world.chatManager.sendPlayerMessage(player, message, color);
|
109
|
+
}
|
110
|
+
|
111
|
+
// Register all commands
|
112
|
+
Object.values(commands).forEach(({ command, handler }) => {
|
113
|
+
world.chatManager.registerCommand(command, handler);
|
114
|
+
});
|
115
|
+
|
116
|
+
// Help command implementation
|
117
|
+
function help(player: Player) {
|
118
|
+
sendMessage(player, '=== Available Commands ===');
|
119
|
+
Object.values(commands).forEach(cmd => {
|
120
|
+
const usage = cmd.args ? `${cmd.command} ${cmd.args}` : cmd.command;
|
121
|
+
sendMessage(player, `${usage}`);
|
122
|
+
sendMessage(player, ` ${cmd.description}`);
|
123
|
+
sendMessage(player, '---');
|
124
|
+
});
|
125
|
+
}
|
126
|
+
});
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"name": "payload-game",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"description": "",
|
5
|
+
"main": "index.js",
|
6
|
+
"scripts": {
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
8
|
+
},
|
9
|
+
"keywords": [],
|
10
|
+
"author": "",
|
11
|
+
"license": "ISC",
|
12
|
+
"dependencies": {
|
13
|
+
"@hytopia.com/assets": "latest",
|
14
|
+
"hytopia": "latest"
|
15
|
+
}
|
16
|
+
}
|
package/package.json
CHANGED
package/server.api.json
CHANGED
@@ -26358,6 +26358,27 @@
|
|
26358
26358
|
"releaseTag": "Public",
|
26359
26359
|
"name": "FIRST_PERSON"
|
26360
26360
|
},
|
26361
|
+
{
|
26362
|
+
"kind": "EnumMember",
|
26363
|
+
"canonicalReference": "server!PlayerCameraMode.SPECTATOR:member",
|
26364
|
+
"docComment": "",
|
26365
|
+
"excerptTokens": [
|
26366
|
+
{
|
26367
|
+
"kind": "Content",
|
26368
|
+
"text": "SPECTATOR = "
|
26369
|
+
},
|
26370
|
+
{
|
26371
|
+
"kind": "Content",
|
26372
|
+
"text": "2"
|
26373
|
+
}
|
26374
|
+
],
|
26375
|
+
"initializerTokenRange": {
|
26376
|
+
"startIndex": 1,
|
26377
|
+
"endIndex": 2
|
26378
|
+
},
|
26379
|
+
"releaseTag": "Public",
|
26380
|
+
"name": "SPECTATOR"
|
26381
|
+
},
|
26361
26382
|
{
|
26362
26383
|
"kind": "EnumMember",
|
26363
26384
|
"canonicalReference": "server!PlayerCameraMode.THIRD_PERSON:member",
|
package/server.d.ts
CHANGED
@@ -3367,7 +3367,8 @@ export declare interface PlayerCameraEventPayloads {
|
|
3367
3367
|
/** The mode of the camera. @public */
|
3368
3368
|
export declare enum PlayerCameraMode {
|
3369
3369
|
FIRST_PERSON = 0,
|
3370
|
-
THIRD_PERSON = 1
|
3370
|
+
THIRD_PERSON = 1,
|
3371
|
+
SPECTATOR = 2
|
3371
3372
|
}
|
3372
3373
|
|
3373
3374
|
/** The camera orientation state of a Player. @public */
|