cluaupp 1.4.1 → 1.5.1
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/CHANGELOG.md +55 -0
- package/README.md +10 -5
- package/api/CHANGELOG.md +3 -0
- package/api/chat.js +74 -0
- package/api/fixtures/roblox/README.md +6 -0
- package/api/fixtures/roblox/aux/sample.d.luau +6 -0
- package/api/fixtures/roblox/mini/Mini-API-Dump.json +72 -0
- package/api/generated/bench-latest.json +39 -0
- package/api/generated/capability-profile.json +76 -0
- package/api/generated/lsp-index.json +1 -0
- package/api/generated/luau/classes.d.luau +11221 -0
- package/api/generated/luau/datatypes.d.luau +327 -0
- package/api/generated/luau/enums.d.luau +4918 -0
- package/api/generated/luau/globals.d.luau +12 -0
- package/api/manifests/roblox-target.manifest.json +22 -0
- package/api/normalized/roblox-target.profile.json +237461 -0
- package/api/overrides/classes.json +8 -0
- package/api/overrides/compatibility.json +9 -0
- package/api/overrides/datatypes.json +1579 -0
- package/api/overrides/enums.json +8 -0
- package/api/overrides/globals.json +8 -0
- package/api/overrides/type-mappings.json +9 -0
- package/api/roblox-api.lock.json +9 -0
- package/data/Mini-API-Dump.json +1 -0
- package/editors/vscode/README.md +19 -0
- package/editors/vscode/extension.js +222 -21
- package/editors/vscode/icons/axiom.svg +4 -0
- package/editors/vscode/icons/bloom.svg +5 -0
- package/editors/vscode/icons/flare.svg +5 -0
- package/editors/vscode/icons/helm.svg +4 -0
- package/editors/vscode/icons/hive.svg +5 -0
- package/editors/vscode/icons/mint.svg +4 -0
- package/editors/vscode/icons/shift.svg +6 -0
- package/editors/vscode/language-configuration-schema.json +24 -0
- package/editors/vscode/language-configuration.json +21 -0
- package/editors/vscode/package.json +220 -6
- package/editors/vscode/snippets/axiom.json +12 -0
- package/editors/vscode/snippets/bloom.json +12 -0
- package/editors/vscode/snippets/flare.json +27 -0
- package/editors/vscode/snippets/helm.json +12 -0
- package/editors/vscode/snippets/hive.json +12 -0
- package/editors/vscode/snippets/mint.json +12 -0
- package/editors/vscode/snippets/shift.json +17 -0
- package/editors/vscode/syntaxes/axiom.tmLanguage.json +5 -0
- package/editors/vscode/syntaxes/bloom.tmLanguage.json +5 -0
- package/editors/vscode/syntaxes/flare.tmLanguage.json +75 -0
- package/editors/vscode/syntaxes/helm.tmLanguage.json +5 -0
- package/editors/vscode/syntaxes/hive.tmLanguage.json +5 -0
- package/editors/vscode/syntaxes/mint.tmLanguage.json +5 -0
- package/editors/vscode/syntaxes/schema.tmLanguage.json +89 -0
- package/editors/vscode/syntaxes/shift.tmLanguage.json +5 -0
- package/examples/game/.cluaupp/compile-cache/ReplicatedStorage__Shared__Constants__Datas__TemplateData.clh.json +1 -0
- package/examples/game/.cluaupp/compile-cache/ServerScriptService__Boot__DataBoot.server.clpp.json +1 -0
- package/examples/game/.cluaupp/compile-cache/ServerScriptService__Configuration__ServerConfig.clp.json +1 -0
- package/examples/game/.cluaupp/compile-cache/ServerScriptService__Handlers__Guard.server.clpp.json +1 -0
- package/examples/game/.cluaupp/compile-cache/ServerScriptService__Handlers__PlayerHandler.server.clpp.json +1 -0
- package/examples/game/.cluaupp/compile-cache/StarterPlayer__StarterCharacterScripts__Character__CharacterReady.client.clpp.json +1 -0
- package/examples/game/.cluaupp/compile-cache/StarterPlayer__StarterPlayerScripts__Controllers__DataController.client.clpp.json +1 -0
- package/examples/game/.cluaupp/compile-cache/index.json +12 -0
- package/examples/game/.cluaupp/datamodel-profile.json +94 -0
- package/examples/game/.vscode/extensions.json +3 -1
- package/examples/game/.vscode/settings.json +13 -1
- package/examples/game/include/clpp/datatypes.clh +337 -373
- package/examples/game/include/clpp/generated/datamodel.clh +25 -0
- package/examples/game/include/clpp/generated/enums.clh +1 -1
- package/examples/game/include/clpp/generated/instances.clh +41135 -41064
- package/examples/game/include/clpp/libs/axiom.clh +1 -1
- package/examples/game/include/clpp/libs/math.clh +14 -0
- package/examples/game/include/clpp/libs/roster.clh +6 -0
- package/examples/game/include/clpp/libs/spring.clh +17 -0
- package/examples/game/include/clpp/libs/ward.clh +1 -0
- package/examples/game/include/clpp/roblox.clh +3 -4
- package/examples/game/libs/ArrayIndexer/init.luau +209 -0
- package/examples/game/libs/Axiom/init.luau +608 -0
- package/examples/game/libs/Bloom/init.luau +433 -0
- package/examples/game/libs/Coil/init.luau +215 -0
- package/examples/game/libs/Crest/init.luau +426 -0
- package/examples/game/libs/Echo/init.luau +417 -0
- package/examples/game/libs/Ember/init.luau +365 -0
- package/examples/game/libs/Flare/init.luau +717 -0
- package/examples/game/libs/Gleam/init.luau +729 -0
- package/examples/game/libs/Guide/init.luau +215 -0
- package/examples/game/libs/Helm/init.luau +377 -0
- package/examples/game/libs/Hive/init.luau +241 -0
- package/examples/game/libs/Keep/Client.luau +114 -0
- package/examples/game/libs/Keep/Data.luau +883 -0
- package/examples/game/libs/Keep/Engine.luau +211 -0
- package/examples/game/libs/Keep/Enum.luau +6 -0
- package/examples/game/libs/Keep/Enums.luau +10 -0
- package/examples/game/libs/Keep/Path.luau +236 -0
- package/examples/game/libs/Keep/Replicator.luau +298 -0
- package/examples/game/libs/Keep/Server.luau +251 -0
- package/examples/game/libs/Keep/Store.luau +652 -0
- package/examples/game/libs/Keep/Trade.luau +455 -0
- package/examples/game/libs/Keep/init.luau +205 -0
- package/examples/game/libs/Lens/init.luau +609 -0
- package/examples/game/libs/Mint/init.luau +279 -0
- package/examples/game/libs/Net/init.luau +156 -0
- package/examples/game/libs/Net/src/codec.luau +224 -0
- package/examples/game/libs/Occlude/init.luau +117 -0
- package/examples/game/libs/Pin/init.luau +309 -0
- package/examples/game/libs/Promise/LICENSE +21 -0
- package/examples/game/libs/Promise/_impl/LICENSE +21 -0
- package/examples/game/libs/Promise/_impl/init.lua +1991 -0
- package/examples/game/libs/Promise/init.lua +1990 -0
- package/examples/game/libs/Promise/init.luau +13 -0
- package/examples/game/libs/Promise/types.luau +46 -0
- package/examples/game/libs/Roster/init.luau +686 -0
- package/examples/game/libs/SOURCES.md +31 -0
- package/examples/game/libs/Shift/init.luau +238 -0
- package/examples/game/libs/Spark/init.luau +487 -0
- package/examples/game/libs/Stage/init.luau +178 -0
- package/examples/game/libs/Sweep/init.luau +259 -0
- package/examples/game/libs/Trace/init.luau +213 -0
- package/examples/game/libs/Ward/init.luau +211 -0
- package/examples/game/out/ReplicatedStorage/Shared/Constants/Datas/TemplateData.luau +29 -0
- package/examples/game/out/ReplicatedStorage/Shared/Constants/Datas/TemplateData.luau.map.json +13 -0
- package/examples/game/out/ReplicatedStorage/Shared/Net/Net.luau +83 -0
- package/examples/game/out/ReplicatedStorage/Shared/Net/Net.luau.map.json +13 -0
- package/examples/game/out/ServerScriptService/Boot/DataBoot.server.luau +18 -0
- package/examples/game/out/ServerScriptService/Boot/DataBoot.server.luau.map.json +13 -0
- package/examples/game/out/ServerScriptService/Configuration/ServerConfig.luau +14 -0
- package/examples/game/out/ServerScriptService/Configuration/ServerConfig.luau.map.json +13 -0
- package/examples/game/out/ServerScriptService/Handlers/Guard.server.luau +15 -0
- package/examples/game/out/ServerScriptService/Handlers/Guard.server.luau.map.json +13 -0
- package/examples/game/out/ServerScriptService/Handlers/PlayerHandler.server.luau +50 -0
- package/examples/game/out/ServerScriptService/Handlers/PlayerHandler.server.luau.map.json +13 -0
- package/examples/game/out/StarterPlayer/StarterCharacterScripts/Character/CharacterReady.client.luau +12 -0
- package/examples/game/out/StarterPlayer/StarterCharacterScripts/Character/CharacterReady.client.luau.map.json +13 -0
- package/examples/game/out/StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.luau +16 -0
- package/examples/game/out/StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.luau.map.json +13 -0
- package/examples/game/src/ReplicatedStorage/Shared/Net/Net.clh +26 -0
- package/examples/game/src/ReplicatedStorage/Shared/Net/Net.flare +5 -0
- package/examples/game/src/ServerScriptService/Boot/DataBoot.server.clpp +2 -2
- package/examples/game/src/ServerScriptService/Handlers/PlayerHandler.server.clpp +1 -1
- package/examples/game/stylua.toml +9 -0
- package/generated/api/build-profile.js +115 -0
- package/generated/api/cache.js +44 -0
- package/generated/api/coverage.js +32 -0
- package/generated/api/diff.js +125 -0
- package/generated/api/generators/clpp-headers.js +353 -0
- package/generated/api/generators/docs-reference.js +7 -0
- package/generated/api/generators/lsp-index.js +81 -0
- package/generated/api/generators/luau-defs.js +94 -0
- package/generated/api/ide.js +76 -0
- package/generated/api/identifier.js +47 -0
- package/generated/api/index.js +324 -0
- package/generated/api/loader.js +57 -0
- package/generated/api/merge.js +88 -0
- package/generated/api/model.js +5 -0
- package/generated/api/normalize.js +231 -0
- package/generated/api/overrides-validate.js +58 -0
- package/generated/api/perf.js +12 -0
- package/generated/api/registry.js +136 -0
- package/generated/api/release.js +44 -0
- package/generated/api/resolver.js +250 -0
- package/generated/api/sources/aux-types-diff.js +75 -0
- package/generated/api/sources/client-tracker.js +11 -0
- package/generated/api/sources/creator-docs.js +42 -0
- package/generated/api/sources/luau-types.js +34 -0
- package/generated/api/sources/mini-dump.js +17 -0
- package/generated/api/sources/studio-api.js +8 -0
- package/generated/api/sources/studio-apiv2.js +11 -0
- package/generated/api/sources/studio-full-api.js +8 -0
- package/generated/api/studio-smoke.js +80 -0
- package/generated/api/type-parse.js +49 -0
- package/generated/api/understander.js +51 -0
- package/generated/api/validate.js +135 -0
- package/generated/api-cli.js +421 -0
- package/generated/cli.js +17 -6
- package/generated/clpp/contract.js +3 -3
- package/generated/clpp/format-luau.js +236 -0
- package/generated/clpp/index.js +13 -1
- package/generated/clpp/modules.js +227 -0
- package/generated/clpp/postprocess.js +86 -5
- package/generated/clpp/rewrite-janitor.js +145 -0
- package/generated/clpp/runner.js +14 -2
- package/generated/compile.js +82 -0
- package/generated/flare/index.js +15 -3
- package/generated/flare/language.js +561 -0
- package/generated/flare/parse.js +19 -7
- package/generated/intellisense.js +76 -2
- package/generated/lsp.js +118 -7
- package/generated/native/index.js +217 -16
- package/generated/target/authority-check.js +136 -0
- package/generated/target/authority-graph.js +74 -0
- package/generated/target/build-cache.js +112 -0
- package/generated/target/capabilities.js +89 -0
- package/generated/target/capability-profile.js +30 -0
- package/generated/target/component-contracts.js +60 -0
- package/generated/target/context-check.js +160 -0
- package/generated/target/datamodel-check.js +170 -0
- package/generated/target/datamodel-generate.js +74 -0
- package/generated/target/datamodel.js +233 -0
- package/generated/target/diagnostics.js +63 -0
- package/generated/target/doctor.js +152 -0
- package/generated/target/flare-version.js +58 -0
- package/generated/target/get-service.js +69 -0
- package/generated/target/lifetime-check.js +47 -0
- package/generated/target/luau-stamp.js +39 -0
- package/generated/target/optimizer-advise.js +88 -0
- package/generated/target/optimizer-apply.js +44 -0
- package/generated/target/optimizer-soa.js +254 -0
- package/generated/target/parallel-check.js +136 -0
- package/generated/target/pgo.js +148 -0
- package/generated/target/project-docs.js +69 -0
- package/generated/target/project-graph.js +71 -0
- package/generated/target/roblox.js +63 -0
- package/generated/target/security-check.js +41 -0
- package/generated/target/source-map.js +25 -0
- package/generated/target/studio-bridge.js +112 -0
- package/generated/utils/project.js +178 -8
- package/generated/utils/rojo-mapper.js +11 -3
- package/include/clpp/datatypes.clh +337 -373
- package/include/clpp/generated/enums.clh +1 -1
- package/include/clpp/generated/instances.clh +41135 -41064
- package/include/clpp/libs/axiom.clh +1 -1
- package/include/clpp/libs/hive.clh +1 -0
- package/include/clpp/libs/keep.clh +2 -0
- package/include/clpp/libs/math.clh +14 -0
- package/include/clpp/libs/roster.clh +6 -0
- package/include/clpp/libs/spring.clh +17 -0
- package/include/clpp/libs/ward.clh +1 -0
- package/include/clpp/roblox.clh +3 -4
- package/package.json +10 -3
- package/plugins/CluauppNav/Plugin.luau +207 -0
- package/plugins/CluauppNav/ProfileLogger.luau +27 -0
- package/plugins/CluauppNav/README.md +24 -0
- package/runtime/Axiom/init.luau +10 -7
- package/runtime/Coil/init.luau +8 -2
- package/runtime/Crest/init.luau +1 -0
- package/runtime/Flare/init.luau +2 -1
- package/runtime/Gleam/init.luau +15 -4
- package/runtime/Hive/init.luau +36 -14
- package/runtime/Pin/init.luau +5 -2
- package/runtime/Roster/init.luau +8 -0
- package/runtime/Spark/init.luau +3 -0
- package/runtime/Sweep/init.luau +2 -0
- package/runtime/Trace/init.luau +3 -0
- package/runtime/Ward/init.luau +38 -5
- package/scripts/postinstall-editor.js +17 -0
- package/skills/README.md +13 -0
- package/skills/clpp-hive-flare/SKILL.md +79 -0
- package/skills/clpp-language/SKILL.md +123 -0
- package/skills/clpp-language/compiler.md +89 -0
- package/skills/clpp-style/SKILL.md +95 -0
- package/src/api/build-profile.ts +138 -0
- package/src/api/cache.ts +45 -0
- package/src/api/coverage.ts +46 -0
- package/src/api/diff.ts +143 -0
- package/src/api/generators/clpp-headers.ts +377 -0
- package/src/api/generators/docs-reference.ts +11 -0
- package/src/api/generators/lsp-index.ts +106 -0
- package/src/api/generators/luau-defs.ts +98 -0
- package/src/api/ide.ts +87 -0
- package/src/api/identifier.ts +47 -0
- package/src/api/index.ts +269 -0
- package/src/api/loader.ts +60 -0
- package/src/api/merge.ts +126 -0
- package/src/api/model.ts +283 -0
- package/src/api/normalize.ts +257 -0
- package/src/api/overrides-validate.ts +58 -0
- package/src/api/perf.ts +15 -0
- package/src/api/registry.ts +162 -0
- package/src/api/release.ts +47 -0
- package/src/api/resolver.ts +255 -0
- package/src/api/sources/aux-types-diff.ts +81 -0
- package/src/api/sources/client-tracker.ts +10 -0
- package/src/api/sources/creator-docs.ts +37 -0
- package/src/api/sources/luau-types.ts +30 -0
- package/src/api/sources/mini-dump.ts +50 -0
- package/src/api/sources/studio-api.ts +7 -0
- package/src/api/sources/studio-apiv2.ts +10 -0
- package/src/api/sources/studio-full-api.ts +7 -0
- package/src/api/studio-smoke.ts +82 -0
- package/src/api/type-parse.ts +48 -0
- package/src/api/understander.ts +72 -0
- package/src/api/validate.ts +160 -0
- package/src/api-cli.ts +493 -0
- package/src/api.generated.js +37 -22
- package/src/cli.ts +22 -7
- package/src/clpp/contract.ts +34 -3
- package/src/clpp/format-luau.ts +262 -0
- package/src/clpp/index.ts +13 -2
- package/src/clpp/modules.ts +252 -0
- package/src/clpp/postprocess.ts +100 -5
- package/src/clpp/rewrite-janitor.ts +156 -0
- package/src/clpp/runner.ts +14 -2
- package/src/compile.ts +87 -0
- package/src/flare/index.ts +20 -1
- package/src/flare/language.ts +708 -0
- package/src/flare/parse.ts +20 -7
- package/src/flare/types.ts +2 -0
- package/src/intellisense.ts +76 -2
- package/src/lsp.ts +151 -8
- package/src/native/index.ts +225 -16
- package/src/target/authority-check.ts +162 -0
- package/src/target/authority-graph.ts +80 -0
- package/src/target/build-cache.ts +129 -0
- package/src/target/capabilities.ts +115 -0
- package/src/target/capability-profile.ts +25 -0
- package/src/target/component-contracts.ts +64 -0
- package/src/target/context-check.ts +177 -0
- package/src/target/datamodel-check.ts +188 -0
- package/src/target/datamodel-generate.ts +78 -0
- package/src/target/datamodel.ts +261 -0
- package/src/target/diagnostics.ts +67 -0
- package/src/target/doctor.ts +171 -0
- package/src/target/flare-version.ts +61 -0
- package/src/target/get-service.ts +85 -0
- package/src/target/lifetime-check.ts +45 -0
- package/src/target/luau-stamp.ts +33 -0
- package/src/target/optimizer-advise.ts +93 -0
- package/src/target/optimizer-apply.ts +63 -0
- package/src/target/optimizer-soa.ts +270 -0
- package/src/target/parallel-check.ts +135 -0
- package/src/target/pgo.ts +157 -0
- package/src/target/project-docs.ts +68 -0
- package/src/target/project-graph.ts +75 -0
- package/src/target/roblox.ts +78 -0
- package/src/target/security-check.ts +40 -0
- package/src/target/source-map.ts +36 -0
- package/src/target/studio-bridge.ts +140 -0
- package/src/types.ts +14 -0
- package/src/utils/project.ts +183 -9
- package/src/utils/rojo-mapper.ts +12 -3
- package/stylua.toml +9 -0
- package/templates/game/.vscode/extensions.json +3 -1
- package/templates/game/.vscode/settings.json +8 -1
- package/templates/game/include/clpp/datatypes.clh +337 -373
- package/templates/game/include/clpp/generated/enums.clh +1 -1
- package/templates/game/include/clpp/generated/instances.clh +41135 -41064
- package/templates/game/include/clpp/libs/axiom.clh +1 -1
- package/templates/game/include/clpp/libs/roster.clh +6 -0
- package/templates/game/include/clpp/libs/ward.clh +1 -0
- package/templates/game/include/clpp/roblox.clh +3 -4
- package/templates/game/src/ReplicatedStorage/Shared/Net/Net.flare +5 -0
- package/templates/game/src/ServerScriptService/Boot/DataBoot.server.clpp +2 -2
- package/templates/game/src/ServerScriptService/Handlers/PlayerHandler.server.clpp +1 -1
- package/templates/game/stylua.toml +9 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
--!native
|
|
2
|
+
--!optimize 2
|
|
3
|
+
--!strict
|
|
4
|
+
-- Ward — server anti-cheat primitives. Rate-limit remotes, cap packet size,
|
|
5
|
+
-- strike on speed/teleport. Does not write Keep; Keep stays server-only.
|
|
6
|
+
-- cluaupp: spawn grace / ignore falls / no Studio kick unless KickInStudio
|
|
7
|
+
|
|
8
|
+
local Players = game:GetService("Players")
|
|
9
|
+
local RunService = game:GetService("RunService")
|
|
10
|
+
|
|
11
|
+
local Spark = require(script.Parent.Spark)
|
|
12
|
+
|
|
13
|
+
local DEFAULT_KICK = 8
|
|
14
|
+
local DEFAULT_RATE = 40
|
|
15
|
+
local DEFAULT_BURST = 80
|
|
16
|
+
local MAX_PACKET = 24 * 1024
|
|
17
|
+
local MAX_SPEED = 220
|
|
18
|
+
local MAX_TELEPORT = 80
|
|
19
|
+
local SPAWN_GRACE = 3
|
|
20
|
+
local MIN_DT = 1 / 30
|
|
21
|
+
local FLOOD_AT = 80
|
|
22
|
+
|
|
23
|
+
local Ward = {}
|
|
24
|
+
Ward.OnStrike = Spark.new()
|
|
25
|
+
Ward.KickAt = DEFAULT_KICK
|
|
26
|
+
Ward.KickInStudio = false
|
|
27
|
+
Ward.FloodAt = FLOOD_AT
|
|
28
|
+
Ward.MaxPacketBytes = MAX_PACKET
|
|
29
|
+
Ward.MaxSpeed = MAX_SPEED
|
|
30
|
+
Ward.MaxTeleport = MAX_TELEPORT
|
|
31
|
+
|
|
32
|
+
type Bucket = {
|
|
33
|
+
tokens: number,
|
|
34
|
+
last: number,
|
|
35
|
+
maxPerSec: number,
|
|
36
|
+
burst: number,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type Record = {
|
|
40
|
+
strikes: number,
|
|
41
|
+
buckets: { [string]: Bucket },
|
|
42
|
+
lastPos: Vector3?,
|
|
43
|
+
graceUntil: number,
|
|
44
|
+
reasons: { [string]: number },
|
|
45
|
+
denied: { [string]: number },
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
local records: { [Player]: Record } = {}
|
|
49
|
+
local watching = false
|
|
50
|
+
|
|
51
|
+
local function rec(player: Player): Record
|
|
52
|
+
local row = records[player]
|
|
53
|
+
if not row then
|
|
54
|
+
row = {
|
|
55
|
+
strikes = 0,
|
|
56
|
+
buckets = {},
|
|
57
|
+
lastPos = nil,
|
|
58
|
+
graceUntil = 0,
|
|
59
|
+
reasons = {},
|
|
60
|
+
denied = {},
|
|
61
|
+
}
|
|
62
|
+
records[player] = row
|
|
63
|
+
end
|
|
64
|
+
return row
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
function Ward.Allow(player: Player, channel: string, maxPerSec: number?, burst: number?): boolean
|
|
68
|
+
if not RunService:IsServer() then
|
|
69
|
+
return true
|
|
70
|
+
end
|
|
71
|
+
if typeof(player) ~= "Instance" or not player:IsA("Player") or player.Parent == nil then
|
|
72
|
+
return false
|
|
73
|
+
end
|
|
74
|
+
if typeof(channel) ~= "string" or channel == "" then
|
|
75
|
+
return false
|
|
76
|
+
end
|
|
77
|
+
local rate = maxPerSec or DEFAULT_RATE
|
|
78
|
+
local cap = burst or math.max(rate * 2, DEFAULT_BURST)
|
|
79
|
+
local now = os.clock()
|
|
80
|
+
local row = rec(player)
|
|
81
|
+
local bucket = row.buckets[channel]
|
|
82
|
+
if not bucket then
|
|
83
|
+
bucket = {
|
|
84
|
+
tokens = cap,
|
|
85
|
+
last = now,
|
|
86
|
+
maxPerSec = rate,
|
|
87
|
+
burst = cap,
|
|
88
|
+
}
|
|
89
|
+
row.buckets[channel] = bucket
|
|
90
|
+
end
|
|
91
|
+
local elapsed = math.max(now - bucket.last, 0)
|
|
92
|
+
bucket.last = now
|
|
93
|
+
bucket.tokens = math.min(bucket.burst, bucket.tokens + elapsed * bucket.maxPerSec)
|
|
94
|
+
if bucket.tokens < 1 then
|
|
95
|
+
local denied = (row.denied[channel] or 0) + 1
|
|
96
|
+
row.denied[channel] = denied
|
|
97
|
+
if denied >= Ward.FloodAt then
|
|
98
|
+
row.denied[channel] = 0
|
|
99
|
+
Ward.Strike(player, "rate:" .. channel)
|
|
100
|
+
end
|
|
101
|
+
return false
|
|
102
|
+
end
|
|
103
|
+
row.denied[channel] = 0
|
|
104
|
+
bucket.tokens -= 1
|
|
105
|
+
return true
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
function Ward.Packet(player: Player, bytes: number, maxBytes: number?): boolean
|
|
109
|
+
if not RunService:IsServer() then
|
|
110
|
+
return true
|
|
111
|
+
end
|
|
112
|
+
local cap = maxBytes or Ward.MaxPacketBytes
|
|
113
|
+
if typeof(bytes) ~= "number" or bytes ~= bytes or bytes < 0 or bytes > cap then
|
|
114
|
+
Ward.Strike(player, "packet")
|
|
115
|
+
return false
|
|
116
|
+
end
|
|
117
|
+
return true
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
function Ward.Strike(player: Player, reason: string): number
|
|
121
|
+
if not RunService:IsServer() then
|
|
122
|
+
return 0
|
|
123
|
+
end
|
|
124
|
+
if typeof(player) ~= "Instance" or not player:IsA("Player") or player.Parent == nil then
|
|
125
|
+
return 0
|
|
126
|
+
end
|
|
127
|
+
local row = rec(player)
|
|
128
|
+
row.strikes += 1
|
|
129
|
+
local label = if typeof(reason) == "string" and reason ~= "" then reason else "unknown"
|
|
130
|
+
row.reasons[label] = (row.reasons[label] or 0) + 1
|
|
131
|
+
Ward.OnStrike:Fire(player, label, row.strikes)
|
|
132
|
+
local studio = RunService:IsStudio()
|
|
133
|
+
if row.strikes >= Ward.KickAt and (not studio or Ward.KickInStudio == true) then
|
|
134
|
+
player:Kick("Movement or traffic rejected")
|
|
135
|
+
end
|
|
136
|
+
return row.strikes
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
function Ward.Grace(player: Player, seconds: number)
|
|
140
|
+
if typeof(player) ~= "Instance" or not player:IsA("Player") then
|
|
141
|
+
return
|
|
142
|
+
end
|
|
143
|
+
local hold = if typeof(seconds) == "number" and seconds > 0 then seconds else 1.5
|
|
144
|
+
rec(player).graceUntil = os.clock() + hold
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
function Ward.Clear(player: Player)
|
|
148
|
+
records[player] = nil
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
function Ward.Strikes(player: Player): number
|
|
152
|
+
local row = records[player]
|
|
153
|
+
return if row then row.strikes else 0
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
local function bindSpawnGrace(player: Player)
|
|
157
|
+
Ward.Grace(player, SPAWN_GRACE)
|
|
158
|
+
player.CharacterAdded:Connect(function()
|
|
159
|
+
local row = rec(player)
|
|
160
|
+
row.lastPos = nil
|
|
161
|
+
Ward.Grace(player, SPAWN_GRACE)
|
|
162
|
+
end)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
function Ward.WatchMovement()
|
|
166
|
+
if watching or not RunService:IsServer() then
|
|
167
|
+
return
|
|
168
|
+
end
|
|
169
|
+
watching = true
|
|
170
|
+
RunService.Heartbeat:Connect(function(dt: number)
|
|
171
|
+
if dt <= 0 then
|
|
172
|
+
return
|
|
173
|
+
end
|
|
174
|
+
local step = math.max(dt, MIN_DT)
|
|
175
|
+
local now = os.clock()
|
|
176
|
+
for _, player in Players:GetPlayers() do
|
|
177
|
+
local character = player.Character
|
|
178
|
+
local root = character and character:FindFirstChild("HumanoidRootPart")
|
|
179
|
+
if not (root and root:IsA("BasePart")) then
|
|
180
|
+
rec(player).lastPos = nil
|
|
181
|
+
continue
|
|
182
|
+
end
|
|
183
|
+
local row = rec(player)
|
|
184
|
+
local pos = root.Position
|
|
185
|
+
if row.lastPos and now >= row.graceUntil then
|
|
186
|
+
local delta = pos - row.lastPos
|
|
187
|
+
local dist = delta.Magnitude
|
|
188
|
+
local horizontal = Vector3.new(delta.X, 0, delta.Z).Magnitude
|
|
189
|
+
local falling = delta.Y < 0 and horizontal < Ward.MaxTeleport
|
|
190
|
+
local speed = dist / step
|
|
191
|
+
if not falling and dist > Ward.MaxTeleport and speed > Ward.MaxSpeed then
|
|
192
|
+
Ward.Strike(player, "speed")
|
|
193
|
+
root.CFrame = CFrame.new(row.lastPos)
|
|
194
|
+
pos = row.lastPos
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
row.lastPos = pos
|
|
198
|
+
end
|
|
199
|
+
end)
|
|
200
|
+
for _, player in Players:GetPlayers() do
|
|
201
|
+
bindSpawnGrace(player)
|
|
202
|
+
end
|
|
203
|
+
Players.PlayerAdded:Connect(bindSpawnGrace)
|
|
204
|
+
Players.PlayerRemoving:Connect(Ward.Clear)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
function Ward.Start()
|
|
208
|
+
Ward.WatchMovement()
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
return Ward
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
--!nonstrict
|
|
2
|
+
-- cluaupp-source: ReplicatedStorage/Shared/Constants/Datas/TemplateData.clh
|
|
3
|
+
-- Compiled by CL++ — C++ × Luau
|
|
4
|
+
|
|
5
|
+
-- cluaupp: Roster.new / GetService ReplicatedStorage / self.janitor
|
|
6
|
+
|
|
7
|
+
export type PlayerTemplate = {
|
|
8
|
+
Currencies: Currencies,
|
|
9
|
+
Rebirths: number,
|
|
10
|
+
Rank: number,
|
|
11
|
+
Inventory: PlayerInventory,
|
|
12
|
+
Trade: PlayerTrade,
|
|
13
|
+
Settings: PlayerSettings,
|
|
14
|
+
Codes: PlayerCodes,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const function PlayerTemplate()
|
|
18
|
+
return {
|
|
19
|
+
Currencies = { Coins = 0, Gems = 0 },
|
|
20
|
+
Rebirths = 0,
|
|
21
|
+
Rank = 0,
|
|
22
|
+
Inventory = { Slots = 20 },
|
|
23
|
+
Trade = { DayKey = nil, TradesToday = 0, LastTradeAt = 0, ActiveTradeId = nil },
|
|
24
|
+
Settings = { GameMusic = 100, Effects = 100 },
|
|
25
|
+
Codes = { RedeemedCount = 0 },
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
return PlayerTemplate
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"file": "TemplateData.luau",
|
|
4
|
+
"sourceRoot": "C:/Users/gtofr/OneDrive/Documentos/GitHub/Cluaupp/examples/game",
|
|
5
|
+
"sources": [
|
|
6
|
+
"ReplicatedStorage/Shared/Constants/Datas/TemplateData.clh"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA",
|
|
9
|
+
"cluaupp": {
|
|
10
|
+
"source": "ReplicatedStorage/Shared/Constants/Datas/TemplateData.clh",
|
|
11
|
+
"generated": "out/ReplicatedStorage/Shared/Constants/Datas/TemplateData.luau"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
--!native
|
|
2
|
+
--!optimize 2
|
|
3
|
+
--!strict
|
|
4
|
+
-- cluaupp-source: ReplicatedStorage/Shared/Net/Net.flare
|
|
5
|
+
-- Generated by Cluaupp Flare from ReplicatedStorage/Shared/Net/Net.flare
|
|
6
|
+
-- Do not edit. Change the .flare schema and run cluaupp build.
|
|
7
|
+
|
|
8
|
+
-- cluaupp: Roster.new / GetService ReplicatedStorage / self.janitor
|
|
9
|
+
|
|
10
|
+
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
|
11
|
+
local Flare = require(ReplicatedStorage.CluauppLibs.Flare)
|
|
12
|
+
|
|
13
|
+
local session = Flare.open(script)
|
|
14
|
+
|
|
15
|
+
-- packet Ready (#1)
|
|
16
|
+
local function writeReady(cursor)
|
|
17
|
+
return cursor
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
local function readReady(cursor)
|
|
21
|
+
return
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
local Ready = session.packet({
|
|
25
|
+
id = 1,
|
|
26
|
+
from = "client",
|
|
27
|
+
reliable = true,
|
|
28
|
+
write = writeReady,
|
|
29
|
+
read = readReady,
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
-- packet Welcome (#2)
|
|
33
|
+
local function writeWelcome(cursor, userId, clock)
|
|
34
|
+
Flare.writei32(cursor, userId)
|
|
35
|
+
Flare.writef64(cursor, clock)
|
|
36
|
+
return cursor
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
local function readWelcome(cursor)
|
|
40
|
+
local userId = Flare.readi32(cursor)
|
|
41
|
+
local clock = Flare.readf64(cursor)
|
|
42
|
+
return userId, clock
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
local Welcome = session.packet({
|
|
46
|
+
id = 2,
|
|
47
|
+
from = "server",
|
|
48
|
+
reliable = true,
|
|
49
|
+
write = writeWelcome,
|
|
50
|
+
read = readWelcome,
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
-- query Session (#1)
|
|
54
|
+
local function writeSessionReq(cursor)
|
|
55
|
+
return cursor
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
local function readSessionReq(cursor)
|
|
59
|
+
return
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
local function writeSessionRes(cursor, value)
|
|
63
|
+
Flare.writei32(cursor, value)
|
|
64
|
+
return cursor
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
local function readSessionRes(cursor)
|
|
68
|
+
return Flare.readi32(cursor)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
local Session = session.query({
|
|
72
|
+
id = 1,
|
|
73
|
+
writeReq = writeSessionReq,
|
|
74
|
+
readReq = readSessionReq,
|
|
75
|
+
writeRes = writeSessionRes,
|
|
76
|
+
readRes = readSessionRes,
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
return {
|
|
80
|
+
Ready = Ready,
|
|
81
|
+
Welcome = Welcome,
|
|
82
|
+
Session = Session,
|
|
83
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"file": "Net.luau",
|
|
4
|
+
"sourceRoot": "C:/Users/gtofr/OneDrive/Documentos/GitHub/Cluaupp/examples/game",
|
|
5
|
+
"sources": [
|
|
6
|
+
"ReplicatedStorage/Shared/Net/Net.flare"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA",
|
|
9
|
+
"cluaupp": {
|
|
10
|
+
"source": "ReplicatedStorage/Shared/Net/Net.flare",
|
|
11
|
+
"generated": "out/ReplicatedStorage/Shared/Net/Net.luau"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
--!nonstrict
|
|
2
|
+
-- cluaupp-source: ServerScriptService/Boot/DataBoot.server.clpp
|
|
3
|
+
-- Compiled by CL++ — C++ × Luau
|
|
4
|
+
|
|
5
|
+
-- cluaupp: Roster.new / GetService ReplicatedStorage / self.janitor
|
|
6
|
+
|
|
7
|
+
const ReplicatedStorage = game:GetService("ReplicatedStorage")
|
|
8
|
+
|
|
9
|
+
const Keep = require(ReplicatedStorage.CluauppLibs.Keep)
|
|
10
|
+
const TemplateData = require(ReplicatedStorage.Shared.Constants.Datas.TemplateData)
|
|
11
|
+
|
|
12
|
+
-- DataBoot.server.clpp:6
|
|
13
|
+
const function init()
|
|
14
|
+
local playerData: PlayerTemplate = TemplateData()
|
|
15
|
+
Keep.Server:Init({ Template = playerData, StoreName = "PlayerData", UseMock = true })
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
init()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"file": "DataBoot.server.luau",
|
|
4
|
+
"sourceRoot": "C:/Users/gtofr/OneDrive/Documentos/GitHub/Cluaupp/examples/game",
|
|
5
|
+
"sources": [
|
|
6
|
+
"ServerScriptService/Boot/DataBoot.server.clpp"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA",
|
|
9
|
+
"cluaupp": {
|
|
10
|
+
"source": "ServerScriptService/Boot/DataBoot.server.clpp",
|
|
11
|
+
"generated": "out/ServerScriptService/Boot/DataBoot.server.luau"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
--!nonstrict
|
|
2
|
+
-- cluaupp-source: ServerScriptService/Configuration/ServerConfig.clp
|
|
3
|
+
-- Compiled by CL++ — C++ × Luau
|
|
4
|
+
|
|
5
|
+
-- cluaupp: Roster.new / GetService ReplicatedStorage / self.janitor
|
|
6
|
+
|
|
7
|
+
const STORE_NAME: string = "PlayerData"
|
|
8
|
+
|
|
9
|
+
const USE_MOCK_IN_STUDIO: boolean = true
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
STORE_NAME = STORE_NAME,
|
|
13
|
+
USE_MOCK_IN_STUDIO = USE_MOCK_IN_STUDIO,
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"file": "ServerConfig.luau",
|
|
4
|
+
"sourceRoot": "C:/Users/gtofr/OneDrive/Documentos/GitHub/Cluaupp/examples/game",
|
|
5
|
+
"sources": [
|
|
6
|
+
"ServerScriptService/Configuration/ServerConfig.clp"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA",
|
|
9
|
+
"cluaupp": {
|
|
10
|
+
"source": "ServerScriptService/Configuration/ServerConfig.clp",
|
|
11
|
+
"generated": "out/ServerScriptService/Configuration/ServerConfig.luau"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
--!nonstrict
|
|
2
|
+
-- cluaupp-source: ServerScriptService/Handlers/Guard.server.clpp
|
|
3
|
+
-- Compiled by CL++ — C++ × Luau
|
|
4
|
+
|
|
5
|
+
const ReplicatedStorage = game:GetService("ReplicatedStorage")
|
|
6
|
+
const Ward = require(ReplicatedStorage.CluauppLibs.Ward)
|
|
7
|
+
|
|
8
|
+
-- cluaupp: Roster.new / GetService ReplicatedStorage / self.janitor
|
|
9
|
+
|
|
10
|
+
-- Guard.server.clpp:5
|
|
11
|
+
const function init()
|
|
12
|
+
Ward.Start()
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
init()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"file": "Guard.server.luau",
|
|
4
|
+
"sourceRoot": "C:/Users/gtofr/OneDrive/Documentos/GitHub/Cluaupp/examples/game",
|
|
5
|
+
"sources": [
|
|
6
|
+
"ServerScriptService/Handlers/Guard.server.clpp"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA",
|
|
9
|
+
"cluaupp": {
|
|
10
|
+
"source": "ServerScriptService/Handlers/Guard.server.clpp",
|
|
11
|
+
"generated": "out/ServerScriptService/Handlers/Guard.server.luau"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
--!nonstrict
|
|
2
|
+
-- cluaupp-source: ServerScriptService/Handlers/PlayerHandler.server.clpp
|
|
3
|
+
-- Compiled by CL++ — C++ × Luau
|
|
4
|
+
|
|
5
|
+
-- cluaupp: Roster.new / GetService ReplicatedStorage / self.janitor
|
|
6
|
+
|
|
7
|
+
const ReplicatedStorage = game:GetService("ReplicatedStorage")
|
|
8
|
+
|
|
9
|
+
const Janitor = require(ReplicatedStorage.CluauppLibs.Sweep)
|
|
10
|
+
local __cluauppSweep = nil
|
|
11
|
+
const Keep = require(ReplicatedStorage.CluauppLibs.Keep)
|
|
12
|
+
|
|
13
|
+
-- PlayerHandler.server.clpp:5
|
|
14
|
+
const function BindLeaderstats(player: Player)
|
|
15
|
+
local data = Keep.Server:WaitFor(player)
|
|
16
|
+
|
|
17
|
+
if player:FindFirstChild("leaderstats") ~= nil then
|
|
18
|
+
return
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
local leaderstats: Folder = Instance.new("Folder")
|
|
22
|
+
leaderstats.Parent = player
|
|
23
|
+
leaderstats.Name = "leaderstats"
|
|
24
|
+
local coins: IntValue = Instance.new("IntValue")
|
|
25
|
+
coins.Parent = leaderstats
|
|
26
|
+
coins.Name = "Coins"
|
|
27
|
+
coins.Value = data:Get(Keep.Server.Paths.Currencies.Coins) -- initial value; not a Changed event
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
-- PlayerHandler.server.clpp:17
|
|
31
|
+
const function init()
|
|
32
|
+
if not __cluauppSweep then
|
|
33
|
+
__cluauppSweep = Janitor.new()
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
local __janitor = __cluauppSweep
|
|
37
|
+
local players: Players = game:GetService("Players")
|
|
38
|
+
|
|
39
|
+
for _, player in players:GetPlayers() do
|
|
40
|
+
BindLeaderstats(player)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
__janitor:Add(players.PlayerAdded:Connect(BindLeaderstats), "Disconnect")
|
|
44
|
+
game:BindToClose(function()
|
|
45
|
+
__janitor:Cleanup()
|
|
46
|
+
__janitor:Destroy()
|
|
47
|
+
end)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
init()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"file": "PlayerHandler.server.luau",
|
|
4
|
+
"sourceRoot": "C:/Users/gtofr/OneDrive/Documentos/GitHub/Cluaupp/examples/game",
|
|
5
|
+
"sources": [
|
|
6
|
+
"ServerScriptService/Handlers/PlayerHandler.server.clpp"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA",
|
|
9
|
+
"cluaupp": {
|
|
10
|
+
"source": "ServerScriptService/Handlers/PlayerHandler.server.clpp",
|
|
11
|
+
"generated": "out/ServerScriptService/Handlers/PlayerHandler.server.luau"
|
|
12
|
+
}
|
|
13
|
+
}
|
package/examples/game/out/StarterPlayer/StarterCharacterScripts/Character/CharacterReady.client.luau
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
--!nonstrict
|
|
2
|
+
-- cluaupp-source: StarterPlayer/StarterCharacterScripts/Character/CharacterReady.client.clpp
|
|
3
|
+
-- Compiled by CL++ — C++ × Luau
|
|
4
|
+
|
|
5
|
+
-- cluaupp: Roster.new / GetService ReplicatedStorage / self.janitor
|
|
6
|
+
|
|
7
|
+
-- CharacterReady.client.clpp:4
|
|
8
|
+
const function init()
|
|
9
|
+
print("character local ready")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
init()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"file": "CharacterReady.client.luau",
|
|
4
|
+
"sourceRoot": "C:/Users/gtofr/OneDrive/Documentos/GitHub/Cluaupp/examples/game",
|
|
5
|
+
"sources": [
|
|
6
|
+
"StarterPlayer/StarterCharacterScripts/Character/CharacterReady.client.clpp"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA",
|
|
9
|
+
"cluaupp": {
|
|
10
|
+
"source": "StarterPlayer/StarterCharacterScripts/Character/CharacterReady.client.clpp",
|
|
11
|
+
"generated": "out/StarterPlayer/StarterCharacterScripts/Character/CharacterReady.client.luau"
|
|
12
|
+
}
|
|
13
|
+
}
|
package/examples/game/out/StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.luau
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
--!nonstrict
|
|
2
|
+
-- cluaupp-source: StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.clpp
|
|
3
|
+
-- Compiled by CL++ — C++ × Luau
|
|
4
|
+
|
|
5
|
+
-- cluaupp: Roster.new / GetService ReplicatedStorage / self.janitor
|
|
6
|
+
|
|
7
|
+
const ReplicatedStorage = game:GetService("ReplicatedStorage")
|
|
8
|
+
|
|
9
|
+
const Keep = require(ReplicatedStorage.CluauppLibs.Keep)
|
|
10
|
+
|
|
11
|
+
-- DataController.client.clpp:5
|
|
12
|
+
const function init()
|
|
13
|
+
Keep.Client:Init()
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
init()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"file": "DataController.client.luau",
|
|
4
|
+
"sourceRoot": "C:/Users/gtofr/OneDrive/Documentos/GitHub/Cluaupp/examples/game",
|
|
5
|
+
"sources": [
|
|
6
|
+
"StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.clpp"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA",
|
|
9
|
+
"cluaupp": {
|
|
10
|
+
"source": "StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.clpp",
|
|
11
|
+
"generated": "out/StarterPlayer/StarterPlayerScripts/Controllers/DataController.client.luau"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
// cluaupp generated — do not edit. Change the .flare schema and run cluaupp build.
|
|
3
|
+
// Generated by Cluaupp Flare from ReplicatedStorage/Shared/Net/Net.flare
|
|
4
|
+
// Tag + params in the .flare file. This header is IntelliSense; runtime is the generated .luau.
|
|
5
|
+
|
|
6
|
+
struct NetReady {
|
|
7
|
+
void FireServer();
|
|
8
|
+
RBXScriptConnection Connect(func fn);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
struct NetWelcome {
|
|
12
|
+
void Fire(Player player, int userId, double clock);
|
|
13
|
+
void FireAll(int userId, double clock);
|
|
14
|
+
RBXScriptConnection Connect(func fn);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
struct NetSession {
|
|
18
|
+
int Invoke();
|
|
19
|
+
void On(func fn);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
struct Net {
|
|
23
|
+
NetReady Ready;
|
|
24
|
+
NetWelcome Welcome;
|
|
25
|
+
NetSession Session;
|
|
26
|
+
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#pragma strict
|
|
2
2
|
#include <clpp/roblox.clh>
|
|
3
3
|
#include <clpp/libs/keep.clh>
|
|
4
|
-
|
|
4
|
+
import { PlayerTemplate } from "../../ReplicatedStorage/Shared/Constants/Datas/TemplateData.clh";
|
|
5
5
|
|
|
6
6
|
void init() {
|
|
7
|
-
PlayerTemplate playerData;
|
|
7
|
+
PlayerTemplate playerData = PlayerTemplate();
|
|
8
8
|
Keep.Server.Init(DataServiceOptions {
|
|
9
9
|
.Template = playerData,
|
|
10
10
|
.StoreName = "PlayerData",
|