From 0a880bc4d4a4819041eccfe588b90fd330821ee9 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:23:14 +0200 Subject: [PATCH 001/103] BLD - add standalone phone development workflow --- .agents/skills/ask-matt/SKILL.md | 78 +++ .agents/skills/ask-matt/agents/openai.yaml | 5 + .agents/skills/code-review/SKILL.md | 89 +++ .agents/skills/code-review/agents/openai.yaml | 3 + .agents/skills/codebase-design/DEEPENING.md | 37 ++ .../skills/codebase-design/DESIGN-IT-TWICE.md | 44 ++ .agents/skills/codebase-design/SKILL.md | 114 ++++ .../skills/codebase-design/agents/openai.yaml | 3 + .agents/skills/domain-modeling/ADR-FORMAT.md | 47 ++ .../skills/domain-modeling/CONTEXT-FORMAT.md | 60 ++ .agents/skills/domain-modeling/SKILL.md | 74 +++ .../skills/domain-modeling/agents/openai.yaml | 3 + .agents/skills/esx-framework/SKILL.md | 47 ++ .../skills/esx-framework/best-practices.md | 456 +++++++++++++ .../skills/esx-framework/client-functions.md | 256 +++++++ .agents/skills/esx-framework/core-concepts.md | 217 ++++++ .../skills/esx-framework/events-callbacks.md | 450 +++++++++++++ .../skills/esx-framework/reference-links.md | 137 ++++ .../skills/esx-framework/server-functions.md | 464 +++++++++++++ .../skills/esx-framework/xplayer-methods.md | 624 ++++++++++++++++++ .agents/skills/fivem-basics/SKILL.md | 31 + .agents/skills/fivem-basics/client-server.md | 33 + .agents/skills/fivem-basics/debugging.md | 17 + .agents/skills/fivem-basics/events.md | 104 +++ .agents/skills/fivem-basics/exports.md | 48 ++ .agents/skills/fivem-basics/fxmanifest.md | 45 ++ .agents/skills/fivem-basics/optimization.md | 296 +++++++++ .../skills/fivem-basics/reference-links.md | 16 + .agents/skills/fivem-basics/structure.md | 65 ++ .agents/skills/fivem-dev/SKILL.md | 146 ++++ .agents/skills/fivem-nui/SKILL.md | 26 + .agents/skills/fivem-nui/best-practices.md | 472 +++++++++++++ .agents/skills/fivem-nui/fullscreen-nui.md | 205 ++++++ .agents/skills/fivem-nui/nui-callbacks.md | 309 +++++++++ .agents/skills/fivem-nui/reference-links.md | 128 ++++ .agents/skills/fivem-nui/setup.md | 385 +++++++++++ .agents/skills/fivem-security/SKILL.md | 25 + .agents/skills/fivem-security/events.md | 73 ++ .agents/skills/grill-me/SKILL.md | 7 + .agents/skills/grill-me/agents/openai.yaml | 5 + .agents/skills/grilling/SKILL.md | 12 + .agents/skills/grilling/agents/openai.yaml | 3 + .agents/skills/lua-basics/SKILL.md | 29 + .agents/skills/lua-basics/conditionals.md | 59 ++ .agents/skills/lua-basics/errors.md | 61 ++ .agents/skills/lua-basics/functions.md | 157 +++++ .agents/skills/lua-basics/reference-links.md | 17 + .agents/skills/lua-basics/tables.md | 124 ++++ .agents/skills/lua-basics/variables.md | 58 ++ .agents/skills/oxlib/SKILL.md | 45 ++ .agents/skills/oxlib/addCommand.md | 30 + .agents/skills/oxlib/callback.md | 61 ++ .agents/skills/oxlib/init.md | 34 + .agents/skills/oxlib/interface.md | 60 ++ .agents/skills/oxlib/zones.md | 68 ++ .agents/skills/oxmysql/SKILL.md | 42 ++ .agents/skills/oxmysql/insert.md | 26 + .agents/skills/oxmysql/placeholders.md | 11 + .agents/skills/oxmysql/prepare.md | 29 + .agents/skills/oxmysql/query.md | 37 ++ .agents/skills/oxmysql/rawExecute.md | 19 + .agents/skills/oxmysql/scalar.md | 27 + .agents/skills/oxmysql/single.md | 29 + .agents/skills/oxmysql/transaction.md | 35 + .agents/skills/oxmysql/update.md | 25 + .agents/skills/research/SKILL.md | 12 + .agents/skills/research/agents/openai.yaml | 3 + .../skills/resolving-merge-conflicts/SKILL.md | 14 + .../agents/openai.yaml | 3 + .agents/skills/to-spec/SKILL.md | 75 +++ .agents/skills/to-spec/agents/openai.yaml | 5 + frontend/pnpm-workspace.yaml | 3 +- 72 files changed, 6856 insertions(+), 1 deletion(-) create mode 100644 .agents/skills/ask-matt/SKILL.md create mode 100644 .agents/skills/ask-matt/agents/openai.yaml create mode 100644 .agents/skills/code-review/SKILL.md create mode 100644 .agents/skills/code-review/agents/openai.yaml create mode 100644 .agents/skills/codebase-design/DEEPENING.md create mode 100644 .agents/skills/codebase-design/DESIGN-IT-TWICE.md create mode 100644 .agents/skills/codebase-design/SKILL.md create mode 100644 .agents/skills/codebase-design/agents/openai.yaml create mode 100644 .agents/skills/domain-modeling/ADR-FORMAT.md create mode 100644 .agents/skills/domain-modeling/CONTEXT-FORMAT.md create mode 100644 .agents/skills/domain-modeling/SKILL.md create mode 100644 .agents/skills/domain-modeling/agents/openai.yaml create mode 100644 .agents/skills/esx-framework/SKILL.md create mode 100644 .agents/skills/esx-framework/best-practices.md create mode 100644 .agents/skills/esx-framework/client-functions.md create mode 100644 .agents/skills/esx-framework/core-concepts.md create mode 100644 .agents/skills/esx-framework/events-callbacks.md create mode 100644 .agents/skills/esx-framework/reference-links.md create mode 100644 .agents/skills/esx-framework/server-functions.md create mode 100644 .agents/skills/esx-framework/xplayer-methods.md create mode 100644 .agents/skills/fivem-basics/SKILL.md create mode 100644 .agents/skills/fivem-basics/client-server.md create mode 100644 .agents/skills/fivem-basics/debugging.md create mode 100644 .agents/skills/fivem-basics/events.md create mode 100644 .agents/skills/fivem-basics/exports.md create mode 100644 .agents/skills/fivem-basics/fxmanifest.md create mode 100644 .agents/skills/fivem-basics/optimization.md create mode 100644 .agents/skills/fivem-basics/reference-links.md create mode 100644 .agents/skills/fivem-basics/structure.md create mode 100644 .agents/skills/fivem-dev/SKILL.md create mode 100644 .agents/skills/fivem-nui/SKILL.md create mode 100644 .agents/skills/fivem-nui/best-practices.md create mode 100644 .agents/skills/fivem-nui/fullscreen-nui.md create mode 100644 .agents/skills/fivem-nui/nui-callbacks.md create mode 100644 .agents/skills/fivem-nui/reference-links.md create mode 100644 .agents/skills/fivem-nui/setup.md create mode 100644 .agents/skills/fivem-security/SKILL.md create mode 100644 .agents/skills/fivem-security/events.md create mode 100644 .agents/skills/grill-me/SKILL.md create mode 100644 .agents/skills/grill-me/agents/openai.yaml create mode 100644 .agents/skills/grilling/SKILL.md create mode 100644 .agents/skills/grilling/agents/openai.yaml create mode 100644 .agents/skills/lua-basics/SKILL.md create mode 100644 .agents/skills/lua-basics/conditionals.md create mode 100644 .agents/skills/lua-basics/errors.md create mode 100644 .agents/skills/lua-basics/functions.md create mode 100644 .agents/skills/lua-basics/reference-links.md create mode 100644 .agents/skills/lua-basics/tables.md create mode 100644 .agents/skills/lua-basics/variables.md create mode 100644 .agents/skills/oxlib/SKILL.md create mode 100644 .agents/skills/oxlib/addCommand.md create mode 100644 .agents/skills/oxlib/callback.md create mode 100644 .agents/skills/oxlib/init.md create mode 100644 .agents/skills/oxlib/interface.md create mode 100644 .agents/skills/oxlib/zones.md create mode 100644 .agents/skills/oxmysql/SKILL.md create mode 100644 .agents/skills/oxmysql/insert.md create mode 100644 .agents/skills/oxmysql/placeholders.md create mode 100644 .agents/skills/oxmysql/prepare.md create mode 100644 .agents/skills/oxmysql/query.md create mode 100644 .agents/skills/oxmysql/rawExecute.md create mode 100644 .agents/skills/oxmysql/scalar.md create mode 100644 .agents/skills/oxmysql/single.md create mode 100644 .agents/skills/oxmysql/transaction.md create mode 100644 .agents/skills/oxmysql/update.md create mode 100644 .agents/skills/research/SKILL.md create mode 100644 .agents/skills/research/agents/openai.yaml create mode 100644 .agents/skills/resolving-merge-conflicts/SKILL.md create mode 100644 .agents/skills/resolving-merge-conflicts/agents/openai.yaml create mode 100644 .agents/skills/to-spec/SKILL.md create mode 100644 .agents/skills/to-spec/agents/openai.yaml diff --git a/.agents/skills/ask-matt/SKILL.md b/.agents/skills/ask-matt/SKILL.md new file mode 100644 index 0000000..70b807b --- /dev/null +++ b/.agents/skills/ask-matt/SKILL.md @@ -0,0 +1,78 @@ +--- +name: ask-matt +description: Ask which skill or flow fits your situation. A router over the skills in this repo. +disable-model-invocation: true +--- + +# Ask Matt + +You don't remember every skill, so ask. + +A **flow** is a path through the skills. Most paths run along one **main flow**, and two **on-ramps** merge onto it. Everything else is standalone, or a vocabulary layer that runs underneath. + +## The main flow: idea → ship + +The route most work travels. You have an idea and want it built. + +1. **`/grill-with-docs`** — sharpen the idea by interview. Start here when you **have a codebase**: it's stateful, retaining what it learns in `CONTEXT.md` and ADRs. (No codebase? Use `/grill-me` — see Standalone. Both run the same `/grilling` primitive; `grill-with-docs` is the one that leaves a paper trail.) +2. **Branch — can you settle every question in conversation?** If a question needs a runnable answer (state, business logic, a UI you have to see), detour through a prototype, bridged by **`/handoff`** in both directions (see Crossing sessions): + - **`/handoff`** out, then open a fresh session against that file, + - **`/prototype`** to answer the question with throwaway code, + - **`/handoff`** back what you learned, and reference it from the original idea thread. +3. **Branch — is this a multi-session build?** + - **Yes** → **`/to-spec`** (turn the thread into a spec), then **`/to-tickets`** to split it into tracer-bullet tickets, each declaring its **blocking edges**. On a local tracker that's one file per ticket under `.scratch//issues/`, worked blockers-first by hand; on a real tracker the edges become native blocking links, so any ticket whose blockers are done can be grabbed — kick off **`/implement`** per ticket, **clearing context between each one**. + - **No** → **`/implement`** right here, in the same context window. + + Either way, **`/implement`** builds each issue by driving **`/tdd`** internally — one red-green slice at a time — then closes out by running **`/code-review`**, a two-axis review (Standards + Spec) of the diff, before committing. Reach for **`/tdd`** on its own when you just want to build a concrete behaviour test-first without a full spec, and **`/code-review`** on its own whenever you want to review a branch or PR against a fixed point. + +### Context hygiene + +Keep steps 1–3 in **one unbroken context window** — don't compact or clear until after `/to-tickets` — so the grilling, spec, and tickets all build on the same thinking. Each `/implement` then starts fresh, working from the ticket. + +The limit on this is the **[smart zone](https://www.aihero.dev/ai-coding-dictionary/smart-zone)**: the window (~120k tokens on state-of-the-art models) within which the model still reasons sharply. If a session approaches it before `/to-tickets`, don't push on degraded — `/handoff` and continue in a fresh thread. + +## On-ramps + +A starting situation that generates work, then merges onto the main flow. + +- **Bugs and requests piling up** → **`/triage`**. It moves issues through triage roles and produces agent-ready issues, which **`/implement`** later picks up. + + Triage is only for issues **you didn't create** — bug reports, incoming feature requests, anything that arrives raw. Tickets that `/to-tickets` produced are already agent-ready, so **don't triage them**. + +- **Something's broken** → **`/diagnosing-bugs`**. For the hard ones: the bug that resists a first glance, the intermittent flake, the regression that crept in between two known-good states. It refuses to theorise until it has a **tight feedback loop** — one command that already goes red on *this* bug — then fixes with a regression test. Its post-mortem hands off to **`/improve-codebase-architecture`** when the real finding is that there's no good seam to lock the bug down. + +- **A huge, foggy effort — a greenfield project or a huge feature build, too big for one session** → **`/wayfinder`**, the most cognitively demanding flow here. When the way from here to the destination isn't visible yet, it charts a **shared map** of **decision tickets** on the issue tracker and resolves them one at a time — producing **decisions, not deliverables** — until the fog is pushed back and the way is clear. Where **`/grill-with-docs`** sharpens an idea you can hold in one session, wayfinder is for the idea you can't — and it's slower and denser, so save it for exactly that, never a well-scoped feature. + + When the map clears, **it hands off, it doesn't build**: merge onto the main flow at **`/to-spec`**, which collapses the map's linked decisions into a buildable plan, then `/to-tickets` and `/implement` as usual. Looping the map straight into `/implement` skips that collapse and throws the linked detail away — go straight to `/implement` only when the effort turned out genuinely small. + +## Codebase health + +Not feature work — upkeep. + +- **`/improve-codebase-architecture`** — run whenever you have a spare moment to keep the codebase good for agents to operate in. It surfaces **deepening opportunities**; picking one _generates an idea_ you can take into the main flow at `/grill-with-docs`. It's the survey that finds the candidates; **`/codebase-design`** (below) is the bench you design the chosen one on. + +## Vocabulary underneath + +Two model-invoked references that run *beneath* the other skills — each the single source of truth for its vocabulary. Reach for them directly when the **words**, not the process, are the problem; or let the skills above pull them in. + +- **`/domain-modeling`** — sharpen the project's *domain* language: challenge a fuzzy term, resolve an overloaded word ("account" doing three jobs), record a hard-to-reverse decision as an ADR. It's the active discipline `/grill-with-docs` drives to keep `CONTEXT.md` a clean glossary. +- **`/codebase-design`** — the deep-module vocabulary (module, interface, depth, seam, adapter, leverage, locality) for designing a module's *shape*: a lot of behaviour behind a small interface at a clean seam. `/tdd` and `/improve-codebase-architecture` both speak it. + +## Crossing sessions + +- **`/handoff`** — when a thread is full or you need to branch off (e.g. into a `/prototype` session), this compacts the conversation into a markdown file. You don't continue in place — you **open a new session and reference that file** to carry the context across. It's the bridge between context windows, in either direction. Use it when you want a **fresh session** but need the **current conversation preserved**. +- **`/compact`** (built-in) — stay in the **same conversation**, letting the earlier turns be summarized. Use it at **intentional breaks between phases**, when you don't mind losing the verbatim history. Don't compact mid-phase — the agent can lose its way. `/handoff` forks; `/compact` continues. + +## Standalone + +Off the main flow entirely. + +- **`/grill-me`** — the same relentless interview as `/grill-with-docs`, but for when you have **no codebase**. Stateless: it saves nothing locally, builds no `CONTEXT.md`. Reach for it to sharpen any plan or design that doesn't live in a repo. +- **`/prototype`** — a small, throwaway program that answers one design question: does this state model feel right, or what should this UI look like. Throwaway from day one — keep the answer, delete the code. It's the detour in step 2 of the main flow, but reach for it any time a design question is hard to settle on paper. +- **`/research`** — delegate reading legwork to a **background agent**: it investigates a question against **primary sources**, then leaves a cited Markdown file in the repo. Keep working while it reads. The file it produces is something to take *into* the main flow at `/grill-with-docs` — research feeds the thinking, it doesn't replace it. +- **`/teach`** — learn a concept over multiple sessions, using the current directory as a stateful workspace. +- **`/writing-great-skills`** — reference for writing and editing skills well. + +## Precondition + +**`/setup-matt-pocock-skills`** — run before your first engineering flow to configure the issue tracker, triage labels, and doc layout the other skills assume. Custom issue trackers also work. diff --git a/.agents/skills/ask-matt/agents/openai.yaml b/.agents/skills/ask-matt/agents/openai.yaml new file mode 100644 index 0000000..5c60d51 --- /dev/null +++ b/.agents/skills/ask-matt/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "Ask Matt" + short_description: "Find the right skill or workflow" +policy: + allow_implicit_invocation: false diff --git a/.agents/skills/code-review/SKILL.md b/.agents/skills/code-review/SKILL.md new file mode 100644 index 0000000..2a0b524 --- /dev/null +++ b/.agents/skills/code-review/SKILL.md @@ -0,0 +1,89 @@ +--- +name: code-review +description: Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/PRD asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to "review since X". +--- + +Two-axis review of the diff between `HEAD` and a fixed point the user supplies: + +- **Standards** — does the code conform to this repo's documented coding standards? +- **Spec** — does the code faithfully implement the originating issue / PRD / spec? + +Both axes run as **parallel sub-agents** so they don't pollute each other's context, then this skill aggregates their findings. + +The issue tracker should have been provided to you — run `/setup-matt-pocock-skills` if `docs/agents/issue-tracker.md` is missing. + +## Process + +### 1. Pin the fixed point + +Whatever the user said is the fixed point — a commit SHA, branch name, tag, `main`, `HEAD~5`, etc. If they didn't specify one, ask for it. + +Capture the diff command once: `git diff ...HEAD` (three-dot, so the comparison is against the merge-base). Also note the list of commits via `git log ..HEAD --oneline`. + +Before going further, confirm the fixed point resolves (`git rev-parse `) and the diff is non-empty. A bad ref or empty diff should fail here — not inside two parallel sub-agents. + +### 2. Identify the spec source + +Look for the originating spec, in this order: + +1. Issue references in the commit messages (`#123`, `Closes #45`, GitLab `!67`, etc.) — fetch via the workflow in `docs/agents/issue-tracker.md`. +2. A path the user passed as an argument. +3. A PRD/spec file under `docs/`, `specs/`, or `.scratch/` matching the branch name or feature. +4. If nothing is found, ask the user where the spec is. If they say there isn't one, the **Spec** sub-agent will skip and report "no spec available". + +### 3. Identify the standards sources + +Anything in the repo that documents how code should be written, such as `CODING_STANDARDS.md` or `CONTRIBUTING.md`. + +On top of whatever the repo documents, the Standards axis always carries the **smell baseline** below — a fixed set of Fowler code smells (_Refactoring_, ch.3) that applies even when a repo documents nothing. Two rules bind it: + +- **The repo overrides.** A documented repo standard always wins; where it endorses something the baseline would flag, suppress the smell. +- **Always a judgement call.** Each smell is a labelled heuristic ("possible Feature Envy"), never a hard violation — and, like any standard here, skip anything tooling already enforces. + +Each smell reads *what it is* → *how to fix*; match it against the diff: + +- **Mysterious Name** — a function, variable, or type whose name doesn't reveal what it does or holds. → rename it; if no honest name comes, the design's murky. +- **Duplicated Code** — the same logic shape appears in more than one hunk or file in the change. → extract the shared shape, call it from both. +- **Feature Envy** — a method that reaches into another object's data more than its own. → move the method onto the data it envies. +- **Data Clumps** — the same few fields or params keep travelling together (a type wanting to be born). → bundle them into one type, pass that. +- **Primitive Obsession** — a primitive or string standing in for a domain concept that deserves its own type. → give the concept its own small type. +- **Repeated Switches** — the same `switch`/`if`-cascade on the same type recurs across the change. → replace with polymorphism, or one map both sites share. +- **Shotgun Surgery** — one logical change forces scattered edits across many files in the diff. → gather what changes together into one module. +- **Divergent Change** — one file or module is edited for several unrelated reasons. → split so each module changes for one reason. +- **Speculative Generality** — abstraction, parameters, or hooks added for needs the spec doesn't have. → delete it; inline back until a real need shows. +- **Message Chains** — long `a.b().c().d()` navigation the caller shouldn't depend on. → hide the walk behind one method on the first object. +- **Middle Man** — a class or function that mostly just delegates onward. → cut it, call the real target direct. +- **Refused Bequest** — a subclass or implementer that ignores or overrides most of what it inherits. → drop the inheritance, use composition. + +### 4. Spawn both sub-agents in parallel + +Send a single message with two `Agent` tool calls. Use the `general-purpose` subagent for both. + +**Standards sub-agent prompt** — include: + +- The full diff command and commit list. +- The list of standards-source files you found in step 3, **plus the smell baseline from step 3** pasted in full — the sub-agent has no other access to it. +- The brief: "Report — per file/hunk where relevant — (a) every place the diff violates a documented standard: cite the standard (file + the rule); and (b) any baseline smell you spot: name it and quote the hunk. Distinguish hard violations from judgement calls — documented-standard breaches can be hard, but baseline smells are always judgement calls, and a documented repo standard overrides the baseline. Skip anything tooling enforces. Under 400 words." + +**Spec sub-agent prompt** — include: + +- The diff command and commit list. +- The path or fetched contents of the spec. +- The brief: "Report: (a) requirements the spec asked for that are missing or partial; (b) behaviour in the diff that wasn't asked for (scope creep); (c) requirements that look implemented but where the implementation looks wrong. Quote the spec line for each finding. Under 400 words." + +If the spec is missing, skip the Spec sub-agent and note this in the final report. + +### 5. Aggregate + +Present the two reports under `## Standards` and `## Spec` headings, verbatim or lightly cleaned. Do **not** merge or rerank findings — the two axes are deliberately separate (see _Why two axes_). + +End with a one-line summary: total findings per axis, and the worst issue _within each axis_ (if any). Don't pick a single winner across axes — that's the reranking the separation exists to prevent. + +## Why two axes + +A change can pass one axis and fail the other: + +- Code that follows every standard but implements the wrong thing → **Standards pass, Spec fail.** +- Code that does exactly what the issue asked but breaks the project's conventions → **Spec pass, Standards fail.** + +Reporting them separately stops one axis from masking the other. diff --git a/.agents/skills/code-review/agents/openai.yaml b/.agents/skills/code-review/agents/openai.yaml new file mode 100644 index 0000000..9076774 --- /dev/null +++ b/.agents/skills/code-review/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Code Review" + short_description: "Review a diff on standards and spec" diff --git a/.agents/skills/codebase-design/DEEPENING.md b/.agents/skills/codebase-design/DEEPENING.md new file mode 100644 index 0000000..3938457 --- /dev/null +++ b/.agents/skills/codebase-design/DEEPENING.md @@ -0,0 +1,37 @@ +# Deepening + +How to deepen a cluster of shallow modules safely, given its dependencies. Assumes the vocabulary in [SKILL.md](SKILL.md) — **module**, **interface**, **seam**, **adapter**. + +## Dependency categories + +When assessing a candidate for deepening, classify its dependencies. The category determines how the deepened module is tested across its seam. + +### 1. In-process + +Pure computation, in-memory state, no I/O. Always deepenable — merge the modules and test through the new interface directly. No adapter needed. + +### 2. Local-substitutable + +Dependencies that have local test stand-ins (PGLite for Postgres, in-memory filesystem). Deepenable if the stand-in exists. The deepened module is tested with the stand-in running in the test suite. The seam is internal; no port at the module's external interface. + +### 3. Remote but owned (Ports & Adapters) + +Your own services across a network boundary (microservices, internal APIs). Define a **port** (interface) at the seam. The deep module owns the logic; the transport is injected as an **adapter**. Tests use an in-memory adapter. Production uses an HTTP/gRPC/queue adapter. + +Recommendation shape: *"Define a port at the seam, implement an HTTP adapter for production and an in-memory adapter for testing, so the logic sits in one deep module even though it's deployed across a network."* + +### 4. True external (Mock) + +Third-party services (Stripe, Twilio, etc.) you don't control. The deepened module takes the external dependency as an injected port; tests provide a mock adapter. + +## Seam discipline + +- **One adapter means a hypothetical seam. Two adapters means a real one.** Don't introduce a port unless at least two adapters are justified (typically production + test). A single-adapter seam is just indirection. +- **Internal seams vs external seams.** A deep module can have internal seams (private to its implementation, used by its own tests) as well as the external seam at its interface. Don't expose internal seams through the interface just because tests use them. + +## Testing strategy: replace, don't layer + +- Old unit tests on shallow modules become waste once tests at the deepened module's interface exist — delete them. +- Write new tests at the deepened module's interface. The **interface is the test surface**. +- Tests assert on observable outcomes through the interface, not internal state. +- Tests should survive internal refactors — they describe behaviour, not implementation. If a test has to change when the implementation changes, it's testing past the interface. diff --git a/.agents/skills/codebase-design/DESIGN-IT-TWICE.md b/.agents/skills/codebase-design/DESIGN-IT-TWICE.md new file mode 100644 index 0000000..49a7c42 --- /dev/null +++ b/.agents/skills/codebase-design/DESIGN-IT-TWICE.md @@ -0,0 +1,44 @@ +# Design It Twice + +When the user wants to explore alternative interfaces for a chosen deepening candidate, use this parallel sub-agent pattern. Based on "Design It Twice" (Ousterhout) — your first idea is unlikely to be the best. + +Uses the vocabulary in [SKILL.md](SKILL.md) — **module**, **interface**, **seam**, **adapter**, **leverage**. + +## Process + +### 1. Frame the problem space + +Before spawning sub-agents, write a user-facing explanation of the problem space for the chosen candidate: + +- The constraints any new interface would need to satisfy +- The dependencies it would rely on, and which category they fall into (see [DEEPENING.md](DEEPENING.md)) +- A rough illustrative code sketch to ground the constraints — not a proposal, just a way to make the constraints concrete + +Show this to the user, then immediately proceed to Step 2. The user reads and thinks while the sub-agents work in parallel. + +### 2. Spawn sub-agents + +Spawn 3+ sub-agents in parallel using the Agent tool. Each must produce a **radically different** interface for the deepened module. + +Prompt each sub-agent with a separate technical brief (file paths, coupling details, dependency category from [DEEPENING.md](DEEPENING.md), what sits behind the seam). The brief is independent of the user-facing problem-space explanation in Step 1. Give each agent a different design constraint: + +- Agent 1: "Minimize the interface — aim for 1–3 entry points max. Maximise leverage per entry point." +- Agent 2: "Maximise flexibility — support many use cases and extension." +- Agent 3: "Optimise for the most common caller — make the default case trivial." +- Agent 4 (if applicable): "Design around ports & adapters for cross-seam dependencies." + +Include both [SKILL.md](SKILL.md) vocabulary and CONTEXT.md vocabulary in the brief so each sub-agent names things consistently with the architecture language and the project's domain language. + +Each sub-agent outputs: + +1. Interface (types, methods, params — plus invariants, ordering, error modes) +2. Usage example showing how callers use it +3. What the implementation hides behind the seam +4. Dependency strategy and adapters (see [DEEPENING.md](DEEPENING.md)) +5. Trade-offs — where leverage is high, where it's thin + +### 3. Present and compare + +Present designs sequentially so the user can absorb each one, then compare them in prose. Contrast by **depth** (leverage at the interface), **locality** (where change concentrates), and **seam placement**. + +After comparing, give your own recommendation: which design you think is strongest and why. If elements from different designs would combine well, propose a hybrid. Be opinionated — the user wants a strong read, not a menu. diff --git a/.agents/skills/codebase-design/SKILL.md b/.agents/skills/codebase-design/SKILL.md new file mode 100644 index 0000000..16620c2 --- /dev/null +++ b/.agents/skills/codebase-design/SKILL.md @@ -0,0 +1,114 @@ +--- +name: codebase-design +description: Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary. +--- + +# Codebase Design + +Design **deep modules**: a lot of behaviour behind a small interface, placed at a clean seam, testable through that interface. Use this language and these principles wherever code is being designed or restructured. The aim is leverage for callers, locality for maintainers, and testability for everyone. + +## Glossary + +Use these terms exactly — don't substitute "component," "service," "API," or "boundary." Consistent language is the whole point. + +**Module** — anything with an interface and an implementation. Deliberately scale-agnostic: a function, class, package, or tier-spanning slice. _Avoid_: unit, component, service. + +**Interface** — everything a caller must know to use the module correctly: the type signature, but also invariants, ordering constraints, error modes, required configuration, and performance characteristics. _Avoid_: API, signature (too narrow — they refer only to the type-level surface). + +**Implementation** — what's inside a module, its body of code. Distinct from **Adapter**: a thing can be a small adapter with a large implementation (a Postgres repo) or a large adapter with a small implementation (an in-memory fake). Reach for "adapter" when the seam is the topic; "implementation" otherwise. + +**Depth** — leverage at the interface: the amount of behaviour a caller (or test) can exercise per unit of interface they have to learn. A module is **deep** when a large amount of behaviour sits behind a small interface, **shallow** when the interface is nearly as complex as the implementation. + +**Seam** _(Michael Feathers)_ — a place where you can alter behaviour without editing in that place; the *location* at which a module's interface lives. Where to put the seam is its own design decision, distinct from what goes behind it. _Avoid_: boundary (overloaded with DDD's bounded context). + +**Adapter** — a concrete thing that satisfies an interface at a seam. Describes *role* (what slot it fills), not substance (what's inside). + +**Leverage** — what callers get from depth: more capability per unit of interface they learn. One implementation pays back across N call sites and M tests. + +**Locality** — what maintainers get from depth: change, bugs, knowledge, and verification concentrate in one place rather than spreading across callers. Fix once, fixed everywhere. + +## Deep vs shallow + +**Deep module** = small interface + lots of implementation: + +``` +┌─────────────────────┐ +│ Small Interface │ ← Few methods, simple params +├─────────────────────┤ +│ │ +│ Deep Implementation│ ← Complex logic hidden +│ │ +└─────────────────────┘ +``` + +**Shallow module** = large interface + little implementation (avoid): + +``` +┌─────────────────────────────────┐ +│ Large Interface │ ← Many methods, complex params +├─────────────────────────────────┤ +│ Thin Implementation │ ← Just passes through +└─────────────────────────────────┘ +``` + +When designing an interface, ask: + +- Can I reduce the number of methods? +- Can I simplify the parameters? +- Can I hide more complexity inside? + +## Principles + +- **Depth is a property of the interface, not the implementation.** A deep module can be internally composed of small, mockable, swappable parts — they just aren't part of the interface. A module can have **internal seams** (private to its implementation, used by its own tests) as well as the **external seam** at its interface. +- **The deletion test.** Imagine deleting the module. If complexity vanishes, it was a pass-through. If complexity reappears across N callers, it was earning its keep. +- **The interface is the test surface.** Callers and tests cross the same seam. If you want to test *past* the interface, the module is probably the wrong shape. +- **One adapter means a hypothetical seam. Two adapters means a real one.** Don't introduce a seam unless something actually varies across it. + +## Designing for testability + +Good interfaces make testing natural: + +1. **Accept dependencies, don't create them.** + + ```typescript + // Testable + function processOrder(order, paymentGateway) {} + + // Hard to test + function processOrder(order) { + const gateway = new StripeGateway(); + } + ``` + +2. **Return results, don't produce side effects.** + + ```typescript + // Testable + function calculateDiscount(cart): Discount {} + + // Hard to test + function applyDiscount(cart): void { + cart.total -= discount; + } + ``` + +3. **Small surface area.** Fewer methods = fewer tests needed. Fewer params = simpler test setup. + +## Relationships + +- A **Module** has exactly one **Interface** (the surface it presents to callers and tests). +- **Depth** is a property of a **Module**, measured against its **Interface**. +- A **Seam** is where a **Module**'s **Interface** lives. +- An **Adapter** sits at a **Seam** and satisfies the **Interface**. +- **Depth** produces **Leverage** for callers and **Locality** for maintainers. + +## Rejected framings + +- **Depth as ratio of implementation-lines to interface-lines** (Ousterhout): rewards padding the implementation. We use depth-as-leverage instead. +- **"Interface" as the TypeScript `interface` keyword or a class's public methods**: too narrow — interface here includes every fact a caller must know. +- **"Boundary"**: overloaded with DDD's bounded context. Say **seam** or **interface**. + +## Going deeper + +- **Deepening a cluster given its dependencies** — see [DEEPENING.md](DEEPENING.md): dependency categories, seam discipline, and replace-don't-layer testing. +- **Exploring alternative interfaces** — see [DESIGN-IT-TWICE.md](DESIGN-IT-TWICE.md): spin up parallel sub-agents to design the interface several radically different ways, then compare on depth, locality, and seam placement. diff --git a/.agents/skills/codebase-design/agents/openai.yaml b/.agents/skills/codebase-design/agents/openai.yaml new file mode 100644 index 0000000..3180715 --- /dev/null +++ b/.agents/skills/codebase-design/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Codebase Design" + short_description: "Vocabulary for deep-module design" diff --git a/.agents/skills/domain-modeling/ADR-FORMAT.md b/.agents/skills/domain-modeling/ADR-FORMAT.md new file mode 100644 index 0000000..da7e78e --- /dev/null +++ b/.agents/skills/domain-modeling/ADR-FORMAT.md @@ -0,0 +1,47 @@ +# ADR Format + +ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc. + +Create the `docs/adr/` directory lazily — only when the first ADR is needed. + +## Template + +```md +# {Short title of the decision} + +{1-3 sentences: what's the context, what did we decide, and why.} +``` + +That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why* — not in filling out sections. + +## Optional sections + +Only include these when they add genuine value. Most ADRs won't need them. + +- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`) — useful when decisions are revisited +- **Considered Options** — only when the rejected alternatives are worth remembering +- **Consequences** — only when non-obvious downstream effects need to be called out + +## Numbering + +Scan `docs/adr/` for the highest existing number and increment by one. + +## When to offer an ADR + +All three of these must be true: + +1. **Hard to reverse** — the cost of changing your mind later is meaningful +2. **Surprising without context** — a future reader will look at the code and wonder "why on earth did they do it this way?" +3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons + +If a decision is easy to reverse, skip it — you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing." + +### What qualifies + +- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres." +- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP." +- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library — just the ones that would take a quarter to swap out. +- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s. +- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate. +- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract." +- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it — otherwise someone will suggest GraphQL again in six months. diff --git a/.agents/skills/domain-modeling/CONTEXT-FORMAT.md b/.agents/skills/domain-modeling/CONTEXT-FORMAT.md new file mode 100644 index 0000000..eaf2a18 --- /dev/null +++ b/.agents/skills/domain-modeling/CONTEXT-FORMAT.md @@ -0,0 +1,60 @@ +# CONTEXT.md Format + +## Structure + +```md +# {Context Name} + +{One or two sentence description of what this context is and why it exists.} + +## Language + +**Order**: +{A one or two sentence description of the term} +_Avoid_: Purchase, transaction + +**Invoice**: +A request for payment sent to a customer after delivery. +_Avoid_: Bill, payment request + +**Customer**: +A person or organization that places orders. +_Avoid_: Client, buyer, account +``` + +## Rules + +- **Be opinionated.** When multiple words exist for the same concept, pick the best one and list the others under `_Avoid_`. +- **Keep definitions tight.** One or two sentences max. Define what it IS, not what it does. +- **Only include terms specific to this project's context.** General programming concepts (timeouts, error types, utility patterns) don't belong even if the project uses them extensively. Before adding a term, ask: is this a concept unique to this context, or a general programming concept? Only the former belongs. +- **Group terms under subheadings** when natural clusters emerge. If all terms belong to a single cohesive area, a flat list is fine. + +## Single vs multi-context repos + +**Single context (most repos):** One `CONTEXT.md` at the repo root. + +**Multiple contexts:** A `CONTEXT-MAP.md` at the repo root lists the contexts, where they live, and how they relate to each other: + +```md +# Context Map + +## Contexts + +- [Ordering](./src/ordering/CONTEXT.md) — receives and tracks customer orders +- [Billing](./src/billing/CONTEXT.md) — generates invoices and processes payments +- [Fulfillment](./src/fulfillment/CONTEXT.md) — manages warehouse picking and shipping + +## Relationships + +- **Ordering → Fulfillment**: Ordering emits `OrderPlaced` events; Fulfillment consumes them to start picking +- **Fulfillment → Billing**: Fulfillment emits `ShipmentDispatched` events; Billing consumes them to generate invoices +- **Ordering ↔ Billing**: Shared types for `CustomerId` and `Money` +``` + +The skill infers which structure applies: + +- If `CONTEXT-MAP.md` exists, read it to find contexts +- If only a root `CONTEXT.md` exists, single context +- If neither exists, create a root `CONTEXT.md` lazily when the first term is resolved + +When multiple contexts exist, infer which one the current topic relates to. If unclear, ask. diff --git a/.agents/skills/domain-modeling/SKILL.md b/.agents/skills/domain-modeling/SKILL.md new file mode 100644 index 0000000..d0f7e1a --- /dev/null +++ b/.agents/skills/domain-modeling/SKILL.md @@ -0,0 +1,74 @@ +--- +name: domain-modeling +description: Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model. +--- + +# Domain Modeling + +Actively build and sharpen the project's domain model as you design. This is the *active* discipline — challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely *reading* `CONTEXT.md` for vocabulary is not this skill — that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.) + +## File structure + +Most repos have a single context: + +``` +/ +├── CONTEXT.md +├── docs/ +│ └── adr/ +│ ├── 0001-event-sourced-orders.md +│ └── 0002-postgres-for-write-model.md +└── src/ +``` + +If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives: + +``` +/ +├── CONTEXT-MAP.md +├── docs/ +│ └── adr/ ← system-wide decisions +├── src/ +│ ├── ordering/ +│ │ ├── CONTEXT.md +│ │ └── docs/adr/ ← context-specific decisions +│ └── billing/ +│ ├── CONTEXT.md +│ └── docs/adr/ +``` + +Create files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed. + +## During the session + +### Challenge against the glossary + +When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?" + +### Sharpen fuzzy language + +When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things." + +### Discuss concrete scenarios + +When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts. + +### Cross-reference with code + +When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?" + +### Update CONTEXT.md inline + +When a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md). + +`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else. + +### Offer ADRs sparingly + +Only offer to create an ADR when all three are true: + +1. **Hard to reverse** — the cost of changing your mind later is meaningful +2. **Surprising without context** — a future reader will wonder "why did they do it this way?" +3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons + +If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md). diff --git a/.agents/skills/domain-modeling/agents/openai.yaml b/.agents/skills/domain-modeling/agents/openai.yaml new file mode 100644 index 0000000..7f1522d --- /dev/null +++ b/.agents/skills/domain-modeling/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Domain Modeling" + short_description: "Build and sharpen a domain model" diff --git a/.agents/skills/esx-framework/SKILL.md b/.agents/skills/esx-framework/SKILL.md new file mode 100644 index 0000000..6c1f940 --- /dev/null +++ b/.agents/skills/esx-framework/SKILL.md @@ -0,0 +1,47 @@ +--- +name: esx-framework +description: ESX Legacy Framework for FiveM - Player management, jobs, economy, inventory, weapons. Use when creating ESX resources or working with xPlayer, PlayerData, ESX functions. +author: germanfndez +version: 1.0.0 +mcp-server: projecthub +--- + +# ESX Framework Development + +Complete guide for developing with ESX Legacy Framework — the most trusted FiveM roleplay framework since 2017. + +## When to use + +- Creating or editing ESX resources/scripts +- Working with player data (xPlayer, PlayerData) +- Implementing jobs, economy, inventory, or weapon systems +- Using ESX client/server functions, callbacks, or events +- Questions about ESX best practices and optimization + +## How to use + +Read individual rule files for detailed explanations and examples: + +- **rules/core-concepts.md** — ESX architecture, PlayerData, xPlayer object, framework initialization +- **rules/client-functions.md** — Client-side ESX functions, UI systems, player state management +- **rules/server-functions.md** — Server-side functions, player retrieval, callbacks, triggers +- **rules/xplayer-methods.md** — xPlayer object methods: money, items, weapons, inventory, jobs, metadata +- **rules/jobs-economy.md** — Job system, salaries, accounts (money/bank), society management +- **rules/inventory-items.md** — Inventory system, item management, usable items, weight calculations +- **rules/weapons-loadout.md** — Weapon system, loadout, components, ammo, tints +- **rules/events-callbacks.md** — ESX events, server callbacks, client callbacks, secure net events +- **rules/best-practices.md** — ESX coding standards, optimization, security, naming conventions + +- **rules/reference-links.md** — Official ESX documentation links + +## Key principles + +1. **Always check for nil** — `if xPlayer then ... end` before using xPlayer +2. **Use ESX.GetPlayerFromId** — Standard player retrieval: `local xPlayer = ESX.GetPlayerFromId(source)` +3. **Wait for player load** — Check `ESX.IsPlayerLoaded()` on client before accessing PlayerData +4. **Never trust client** — Validate all data server-side, use SecureNetEvent for client events +5. **Follow ESX patterns** — Use ESX functions instead of reinventing (callbacks, notifications, etc.) +6. **Optimize loops** — Cache player objects, avoid unnecessary GetPlayerFromId calls +7. **Use camelCase** — Follow Lua naming: `myVariable`, `MyGlobalFunction`, `MY_CONSTANT` +8. **Minimal globals** — Keep variables local unless they need global scope +9. **Use ox_lib for UI** — Prefer ox_lib for menus, dialogs, notifications, progress bars instead of ESX UI diff --git a/.agents/skills/esx-framework/best-practices.md b/.agents/skills/esx-framework/best-practices.md new file mode 100644 index 0000000..8fe6a53 --- /dev/null +++ b/.agents/skills/esx-framework/best-practices.md @@ -0,0 +1,456 @@ +# ESX Best Practices + +Based on official ESX documentation: https://docs.esx-framework.org/en/tutorial/coding_practices + +## Naming Conventions + +### camelCase for local variables and functions + +```lua +local myVariable = 10 +local playerCount = 0 + +local function calculateDistance(pos1, pos2) + return #(pos1 - pos2) +end +``` + +### PascalCase for global functions + +```lua +function MyGlobalFunction() + print('This is global') +end +``` + +### UPPERCASE for constants + +```lua +local MAX_DISTANCE = 10.0 -- Lua 5.4 +local INTERACTION_KEY = 38 +local DEFAULT_SALARY = 500 +``` + +## Use Local Variables + +**ALWAYS prefer local over global** — locals are faster and prevent scope pollution. + +```lua +-- GOOD +local playerPed = PlayerPedId() +local playerCoords = GetEntityCoords(playerPed) + +-- BAD (global variables) +playerPed = PlayerPedId() +playerCoords = GetEntityCoords(playerPed) +``` + +## Caching + +Cache frequently accessed values to improve performance. + +```lua +-- GOOD: Cache once +local playerPed = PlayerPedId() +local playerCoords = GetEntityCoords(playerPed) + +CreateThread(function() + while condition do + -- Use cached values + local distance = #(playerCoords - targetCoords) + Wait(1000) + end +end) + +-- Listen for ped changes +AddEventHandler('esx:playerPedChanged', function(newPed) + playerPed = newPed +end) + +-- BAD: Call every iteration +CreateThread(function() + while condition do + local distance = #(GetEntityCoords(PlayerPedId()) - targetCoords) + Wait(1000) + end +end) +``` + +### Common caching patterns + +```lua +local playerId = PlayerId() +local serverId = GetPlayerServerId(playerId) +local playerPed = PlayerPedId() + +-- Update on ped change +AddEventHandler('esx:playerPedChanged', function(newPed) + playerPed = newPed +end) +``` + +## Avoid Infinite Loops + +Always include a condition to exit loops. + +```lua +-- BAD: True infinite loop +CreateThread(function() + while true do + Wait(0) + if IsControlJustPressed(0, 38) then + -- Do something + end + end +end) + +-- GOOD: Conditional loop +local function startPoliceThread() + CreateThread(function() + while ESX.PlayerData.job and ESX.PlayerData.job.name == 'police' do + Wait(0) + if IsControlJustPressed(0, 38) then + -- Do something + end + end + end) +end + +-- Start thread when job changes +AddEventHandler('esx:setJob', function(job) + if job.name == 'police' then + startPoliceThread() + end +end) + +-- Check on resource start +if ESX.PlayerData.job and ESX.PlayerData.job.name == 'police' then + startPoliceThread() +end +``` + +## Proper Wait Times + +Don't use `Wait(0)` unless absolutely necessary — adjust based on your needs. + +```lua +-- BAD: Unnecessary high frequency check +CreateThread(function() + while true do + Wait(0) -- Runs every frame! + local health = GetEntityHealth(playerPed) + end +end) + +-- GOOD: Reasonable frequency +CreateThread(function() + while true do + Wait(1000) -- Check every second + local health = GetEntityHealth(playerPed) + end +end) +``` + +## Modern Natives & Methods + +Use modern alternatives over outdated functions. + +```lua +-- Use PlayerPedId() instead of GetPlayerPed(-1) +local ped = PlayerPedId() + +-- Use vector math for distance +local distance = #(vector3(x1, y1, z1) - vector3(x2, y2, z2)) +-- NOT: GetDistanceBetweenCoords(x1, y1, z1, x2, y2, z2, true) + +-- Use joaat() for hashes +local hash = joaat('adder') +-- NOT: GetHashKey('adder') + +-- Use table insertion shortcut +table[#table + 1] = value +-- NOT: table.insert(table, value) + +-- Use direct nil assignment +table[index] = nil +-- NOT: table.remove(table, index) +``` + +## DRY (Don't Repeat Yourself) + +Write reusable code. + +```lua +-- BAD: Repeated code +RegisterNetEvent('myResource:giveItem1') +AddEventHandler('myResource:giveItem1', function() + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + if xPlayer.canCarryItem('bread', 1) then + xPlayer.addInventoryItem('bread', 1) + xPlayer.showNotification('Received bread', 'success') + end +end) + +RegisterNetEvent('myResource:giveItem2') +AddEventHandler('myResource:giveItem2', function() + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + if xPlayer.canCarryItem('water', 1) then + xPlayer.addInventoryItem('water', 1) + xPlayer.showNotification('Received water', 'success') + end +end) + +-- GOOD: Reusable function +local function giveItem(playerId, item, count, label) + local xPlayer = ESX.GetPlayerFromId(playerId) + if not xPlayer then return end + + if xPlayer.canCarryItem(item, count) then + xPlayer.addInventoryItem(item, count) + xPlayer.showNotification('Received ' .. label, 'success') + return true + else + xPlayer.showNotification('Inventory full', 'error') + return false + end +end + +RegisterNetEvent('myResource:giveItem') +AddEventHandler('myResource:giveItem', function(item, count, label) + giveItem(source, item, count, label) +end) +``` + +## Comments & Documentation + +Use clear comments for complex logic. + +```lua +---@param playerId number The player's server ID +---@param item string The item name +---@param count number The amount to give +---@return boolean success Whether the item was given +local function giveItem(playerId, item, count) + local xPlayer = ESX.GetPlayerFromId(playerId) + if not xPlayer then return false end + + -- Check if player has inventory space + if not xPlayer.canCarryItem(item, count) then + xPlayer.showNotification('Inventory full', 'error') + return false + end + + xPlayer.addInventoryItem(item, count) + return true +end +``` + +## Security + +### Never trust client data + +```lua +-- BAD: Client sends price +RegisterNetEvent('shop:buyItem') +AddEventHandler('shop:buyItem', function(item, price) + local xPlayer = ESX.GetPlayerFromId(source) + xPlayer.removeMoney(price) -- Client controls price! +end) + +-- GOOD: Server validates price +RegisterNetEvent('shop:buyItem') +AddEventHandler('shop:buyItem', function(item) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + local price = Config.Items[item].price -- Server controls price + if xPlayer.getMoney() >= price then + xPlayer.removeMoney(price, 'Bought ' .. item) + xPlayer.addInventoryItem(item, 1) + end +end) +``` + +### Use SecureNetEvent for client events + +```lua +-- CLIENT: Can only be triggered by server +ESX.SecureNetEvent('myResource:rewardPlayer', function(reward) + -- Safe to use, server-only trigger + print('Received reward:', reward) +end) + +-- SERVER: Trigger the secure event +xPlayer.triggerEvent('myResource:rewardPlayer', 1000) +``` + +### Validate everything server-side + +```lua +RegisterNetEvent('garage:takeVehicle') +AddEventHandler('garage:takeVehicle', function(vehiclePlate) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + -- Validate player owns this vehicle + MySQL.Async.fetchScalar('SELECT 1 FROM owned_vehicles WHERE plate = @plate AND owner = @owner', { + ['@plate'] = vehiclePlate, + ['@owner'] = xPlayer.identifier + }, function(result) + if result then + -- Player owns vehicle, spawn it + spawnVehicle(source, vehiclePlate) + else + -- Cheater trying to spawn vehicle they don't own + xPlayer.kick('Attempted to spawn vehicle they don\'t own') + end + end) +end) +``` + +## Error Handling + +Always check for nil and handle errors. + +```lua +-- GOOD +local xPlayer = ESX.GetPlayerFromId(source) +if not xPlayer then + print('ERROR: xPlayer is nil for source ' .. source) + return +end + +local itemData = xPlayer.getInventoryItem('bread') +if not itemData then + print('ERROR: Item not found') + return +end + +if itemData.count >= 1 then + xPlayer.removeInventoryItem('bread', 1) +end +``` + +## Indentation + +Use **2 spaces** for indentation (ESX standard). + +```lua +if condition then + if anotherCondition then + doSomething() + end +end +``` + +## Lua 5.4 Features + +If you have Lua 5.4 enabled in your fxmanifest: + +```lua +lua54 'yes' +``` + +You can use: + +```lua +-- Constants +local MAX_DISTANCE = 10.0 + +-- Compound operators +count += 1 +count -= 1 +count *= 2 +count /= 2 + +-- to-be-closed variables +local file = io.open('file.txt', 'r') +``` + +## Folder Structure + +Organize your resource properly: + +``` +myresource/ +├── fxmanifest.lua +├── config.lua +├── client/ +│ ├── main.lua +│ └── menu.lua +├── server/ +│ ├── main.lua +│ └── callbacks.lua +└── shared/ + └── utils.lua +``` + +## Resource Optimization Checklist + +- [ ] Use `local` for all variables unless they must be global +- [ ] Cache frequently accessed values (PlayerPedId, coords, etc.) +- [ ] Use appropriate Wait times (avoid Wait(0) when possible) +- [ ] Use modern natives and methods +- [ ] Avoid infinite loops (add exit conditions) +- [ ] Minimize database queries (batch when possible) +- [ ] Don't create threads unnecessarily +- [ ] Use `exports` over triggers when possible +- [ ] Validate all client data server-side +- [ ] Use ESX.SecureNetEvent for client events +- [ ] Check for nil before using objects +- [ ] Use descriptive variable/function names +- [ ] Add comments for complex logic +- [ ] Follow ESX naming conventions + +## Performance Tips + +1. **Cache ESX object once**: + ```lua + -- Resource start + ESX = exports.es_extended.getSharedObject() + + -- NOT in every function + ``` + +2. **Minimize GetPlayerFromId calls**: + ```lua + -- GOOD + local xPlayer = ESX.GetPlayerFromId(source) + local money = xPlayer.getMoney() + local job = xPlayer.getJob() + + -- BAD + local money = ESX.GetPlayerFromId(source).getMoney() + local job = ESX.GetPlayerFromId(source).getJob() + ``` + +3. **Use GetExtendedPlayers with filters**: + ```lua + -- GOOD + local police = ESX.GetExtendedPlayers('job', 'police') + + -- BAD (loops all players) + local police = {} + for _, xPlayer in pairs(ESX.GetExtendedPlayers()) do + if xPlayer.job.name == 'police' then + table.insert(police, xPlayer) + end + end + ``` + +4. **Batch database operations**: + ```lua + -- GOOD: One query + MySQL.Async.execute('INSERT INTO logs (player, action) VALUES (?, ?), (?, ?)', { + player1, action1, + player2, action2 + }) + + -- BAD: Multiple queries + MySQL.Async.execute('INSERT INTO logs (player, action) VALUES (?, ?)', {player1, action1}) + MySQL.Async.execute('INSERT INTO logs (player, action) VALUES (?, ?)', {player2, action2}) + ``` diff --git a/.agents/skills/esx-framework/client-functions.md b/.agents/skills/esx-framework/client-functions.md new file mode 100644 index 0000000..be53815 --- /dev/null +++ b/.agents/skills/esx-framework/client-functions.md @@ -0,0 +1,256 @@ +# ESX Client Functions + +All functions available on **CLIENT side** via `ESX` object. + +## Player State + +### ESX.IsPlayerLoaded() + +Returns if player has successfully loaded. + +```lua +if ESX.IsPlayerLoaded() then + print('Player is loaded and ready') +end + +-- Common pattern: wait for load +while not ESX.IsPlayerLoaded() do + Wait(250) +end +``` + +### ESX.GetPlayerData() + +Returns `ESX.PlayerData` (same as accessing it directly). + +```lua +local playerData = ESX.GetPlayerData() +print('Player job:', playerData.job.name) +``` + +### ESX.SetPlayerData(key, value) + +Sets player data locally (will be overwritten by server updates). + +```lua +ESX.SetPlayerData('customKey', 'customValue') +print(ESX.PlayerData.customKey) -- 'customValue' +``` + +## Secure Events + +### ESX.SecureNetEvent(name, callback) + +Registers a client event that can ONLY be triggered by server (prevents cheaters). + +```lua +ESX.SecureNetEvent('myResource:giveReward', function(amount) + -- Only server can trigger this + print('Received reward:', amount) +end) + +-- Server side: +TriggerClientEvent('myResource:giveReward', playerId, 1000) +``` + +## Inventory + +### ESX.SearchInventory(items, count) + +Searches player inventory for items. + +```lua +-- Search single item +local breadItem = ESX.SearchInventory('bread') +if breadItem and breadItem.count > 0 then + print('You have', breadItem.count, 'bread') +end + +-- Search multiple items +local items = ESX.SearchInventory({'bread', 'water'}, true) +for itemName, itemData in pairs(items) do + print(itemName, ':', itemData.count) +end +``` + +## Notifications + +ESX has its own notification system, but **USE OX_LIB** for notifications instead: + +```lua +-- Use ox_lib for notifications (preferred) +lib.notify({ + title = 'Bank', + description = 'You received $500', + type = 'success' +}) +``` + +## Input & Controls + +### ESX.RegisterInput(command, label, inputGroup, key, onPress, onRelease) + +Registers a keybind. + +```lua +ESX.RegisterInput('openInventory', 'Open Inventory', 'keyboard', 'f2', + function() + -- Key pressed + print('Opening inventory') + end, + function() + -- Key released (optional) + print('Closed inventory') + end +) +``` + +### ESX.HashString(str) + +Gets input hash/mapping for display (wrongly named, returns input label). + +```lua +local inputLabel = ESX.HashString('openInventory') +ESX.ShowHelpNotification('Press ' .. inputLabel .. ' to open inventory', false, true, 3000) +``` + +## Spawn Management + +### ESX.DisableSpawnManager() + +Disables FiveM's default spawn manager. + +```lua +ESX.DisableSpawnManager() +``` + +### ESX.SpawnPlayer(coords, heading, cb) + +Spawns player at coords with optional callback. + +```lua +local spawnCoords = vector4(100.0, 200.0, 50.0, 90.0) +ESX.SpawnPlayer(spawnCoords, function() + print('Player spawned') +end) +``` + +## Coords & Position + +### ESX.GetAccount(accountName) + +Returns player's account data. + +```lua +local bankAccount = ESX.GetAccount('bank') +print('Bank balance:', bankAccount.money) +``` + +## Vehicle Functions + +### ESX.GetVehicleTypeClient(model) + +Returns vehicle type for model. + +```lua +local vehicleType = ESX.GetVehicleTypeClient('t20') +print('Vehicle type:', vehicleType) -- 'automobile', 'bike', 'boat', 'heli', etc. +``` + +## UI Components (Use ox_lib) + +ESX has its own UI resources, but **USE OX_LIB** for all UI components: + +```lua +-- Progress bars +if lib.progressBar({ + duration = 5000, + label = 'Repairing vehicle...', + useWhileDead = false, + canCancel = true, + disable = { + car = true, + move = true + }, + anim = { + dict = 'mini@repair', + clip = 'fixing_a_player' + } +}) then + print('Repair complete') +end + +-- Context menus +lib.registerContext({ + id = 'player_menu', + title = 'Player Menu', + options = { + { + title = 'Give Money', + icon = 'dollar-sign', + onSelect = function() + -- Handle give money + end + }, + { + title = 'Check ID', + icon = 'id-card', + onSelect = function() + -- Handle check ID + end + } + } +}) + +lib.showContext('player_menu') + +-- Text UI +lib.showTextUI('[E] - Interact', { + position = "right-center" +}) + +lib.hideTextUI() +``` + +## Best Practices + +1. **Always check player loaded before using PlayerData**: + ```lua + if not ESX.IsPlayerLoaded() then return end + ``` + +2. **Cache PlayerData locally when needed**: + ```lua + local job = ESX.PlayerData.job + if job.name == 'police' then + -- Do something + end + ``` + +3. **Use SecureNetEvent for events that modify player state**: + ```lua + -- CLIENT + ESX.SecureNetEvent('myResource:serverAction', function(data) + -- Safe to use, only server can trigger + end) + ``` + +4. **Search inventory before assuming item exists**: + ```lua + local item = ESX.SearchInventory('bread') + if item and item.count > 0 then + -- Player has bread + end + ``` + +5. **Use ox_lib for all UI**: + ```lua + -- Notifications + lib.notify({title = 'Success', description = 'Action completed', type = 'success'}) + + -- Progress bars + lib.progressBar({duration = 5000, label = 'Working...'}) + + -- Context menus + lib.showContext('my_menu') + ``` diff --git a/.agents/skills/esx-framework/core-concepts.md b/.agents/skills/esx-framework/core-concepts.md new file mode 100644 index 0000000..a85ec3b --- /dev/null +++ b/.agents/skills/esx-framework/core-concepts.md @@ -0,0 +1,217 @@ +# ESX Core Concepts + +## Framework Architecture + +ESX Legacy is a **modular framework** that provides: +- Player management and persistence +- Job and economy systems +- Inventory and weapon management +- UI components (menus, notifications, progress bars) +- Database integration (MySQL/MariaDB) + +## Getting ESX Object + +### Client Side + +```lua +-- RECOMMENDED: Using CreateThread +CreateThread(function() + while not ESX do + Wait(100) + end + + while not ESX.IsPlayerLoaded() do + Wait(100) + end + + -- ESX is now available and player is loaded + print('Player loaded:', ESX.PlayerData.firstName, ESX.PlayerData.lastName) +end) +``` + +### Server Side + +```lua +-- ESX is immediately available on server +ESX = exports['es_extended']:getSharedObject() + +-- Or if using newer exports pattern +ESX = exports.es_extended.getSharedObject() +``` + +## PlayerData Structure + +**Available on CLIENT only** via `ESX.PlayerData`: + +```lua +ESX.PlayerData = { + coords = vector3(x, y, z), -- Last known position + ped = PlayerPedId(), -- Player ped handle + group = "user", -- Permission group (user/admin/superadmin) + identifier = "char1:license...", -- Character identifier + ssn = "123-45-6789", -- Social Security Number + inventory = {}, -- Items (table with item name as key) + job = {}, -- Job data (name, label, grade, salary, etc.) + loadout = {}, -- Weapons + name = "John Doe", -- Player name (Steam/FiveM) + playerId = 1, -- Server ID + source = 1, -- Server ID + variables = {}, -- Custom variables set by server + weight = 12, -- Current inventory weight + maxWeight = 24, -- Maximum inventory weight + metadata = {}, -- Custom metadata + admin = false, -- Is admin (based on group) + license = "license:...", -- Rockstar license + dateofbirth = "01/01/2000", -- Character DOB + height = 181, -- Character height + dead = false, -- Is player dead + firstName = "John", -- Character first name + lastName = "Doe", -- Character last name + sex = "m", -- Character gender (m/f) + money = 187, -- Cash amount (use accounts instead) + accounts = { -- Money accounts + money = 187, + bank = 5000, + black_money = 0 + } +} +``` + +## xPlayer Object (Server) + +**Available on SERVER only** — represents a player with methods: + +### Getting xPlayer + +```lua +-- Standard way +local xPlayer = ESX.GetPlayerFromId(source) + +-- By identifier +local xPlayer = ESX.GetPlayerFromIdentifier("license:abc123...") +``` + +### xPlayer contains same data as PlayerData PLUS server-only methods: + +```lua +xPlayer.identifier -- Player identifier +xPlayer.name -- Player name +xPlayer.job -- Job data +xPlayer.accounts -- Money accounts +xPlayer.inventory -- Items +xPlayer.loadout -- Weapons +xPlayer.group -- Permission group +xPlayer.coords -- Last known coords +-- ... many methods (see xplayer-methods.md) +``` + +## Framework Initialization + +### Client Startup Flow + +1. ESX object becomes available +2. Player connects to server +3. Server creates xPlayer +4. Client receives PlayerData via `esx:playerLoaded` event +5. `ESX.PlayerLoaded` becomes true +6. `ESX.PlayerData` is populated + +### Server Startup Flow + +1. ESX loads from database +2. Jobs are loaded (`ESX.Jobs`) +3. Items are loaded (`ESX.Items`) +4. Resources can now use ESX + +## Important Events + +### Client Events + +```lua +-- Player loaded (character selected) +AddEventHandler('esx:playerLoaded', function(playerData) + ESX.PlayerData = playerData +end) + +-- Player data updated +AddEventHandler('esx:updatePlayerData', function(key, value) + ESX.PlayerData[key] = value +end) + +-- Job changed +AddEventHandler('esx:setJob', function(job) + ESX.PlayerData.job = job +end) + +-- Player died +AddEventHandler('esx:onPlayerDeath', function(data) + -- Handle death +end) + +-- Player spawned +AddEventHandler('esx:onPlayerSpawn', function() + -- Handle spawn +end) +``` + +### Server Events + +```lua +-- Player joined (before character selection) +AddEventHandler('esx:onPlayerJoined', function() + local _source = source + -- Player connected +end) + +-- Player loaded (character selected) +AddEventHandler('esx:playerLoaded', function(playerId, xPlayer) + -- xPlayer is now available +end) + +-- Player dropped +AddEventHandler('esx:playerDropped', function(playerId, reason) + -- Player left server +end) +``` + +## Constants and Configuration + +```lua +-- Use UPPERCASE for constants +local MAX_DISTANCE = 10.0 -- Lua 5.4 const +local INTERACTION_KEY = 38 -- E key + +-- Use Config for resource settings +Config = {} +Config.MaxWeight = 24 +Config.EnableSocieties = true +``` + +## Best Practices + +1. **Always wait for player load on client**: + ```lua + while not ESX.IsPlayerLoaded() do + Wait(100) + end + ``` + +2. **Check for nil on server**: + ```lua + local xPlayer = ESX.Player(source) + if not xPlayer then return end + ``` + +3. **Cache ESX object**: + ```lua + -- Do this once at resource start + ESX = exports.es_extended.getSharedObject() + + -- NOT in every function/event + ``` + +4. **Use ESX.GetPlayerFromId**: + ```lua + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + ``` diff --git a/.agents/skills/esx-framework/events-callbacks.md b/.agents/skills/esx-framework/events-callbacks.md new file mode 100644 index 0000000..04ecbfd --- /dev/null +++ b/.agents/skills/esx-framework/events-callbacks.md @@ -0,0 +1,450 @@ +# ESX Events & Callbacks + +## Server Callbacks + +Server callbacks allow the client to request data from the server. + +### Registering a Server Callback + +```lua +-- SERVER +ESX.RegisterServerCallback('myResource:getPlayerData', function(source, cb, additionalParam) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return cb(nil) end + + local data = { + money = xPlayer.getMoney(), + job = xPlayer.job.name, + grade = xPlayer.job.grade, + param = additionalParam + } + + cb(data) +end) +``` + +### Calling a Server Callback + +```lua +-- CLIENT +ESX.TriggerServerCallback('myResource:getPlayerData', function(data) + if data then + print('Money:', data.money) + print('Job:', data.job) + end +end, 'extraParam') +``` + +### Common Patterns + +```lua +-- Check if player can afford something +ESX.RegisterServerCallback('shop:canAfford', function(source, cb, itemName) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return cb(false) end + + local price = Config.Items[itemName].price + cb(xPlayer.getMoney() >= price) +end) + +-- CLIENT usage +ESX.TriggerServerCallback('shop:canAfford', function(canAfford) + if canAfford then + -- Show buy menu + else + lib.notify({title = 'Shop', description = 'Not enough money', type = 'error'}) + end +end, 'bread') +``` + +## Client Callbacks + +**WARNING**: Client callbacks should NEVER be used for sensitive operations! Client can fake any data. + +### Registering a Client Callback + +```lua +-- CLIENT +ESX.RegisterClientCallback('myResource:getVehicleModel', function(cb, vehicle) + local model = GetEntityModel(vehicle) + cb(model) +end) +``` + +### Calling a Client Callback (Server) + +```lua +-- SERVER +ESX.TriggerClientCallback(source, 'myResource:getVehicleModel', function(model) + print('Vehicle model:', model) +end, vehicleNetId) +``` + +## ESX Events + +### Client Events + +#### esx:playerLoaded + +Fired when player's character loads. + +```lua +-- CLIENT +AddEventHandler('esx:playerLoaded', function(playerData) + ESX.PlayerData = playerData + print('Player loaded:', playerData.firstName, playerData.lastName) + + -- Initialize your resource + startClientScripts() +end) +``` + +#### esx:updatePlayerData + +Fired when any PlayerData is updated. + +```lua +-- CLIENT +AddEventHandler('esx:updatePlayerData', function(key, value) + ESX.PlayerData[key] = value + + if key == 'job' then + print('Job changed to:', value.name) + elseif key == 'money' then + print('Money updated:', value) + end +end) +``` + +#### esx:setJob + +Fired when player's job changes. + +```lua +-- CLIENT +AddEventHandler('esx:setJob', function(job) + ESX.PlayerData.job = job + print('New job:', job.name, 'Grade:', job.grade) + + -- Start/stop job-specific systems + if job.name == 'police' then + startPoliceBlips() + else + stopPoliceBlips() + end +end) +``` + +#### esx:setAccountMoney + +Fired when player's account money changes. + +```lua +-- CLIENT +AddEventHandler('esx:setAccountMoney', function(account) + print('Account updated:', account.name, account.money) +end) +``` + +#### esx:addInventoryItem + +Fired when player receives an item. + +```lua +-- CLIENT +AddEventHandler('esx:addInventoryItem', function(item, count) + print('Received:', count, 'x', item.label) +end) +``` + +#### esx:removeInventoryItem + +Fired when player loses an item. + +```lua +-- CLIENT +AddEventHandler('esx:removeInventoryItem', function(item, count) + print('Removed:', count, 'x', item.label) +end) +``` + +#### esx:onPlayerDeath + +Fired when player dies. + +```lua +-- CLIENT +AddEventHandler('esx:onPlayerDeath', function(data) + print('Player died') + print('Killer:', data.killerServerId) + + -- Respawn logic +end) +``` + +#### esx:onPlayerSpawn + +Fired when player spawns. + +```lua +-- CLIENT +AddEventHandler('esx:onPlayerSpawn', function() + print('Player spawned') +end) +``` + +#### esx:playerPedChanged + +Fired when player ped changes (e.g., after model change). + +```lua +-- CLIENT +local playerPed = PlayerPedId() + +AddEventHandler('esx:playerPedChanged', function(newPed) + playerPed = newPed + print('Ped changed:', newPed) +end) +``` + +### Server Events + +#### esx:onPlayerJoined + +Fired when player connects (before character selection). + +```lua +-- SERVER +AddEventHandler('esx:onPlayerJoined', function() + local _source = source + print('Player connected:', _source) +end) +``` + +#### esx:playerLoaded + +Fired when player's character loads. + +```lua +-- SERVER +AddEventHandler('esx:playerLoaded', function(playerId, xPlayer) + print('Player loaded:', xPlayer.getName()) + + -- Give welcome bonus + if xPlayer.getMeta('firstTime') == nil then + xPlayer.addMoney(5000, 'Welcome bonus') + xPlayer.setMeta('firstTime', false) + end +end) +``` + +#### esx:playerDropped + +Fired when player disconnects. + +```lua +-- SERVER +AddEventHandler('esx:playerDropped', function(playerId, reason) + print('Player ' .. playerId .. ' left:', reason) +end) +``` + +#### esx:setJob + +Fired when player's job changes (server-side). + +```lua +-- SERVER +AddEventHandler('esx:setJob', function(playerId, job, lastJob) + local xPlayer = ESX.GetPlayerFromId(playerId) + if not xPlayer then return end + + print(xPlayer.getName() .. ' changed from ' .. lastJob.name .. ' to ' .. job.name) + + -- Log job change + MySQL.Async.execute('INSERT INTO job_changes (identifier, old_job, new_job) VALUES (@identifier, @old, @new)', { + ['@identifier'] = xPlayer.identifier, + ['@old'] = lastJob.name, + ['@new'] = job.name + }) +end) +``` + +## Secure Net Events + +Use SecureNetEvent for client events that should only be triggered by server. + +### Registering Secure Net Event + +```lua +-- CLIENT +ESX.SecureNetEvent('myResource:giveReward', function(amount, reason) + -- Only server can trigger this + print('Received reward:', amount, reason) + + lib.notify({ + title = 'Reward', + description = 'You received $' .. amount .. ' for ' .. reason, + type = 'success' + }) +end) +``` + +### Triggering Secure Net Event + +```lua +-- SERVER +local xPlayer = ESX.GetPlayerFromId(source) +xPlayer.triggerEvent('myResource:giveReward', 500, 'completing mission') +``` + +## Custom Events + +### Triggering Client Event from Server + +```lua +-- SERVER +local xPlayer = ESX.GetPlayerFromId(source) +xPlayer.triggerEvent('myResource:openMenu', menuData) + +-- Or using TriggerClientEvent +TriggerClientEvent('myResource:openMenu', source, menuData) + +-- Or for multiple players +local officers = ESX.GetExtendedPlayers('job', 'police') +for i, xPlayer in ipairs(officers) do + xPlayer.triggerEvent('myResource:alert', 'Code 3 at Legion Square') +end +``` + +### Triggering Server Event from Client + +```lua +-- CLIENT +TriggerServerEvent('myResource:buyItem', 'bread') +``` + +### Receiving Custom Events + +```lua +-- CLIENT +RegisterNetEvent('myResource:openMenu') +AddEventHandler('myResource:openMenu', function(menuData) + -- Open menu with data +end) + +-- SERVER +RegisterNetEvent('myResource:buyItem') +AddEventHandler('myResource:buyItem', function(itemName) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + -- Validate and process purchase + local price = Config.Items[itemName].price + if xPlayer.getMoney() >= price then + xPlayer.removeMoney(price, 'Bought ' .. itemName) + xPlayer.addInventoryItem(itemName, 1) + end +end) +``` + +## Best Practices + +1. **Always validate server-side**: + ```lua + -- BAD: Trust client data + RegisterNetEvent('shop:buy') + AddEventHandler('shop:buy', function(price) + local xPlayer = ESX.GetPlayerFromId(source) + xPlayer.removeMoney(price) -- Client controls price! + end) + + -- GOOD: Server validates + RegisterNetEvent('shop:buy') + AddEventHandler('shop:buy', function(itemName) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + local price = Config.Items[itemName].price + if xPlayer.getMoney() >= price then + xPlayer.removeMoney(price, 'Bought ' .. itemName) + xPlayer.addInventoryItem(itemName, 1) + end + end) + ``` + +2. **Use callbacks for data requests**: + ```lua + -- GOOD: Use callback + ESX.TriggerServerCallback('shop:canAfford', function(canAfford) + if canAfford then + -- Do something + end + end, 'bread') + + -- BAD: Use event + TriggerServerEvent('shop:checkAfford', 'bread') + RegisterNetEvent('shop:affordResult') + AddEventHandler('shop:affordResult', function(canAfford) + -- Client can fake this event + end) + ``` + +3. **Use SecureNetEvent for important client events**: + ```lua + -- CLIENT + ESX.SecureNetEvent('police:giveArmor', function() + SetPedArmour(PlayerPedId(), 100) + end) + + -- SERVER (validated) + local xPlayer = ESX.GetPlayerFromId(source) + if xPlayer.job.name == 'police' then + xPlayer.triggerEvent('police:giveArmor') + end + ``` + +4. **Always check for nil**: + ```lua + RegisterNetEvent('myResource:action') + AddEventHandler('myResource:action', function() + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + -- Safe to use xPlayer + end) + ``` + +5. **Use proper event naming**: + ```lua + -- GOOD: Descriptive names + 'myResource:openShopMenu' + 'myResource:buyItem' + 'myResource:sellItem' + + -- BAD: Vague names + 'myResource:event1' + 'myResource:action' + 'openMenu' + ``` + +6. **Listen to ESX events for state changes**: + ```lua + -- CLIENT: React to job changes + AddEventHandler('esx:setJob', function(job) + if job.name == 'police' then + startPoliceFeatures() + else + stopPoliceFeatures() + end + end) + + -- Check on resource start too + CreateThread(function() + while not ESX.IsPlayerLoaded() do Wait(100) end + + if ESX.PlayerData.job.name == 'police' then + startPoliceFeatures() + end + end) + ``` diff --git a/.agents/skills/esx-framework/reference-links.md b/.agents/skills/esx-framework/reference-links.md new file mode 100644 index 0000000..13773a1 --- /dev/null +++ b/.agents/skills/esx-framework/reference-links.md @@ -0,0 +1,137 @@ +# ESX Framework Reference Links + +## Official Documentation + +- **Main Documentation**: https://docs.esx-framework.org/en +- **GitHub Repository**: https://github.com/esx-framework/esx_core +- **Discord Community**: https://discord.esx-framework.org + +## Core Documentation + +### Getting Started +- **Introduction**: https://docs.esx-framework.org/en +- **ESX Core Overview**: https://docs.esx-framework.org/en/esx_core +- **Best Coding Practices**: https://docs.esx-framework.org/en/tutorial/coding_practices +- **Developing a Script**: https://docs.esx-framework.org/en/tutorial/developing + +### Client-Side +- **Client Functions**: https://docs.esx-framework.org/en/esx_core/es_extended/client/functions +- **Client Events**: https://docs.esx-framework.org/en/esx_core/es_extended/events/client +- **Client Modules**: https://docs.esx-framework.org/en/esx_core/es_extended/client + - **Callback**: https://docs.esx-framework.org/en/esx_core/es_extended/client/modules/callback + - **ESX.Game**: https://docs.esx-framework.org/en/esx_core/es_extended/client/modules/game + - **Streaming**: https://docs.esx-framework.org/en/esx_core/es_extended/client/modules/streaming + - **Scaleform**: https://docs.esx-framework.org/en/esx_core/es_extended/client/modules/scaleform + +### Server-Side +- **Server Functions**: https://docs.esx-framework.org/en/esx_core/es_extended/server/functions +- **Server Events**: https://docs.esx-framework.org/en/esx_core/es_extended/events/server +- **xPlayer Functions**: https://docs.esx-framework.org/en/esx_core/es_extended/server/xplayer +- **OneSync**: https://docs.esx-framework.org/en/esx_core/es_extended/server/onesync + +### Shared +- **PlayerData Structure**: https://docs.esx-framework.org/en/esx_core/es_extended/playerdata +- **Shared Functions**: https://docs.esx-framework.org/en/esx_core/es_extended/shared + - **Math**: https://docs.esx-framework.org/en/esx_core/es_extended/shared/math + - **Table**: https://docs.esx-framework.org/en/esx_core/es_extended/shared/table + - **Timeout**: https://docs.esx-framework.org/en/esx_core/es_extended/shared/timeout + +### Configuration +- **Main Config**: https://docs.esx-framework.org/en/esx_core/es_extended/config/main +- **Discord Logs**: https://docs.esx-framework.org/en/esx_core/es_extended/config/logs +- **Weapon Config**: https://docs.esx-framework.org/en/esx_core/es_extended/config/weapon +- **Adjustments**: https://docs.esx-framework.org/en/esx_core/es_extended/config/adjustments + +### Commands +- **Commands Documentation**: https://docs.esx-framework.org/en/esx_core/es_extended/commands + +## UI Components + +- **esx_context**: https://docs.esx-framework.org/en/esx_core/esx_context +- **esx_notify**: https://docs.esx-framework.org/en/esx_core/esx_notify +- **esx_progressbar**: https://docs.esx-framework.org/en/esx_core/esx_progressbar +- **esx_textui**: https://docs.esx-framework.org/en/esx_core/esx_textui +- **esx_menu_default**: https://docs.esx-framework.org/en/esx_core/esx_menu_default +- **esx_menu_dialog**: https://docs.esx-framework.org/en/esx_core/esx_menu_dialog +- **esx_menu_list**: https://docs.esx-framework.org/en/esx_core/esx_menu_list + +## Player Systems + +- **esx_identity**: https://docs.esx-framework.org/en/esx_core/esx_identity +- **esx_multicharacter**: https://docs.esx-framework.org/en/esx_core/esx_multicharacter +- **esx_skin**: https://docs.esx-framework.org/en/esx_core/esx_skin +- **skinchanger**: https://docs.esx-framework.org/en/esx_core/skinchanger + +## Popular Addons + +### Jobs +- **Police Job**: https://docs.esx-framework.org/en/esx_addons/esx_policejob +- **Ambulance Job**: https://docs.esx-framework.org/en/esx_addons/esx_ambulancejob +- **Mechanic Job**: https://docs.esx-framework.org/en/esx_addons/esx_mechanicjob +- **Taxi Job**: https://docs.esx-framework.org/en/esx_addons/esx_taxijob +- **Generic Jobs**: https://docs.esx-framework.org/en/esx_addons/esx_jobs + +### Economy & Shops +- **Banking**: https://docs.esx-framework.org/en/esx_addons/esx_banking +- **Shops**: https://docs.esx-framework.org/en/esx_addons/esx_shops +- **Weapon Shop**: https://docs.esx-framework.org/en/esx_addons/esx_weaponshop +- **Vehicle Shop**: https://docs.esx-framework.org/en/esx_addons/esx_vehicleshop +- **Clothe Shop**: https://docs.esx-framework.org/en/esx_addons/esx_clotheshop +- **LS Custom**: https://docs.esx-framework.org/en/esx_addons/esx_lscustom +- **Barbershop**: https://docs.esx-framework.org/en/esx_addons/esx_barbershop + +### Systems +- **Billing**: https://docs.esx-framework.org/en/esx_addons/esx_billing +- **License**: https://docs.esx-framework.org/en/esx_addons/esx_license +- **Society**: https://docs.esx-framework.org/en/esx_addons/esx_society +- **Datastore**: https://docs.esx-framework.org/en/esx_addons/esx_datastore +- **Service**: https://docs.esx-framework.org/en/esx_addons/esx_service +- **Status**: https://docs.esx-framework.org/en/esx_addons/esx_status +- **Basic Needs**: https://docs.esx-framework.org/en/esx_addons/esx_basicneeds + +### Vehicles & Property +- **Garage**: https://docs.esx-framework.org/en/esx_addons/esx_garage +- **Property**: https://docs.esx-framework.org/en/esx_addons/esx_property +- **DMV School**: https://docs.esx-framework.org/en/esx_addons/esx_dmvschool + +### Other +- **HUD**: https://docs.esx-framework.org/en/esx_addons/esx_hud +- **Animations**: https://docs.esx-framework.org/en/esx_addons/esx_animations +- **RP Chat**: https://docs.esx-framework.org/en/esx_addons/esx_rpchat +- **Job Listing**: https://docs.esx-framework.org/en/esx_addons/esx_joblisting + +## Troubleshooting + +- **Common Issues**: https://docs.esx-framework.org/en/troubleshoot +- **GitHub Issues**: https://github.com/esx-framework/esx_core/issues + +## Community Resources + +- **Discord**: https://discord.esx-framework.org (13,000+ members) +- **GitHub Organization**: https://github.com/esx-framework +- **Official Website**: https://esx-framework.org + +## Related Documentation + +### FiveM Documentation +- **Natives Reference**: https://docs.fivem.net/natives/ +- **Scripting Reference**: https://docs.fivem.net/docs/scripting-reference/ +- **Resource Manifest**: https://docs.fivem.net/docs/scripting-reference/resource-manifest/resource-manifest/ + +### Database (oxmysql) +- **oxmysql Documentation**: https://overextended.dev/oxmysql + +### UI Library (ox_lib) +- **ox_lib Documentation**: https://overextended.dev/ox_lib + +## Quick Access + +When helping developers, reference these pages for: + +- **Getting Started**: https://docs.esx-framework.org/en/tutorial/developing +- **Client Functions**: https://docs.esx-framework.org/en/esx_core/es_extended/client/functions +- **Server Functions**: https://docs.esx-framework.org/en/esx_core/es_extended/server/functions +- **xPlayer Methods**: https://docs.esx-framework.org/en/esx_core/es_extended/server/xplayer +- **PlayerData Structure**: https://docs.esx-framework.org/en/esx_core/es_extended/playerdata +- **Best Practices**: https://docs.esx-framework.org/en/tutorial/coding_practices +- **Coding Annotations**: https://docs.esx-framework.org/en/tutorial/coding_practices/annotations diff --git a/.agents/skills/esx-framework/server-functions.md b/.agents/skills/esx-framework/server-functions.md new file mode 100644 index 0000000..9d9e9bb --- /dev/null +++ b/.agents/skills/esx-framework/server-functions.md @@ -0,0 +1,464 @@ +# ESX Server Functions + +All functions available on **SERVER side** via `ESX` object. + +## Player Retrieval + +### ESX.GetPlayerFromId(source) + +Returns xPlayer object for player. + +```lua +local xPlayer = ESX.GetPlayerFromId(source) +if not xPlayer then return end + +print('Player name:', xPlayer.getName()) +``` + +### ESX.GetPlayerFromIdentifier(identifier) + +Returns xPlayer object by identifier. + +```lua +local xPlayer = ESX.GetPlayerFromIdentifier('license:abc123...') +if not xPlayer then return end +``` + +### ESX.GetExtendedPlayers(key, value) + +Returns multiple players matching filter. + +```lua +-- Get all police officers +local policeOfficers = ESX.GetExtendedPlayers('job', 'police') +for i, xPlayer in ipairs(policeOfficers) do + print('Officer:', xPlayer.getName()) +end + +-- Get ALL players (no filter) +local allPlayers = ESX.GetExtendedPlayers() +for i, xPlayer in ipairs(allPlayers) do + print(xPlayer.getName()) +end +``` + +### ESX.GetNumPlayers(key, value) + +Returns number of players matching filter. + +```lua +local policeCount = ESX.GetNumPlayers('job', 'police') +print('Police online:', policeCount) + +local totalPlayers = ESX.GetNumPlayers() +print('Total players:', totalPlayers) +``` + +## Player Identification + +### ESX.GetIdentifier(playerId) + +Returns player's identifier (license with char prefix). + +```lua +local identifier = ESX.GetIdentifier(source) +print('Player identifier:', identifier) +-- Output: "char1:license:abc123..." +``` + +## Callbacks + +### ESX.RegisterServerCallback(name, cb) + +Registers a server callback that client can trigger. + +```lua +ESX.RegisterServerCallback('myResource:getData', function(source, cb, param1) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return cb(nil) end + + -- Do server logic + local data = { + money = xPlayer.getMoney(), + job = xPlayer.job.name + } + + cb(data) +end) + +-- Client calls it: +-- ESX.TriggerServerCallback('myResource:getData', function(data) +-- print(data.money, data.job) +-- end, 'param1') +``` + +### ESX.TriggerClientCallback(playerId, name, cb, ...) + +Triggers a client callback and waits for response. + +**WARNING**: Never trust client data for sensitive operations! + +```lua +ESX.TriggerClientCallback(source, 'esx:getVehicleType', function(vehicleType) + print('Vehicle type:', vehicleType) +end, 'bati') +``` + +### ESX.AwaitClientCallback(playerId, name, ...) + +Triggers client callback and waits (blocking). + +**WARNING**: Never trust client data for sensitive operations! + +```lua +local vehicleType = ESX.AwaitClientCallback(source, 'esx:getVehicleType', 'bati') +print('Vehicle type:', vehicleType) +``` + +## Commands + +### ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) + +Registers a command with permission check. + +```lua +ESX.RegisterCommand('heal', 'admin', function(xPlayer, args, showError) + xPlayer.triggerEvent('esx_ambulancejob:heal', 'full') +end, false, { + help = 'Heal yourself', + arguments = {} +}) + +-- With arguments +ESX.RegisterCommand('givemoney', 'admin', function(xPlayer, args, showError) + local targetPlayer = ESX.GetPlayerFromId(args.playerId) + if not targetPlayer then + return showError('Player not found') + end + + targetPlayer.addMoney(args.amount, 'Admin gave money') + xPlayer.showNotification('Gave $' .. args.amount .. ' to ' .. targetPlayer.getName()) +end, false, { + help = 'Give money to player', + arguments = { + {name = 'playerId', help = 'Player ID', type = 'playerId'}, + {name = 'amount', help = 'Amount', type = 'number'} + } +}) +``` + +## Jobs + +### ESX.GetJobs() + +Returns all registered jobs. + +```lua +local jobs = ESX.GetJobs() +for jobName, jobData in pairs(jobs) do + print('Job:', jobName, jobData.label) + for grade, gradeData in pairs(jobData.grades) do + print(' Grade:', gradeData.label, 'Salary:', gradeData.salary) + end +end +``` + +### ESX.DoesJobExist(job, grade) + +Checks if job and grade exist. + +```lua +if ESX.DoesJobExist('police', 4) then + print('Police chief grade exists') +end +``` + +### ESX.CreateJob(name, label, grades) + +Creates a new job and inserts into database. + +```lua +ESX.CreateJob('baker', 'Baker', { + {grade = 0, name = 'apprentice', label = 'Apprentice', salary = 320}, + {grade = 1, name = 'employee', label = 'Employee', salary = 470}, + {grade = 2, name = 'manager', label = 'Manager', salary = 610}, + {grade = 3, name = 'boss', label = 'Boss', salary = 910} +}) +``` + +### ESX.RefreshJobs() + +Reloads jobs from database. + +```lua +-- After manually editing jobs in database +ESX.RefreshJobs() +``` + +## Items + +### ESX.GetItems() + +Returns all registered items. + +```lua +local items = ESX.GetItems() +for itemName, itemData in pairs(items) do + print('Item:', itemName, itemData.label, 'Weight:', itemData.weight) +end +``` + +### ESX.GetItemLabel(item) + +Returns item label. + +```lua +local label = ESX.GetItemLabel('bread') +print('Item label:', label) -- 'Bread' +``` + +### ESX.AddItems(items) + +Adds new items to database and ESX.Items (only if using default inventory). + +```lua +ESX.AddItems({ + {name = 'energy_drink', label = 'Energy Drink', weight = 1, rare = false, canRemove = true}, + {name = 'diamond_ring', label = 'Diamond Ring', weight = 2, rare = true} +}) +``` + +### ESX.RefreshItems() + +Reloads items from database (only if using default inventory). + +```lua +ESX.RefreshItems() +``` + +### ESX.RegisterUsableItem(item, cb) + +Registers an item as usable. + +```lua +ESX.RegisterUsableItem('bread', function(playerId) + local xPlayer = ESX.GetPlayerFromId(playerId) + if not xPlayer then return end + + xPlayer.removeInventoryItem('bread', 1) + + -- Heal player or do something + TriggerClientEvent('esx_status:add', playerId, 'hunger', 200000) + xPlayer.showNotification('You ate bread', 'success') +end) +``` + +### ESX.UseItem(source, item, ...) + +Forces player to use item. + +```lua +ESX.UseItem(source, 'bread') +``` + +### ESX.GetUsableItems() + +Returns all usable items. + +```lua +local usableItems = ESX.GetUsableItems() +for itemName, isUsable in pairs(usableItems) do + if isUsable then + print('Usable:', itemName) + end +end +``` + +## Vehicle Functions + +### ESX.GetVehicleType(model, playerId, cb) + +Returns vehicle type (server must ask client). + +```lua +-- With callback +ESX.GetVehicleType('t20', source, function(vehicleType) + print('Vehicle type:', vehicleType) +end) + +-- With promise (blocking) +local vehicleType = ESX.GetVehicleType('t20', source) +print('Vehicle type:', vehicleType) +``` + +## Pickups (Default Inventory Only) + +### ESX.CreatePickup(type, name, count, label, playerId, components, tintIndex) + +Creates a pickup at player's position. + +```lua +-- Item pickup +ESX.CreatePickup('item_standard', 'bread', 5, 'Bread', source) + +-- Money pickup +ESX.CreatePickup('item_money', 'money', 500, 'Cash', source) + +-- Weapon pickup +ESX.CreatePickup('item_weapon', 'WEAPON_PISTOL', 50, 'Pistol', source, {}, 0) +``` + +## Events + +### ESX.TriggerClientEvent(eventName, playerIds, ...) + +Triggers event for one or multiple players. + +```lua +-- Single player +ESX.TriggerClientEvent('myResource:notify', source, 'Hello!') + +-- Multiple players +local officers = ESX.GetExtendedPlayers('job', 'police') +local officerIds = {} +for i, xPlayer in ipairs(officers) do + table.insert(officerIds, xPlayer.source) +end + +ESX.TriggerClientEvent('myResource:alert', officerIds, 'Code 3!') +``` + +## Discord Logs + +### ESX.DiscordLog(webhookName, title, color, message) + +Sends simple Discord log. + +```lua +ESX.DiscordLog('UserActions', 'Player Joined', 'green', 'John Doe joined the server') +``` + +### ESX.DiscordLogFields(webhookName, title, color, fields) + +Sends Discord log with fields. + +```lua +ESX.DiscordLogFields('AdminActions', '/givemoney Used', 'orange', { + {name = 'Admin', value = xPlayer.getName(), inline = true}, + {name = 'Target', value = targetPlayer.getName(), inline = true}, + {name = 'Amount', value = '$5000', inline = true} +}) +``` + +## Player Function Overrides + +### ESX.RegisterPlayerFunctionOverrides(index, overrides) + +Adds custom functions to xPlayer object. + +```lua +local leoJobs = {'police', 'sheriff', 'fbi'} +local medicJobs = {'ambulance', 'doctor', 'firefighter'} + +ESX.RegisterPlayerFunctionOverrides('customFunctions', { + isLeo = function(self) + return table.contains(leoJobs, self.job.name) + end, + isMedic = function(self) + return table.contains(medicJobs, self.job.name) + end +}) + +-- Now you can use: +-- if xPlayer.isLeo() then ... end +``` + +### ESX.SetPlayerFunctionOverride(index) + +Switches active override set. + +```lua +ESX.SetPlayerFunctionOverride('customFunctions') +``` + +## Debug + +### ESX.Trace(msg) + +Prints trace message when Debug is enabled in config. + +```lua +ESX.Trace('Player ' .. xPlayer.getName() .. ' opened inventory') +``` + +## Best Practices + +1. **Always check for nil**: + ```lua + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + ``` + +2. **Use GetExtendedPlayers for filtered player lists**: + ```lua + -- GOOD - Get specific job + local officers = ESX.GetExtendedPlayers('job', 'police') + + -- BAD - Loop through all then filter + for _, xPlayer in pairs(ESX.GetExtendedPlayers()) do + if xPlayer.job.name == 'police' then + -- Less efficient + end + end + ``` + +3. **Never trust client data**: + ```lua + -- BAD + RegisterNetEvent('myResource:buyItem') + AddEventHandler('myResource:buyItem', function(price) + -- Client controls price! Bad! + local xPlayer = ESX.GetPlayerFromId(source) + xPlayer.removeMoney(price) + end) + + -- GOOD + RegisterNetEvent('myResource:buyItem') + AddEventHandler('myResource:buyItem', function(itemName) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + local price = Config.Items[itemName].price -- Server controls price + if xPlayer.getMoney() >= price then + xPlayer.removeMoney(price, 'Bought ' .. itemName) + xPlayer.addInventoryItem(itemName, 1) + end + end) + ``` + +4. **Use callbacks for client-to-server data requests**: + ```lua + ESX.RegisterServerCallback('myResource:canBuy', function(source, cb, itemName) + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return cb(false) end + + local price = Config.Items[itemName].price + cb(xPlayer.getMoney() >= price) + end) + ``` + +5. **Cache xPlayer when using multiple times**: + ```lua + -- GOOD + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + + local money = xPlayer.getMoney() + local job = xPlayer.job.name + local inventory = xPlayer.inventory + + -- BAD (calls GetPlayerFromId 3 times) + local money = ESX.GetPlayerFromId(source).getMoney() + local job = ESX.GetPlayerFromId(source).job.name + local inventory = ESX.GetPlayerFromId(source).inventory + ``` diff --git a/.agents/skills/esx-framework/xplayer-methods.md b/.agents/skills/esx-framework/xplayer-methods.md new file mode 100644 index 0000000..9055506 --- /dev/null +++ b/.agents/skills/esx-framework/xplayer-methods.md @@ -0,0 +1,624 @@ +# xPlayer Methods (Server Only) + +The xPlayer object represents a player on the **SERVER** with many useful methods. + +## Getting xPlayer + +```lua +local xPlayer = ESX.GetPlayerFromId(source) +if not xPlayer then return end +``` + +## Basic Info + +### xPlayer.getName() + +Returns player's name. + +```lua +print('Player name:', xPlayer.getName()) +``` + +### xPlayer.getIdentifier() + +Returns player's identifier (with char prefix). + +```lua +print('Identifier:', xPlayer.getIdentifier()) +-- Output: "char1:license:abc123..." +``` + +### xPlayer.getSSN() + +Returns player's Social Security Number. + +```lua +print('SSN:', xPlayer.getSSN()) +-- Output: "123-45-6789" +``` + +### xPlayer.setName(name) + +Sets player's name. + +```lua +xPlayer.setName('John Doe') +``` + +## Coordinates + +### xPlayer.getCoords(vector) + +Returns player's last known coordinates. + +```lua +-- As table +local coords = xPlayer.getCoords() +print(coords.x, coords.y, coords.z, coords.heading) + +-- As vector3 +local coords = xPlayer.getCoords(true) +local distance = #(coords - vector3(0, 0, 0)) +``` + +### xPlayer.setCoords(coords) + +Teleports player to coordinates. + +```lua +xPlayer.setCoords(vector3(100.0, 200.0, 50.0)) + +-- Or vector4 with heading +xPlayer.setCoords(vector4(100.0, 200.0, 50.0, 90.0)) +``` + +### xPlayer.kick(reason) + +Kicks player from server. + +```lua +xPlayer.kick('You have been kicked') +``` + +## Job Management + +### xPlayer.getJob() + +Returns player's job data. + +```lua +local job = xPlayer.getJob() +print('Job:', job.name) +print('Grade:', job.grade) +print('Label:', job.label) +print('Salary:', job.grade_salary) +print('On Duty:', job.onDuty) +``` + +### xPlayer.setJob(name, grade, onDuty) + +Sets player's job. + +```lua +-- Set job with default duty state +xPlayer.setJob('police', 4) + +-- Set job and duty state +xPlayer.setJob('police', 4, true) -- On duty +xPlayer.setJob('police', 4, false) -- Off duty +``` + +## Money Management + +### xPlayer.getMoney() + +Returns cash amount. + +```lua +local cash = xPlayer.getMoney() +print('Cash:', cash) +``` + +### xPlayer.addMoney(amount, reason) + +Adds cash. + +```lua +xPlayer.addMoney(500, 'Sold apples') +``` + +### xPlayer.removeMoney(amount, reason) + +Removes cash. + +```lua +if xPlayer.getMoney() >= 500 then + xPlayer.removeMoney(500, 'Bought item') +end +``` + +### xPlayer.setMoney(amount) + +Sets cash to exact amount. + +```lua +xPlayer.setMoney(1000) +``` + +## Account Management + +### xPlayer.getAccounts(minimal) + +Returns all accounts. + +```lua +-- Full data +local accounts = xPlayer.getAccounts() +print('Bank:', accounts.bank.money) +print('Cash:', accounts.money.money) + +-- Minimal (just amounts) +local accounts = xPlayer.getAccounts(true) +print('Bank:', accounts.bank) +print('Cash:', accounts.money) +``` + +### xPlayer.getAccount(accountName) + +Returns specific account. + +```lua +local bankAccount = xPlayer.getAccount('bank') +print('Bank balance:', bankAccount.money) +``` + +### xPlayer.addAccountMoney(account, amount, reason) + +Adds money to account. + +```lua +xPlayer.addAccountMoney('bank', 5000, 'Paycheck received') +``` + +### xPlayer.removeAccountMoney(account, amount, reason) + +Removes money from account. + +```lua +if xPlayer.getAccount('bank').money >= 2000 then + xPlayer.removeAccountMoney('bank', 2000, 'Paid bills') +end +``` + +### xPlayer.setAccountMoney(account, amount, reason) + +Sets account to exact amount. + +```lua +xPlayer.setAccountMoney('bank', 10000, 'Admin action') +``` + +## Paycheck Management + +### xPlayer.togglePaycheck(toggle) + +Enable/disable paycheck. + +```lua +xPlayer.togglePaycheck(false) -- Disable paycheck +xPlayer.togglePaycheck(true) -- Enable paycheck +``` + +### xPlayer.isPaycheckEnabled() + +Check if paycheck is enabled. + +```lua +if xPlayer.isPaycheckEnabled() then + print('Paycheck is enabled') +end +``` + +## Inventory (Default ESX Inventory) + +### xPlayer.getInventory(minimal) + +Returns player inventory. + +```lua +-- Full data +local inventory = xPlayer.getInventory() +for itemName, itemData in pairs(inventory) do + print(itemName, itemData.count, itemData.weight) +end + +-- Minimal (just counts) +local inventory = xPlayer.getInventory(true) +for itemName, count in pairs(inventory) do + print(itemName, count) +end +``` + +### xPlayer.getInventoryItem(item) + +Returns specific item data. + +```lua +local breadItem = xPlayer.getInventoryItem('bread') +print('Bread count:', breadItem.count) +print('Bread weight:', breadItem.weight) +``` + +### xPlayer.addInventoryItem(item, count) + +Adds item to inventory. + +```lua +xPlayer.addInventoryItem('bread', 5) +``` + +### xPlayer.removeInventoryItem(item, count) + +Removes item from inventory. + +```lua +xPlayer.removeInventoryItem('bread', 2) +``` + +### xPlayer.setInventoryItem(item, count) + +Sets item to exact count. + +```lua +xPlayer.setInventoryItem('bread', 10) +``` + +### xPlayer.hasItem(item) + +Checks if player has item. + +```lua +if xPlayer.hasItem('bread') then + print('Player has bread') +end +``` + +### xPlayer.getWeight() + +Returns current inventory weight. + +```lua +print('Current weight:', xPlayer.getWeight()) +``` + +### xPlayer.getMaxWeight() + +Returns max inventory weight. + +```lua +print('Max weight:', xPlayer.getMaxWeight()) +``` + +### xPlayer.setMaxWeight(weight) + +Sets max inventory weight. + +```lua +xPlayer.setMaxWeight(50) -- Backpack equipped +``` + +### xPlayer.canCarryItem(item, count) + +Checks if player can carry item. + +```lua +if xPlayer.canCarryItem('bread', 5) then + xPlayer.addInventoryItem('bread', 5) +else + xPlayer.showNotification('Inventory full', 'error') +end +``` + +### xPlayer.canSwapItem(firstItem, firstCount, secondItem, secondCount) + +Checks if items can be swapped. + +```lua +if xPlayer.canSwapItem('bread', 5, 'water', 3) then + xPlayer.removeInventoryItem('bread', 5) + xPlayer.addInventoryItem('water', 3) +end +``` + +## Weapon Management (Default ESX) + +### xPlayer.getLoadout(minimal) + +Returns player's weapons. + +```lua +-- Full data +local loadout = xPlayer.getLoadout() +for weaponName, weaponData in pairs(loadout) do + print(weaponName, weaponData.ammo, weaponData.components) +end + +-- Minimal (just ammo and components) +local loadout = xPlayer.getLoadout(true) +for weaponName, weaponData in pairs(loadout) do + print(weaponName, weaponData.ammo) +end +``` + +### xPlayer.getWeapon(weaponName) + +Returns specific weapon data. + +```lua +local pistol = xPlayer.getWeapon('WEAPON_PISTOL') +if pistol then + print('Ammo:', pistol.ammo) + print('Components:', json.encode(pistol.components)) +end +``` + +### xPlayer.hasWeapon(weaponName) + +Checks if player has weapon. + +```lua +if xPlayer.hasWeapon('WEAPON_PISTOL') then + print('Player has pistol') +end +``` + +### xPlayer.addWeapon(weaponName, ammo) + +Gives weapon to player. + +```lua +xPlayer.addWeapon('WEAPON_PISTOL', 250) +``` + +### xPlayer.removeWeapon(weaponName) + +Removes weapon from player. + +```lua +xPlayer.removeWeapon('WEAPON_PISTOL') +``` + +### xPlayer.addWeaponAmmo(weaponName, ammo) + +Adds ammo to weapon. + +```lua +xPlayer.addWeaponAmmo('WEAPON_PISTOL', 50) +``` + +### xPlayer.removeWeaponAmmo(weaponName, ammo) + +Removes ammo from weapon. + +```lua +xPlayer.removeWeaponAmmo('WEAPON_PISTOL', 25) +``` + +### xPlayer.updateWeaponAmmo(weaponName, ammo) + +Sets weapon ammo to exact amount. + +```lua +xPlayer.updateWeaponAmmo('WEAPON_PISTOL', 100) +``` + +### xPlayer.addWeaponComponent(weaponName, component) + +Adds component to weapon. + +```lua +xPlayer.addWeaponComponent('WEAPON_PISTOL', 'suppressor') +``` + +### xPlayer.removeWeaponComponent(weaponName, component) + +Removes component from weapon. + +```lua +xPlayer.removeWeaponComponent('WEAPON_PISTOL', 'suppressor') +``` + +### xPlayer.hasWeaponComponent(weaponName, component) + +Checks if weapon has component. + +```lua +if xPlayer.hasWeaponComponent('WEAPON_PISTOL', 'suppressor') then + print('Pistol has suppressor') +end +``` + +### xPlayer.setWeaponTint(weaponName, tintIndex) + +Sets weapon tint. + +```lua +xPlayer.setWeaponTint('WEAPON_PISTOL', 2) -- Gold tint +``` + +### xPlayer.getWeaponTint(weaponName) + +Gets weapon tint. + +```lua +local tint = xPlayer.getWeaponTint('WEAPON_PISTOL') +print('Tint index:', tint) +``` + +## Permissions + +### xPlayer.getGroup() + +Returns player's permission group. + +```lua +local group = xPlayer.getGroup() +print('Group:', group) -- 'user', 'admin', 'superadmin' +``` + +### xPlayer.setGroup(group) + +Sets player's permission group. + +```lua +xPlayer.setGroup('admin') +``` + +## Variables & Metadata + +### xPlayer.set(key, value) + +Sets custom variable. + +```lua +xPlayer.set('lastLocation', 'LS Airport') +``` + +### xPlayer.get(key) + +Gets custom variable. + +```lua +local lastLocation = xPlayer.get('lastLocation') +print('Last location:', lastLocation) +``` + +### xPlayer.setMeta(key, value, subKey) + +Sets metadata (persisted to database). + +```lua +xPlayer.setMeta('title', 'Dr.') +xPlayer.setMeta('licenses', 'driver', true) -- With subkey +``` + +### xPlayer.getMeta(key, subKey) + +Gets metadata. + +```lua +local title = xPlayer.getMeta('title') +print('Title:', title) + +local hasDriver = xPlayer.getMeta('licenses', 'driver') +``` + +### xPlayer.clearMeta(key, subKey) + +Clears metadata. + +```lua +xPlayer.clearMeta('title') +xPlayer.clearMeta('licenses', 'driver') -- Clear subkey +``` + +## Client Communication + +### xPlayer.triggerEvent(eventName, ...) + +Triggers client event for this player. + +```lua +xPlayer.triggerEvent('myResource:showMenu', {title = 'Shop', items = {}}) +``` + +### xPlayer.showNotification(msg, type, length, title, position) + +Shows notification to player. + +```lua +xPlayer.showNotification('You received $500', 'success', 3000) +``` + +### xPlayer.showAdvancedNotification(sender, subject, msg, textureDict, iconType, flash, saveToBrief, hudColorIndex) + +Shows GTA-style notification. + +```lua +xPlayer.showAdvancedNotification('Police', 'Dispatch', 'Code 3', 'CHAR_CALL911', 1) +``` + +### xPlayer.showHelpNotification(msg, thisFrame, beep, duration) + +Shows help notification. + +```lua +xPlayer.showHelpNotification('Press E to interact', false, true, 3000) +``` + +## Utility + +### xPlayer.getPlayTime() + +Returns total playtime in seconds. + +```lua +local playtime = xPlayer.getPlayTime() +local hours = math.floor(playtime / 3600) +print('Playtime:', hours, 'hours') +``` + +### xPlayer.executeCommand(command) + +Executes command as player. + +```lua +xPlayer.executeCommand('dv 5') +``` + +## Best Practices + +1. **Always check if xPlayer exists**: + ```lua + local xPlayer = ESX.GetPlayerFromId(source) + if not xPlayer then return end + ``` + +2. **Check before removing**: + ```lua + if xPlayer.getMoney() >= price then + xPlayer.removeMoney(price, 'Bought item') + else + xPlayer.showNotification('Not enough money', 'error') + end + ``` + +3. **Check inventory space**: + ```lua + if xPlayer.canCarryItem('bread', 5) then + xPlayer.addInventoryItem('bread', 5) + else + xPlayer.showNotification('Inventory full', 'error') + end + ``` + +4. **Always provide reasons**: + ```lua + -- GOOD + xPlayer.addMoney(500, 'Sold apples') + + -- BAD (no reason, harder to debug) + xPlayer.addMoney(500) + ``` + +5. **Cache xPlayer reference**: + ```lua + -- GOOD + local xPlayer = ESX.GetPlayerFromId(source) + xPlayer.addMoney(100) + xPlayer.setJob('police', 0) + + -- BAD (calls GetPlayerFromId twice) + ESX.GetPlayerFromId(source).addMoney(100) + ESX.GetPlayerFromId(source).setJob('police', 0) + ``` diff --git a/.agents/skills/fivem-basics/SKILL.md b/.agents/skills/fivem-basics/SKILL.md new file mode 100644 index 0000000..2a3bc3f --- /dev/null +++ b/.agents/skills/fivem-basics/SKILL.md @@ -0,0 +1,31 @@ +--- +name: fivem-basics +description: FiveM resource structure, fxmanifest, client/server scripting, events. Use when creating or editing FiveM resources or Lua scripts, or when the user asks how FiveM works. +author: germanfndez +version: 1.0.0 +mcp-server: projecthub +--- + +# FiveM basics + +Best practices for FiveM — resources, manifest, client/server, events. Use this skill whenever you are dealing with FiveM code to obtain domain-specific knowledge. + +## When to use + +- User asks how FiveM resources or scripts work. +- Editing or creating `fxmanifest.lua`, `client_*.lua`, or `server.lua`. +- Questions about client/server, events, or exports. +- Need to look up natives or detailed docs → point to https://docs.fivem.net/natives/ and https://docs.fivem.net/docs/. + +## How to use + +Read individual rule files for detailed explanations and examples: + +- **rules/structure.md** — Resource structure and organization: scope, client/server separation, logical grouping, naming conventions. +- **rules/fxmanifest.md** — Resource manifest (fxmanifest.lua): fx_version, game, client_scripts, server_script, files, dependencies. +- **rules/client-server.md** — Client vs server scripts, shared code, communication patterns. +- **rules/events.md** — Events in Lua: RegisterNetEvent, TriggerServerEvent, TriggerClientEvent, naming conventions, security. +- **rules/exports.md** — Defining and consuming exports between resources. +- **rules/debugging.md** — Server vs client (F8) logs; when to ask the user for F8 logs if there's no server-side error. +- **rules/optimization.md** — Lua/FiveM optimization: locals, loops, natives (PlayerPedId, vector distance), state bags, security, readability, folder structure. +- **rules/reference-links.md** — Official docs and natives reference. diff --git a/.agents/skills/fivem-basics/client-server.md b/.agents/skills/fivem-basics/client-server.md new file mode 100644 index 0000000..532c793 --- /dev/null +++ b/.agents/skills/fivem-basics/client-server.md @@ -0,0 +1,33 @@ +# Client vs server + +## Client scripts + +- Run on **each player’s game**. +- Can use game natives: peds, vehicles, world, UI, drawing, etc. +- Have access to the local player and game state on that machine. + +## Server script + +- Runs **once** on the server. +- No direct access to game world or visuals. +- Use for: persistence, auth, shared data, validation, database, economy. +- Can target specific clients with `TriggerClientEvent(event, playerId, ...)`. + +## Shared scripts + +- **shared_scripts** run on both client and server. +- Put config, constants, or helper functions here. +- Be careful: no game natives in shared code unless you guard by environment. + +## Communication + +- **Events** — `TriggerServerEvent` / `TriggerClientEvent` (see rules/events.md). +- **Exports** — Call functions from other resources (see rules/exports.md). +- **State bags** — Shared key/value state (see docs). + +## Summary + +| Side | Runs on | Game natives | Use for | +|--------|-------------|---------------|-----------------------------------| +| Client | Each player | Yes | UI, gameplay, locals, rendering | +| Server | Once | No (server natives only) | Data, auth, validation, broadcast | diff --git a/.agents/skills/fivem-basics/debugging.md b/.agents/skills/fivem-basics/debugging.md new file mode 100644 index 0000000..936dfd7 --- /dev/null +++ b/.agents/skills/fivem-basics/debugging.md @@ -0,0 +1,17 @@ +# Debugging FiveM scripts + +## Server vs client logs + +- **Server console** (TxAdmin, terminal, or server window): errors and prints from `server_script` and server-side code. +- **F8 client console**: in-game console opened with **F8**. Shows errors and prints from `client_script` and client-side code. + +## When to ask for F8 logs + +If there is **no error on the server side** (server console is clean or the issue doesn’t show there), ask the user to **share the F8 logs** (client console). Many issues (client Lua errors, missing natives, UI or gameplay bugs) only appear in the client console. + +Tell the user to: +1. Reproduce the issue in-game. +2. Press **F8** to open the client console. +3. Copy the relevant output (errors in red, or the last lines) and share it. + +This helps distinguish server-side vs client-side problems. diff --git a/.agents/skills/fivem-basics/events.md b/.agents/skills/fivem-basics/events.md new file mode 100644 index 0000000..2359cb0 --- /dev/null +++ b/.agents/skills/fivem-basics/events.md @@ -0,0 +1,104 @@ +# Events (Lua) + +Events are the main way to communicate between client and server (or within the same side). + +## Register and listen + +```lua +RegisterNetEvent('myresource:client:itemReceived') +AddEventHandler('myresource:client:itemReceived', function(itemId, amount) + -- handle on client +end) +``` + +- **RegisterNetEvent** — Registers a **networked** event (can be triggered from the other side). +- **AddEventHandler** — Attaches the handler. Use the same event name. + +For **local-only** events (same side), use `AddEventHandler` only; no need for `RegisterNetEvent`. + +## Triggering + +| Function | Direction | Example | +|----------|-----------|--------| +| **TriggerServerEvent**(event, ...) | Client → Server | `TriggerServerEvent('myres:server:buyItem', itemId)` | +| **TriggerClientEvent**(event, playerId, ...) | Server → Client | `TriggerClientEvent('myres:client:notify', source, 'Done!')` | +| **TriggerEvent**(event, ...) | Local only (same side) | `TriggerEvent('myres:client:closeMenu')` | + +- On server, use **source** for the player who triggered the event. +- Use **-1** as playerId in `TriggerClientEvent` to send to all clients. + +## Naming conventions + +Event names should follow the format: `{resourceName}:{client/server}:{eventName}` + +This allows the reader to tell at a glance what resource the event is triggered from, and whether the event should be handled on the client or server. + +### Past Tense + +An event should describe something that has already happened, without prescribing the desired reaction. This pattern recognizes that many event handlers may exist for the same event, which each handle the event in a different way. Triggering an event should be thought of as the cause, whereas handling an event is the effect. The effect should not be in the event name. While an event name need not strictly be past tense, writing event names using past tense can help developers follow this principle. + +**BAD:** +```lua +local function sendMessage(message) + TriggerEvent('resourceName:server:checkProfanity', message) +end + +RegisterNetEvent('resourceName:server:checkProfanity', source, message) + checkProfanity(message) +end +``` + +**GOOD:** +```lua +local function sendMessage(message) + TriggerEvent('resourceName:server:sentMessage', message) +end + +RegisterNetEvent('resourceName:server:sentMessage', source, message) + checkProfanity(message) +end +``` + +## When to use events vs functions + +### Use a function instead of an event handler for single resource, non-networked events + +Events differ from functions in that one event can have many handler functions, versus a function call only executes one function. If the event is non-networked and only is intended to be handled by one resource, a function should be used instead. + +### Use callbacks when wanting to get data back across the network + +It's an anti-pattern to trigger and listen for a separate event to get data back across the network when triggering an event. Instead, use a callback. + +### Use AddEventHandler for non-networked events + +Keeping with the principle of limiting scope, if an event is triggered and handled on the client or server exclusively, do not register it as a net event. + +## Security + +### Secure Net Events + +GetInvokingResource will be nil if an event is triggered from the opposite side of the network that the event is registered on (client triggering a server event, or server triggering a client event). Restrict other ways to call the event to prevent exploits, unless the event is intended to be triggered by both the client and server. + +```lua +RegisterNetEvent('resourceName:client:eventName', function() + if GetInvokingResource() then return end + --- handle the event +end) +``` + +### Validate on server + +Always validate the sender with **GetInvokingResource()** to avoid exploits: + +```lua +RegisterNetEvent('shop:server:purchase') +AddEventHandler('shop:server:purchase', function(itemId) + if GetInvokingResource() then return end -- only allow from same resource or trusted + -- ... +end) +``` + +## Reference + +- Listening: https://docs.fivem.net/docs/scripting-manual/working-with-events/listening-for-events/ +- Triggering: https://docs.fivem.net/docs/scripting-manual/working-with-events/triggering-events/ diff --git a/.agents/skills/fivem-basics/exports.md b/.agents/skills/fivem-basics/exports.md new file mode 100644 index 0000000..2d4fb8f --- /dev/null +++ b/.agents/skills/fivem-basics/exports.md @@ -0,0 +1,48 @@ +# Exports + +Exports let one resource call functions exposed by another resource. + +## Defining exports (Lua) + +In your resource’s manifest: + +```lua +exports { 'getWidget', 'setWidget' } +``` + +In your script, define the globals (or use the runtime export API): + +```lua +local widget = nil + +function getWidget() + return widget +end + +function setWidget(value) + widget = value +end +``` + +## Consuming exports (Lua) + +```lua +local w = exports.myresource:getWidget() +exports.myresource:setWidget(42) +``` + +## Server exports + +Use **server_export** in the manifest and define the same on the server script. Other resources call them from server context: + +```lua +exports.myresource:getData() +``` + +## Notes + +- Prefer **exports** over manifest `export` when possible (e.g. `exports('resname', function() ... end)`). + +## Reference + +- Resource manifest exports: https://docs.fivem.net/docs/scripting-reference/resource-manifest/resource-manifest/#export diff --git a/.agents/skills/fivem-basics/fxmanifest.md b/.agents/skills/fivem-basics/fxmanifest.md new file mode 100644 index 0000000..747b552 --- /dev/null +++ b/.agents/skills/fivem-basics/fxmanifest.md @@ -0,0 +1,45 @@ +# fxmanifest.lua + +The resource manifest is a file named `fxmanifest.lua` (or legacy `__resource.lua`) at the root of the resource folder. It runs in a separate Lua runtime and uses semi-declarative syntax. + +## Essential entries + +| Entry | Description | +|-------|-------------| +| **fx_version** | Use `'cerulean'` (recommended). Alternatives: `'bodacious'`, `'adamant'`. | +| **game** | `'gta5'` (FiveM), `'rdr3'` (RedM), or `'common'` (no game-specific APIs). | +| **author**, **description**, **version** | Optional metadata. | +| **client_scripts** / **server_script** / **shared_scripts** | Arrays or single string. Support globbing. | +| **files** | Files sent to client (e.g. for `data_file` or other assets). | +| **dependency** / **dependencies** | Other resources that must start before this one. | +| **exports** | Client-side export names (Lua). | +| **server_export** | Server-side export names. | + +## Scripts + +Scripts are Lua (`.lua`). Use **client_scripts**, **server_script**, or **shared_scripts** to load them. + +## Globbing + +Script entries support glob patterns: + +- `'*.lua'` — all Lua in root (non-recursive) +- `'**/*.lua'` — all Lua files recursively +- `'client/cl_*.lua'` — client Lua in `client/` folder + +## Minimal example + +```lua +fx_version 'cerulean' +game 'gta5' +author 'Your Name' +description 'My resource' +version '1.0.0' + +client_scripts { 'client.lua' } +server_script 'server.lua' +``` + +## Full reference + +https://docs.fivem.net/docs/scripting-reference/resource-manifest/resource-manifest/ diff --git a/.agents/skills/fivem-basics/optimization.md b/.agents/skills/fivem-basics/optimization.md new file mode 100644 index 0000000..64fc9f9 --- /dev/null +++ b/.agents/skills/fivem-basics/optimization.md @@ -0,0 +1,296 @@ +# Lua / FiveM script optimization and best practices + +Use this rule when writing or reviewing FiveM Lua for performance, readability, or security. + +## General practices + +### Localize functions and variables + +Lua accesses local variables and functions faster than global ones. Prefer `local` unless the value must be global. + +```lua +-- Don't +myVariable = false +function someFunction() + print('Im a global function!') +end + +-- Do +local myVariable = false +local function someFunction() + print('Im a local function!') +end +``` + +### Prefer table indexing over table.insert + +Direct assignment is more efficient than `table.insert`. + +```lua +local t = {} +table.insert(t, {}) -- Don't +t[#t + 1] = {} -- Do +``` + +### Simplify conditionals + +Use `if something then` instead of `if something ~= nil then` when you want to treat both `nil` and `false` as falsy. + +```lua +if bool then -- true only when neither nil nor false + print('bool was neither nil or false!') +end +``` + +### Keep functions universal + +Write functions and events that accept parameters so they can handle multiple scenarios and stay reusable. + +```lua +local function someFunction(param1, param2, param3) + if param1 == 'something' then + -- ... + elseif param2 == 'somethingelse' then + -- ... + end +end + +RegisterNetEvent('someEvent', function(param1, param2, param3) + -- same idea +end) +``` + +### Short returns + +Exit early when conditions are not met to avoid deep nesting. + +```lua +local function someFunction(param1, param2, param3) + if not param1 then return end + -- ... + if not param2 then return end + -- ... +end +``` + +### Avoid re-creating tables in loops + +Initialize once and reuse. + +```lua +local reusableTable = {} +for i = 1, 10 do + reusableTable[i] = i -- reuse, don't create new table each iteration +end +``` + +### Free memory with nil + +Assign unused variables to `nil` so the garbage collector can reclaim memory. + +```lua +local largeData = { 1, 2, 3, 4 } +-- ... use it ... +largeData = nil +``` + +### Avoid hardcoding + +Centralize configurable values (coords, item names, amounts) in a `config.lua` or similar. + +```lua +Config = { + Zones = { + PoliceStation = vector3(441.1, -981.1, 30.7), + Hospital = vector3(1151.21, -1529.62, 34.84) + }, + Payments = { Police = 150, EMS = 120 } +} +``` + +### Logging and debugging + +Use a debug flag so you can enable/disable logs without removing code. + +```lua +local DEBUG = true +local function debugLog(message) + if DEBUG then print(message) end +end +``` + +### Track performance + +Use `os.clock()` or FiveM’s `GetGameTimer()` for performance-critical sections. + +```lua +local start = os.clock() +-- code to measure +print("Execution time:", os.clock() - start) + +-- or +local startTime = GetGameTimer() +Wait(1000) +print("Execution time (ms):", GetGameTimer() - startTime) +``` + +### Avoid overusing network events + +For frequent sync, prefer shared state (state bags, entity state) instead of spamming `TriggerServerEvent` / `TriggerClientEvent`. + +```lua +Entity(playerPed).state:set('exampleData', 123, true) +local data = Entity(playerPed).state.exampleData +``` + +### Optimize data transmission + +Send only the data you need, not whole tables or large payloads. + +```lua +TriggerServerEvent('exampleEvent', { x = 100, y = 200 }) -- minimal payload +``` + +## Code readability + +### Comment your code + +Explain non-obvious or complex logic. + +```lua +-- Check if the player is in range of the target zone +if #(playerCoords - targetCoords) < 10 then + print('Player is in range') +end +``` + +### Organize your script + +Group variables, functions, event handlers, and main logic into clear sections. + +```lua +-- Variables +local QBCore = exports['qb-core']:GetCoreObject() + +-- Functions +local function calculateDistance(pos1, pos2) + return #(pos1 - pos2) +end + +-- Events +RegisterNetEvent('exampleEvent', function() ... end) + +-- Main logic +CreateThread(function() ... end) +``` + +### Folder structure + +Split scripts into smaller files instead of one huge file. + +``` +my_script/ +├── client/ +│ ├── main.lua +│ ├── utils.lua +├── server/ +│ ├── main.lua +│ ├── events.lua +├── shared/ +│ ├── config.lua +└── fxmanifest.lua +``` + +## Native usage + +### Use PlayerPedId() instead of GetPlayerPed(-1) + +```lua +local ped = GetPlayerPed(-1) -- Don't +local ped = PlayerPedId() -- Do +``` + +### Use vector distance instead of GetDistanceBetweenCoords + +```lua +local dist = GetDistanceBetweenCoords(pCoords, coords, true) -- Don't +local dist = #(pCoords - coords) -- Do +if dist < 5 then ... end +``` + +## Loops and threads + +### Control when loops run + +Only run loops when needed (e.g. when player is in zone); turn them off when not. + +```lua +local listen = false +CreateThread(function() + while listen do + -- do work only when needed + Wait(0) + end +end) +-- set listen = true when entering zone, false when leaving +``` + +### Prefer variable Wait() over fixed Wait(0) + +Use a variable wait time: long when idle, short when active. + +```lua +CreateThread(function() + while true do + local sleep = 2500 + local inRange = #(GetEntityCoords(PlayerPedId()) - someCoords) < 10.0 + if inRange then + sleep = 0 + -- do something + end + Wait(sleep) + end +end) +``` + +### Restrict job-specific loops + +Only run job-specific logic for players who have that job. + +```lua +local job = QBCore.Functions.GetPlayerData().job.name +CreateThread(function() + while job == 'police' do + -- police-only logic + Wait(0) + end +end) +``` + +## Security + +- Multiple checks and validation are good; don’t shy away from extra ifs or passing tokens through events. +- **Never** handle money or item transactions on the client; always validate and apply on the server. + +## Event handlers + +Use handlers to update state so you don’t have to poll constantly. + +```lua +local isLoggedIn = false +local PlayerData = {} + +AddStateBagChangeHandler('isLoggedIn', nil, function(_, _, value) + if value then + isLoggedIn = true + PlayerData = QBCore.Functions.GetPlayerData() + else + isLoggedIn = false + PlayerData = {} + end +end) + +RegisterNetEvent('QBCore:Client:OnJobUpdate', function(JobInfo) + PlayerData.job = JobInfo +end) +``` diff --git a/.agents/skills/fivem-basics/reference-links.md b/.agents/skills/fivem-basics/reference-links.md new file mode 100644 index 0000000..22a9d80 --- /dev/null +++ b/.agents/skills/fivem-basics/reference-links.md @@ -0,0 +1,16 @@ +# Reference links + +Use these when you need detailed or up-to-date information. + +| Topic | URL | +|-------|-----| +| **Docs (home)** | https://docs.fivem.net/docs/ | +| **Resource manifest** | https://docs.fivem.net/docs/scripting-reference/resource-manifest/resource-manifest/ | +| **Natives (game API)** | https://docs.fivem.net/natives/ | +| **Scripting manual** | https://docs.fivem.net/docs/scripting-manual/ | +| **Getting started** | https://docs.fivem.net/docs/getting-started/ | +| **Lua client functions** | https://docs.fivem.net/docs/scripting-reference/runtimes/lua/client-functions/ | +| **Lua server functions** | https://docs.fivem.net/docs/scripting-reference/runtimes/lua/server-functions/ | +| **Events list** | https://docs.fivem.net/docs/scripting-reference/events/list/ | + +When the user needs a specific native or deeper reference, point them to the natives page or the scripting manual. diff --git a/.agents/skills/fivem-basics/structure.md b/.agents/skills/fivem-basics/structure.md new file mode 100644 index 0000000..5158af5 --- /dev/null +++ b/.agents/skills/fivem-basics/structure.md @@ -0,0 +1,65 @@ +# Structure/Scope + +Best practices for organizing FiveM resources and Lua code. + +## Prefer Limited Scope + +Variables and functions should be scoped to the smallest visibility needed. Prefer in order: +1. **local function** (most restricted) +2. **function** (module/file level) +3. **export function** (cross-resource) +4. **AddEventHandler** (event-based) +5. **RegisterNetEvent/Callback** (networked, least restricted) + +## Separate Client & Server Files + +Client and server specific files should be organized into their own folders. + +**Example structure:** +``` +my-resource/ +├── fxmanifest.lua +├── client/ +│ ├── main.lua +│ └── ui.lua +└── server/ + ├── main.lua + └── database.lua +``` + +## Use Logical Grouping + +It may make sense to place constructs of the same type together in a file. For example: +- All file scoped variables at the top of the file +- Followed by all local functions +- Followed by all global functions +- Followed by events + +This grouping structure makes it easier to understand the API at the server, resource, and file levels. + +Alternatively, local single use functions could be located directly above or as close as possible to the functions they are called from, and grouping can be based on call structure rather than construct type. + +## Use Files/Modules To Hide Local Functions + +If you have one resource scoped function which calls a few local single use functions, put them all in their own file or module. This keeps your code organized and maintains proper encapsulation. + +## Resource Naming + +Resources should be named with underscores "_" instead of spaces. Other special characters should be avoided so that exports work well. + +**Examples:** +- ✅ `my_awesome_resource` +- ✅ `vehicle_shop` +- ❌ `my awesome resource` (spaces) +- ❌ `vehicle-shop!` (special characters) + +## File Naming + +Files should be named all lower case without any spaces. Dashes "-" or underscores "_" can be used instead of spaces. + +**Examples:** +- ✅ `main.lua` +- ✅ `player_manager.lua` +- ✅ `vehicle-shop.lua` +- ❌ `PlayerManager.lua` (camelCase) +- ❌ `vehicle shop.lua` (spaces) diff --git a/.agents/skills/fivem-dev/SKILL.md b/.agents/skills/fivem-dev/SKILL.md new file mode 100644 index 0000000..256ff76 --- /dev/null +++ b/.agents/skills/fivem-dev/SKILL.md @@ -0,0 +1,146 @@ +--- +name: fivem-dev +description: FiveM development orchestrator for the standalone sky_phone resource, covering Lua, NUI, security, framework adapters, ox_lib, oxmysql, and optional external integrations. Use when creating or editing FiveM Lua, manifests, client/server events, NUI, SQL, or integrations in this repository. +allowed-tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch +--- + +# FiveM development orchestrator for sky_phone + +Use this guide together with the root `AGENTS.md`. The phone is standalone: never introduce a +dependency or interaction with `sky_base`, `sky_jobs_base`, another `sky_*` resource, or their +globals, APIs, events, state, files, config, and database tables. + +## Core workflow + +1. Trace the complete client, server, NUI, config, persistence, and integration flow. +2. Verify natives and external APIs against authoritative documentation or installed source. +3. Identify the root cause and make the smallest coherent fix. +4. Preserve server authority and validate every client-controlled value. +5. Run focused syntax checks, tests, and the real frontend/resource build when present. +6. Inspect the final diff for accidental coupling, generated-file drift, and unrelated edits. + +## Standalone boundary + +- The resource namespace is `sky_phone`. +- Do not add `sky_base`, `sky_jobs_base`, or another Sky resource to `dependency`, `dependencies`, + `shared_script`, `server_script`, or `client_script` entries. +- Do not use `Sky`, `Sky_Jobs`, `Sky.FW`, `Sky.Cb`, `Sky.DB`, `Sky.Query`, Sky exports, or Sky event + namespaces. +- Do not probe whether those resources are started and do not add optional compatibility fallbacks. +- Build phone-owned framework, callback, persistence, notification, and logging adapters where the + existing phone architecture calls for them. +- Third-party integrations must be explicit, documented, isolated, and verified from their own + source/API. Never route them through another Sky resource. + +## Source verification + +Never invent a native, framework API, export, event, parameter, or return type. + +| Topic | Authoritative source | +|---|---| +| FiveM natives | https://docs.fivem.net/natives/ | +| FiveM events, manifests, NUI | https://docs.fivem.net/docs/ | +| ESX | https://docs.esx-framework.org/ | +| QBCore | https://docs.qbcore.org/ | +| Qbox | https://docs.qbox.re/ | +| ox_lib / oxmysql | https://coxdocs.dev/ | +| Fivemanage | https://docs.fivemanage.com/ | + +Before using a framework or library API, inspect `fxmanifest.lua`, configuration, lockfiles, and the +installed integration code to determine the actual version and context. Prefer the phone's existing +adapter over scattering direct framework calls across feature code. If an adapter is missing, add it +inside `sky_phone`; do not borrow one from another resource. + +## Lua and resource structure + +- Use 4-space indentation, double quotes, `snake_case` locals, and `PascalCase` classes when the + surrounding source does not establish a stronger convention. +- Prefer locals and guard clauses. Do not create wrappers that merely return another call. +- Use `joaat("...")`, `PlayerPedId()`, and vector distance (`#(a - b)`). +- Treat native results as truthy/falsy; avoid strict comparisons with `true` or `false`. +- Separate client, server, shared, config, locale, and NUI concerns. +- Use a local function before a resource export, local event, callback, or network event. +- Prefix public resource-owned events and callbacks with `sky_phone:`. +- Avoid per-frame loops unless rendering/input truly requires them; dynamically increase `Wait()` + while idle. + +A manifest may declare only dependencies that `sky_phone` actually uses and documents: + +```lua +fx_version "cerulean" +game "gta5" + +shared_scripts { "config.lua" } +client_scripts { "client/*.lua" } +server_scripts { "server/*.lua" } + +ui_page "html/index.html" +files { "html/index.html", "html/**/*" } +``` + +Add library imports such as ox_lib or oxmysql only when confirmed in the resource architecture. + +## Server authority and events + +- The client and NUI request; the server validates and applies. +- Re-check identity, authorization, ownership, distance, state, rate limits, and configured limits on + the server. +- Never accept client-provided balances, prices, rewards, item counts, roles, phone ownership, or + recipient identity as authoritative. +- Send minimal network payloads and use state bags for suitable replicated state rather than event + spam. +- Rate-limit sensitive and spammable actions with phone-owned server logic. +- Log rejected or suspicious actions without leaking secrets or personal data. + +```lua +RegisterNetEvent("sky_phone:server:updateSetting", function(setting_name, requested_value) + local src = source + if not isAllowedSetting(setting_name, requested_value) then + logSecurityEvent(src, "invalid phone setting update") + return + end + + updateOwnedPhoneSetting(src, setting_name, requested_value) +end) +``` + +The example names describe responsibilities, not guaranteed existing APIs. Resolve them to actual +phone-owned functions after inspecting the repository. + +## NUI + +- Declare the real `ui_page` and generated files in `fxmanifest.lua`. +- Lua to UI: use `SendNUIMessage`; manage focus with `SetNUIFocus` and always release it on close. +- UI to Lua: post to `https://${GetParentResourceName()}/callbackName` and handle it with + `RegisterNUICallback`. +- Treat every NUI payload as untrusted. Send consequential requests to the server and validate there. +- Call the NUI response callback on every reachable path so browser requests cannot hang. +- Keep user-facing strings in the phone's locale system; logs remain English-only. + +## SQL and persistence + +- Use the persistence layer already owned by `sky_phone`. +- Parameterize every value; never concatenate client input into SQL. +- Own phone schema and migrations under this repository and use collision-resistant `sky_phone` + table/key prefixes where appropriate. +- Never query or mutate tables owned by `sky_base`, `sky_jobs_base`, or another Sky resource. +- Use transactions for multi-step mutations that must succeed or fail together. +- Treat deployment/schema checks as static evidence, not proof of live server behavior. + +## Anti-patterns + +- Adding a Sky dependency, import, export, event, state probe, or database shortcut. +- Trusting NUI or client state for permissions or mutations. +- Hiding failures with broad guards, `pcall`, arbitrary waits, retries, or silent fallbacks. +- Hardcoding direct framework calls throughout feature code instead of using the phone's adapter. +- Re-fetching stable data every frame. +- Leaving NUI callbacks unanswered. +- Editing generated frontend output without updating its source and running the build. + +## Final verification + +- Search the diff for forbidden Sky dependencies and symbols. +- Validate manifest paths and dependency order. +- Run targeted Lua/JS/TS checks, tests, and builds available in the repository. +- Verify SQL/config/locale migrations are explicit. +- Clearly distinguish static/build validation from live FiveM runtime proof. diff --git a/.agents/skills/fivem-nui/SKILL.md b/.agents/skills/fivem-nui/SKILL.md new file mode 100644 index 0000000..2b69612 --- /dev/null +++ b/.agents/skills/fivem-nui/SKILL.md @@ -0,0 +1,26 @@ +--- +name: fivem-nui +description: FiveM NUI (New User Interface) development for creating graphical elements and user interfaces. Use when creating or editing NUI interfaces, HTML/CSS/JS for FiveM, or handling NUI callbacks. +--- + +# FiveM NUI Development + +Best practices for FiveM NUI development — fullscreen UIs, NUI callbacks, messaging, and UI integration. Use this skill whenever you are dealing with FiveM user interfaces to obtain domain-specific knowledge. + +## When to use + +- User asks how to create a UI for FiveM. +- Creating or editing HTML/CSS/JS files for FiveM resources. +- Setting up `ui_page` in fxmanifest.lua. +- Questions about NUI callbacks, SendNUIMessage, or SetNUIFocus. +- Need to look up natives → point to https://docs.fivem.net/natives/. + +## How to use + +Read individual rule files for detailed explanations and examples: + +- **rules/setup.md** — Setting up NUI in a resource: ui_page, files entry, folder structure. +- **rules/fullscreen-nui.md** — Creating fullscreen NUI pages: SEND_NUI_MESSAGE, SET_NUI_FOCUS, developer tools, referencing assets. +- **rules/nui-callbacks.md** — NUI callbacks: RegisterNUICallback, fetch requests, data handling, security. +- **rules/best-practices.md** — Best practices: performance, security, communication patterns, error handling. +- **rules/reference-links.md** — Official docs and natives reference. diff --git a/.agents/skills/fivem-nui/best-practices.md b/.agents/skills/fivem-nui/best-practices.md new file mode 100644 index 0000000..59a7722 --- /dev/null +++ b/.agents/skills/fivem-nui/best-practices.md @@ -0,0 +1,472 @@ +# NUI Best Practices + +Guidelines for building performant, secure, and maintainable NUI interfaces. + +## Performance + +### Minimize SendNUIMessage calls + +❌ **Bad:** +```lua +-- Sending updates every frame (terrible for performance!) +CreateThread(function() + while true do + Wait(0) + SendNUIMessage({ + type = 'updateSpeed', + speed = GetEntitySpeed(PlayerPedId()) + }) + end +end) +``` + +✅ **Good:** +```lua +-- Only send when value changes significantly +local lastSpeed = 0 +CreateThread(function() + while true do + Wait(100) -- Update every 100ms at most + local currentSpeed = math.floor(GetEntitySpeed(PlayerPedId()) * 3.6) -- km/h + + if math.abs(currentSpeed - lastSpeed) >= 1 then + lastSpeed = currentSpeed + SendNUIMessage({ + type = 'updateSpeed', + speed = currentSpeed + }) + end + end +end) +``` + +### Batch updates + +❌ **Bad:** +```lua +SendNUIMessage({type = 'updateHealth', health = health}) +SendNUIMessage({type = 'updateArmor', armor = armor}) +SendNUIMessage({type = 'updateStamina', stamina = stamina}) +``` + +✅ **Good:** +```lua +SendNUIMessage({ + type = 'updateStats', + data = { + health = health, + armor = armor, + stamina = stamina + } +}) +``` + +### Optimize DOM operations + +❌ **Bad:** +```js +// Updating DOM on every message +window.addEventListener('message', (event) => { + if (event.data.type === 'updateList') { + const list = document.getElementById('list'); + list.innerHTML = ''; // Clears entire list + + event.data.items.forEach(item => { + const div = document.createElement('div'); + div.textContent = item.name; + list.appendChild(div); // Multiple reflows + }); + } +}); +``` + +✅ **Good:** +```js +// Using document fragment for batch DOM updates +window.addEventListener('message', (event) => { + if (event.data.type === 'updateList') { + const list = document.getElementById('list'); + const fragment = document.createDocumentFragment(); + + event.data.items.forEach(item => { + const div = document.createElement('div'); + div.textContent = item.name; + fragment.appendChild(div); + }); + + list.innerHTML = ''; + list.appendChild(fragment); // Single reflow + } +}); +``` + +### Use CSS animations instead of JavaScript + +❌ **Bad:** +```js +function fadeIn(element) { + let opacity = 0; + const interval = setInterval(() => { + opacity += 0.1; + element.style.opacity = opacity; + if (opacity >= 1) clearInterval(interval); + }, 50); +} +``` + +✅ **Good:** +```css +.fade-in { + animation: fadeIn 0.5s ease-in; +} + +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} +``` + +```js +element.classList.add('fade-in'); +``` + +## Security + +### Always validate NUI callback data + +❌ **Bad:** +```lua +RegisterNUICallback('transfer', function(data, cb) + -- No validation! + TriggerServerEvent('bank:server:transfer', data.target, data.amount) + cb('ok') +end) +``` + +✅ **Good:** +```lua +RegisterNUICallback('transfer', function(data, cb) + -- Validate all inputs + if not data.target or type(data.target) ~= 'number' then + cb({success = false, error = 'Invalid target'}) + return + end + + if not data.amount or type(data.amount) ~= 'number' then + cb({success = false, error = 'Invalid amount'}) + return + end + + if data.amount <= 0 or data.amount > 1000000 then + cb({success = false, error = 'Amount out of range'}) + return + end + + -- Additional validation on server side + TriggerServerEvent('bank:server:transfer', data.target, data.amount) + cb({success = true}) +end) +``` + +### Never trust client-side data on server + +```lua +-- Server-side +RegisterNetEvent('shop:server:purchase') +AddEventHandler('shop:server:purchase', function(itemId, quantity, price) + local src = source + + -- DON'T trust the price from client! + -- Look it up server-side + local actualPrice = Items[itemId].price + local totalCost = actualPrice * quantity + + -- Validate and process... +end) +``` + +### Protect sensitive callbacks + +```lua +RegisterNUICallback('adminAction', function(data, cb) + -- Check if player has admin permissions server-side + TriggerServerEvent('admin:server:checkPermission', data.action) + cb('ok') +end) +``` + +## Communication patterns + +### State management + +Keep UI state synchronized: + +```lua +-- client.lua +local currentUI = { + visible = false, + page = 'home', + data = {} +} + +function updateUI(updates) + for k, v in pairs(updates) do + currentUI[k] = v + end + + SendNUIMessage({ + type = 'updateState', + state = currentUI + }) +end + +function openUI(page, data) + updateUI({ + visible = true, + page = page, + data = data + }) + SetNUIFocus(true, true) +end +``` + +### Event-driven updates + +```lua +-- Update UI when game events happen +AddEventHandler('playerSpawned', function() + SendNUIMessage({ + type = 'playerSpawned' + }) +end) + +RegisterNetEvent('inventory:client:itemAdded') +AddEventHandler('inventory:client:itemAdded', function(item, count) + SendNUIMessage({ + type = 'itemAdded', + item = item, + count = count + }) +end) +``` + +## Error handling + +### Always handle callback responses + +```lua +RegisterNUICallback('getData', function(data, cb) + local success, result = pcall(function() + return getSomeData(data.id) + end) + + if success then + cb({success = true, data = result}) + else + print('Error in getData:', result) + cb({success = false, error = 'Failed to get data'}) + end +end) +``` + +### Handle network errors in UI + +```js +async function callbackWithRetry(name, data, maxRetries = 3) { + for (let i = 0; i < maxRetries; i++) { + try { + const response = await fetch(`https://${GetParentResourceName()}/${name}`, { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify(data) + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error(`Attempt ${i + 1} failed:`, error); + + if (i === maxRetries - 1) { + throw error; // Final attempt failed + } + + // Wait before retry + await new Promise(resolve => setTimeout(resolve, 1000)); + } + } +} +``` + +## Code organization + +### Separate concerns + +**client.lua:** +```lua +-- UI management only +local UI = {} + +function UI.open(page, data) + SetNUIFocus(true, true) + SendNUIMessage({type = 'open', page = page, data = data}) +end + +function UI.close() + SetNUIFocus(false, false) + SendNUIMessage({type = 'close'}) +end + +function UI.update(data) + SendNUIMessage({type = 'update', data = data}) +end + +return UI +``` + +**main.lua:** +```lua +local UI = require('client') + +-- Game logic +RegisterCommand('shop', function() + local items = getShopItems() + UI.open('shop', {items = items}) +end) + +RegisterNUICallback('buyItem', function(data, cb) + local success = purchaseItem(data.itemId) + cb({success = success}) +end) +``` + +### Use TypeScript for complex UIs + +**types.ts:** +```typescript +export interface PlayerData { + name: string; + id: number; + health: number; + armor: number; +} + +export interface NUIMessage { + type: 'show' | 'hide' | 'update'; + data?: any; +} + +export interface NUICallback { + success: boolean; + data?: T; + error?: string; +} +``` + +**app.ts:** +```typescript +import { PlayerData, NUIMessage, NUICallback } from './types'; + +window.addEventListener('message', (event: MessageEvent) => { + const { type, data } = event.data; + + switch (type) { + case 'show': + showUI(data as PlayerData); + break; + // ... + } +}); + +async function getData(endpoint: string, payload: any): Promise> { + const response = await fetch(`https://${GetParentResourceName()}/${endpoint}`, { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify(payload) + }); + + return response.json(); +} +``` + +## Accessibility + +### Keyboard navigation + +```js +document.addEventListener('keydown', (event) => { + switch(event.key) { + case 'Escape': + closeUI(); + break; + case 'ArrowUp': + navigateUp(); + break; + case 'ArrowDown': + navigateDown(); + break; + case 'Enter': + selectCurrent(); + break; + } +}); +``` + +### Focus management + +```js +function showUI() { + const ui = document.getElementById('ui'); + ui.classList.add('visible'); + + // Focus first interactive element + const firstInput = ui.querySelector('input, button, [tabindex]'); + if (firstInput) { + firstInput.focus(); + } +} +``` + +## Testing + +### Mock mode for browser testing + +```js +// Check if running in game or browser +const isDevelopment = !window.invokeNative; + +if (isDevelopment) { + // Mock data for testing + setTimeout(() => { + window.dispatchEvent(new MessageEvent('message', { + data: { + type: 'show', + data: { + items: [ + { id: 1, name: 'Test Item 1', price: 100 }, + { id: 2, name: 'Test Item 2', price: 200 } + ] + } + } + })); + }, 1000); +} + +// Mock fetch for testing +function mockFetch(url, options) { + console.log('Mock fetch:', url, options); + return Promise.resolve({ + ok: true, + json: () => Promise.resolve({ success: true, data: {} }) + }); +} + +const fetchFn = isDevelopment ? mockFetch : fetch; +``` + +## Reference + +- Performance tips: https://docs.fivem.net/docs/scripting-manual/nui-development/ +- Security guide: https://docs.fivem.net/docs/developers/server-security/ diff --git a/.agents/skills/fivem-nui/fullscreen-nui.md b/.agents/skills/fivem-nui/fullscreen-nui.md new file mode 100644 index 0000000..86ae6ee --- /dev/null +++ b/.agents/skills/fivem-nui/fullscreen-nui.md @@ -0,0 +1,205 @@ +# Fullscreen NUI + +Fullscreen NUI pages are the most common type of user interface in FiveM. They overlay on top of the game and can have input focus for mouse/keyboard interaction. + +## Natives + +Key natives for fullscreen NUI: + +- **SEND_NUI_MESSAGE** / **SendNUIMessage** — Send data from Lua to the browser (JSON). +- **SET_NUI_FOCUS** — Control keyboard and mouse focus for the NUI page. + +## Sending messages to NUI + +Use `SendNUIMessage` to send data to your UI: + +```lua +-- Lua example +SendNUIMessage({ + type = 'openMenu', + data = { + title = 'Shop', + items = shopItems + } +}) +``` + +## Receiving messages in the browser + +In your HTML/JavaScript, listen for messages using the `message` event: + +```js +window.addEventListener('message', (event) => { + const data = event.data; + + if (data.type === 'openMenu') { + showMenu(data.data.title, data.data.items); + } +}); +``` + +## NUI Focus + +Control focus with `SetNUIFocus`: + +```lua +-- Enable both keyboard and mouse +SetNUIFocus(true, true) + +-- Enable keyboard only (no cursor) +SetNUIFocus(true, false) + +-- Disable focus completely +SetNUIFocus(false, false) +``` + +**Important:** +- The first parameter controls **keyboard focus**. +- The second parameter controls **mouse cursor** visibility and focus. +- Always disable focus when closing the UI to prevent input issues. + +## Focus stack + +FiveM maintains a focus stack for NUI resources: +- The most recently focused resource is on top. +- Resources are rendered as full-screen iframes. +- There's no click-through across resources. +- Only the current resource can control its own focus. + +## Referencing assets + +Use the `https://cfx-nui-{resourceName}/` protocol to reference resource files: + +```html + + + + + + + + +``` + +**Note:** The old `nui://` protocol is deprecated and no longer works in newer browser versions. Always use `https://cfx-nui-`. + +## Developer tools + +### Chrome DevTools + +Access CEF remote debugging tools at [http://localhost:13172/](http://localhost:13172/) while the game is running. Use any Chromium-based browser. + +### Console command + +Alternatively, use the `nui_devTools` command in the F8 console (requires developer mode enabled). + +## Example: Simple menu + +**Lua (client.lua):** +```lua +local menuOpen = false + +RegisterCommand('openmenu', function() + menuOpen = true + SetNUIFocus(true, true) + SendNUIMessage({ + type = 'show', + items = { + {id = 1, name = 'Item 1', price = 100}, + {id = 2, name = 'Item 2', price = 200} + } + }) +end) + +RegisterNUICallback('close', function(data, cb) + menuOpen = false + SetNUIFocus(false, false) + cb('ok') +end) + +RegisterNUICallback('buyItem', function(data, cb) + print('Buying item:', data.itemId) + -- Handle purchase logic + cb({success = true, message = 'Purchase successful'}) +end) +``` + +**HTML (ui/index.html):** +```html + + + + + + + + + + + +``` + +**JavaScript (ui/app.js):** +```js +window.addEventListener('message', (event) => { + if (event.data.type === 'show') { + showMenu(event.data.items); + } +}); + +function showMenu(items) { + const menu = document.getElementById('menu'); + const itemsDiv = document.getElementById('items'); + + itemsDiv.innerHTML = ''; + items.forEach(item => { + const div = document.createElement('div'); + div.className = 'item'; + div.textContent = `${item.name} - $${item.price}`; + div.onclick = () => buyItem(item.id); + itemsDiv.appendChild(div); + }); + + menu.style.display = 'block'; +} + +function closeMenu() { + document.getElementById('menu').style.display = 'none'; + fetch(`https://${GetParentResourceName()}/close`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({}) + }); +} + +function buyItem(itemId) { + fetch(`https://${GetParentResourceName()}/buyItem`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ itemId: itemId }) + }).then(resp => resp.json()).then(resp => { + if (resp.success) { + alert(resp.message); + } + }); +} + +function GetParentResourceName() { + return window.location.hostname.replace('cfx-nui-', ''); +} +``` + +## Reference + +- Fullscreen NUI: https://docs.fivem.net/docs/scripting-manual/nui-development/full-screen-nui/ +- SEND_NUI_MESSAGE: https://docs.fivem.net/natives/?_0x78608ACB +- SET_NUI_FOCUS: https://docs.fivem.net/natives/?_0x5B98AE30 diff --git a/.agents/skills/fivem-nui/nui-callbacks.md b/.agents/skills/fivem-nui/nui-callbacks.md new file mode 100644 index 0000000..6facff7 --- /dev/null +++ b/.agents/skills/fivem-nui/nui-callbacks.md @@ -0,0 +1,309 @@ +# NUI Callbacks + +NUI callbacks allow the browser (UI) to send data back to the game and receive responses. They work like HTTP endpoints that your UI can call. + +## Registering callbacks in Lua + +Use `RegisterNUICallback` to create a callback endpoint: + +```lua +RegisterNUICallback('getPlayerData', function(data, cb) + -- data contains the POST body parsed as JSON + local requestedData = data.dataType + + -- Perform logic + local playerData = { + name = GetPlayerName(PlayerId()), + health = GetEntityHealth(PlayerPedId()), + position = GetEntityCoords(PlayerPedId()) + } + + -- ALWAYS call the callback (cb) to prevent request stalling + cb(playerData) +end) +``` + +**Important:** +- The `data` parameter contains the POST body automatically parsed as JSON. +- The `cb` function must ALWAYS be called, even if just with `{}` or `{ok = true}`. +- Failing to call `cb` will cause the browser request to hang indefinitely. + +## Calling callbacks from the browser + +Use `fetch` to call a callback from your JavaScript: + +```js +// Get the current resource name +function GetParentResourceName() { + return window.location.hostname.replace('cfx-nui-', ''); +} + +// Call the callback +fetch(`https://${GetParentResourceName()}/getPlayerData`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: JSON.stringify({ + dataType: 'basic' + }) +}) +.then(resp => resp.json()) +.then(data => { + console.log('Player data:', data); + // Use the data in your UI + document.getElementById('player-name').textContent = data.name; +}) +.catch(err => { + console.error('Error fetching player data:', err); +}); +``` + +## Callback naming + +The callback name in the URL must match the name you registered: + +```lua +-- Lua +RegisterNUICallback('buyItem', function(data, cb) + -- ... +end) +``` + +```js +// Browser +fetch(`https://${GetParentResourceName()}/buyItem`, { + method: 'POST', + // ... +}) +``` + +## Complete example: Item purchase + +**Lua (client.lua):** +```lua +RegisterNUICallback('purchaseItem', function(data, cb) + local itemId = data.itemId + local quantity = data.quantity or 1 + + -- Validate input + if not itemId then + cb({success = false, error = 'Item ID required'}) + return + end + + -- Trigger server-side purchase + TriggerServerEvent('shop:server:purchase', itemId, quantity) + + -- Wait for server response (you'd typically use a callback pattern) + -- For this example, we'll return immediately + cb({ + success = true, + message = 'Purchase request sent', + itemId = itemId, + quantity = quantity + }) +end) + +-- Handle server response +RegisterNetEvent('shop:client:purchaseResult') +AddEventHandler('shop:client:purchaseResult', function(success, message) + SendNUIMessage({ + type = 'purchaseResult', + success = success, + message = message + }) +end) +``` + +**JavaScript (ui/shop.js):** +```js +function purchaseItem(itemId, quantity) { + fetch(`https://${GetParentResourceName()}/purchaseItem`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: JSON.stringify({ + itemId: itemId, + quantity: quantity + }) + }) + .then(resp => resp.json()) + .then(data => { + if (data.success) { + showNotification(data.message, 'success'); + } else { + showNotification(data.error, 'error'); + } + }) + .catch(err => { + console.error('Purchase error:', err); + showNotification('Purchase failed', 'error'); + }); +} + +// Listen for server response +window.addEventListener('message', (event) => { + if (event.data.type === 'purchaseResult') { + if (event.data.success) { + showNotification('Purchase successful!', 'success'); + } else { + showNotification(event.data.message, 'error'); + } + } +}); +``` + +## Async/await pattern + +For cleaner code, use async/await: + +```js +async function getPlayerData() { + try { + const response = await fetch(`https://${GetParentResourceName()}/getPlayerData`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: JSON.stringify({ + dataType: 'full' + }) + }); + + const data = await response.json(); + return data; + } catch (error) { + console.error('Failed to get player data:', error); + return null; + } +} + +// Usage +async function updateUI() { + const playerData = await getPlayerData(); + if (playerData) { + renderPlayerInfo(playerData); + } +} +``` + +## Error handling + +Always handle errors properly: + +**Lua:** +```lua +RegisterNUICallback('risky_operation', function(data, cb) + local success, result = pcall(function() + -- Your risky operation + return doSomethingRisky(data) + end) + + if success then + cb({success = true, data = result}) + else + cb({success = false, error = 'Operation failed: ' .. tostring(result)}) + end +end) +``` + +**JavaScript:** +```js +async function performRiskyOperation() { + try { + const response = await fetch(`https://${GetParentResourceName()}/risky_operation`, { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({}) + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + + if (!data.success) { + throw new Error(data.error || 'Operation failed'); + } + + return data.data; + } catch (error) { + console.error('Operation failed:', error); + showNotification('Something went wrong', 'error'); + return null; + } +} +``` + +## Security considerations + +### Always validate data + +```lua +RegisterNUICallback('setPlayerName', function(data, cb) + -- Validate input + if not data.name or type(data.name) ~= 'string' then + cb({success = false, error = 'Invalid name'}) + return + end + + -- Sanitize input + local name = data.name:gsub('[^%w%s]', '') -- Remove special characters + if #name < 3 or #name > 32 then + cb({success = false, error = 'Name must be 3-32 characters'}) + return + end + + -- Proceed with validated data + TriggerServerEvent('player:server:setName', name) + cb({success = true}) +end) +``` + +### Don't trust client data + +Always validate and verify on the server: + +```lua +-- Client +RegisterNUICallback('buyItem', function(data, cb) + TriggerServerEvent('shop:server:buyItem', data.itemId, data.quantity) + cb({ok = true}) +end) + +-- Server +RegisterNetEvent('shop:server:buyItem') +AddEventHandler('shop:server:buyItem', function(itemId, quantity) + local src = source + + -- Validate item exists + if not Items[itemId] then + return + end + + -- Validate quantity + if type(quantity) ~= 'number' or quantity < 1 or quantity > 100 then + return + end + + -- Check player has enough money + local player = GetPlayer(src) + local price = Items[itemId].price * quantity + + if player.getMoney() >= price then + player.removeMoney(price) + player.addItem(itemId, quantity) + TriggerClientEvent('shop:client:purchaseResult', src, true, 'Purchase successful') + else + TriggerClientEvent('shop:client:purchaseResult', src, false, 'Not enough money') + end +end) +``` + +## Reference + +- NUI Callbacks: https://docs.fivem.net/docs/scripting-manual/nui-development/nui-callbacks/ +- RegisterNUICallback: https://docs.fivem.net/docs/scripting-reference/runtimes/lua/functions/RegisterNUICallback/ diff --git a/.agents/skills/fivem-nui/reference-links.md b/.agents/skills/fivem-nui/reference-links.md new file mode 100644 index 0000000..82f899a --- /dev/null +++ b/.agents/skills/fivem-nui/reference-links.md @@ -0,0 +1,128 @@ +# Reference Links + +Official documentation and useful resources for FiveM NUI development. + +## Official FiveM Documentation + +### NUI Development +- **NUI Overview**: https://docs.fivem.net/docs/scripting-manual/nui-development/ +- **Fullscreen NUI**: https://docs.fivem.net/docs/scripting-manual/nui-development/full-screen-nui/ +- **NUI Callbacks**: https://docs.fivem.net/docs/scripting-manual/nui-development/nui-callbacks/ +- **Loading Screens**: https://docs.fivem.net/docs/scripting-manual/nui-development/loading-screens/ +- **Direct-rendered UI (DUI)**: https://docs.fivem.net/docs/scripting-manual/nui-development/dui/ + +### Natives Reference +- **SEND_NUI_MESSAGE**: https://docs.fivem.net/natives/?_0x78608ACB +- **SET_NUI_FOCUS**: https://docs.fivem.net/natives/?_0x5B98AE30 +- **All Natives**: https://docs.fivem.net/natives/ + +### Scripting Manual +- **Creating Your First Script**: https://docs.fivem.net/docs/scripting-manual/introduction/creating-your-first-script/ +- **Working with Events**: https://docs.fivem.net/docs/scripting-manual/working-with-events/ +- **Resource Manifest**: https://docs.fivem.net/docs/scripting-reference/resource-manifest/resource-manifest/ + +### Lua Functions +- **RegisterNUICallback**: https://docs.fivem.net/docs/scripting-reference/runtimes/lua/functions/RegisterNUICallback/ +- **SendNUIMessage**: https://docs.fivem.net/docs/scripting-reference/runtimes/lua/functions/SendNUIMessage/ + +## Security +- **Secure Your Events**: https://docs.fivem.net/docs/developers/server-security/ + +## Web Technologies + +### HTML/CSS/JavaScript +- **MDN Web Docs**: https://developer.mozilla.org/ +- **Fetch API**: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API +- **Window.postMessage**: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage + +### Modern Frameworks +- **React**: https://react.dev/ +- **Vue**: https://vuejs.org/ +- **Svelte**: https://svelte.dev/ +- **Vite**: https://vitejs.dev/ + +### CSS Frameworks +- **Tailwind CSS**: https://tailwindcss.com/ +- **Bootstrap**: https://getbootstrap.com/ + +### TypeScript +- **TypeScript Documentation**: https://www.typescriptlang.org/docs/ + +## Build Tools +- **Vite**: https://vitejs.dev/ +- **Webpack**: https://webpack.js.org/ +- **npm**: https://www.npmjs.com/ + +## Community Resources + +### Forums +- **FiveM Forums**: https://forum.cfx.re/ +- **FiveM Discord**: https://discord.gg/fivem + +### Code Examples +- **FiveM Cookbook**: https://docs.fivem.net/docs/cookbook/ +- **GitHub - FiveM**: https://github.com/citizenfx/fivem + +## Tools + +### Debugging +- **Chrome DevTools**: http://localhost:13172/ (when game is running) +- **F8 Console**: In-game developer console + +### Development +- **Visual Studio Code**: https://code.visualstudio.com/ +- **Browser DevTools**: Built into Chrome, Firefox, Edge + +## Additional Resources + +### Performance +- **Web Performance**: https://web.dev/performance/ +- **Chrome DevTools Performance**: https://developer.chrome.com/docs/devtools/performance/ + +### Accessibility +- **Web Accessibility**: https://www.w3.org/WAI/ +- **ARIA**: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA + +## Quick Reference Card + +### Key Lua Functions +```lua +-- Send message to UI +SendNUIMessage({type = 'action', data = value}) + +-- Set focus +SetNUIFocus(hasKeyboardFocus, hasMouseFocus) + +-- Register callback +RegisterNUICallback('callbackName', function(data, cb) + cb(responseData) +end) +``` + +### Key JavaScript Patterns +```js +// Listen for messages +window.addEventListener('message', (event) => { + // Handle event.data +}); + +// Call callback +fetch(`https://${GetParentResourceName()}/callbackName`, { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify(data) +}); + +// Get resource name +function GetParentResourceName() { + return window.location.hostname.replace('cfx-nui-', ''); +} +``` + +### Asset References +```html + + + + +``` diff --git a/.agents/skills/fivem-nui/setup.md b/.agents/skills/fivem-nui/setup.md new file mode 100644 index 0000000..972f448 --- /dev/null +++ b/.agents/skills/fivem-nui/setup.md @@ -0,0 +1,385 @@ +# Setting up NUI in a Resource + +This guide covers the basic setup for adding a NUI interface to your FiveM resource. + +## Folder structure + +Recommended folder structure for a resource with NUI: + +``` +my-resource/ +├── fxmanifest.lua +├── client.lua +├── server.lua +└── ui/ + ├── index.html + ├── css/ + │ └── style.css + ├── js/ + │ └── app.js + └── images/ + └── logo.png +``` + +## fxmanifest.lua configuration + +You need to specify the `ui_page` and include all UI files in the `files` array: + +```lua +fx_version 'cerulean' +game 'gta5' + +author 'Your Name' +description 'Resource with NUI' +version '1.0.0' + +-- Client-side Lua script +client_script 'client.lua' + +-- Server-side Lua script +server_script 'server.lua' + +-- Specify the root UI page +ui_page 'ui/index.html' + +-- All UI files must be included in files array +files { + 'ui/index.html', + 'ui/css/style.css', + 'ui/js/app.js', + 'ui/images/logo.png' +} +``` + +### Using wildcards + +You can use wildcards for convenience: + +```lua +ui_page 'ui/index.html' + +files { + 'ui/**/*.*' -- Include all files recursively in ui folder +} +``` + +## External hosting + +You can also host the UI externally: + +```lua +ui_page 'https://ui-frontend.example.com/v1.0.0/index.html' + +-- No files array needed for external hosting +``` + +**Benefits:** +- Faster updates without resource restart +- Can use modern build tools and CI/CD +- Reduces resource download size + +**Considerations:** +- Requires external web hosting +- Players need internet connection +- Potential latency for initial load + +## Basic HTML structure + +**ui/index.html:** +```html + + + + + + My Resource UI + + + +
+ +
+ + + + +``` + +## Basic CSS + +**ui/css/style.css:** +```css +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + overflow: hidden; +} + +#app { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + display: none; /* Hidden by default */ +} + +#app.visible { + display: flex; + justify-content: center; + align-items: center; +} +``` + +## Basic JavaScript + +**ui/js/app.js:** +```js +// Helper to get resource name +function GetParentResourceName() { + return window.location.hostname.replace('cfx-nui-', ''); +} + +// Listen for messages from Lua +window.addEventListener('message', (event) => { + const data = event.data; + + switch(data.type) { + case 'show': + showUI(data.data); + break; + case 'hide': + hideUI(); + break; + case 'update': + updateUI(data.data); + break; + } +}); + +// Show the UI +function showUI(data) { + const app = document.getElementById('app'); + app.classList.add('visible'); + + // Populate UI with data + if (data) { + // Handle data... + } +} + +// Hide the UI +function hideUI() { + const app = document.getElementById('app'); + app.classList.remove('visible'); +} + +// Update UI content +function updateUI(data) { + // Update logic... +} + +// Close UI and notify Lua +function closeUI() { + hideUI(); + + fetch(`https://${GetParentResourceName()}/close`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: JSON.stringify({}) + }); +} + +// ESC key to close +document.addEventListener('keydown', (event) => { + if (event.key === 'Escape') { + closeUI(); + } +}); +``` + +## Basic Lua client script + +**client.lua:** +```lua +local uiOpen = false + +-- Command to open UI +RegisterCommand('openui', function() + openUI() +end) + +-- Open the UI +function openUI() + if uiOpen then return end + + uiOpen = true + SetNUIFocus(true, true) + + SendNUIMessage({ + type = 'show', + data = { + title = 'My UI', + content = 'Hello from FiveM!' + } + }) +end + +-- Close the UI +function closeUI() + if not uiOpen then return end + + uiOpen = false + SetNUIFocus(false, false) + + SendNUIMessage({ + type = 'hide' + }) +end + +-- Handle close callback from NUI +RegisterNUICallback('close', function(data, cb) + closeUI() + cb('ok') +end) + +-- Example: Update UI with server data +RegisterNetEvent('myresource:client:updateUI') +AddEventHandler('myresource:client:updateUI', function(newData) + SendNUIMessage({ + type = 'update', + data = newData + }) +end) +``` + +## Modern build tools + +For production applications, consider using modern build tools: + +### Using Vite + +**package.json:** +```json +{ + "name": "my-resource-ui", + "version": "1.0.0", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "vite": "^5.0.0" + } +} +``` + +**vite.config.js:** +```js +import { defineConfig } from 'vite' + +export default defineConfig({ + base: './', + build: { + outDir: 'dist', + emptyOutDir: true, + assetsInlineLimit: 0 + } +}) +``` + +**fxmanifest.lua:** +```lua +ui_page 'ui/dist/index.html' + +files { + 'ui/dist/**/*' +} +``` + +### Using React + +```bash +npm create vite@latest ui -- --template react +cd ui +npm install +npm run build +``` + +### Using Vue + +```bash +npm create vite@latest ui -- --template vue +cd ui +npm install +npm run build +``` + +## Testing during development + +1. **Browser testing:** Open `ui/index.html` directly in your browser for quick UI testing. +2. **Mock data:** Create mock data in your JavaScript for testing without running the game. +3. **Hot reload:** Use Vite or similar tools for hot module replacement during development. +4. **DevTools:** Use `http://localhost:13172/` while the game is running to debug the live NUI. + +## Common mistakes + +### Forgetting to add files to manifest + +❌ **Wrong:** +```lua +ui_page 'ui/index.html' +-- Missing files array! +``` + +✅ **Correct:** +```lua +ui_page 'ui/index.html' +files { + 'ui/index.html', + 'ui/css/style.css', + 'ui/js/app.js' +} +``` + +### Wrong asset references + +❌ **Wrong:** +```html + + + +``` + +✅ **Correct:** +```html + +``` + +### Not disabling focus + +❌ **Wrong:** +```lua +-- User closes UI but focus is still active +-- Now they can't move or shoot! +``` + +✅ **Correct:** +```lua +RegisterNUICallback('close', function(data, cb) + SetNUIFocus(false, false) -- Always disable focus! + cb('ok') +end) +``` + +## Reference + +- Resource Manifest: https://docs.fivem.net/docs/scripting-reference/resource-manifest/resource-manifest/ +- Fullscreen NUI: https://docs.fivem.net/docs/scripting-manual/nui-development/full-screen-nui/ diff --git a/.agents/skills/fivem-security/SKILL.md b/.agents/skills/fivem-security/SKILL.md new file mode 100644 index 0000000..3d92cb3 --- /dev/null +++ b/.agents/skills/fivem-security/SKILL.md @@ -0,0 +1,25 @@ +--- +name: fivem-security +description: Best practices and rules for securing FiveM resources against cheaters and exploits. Use this skill when writing or reviewing server-side and client-side code to ensure malicious events, unauthorized entity creations, and client trust issues are prevented. Focuses on strict server authority and safe event handling. +--- + +# 🛡️ FiveM Security & Anti-Exploit Principles + +This skill provides architectural guidance for securing FiveM resources against common cheats, unauthorized event triggers, and malicious data manipulation. + +**Core Philosophy:** NEVER TRUST THE CLIENT. + +The client is in the hands of the user, which means it can be fully compromised. Every action that affects the game state, economy, or other players MUST be validated on the server. + +## 📂 Core Concepts & Rules + +Detailed rules are broken down into specific topics within the `rules/` directory: + +- **[events.md](rules/events.md)**: How to properly structure and validate `RegisterNetEvent` / `TriggerServerEvent` to prevent unauthorized execution. + +## ⚠️ The Golden Rules of FiveM Security + +1. **Server Authority**: The server dictates the truth. The client only requests actions. +2. **Never Trust Parameters**: Always validate arguments sent from the client (e.g., if a client says "give me $50", the server must check if the client *earned* it, not just blindly accept the amount). +3. **Distance Checks**: Always check the distance on the server side before allowing an interaction (e.g., looting, selling, entering a zone). +4. **Rate Limiting**: Prevent event spamming by implementing server-side cooldowns or debouncing for critical actions. \ No newline at end of file diff --git a/.agents/skills/fivem-security/events.md b/.agents/skills/fivem-security/events.md new file mode 100644 index 0000000..991dfa4 --- /dev/null +++ b/.agents/skills/fivem-security/events.md @@ -0,0 +1,73 @@ +# 🛡️ Secure Event Handling + +The single biggest vulnerability in FiveM development is trusting data sent from the client via `TriggerServerEvent`. **Hackers don't need complex menus; they just execute events with spoofed parameters.** + +## ❌ Bad Practice: Trusting the Client + +Never let the client dictate the outcome. + +```lua +-- CLIENT +TriggerServerEvent("job:payMe", 5000) -- The hacker just changes this to 5000000 + +-- SERVER +RegisterNetEvent("job:payMe", function(amount) + local src = source + local Player = QBCore.Functions.GetPlayer(src) + Player.Functions.AddMoney("cash", amount) -- Boom, economy ruined. +end) +``` + +## ✅ Good Practice: Server Authority + +The client **requests** an action; the server **calculates** the result. + +```lua +-- CLIENT +-- Client just says "I finished the job" +TriggerServerEvent("job:requestPayment") + +-- SERVER +RegisterNetEvent("job:requestPayment", function() + local src = source + local Player = QBCore.Functions.GetPlayer(src) + + -- The SERVER decides how much to pay based on server-side logic/config + local paymentAmount = Config.JobPayAmount + + -- Additional security: Are they actually clocked in? Did they wait the required time? + if not ServerSideJobState[src].isWorking then return end + + Player.Functions.AddMoney("cash", paymentAmount) +end) +``` + +## 📍 Distance Checks (Crucial) + +If a player triggers an event to "buy an item" or "harvest a plant," the server **MUST** check if they are actually physically near the location. Hackers can trigger events from across the map. + +```lua +-- SERVER +local sellPosition = vector3(100.0, 0.0, 0.0) + +RegisterNetEvent("packages:givePackage", function() + local src = source + local ped = GetPlayerPed(src) + local position = GetEntityCoords(ped) + + -- Server checks distance. 10 units is usually a safe margin for latency. + if #(position - sellPosition) >= 10.0 then + print(("Exploit attempt: %s tried to sell from too far away."):format(GetPlayerName(src))) + return + end + + -- Proceed with giving the item +end) +``` + +## 🛡️ Best Practices Summary + +1. **Client requests, Server decides.** Never send prices, amounts, or sensitive item names from the client if it can be avoided. +2. **Always perform Distance Checks** on the server using `GetEntityCoords(GetPlayerPed(source))`. +3. **Verify State.** If the event requires a specific job or item, verify it on the server *again*. +4. **Log suspicious activity.** If a distance check fails drastically, log it for admins. \ No newline at end of file diff --git a/.agents/skills/grill-me/SKILL.md b/.agents/skills/grill-me/SKILL.md new file mode 100644 index 0000000..9470cfc --- /dev/null +++ b/.agents/skills/grill-me/SKILL.md @@ -0,0 +1,7 @@ +--- +name: grill-me +description: A relentless interview to sharpen a plan or design. +disable-model-invocation: true +--- + +Run a `/grilling` session. diff --git a/.agents/skills/grill-me/agents/openai.yaml b/.agents/skills/grill-me/agents/openai.yaml new file mode 100644 index 0000000..4d6fb0c --- /dev/null +++ b/.agents/skills/grill-me/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "Grill Me" + short_description: "Sharpen a plan through interview" +policy: + allow_implicit_invocation: false diff --git a/.agents/skills/grilling/SKILL.md b/.agents/skills/grilling/SKILL.md new file mode 100644 index 0000000..52d8eb3 --- /dev/null +++ b/.agents/skills/grilling/SKILL.md @@ -0,0 +1,12 @@ +--- +name: grilling +description: Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases. +--- + +Interview me relentlessly about every aspect of this until we reach a shared understanding. Walk down each branch of the decision tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer. + +Ask the questions one at a time, waiting for feedback on each question before continuing. Asking multiple questions at once is bewildering. + +If a *fact* can be found by exploring the environment (filesystem, tools, etc.), look it up rather than asking me. The *decisions*, though, are mine — put each one to me and wait for my answer. + +Do not act on it until I confirm we have reached a shared understanding. diff --git a/.agents/skills/grilling/agents/openai.yaml b/.agents/skills/grilling/agents/openai.yaml new file mode 100644 index 0000000..85b1260 --- /dev/null +++ b/.agents/skills/grilling/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Grilling" + short_description: "Stress-test thinking one question at a time" diff --git a/.agents/skills/lua-basics/SKILL.md b/.agents/skills/lua-basics/SKILL.md new file mode 100644 index 0000000..807063f --- /dev/null +++ b/.agents/skills/lua-basics/SKILL.md @@ -0,0 +1,29 @@ +--- +name: lua-basics +description: Effective Lua programming for FiveM - functions, tables, variables, conditionals, error handling. Use when writing or reviewing Lua code for FiveM resources. +author: germanfndez +version: 1.0.0 +mcp-server: projecthub +--- + +# Lua Basics + +Best practices for writing effective Lua code in FiveM. This skill covers fundamental Lua patterns, performance optimizations, and code quality guidelines specifically for FiveM development. + +## When to use + +- Writing or reviewing Lua code for FiveM resources. +- Questions about Lua best practices, naming conventions, or code structure. +- Optimizing Lua code for performance. +- Need guidance on functions, tables, variables, conditionals, or error handling in Lua. + +## How to use + +Read individual rule files for detailed explanations and examples: + +- **rules/functions.md** — Function best practices: size, naming, parameters, exports, guard clauses. +- **rules/tables.md** — Table operations: array indices, dereferencing, avoiding table.insert, iterations, array size. +- **rules/variables.md** — Variable naming conventions: constants, locals, globals, enums vs booleans. +- **rules/conditionals.md** — Conditional patterns: default values, boolean expressions, readability. +- **rules/errors.md** — Error handling: assertions, pre-conditions, errors as values, fail loudly. +- **rules/reference-links.md** — Official Lua and FiveM documentation resources. diff --git a/.agents/skills/lua-basics/conditionals.md b/.agents/skills/lua-basics/conditionals.md new file mode 100644 index 0000000..3e665c1 --- /dev/null +++ b/.agents/skills/lua-basics/conditionals.md @@ -0,0 +1,59 @@ +# Conditionals + +## Default Values + +Consider ternary operator 'or' instead of nil checks to improve readability. + +**BAD:** +```lua +if name then + return name +else + return "John Doe" +end +``` + +**GOOD:** +```lua +return name or "John Doe" +``` + +## Don't Write "if true then return true" + +When returning or setting a variable to the value of the conditional statement itself, don't use an if else block. + +**BAD:** +```lua +if name == "mark" or name == "stacy" then + return true +else + return false +end +``` + +**GOOD:** +```lua +return name == "mark" or name == "stacy" +``` + +## Prefer positive boolean expressions + +This makes the code easier to read. + +**BAD:** +```lua +if not isHappy then + return "sad" +else + return "happy" +end +``` + +**GOOD:** +```lua +if isHappy then + return "happy" +else + return "sad" +end +``` diff --git a/.agents/skills/lua-basics/errors.md b/.agents/skills/lua-basics/errors.md new file mode 100644 index 0000000..e366812 --- /dev/null +++ b/.agents/skills/lua-basics/errors.md @@ -0,0 +1,61 @@ +# Error Handling + +An unexpected state or condition within the code may cause a lua error to be thrown. However, these bad states can have other consequences when not so explicitly detected and handled. They may propagate bad state to other components of the system, or introduce unintended behavior. Checking for and handling unexpected state can make your code more robust to possible failures and vulnerabilities. + +## Use assert instead of 'if expression then error()' + +assert is a more succinct, readable way to throw an error on a condition not being met. + +**BAD:** +```lua +if not someVar then error("someVar is nil") end +``` + +**GOOD:** +```lua +assert(someVar ~= nil, "someVar is nil") +``` + +## Pre-condition check liberally + +When performing an operation, make a list of assumptions and then write pre-condition checks. + +## Fail loudly for unexpected state + +When writing pre-condition checks, failure should often result in a lua error with a message. Failing silently by just early returning from a function can be difficult to debug and may go undetected. + +**BAD:** +```lua +if not isPlayerDead() then return end +``` + +**GOOD:** +```lua +assert(isPlayerDead(), "player is not dead") +``` + +## Throwing an Error vs Logging + +Some states may be unexpected, but recoverable. In these cases, it may be preferable to log the state, but still allow the operation to proceed. An example of this would be a player selling items to an NPC. If some of the items were failing to sell, it would be better to log/print the error, while allowing the rest of the items to go through. + +Keep in mind what execution will be cancelled by throwing an error and use best judgment to decide whether throwing or logging is the better choice. + +## Assertions vs Errors as Values + +Assertions cause lua errors to propagate up the stack, forcing callers to handle them via protected calls. While assertions should always be used for unexpected or "impossible" cases, errors as values can be helpful for expected failure cases that we want the caller of the API to handle. This involves returning a success boolean, followed by an optional error code & message. Doing this makes the default behavior of our function fail silently, as it becomes the callers responsibility to decide to handle the error. This can provide a better experience for players as a silent failure may be preferable to loud error messages in cases where the player pressed the wrong button for example. + +Note that API functions should be idempotent when possible. A no-op result is still considered successful, if the state of the system is the one the caller expects after the function is ran. + +### Example Error as Value + +```lua +function add(a, b) + if not a or not b then + return nil, { + code = 'missing_required_params', + message = 'either a or b is nil', + } + end + return a + b +end +``` diff --git a/.agents/skills/lua-basics/functions.md b/.agents/skills/lua-basics/functions.md new file mode 100644 index 0000000..4811824 --- /dev/null +++ b/.agents/skills/lua-basics/functions.md @@ -0,0 +1,157 @@ +# Functions + +## Size & Scope + +- Functions should only do one thing, and should be small. If a function is not small, break it up into smaller functions. +- Avoid mixing high level code with low level code in the same function. + +## Naming + +- Local functions should be named in camelCase format to differentiate from natives and standard lua library functions +- Global functions should be named in PascalCase format +- Functions should also be named with a leading verb. + +**BAD:** +```lua +function player() +function playerDrop() +``` + +**GOOD:** +```lua +function getPlayerObject() +function dropPlayer() +``` + +## Parameters + +### Limit Number of Parameters + +If needing more than 3 or so parameters for a single function, that may be a sign that the parameters can be grouped within a table and passed as a object, rather than as individual arguments. + +**BAD:** +```lua +function createChar(name, age, height, birthday, nationality) + +end +``` + +**GOOD:** +```lua +function createChar(char) + +end +``` + +### Avoid boolean parameters in APIs + +Boolean parameters are a signal that a function is doing two things. Instead, call two different functions that each do one thing. While what is considered an API is ambiguous, a good rule of thumb is not to include boolean parameters in global or exported functions. + +**BAD:** +```lua +function PrintEmotionalState(isHappy) + if isHappy then + print("happy") + else + print("sad") + end +end +``` + +**GOOD:** +```lua +function PrintHappy() + print("happy") +end + +function PrintSad() + print("sad") +end +``` + +### Avoid passing implied functions as arguments + +Instead declare the function in a local variable and pass the variable as the argument. This has major performance improvements if the calling function is invoked more than once. Some functions such as CreateThread are often only invoked once, so there wouldn't be any performance improvement to localizing the argument function. However, it's still recommended anyway as a defensive measure to avoid the issue entirely if the code were to change in the future. + +**BAD:** +```lua +someFunction(function() + +end) +``` + +**GOOD:** +```lua +local function myFunction() + +end +someFunction(myFunction) +``` + +### Parameter Overloads + +Be careful overloading a function. Overloading can be a smell that a function is doing more than one thing. Overloads are useful as wrapper functions, providing different ways to call the same underlying function. + +### Optional Parameters + +Required parameters should come before optional ones. + +## Export Documentation + +Exports should have a lua-language-server annotation to declare the API: + +```lua +--- Puts a space between a first and last name +---@param first string first name +---@param last string last name +---@return string full name +local function formatName(first, last) + return first .. ' ' .. last +end + +exports('formatName', formatName) +``` + +### Keep returned values small in size + +Since returned values are passed-by-value, there can be a significant performance cost to returning large payloads. Benchmarks show it is more performant to have many export calls that return a small amount of data each, than few export calls that return large payloads, even if the total number of bytes transferred is the same. Providing accessor exports instead of direct access to tables also makes your API more flexible to future changes. + +**BAD:** +```lua +exports('GetTable', function() + return myTable +end) +``` + +**GOOD:** +```lua +exports('GetValue', function(key) + return myTable[key] +end) +``` + +## Use guard clauses + +Often before doing the "real" work of a function, certain pre-conditions must be met. Guard clauses are conditional statements that provide early returns to check certain conditions. This allows the reader to also exit early, rather than reading the entire function. + +Additionally, using guard clauses avoids nesting, which can make code difficult to read. Sometimes though, a simple if statement reads just fine. Use your best judgment. + +**BAD:** +```lua +local function getFullName(first, last) + if not nameHidden and first and last then + return first .. last + else + return nil + end +end +``` + +**GOOD:** +```lua +local function getFullName(first, last) + if nameHidden then return end + if not first or not last then return end + return first .. last +end +``` diff --git a/.agents/skills/lua-basics/reference-links.md b/.agents/skills/lua-basics/reference-links.md new file mode 100644 index 0000000..ba7473e --- /dev/null +++ b/.agents/skills/lua-basics/reference-links.md @@ -0,0 +1,17 @@ +# Reference Links + +## Official Documentation + +- **Effective FiveM Lua**: https://manason.github.io/effective-fivem-lua/ +- **Lua 5.4 Reference Manual**: https://www.lua.org/manual/5.4/ +- **Programming in Lua (book)**: https://www.lua.org/pil/ + +## Specific Topics + +- **Functions**: https://manason.github.io/effective-fivem-lua/functions/ +- **Tables**: https://manason.github.io/effective-fivem-lua/tables/ +- **Variables**: https://manason.github.io/effective-fivem-lua/variables/ +- **Conditionals**: https://manason.github.io/effective-fivem-lua/conditionals/ +- **Error Handling**: https://manason.github.io/effective-fivem-lua/errors/ +- **Structure/Scope**: https://manason.github.io/effective-fivem-lua/structure/ +- **Events**: https://manason.github.io/effective-fivem-lua/events/ diff --git a/.agents/skills/lua-basics/tables.md b/.agents/skills/lua-basics/tables.md new file mode 100644 index 0000000..2b9334f --- /dev/null +++ b/.agents/skills/lua-basics/tables.md @@ -0,0 +1,124 @@ +# Tables + +## Imply Array Indices + +Other languages don't allow declaring an array with explicit indices. Unless the keys have important meaning that needs to be made clear to the reader, they should be implied. + +**BAD:** +```lua +local myTable = { + [1] = "first index", + [2] = "second index", + [3] = "third index" +} +``` + +**GOOD:** +```lua +local myTable = { + "first index", + "second index", + "third index" +} +``` + +## Dereferencing + +### Prefer object access for constant keys, and array access for non-constant keys + +```lua +local company = { + boss = "Sam" +} +``` + +**BAD:** +```lua +local boss = company["boss"] +``` + +**GOOD:** +```lua +local boss = company.boss +``` + +### Extract duplicate table dereferences into local variables + +This is both a readability and performance boost. + +**BAD:** +```lua +local concatenation = myTable["key"] .. myTable["key"] +``` + +**GOOD:** +```lua +local myTableValue = myTable["key"] +local concatenation = myTableValue .. myTableValue +``` + +## Avoid table.insert() + +It has horrible performance. It should only be used if needing to insert into an array at a specific index that is not the last index. + +### Inserting at the end of a table + +**BAD:** +```lua +table.insert(myTable, "value") +``` + +**GOOD:** +```lua +myTable[#myTable + 1] = "value" +``` + +### Inserting/Overwriting a given key + +**BAD:** +```lua +table.insert(myTable, "key", "value") +``` + +**GOOD:** +```lua +myTable["key"] = "value" +``` + +## Use numeric for loops when iterating over an array + +This is a performance boost. + +**BAD:** +```lua +for k, v in pairs(myArray) do + print(k .. ", " .. v) +end +``` + +**GOOD:** +```lua +for i=1, #myArray do + print(i .. ", " .. myArray[i]) +end +``` + +## Maintain your own array size variable + +There is a significant performance difference for large arrays as #array is an O(n) operation. Note that sometimes iterating through the entire array to find the size is preferable, but a common pattern of starting with an empty array and populating it in a loop should use an array size variable. + +**BAD:** +```lua +for i = 1, 100 do + myArray[#myArray+1] = i +end +``` + +**GOOD:** +```lua +local myArraySize = 0 +for i = 1, 100 do + myArraySize += 1 + myArray[myArraySize] = i +end +``` diff --git a/.agents/skills/lua-basics/variables.md b/.agents/skills/lua-basics/variables.md new file mode 100644 index 0000000..31e1c46 --- /dev/null +++ b/.agents/skills/lua-basics/variables.md @@ -0,0 +1,58 @@ +# Variables + +## Naming + +### Name constants using ALL_CAPS + +```lua +local MY_CONSTANT = "constant value" +MY_GLOBAL_CONSTANT = "another constant value" +``` + +### camelCase non-constant local variable names + +```lua +local myVariable = "variable value" +``` + +### PascalCase non-constant global variable names + +```lua +MyGlobalVariable = "global variable value" +``` + +### Use underscore "_" as the name of a variable that cannot be deleted but is unused + +```lua +local function printValues(map) + for _, v in pairs(map) do + print(v) + end +end +``` + +### Enums Vs Booleans + +Enums should be used to reflect the state of something when more than two options exist. A common anti-pattern is using multiple booleans to reflect the state. This is confusing and problematic, because the code then needs to defend against impossible states, as the combination of booleans is able to represent more states than is desired. It also makes the code more opaque and harder to reason about. What does it mean if isWalking and isRunning are both false? That we don't know? Is the state idle? Or maybe swimming? + +**BAD:** +```lua +local isWalking = false +local isRunning = false +``` + +**GOOD:** +```lua +local MOVEMENT = { + UNKNOWN = 1, + WALKING = 2, + RUNNING = 3 +} +local movementState = MOVEMENT.UNKNOWN +``` + +Representing the state in an enum this way also makes it easier to modify in the future to add more states. Such as idle, swimming, flying, falling, etc. Adding an UNKNOWN field is useful when the enum isn't exhaustive, as a catch all to represent any other state. + +## Location + +Local variables within a function should be declared as close as possible to the place where they are used. This limits what the developer must keep in their head while reading the code. Local variables declared outside of a function should be declared at the top of the file, grouped together. Global variables should be declared at the top of the file grouped together. client/server global variables should only be declared within a single client/server file. This helps keep things organized instead of spreading random globals around the resource. diff --git a/.agents/skills/oxlib/SKILL.md b/.agents/skills/oxlib/SKILL.md new file mode 100644 index 0000000..fddbf33 --- /dev/null +++ b/.agents/skills/oxlib/SKILL.md @@ -0,0 +1,45 @@ +--- +name: oxlib +description: "Ox Lib for FiveM - UI (notify, alert, input, menu, progress), callbacks client-server, addCommand, zones (poly/box/sphere), keybinds, shared utilities. Use when writing resources that need ox_lib or when the user mentions notifications, dialogs, menus, zones/areas, or client-server communication." +author: germanfndez +version: "1.0.0" +mcp-server: projecthub +--- + +# Ox Lib + +Standalone library for FiveM: reusable UI, callbacks, commands, and shared modules. Used by many Ox resources (ox_inventory, ox_target, etc.). Always prefer ox_lib over custom NUI or legacy patterns when the user wants notifications, dialogs, menus, or client-server calls. + +## When to use + +- User asks for notifications, alert dialogs, input dialogs, menus, progress bars, or TextUI. +- Client needs to call server (or server calls client): use `lib.callback` / `lib.callback.await` and `lib.callback.register`. +- Registering server commands with help and params: use `lib.addCommand`. +- Keybinds, context menus, skill checks, locales, or shared helpers (lib.table, lib.string, etc.). +- **Zones**: “when player enters/leaves area”, “is player inside” — use `lib.zones.poly`, `lib.zones.box`, `lib.zones.sphere` (prefer client; server has limited support for onEnter/onExit/inside). + +## Setup + +- In `fxmanifest.lua`: `shared_scripts { '@ox_lib/init.lua' }`. Optional: `ox_libs { 'locale', 'callback', ... }` to preload modules. + +## Rules + +Read the rule that matches what you're doing: + +- **rules/init.md** — Adding ox_lib to fxmanifest, shared_script, ox_libs. +- **rules/callback.md** — Client↔server: `lib.callback`, `lib.callback.await`, `lib.callback.register`. +- **rules/interface.md** — UI: `lib.notify`, `lib.alertDialog`, `lib.inputDialog`; icons (Font Awesome 6). +- **rules/addCommand.md** — Server commands: `lib.addCommand` with help, params, restricted. +- **rules/zones.md** — Zones: `lib.zones.poly`, `lib.zones.box`, `lib.zones.sphere`; onEnter, onExit, inside; remove, contains, setDebug. + +## References (look up if not covered in the rules above) + +If something isn't covered in the rules above, check the official docs: + +- **Ox Lib (index):** https://coxdocs.dev/ox_lib +- **Interface (notify, alert, input, menu, progress, textui):** https://coxdocs.dev/ox_lib/Modules/Interface +- **Callback (client/server):** https://coxdocs.dev/ox_lib/Modules/Callback/Lua/Server and …/Client +- **AddCommand:** https://coxdocs.dev/ox_lib/Modules/AddCommand/Server +- **Zones:** https://coxdocs.dev/ox_lib/Modules/Zones/Shared +- **AddKeybind:** https://coxdocs.dev/ox_lib/Modules/AddKeybind/Client +- **Locale, Table, String, Math, etc.:** navigate from https://coxdocs.dev/ox_lib diff --git a/.agents/skills/oxlib/addCommand.md b/.agents/skills/oxlib/addCommand.md new file mode 100644 index 0000000..30e5741 --- /dev/null +++ b/.agents/skills/oxlib/addCommand.md @@ -0,0 +1,30 @@ +# addCommand — Server commands with validation and suggestions + +Use `lib.addCommand` (server-side) to register commands with help text, parameter validation, and optional permission (restricted). Prefer over raw `RegisterCommand` when you want typed args and chat suggestions. + +```lua +lib.addCommand('giveitem', { + help = 'Give an item to a player', + restricted = 'group.admin', -- or true (ace only) or array of permissions + params = { + { name = 'target', type = 'playerId', help = 'Target player server id' }, + { name = 'item', type = 'string', help = 'Item name' }, + { name = 'count', type = 'number', help = 'Amount', optional = true }, + }, +}, function(source, args, raw) + local target = args.target + local item = args.item + local count = args.count or 1 + -- ... +end) +``` + +**Param types:** `'number'`, `'playerId'`, `'string'`, `'longString'`. Use `optional = true` for optional params. + +**Multiple names for the same command:** + +```lua +lib.addCommand({'giveitem', 'gi'}, { help = '...', params = { ... } }, cb) +``` + +Docs: [AddCommand (Server) – coxdocs.dev](https://coxdocs.dev/ox_lib/Modules/AddCommand/Server). diff --git a/.agents/skills/oxlib/callback.md b/.agents/skills/oxlib/callback.md new file mode 100644 index 0000000..f94015a --- /dev/null +++ b/.agents/skills/oxlib/callback.md @@ -0,0 +1,61 @@ +# callback — Client ↔ Server communication + +Use `lib.callback` for request/response between client and server. Prefer this over TriggerServerCallback/RegisterNetCallback patterns. + +## Server: register a callback (handle client requests) + +```lua +-- Server: register handler. First arg is source (player id), then any args sent by client. +lib.callback.register('myresource:getData', function(source, key) + local value = GetStoredValue(key) + return value +end) +``` + +## Client: call server (callback style) + +```lua +lib.callback('myresource:getData', false, function(value) + if value then + print(value) + end +end, 'someKey') +``` + +Second argument is `delay` (number or `false`): cooldown in ms before the callback can be triggered again; use `false` for no limit. + +## Client: call server (await — yields until response) + +```lua +local value = lib.callback.await('myresource:getData', false, 'someKey') +if value then + print(value) +end +``` + +## Server: call client + +```lua +-- Server: trigger client callback +lib.callback('ox:getNearbyVehicles', source, function(vehicles) + for i = 1, #vehicles do + -- use vehicles[i] + end +end, radius) +``` + +```lua +-- Server: await client response +local vehicles = lib.callback.await('ox:getNearbyVehicles', source, radius) +``` + +## Client: register a callback (handle server requests) + +```lua +lib.callback.register('ox:getNearbyVehicles', function(radius) + local coords = GetEntityCoords(cache.ped) + return lib.getNearbyVehicles(coords, radius, true) +end) +``` + +Use a unique name (e.g. `resourcename:action`) to avoid clashes. Full docs: [Callback – coxdocs.dev](https://coxdocs.dev/ox_lib/Modules/Callback/Lua/Server) and [Client](https://coxdocs.dev/ox_lib/Modules/Callback/Lua/Client). diff --git a/.agents/skills/oxlib/init.md b/.agents/skills/oxlib/init.md new file mode 100644 index 0000000..e808b60 --- /dev/null +++ b/.agents/skills/oxlib/init.md @@ -0,0 +1,34 @@ +# init — Adding ox_lib to a resource + +Add ox_lib as a shared script so `lib` (and optionally `cache`, `require`) are available in client and server. + +**fxmanifest.lua** + +```lua +fx_version 'cerulean' +game 'gta5' + +shared_scripts { + '@ox_lib/init.lua', +} +-- Or if it's the only shared script: +-- shared_script '@ox_lib/init.lua' + +client_scripts { 'client.lua' } +server_scripts { 'server.lua' } +``` + +Optional: preload specific modules so they are available without `lib.require()`: + +```lua +ox_libs { + 'locale', + 'callback', + 'math', + 'table', +} +``` + +Modules can also be loaded dynamically with `lib.require('callback')` or by calling `lib.callback`, `lib.notify`, etc. (ox_lib loads them on first use). + +Ensure the resource `ox_lib` is started before your resource (e.g. in server.cfg or `ensure ox_lib`). diff --git a/.agents/skills/oxlib/interface.md b/.agents/skills/oxlib/interface.md new file mode 100644 index 0000000..9b357f5 --- /dev/null +++ b/.agents/skills/oxlib/interface.md @@ -0,0 +1,60 @@ +# interface — Notifications, alert dialog, input dialog + +The UI is shown on the **client** (player screen). You can invoke these functions from **client** or from **server**: from server, trigger the client (e.g. `TriggerClientEvent`) so the client runs `lib.notify` / `lib.alertDialog` / etc., or use ox_lib’s server-side exports when available (e.g. to send a notification to a specific player). Icons use Font Awesome 6; default type is `solid`. For brand icons use a table: `icon = {'fab', 'apple'}`. + +## lib.notify — Notifications + +```lua +lib.notify({ + title = 'Title', + description = 'Description (markdown supported)', + type = 'success', -- 'inform' | 'error' | 'success' | 'warning' + duration = 3000, + position = 'top-right', + icon = 'check', +}) +``` + +Optional: `id` (string) for a unique notification so it only shows once when spammed; `iconColor`, `style`, `sound`, etc. See [Notifications](https://coxdocs.dev/ox_lib/Modules/Interface/Client/notify). + +## lib.alertDialog — Simple alert / confirm + +Returns `'confirm'` or `'cancel'` (or `nil` if closed). Call from client, or from server by triggering the client. + +```lua +local result = lib.alertDialog({ + header = 'Title', + content = 'Body with **markdown** support.', + centered = true, + cancel = true, + labels = { cancel = 'Cancel', confirm = 'OK' }, +}) +if result == 'confirm' then + -- player pressed OK +end +``` + +## lib.inputDialog — Form inputs + +Takes a heading, rows (array of field definitions), and optional options. Returns a table (array) of values by index, or `nil` if cancelled. Call from client, or from server by triggering the client. + +```lua +local input = lib.inputDialog('Dialog title', { + { type = 'input', label = 'Name', placeholder = 'Your name', required = true }, + { type = 'number', label = 'Amount', min = 1, max = 100, default = 1 }, + { type = 'checkbox', label = 'Accept' }, +}) +if not input then return end +local name, amount, accepted = input[1], input[2], input[3] +``` + +Row types: `input`, `number`, `checkbox`, `select`, `multi-select`, `slider`, `color`, `date`, `time`, `textarea`. See [Input Dialog](https://coxdocs.dev/ox_lib/Modules/Interface/Client/input). + +## Other UI + +- **lib.progress** — progress bar with duration/cancel. +- **lib.showTextUI** / **lib.hideTextUI** — TextUI. +- **lib.context** — context menu. +- **lib.menu** — list menu. + +Full list: [Interface – coxdocs.dev](https://coxdocs.dev/ox_lib/Modules/Interface). diff --git a/.agents/skills/oxlib/zones.md b/.agents/skills/oxlib/zones.md new file mode 100644 index 0000000..ea04876 --- /dev/null +++ b/.agents/skills/oxlib/zones.md @@ -0,0 +1,68 @@ +# zones — Poly, box, and sphere zones (lib.zones) + +Faster alternative to PolyZone. Use for “when player enters/leaves area” or “is player inside area”. **Note:** Server-side zones have limited support: `onEnter`, `onExit`, and `inside` do not work on server; use client for full behavior. + +Reference: [Zones (Shared) – coxdocs.dev](https://coxdocs.dev/ox_lib/Modules/Zones/Shared). + +## lib.zones.poly — Polygon zone + +`points` = array of `vector3` defining the polygon; `thickness` = height (default `4`). + +```lua +local zone = lib.zones.poly({ + points = { + vec3(413.8, -1026.1, 29), + vec3(411.6, -1023.1, 29), + vec3(412.2, -1018.0, 29), + -- ... + }, + thickness = 2, + onEnter = function(self) print('entered', self.id) end, + onExit = function(self) print('exited', self.id) end, + inside = function(self) end, -- called every frame while inside + debug = true, +}) +``` + +## lib.zones.box — Box zone + +```lua +local zone = lib.zones.box({ + coords = vec3(442.5, -1017.6, 28.65), + size = vec3(2, 2, 2), -- default vec3(2, 2, 2) + rotation = 45, -- degrees, default 0 + onEnter = onEnter, + onExit = onExit, + inside = inside, + debug = true, +}) +``` + +## lib.zones.sphere — Sphere zone + +```lua +local zone = lib.zones.sphere({ + coords = vec3(442.5, -1017.6, 28.65), + radius = 2, -- default 2 + onEnter = onEnter, + onExit = onExit, + inside = inside, + debug = true, +}) +``` + +## Methods + +- **zone:remove()** — Removes the zone (data table can be reused later, e.g. with `lib.zones.poly(zone)`). +- **zone:contains(point)** — Returns `boolean` if `point` (vec3) is inside the zone. +- **zone:setDebug(true|false)** — Toggle debug draw; optional second arg: `vec4(r, g, b, a)` for color. + +## Utilities + +- **lib.zones.getAllZones()** — All registered zones. +- **lib.zones.getCurrentZones()** — Zones the player is currently inside (client). +- **lib.zones.getNearbyZones()** — Zones near the player (client). + +## Creating zones in-game + +Use the built-in zone creator: `/zone poly`, `/zone box`, or `/zone sphere`. Controls appear on the right; zones are saved to `ox_lib/created_zones.lua`. diff --git a/.agents/skills/oxmysql/SKILL.md b/.agents/skills/oxmysql/SKILL.md new file mode 100644 index 0000000..910ebd2 --- /dev/null +++ b/.agents/skills/oxmysql/SKILL.md @@ -0,0 +1,42 @@ +--- +name: oxmysql +description: "OxMySQL for FiveM - SQL integrations with MySQL/MariaDB. Use when writing or editing server-side database code: queries, inserts, updates, transactions, or any resource that uses oxmysql (query, insert, prepare, update, single, scalar, rawExecute, transaction)." +author: germanfndez +version: "1.0.0" +mcp-server: projecthub +--- + +# OxMySQL + +SQL integration for FiveM using OxMySQL (replacement for mysql-async / ghmattimysql). Server-side only. Use MariaDB over MySQL 8 for compatibility. + +## When to use + +- User asks for database queries, inserts, updates, or SQL in a FiveM resource. +- Editing or writing code that uses `MySQL.*` or `exports.oxmysql`. +- Designing tables, upserts, or transactions. + +## Setup +- Lua: `server_script '@oxmysql/lib/MySQL.lua'` in fxmanifest (above other scripts). + +## Rules + +Read the rule that matches what you're doing: + +- **rules/placeholders.md** — Safe parameters (`?` placeholders), avoid SQL injection. +- **rules/query.md** — `MySQL.query` / `MySQL.query.await`: SELECT returns rows; other statements return insertId/affectedRows. +- **rules/insert.md** — `MySQL.insert`: insert row, returns insert id. +- **rules/prepare.md** — `MySQL.prepare`: prepared statements, only `?` placeholders; faster for repeated queries. +- **rules/update.md** — `MySQL.update`: update rows, returns affected count. +- **rules/single.md** — `MySQL.single`: one row or nil. +- **rules/scalar.md** — `MySQL.scalar`: single value (one row, one column). +- **rules/rawExecute.md** — `MySQL.rawExecute`: raw execution, no automatic result shape. +- **rules/transaction.md** — `MySQL.transaction`: run multiple queries in a transaction. + +## References (look up if not covered in the rules above) + +If something isn't covered in the rules above, check the official docs: + +- **OxMySQL (index):** https://coxdocs.dev/oxmysql +- **Placeholders:** https://coxdocs.dev/oxmysql/placeholders +- **Functions (query, insert, prepare, update, single, scalar, rawExecute, transaction):** https://coxdocs.dev/oxmysql (Functions section) diff --git a/.agents/skills/oxmysql/insert.md b/.agents/skills/oxmysql/insert.md new file mode 100644 index 0000000..bf2eb23 --- /dev/null +++ b/.agents/skills/oxmysql/insert.md @@ -0,0 +1,26 @@ +# insert + +Inserts a row and returns the insert id (or nil/falsy on failure). + +**Lua (Promise)** + +```lua +local id = MySQL.insert.await('INSERT INTO `users` (identifier, firstname, lastname) VALUES (?, ?, ?)', { identifier, firstName, lastName }) +print(id) +``` + +**Lua (Callback)** + +```lua +MySQL.insert('INSERT INTO `users` (identifier, firstname, lastname) VALUES (?, ?, ?)', { identifier, firstName, lastName }, function(id) + print(id) +end) +``` + +**JavaScript** + +```js +const insertId = await MySQL.insert('INSERT INTO `users` (identifier, firstname, lastname) VALUES (?, ?, ?)', [identifier, firstName, lastName]); +``` + +Reference: [insert – coxdocs.dev](https://coxdocs.dev/oxmysql/Functions/insert). diff --git a/.agents/skills/oxmysql/placeholders.md b/.agents/skills/oxmysql/placeholders.md new file mode 100644 index 0000000..a094dac --- /dev/null +++ b/.agents/skills/oxmysql/placeholders.md @@ -0,0 +1,11 @@ +# Placeholders + +Use `?` for values; parameters as array or object. Prevents SQL injection. + +```lua +MySQL.scalar('SELECT `username` FROM `users` WHERE `identifier` = ? AND `group` = ?', { identifier, group }) +``` + +Named placeholders (`@name`) are deprecated; use positional `?` and pass array. For prepared statements use **rules/prepare.md** (only `?` and `??` for column names). + +Reference: [Placeholders – coxdocs.dev](https://coxdocs.dev/oxmysql/placeholders). diff --git a/.agents/skills/oxmysql/prepare.md b/.agents/skills/oxmysql/prepare.md new file mode 100644 index 0000000..729ee5f --- /dev/null +++ b/.agents/skills/oxmysql/prepare.md @@ -0,0 +1,29 @@ +# prepare + +Prepared statements: faster for repeated queries. **Only `?` (value) and `??` (column name) placeholders** — named placeholders throw. + +- Date does not return the datestring commonly used in FiveM. +- TINYINT(1) and BIT do not return boolean. +- SELECT result shape: column, row, or array of rows depending on columns/rows selected (unlike rawExecute). + +**Lua (Promise)** + +```lua +local response = MySQL.prepare.await('SELECT `firstname`, `lastname` FROM `users` WHERE `identifier` = ?', { identifier }) +``` + +**Lua (Callback)** + +```lua +MySQL.prepare('SELECT `firstname`, `lastname` FROM `users` WHERE `identifier` = ?', { identifier }, function(response) + -- use response +end) +``` + +**Upsert (insert or update on duplicate)** + +```lua +MySQL.prepare('INSERT INTO ox_inventory (owner, name, data) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE data = VALUES(data)', { owner, dbId, inventory }) +``` + +Reference: [prepare – coxdocs.dev](https://coxdocs.dev/oxmysql/Functions/prepare). diff --git a/.agents/skills/oxmysql/query.md b/.agents/skills/oxmysql/query.md new file mode 100644 index 0000000..3605b39 --- /dev/null +++ b/.agents/skills/oxmysql/query.md @@ -0,0 +1,37 @@ +# query + +SELECT returns all matching rows (array of rows). Other statements return insertId, affectedRows, etc. + +**Lua (Promise)** + +```lua +local response = MySQL.query.await('SELECT `firstname`, `lastname` FROM `users` WHERE `identifier` = ?', { identifier }) +if response then + for i = 1, #response do + local row = response[i] + print(row.firstname, row.lastname) + end +end +``` + +**Lua (Callback)** + +```lua +MySQL.query('SELECT `firstname`, `lastname` FROM `users` WHERE `identifier` = ?', { identifier }, function(response) + if response then + for i = 1, #response do + local row = response[i] + print(row.firstname, row.lastname) + end + end +end) +``` + +**JavaScript** + +```js +const rows = await MySQL.query('SELECT `firstname`, `lastname` FROM `users` WHERE `identifier` = ?', [identifier]); +// rows is array of objects +``` + +Reference: [query – coxdocs.dev](https://coxdocs.dev/oxmysql/Functions/query). diff --git a/.agents/skills/oxmysql/rawExecute.md b/.agents/skills/oxmysql/rawExecute.md new file mode 100644 index 0000000..5b2af64 --- /dev/null +++ b/.agents/skills/oxmysql/rawExecute.md @@ -0,0 +1,19 @@ +# rawExecute + +Executes raw SQL. Does not normalize result shape like query/prepare (SELECT returns raw result). Use when you need full control or non-standard result handling. + +**Lua (Promise)** + +```lua +local result = MySQL.rawExecute.await('DELETE FROM `sessions` WHERE `expires` < NOW()') +``` + +**Lua (Callback)** + +```lua +MySQL.rawExecute('DELETE FROM `sessions` WHERE `expires` < NOW()', {}, function(result) + -- raw result +end) +``` + +Prefer **query**, **insert**, **update**, **single**, **scalar**, or **prepare** when they match the use case; use rawExecute only when necessary. Reference: [rawExecute – coxdocs.dev](https://coxdocs.dev/oxmysql/Functions/rawExecute). diff --git a/.agents/skills/oxmysql/scalar.md b/.agents/skills/oxmysql/scalar.md new file mode 100644 index 0000000..010d71e --- /dev/null +++ b/.agents/skills/oxmysql/scalar.md @@ -0,0 +1,27 @@ +# scalar + +Returns a single value (one row, one column). Use for COUNT, one field, etc. + +**Lua (Promise)** + +```lua +local count = MySQL.scalar.await('SELECT COUNT(*) FROM `users` WHERE `group` = ?', { group }) +local name = MySQL.scalar.await('SELECT `username` FROM `users` WHERE `identifier` = ?', { identifier }) +``` + +**Lua (Callback)** + +```lua +MySQL.scalar('SELECT `username` FROM `users` WHERE `identifier` = ?', { identifier }, function(name) + if name then print(name) end +end) +``` + +**JavaScript** + +```js +const count = await MySQL.scalar('SELECT COUNT(*) FROM `users` WHERE `group` = ?', [group]); +const name = await MySQL.scalar('SELECT `username` FROM `users` WHERE `identifier` = ?', [identifier]); +``` + +Reference: [scalar – coxdocs.dev](https://coxdocs.dev/oxmysql/Functions/scalar). diff --git a/.agents/skills/oxmysql/single.md b/.agents/skills/oxmysql/single.md new file mode 100644 index 0000000..28c870e --- /dev/null +++ b/.agents/skills/oxmysql/single.md @@ -0,0 +1,29 @@ +# single + +Returns a single row (first match) or nil/null if none. + +**Lua (Promise)** + +```lua +local user = MySQL.single.await('SELECT * FROM `users` WHERE `identifier` = ?', { identifier }) +if user then + print(user.firstname, user.lastname) +end +``` + +**Lua (Callback)** + +```lua +MySQL.single('SELECT * FROM `users` WHERE `identifier` = ?', { identifier }, function(user) + if user then print(user.firstname) end +end) +``` + +**JavaScript** + +```js +const user = await MySQL.single('SELECT * FROM `users` WHERE `identifier` = ?', [identifier]); +// user is one object or null +``` + +Reference: [single – coxdocs.dev](https://coxdocs.dev/oxmysql/Functions/single). diff --git a/.agents/skills/oxmysql/transaction.md b/.agents/skills/oxmysql/transaction.md new file mode 100644 index 0000000..3e79eaa --- /dev/null +++ b/.agents/skills/oxmysql/transaction.md @@ -0,0 +1,35 @@ +# transaction + +Run multiple queries in a transaction. If any fails, the transaction is rolled back. + +**Lua (Promise)** + +```lua +MySQL.transaction.await({ + { query = 'UPDATE `accounts` SET `balance` = `balance` - ? WHERE `id` = ?', values = { amount, fromId } }, + { query = 'UPDATE `accounts` SET `balance` = `balance` + ? WHERE `id` = ?', values = { amount, toId } }, +}) +``` + +**Lua (Callback)** + +```lua +MySQL.transaction({ + { query = 'UPDATE `accounts` SET `balance` = `balance` - ? WHERE `id` = ?', values = { amount, fromId } }, + { query = 'UPDATE `accounts` SET `balance` = `balance` + ? WHERE `id` = ?', values = { amount, toId } }, +}, function(success) + if not success then -- rollback happened + end +end) +``` + +**JavaScript** + +```js +await MySQL.transaction([ + { query: 'UPDATE `accounts` SET `balance` = `balance` - ? WHERE `id` = ?', values: [amount, fromId] }, + { query: 'UPDATE `accounts` SET `balance` = `balance` + ? WHERE `id` = ?', values: [amount, toId] }, +]); +``` + +Reference: [transaction – coxdocs.dev](https://coxdocs.dev/oxmysql/Functions/transaction). diff --git a/.agents/skills/oxmysql/update.md b/.agents/skills/oxmysql/update.md new file mode 100644 index 0000000..f1ea186 --- /dev/null +++ b/.agents/skills/oxmysql/update.md @@ -0,0 +1,25 @@ +# update + +Updates rows; returns affected row count (or result object with affectedRows). + +**Lua (Promise)** + +```lua +local affected = MySQL.update.await('UPDATE `users` SET `lastname` = ? WHERE `identifier` = ?', { newLastName, identifier }) +``` + +**Lua (Callback)** + +```lua +MySQL.update('UPDATE `users` SET `lastname` = ? WHERE `identifier` = ?', { newLastName, identifier }, function(affected) + -- use affected +end) +``` + +**JavaScript** + +```js +const result = await MySQL.update('UPDATE `users` SET `lastname` = ? WHERE `identifier` = ?', [newLastName, identifier]); +``` + +Always use `?` placeholders for values. Reference: [update – coxdocs.dev](https://coxdocs.dev/oxmysql/Functions/update). diff --git a/.agents/skills/research/SKILL.md b/.agents/skills/research/SKILL.md new file mode 100644 index 0000000..0ba594a --- /dev/null +++ b/.agents/skills/research/SKILL.md @@ -0,0 +1,12 @@ +--- +name: research +description: Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent. +--- + +Spin up a **background agent** to do the research, so you keep working while it reads. + +Its job: + +1. Investigate the question against **primary sources** — official docs, source code, specs, first-party APIs — not a secondary write-up of them. Follow every claim back to the source that owns it. +2. Write the findings to a single Markdown file, citing each claim's source. +3. Save it where the repo already keeps such notes; match the existing convention, and if there is none, put it somewhere sensible and say where. diff --git a/.agents/skills/research/agents/openai.yaml b/.agents/skills/research/agents/openai.yaml new file mode 100644 index 0000000..e18b96c --- /dev/null +++ b/.agents/skills/research/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Research" + short_description: "Research from high-trust sources" diff --git a/.agents/skills/resolving-merge-conflicts/SKILL.md b/.agents/skills/resolving-merge-conflicts/SKILL.md new file mode 100644 index 0000000..aadb3fc --- /dev/null +++ b/.agents/skills/resolving-merge-conflicts/SKILL.md @@ -0,0 +1,14 @@ +--- +name: resolving-merge-conflicts +description: "Use when you need to resolve an in-progress git merge/rebase conflict." +--- + +1. **See the current state** of the merge/rebase. Check git history, and the conflicting files. + +2. **Find the primary sources** for each conflict. Understand deeply why each change was made, and what the original intent was. Read the commit messages, check the PRs, check original issues/tickets. + +3. **Resolve each hunk.** Preserve both intents where possible. Where incompatible, pick the one matching the merge's stated goal and note the trade-off. Do **not** invent new behaviour. Always resolve; never `--abort`. + +4. Discover the project's **automated checks** and run them — typically typecheck, then tests, then format. Fix anything the merge broke. + +5. **Finish the merge/rebase.** Stage everything and commit. If rebasing, continue the rebase process until all commits are rebased. diff --git a/.agents/skills/resolving-merge-conflicts/agents/openai.yaml b/.agents/skills/resolving-merge-conflicts/agents/openai.yaml new file mode 100644 index 0000000..331ffb9 --- /dev/null +++ b/.agents/skills/resolving-merge-conflicts/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Resolving Merge Conflicts" + short_description: "Resolve merge and rebase conflicts" diff --git a/.agents/skills/to-spec/SKILL.md b/.agents/skills/to-spec/SKILL.md new file mode 100644 index 0000000..f3cca8d --- /dev/null +++ b/.agents/skills/to-spec/SKILL.md @@ -0,0 +1,75 @@ +--- +name: to-spec +description: Turn the current conversation into a spec and publish it to the project issue tracker — no interview, just synthesis of what you've already discussed. +disable-model-invocation: true +--- + +This skill takes the current conversation context and codebase understanding and produces a spec (you may know this document as a PRD). Do NOT interview the user — just synthesize what you already know. + +The issue tracker and triage label vocabulary should have been provided to you — run `/setup-matt-pocock-skills` if not. + +## Process + +1. Explore the repo to understand the current state of the codebase, if you haven't already. Use the project's domain glossary vocabulary throughout the spec, and respect any ADRs in the area you're touching. + +2. Sketch out the seams at which you're going to test the feature. Existing seams should be preferred to new ones. Use the highest seam possible. If new seams are needed, propose them at the highest point you can. The fewer seams across the codebase, the better - the ideal number is one. + +Check with the user that these seams match their expectations. + +3. Write the spec using the template below, then publish it to the project issue tracker. Apply the `ready-for-agent` triage label - no need for additional triage. + + + +## Problem Statement + +The problem that the user is facing, from the user's perspective. + +## Solution + +The solution to the problem, from the user's perspective. + +## User Stories + +A LONG, numbered list of user stories. Each user story should be in the format of: + +1. As an , I want a , so that + + +1. As a mobile bank customer, I want to see balance on my accounts, so that I can make better informed decisions about my spending + + +This list of user stories should be extremely extensive and cover all aspects of the feature. + +## Implementation Decisions + +A list of implementation decisions that were made. This can include: + +- The modules that will be built/modified +- The interfaces of those modules that will be modified +- Technical clarifications from the developer +- Architectural decisions +- Schema changes +- API contracts +- Specific interactions + +Do NOT include specific file paths or code snippets. They may end up being outdated very quickly. + +Exception: if a prototype produced a snippet that encodes a decision more precisely than prose can (state machine, reducer, schema, type shape), inline it within the relevant decision and note briefly that it came from a prototype. Trim to the decision-rich parts — not a working demo, just the important bits. + +## Testing Decisions + +A list of testing decisions that were made. Include: + +- A description of what makes a good test (only test external behavior, not implementation details) +- Which modules will be tested +- Prior art for the tests (i.e. similar types of tests in the codebase) + +## Out of Scope + +A description of the things that are out of scope for this spec. + +## Further Notes + +Any further notes about the feature. + + diff --git a/.agents/skills/to-spec/agents/openai.yaml b/.agents/skills/to-spec/agents/openai.yaml new file mode 100644 index 0000000..549e6f7 --- /dev/null +++ b/.agents/skills/to-spec/agents/openai.yaml @@ -0,0 +1,5 @@ +interface: + display_name: "To Spec" + short_description: "Turn a conversation into a spec" +policy: + allow_implicit_invocation: false diff --git a/frontend/pnpm-workspace.yaml b/frontend/pnpm-workspace.yaml index c6f4a1e..09a02ca 100644 --- a/frontend/pnpm-workspace.yaml +++ b/frontend/pnpm-workspace.yaml @@ -1,3 +1,4 @@ +allowBuilds: + esbuild: true onlyBuiltDependencies: - esbuild - From bbf4e69edc855e966170ab902b6afe8ca976b5d1 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:23:29 +0200 Subject: [PATCH 002/103] ADD - add Snake and Memory phone games --- frontend/src/App.vue | 3 + frontend/src/assets/img/app-icons/memory.webp | Bin 0 -> 21116 bytes frontend/src/assets/img/app-icons/snake.webp | Bin 0 -> 7398 bytes frontend/src/config/apps.test.ts | 12 + frontend/src/config/apps.ts | 30 + frontend/src/features/games/memory/audio.ts | 56 ++ .../src/features/games/memory/engine.test.ts | 74 ++ frontend/src/features/games/memory/engine.ts | 114 +++ frontend/src/features/games/memory/store.ts | 113 +++ frontend/src/features/games/memory/types.ts | 25 + .../src/features/games/snake/engine.test.ts | 76 ++ frontend/src/features/games/snake/engine.ts | 118 ++++ frontend/src/features/games/snake/store.ts | 84 +++ frontend/src/features/games/snake/types.ts | 19 + frontend/src/features/games/store.ts | 24 + frontend/src/stores/phone.ts | 46 ++ frontend/src/types/apps.ts | 2 + frontend/src/utils/preferences.ts | 2 + frontend/src/views/apps/MemoryApp.vue | 588 +++++++++++++++ frontend/src/views/apps/SnakeApp.vue | 667 ++++++++++++++++++ sky_phone/config/locales/en.lua | 18 + sky_phone/source/html/index.html | 4 +- sky_phone/source/server/phone.lua | 1 + 23 files changed, 2074 insertions(+), 2 deletions(-) create mode 100644 frontend/src/assets/img/app-icons/memory.webp create mode 100644 frontend/src/assets/img/app-icons/snake.webp create mode 100644 frontend/src/features/games/memory/audio.ts create mode 100644 frontend/src/features/games/memory/engine.test.ts create mode 100644 frontend/src/features/games/memory/engine.ts create mode 100644 frontend/src/features/games/memory/store.ts create mode 100644 frontend/src/features/games/memory/types.ts create mode 100644 frontend/src/features/games/snake/engine.test.ts create mode 100644 frontend/src/features/games/snake/engine.ts create mode 100644 frontend/src/features/games/snake/store.ts create mode 100644 frontend/src/features/games/snake/types.ts create mode 100644 frontend/src/features/games/store.ts create mode 100644 frontend/src/views/apps/MemoryApp.vue create mode 100644 frontend/src/views/apps/SnakeApp.vue diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 3648726..c7ea800 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -20,6 +20,7 @@ import SimPhonePicker, { } from '@/components/SimPhonePicker.vue' import { PHONE_FRAME_IMAGES } from '@/config/appearance' import { useClockStore } from '@/stores/clock' +import { useGamesStore } from '@/features/games/store' import { useCallsStore } from '@/stores/calls' import { useAccountStore } from '@/stores/account' import { useMailStore } from '@/stores/mail' @@ -66,6 +67,7 @@ const isDevelopment = import.meta.env.DEV const phone = usePhoneStore() const account = useAccountStore() const clock = useClockStore() +const games = useGamesStore() const calls = useCallsStore() const mail = useMailStore() const media = useMediaStore() @@ -106,6 +108,7 @@ function hydratePhone(payload: PhoneOpenPayload): void { account.hydrate(payload.account ?? null) notes.hydrate(payload.notes ?? []) clock.hydrate(payload.device?.data.alarms?.payload) + games.hydrate(payload.device?.data.games?.payload) media.hydrate(payload.device?.data.media?.payload) void mail.bootstrap(payload.account?.email ?? '') void calls.bootstrap() diff --git a/frontend/src/assets/img/app-icons/memory.webp b/frontend/src/assets/img/app-icons/memory.webp new file mode 100644 index 0000000000000000000000000000000000000000..c1ff6a6bb0181bf4804ae0fd7eefefa865e482bf GIT binary patch literal 21116 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 TJ&Mjuj|?VaPA01!Za@G4f7FJF literal 0 HcmV?d00001 diff --git a/frontend/src/assets/img/app-icons/snake.webp b/frontend/src/assets/img/app-icons/snake.webp new file mode 100644 index 0000000000000000000000000000000000000000..f6605adac0548d86b348e162fe9ffead96a84501 GIT binary patch literal 7398 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 { labelKey: 'Apps.weather.name', route: '/apps/weather', }) + expect(PHONE_APPS.find((app) => app.id === 'snake')).toMatchObject({ + dockOrder: null, + gridOrder: 11, + labelKey: 'Apps.snake.name', + route: '/apps/snake', + }) + expect(PHONE_APPS.find((app) => app.id === 'memory')).toMatchObject({ + dockOrder: null, + gridOrder: 12, + labelKey: 'Apps.memory.name', + route: '/apps/memory', + }) expect( PHONE_APPS.filter((app) => app.dockOrder !== null) .sort((a, b) => (a.dockOrder ?? 0) - (b.dockOrder ?? 0)) diff --git a/frontend/src/config/apps.ts b/frontend/src/config/apps.ts index 07fd30c..683315a 100644 --- a/frontend/src/config/apps.ts +++ b/frontend/src/config/apps.ts @@ -2,6 +2,8 @@ import { Calculator, Camera, Clock3, + Gamepad2, + Brain, Images, Mail, MapPinned, @@ -23,6 +25,8 @@ import notesIcon from '@/assets/img/app-icons/notes.webp' import photosIcon from '@/assets/img/app-icons/gallery.webp' import phoneIcon from '@/assets/img/app-icons/phone.webp' import settingsIcon from '@/assets/img/app-icons/settings.webp' +import snakeIcon from '@/assets/img/app-icons/snake.webp' +import memoryIcon from '@/assets/img/app-icons/memory.webp' import weatherIcon from '@/assets/img/app-icons/weather.webp' import type { PhoneAppDefinition, PhoneAppId } from '@/types/apps' @@ -170,6 +174,32 @@ export const PHONE_APPS: PhoneAppDefinition[] = [ labelKey: 'Apps.settings.name', route: '/apps/settings', }, + { + component: markRaw( + defineAsyncComponent(() => import('@/views/apps/SnakeApp.vue')), + ), + dockOrder: null, + gridOrder: 11, + icon: markRaw(Gamepad2), + iconClass: 'app-icon--snake', + iconImage: snakeIcon, + id: 'snake', + labelKey: 'Apps.snake.name', + route: '/apps/snake', + }, + { + component: markRaw( + defineAsyncComponent(() => import('@/views/apps/MemoryApp.vue')), + ), + dockOrder: null, + gridOrder: 12, + icon: markRaw(Brain), + iconClass: 'app-icon--memory', + iconImage: memoryIcon, + id: 'memory', + labelKey: 'Apps.memory.name', + route: '/apps/memory', + }, ] export const PHONE_APP_IDS = PHONE_APPS.map((app) => app.id) diff --git a/frontend/src/features/games/memory/audio.ts b/frontend/src/features/games/memory/audio.ts new file mode 100644 index 0000000..70a1e50 --- /dev/null +++ b/frontend/src/features/games/memory/audio.ts @@ -0,0 +1,56 @@ +export type MemorySound = 'flip' | 'match' | 'mismatch' | 'win' + +type Tone = { + duration: number + frequency: number + offset: number + type: OscillatorType + volume: number +} + +const sounds: Record = { + flip: [ + { duration: 0.055, frequency: 520, offset: 0, type: 'sine', volume: 0.07 }, + ], + match: [ + { duration: 0.11, frequency: 660, offset: 0, type: 'sine', volume: 0.09 }, + { duration: 0.16, frequency: 880, offset: 0.09, type: 'sine', volume: 0.1 }, + ], + mismatch: [ + { duration: 0.1, frequency: 210, offset: 0, type: 'triangle', volume: 0.07 }, + { duration: 0.14, frequency: 150, offset: 0.08, type: 'triangle', volume: 0.065 }, + ], + win: [ + { duration: 0.16, frequency: 523.25, offset: 0, type: 'sine', volume: 0.085 }, + { duration: 0.16, frequency: 659.25, offset: 0.1, type: 'sine', volume: 0.09 }, + { duration: 0.16, frequency: 783.99, offset: 0.2, type: 'sine', volume: 0.095 }, + { duration: 0.28, frequency: 1046.5, offset: 0.3, type: 'sine', volume: 0.1 }, + ], +} + +let audioContext: AudioContext | undefined + +export function playMemorySound(sound: MemorySound, enabled: boolean): void { + if (!enabled) return + + audioContext ??= new AudioContext() + if (audioContext.state === 'suspended') void audioContext.resume() + + const now = audioContext.currentTime + for (const tone of sounds[sound]) { + const oscillator = audioContext.createOscillator() + const gain = audioContext.createGain() + const start = now + tone.offset + const end = start + tone.duration + + oscillator.type = tone.type + oscillator.frequency.setValueAtTime(tone.frequency, start) + gain.gain.setValueAtTime(0.0001, start) + gain.gain.exponentialRampToValueAtTime(tone.volume, start + 0.012) + gain.gain.exponentialRampToValueAtTime(0.0001, end) + oscillator.connect(gain) + gain.connect(audioContext.destination) + oscillator.start(start) + oscillator.stop(end) + } +} diff --git a/frontend/src/features/games/memory/engine.test.ts b/frontend/src/features/games/memory/engine.test.ts new file mode 100644 index 0000000..899d1a5 --- /dev/null +++ b/frontend/src/features/games/memory/engine.test.ts @@ -0,0 +1,74 @@ +import { describe, expect, it } from 'vitest' + +import { + createMemoryGame, + flipMemoryCard, + MEMORY_PAIR_COUNTS, + resolveMemoryMismatch, +} from './engine' + +describe('Memory engine', () => { + it.each(['small', 'medium', 'large'] as const)( + 'creates exactly two cards per symbol for %s', + (difficulty) => { + const game = createMemoryGame(difficulty, () => 0.5) + const counts = game.cards.reduce>((result, card) => { + result[card.symbol] = (result[card.symbol] ?? 0) + 1 + return result + }, {}) + + expect(game.cards).toHaveLength(MEMORY_PAIR_COUNTS[difficulty] * 2) + expect(Object.values(counts).every((count) => count === 2)).toBe(true) + }, + ) + + it('does not count the same card twice', () => { + const game = createMemoryGame('small', () => 0) + const once = flipMemoryCard(game, game.cards[0].id) + + expect(flipMemoryCard(once, game.cards[0].id)).toBe(once) + expect(once.moves).toBe(0) + }) + + it('matches equal cards and counts one move', () => { + const game = createMemoryGame('small', () => 0) + const pair = game.cards.filter((card) => card.symbol === game.cards[0].symbol) + const first = flipMemoryCard(game, pair[0].id) + const second = flipMemoryCard(first, pair[1].id) + + expect(second.moves).toBe(1) + expect(second.matchedPairs).toBe(1) + expect(second.selectedIds).toEqual([]) + expect(second.cards.filter((card) => card.state === 'matched')).toHaveLength(2) + }) + + it('blocks a third card until a mismatch is resolved', () => { + const game = createMemoryGame('small', () => 0) + const firstCard = game.cards[0] + const secondCard = game.cards.find((card) => card.symbol !== firstCard.symbol)! + const thirdCard = game.cards.find( + (card) => card.symbol !== firstCard.symbol && card.id !== secondCard.id, + )! + const first = flipMemoryCard(game, firstCard.id) + const mismatch = flipMemoryCard(first, secondCard.id) + + expect(mismatch.status).toBe('resolving') + expect(flipMemoryCard(mismatch, thirdCard.id)).toBe(mismatch) + expect(resolveMemoryMismatch(mismatch).selectedIds).toEqual([]) + }) + + it('marks the completed round as won exactly on the final pair', () => { + let game = createMemoryGame('small', () => 0) + const symbols = [...new Set(game.cards.map((card) => card.symbol))] + + for (const symbol of symbols) { + const pair = game.cards.filter((card) => card.symbol === symbol) + game = flipMemoryCard(game, pair[0].id) + game = flipMemoryCard(game, pair[1].id) + } + + expect(game.status).toBe('won') + expect(game.moves).toBe(MEMORY_PAIR_COUNTS.small) + expect(flipMemoryCard(game, game.cards[0].id)).toBe(game) + }) +}) diff --git a/frontend/src/features/games/memory/engine.ts b/frontend/src/features/games/memory/engine.ts new file mode 100644 index 0000000..ffc10fe --- /dev/null +++ b/frontend/src/features/games/memory/engine.ts @@ -0,0 +1,114 @@ +import type { + MemoryCard, + MemoryDifficulty, + MemoryGameState, +} from './types' + +export const MEMORY_PAIR_COUNTS: Record = { + small: 6, + medium: 8, + large: 10, +} + +const MEMORY_SYMBOLS = [ + 'star', + 'heart', + 'moon', + 'sun', + 'cloud', + 'bolt', + 'diamond', + 'circle', + 'triangle', + 'flower', +] + +function shuffleCards(cards: MemoryCard[], random: () => number): MemoryCard[] { + const shuffled = [...cards] + + for (let index = shuffled.length - 1; index > 0; index -= 1) { + const target = Math.min(index, Math.floor(Math.max(0, random()) * (index + 1))) + const current = shuffled[index] + shuffled[index] = shuffled[target] + shuffled[target] = current + } + + return shuffled +} + +export function createMemoryGame( + difficulty: MemoryDifficulty, + random: () => number = Math.random, +): MemoryGameState { + const symbols = MEMORY_SYMBOLS.slice(0, MEMORY_PAIR_COUNTS[difficulty]) + const cards = symbols.flatMap((symbol) => [ + { id: `${symbol}-a`, state: 'hidden' as const, symbol }, + { id: `${symbol}-b`, state: 'hidden' as const, symbol }, + ]) + + return { + cards: shuffleCards(cards, random), + difficulty, + matchedPairs: 0, + moves: 0, + selectedIds: [], + status: 'playing', + } +} + +export function flipMemoryCard( + state: MemoryGameState, + cardId: string, +): MemoryGameState { + if (state.status !== 'playing') return state + + const selected = state.cards.find((card) => card.id === cardId) + if (!selected || selected.state !== 'hidden') return state + + const cards = state.cards.map((card) => + card.id === cardId ? { ...card, state: 'revealed' as const } : card, + ) + const selectedIds = [...state.selectedIds, cardId] + if (selectedIds.length === 1) return { ...state, cards, selectedIds } + + const first = cards.find((card) => card.id === selectedIds[0]) + const second = cards.find((card) => card.id === selectedIds[1]) + const moves = state.moves + 1 + + if (first?.symbol === second?.symbol) { + const matchedCards = cards.map((card) => + selectedIds.includes(card.id) + ? { ...card, state: 'matched' as const } + : card, + ) + const matchedPairs = state.matchedPairs + 1 + return { + ...state, + cards: matchedCards, + matchedPairs, + moves, + selectedIds: [], + status: + matchedPairs === MEMORY_PAIR_COUNTS[state.difficulty] + ? 'won' + : 'playing', + } + } + + return { ...state, cards, moves, selectedIds, status: 'resolving' } +} + +export function resolveMemoryMismatch(state: MemoryGameState): MemoryGameState { + if (state.status !== 'resolving') return state + + return { + ...state, + cards: state.cards.map((card) => + state.selectedIds.includes(card.id) + ? { ...card, state: 'hidden' as const } + : card, + ), + selectedIds: [], + status: 'playing', + } +} diff --git a/frontend/src/features/games/memory/store.ts b/frontend/src/features/games/memory/store.ts new file mode 100644 index 0000000..3324d83 --- /dev/null +++ b/frontend/src/features/games/memory/store.ts @@ -0,0 +1,113 @@ +import { defineStore } from 'pinia' + +import { useGamesStore } from '@/features/games/store' + +import { + createMemoryGame, + flipMemoryCard, + resolveMemoryMismatch, +} from './engine' +import type { + MemoryBest, + MemoryDifficulty, + MemoryGameState, +} from './types' + +type MemorySave = { + best: Partial> + soundEnabled: boolean +} + +function isMemoryBest(value: unknown): value is MemoryBest { + if (!value || typeof value !== 'object') return false + const best = value as Partial + return ( + typeof best.moves === 'number' && + best.moves > 0 && + typeof best.timeMs === 'number' && + best.timeMs >= 0 + ) +} + +export const useMemoryStore = defineStore('memory', { + state: () => ({ + best: {} as Partial>, + elapsedMs: 0, + game: null as MemoryGameState | null, + hydrated: false, + soundEnabled: true, + startedAt: null as number | null, + }), + actions: { + hydrate(): void { + if (this.hydrated) return + + const saved = useGamesStore().readGame>('memory') + for (const difficulty of ['small', 'medium', 'large'] as const) { + const candidate = saved?.best?.[difficulty] + if (isMemoryBest(candidate)) this.best[difficulty] = candidate + } + if (typeof saved?.soundEnabled === 'boolean') { + this.soundEnabled = saved.soundEnabled + } + this.hydrated = true + }, + persist(): void { + useGamesStore().saveGame('memory', { + best: this.best, + soundEnabled: this.soundEnabled, + } satisfies MemorySave) + }, + setSoundEnabled(enabled: boolean): void { + this.soundEnabled = enabled + this.persist() + }, + start(difficulty: MemoryDifficulty): void { + this.game = createMemoryGame(difficulty) + this.elapsedMs = 0 + this.startedAt = Date.now() + }, + updateElapsed(now = Date.now()): void { + if (this.startedAt === null) return + this.elapsedMs += now - this.startedAt + this.startedAt = now + }, + pause(): void { + this.updateElapsed() + this.startedAt = null + }, + resume(): void { + if (this.game?.status === 'playing' && this.startedAt === null) { + this.startedAt = Date.now() + } + }, + flip(cardId: string): void { + if (!this.game) return + + const previousStatus = this.game.status + this.game = flipMemoryCard(this.game, cardId) + if (previousStatus !== 'won' && this.game.status === 'won') { + this.updateElapsed() + this.startedAt = null + const result = { moves: this.game.moves, timeMs: this.elapsedMs } + const current = this.best[this.game.difficulty] + if ( + !current || + result.moves < current.moves || + (result.moves === current.moves && result.timeMs < current.timeMs) + ) { + this.best[this.game.difficulty] = result + this.persist() + } + } + }, + resolveMismatch(): void { + if (this.game) this.game = resolveMemoryMismatch(this.game) + }, + showMenu(): void { + this.pause() + this.game = null + this.elapsedMs = 0 + }, + }, +}) diff --git a/frontend/src/features/games/memory/types.ts b/frontend/src/features/games/memory/types.ts new file mode 100644 index 0000000..092c265 --- /dev/null +++ b/frontend/src/features/games/memory/types.ts @@ -0,0 +1,25 @@ +export type MemoryDifficulty = 'small' | 'medium' | 'large' + +export type MemoryCardState = 'hidden' | 'revealed' | 'matched' + +export type MemoryCard = { + id: string + state: MemoryCardState + symbol: string +} + +export type MemoryGameStatus = 'playing' | 'resolving' | 'won' + +export type MemoryGameState = { + cards: MemoryCard[] + difficulty: MemoryDifficulty + matchedPairs: number + moves: number + selectedIds: string[] + status: MemoryGameStatus +} + +export type MemoryBest = { + moves: number + timeMs: number +} diff --git a/frontend/src/features/games/snake/engine.test.ts b/frontend/src/features/games/snake/engine.test.ts new file mode 100644 index 0000000..5bfd8ff --- /dev/null +++ b/frontend/src/features/games/snake/engine.test.ts @@ -0,0 +1,76 @@ +import { describe, expect, it } from 'vitest' + +import { + createSnakeGame, + SNAKE_BOARD_WIDTH, + stepSnake, + turnSnake, +} from './engine' +import type { SnakeGameState } from './types' + +describe('Snake engine', () => { + it('moves one cell without changing its length', () => { + const game = createSnakeGame(() => 0) + const next = stepSnake(game, () => 0) + + expect(next.body[0]).toEqual({ x: game.body[0].x + 1, y: game.body[0].y }) + expect(next.body).toHaveLength(game.body.length) + }) + + it('grows, scores, and places fruit outside the body', () => { + const game = createSnakeGame(() => 0) + game.fruit = { x: game.body[0].x + 1, y: game.body[0].y } + const next = stepSnake(game, () => 0) + + expect(next.score).toBe(1) + expect(next.body).toHaveLength(game.body.length + 1) + expect(next.body).not.toContainEqual(next.fruit) + }) + + it('ignores an immediate reverse direction', () => { + const game = createSnakeGame(() => 0) + + expect(turnSnake(game, 'left')).toBe(game) + expect(turnSnake(game, 'up').pendingDirection).toBe('up') + }) + + it('ends the game on wall collision', () => { + const game: SnakeGameState = { + ...createSnakeGame(() => 0), + body: [ + { x: SNAKE_BOARD_WIDTH - 1, y: 4 }, + { x: SNAKE_BOARD_WIDTH - 2, y: 4 }, + ], + } + + expect(stepSnake(game).status).toBe('game-over') + }) + + it('ends the game on body collision', () => { + const game: SnakeGameState = { + body: [ + { x: 4, y: 4 }, + { x: 4, y: 3 }, + { x: 3, y: 3 }, + { x: 3, y: 4 }, + { x: 3, y: 5 }, + ], + direction: 'up', + fruit: { x: 10, y: 10 }, + pendingDirection: 'left', + score: 0, + status: 'playing', + } + + expect(stepSnake(game).status).toBe('game-over') + }) + + it('does not advance a paused game', () => { + const game: SnakeGameState = { + ...createSnakeGame(() => 0), + status: 'paused', + } + + expect(stepSnake(game)).toBe(game) + }) +}) diff --git a/frontend/src/features/games/snake/engine.ts b/frontend/src/features/games/snake/engine.ts new file mode 100644 index 0000000..2a3ec80 --- /dev/null +++ b/frontend/src/features/games/snake/engine.ts @@ -0,0 +1,118 @@ +import type { + SnakeDirection, + SnakeGameState, + SnakePoint, +} from './types' + +export const SNAKE_BOARD_WIDTH = 16 +export const SNAKE_BOARD_HEIGHT = 18 + +const DIRECTION_VECTORS: Record = { + up: { x: 0, y: -1 }, + right: { x: 1, y: 0 }, + down: { x: 0, y: 1 }, + left: { x: -1, y: 0 }, +} + +const OPPOSITE_DIRECTIONS: Record = { + up: 'down', + right: 'left', + down: 'up', + left: 'right', +} + +function pointsMatch(first: SnakePoint, second: SnakePoint): boolean { + return first.x === second.x && first.y === second.y +} + +function placeFruit( + body: SnakePoint[], + random: () => number, +): SnakePoint { + const openCells: SnakePoint[] = [] + + for (let y = 0; y < SNAKE_BOARD_HEIGHT; y += 1) { + for (let x = 0; x < SNAKE_BOARD_WIDTH; x += 1) { + const point = { x, y } + if (!body.some((segment) => pointsMatch(segment, point))) { + openCells.push(point) + } + } + } + + const index = Math.min( + openCells.length - 1, + Math.floor(Math.max(0, random()) * openCells.length), + ) + return openCells[index] ?? body[0] +} + +export function createSnakeGame(random: () => number = Math.random): SnakeGameState { + const centerX = Math.floor(SNAKE_BOARD_WIDTH / 2) + const centerY = Math.floor(SNAKE_BOARD_HEIGHT / 2) + const body = [ + { x: centerX, y: centerY }, + { x: centerX - 1, y: centerY }, + { x: centerX - 2, y: centerY }, + ] + + return { + body, + direction: 'right', + fruit: placeFruit(body, random), + pendingDirection: 'right', + score: 0, + status: 'playing', + } +} + +export function turnSnake( + state: SnakeGameState, + direction: SnakeDirection, +): SnakeGameState { + if ( + state.status !== 'playing' || + direction === OPPOSITE_DIRECTIONS[state.direction] + ) { + return state + } + + return { ...state, pendingDirection: direction } +} + +export function stepSnake( + state: SnakeGameState, + random: () => number = Math.random, +): SnakeGameState { + if (state.status !== 'playing') return state + + const direction = state.pendingDirection + const vector = DIRECTION_VECTORS[direction] + const head = state.body[0] + const nextHead = { x: head.x + vector.x, y: head.y + vector.y } + const ateFruit = pointsMatch(nextHead, state.fruit) + const collisionBody = ateFruit ? state.body : state.body.slice(0, -1) + const hitWall = + nextHead.x < 0 || + nextHead.x >= SNAKE_BOARD_WIDTH || + nextHead.y < 0 || + nextHead.y >= SNAKE_BOARD_HEIGHT + const hitBody = collisionBody.some((segment) => + pointsMatch(segment, nextHead), + ) + + if (hitWall || hitBody) { + return { ...state, direction, status: 'game-over' } + } + + const body = [nextHead, ...state.body] + if (!ateFruit) body.pop() + + return { + ...state, + body, + direction, + fruit: ateFruit ? placeFruit(body, random) : state.fruit, + score: state.score + (ateFruit ? 1 : 0), + } +} diff --git a/frontend/src/features/games/snake/store.ts b/frontend/src/features/games/snake/store.ts new file mode 100644 index 0000000..db3ce58 --- /dev/null +++ b/frontend/src/features/games/snake/store.ts @@ -0,0 +1,84 @@ +import { defineStore } from 'pinia' + +import { useGamesStore } from '@/features/games/store' + +import { createSnakeGame, stepSnake, turnSnake } from './engine' +import type { SnakeDirection, SnakeGameState, SnakeSpeed } from './types' + +type SnakeSave = { + highScore: number + speed: SnakeSpeed +} + +const SPEED_TICK_MS: Record = { + relaxed: 210, + normal: 155, + fast: 110, +} + +function isSnakeSpeed(value: unknown): value is SnakeSpeed { + return value === 'relaxed' || value === 'normal' || value === 'fast' +} + +export const useSnakeStore = defineStore('snake', { + state: () => ({ + game: null as SnakeGameState | null, + highScore: 0, + hydrated: false, + speed: 'normal' as SnakeSpeed, + }), + getters: { + tickMilliseconds: (state) => SPEED_TICK_MS[state.speed], + }, + actions: { + hydrate(): void { + if (this.hydrated) return + + const saved = useGamesStore().readGame>('snake') + this.highScore = + typeof saved?.highScore === 'number' && saved.highScore >= 0 + ? Math.floor(saved.highScore) + : 0 + this.speed = isSnakeSpeed(saved?.speed) ? saved.speed : 'normal' + this.hydrated = true + }, + persist(): void { + useGamesStore().saveGame('snake', { + highScore: this.highScore, + speed: this.speed, + } satisfies SnakeSave) + }, + setSpeed(speed: SnakeSpeed): void { + this.speed = speed + this.persist() + }, + start(): void { + this.game = createSnakeGame() + }, + pause(): void { + if (this.game?.status === 'playing') { + this.game = { ...this.game, status: 'paused' } + } + }, + resume(): void { + if (this.game?.status === 'paused') { + this.game = { ...this.game, status: 'playing' } + } + }, + turn(direction: SnakeDirection): void { + if (this.game) this.game = turnSnake(this.game, direction) + }, + tick(): void { + if (!this.game) return + + this.game = stepSnake(this.game) + if (this.game.status === 'game-over' && this.game.score > this.highScore) { + this.highScore = this.game.score + this.persist() + } + }, + showMenu(): void { + this.game = null + }, + }, +}) diff --git a/frontend/src/features/games/snake/types.ts b/frontend/src/features/games/snake/types.ts new file mode 100644 index 0000000..aeeca50 --- /dev/null +++ b/frontend/src/features/games/snake/types.ts @@ -0,0 +1,19 @@ +export type SnakeDirection = 'up' | 'right' | 'down' | 'left' + +export type SnakePoint = { + x: number + y: number +} + +export type SnakeSpeed = 'relaxed' | 'normal' | 'fast' + +export type SnakeGameStatus = 'playing' | 'paused' | 'game-over' + +export type SnakeGameState = { + body: SnakePoint[] + direction: SnakeDirection + fruit: SnakePoint + pendingDirection: SnakeDirection + score: number + status: SnakeGameStatus +} diff --git a/frontend/src/features/games/store.ts b/frontend/src/features/games/store.ts new file mode 100644 index 0000000..816216b --- /dev/null +++ b/frontend/src/features/games/store.ts @@ -0,0 +1,24 @@ +import { defineStore } from 'pinia' + +import { usePhoneStore } from '@/stores/phone' + +export const useGamesStore = defineStore('games', { + state: () => ({ + games: {} as Record, + }), + actions: { + hydrate(payload: unknown): void { + this.games = + payload && typeof payload === 'object' + ? structuredClone(payload as Record) + : {} + }, + readGame(gameId: string): T | undefined { + return this.games[gameId] as T | undefined + }, + saveGame(gameId: string, payload: unknown): void { + this.games[gameId] = structuredClone(payload) + usePhoneStore().saveDeviceNamespace('games', this.games) + }, + }, +}) diff --git a/frontend/src/stores/phone.ts b/frontend/src/stores/phone.ts index 0d0f8b5..efd8629 100644 --- a/frontend/src/stores/phone.ts +++ b/frontend/src/stores/phone.ts @@ -128,6 +128,52 @@ const defaultLocales: LocaleTree = { }, }, calculator: { name: 'Calculator' }, + snake: { + name: 'Snake', + board: 'Snake game board', + controls: 'Direction controls', + directions: { + down: 'Move down', + left: 'Move left', + right: 'Move right', + up: 'Move up', + }, + gameOver: 'Game Over', + highScore: 'High Score', + menu: 'Main Menu', + pause: 'Pause game', + paused: 'Paused', + readyBody: 'Collect fruit, grow longer, and stay clear of every wall.', + readyTitle: 'Ready to play?', + restart: 'Play Again', + resume: 'Resume game', + score: 'Score', + speed: 'Speed', + speeds: { fast: 'Fast', normal: 'Normal', relaxed: 'Relaxed' }, + start: 'Start Game', + swipeHint: 'Swipe, tap the controls, or use arrow keys / WASD', + }, + memory: { + name: 'Memory', + backToMenu: 'Back to board selection', + board: 'Memory card board', + chooseBody: 'Find every matching pair with as few moves as possible.', + chooseTitle: 'Choose a board', + completeEyebrow: 'Board cleared', + completeTitle: 'Great memory!', + difficulties: { large: 'Expert', medium: 'Classic', small: 'Quick' }, + eyebrow: 'Matching game', + hiddenCard: 'Hidden card', + menu: 'Board Selection', + moves: 'Moves', + mute: 'Mute game sounds', + noBest: 'No best score yet', + playAgain: 'Play Again', + restart: 'Restart', + revealedCard: 'Revealed card', + time: 'Time', + unmute: 'Turn on game sounds', + }, map: { name: 'Map', controls: 'Map controls', diff --git a/frontend/src/types/apps.ts b/frontend/src/types/apps.ts index f41235b..da632a2 100644 --- a/frontend/src/types/apps.ts +++ b/frontend/src/types/apps.ts @@ -12,6 +12,8 @@ export type PhoneAppId = | 'photos' | 'app-store' | 'settings' + | 'snake' + | 'memory' export type AppLaunchOrigin = { borderRadius: number diff --git a/frontend/src/utils/preferences.ts b/frontend/src/utils/preferences.ts index 5acd580..bfaa523 100644 --- a/frontend/src/utils/preferences.ts +++ b/frontend/src/utils/preferences.ts @@ -50,6 +50,8 @@ const DEFAULT_APP_NOTIFICATIONS: Record< phone: { enabled: true, sounds: true }, 'app-store': { enabled: true, sounds: true }, calculator: { enabled: true, sounds: true }, + snake: { enabled: true, sounds: true }, + memory: { enabled: true, sounds: true }, camera: { enabled: true, sounds: true }, clock: { enabled: true, sounds: true }, weather: { enabled: true, sounds: true }, diff --git a/frontend/src/views/apps/MemoryApp.vue b/frontend/src/views/apps/MemoryApp.vue new file mode 100644 index 0000000..42d3a96 --- /dev/null +++ b/frontend/src/views/apps/MemoryApp.vue @@ -0,0 +1,588 @@ + + + + + diff --git a/frontend/src/views/apps/SnakeApp.vue b/frontend/src/views/apps/SnakeApp.vue new file mode 100644 index 0000000..b987b07 --- /dev/null +++ b/frontend/src/views/apps/SnakeApp.vue @@ -0,0 +1,667 @@ + + + + + diff --git a/sky_phone/config/locales/en.lua b/sky_phone/config/locales/en.lua index 55f86e2..35d21e5 100644 --- a/sky_phone/config/locales/en.lua +++ b/sky_phone/config/locales/en.lua @@ -61,6 +61,24 @@ Locales["en"] = { }, }, calculator = { name = "Calculator" }, + snake = { + name = "Snake", board = "Snake game board", controls = "Direction controls", + directions = { down = "Move down", left = "Move left", right = "Move right", up = "Move up" }, + gameOver = "Game Over", highScore = "High Score", menu = "Main Menu", pause = "Pause game", paused = "Paused", + readyBody = "Collect fruit, grow longer, and stay clear of every wall.", readyTitle = "Ready to play?", + restart = "Play Again", resume = "Resume game", score = "Score", speed = "Speed", + speeds = { fast = "Fast", normal = "Normal", relaxed = "Relaxed" }, start = "Start Game", + swipeHint = "Swipe, tap the controls, or use arrow keys / WASD", + }, + memory = { + name = "Memory", backToMenu = "Back to board selection", board = "Memory card board", + chooseBody = "Find every matching pair with as few moves as possible.", + chooseTitle = "Choose a board", completeEyebrow = "Board cleared", completeTitle = "Great memory!", + difficulties = { large = "Expert", medium = "Classic", small = "Quick" }, eyebrow = "Matching game", + hiddenCard = "Hidden card", menu = "Board Selection", moves = "Moves", mute = "Mute game sounds", + noBest = "No best score yet", playAgain = "Play Again", restart = "Restart", + revealedCard = "Revealed card", time = "Time", unmute = "Turn on game sounds", + }, camera = { name = "Camera", shutter = "Take photo", flip = "Flip camera", flash = "Toggle flash", controls = "Camera controls", modes = { timelapse = "Timelapse", slowMo = "Slow-Mo", cinematic = "Cinematic", video = "Video", photo = "Photo", portrait = "Portrait", pano = "Pano" }, diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index 2d66aff..cb39de7 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,8 +4,8 @@ Sky Phone - - + +
diff --git a/sky_phone/source/server/phone.lua b/sky_phone/source/server/phone.lua index b8ed000..4094fc6 100644 --- a/sky_phone/source/server/phone.lua +++ b/sky_phone/source/server/phone.lua @@ -14,6 +14,7 @@ local allowed_device_namespaces = { alarms = true, media = true, apps = true, + games = true, } local function trim(value) From 7a9836317aadd62f2a18cb50c0c016632999d6e2 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:28:24 +0200 Subject: [PATCH 003/103] ENH - improve Snake menu presentation --- frontend/src/stores/phone.ts | 1 + frontend/src/views/apps/SnakeApp.vue | 127 +++++++++++++++++++-------- sky_phone/config/locales/en.lua | 3 +- sky_phone/source/html/index.html | 2 +- 4 files changed, 94 insertions(+), 39 deletions(-) diff --git a/frontend/src/stores/phone.ts b/frontend/src/stores/phone.ts index efd8629..edf0f86 100644 --- a/frontend/src/stores/phone.ts +++ b/frontend/src/stores/phone.ts @@ -130,6 +130,7 @@ const defaultLocales: LocaleTree = { calculator: { name: 'Calculator' }, snake: { name: 'Snake', + backToMenu: 'Back to game menu', board: 'Snake game board', controls: 'Direction controls', directions: { diff --git a/frontend/src/views/apps/SnakeApp.vue b/frontend/src/views/apps/SnakeApp.vue index b987b07..d6d3ecd 100644 --- a/frontend/src/views/apps/SnakeApp.vue +++ b/frontend/src/views/apps/SnakeApp.vue @@ -94,6 +94,11 @@ function syncGameTimer(): void { } } +function returnToMenu(): void { + stopGameTimer() + snake.showMenu() +} + function handleKeydown(event: KeyboardEvent): void { const directionByKey: Partial> = { ArrowDown: 'down', @@ -168,8 +173,42 @@ onBeforeUnmount(() => {

{{ phone.t('Apps.snake.readyTitle') }}

@@ -195,11 +234,21 @@ onBeforeUnmount(() => {
+ {{ phone.t('Apps.snake.score') }} {{ game.score }} - @@ -350,46 +399,43 @@ onBeforeUnmount(() => { .snake-mark { position: relative; - width: 118px; - height: 118px; - border: 22px solid #65c85d; - border-top-color: #84df6d; - border-radius: 50%; - filter: drop-shadow(0 14px 18px rgb(0 0 0 / 26%)); + width: 174px; + height: 148px; + display: grid; + place-items: center; + border: 1px solid rgb(180 242 164 / 9%); + border-radius: 35px; + background: + radial-gradient(circle at 75% 20%, rgb(138 226 118 / 14%), transparent 34%), + rgb(255 255 255 / 4%); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 5%), 0 18px 32px rgb(0 0 0 / 19%); } -.snake-mark::after { - content: ""; - position: absolute; - right: -25px; - top: -20px; - width: 39px; - height: 29px; - border-radius: 55% 60% 55% 45%; - background: #85df6e; - transform: rotate(13deg); +.snake-mark svg { + width: 157px; + height: 134px; + overflow: visible; } -.snake-mark__eye { - position: absolute; - z-index: 2; - right: -13px; - top: -10px; - width: 5px; - height: 5px; - border-radius: 50%; - background: #142b25; +.snake-mark__body { + animation: snake-menu-breathe 2.8s ease-in-out infinite; + transform-origin: center; } .snake-mark__fruit { - position: absolute; - right: -43px; - bottom: -17px; - width: 25px; - height: 25px; - border-radius: 48% 52% 55% 45%; - background: #ff5f52; - box-shadow: inset -4px -4px 0 rgb(139 21 22 / 22%); + animation: snake-menu-fruit 1.8s ease-in-out infinite; + transform-box: fill-box; + transform-origin: center; +} + +@keyframes snake-menu-breathe { + 0%, 100% { opacity: 0.94; transform: scale(0.985); } + 50% { opacity: 1; transform: scale(1.01); } +} + +@keyframes snake-menu-fruit { + 0%, 100% { transform: translate(126px, 87px) scale(0.94); } + 50% { transform: translate(126px, 87px) scale(1.05); } } .snake-menu h1, @@ -486,13 +532,15 @@ onBeforeUnmount(() => { height: 34px; display: grid; place-items: center; - margin-left: auto; border: 1px solid rgb(255 255 255 / 9%); border-radius: 50%; color: #dff6d9; background: rgb(255 255 255 / 7%); } +.snake-game__meta .snake-game__pause { margin-left: auto; } +.snake-game__meta .snake-game__back { flex: 0 0 auto; } + .snake-board { position: relative; width: 100%; @@ -664,4 +712,9 @@ onBeforeUnmount(() => { button:active { transform: scale(0.96); } + +@media (prefers-reduced-motion: reduce) { + .snake-mark__body, + .snake-mark__fruit { animation: none; } +} diff --git a/sky_phone/config/locales/en.lua b/sky_phone/config/locales/en.lua index 35d21e5..82205c4 100644 --- a/sky_phone/config/locales/en.lua +++ b/sky_phone/config/locales/en.lua @@ -62,7 +62,8 @@ Locales["en"] = { }, calculator = { name = "Calculator" }, snake = { - name = "Snake", board = "Snake game board", controls = "Direction controls", + name = "Snake", backToMenu = "Back to game menu", board = "Snake game board", + controls = "Direction controls", directions = { down = "Move down", left = "Move left", right = "Move right", up = "Move up" }, gameOver = "Game Over", highScore = "High Score", menu = "Main Menu", pause = "Pause game", paused = "Paused", readyBody = "Collect fruit, grow longer, and stay clear of every wall.", readyTitle = "Ready to play?", diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index cb39de7..88ca1c8 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,7 +4,7 @@ Sky Phone - + From 8c1a79978c826dc7c2e15f81e10dff90966e4fab Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:40:03 +0200 Subject: [PATCH 004/103] ADD - number merge phone game --- .../assets/img/app-icons/number-merge.webp | Bin 0 -> 23226 bytes frontend/src/config/apps.test.ts | 6 + frontend/src/config/apps.ts | 15 + .../src/features/games/number-merge/audio.ts | 58 ++ .../games/number-merge/engine.test.ts | 156 ++++ .../src/features/games/number-merge/engine.ts | 251 +++++++ .../src/features/games/number-merge/store.ts | 117 +++ .../src/features/games/number-merge/types.ts | 26 + frontend/src/stores/phone.ts | 35 + frontend/src/types/apps.ts | 1 + frontend/src/utils/preferences.ts | 1 + frontend/src/views/apps/NumberMergeApp.vue | 686 ++++++++++++++++++ sky_phone/config/locales/en.lua | 17 + sky_phone/source/html/index.html | 2 +- 14 files changed, 1370 insertions(+), 1 deletion(-) create mode 100644 frontend/src/assets/img/app-icons/number-merge.webp create mode 100644 frontend/src/features/games/number-merge/audio.ts create mode 100644 frontend/src/features/games/number-merge/engine.test.ts create mode 100644 frontend/src/features/games/number-merge/engine.ts create mode 100644 frontend/src/features/games/number-merge/store.ts create mode 100644 frontend/src/features/games/number-merge/types.ts create mode 100644 frontend/src/views/apps/NumberMergeApp.vue diff --git a/frontend/src/assets/img/app-icons/number-merge.webp b/frontend/src/assets/img/app-icons/number-merge.webp new file mode 100644 index 0000000000000000000000000000000000000000..ec5b87eeb7b67a69139a32e75a58ec2abb455c20 GIT binary patch literal 23226 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 { labelKey: 'Apps.memory.name', route: '/apps/memory', }) + expect(PHONE_APPS.find((app) => app.id === 'number-merge')).toMatchObject({ + dockOrder: null, + gridOrder: 13, + labelKey: 'Apps.numberMerge.name', + route: '/apps/number-merge', + }) expect( PHONE_APPS.filter((app) => app.dockOrder !== null) .sort((a, b) => (a.dockOrder ?? 0) - (b.dockOrder ?? 0)) diff --git a/frontend/src/config/apps.ts b/frontend/src/config/apps.ts index 683315a..72cd43f 100644 --- a/frontend/src/config/apps.ts +++ b/frontend/src/config/apps.ts @@ -3,6 +3,7 @@ import { Camera, Clock3, Gamepad2, + Grid2X2, Brain, Images, Mail, @@ -27,6 +28,7 @@ import phoneIcon from '@/assets/img/app-icons/phone.webp' import settingsIcon from '@/assets/img/app-icons/settings.webp' import snakeIcon from '@/assets/img/app-icons/snake.webp' import memoryIcon from '@/assets/img/app-icons/memory.webp' +import numberMergeIcon from '@/assets/img/app-icons/number-merge.webp' import weatherIcon from '@/assets/img/app-icons/weather.webp' import type { PhoneAppDefinition, PhoneAppId } from '@/types/apps' @@ -200,6 +202,19 @@ export const PHONE_APPS: PhoneAppDefinition[] = [ labelKey: 'Apps.memory.name', route: '/apps/memory', }, + { + component: markRaw( + defineAsyncComponent(() => import('@/views/apps/NumberMergeApp.vue')), + ), + dockOrder: null, + gridOrder: 13, + icon: markRaw(Grid2X2), + iconClass: 'app-icon--number-merge', + iconImage: numberMergeIcon, + id: 'number-merge', + labelKey: 'Apps.numberMerge.name', + route: '/apps/number-merge', + }, ] export const PHONE_APP_IDS = PHONE_APPS.map((app) => app.id) diff --git a/frontend/src/features/games/number-merge/audio.ts b/frontend/src/features/games/number-merge/audio.ts new file mode 100644 index 0000000..05eaa3d --- /dev/null +++ b/frontend/src/features/games/number-merge/audio.ts @@ -0,0 +1,58 @@ +export type NumberMergeSound = 'game-over' | 'merge' | 'move' | 'win' + +type Tone = { + duration: number + frequency: number + offset: number + type: OscillatorType + volume: number +} + +const sounds: Record = { + move: [{ duration: 0.05, frequency: 260, offset: 0, type: 'sine', volume: 0.045 }], + merge: [ + { duration: 0.09, frequency: 390, offset: 0, type: 'sine', volume: 0.065 }, + { duration: 0.12, frequency: 520, offset: 0.055, type: 'sine', volume: 0.075 }, + ], + win: [ + { duration: 0.16, frequency: 523.25, offset: 0, type: 'sine', volume: 0.08 }, + { duration: 0.16, frequency: 659.25, offset: 0.1, type: 'sine', volume: 0.085 }, + { duration: 0.16, frequency: 783.99, offset: 0.2, type: 'sine', volume: 0.09 }, + { duration: 0.3, frequency: 1046.5, offset: 0.3, type: 'sine', volume: 0.1 }, + ], + 'game-over': [ + { duration: 0.14, frequency: 260, offset: 0, type: 'triangle', volume: 0.065 }, + { duration: 0.18, frequency: 195, offset: 0.12, type: 'triangle', volume: 0.06 }, + { duration: 0.22, frequency: 146, offset: 0.26, type: 'triangle', volume: 0.055 }, + ], +} + +let audioContext: AudioContext | undefined + +export function playNumberMergeSound( + sound: NumberMergeSound, + enabled: boolean, +): void { + if (!enabled) return + + audioContext ??= new AudioContext() + if (audioContext.state === 'suspended') void audioContext.resume() + + const now = audioContext.currentTime + for (const tone of sounds[sound]) { + const oscillator = audioContext.createOscillator() + const gain = audioContext.createGain() + const start = now + tone.offset + const end = start + tone.duration + + oscillator.type = tone.type + oscillator.frequency.setValueAtTime(tone.frequency, start) + gain.gain.setValueAtTime(0.0001, start) + gain.gain.exponentialRampToValueAtTime(tone.volume, start + 0.012) + gain.gain.exponentialRampToValueAtTime(0.0001, end) + oscillator.connect(gain) + gain.connect(audioContext.destination) + oscillator.start(start) + oscillator.stop(end) + } +} diff --git a/frontend/src/features/games/number-merge/engine.test.ts b/frontend/src/features/games/number-merge/engine.test.ts new file mode 100644 index 0000000..d30a66d --- /dev/null +++ b/frontend/src/features/games/number-merge/engine.test.ts @@ -0,0 +1,156 @@ +import { describe, expect, it } from 'vitest' + +import { + canMoveNumberMerge, + continueNumberMerge, + createNumberMergeGame, + isNumberMergeGameState, + moveNumberMerge, +} from './engine' +import type { NumberMergeGameState } from './types' + +function gameFromGrid(grid: number[][]): NumberMergeGameState { + let nextTileId = 1 + return { + hasWon: false, + keepPlaying: false, + nextTileId: grid.flat().filter(Boolean).length + 1, + score: 0, + status: 'playing', + tiles: grid.flatMap((row, rowIndex) => + row.flatMap((value, columnIndex) => + value + ? [ + { + column: columnIndex, + id: nextTileId++, + isNew: false, + merged: false, + row: rowIndex, + value, + }, + ] + : [], + ), + ), + } +} + +function values(state: NumberMergeGameState): number[][] { + return Array.from({ length: 4 }, (_, row) => + Array.from( + { length: 4 }, + (_, column) => + state.tiles.find( + (tile) => tile.row === row && tile.column === column, + )?.value ?? 0, + ), + ) +} + +const spawnFirstTwo = () => 0 + +describe('number merge engine', () => { + it('starts with two tiles on different cells', () => { + const game = createNumberMergeGame(spawnFirstTwo) + expect(game.tiles).toHaveLength(2) + expect(game.tiles.map((tile) => tile.value)).toEqual([2, 2]) + expect( + new Set(game.tiles.map((tile) => `${tile.row}:${tile.column}`)).size, + ).toBe(2) + }) + + it('compresses and merges a row to the left', () => { + const result = moveNumberMerge( + gameFromGrid([ + [2, 0, 2, 4], + [0, 0, 0, 0], + [0, 0, 0, 0], + [0, 0, 0, 0], + ]), + 'left', + spawnFirstTwo, + ) + expect(values(result.state)[0].slice(0, 3)).toEqual([4, 4, 2]) + expect(result.gained).toBe(4) + }) + + it('merges each tile only once per move', () => { + const result = moveNumberMerge( + gameFromGrid([ + [2, 2, 2, 2], + [0, 0, 0, 0], + [0, 0, 0, 0], + [0, 0, 0, 0], + ]), + 'left', + spawnFirstTwo, + ) + expect(values(result.state)[0].slice(0, 3)).toEqual([4, 4, 2]) + expect(result.gained).toBe(8) + }) + + it('moves columns upward using the same merge rules', () => { + const result = moveNumberMerge( + gameFromGrid([ + [2, 0, 0, 0], + [2, 0, 0, 0], + [4, 0, 0, 0], + [4, 0, 0, 0], + ]), + 'up', + spawnFirstTwo, + ) + expect(values(result.state).map((row) => row[0])).toEqual([4, 8, 0, 0]) + expect(result.state.tiles).toHaveLength(3) + expect(result.gained).toBe(12) + }) + + it('does not spawn a tile after an invalid move', () => { + const game = gameFromGrid([ + [2, 4, 8, 16], + [0, 0, 0, 0], + [0, 0, 0, 0], + [0, 0, 0, 0], + ]) + const result = moveNumberMerge(game, 'left', spawnFirstTwo) + expect(result.changed).toBe(false) + expect(result.state).toBe(game) + }) + + it('recognizes a board with no remaining moves', () => { + const game = gameFromGrid([ + [2, 4, 2, 4], + [4, 2, 4, 2], + [2, 4, 2, 4], + [4, 2, 4, 2], + ]) + expect(canMoveNumberMerge(game)).toBe(false) + }) + + it('pauses at 2048 and can continue afterward', () => { + const result = moveNumberMerge( + gameFromGrid([ + [1024, 1024, 0, 0], + [2, 4, 8, 16], + [0, 0, 0, 0], + [0, 0, 0, 0], + ]), + 'left', + spawnFirstTwo, + ) + expect(result.state.status).toBe('won') + expect(result.state.hasWon).toBe(true) + expect(continueNumberMerge(result.state).status).toBe('playing') + }) + + it('rejects malformed persisted games', () => { + expect(isNumberMergeGameState(gameFromGrid([[2], [], [], []]))).toBe(true) + expect( + isNumberMergeGameState({ + ...gameFromGrid([[2], [], [], []]), + tiles: [{ column: 8, id: 1, isNew: false, merged: false, row: 0, value: 3 }], + }), + ).toBe(false) + }) +}) diff --git a/frontend/src/features/games/number-merge/engine.ts b/frontend/src/features/games/number-merge/engine.ts new file mode 100644 index 0000000..6f94665 --- /dev/null +++ b/frontend/src/features/games/number-merge/engine.ts @@ -0,0 +1,251 @@ +import type { + NumberMergeDirection, + NumberMergeGameState, + NumberMergeMoveResult, + NumberMergeTile, +} from './types' + +export const NUMBER_MERGE_BOARD_SIZE = 4 +export const NUMBER_MERGE_WIN_VALUE = 2048 + +type Point = { + column: number + row: number +} + +function pointKey(point: Point): string { + return `${point.row}:${point.column}` +} + +function linePoints(direction: NumberMergeDirection, line: number): Point[] { + return Array.from({ length: NUMBER_MERGE_BOARD_SIZE }, (_, offset) => { + if (direction === 'left') return { column: offset, row: line } + if (direction === 'right') { + return { column: NUMBER_MERGE_BOARD_SIZE - 1 - offset, row: line } + } + if (direction === 'up') return { column: line, row: offset } + return { column: line, row: NUMBER_MERGE_BOARD_SIZE - 1 - offset } + }) +} + +function availablePoints(tiles: NumberMergeTile[]): Point[] { + const occupied = new Set(tiles.map(pointKey)) + const points: Point[] = [] + + for (let row = 0; row < NUMBER_MERGE_BOARD_SIZE; row += 1) { + for (let column = 0; column < NUMBER_MERGE_BOARD_SIZE; column += 1) { + const point = { column, row } + if (!occupied.has(pointKey(point))) points.push(point) + } + } + + return points +} + +function isPowerOfTwo(value: number): boolean { + return value >= 2 && Number.isInteger(Math.log2(value)) +} + +export function spawnNumberMergeTile( + state: NumberMergeGameState, + random: () => number = Math.random, +): NumberMergeGameState { + const points = availablePoints(state.tiles) + if (points.length === 0) return state + + const pointIndex = Math.min( + points.length - 1, + Math.floor(random() * points.length), + ) + const point = points[pointIndex] + const tile: NumberMergeTile = { + ...point, + id: state.nextTileId, + isNew: true, + merged: false, + value: random() < 0.9 ? 2 : 4, + } + + return { + ...state, + nextTileId: state.nextTileId + 1, + tiles: [...state.tiles, tile], + } +} + +export function canMoveNumberMerge(state: NumberMergeGameState): boolean { + if (state.tiles.length < NUMBER_MERGE_BOARD_SIZE ** 2) return true + + const values = new Map(state.tiles.map((tile) => [pointKey(tile), tile.value])) + for (const tile of state.tiles) { + const right = values.get(pointKey({ column: tile.column + 1, row: tile.row })) + const down = values.get(pointKey({ column: tile.column, row: tile.row + 1 })) + if (right === tile.value || down === tile.value) return true + } + + return false +} + +export function createNumberMergeGame( + random: () => number = Math.random, +): NumberMergeGameState { + const empty: NumberMergeGameState = { + hasWon: false, + keepPlaying: false, + nextTileId: 1, + score: 0, + status: 'playing', + tiles: [], + } + return spawnNumberMergeTile(spawnNumberMergeTile(empty, random), random) +} + +export function moveNumberMerge( + state: NumberMergeGameState, + direction: NumberMergeDirection, + random: () => number = Math.random, +): NumberMergeMoveResult { + if (state.status !== 'playing') { + return { changed: false, gained: 0, state } + } + + const tileByPoint = new Map(state.tiles.map((tile) => [pointKey(tile), tile])) + const nextTiles: NumberMergeTile[] = [] + let gained = 0 + + for (let line = 0; line < NUMBER_MERGE_BOARD_SIZE; line += 1) { + const points = linePoints(direction, line) + const tiles = points + .map((point) => tileByPoint.get(pointKey(point))) + .filter((tile): tile is NumberMergeTile => tile !== undefined) + + let sourceIndex = 0 + let targetIndex = 0 + while (sourceIndex < tiles.length) { + const tile = tiles[sourceIndex] + const nextTile = tiles[sourceIndex + 1] + const target = points[targetIndex] + + if (nextTile?.value === tile.value) { + const value = tile.value * 2 + nextTiles.push({ + ...tile, + ...target, + isNew: false, + merged: true, + value, + }) + gained += value + sourceIndex += 2 + } else { + nextTiles.push({ + ...tile, + ...target, + isNew: false, + merged: false, + }) + sourceIndex += 1 + } + targetIndex += 1 + } + } + + const changed = + nextTiles.length !== state.tiles.length || + nextTiles.some((tile) => { + const previous = state.tiles.find((candidate) => candidate.id === tile.id) + return ( + !previous || + previous.column !== tile.column || + previous.row !== tile.row || + previous.value !== tile.value + ) + }) + + if (!changed) return { changed: false, gained: 0, state } + + let nextState = spawnNumberMergeTile( + { + ...state, + score: state.score + gained, + tiles: nextTiles, + }, + random, + ) + const reachedWin = nextState.tiles.some( + (tile) => tile.value >= NUMBER_MERGE_WIN_VALUE, + ) + const firstWin = reachedWin && !state.hasWon + nextState = { + ...nextState, + hasWon: state.hasWon || reachedWin, + status: firstWin + ? 'won' + : canMoveNumberMerge(nextState) + ? 'playing' + : 'game-over', + } + + return { changed: true, gained, state: nextState } +} + +export function continueNumberMerge( + state: NumberMergeGameState, +): NumberMergeGameState { + if (state.status !== 'won') return state + return { + ...state, + keepPlaying: true, + status: canMoveNumberMerge(state) ? 'playing' : 'game-over', + } +} + +export function isNumberMergeGameState( + value: unknown, +): value is NumberMergeGameState { + if (!value || typeof value !== 'object') return false + const game = value as Partial + if ( + typeof game.hasWon !== 'boolean' || + typeof game.keepPlaying !== 'boolean' || + !Number.isInteger(game.nextTileId) || + (game.nextTileId ?? 0) < 1 || + !Number.isInteger(game.score) || + (game.score ?? -1) < 0 || + !['game-over', 'playing', 'won'].includes(game.status ?? '') || + !Array.isArray(game.tiles) || + game.tiles.length > NUMBER_MERGE_BOARD_SIZE ** 2 + ) { + return false + } + + const ids = new Set() + const points = new Set() + for (const candidate of game.tiles) { + if (!candidate || typeof candidate !== 'object') return false + const tile = candidate as Partial + if ( + !Number.isInteger(tile.id) || + (tile.id ?? 0) < 1 || + !Number.isInteger(tile.column) || + (tile.column ?? -1) < 0 || + (tile.column ?? NUMBER_MERGE_BOARD_SIZE) >= NUMBER_MERGE_BOARD_SIZE || + !Number.isInteger(tile.row) || + (tile.row ?? -1) < 0 || + (tile.row ?? NUMBER_MERGE_BOARD_SIZE) >= NUMBER_MERGE_BOARD_SIZE || + typeof tile.value !== 'number' || + !isPowerOfTwo(tile.value) || + typeof tile.isNew !== 'boolean' || + typeof tile.merged !== 'boolean' + ) { + return false + } + + const position = pointKey(tile as Point) + if (ids.has(tile.id as number) || points.has(position)) return false + ids.add(tile.id as number) + points.add(position) + } + + return Math.max(0, ...ids) < (game.nextTileId as number) +} diff --git a/frontend/src/features/games/number-merge/store.ts b/frontend/src/features/games/number-merge/store.ts new file mode 100644 index 0000000..d7b4dea --- /dev/null +++ b/frontend/src/features/games/number-merge/store.ts @@ -0,0 +1,117 @@ +import { defineStore } from 'pinia' + +import { useGamesStore } from '@/features/games/store' + +import { + continueNumberMerge, + createNumberMergeGame, + isNumberMergeGameState, + moveNumberMerge, +} from './engine' +import type { + NumberMergeDirection, + NumberMergeGameState, + NumberMergeMoveResult, +} from './types' + +type NumberMergeSave = { + bestScore: number + game: NumberMergeGameState | null + highestTile: number + soundEnabled: boolean +} + +function savedNumber(value: unknown): number { + return typeof value === 'number' && Number.isFinite(value) && value >= 0 + ? Math.floor(value) + : 0 +} + +export const useNumberMergeStore = defineStore('number-merge', { + state: () => ({ + bestScore: 0, + game: null as NumberMergeGameState | null, + highestTile: 0, + hydrated: false, + menuOpen: true, + soundEnabled: true, + }), + actions: { + hydrate(): void { + if (this.hydrated) return + + const saved = useGamesStore().readGame>( + 'number-merge', + ) + this.game = isNumberMergeGameState(saved?.game) + ? { + ...structuredClone(saved.game), + tiles: saved.game.tiles.map((tile) => ({ + ...tile, + isNew: false, + merged: false, + })), + } + : null + this.bestScore = Math.max( + savedNumber(saved?.bestScore), + this.game?.score ?? 0, + ) + this.highestTile = Math.max( + savedNumber(saved?.highestTile), + ...(this.game?.tiles.map((tile) => tile.value) ?? [0]), + ) + if (typeof saved?.soundEnabled === 'boolean') { + this.soundEnabled = saved.soundEnabled + } + this.hydrated = true + }, + persist(): void { + useGamesStore().saveGame('number-merge', { + bestScore: this.bestScore, + game: this.game, + highestTile: this.highestTile, + soundEnabled: this.soundEnabled, + } satisfies NumberMergeSave) + }, + start(): void { + this.game = createNumberMergeGame() + this.highestTile = Math.max( + this.highestTile, + ...this.game.tiles.map((tile) => tile.value), + ) + this.menuOpen = false + this.persist() + }, + resume(): void { + if (this.game) this.menuOpen = false + }, + showMenu(): void { + this.menuOpen = true + }, + move(direction: NumberMergeDirection): NumberMergeMoveResult | null { + if (!this.game) return null + + const result = moveNumberMerge(this.game, direction) + if (!result.changed) return result + + this.game = result.state + this.bestScore = Math.max(this.bestScore, result.state.score) + this.highestTile = Math.max( + this.highestTile, + ...result.state.tiles.map((tile) => tile.value), + ) + this.persist() + return result + }, + continueAfterWin(): void { + if (!this.game) return + this.game = continueNumberMerge(this.game) + this.persist() + }, + setSoundEnabled(enabled: boolean): void { + this.soundEnabled = enabled + this.persist() + }, + }, +}) diff --git a/frontend/src/features/games/number-merge/types.ts b/frontend/src/features/games/number-merge/types.ts new file mode 100644 index 0000000..41ef67f --- /dev/null +++ b/frontend/src/features/games/number-merge/types.ts @@ -0,0 +1,26 @@ +export type NumberMergeDirection = 'down' | 'left' | 'right' | 'up' +export type NumberMergeStatus = 'game-over' | 'playing' | 'won' + +export type NumberMergeTile = { + column: number + id: number + isNew: boolean + merged: boolean + row: number + value: number +} + +export type NumberMergeGameState = { + hasWon: boolean + keepPlaying: boolean + nextTileId: number + score: number + status: NumberMergeStatus + tiles: NumberMergeTile[] +} + +export type NumberMergeMoveResult = { + changed: boolean + gained: number + state: NumberMergeGameState +} diff --git a/frontend/src/stores/phone.ts b/frontend/src/stores/phone.ts index edf0f86..f7e8c31 100644 --- a/frontend/src/stores/phone.ts +++ b/frontend/src/stores/phone.ts @@ -175,6 +175,41 @@ const defaultLocales: LocaleTree = { time: 'Time', unmute: 'Turn on game sounds', }, + numberMerge: { + name: '2048', + backToMenu: 'Back to game menu', + best: 'Best', + board: '2048 game board', + cancel: 'Keep Current Game', + confirmBody: 'Your current board will be replaced. This cannot be undone.', + confirmNew: 'Start New Game', + confirmTitle: 'Replace current game?', + continueGame: 'Continue Game', + controls: 'Move controls', + directions: { + down: 'Move tiles down', + left: 'Move tiles left', + right: 'Move tiles right', + up: 'Move tiles up', + }, + eyebrow: 'Number puzzle', + gameOverBody: 'No empty spaces or matching neighbours remain.', + gameOverTitle: 'No more moves', + highest: 'Highest Tile', + howToBody: 'Swipe to combine matching tiles. Each pair becomes one larger tile.', + howToTitle: 'How to play', + keepPlaying: 'Keep Playing', + mainMenu: 'Main Menu', + menuBody: 'Slide matching numbers together and work your way up to 2048.', + menuTitle: 'Build the 2048 tile', + mute: 'Mute game sounds', + newGame: 'New Game', + score: 'Score', + swipeHint: 'Swipe the board, use the buttons, or press arrow keys / WASD', + unmute: 'Turn on game sounds', + wonBody: 'You reached the legendary tile. Continue climbing or begin again.', + wonTitle: 'You made 2048!', + }, map: { name: 'Map', controls: 'Map controls', diff --git a/frontend/src/types/apps.ts b/frontend/src/types/apps.ts index da632a2..3ab725a 100644 --- a/frontend/src/types/apps.ts +++ b/frontend/src/types/apps.ts @@ -14,6 +14,7 @@ export type PhoneAppId = | 'settings' | 'snake' | 'memory' + | 'number-merge' export type AppLaunchOrigin = { borderRadius: number diff --git a/frontend/src/utils/preferences.ts b/frontend/src/utils/preferences.ts index bfaa523..f9a8142 100644 --- a/frontend/src/utils/preferences.ts +++ b/frontend/src/utils/preferences.ts @@ -52,6 +52,7 @@ const DEFAULT_APP_NOTIFICATIONS: Record< calculator: { enabled: true, sounds: true }, snake: { enabled: true, sounds: true }, memory: { enabled: true, sounds: true }, + 'number-merge': { enabled: true, sounds: true }, camera: { enabled: true, sounds: true }, clock: { enabled: true, sounds: true }, weather: { enabled: true, sounds: true }, diff --git a/frontend/src/views/apps/NumberMergeApp.vue b/frontend/src/views/apps/NumberMergeApp.vue new file mode 100644 index 0000000..86ce4ec --- /dev/null +++ b/frontend/src/views/apps/NumberMergeApp.vue @@ -0,0 +1,686 @@ + + + + + diff --git a/sky_phone/config/locales/en.lua b/sky_phone/config/locales/en.lua index 82205c4..acae27a 100644 --- a/sky_phone/config/locales/en.lua +++ b/sky_phone/config/locales/en.lua @@ -80,6 +80,23 @@ Locales["en"] = { noBest = "No best score yet", playAgain = "Play Again", restart = "Restart", revealedCard = "Revealed card", time = "Time", unmute = "Turn on game sounds", }, + numberMerge = { + name = "2048", backToMenu = "Back to game menu", best = "Best", board = "2048 game board", + cancel = "Keep Current Game", confirmBody = "Your current board will be replaced. This cannot be undone.", + confirmNew = "Start New Game", confirmTitle = "Replace current game?", continueGame = "Continue Game", + controls = "Move controls", directions = { + down = "Move tiles down", left = "Move tiles left", right = "Move tiles right", up = "Move tiles up", + }, + eyebrow = "Number puzzle", gameOverBody = "No empty spaces or matching neighbours remain.", + gameOverTitle = "No more moves", highest = "Highest Tile", + howToBody = "Swipe to combine matching tiles. Each pair becomes one larger tile.", howToTitle = "How to play", + keepPlaying = "Keep Playing", mainMenu = "Main Menu", + menuBody = "Slide matching numbers together and work your way up to 2048.", menuTitle = "Build the 2048 tile", + mute = "Mute game sounds", newGame = "New Game", score = "Score", + swipeHint = "Swipe the board, use the buttons, or press arrow keys / WASD", + unmute = "Turn on game sounds", + wonBody = "You reached the legendary tile. Continue climbing or begin again.", wonTitle = "You made 2048!", + }, camera = { name = "Camera", shutter = "Take photo", flip = "Flip camera", flash = "Toggle flash", controls = "Camera controls", modes = { timelapse = "Timelapse", slowMo = "Slow-Mo", cinematic = "Cinematic", video = "Video", photo = "Photo", portrait = "Portrait", pano = "Pano" }, diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index 88ca1c8..5d187d6 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,7 +4,7 @@ Sky Phone - + From 3c92660069ab594e61aa5103d82c3c1fac0787e5 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:45:58 +0200 Subject: [PATCH 005/103] FIX - start 2048 audio reliably --- .../src/features/games/number-merge/audio.ts | 63 ++++++++++++------- frontend/src/stores/phone.ts | 2 + frontend/src/views/apps/NumberMergeApp.vue | 10 +++ sky_phone/config/locales/en.lua | 4 +- sky_phone/source/html/index.html | 2 +- 5 files changed, 57 insertions(+), 24 deletions(-) diff --git a/frontend/src/features/games/number-merge/audio.ts b/frontend/src/features/games/number-merge/audio.ts index 05eaa3d..5d193e2 100644 --- a/frontend/src/features/games/number-merge/audio.ts +++ b/frontend/src/features/games/number-merge/audio.ts @@ -9,10 +9,10 @@ type Tone = { } const sounds: Record = { - move: [{ duration: 0.05, frequency: 260, offset: 0, type: 'sine', volume: 0.045 }], + move: [{ duration: 0.065, frequency: 290, offset: 0, type: 'sine', volume: 0.085 }], merge: [ - { duration: 0.09, frequency: 390, offset: 0, type: 'sine', volume: 0.065 }, - { duration: 0.12, frequency: 520, offset: 0.055, type: 'sine', volume: 0.075 }, + { duration: 0.1, frequency: 390, offset: 0, type: 'sine', volume: 0.1 }, + { duration: 0.14, frequency: 540, offset: 0.055, type: 'sine', volume: 0.12 }, ], win: [ { duration: 0.16, frequency: 523.25, offset: 0, type: 'sine', volume: 0.08 }, @@ -35,24 +35,43 @@ export function playNumberMergeSound( ): void { if (!enabled) return - audioContext ??= new AudioContext() - if (audioContext.state === 'suspended') void audioContext.resume() - - const now = audioContext.currentTime - for (const tone of sounds[sound]) { - const oscillator = audioContext.createOscillator() - const gain = audioContext.createGain() - const start = now + tone.offset - const end = start + tone.duration - - oscillator.type = tone.type - oscillator.frequency.setValueAtTime(tone.frequency, start) - gain.gain.setValueAtTime(0.0001, start) - gain.gain.exponentialRampToValueAtTime(tone.volume, start + 0.012) - gain.gain.exponentialRampToValueAtTime(0.0001, end) - oscillator.connect(gain) - gain.connect(audioContext.destination) - oscillator.start(start) - oscillator.stop(end) + const AudioContextConstructor = + window.AudioContext ?? + (window as typeof window & { webkitAudioContext?: typeof AudioContext }) + .webkitAudioContext + if (!AudioContextConstructor) { + console.error('[2048 audio] Web Audio is unavailable') + return } + + audioContext ??= new AudioContextConstructor() + const context = audioContext + + const scheduleSound = (): void => { + const now = context.currentTime + 0.02 + for (const tone of sounds[sound]) { + const oscillator = context.createOscillator() + const gain = context.createGain() + const start = now + tone.offset + const end = start + tone.duration + + oscillator.type = tone.type + oscillator.frequency.setValueAtTime(tone.frequency, start) + gain.gain.setValueAtTime(0.0001, start) + gain.gain.linearRampToValueAtTime(tone.volume, start + 0.012) + gain.gain.exponentialRampToValueAtTime(0.0001, end) + oscillator.connect(gain).connect(context.destination) + oscillator.start(start) + oscillator.stop(end + 0.01) + } + } + + if (context.state === 'running') { + scheduleSound() + return + } + + void context.resume().then(scheduleSound).catch((error: unknown) => { + console.error('[2048 audio] Failed to start sound', error) + }) } diff --git a/frontend/src/stores/phone.ts b/frontend/src/stores/phone.ts index f7e8c31..63e7c84 100644 --- a/frontend/src/stores/phone.ts +++ b/frontend/src/stores/phone.ts @@ -197,6 +197,8 @@ const defaultLocales: LocaleTree = { gameOverTitle: 'No more moves', highest: 'Highest Tile', howToBody: 'Swipe to combine matching tiles. Each pair becomes one larger tile.', + howToExample: '2 + 2 = 4 · 4 + 4 = 8 · … · 1024 + 1024 = 2048', + howToGoal: 'Goal: create the 2048 tile before the board has no moves left.', howToTitle: 'How to play', keepPlaying: 'Keep Playing', mainMenu: 'Main Menu', diff --git a/frontend/src/views/apps/NumberMergeApp.vue b/frontend/src/views/apps/NumberMergeApp.vue index 86ce4ec..40930be 100644 --- a/frontend/src/views/apps/NumberMergeApp.vue +++ b/frontend/src/views/apps/NumberMergeApp.vue @@ -213,6 +213,8 @@ onBeforeUnmount(() => window.removeEventListener('keydown', handleKeydown))
{{ phone.t('Apps.numberMerge.howToTitle') }}

{{ phone.t('Apps.numberMerge.howToBody') }}

+
{{ phone.t('Apps.numberMerge.howToExample') }}
+ {{ phone.t('Apps.numberMerge.howToGoal') }}
@@ -497,6 +499,14 @@ onBeforeUnmount(() => window.removeEventListener('keydown', handleKeydown)) .number-merge-how-to strong { font-size: 10px; text-transform: uppercase; } .number-merge-how-to p { margin: 3px 0 0; font-size: 9px; line-height: 1.35; } +.number-merge-how-to div { + margin: 6px 0 3px; + color: #a7472d; + font-size: 11px; + font-weight: 900; + letter-spacing: -0.2px; +} +.number-merge-how-to small { display: block; color: #8b6559; font-size: 8px; line-height: 1.25; } .number-merge-game { padding-top: 5px; } diff --git a/sky_phone/config/locales/en.lua b/sky_phone/config/locales/en.lua index acae27a..e5b43ae 100644 --- a/sky_phone/config/locales/en.lua +++ b/sky_phone/config/locales/en.lua @@ -89,7 +89,9 @@ Locales["en"] = { }, eyebrow = "Number puzzle", gameOverBody = "No empty spaces or matching neighbours remain.", gameOverTitle = "No more moves", highest = "Highest Tile", - howToBody = "Swipe to combine matching tiles. Each pair becomes one larger tile.", howToTitle = "How to play", + howToBody = "Swipe to combine matching tiles. Each pair becomes one larger tile.", + howToExample = "2 + 2 = 4 · 4 + 4 = 8 · … · 1024 + 1024 = 2048", + howToGoal = "Goal: create the 2048 tile before the board has no moves left.", howToTitle = "How to play", keepPlaying = "Keep Playing", mainMenu = "Main Menu", menuBody = "Slide matching numbers together and work your way up to 2048.", menuTitle = "Build the 2048 tile", mute = "Mute game sounds", newGame = "New Game", score = "Score", diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index 5d187d6..75a4aac 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,7 +4,7 @@ Sky Phone - + From cd0b667d2fbcbbf5c3880f8884d6162db83c19e1 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:49:17 +0200 Subject: [PATCH 006/103] FIX - use packaged 2048 sound effects --- .../assets/audio/number-merge/game-over.wav | Bin 0 -> 54728 bytes .../src/assets/audio/number-merge/merge.wav | Bin 0 -> 22976 bytes .../src/assets/audio/number-merge/move.wav | Bin 0 -> 9304 bytes .../src/assets/audio/number-merge/win.wav | Bin 0 -> 61784 bytes .../src/features/games/number-merge/audio.ts | 91 ++++++------------ 5 files changed, 28 insertions(+), 63 deletions(-) create mode 100644 frontend/src/assets/audio/number-merge/game-over.wav create mode 100644 frontend/src/assets/audio/number-merge/merge.wav create mode 100644 frontend/src/assets/audio/number-merge/move.wav create mode 100644 frontend/src/assets/audio/number-merge/win.wav diff --git a/frontend/src/assets/audio/number-merge/game-over.wav b/frontend/src/assets/audio/number-merge/game-over.wav new file mode 100644 index 0000000000000000000000000000000000000000..5d52a8c1f4b241add0d9f744990ce9bee8db6eb1 GIT binary patch literal 54728 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 QGXnpNz&|7K|2qQz2VJWPX8-^I literal 0 HcmV?d00001 diff --git a/frontend/src/assets/audio/number-merge/merge.wav b/frontend/src/assets/audio/number-merge/merge.wav new file mode 100644 index 0000000000000000000000000000000000000000..28646652560e25395cc7df89e67e1be007e8a411 GIT binary patch literal 22976 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 EKW9cmqW}N^ literal 0 HcmV?d00001 diff --git a/frontend/src/assets/audio/number-merge/move.wav b/frontend/src/assets/audio/number-merge/move.wav new file mode 100644 index 0000000000000000000000000000000000000000..12f53c814c441af52984e2e824c076050e87eca3 GIT binary patch literal 9304 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%0D6eAf6>#Rotp9u0+-qHvMSR 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 literal 0 HcmV?d00001 diff --git a/frontend/src/features/games/number-merge/audio.ts b/frontend/src/features/games/number-merge/audio.ts index 5d193e2..23ab2f1 100644 --- a/frontend/src/features/games/number-merge/audio.ts +++ b/frontend/src/features/games/number-merge/audio.ts @@ -1,77 +1,42 @@ +import gameOverUrl from '@/assets/audio/number-merge/game-over.wav?url' +import mergeUrl from '@/assets/audio/number-merge/merge.wav?url' +import moveUrl from '@/assets/audio/number-merge/move.wav?url' +import winUrl from '@/assets/audio/number-merge/win.wav?url' + export type NumberMergeSound = 'game-over' | 'merge' | 'move' | 'win' -type Tone = { - duration: number - frequency: number - offset: number - type: OscillatorType - volume: number +const soundUrls: Record = { + 'game-over': gameOverUrl, + merge: mergeUrl, + move: moveUrl, + win: winUrl, } +const playerPools = new Map() -const sounds: Record = { - move: [{ duration: 0.065, frequency: 290, offset: 0, type: 'sine', volume: 0.085 }], - merge: [ - { duration: 0.1, frequency: 390, offset: 0, type: 'sine', volume: 0.1 }, - { duration: 0.14, frequency: 540, offset: 0.055, type: 'sine', volume: 0.12 }, - ], - win: [ - { duration: 0.16, frequency: 523.25, offset: 0, type: 'sine', volume: 0.08 }, - { duration: 0.16, frequency: 659.25, offset: 0.1, type: 'sine', volume: 0.085 }, - { duration: 0.16, frequency: 783.99, offset: 0.2, type: 'sine', volume: 0.09 }, - { duration: 0.3, frequency: 1046.5, offset: 0.3, type: 'sine', volume: 0.1 }, - ], - 'game-over': [ - { duration: 0.14, frequency: 260, offset: 0, type: 'triangle', volume: 0.065 }, - { duration: 0.18, frequency: 195, offset: 0.12, type: 'triangle', volume: 0.06 }, - { duration: 0.22, frequency: 146, offset: 0.26, type: 'triangle', volume: 0.055 }, - ], +function getPlayers(sound: NumberMergeSound): HTMLAudioElement[] { + const existing = playerPools.get(sound) + if (existing) return existing + + const players = Array.from({ length: 3 }, () => { + const player = new Audio(soundUrls[sound]) + player.preload = 'auto' + player.volume = 0.82 + return player + }) + playerPools.set(sound, players) + return players } -let audioContext: AudioContext | undefined - export function playNumberMergeSound( sound: NumberMergeSound, enabled: boolean, ): void { if (!enabled) return - const AudioContextConstructor = - window.AudioContext ?? - (window as typeof window & { webkitAudioContext?: typeof AudioContext }) - .webkitAudioContext - if (!AudioContextConstructor) { - console.error('[2048 audio] Web Audio is unavailable') - return - } - - audioContext ??= new AudioContextConstructor() - const context = audioContext - - const scheduleSound = (): void => { - const now = context.currentTime + 0.02 - for (const tone of sounds[sound]) { - const oscillator = context.createOscillator() - const gain = context.createGain() - const start = now + tone.offset - const end = start + tone.duration - - oscillator.type = tone.type - oscillator.frequency.setValueAtTime(tone.frequency, start) - gain.gain.setValueAtTime(0.0001, start) - gain.gain.linearRampToValueAtTime(tone.volume, start + 0.012) - gain.gain.exponentialRampToValueAtTime(0.0001, end) - oscillator.connect(gain).connect(context.destination) - oscillator.start(start) - oscillator.stop(end + 0.01) - } - } - - if (context.state === 'running') { - scheduleSound() - return - } - - void context.resume().then(scheduleSound).catch((error: unknown) => { - console.error('[2048 audio] Failed to start sound', error) + const players = getPlayers(sound) + const player = players.find((candidate) => candidate.paused) ?? players[0] + player.currentTime = 0 + void player.play().catch((error: unknown) => { + console.error(`[2048 audio] Failed to play ${sound}`, error) }) } From 987a5fa3347320e811160a8f562d8dc68035ff8e Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:00:45 +0200 Subject: [PATCH 007/103] ADD - minesweeper phone game --- .../src/assets/audio/minesweeper/flag.wav | Bin 0 -> 16360 bytes .../src/assets/audio/minesweeper/mine.wav | Bin 0 -> 32678 bytes .../src/assets/audio/minesweeper/reveal.wav | Bin 0 -> 10628 bytes frontend/src/assets/audio/minesweeper/win.wav | Bin 0 -> 57374 bytes .../src/assets/img/app-icons/minesweeper.webp | Bin 0 -> 37362 bytes frontend/src/config/apps.test.ts | 6 + frontend/src/config/apps.ts | 15 + .../src/features/games/minesweeper/audio.ts | 42 ++ .../features/games/minesweeper/engine.test.ts | 123 +++++ .../src/features/games/minesweeper/engine.ts | 260 ++++++++++ .../src/features/games/minesweeper/store.ts | 140 ++++++ .../src/features/games/minesweeper/types.ts | 32 ++ frontend/src/stores/phone.ts | 31 ++ frontend/src/types/apps.ts | 1 + frontend/src/utils/preferences.ts | 1 + frontend/src/views/apps/MinesweeperApp.vue | 475 ++++++++++++++++++ sky_phone/config/locales/en.lua | 13 + 17 files changed, 1139 insertions(+) create mode 100644 frontend/src/assets/audio/minesweeper/flag.wav create mode 100644 frontend/src/assets/audio/minesweeper/mine.wav create mode 100644 frontend/src/assets/audio/minesweeper/reveal.wav create mode 100644 frontend/src/assets/audio/minesweeper/win.wav create mode 100644 frontend/src/assets/img/app-icons/minesweeper.webp create mode 100644 frontend/src/features/games/minesweeper/audio.ts create mode 100644 frontend/src/features/games/minesweeper/engine.test.ts create mode 100644 frontend/src/features/games/minesweeper/engine.ts create mode 100644 frontend/src/features/games/minesweeper/store.ts create mode 100644 frontend/src/features/games/minesweeper/types.ts create mode 100644 frontend/src/views/apps/MinesweeperApp.vue diff --git a/frontend/src/assets/audio/minesweeper/flag.wav b/frontend/src/assets/audio/minesweeper/flag.wav new file mode 100644 index 0000000000000000000000000000000000000000..b9a4f728868c0e4bafa5b0f82fd19fd2450dcd1e GIT binary patch literal 16360 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 z

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 literal 0 HcmV?d00001 diff --git a/frontend/src/config/apps.test.ts b/frontend/src/config/apps.test.ts index fa391e1..7c63ac4 100644 --- a/frontend/src/config/apps.test.ts +++ b/frontend/src/config/apps.test.ts @@ -44,6 +44,12 @@ describe('app registry', () => { labelKey: 'Apps.numberMerge.name', route: '/apps/number-merge', }) + expect(PHONE_APPS.find((app) => app.id === 'minesweeper')).toMatchObject({ + dockOrder: null, + gridOrder: 14, + labelKey: 'Apps.minesweeper.name', + route: '/apps/minesweeper', + }) expect( PHONE_APPS.filter((app) => app.dockOrder !== null) .sort((a, b) => (a.dockOrder ?? 0) - (b.dockOrder ?? 0)) diff --git a/frontend/src/config/apps.ts b/frontend/src/config/apps.ts index 72cd43f..edc9bda 100644 --- a/frontend/src/config/apps.ts +++ b/frontend/src/config/apps.ts @@ -1,5 +1,6 @@ import { Calculator, + Bomb, Camera, Clock3, Gamepad2, @@ -29,6 +30,7 @@ import settingsIcon from '@/assets/img/app-icons/settings.webp' import snakeIcon from '@/assets/img/app-icons/snake.webp' import memoryIcon from '@/assets/img/app-icons/memory.webp' import numberMergeIcon from '@/assets/img/app-icons/number-merge.webp' +import minesweeperIcon from '@/assets/img/app-icons/minesweeper.webp' import weatherIcon from '@/assets/img/app-icons/weather.webp' import type { PhoneAppDefinition, PhoneAppId } from '@/types/apps' @@ -215,6 +217,19 @@ export const PHONE_APPS: PhoneAppDefinition[] = [ labelKey: 'Apps.numberMerge.name', route: '/apps/number-merge', }, + { + component: markRaw( + defineAsyncComponent(() => import('@/views/apps/MinesweeperApp.vue')), + ), + dockOrder: null, + gridOrder: 14, + icon: markRaw(Bomb), + iconClass: 'app-icon--minesweeper', + iconImage: minesweeperIcon, + id: 'minesweeper', + labelKey: 'Apps.minesweeper.name', + route: '/apps/minesweeper', + }, ] export const PHONE_APP_IDS = PHONE_APPS.map((app) => app.id) diff --git a/frontend/src/features/games/minesweeper/audio.ts b/frontend/src/features/games/minesweeper/audio.ts new file mode 100644 index 0000000..19f6cab --- /dev/null +++ b/frontend/src/features/games/minesweeper/audio.ts @@ -0,0 +1,42 @@ +import flagUrl from '@/assets/audio/minesweeper/flag.wav?url' +import mineUrl from '@/assets/audio/minesweeper/mine.wav?url' +import revealUrl from '@/assets/audio/minesweeper/reveal.wav?url' +import winUrl from '@/assets/audio/minesweeper/win.wav?url' + +export type MinesweeperSound = 'flag' | 'mine' | 'reveal' | 'win' + +const soundUrls: Record = { + flag: flagUrl, + mine: mineUrl, + reveal: revealUrl, + win: winUrl, +} +const playerPools = new Map() + +function getPlayers(sound: MinesweeperSound): HTMLAudioElement[] { + const existing = playerPools.get(sound) + if (existing) return existing + + const players = Array.from({ length: 3 }, () => { + const player = new Audio(soundUrls[sound]) + player.preload = 'auto' + player.volume = 0.82 + return player + }) + playerPools.set(sound, players) + return players +} + +export function playMinesweeperSound( + sound: MinesweeperSound, + enabled: boolean, +): void { + if (!enabled) return + + const players = getPlayers(sound) + const player = players.find((candidate) => candidate.paused) ?? players[0] + player.currentTime = 0 + void player.play().catch((error: unknown) => { + console.error(`[Minesweeper audio] Failed to play ${sound}`, error) + }) +} diff --git a/frontend/src/features/games/minesweeper/engine.test.ts b/frontend/src/features/games/minesweeper/engine.test.ts new file mode 100644 index 0000000..d6529e0 --- /dev/null +++ b/frontend/src/features/games/minesweeper/engine.test.ts @@ -0,0 +1,123 @@ +import { describe, expect, it } from 'vitest' + +import { + createMinesweeperGame, + isMinesweeperGameState, + revealMinesweeperCell, + toggleMinesweeperFlag, +} from './engine' +import type { MinesweeperGameState } from './types' + +const chooseFirst = () => 0 + +function preparedGame( + width: number, + height: number, + mines: number[], +): MinesweeperGameState { + const state = createMinesweeperGame('quick') + const mineSet = new Set(mines) + return { + ...state, + cells: state.cells.map((cell) => ({ + ...cell, + adjacentMines: state.cells.filter( + (candidate) => + mineSet.has(candidate.id) && + Math.abs(candidate.row - cell.row) <= 1 && + Math.abs(candidate.column - cell.column) <= 1 && + candidate.id !== cell.id, + ).length, + isMine: mineSet.has(cell.id), + })), + height, + mineCount: mines.length, + status: 'playing', + width, + } +} + +describe('minesweeper engine', () => { + it('creates the configured phone boards', () => { + const game = createMinesweeperGame('classic') + expect(game.width).toBe(7) + expect(game.height).toBe(9) + expect(game.mineCount).toBe(11) + expect(game.cells).toHaveLength(63) + }) + + it('places the exact mine count outside the protected first area', () => { + const original = createMinesweeperGame('quick') + const result = revealMinesweeperCell(original, 14, chooseFirst) + const protectedIds = [7, 8, 9, 13, 14, 15, 19, 20, 21] + expect(result.state.cells.filter((cell) => cell.isMine)).toHaveLength(7) + expect( + result.state.cells + .filter((cell) => protectedIds.includes(cell.id)) + .every((cell) => !cell.isMine), + ).toBe(true) + }) + + it('calculates neighbour counts from the placed mines', () => { + const result = revealMinesweeperCell( + createMinesweeperGame('quick'), + 0, + chooseFirst, + ) + for (const cell of result.state.cells) { + const actual = result.state.cells.filter( + (candidate) => + candidate.isMine && + Math.abs(candidate.row - cell.row) <= 1 && + Math.abs(candidate.column - cell.column) <= 1 && + candidate.id !== cell.id, + ).length + expect(cell.adjacentMines).toBe(actual) + } + }) + + it('reveals an empty area and its numbered boundary but no mine', () => { + const game = preparedGame(6, 8, [0, 5, 42, 47, 43, 44, 45]) + const result = revealMinesweeperCell(game, 20) + expect(result.revealedCount).toBeGreaterThan(1) + expect(result.state.cells.some((cell) => cell.isMine && cell.isRevealed)).toBe(false) + expect( + result.state.cells.some( + (cell) => cell.isRevealed && cell.adjacentMines > 0, + ), + ).toBe(true) + }) + + it('does not reveal a flagged cell', () => { + const game = preparedGame(6, 8, [47]) + const flagged = toggleMinesweeperFlag(game, 10).state + const result = revealMinesweeperCell(flagged, 10) + expect(result.changed).toBe(false) + expect(result.state.cells[10].isRevealed).toBe(false) + }) + + it('reveals all mines and records the exploded cell on loss', () => { + const game = preparedGame(6, 8, [1, 47]) + const result = revealMinesweeperCell(game, 1) + expect(result.state.status).toBe('lost') + expect(result.state.explodedCellId).toBe(1) + expect(result.state.cells.filter((cell) => cell.isMine).every((cell) => cell.isRevealed)).toBe(true) + }) + + it('wins when every safe field is revealed', () => { + let game = preparedGame(6, 8, [47]) + for (const cell of game.cells) { + if (!cell.isMine && !game.cells[cell.id].isRevealed) { + game = revealMinesweeperCell(game, cell.id).state + } + } + expect(game.status).toBe('won') + expect(game.cells[47].isFlagged).toBe(true) + }) + + it('validates persisted games', () => { + const game = createMinesweeperGame('expert') + expect(isMinesweeperGameState(game)).toBe(true) + expect(isMinesweeperGameState({ ...game, mineCount: 99 })).toBe(false) + }) +}) diff --git a/frontend/src/features/games/minesweeper/engine.ts b/frontend/src/features/games/minesweeper/engine.ts new file mode 100644 index 0000000..674c5d2 --- /dev/null +++ b/frontend/src/features/games/minesweeper/engine.ts @@ -0,0 +1,260 @@ +import type { + MinesweeperActionResult, + MinesweeperCell, + MinesweeperDifficulty, + MinesweeperGameState, +} from './types' + +export const MINESWEEPER_DIFFICULTIES: Record< + MinesweeperDifficulty, + { height: number; mines: number; width: number } +> = { + quick: { height: 8, mines: 7, width: 6 }, + classic: { height: 9, mines: 11, width: 7 }, + expert: { height: 10, mines: 16, width: 8 }, +} + +function neighbours( + cell: MinesweeperCell, + width: number, + height: number, +): number[] { + const ids: number[] = [] + for (let rowOffset = -1; rowOffset <= 1; rowOffset += 1) { + for (let columnOffset = -1; columnOffset <= 1; columnOffset += 1) { + if (rowOffset === 0 && columnOffset === 0) continue + const row = cell.row + rowOffset + const column = cell.column + columnOffset + if (row >= 0 && row < height && column >= 0 && column < width) { + ids.push(row * width + column) + } + } + } + return ids +} + +function placeMines( + state: MinesweeperGameState, + firstCellId: number, + random: () => number, +): MinesweeperGameState { + const firstCell = state.cells[firstCellId] + const protectedIds = new Set([ + firstCellId, + ...neighbours(firstCell, state.width, state.height), + ]) + const candidates = state.cells + .map((cell) => cell.id) + .filter((id) => !protectedIds.has(id)) + const mineIds = new Set() + + for (let count = 0; count < state.mineCount; count += 1) { + const candidateIndex = Math.min( + candidates.length - 1, + Math.floor(random() * candidates.length), + ) + const [mineId] = candidates.splice(candidateIndex, 1) + mineIds.add(mineId) + } + + const cells = state.cells.map((cell) => ({ + ...cell, + isMine: mineIds.has(cell.id), + })) + return { + ...state, + cells: cells.map((cell) => ({ + ...cell, + adjacentMines: neighbours(cell, state.width, state.height).filter( + (id) => mineIds.has(id), + ).length, + })), + status: 'playing', + } +} + +export function createMinesweeperGame( + difficulty: MinesweeperDifficulty, +): MinesweeperGameState { + const config = MINESWEEPER_DIFFICULTIES[difficulty] + return { + cells: Array.from({ length: config.width * config.height }, (_, id) => ({ + adjacentMines: 0, + column: id % config.width, + id, + isFlagged: false, + isMine: false, + isRevealed: false, + row: Math.floor(id / config.width), + })), + difficulty, + explodedCellId: null, + height: config.height, + mineCount: config.mines, + status: 'ready', + width: config.width, + } +} + +export function toggleMinesweeperFlag( + state: MinesweeperGameState, + cellId: number, +): MinesweeperActionResult { + if (state.status === 'lost' || state.status === 'won') { + return { changed: false, revealedCount: 0, state } + } + + const cell = state.cells[cellId] + if (!cell || cell.isRevealed) { + return { changed: false, revealedCount: 0, state } + } + + const flagCount = state.cells.filter((candidate) => candidate.isFlagged).length + if (!cell.isFlagged && flagCount >= state.mineCount) { + return { changed: false, revealedCount: 0, state } + } + + return { + changed: true, + revealedCount: 0, + state: { + ...state, + cells: state.cells.map((candidate) => + candidate.id === cellId + ? { ...candidate, isFlagged: !candidate.isFlagged } + : candidate, + ), + }, + } +} + +export function revealMinesweeperCell( + originalState: MinesweeperGameState, + cellId: number, + random: () => number = Math.random, +): MinesweeperActionResult { + if (originalState.status === 'lost' || originalState.status === 'won') { + return { changed: false, revealedCount: 0, state: originalState } + } + + const originalCell = originalState.cells[cellId] + if (!originalCell || originalCell.isFlagged || originalCell.isRevealed) { + return { changed: false, revealedCount: 0, state: originalState } + } + + const state = + originalState.status === 'ready' + ? placeMines(originalState, cellId, random) + : originalState + const selectedCell = state.cells[cellId] + + if (selectedCell.isMine) { + return { + changed: true, + revealedCount: 0, + state: { + ...state, + cells: state.cells.map((cell) => + cell.isMine ? { ...cell, isRevealed: true } : cell, + ), + explodedCellId: cellId, + status: 'lost', + }, + } + } + + const cells = state.cells.map((cell) => ({ ...cell })) + const queue = [cellId] + const visited = new Set() + let revealedCount = 0 + + while (queue.length > 0) { + const currentId = queue.shift() as number + if (visited.has(currentId)) continue + visited.add(currentId) + + const cell = cells[currentId] + if (cell.isFlagged || cell.isMine || cell.isRevealed) continue + cell.isRevealed = true + revealedCount += 1 + + if (cell.adjacentMines === 0) { + for (const neighbourId of neighbours(cell, state.width, state.height)) { + if (!visited.has(neighbourId) && !cells[neighbourId].isMine) { + queue.push(neighbourId) + } + } + } + } + + const safeCellCount = cells.length - state.mineCount + const totalRevealed = cells.filter( + (cell) => cell.isRevealed && !cell.isMine, + ).length + const won = totalRevealed === safeCellCount + + return { + changed: true, + revealedCount, + state: { + ...state, + cells: won + ? cells.map((cell) => + cell.isMine ? { ...cell, isFlagged: true } : cell, + ) + : cells, + status: won ? 'won' : 'playing', + }, + } +} + +export function isMinesweeperGameState( + value: unknown, +): value is MinesweeperGameState { + if (!value || typeof value !== 'object') return false + const game = value as Partial + if ( + !['quick', 'classic', 'expert'].includes(game.difficulty ?? '') || + !['ready', 'playing', 'won', 'lost'].includes(game.status ?? '') || + !Number.isInteger(game.width) || + !Number.isInteger(game.height) || + !Number.isInteger(game.mineCount) || + !Array.isArray(game.cells) || + game.cells.length !== (game.width ?? 0) * (game.height ?? 0) || + (game.explodedCellId !== null && !Number.isInteger(game.explodedCellId)) + ) { + return false + } + + const config = MINESWEEPER_DIFFICULTIES[game.difficulty as MinesweeperDifficulty] + if ( + game.width !== config.width || + game.height !== config.height || + game.mineCount !== config.mines + ) { + return false + } + + for (let id = 0; id < game.cells.length; id += 1) { + const cell = game.cells[id] as Partial + if ( + !cell || + cell.id !== id || + cell.row !== Math.floor(id / config.width) || + cell.column !== id % config.width || + !Number.isInteger(cell.adjacentMines) || + (cell.adjacentMines ?? -1) < 0 || + (cell.adjacentMines ?? 9) > 8 || + typeof cell.isFlagged !== 'boolean' || + typeof cell.isMine !== 'boolean' || + typeof cell.isRevealed !== 'boolean' + ) { + return false + } + } + + const placedMineCount = game.cells.filter((cell) => cell.isMine).length + return game.status === 'ready' + ? placedMineCount === 0 + : placedMineCount === game.mineCount +} diff --git a/frontend/src/features/games/minesweeper/store.ts b/frontend/src/features/games/minesweeper/store.ts new file mode 100644 index 0000000..587686f --- /dev/null +++ b/frontend/src/features/games/minesweeper/store.ts @@ -0,0 +1,140 @@ +import { defineStore } from 'pinia' + +import { useGamesStore } from '@/features/games/store' + +import { + createMinesweeperGame, + isMinesweeperGameState, + revealMinesweeperCell, + toggleMinesweeperFlag, +} from './engine' +import type { + MinesweeperActionResult, + MinesweeperBest, + MinesweeperDifficulty, + MinesweeperGameState, +} from './types' + +type MinesweeperSave = { + best: Partial> + elapsedMs: number + game: MinesweeperGameState | null + soundEnabled: boolean +} + +function isBest(value: unknown): value is MinesweeperBest { + return ( + !!value && + typeof value === 'object' && + typeof (value as Partial).timeMs === 'number' && + ((value as Partial).timeMs ?? -1) >= 0 + ) +} + +export const useMinesweeperStore = defineStore('minesweeper', { + state: () => ({ + best: {} as Partial>, + elapsedMs: 0, + game: null as MinesweeperGameState | null, + hydrated: false, + menuOpen: true, + soundEnabled: true, + startedAt: null as number | null, + }), + actions: { + hydrate(): void { + if (this.hydrated) return + + const saved = useGamesStore().readGame>( + 'minesweeper', + ) + for (const difficulty of ['quick', 'classic', 'expert'] as const) { + if (isBest(saved?.best?.[difficulty])) { + this.best[difficulty] = saved.best[difficulty] + } + } + this.elapsedMs = + typeof saved?.elapsedMs === 'number' && saved.elapsedMs >= 0 + ? saved.elapsedMs + : 0 + this.game = isMinesweeperGameState(saved?.game) + ? structuredClone(saved.game) + : null + if (typeof saved?.soundEnabled === 'boolean') { + this.soundEnabled = saved.soundEnabled + } + this.hydrated = true + }, + persist(): void { + useGamesStore().saveGame('minesweeper', { + best: this.best, + elapsedMs: this.elapsedMs, + game: this.game, + soundEnabled: this.soundEnabled, + } satisfies MinesweeperSave) + }, + start(difficulty: MinesweeperDifficulty): void { + this.game = createMinesweeperGame(difficulty) + this.elapsedMs = 0 + this.menuOpen = false + this.startedAt = null + this.persist() + }, + resumeGame(): void { + if (!this.game) return + this.menuOpen = false + if (this.game.status === 'playing') this.startedAt = Date.now() + }, + showMenu(): void { + this.pause() + this.menuOpen = true + this.persist() + }, + updateElapsed(now = Date.now()): void { + if (this.startedAt === null) return + this.elapsedMs += now - this.startedAt + this.startedAt = now + }, + pause(): void { + this.updateElapsed() + this.startedAt = null + }, + reveal(cellId: number): MinesweeperActionResult | null { + if (!this.game) return null + + const previousStatus = this.game.status + const actionStartedAt = Date.now() + const result = revealMinesweeperCell(this.game, cellId) + if (!result.changed) return result + + this.game = result.state + if (previousStatus === 'ready') { + this.startedAt = actionStartedAt + } + if (result.state.status === 'won' || result.state.status === 'lost') { + this.pause() + if (result.state.status === 'won') { + const current = this.best[result.state.difficulty] + if (!current || this.elapsedMs < current.timeMs) { + this.best[result.state.difficulty] = { timeMs: this.elapsedMs } + } + } + } + this.persist() + return result + }, + toggleFlag(cellId: number): MinesweeperActionResult | null { + if (!this.game) return null + const result = toggleMinesweeperFlag(this.game, cellId) + if (result.changed) { + this.game = result.state + this.persist() + } + return result + }, + setSoundEnabled(enabled: boolean): void { + this.soundEnabled = enabled + this.persist() + }, + }, +}) diff --git a/frontend/src/features/games/minesweeper/types.ts b/frontend/src/features/games/minesweeper/types.ts new file mode 100644 index 0000000..a233f6a --- /dev/null +++ b/frontend/src/features/games/minesweeper/types.ts @@ -0,0 +1,32 @@ +export type MinesweeperDifficulty = 'classic' | 'expert' | 'quick' +export type MinesweeperStatus = 'lost' | 'playing' | 'ready' | 'won' + +export type MinesweeperCell = { + adjacentMines: number + column: number + id: number + isFlagged: boolean + isMine: boolean + isRevealed: boolean + row: number +} + +export type MinesweeperGameState = { + cells: MinesweeperCell[] + difficulty: MinesweeperDifficulty + explodedCellId: number | null + height: number + mineCount: number + status: MinesweeperStatus + width: number +} + +export type MinesweeperBest = { + timeMs: number +} + +export type MinesweeperActionResult = { + changed: boolean + revealedCount: number + state: MinesweeperGameState +} diff --git a/frontend/src/stores/phone.ts b/frontend/src/stores/phone.ts index 63e7c84..b4a5b76 100644 --- a/frontend/src/stores/phone.ts +++ b/frontend/src/stores/phone.ts @@ -212,6 +212,37 @@ const defaultLocales: LocaleTree = { wonBody: 'You reached the legendary tile. Continue climbing or begin again.', wonTitle: 'You made 2048!', }, + minesweeper: { + name: 'Minesweeper', + backToMenu: 'Back to game menu', + board: 'Minesweeper board', + chooseBody: + 'Reveal every safe field. Numbers show how many mines touch that field.', + chooseTitle: 'Choose a minefield', + difficulties: { classic: 'Classic', expert: 'Expert', quick: 'Quick' }, + emptyCell: 'Revealed empty field', + eyebrow: 'Mine puzzle', + flaggedCell: 'Flagged field', + gameHint: 'Tap to reveal · Hold or right-click to flag', + hiddenCell: 'Hidden field', + longPressHint: 'Tap to reveal · Hold to place a flag', + lostBody: + 'A mine was hidden there. Mark suspicious fields and try again.', + lostTitle: 'Mine triggered', + mainMenu: 'Main Menu', + mineCell: 'Revealed mine', + mines: 'Mines', + mute: 'Mute game sounds', + noBest: 'No best time yet', + numberCell: 'Revealed field with {count} adjacent mines', + playAgain: 'Play Again', + restart: 'Restart', + resume: 'Continue Game', + time: 'Time', + unmute: 'Turn on game sounds', + wonBody: 'Minefield cleared in {time}.', + wonTitle: 'Field cleared!', + }, map: { name: 'Map', controls: 'Map controls', diff --git a/frontend/src/types/apps.ts b/frontend/src/types/apps.ts index 3ab725a..85ebee0 100644 --- a/frontend/src/types/apps.ts +++ b/frontend/src/types/apps.ts @@ -15,6 +15,7 @@ export type PhoneAppId = | 'snake' | 'memory' | 'number-merge' + | 'minesweeper' export type AppLaunchOrigin = { borderRadius: number diff --git a/frontend/src/utils/preferences.ts b/frontend/src/utils/preferences.ts index f9a8142..65a452e 100644 --- a/frontend/src/utils/preferences.ts +++ b/frontend/src/utils/preferences.ts @@ -53,6 +53,7 @@ const DEFAULT_APP_NOTIFICATIONS: Record< snake: { enabled: true, sounds: true }, memory: { enabled: true, sounds: true }, 'number-merge': { enabled: true, sounds: true }, + minesweeper: { enabled: true, sounds: true }, camera: { enabled: true, sounds: true }, clock: { enabled: true, sounds: true }, weather: { enabled: true, sounds: true }, diff --git a/frontend/src/views/apps/MinesweeperApp.vue b/frontend/src/views/apps/MinesweeperApp.vue new file mode 100644 index 0000000..37fb4c9 --- /dev/null +++ b/frontend/src/views/apps/MinesweeperApp.vue @@ -0,0 +1,475 @@ + + + + + diff --git a/sky_phone/config/locales/en.lua b/sky_phone/config/locales/en.lua index e5b43ae..d1a8087 100644 --- a/sky_phone/config/locales/en.lua +++ b/sky_phone/config/locales/en.lua @@ -99,6 +99,19 @@ Locales["en"] = { unmute = "Turn on game sounds", wonBody = "You reached the legendary tile. Continue climbing or begin again.", wonTitle = "You made 2048!", }, + minesweeper = { + name = "Minesweeper", backToMenu = "Back to game menu", board = "Minesweeper board", + chooseBody = "Reveal every safe field. Numbers show how many mines touch that field.", + chooseTitle = "Choose a minefield", difficulties = { classic = "Classic", expert = "Expert", quick = "Quick" }, + emptyCell = "Revealed empty field", eyebrow = "Mine puzzle", flaggedCell = "Flagged field", + gameHint = "Tap to reveal · Hold or right-click to flag", hiddenCell = "Hidden field", + longPressHint = "Tap to reveal · Hold to place a flag", + lostBody = "A mine was hidden there. Mark suspicious fields and try again.", lostTitle = "Mine triggered", + mainMenu = "Main Menu", mineCell = "Revealed mine", mines = "Mines", mute = "Mute game sounds", + noBest = "No best time yet", numberCell = "Revealed field with {count} adjacent mines", + playAgain = "Play Again", restart = "Restart", resume = "Continue Game", time = "Time", + unmute = "Turn on game sounds", wonBody = "Minefield cleared in {time}.", wonTitle = "Field cleared!", + }, camera = { name = "Camera", shutter = "Take photo", flip = "Flip camera", flash = "Toggle flash", controls = "Camera controls", modes = { timelapse = "Timelapse", slowMo = "Slow-Mo", cinematic = "Cinematic", video = "Video", photo = "Photo", portrait = "Portrait", pano = "Pano" }, From 3dd5c90a729b60ca64408cd0426b5d868277c1f7 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:06:15 +0200 Subject: [PATCH 008/103] FIX - restore game menu navigation --- frontend/src/components/PhoneHomeIndicator.vue | 3 ++- frontend/src/views/apps/MinesweeperApp.vue | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/PhoneHomeIndicator.vue b/frontend/src/components/PhoneHomeIndicator.vue index c983da4..9618d40 100644 --- a/frontend/src/components/PhoneHomeIndicator.vue +++ b/frontend/src/components/PhoneHomeIndicator.vue @@ -19,7 +19,8 @@ function goHome(): void { :class="{ 'phone-home-indicator--interactive': isApp }" type="button" :aria-label="phone.t('Common.home')" - @click="goHome" + @pointerdown.stop="goHome" + @click.stop="goHome" > diff --git a/frontend/src/views/apps/MinesweeperApp.vue b/frontend/src/views/apps/MinesweeperApp.vue index 37fb4c9..47cd3d2 100644 --- a/frontend/src/views/apps/MinesweeperApp.vue +++ b/frontend/src/views/apps/MinesweeperApp.vue @@ -188,7 +188,8 @@ onBeforeUnmount(() => { type="button" class="minesweeper-toolbar__icon" :aria-label="phone.t('Apps.minesweeper.backToMenu')" - @click="minesweeper.showMenu" + @pointerup.stop="minesweeper.showMenu()" + @click.stop="minesweeper.showMenu()" >

@@ -461,7 +467,7 @@ onBeforeUnmount(() => { .minesweeper-overlay h2 { margin: 0; font-size: 24px; } .minesweeper-overlay p { max-width: 220px; margin: -2px 0 4px; color: #bee1dc; font-size: 10px; line-height: 1.35; } .minesweeper-primary, -.minesweeper-secondary { min-width: 155px; min-height: 40px; border-radius: 13px; font-size: 11px; font-weight: 850; } +.minesweeper-secondary { position: relative; z-index: 1; min-width: 155px; min-height: 40px; border-radius: 13px; font-size: 11px; font-weight: 850; pointer-events: auto; } .minesweeper-primary { border: 0; color: #104d51; background: #8ce3d2; } .minesweeper-secondary { border: 1px solid rgb(255 255 255 / 13%); color: #e6faf5; background: rgb(255 255 255 / 7%); } .minesweeper-game__hint { margin: 9px 0 0; color: #668c8c; font-size: 9px; text-align: center; } From abc7010c1107a938e241e45bf95a46c10caf9f11 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:10:47 +0200 Subject: [PATCH 009/103] ENH - amplify minesweeper effects --- .../src/assets/audio/minesweeper/clear.wav | Bin 0 -> 31796 bytes .../src/assets/audio/minesweeper/flag.wav | Bin 16360 -> 21212 bytes .../src/assets/audio/minesweeper/mine.wav | Bin 32678 -> 95300 bytes .../src/assets/audio/minesweeper/reveal.wav | Bin 10628 -> 14156 bytes frontend/src/assets/audio/minesweeper/win.wav | Bin 57374 -> 114704 bytes .../src/features/games/minesweeper/audio.ts | 4 +- frontend/src/views/apps/MinesweeperApp.vue | 289 +++++++++++++++++- 7 files changed, 284 insertions(+), 9 deletions(-) create mode 100644 frontend/src/assets/audio/minesweeper/clear.wav diff --git a/frontend/src/assets/audio/minesweeper/clear.wav b/frontend/src/assets/audio/minesweeper/clear.wav new file mode 100644 index 0000000000000000000000000000000000000000..9fc9064133ebbf7829f80b339f13ffa3dedd229e GIT binary patch literal 31796 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

=?u+Tuz7}bQ&{3AY{pTu8* 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 BN2CA% literal 16360 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 literal 10628 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 = { + clear: clearUrl, flag: flagUrl, mine: mineUrl, reveal: revealUrl, diff --git a/frontend/src/views/apps/MinesweeperApp.vue b/frontend/src/views/apps/MinesweeperApp.vue index 47cd3d2..02fc7c9 100644 --- a/frontend/src/views/apps/MinesweeperApp.vue +++ b/frontend/src/views/apps/MinesweeperApp.vue @@ -7,7 +7,13 @@ import { Volume2, VolumeX, } from 'lucide-vue-next' -import { computed, onBeforeUnmount, onMounted } from 'vue' +import { + computed, + onBeforeUnmount, + onMounted, + ref, + type CSSProperties, +} from 'vue' import { playMinesweeperSound } from '@/features/games/minesweeper/audio' import { MINESWEEPER_DIFFICULTIES } from '@/features/games/minesweeper/engine' @@ -28,10 +34,25 @@ const flagsPlaced = computed( const minesRemaining = computed(() => Math.max(0, (minesweeper.game?.mineCount ?? 0) - flagsPlaced.value), ) +const roundEffect = ref<'explosion' | 'victory' | null>(null) +const resultVisible = ref(true) +const blastStyle = computed(() => { + const currentGame = minesweeper.game + const explodedCell = currentGame?.cells.find( + (cell) => cell.id === currentGame.explodedCellId, + ) + if (!currentGame || !explodedCell) return {} + + return { + '--blast-left': `${((explodedCell.column + 0.5) / currentGame.width) * 100}%`, + '--blast-top': `${((explodedCell.row + 0.5) / currentGame.height) * 100}%`, + } as CSSProperties +}) let clockTimer: ReturnType | undefined let longPressTimer: ReturnType | undefined let suppressNextClick = false let suppressTimer: ReturnType | undefined +let effectTimer: ReturnType | undefined function formatTime(milliseconds: number): string { const seconds = Math.floor(milliseconds / 1000) @@ -64,13 +85,32 @@ function reveal(cellId: number): void { if (!result?.changed) return if (result.state.status === 'lost') { playMinesweeperSound('mine', minesweeper.soundEnabled) + startRoundEffect('explosion', 1050) } else if (result.state.status === 'won') { playMinesweeperSound('win', minesweeper.soundEnabled) + startRoundEffect('victory', 900) } else { - playMinesweeperSound('reveal', minesweeper.soundEnabled) + playMinesweeperSound( + result.revealedCount >= 5 ? 'clear' : 'reveal', + minesweeper.soundEnabled, + ) } } +function startRoundEffect( + effect: 'explosion' | 'victory', + duration: number, +): void { + if (effectTimer) clearTimeout(effectTimer) + roundEffect.value = effect + resultVisible.value = false + effectTimer = setTimeout(() => { + roundEffect.value = null + resultVisible.value = true + effectTimer = undefined + }, duration) +} + function toggleFlag(cellId: number): void { const result = minesweeper.toggleFlag(cellId) if (result?.changed) playMinesweeperSound('flag', minesweeper.soundEnabled) @@ -100,7 +140,13 @@ function toggleSound(): void { } function restart(): void { - if (minesweeper.game) minesweeper.start(minesweeper.game.difficulty) + if (!minesweeper.game) return + + if (effectTimer) clearTimeout(effectTimer) + effectTimer = undefined + roundEffect.value = null + resultVisible.value = true + minesweeper.start(minesweeper.game.difficulty) } minesweeper.hydrate() @@ -112,6 +158,7 @@ onBeforeUnmount(() => { if (clockTimer) clearInterval(clockTimer) if (longPressTimer) clearTimeout(longPressTimer) if (suppressTimer) clearTimeout(suppressTimer) + if (effectTimer) clearTimeout(effectTimer) minesweeper.pause() minesweeper.persist() }) @@ -182,7 +229,14 @@ onBeforeUnmount(() => {

{{ phone.t('Apps.minesweeper.longPressHint') }}

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�H_+v7@nD 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 z

-
+
-
+ + + + +
@@ -397,7 +476,7 @@ onBeforeUnmount(() => { .minesweeper-difficulties small { align-self: start; color: #658a89; font-size: 8px; } .minesweeper-long-press { margin: 0; color: #628887; font-size: 9px; } -.minesweeper-game { padding-top: 5px; } +.minesweeper-game { position: relative; padding-top: 5px; } .minesweeper-toolbar { height: 46px; display: grid; grid-template-columns: 36px 1fr 1fr 36px; align-items: center; gap: 7px; } .minesweeper-toolbar div { display: grid; justify-items: center; line-height: 1.05; } .minesweeper-toolbar span { color: #5a8484; font-size: 8px; font-weight: 800; text-transform: uppercase; } @@ -434,7 +513,7 @@ onBeforeUnmount(() => { .minesweeper-cell--revealed { color: #477078; background: #eef5e9; box-shadow: inset 0 1px 3px rgb(39 83 80 / 12%); animation: minesweeper-reveal 170ms ease-out; } .minesweeper-cell--flagged { color: #f35f58; background: linear-gradient(145deg, #5bcec5, #2ca5a4); } .minesweeper-cell--mine { color: #263c51; background: #dce5dd; } -.minesweeper-cell--exploded { color: #fff; background: #ed6459; animation: minesweeper-explode 350ms ease-out; } +.minesweeper-cell--exploded { color: #fff; background: radial-gradient(circle, #263238 0 31%, #743e37 34% 55%, #df584e 58%); box-shadow: inset 0 0 9px #050b0c, 0 0 12px #ff5a3c; animation: minesweeper-explode 720ms ease-out; } .minesweeper-cell--number-1 { color: #3275ce; } .minesweeper-cell--number-2 { color: #188569; } .minesweeper-cell--number-3 { color: #dd574b; } @@ -445,7 +524,196 @@ onBeforeUnmount(() => { .minesweeper-cell--number-8 { color: #9b4e34; } @keyframes minesweeper-reveal { from { opacity: 0.45; transform: scale(0.84); } to { opacity: 1; transform: scale(1); } } -@keyframes minesweeper-explode { 0% { transform: scale(0.8); } 48% { transform: scale(1.18); } 100% { transform: scale(1); } } +@keyframes minesweeper-explode { 0% { filter: brightness(4); transform: scale(0.7); } 28% { filter: brightness(2); transform: scale(1.32); } 62% { transform: scale(0.9); } 100% { filter: brightness(0.8); transform: scale(1); } } + +.minesweeper-game--exploding .minesweeper-board { + animation: minesweeper-board-shake 680ms cubic-bezier(0.36, 0.07, 0.19, 0.97); +} + +.minesweeper-game--exploding::after { + position: absolute; + z-index: 9; + inset: 46px 0 0; + border-radius: 18px; + background: #ffb341; + content: ""; + pointer-events: none; + animation: minesweeper-screen-flash 520ms ease-out forwards; +} + +.minesweeper-blast { + position: absolute; + z-index: 12; + top: var(--blast-top); + left: var(--blast-left); + width: 0; + height: 0; + pointer-events: none; +} + +.minesweeper-blast__flash, +.minesweeper-blast__ring, +.minesweeper-blast__core, +.minesweeper-blast i { + position: absolute; + top: 0; + left: 0; +} + +.minesweeper-blast__flash { + width: 112px; + height: 112px; + margin: -56px; + border-radius: 50%; + background: radial-gradient(circle, #fff 0 7%, #ffdf68 12%, #ff713d 32%, transparent 68%); + animation: minesweeper-blast-flash 560ms ease-out forwards; +} + +.minesweeper-blast__ring { + width: 32px; + height: 32px; + margin: -16px; + border: 6px solid #ffd166; + border-radius: 50%; + box-shadow: 0 0 18px #ff713d; + animation: minesweeper-blast-ring 720ms ease-out forwards; +} + +.minesweeper-blast__core { + width: 44px; + height: 44px; + display: grid; + place-items: center; + margin: -22px; + border-radius: 50%; + color: #202a32; + background: #f6b846; + filter: drop-shadow(0 0 8px #fff0a6); + animation: minesweeper-blast-core 620ms ease-out forwards; +} + +.minesweeper-blast i { + --particle-x: 58px; + --particle-y: 0; + width: 7px; + height: 7px; + margin: -3px; + border-radius: 2px; + background: #ffcf55; + box-shadow: 0 0 7px #ff743d; + animation: minesweeper-debris 760ms ease-out forwards; +} + +.minesweeper-blast i:nth-of-type(2) { --particle-x: 51px; --particle-y: 30px; } +.minesweeper-blast i:nth-of-type(3) { --particle-x: 29px; --particle-y: 54px; } +.minesweeper-blast i:nth-of-type(4) { --particle-x: 0; --particle-y: 66px; } +.minesweeper-blast i:nth-of-type(5) { --particle-x: -34px; --particle-y: 58px; } +.minesweeper-blast i:nth-of-type(6) { --particle-x: -61px; --particle-y: 28px; } +.minesweeper-blast i:nth-of-type(7) { --particle-x: -68px; --particle-y: -5px; } +.minesweeper-blast i:nth-of-type(8) { --particle-x: -49px; --particle-y: -43px; } +.minesweeper-blast i:nth-of-type(9) { --particle-x: -12px; --particle-y: -65px; } +.minesweeper-blast i:nth-of-type(10) { --particle-x: 28px; --particle-y: -60px; } +.minesweeper-blast i:nth-of-type(11) { --particle-x: 61px; --particle-y: -36px; } +.minesweeper-blast i:nth-of-type(12) { --particle-x: 72px; --particle-y: 10px; } + +.minesweeper-celebration { + position: absolute; + z-index: 12; + inset: 0; + overflow: hidden; + border-radius: 17px; + pointer-events: none; +} + +.minesweeper-celebration i { + --confetti-x: 10%; + --confetti-delay: 0ms; + --confetti-color: #ffcf55; + position: absolute; + top: -14px; + left: var(--confetti-x); + width: 7px; + height: 13px; + border-radius: 2px; + background: var(--confetti-color); + animation: minesweeper-confetti 850ms var(--confetti-delay) ease-in forwards; +} + +.minesweeper-celebration i:nth-child(3n + 1) { --confetti-color: #ff7065; transform: rotate(22deg); } +.minesweeper-celebration i:nth-child(3n + 2) { --confetti-color: #9cf0d9; transform: rotate(-31deg); } +.minesweeper-celebration i:nth-child(2n) { --confetti-delay: 90ms; } +.minesweeper-celebration i:nth-child(1) { --confetti-x: 4%; } +.minesweeper-celebration i:nth-child(2) { --confetti-x: 10%; } +.minesweeper-celebration i:nth-child(3) { --confetti-x: 17%; } +.minesweeper-celebration i:nth-child(4) { --confetti-x: 24%; } +.minesweeper-celebration i:nth-child(5) { --confetti-x: 31%; } +.minesweeper-celebration i:nth-child(6) { --confetti-x: 38%; } +.minesweeper-celebration i:nth-child(7) { --confetti-x: 45%; } +.minesweeper-celebration i:nth-child(8) { --confetti-x: 52%; } +.minesweeper-celebration i:nth-child(9) { --confetti-x: 59%; } +.minesweeper-celebration i:nth-child(10) { --confetti-x: 66%; } +.minesweeper-celebration i:nth-child(11) { --confetti-x: 73%; } +.minesweeper-celebration i:nth-child(12) { --confetti-x: 80%; } +.minesweeper-celebration i:nth-child(13) { --confetti-x: 87%; } +.minesweeper-celebration i:nth-child(14) { --confetti-x: 94%; } +.minesweeper-celebration i:nth-child(15) { --confetti-x: 14%; } +.minesweeper-celebration i:nth-child(16) { --confetti-x: 42%; } +.minesweeper-celebration i:nth-child(17) { --confetti-x: 70%; } +.minesweeper-celebration i:nth-child(18) { --confetti-x: 90%; } + +.minesweeper-game--victory .minesweeper-cell--flagged { + animation: minesweeper-flag-celebrate 520ms ease-out alternate 2; +} + +@keyframes minesweeper-board-shake { + 0%, 100% { transform: translate(0); } + 12% { transform: translate(-7px, 3px) rotate(-1deg); } + 24% { transform: translate(6px, -4px) rotate(1deg); } + 38% { transform: translate(-5px, -2px); } + 52% { transform: translate(4px, 3px); } + 68% { transform: translate(-2px, -2px); } + 82% { transform: translate(2px, 1px); } +} + +@keyframes minesweeper-screen-flash { + 0% { opacity: 0.82; } + 18% { opacity: 0.22; } + 100% { opacity: 0; } +} + +@keyframes minesweeper-blast-flash { + 0% { opacity: 1; transform: scale(0.18); } + 45% { opacity: 0.88; transform: scale(1.15); } + 100% { opacity: 0; transform: scale(1.7); } +} + +@keyframes minesweeper-blast-ring { + 0% { opacity: 1; transform: scale(0.15); } + 100% { opacity: 0; transform: scale(4.2); } +} + +@keyframes minesweeper-blast-core { + 0% { opacity: 1; transform: scale(0.35) rotate(-18deg); } + 48% { opacity: 1; transform: scale(1.2) rotate(12deg); } + 100% { opacity: 0; transform: scale(0.6) rotate(55deg); } +} + +@keyframes minesweeper-debris { + 0% { opacity: 1; transform: translate(0) rotate(0); } + 75% { opacity: 1; } + 100% { opacity: 0; transform: translate(var(--particle-x), var(--particle-y)) rotate(260deg); } +} + +@keyframes minesweeper-confetti { + 0% { opacity: 0; translate: 0 0; rotate: 0deg; } + 10% { opacity: 1; } + 100% { opacity: 0; translate: 16px 380px; rotate: 520deg; } +} + +@keyframes minesweeper-flag-celebrate { + from { filter: brightness(1); transform: scale(1); } + to { filter: brightness(1.3); transform: scale(1.12) rotate(3deg); } +} .minesweeper-overlay { position: absolute; @@ -475,6 +743,11 @@ onBeforeUnmount(() => { button:active { transform: scale(0.96); } @media (prefers-reduced-motion: reduce) { + .minesweeper-game--exploding .minesweeper-board, + .minesweeper-game--exploding::after, + .minesweeper-blast > *, + .minesweeper-celebration i, + .minesweeper-game--victory .minesweeper-cell--flagged, .minesweeper-cell--revealed, .minesweeper-cell--exploded { animation: none; } } From e1931a6527a171baacdcbc64f33d19fd34896f30 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:17:03 +0200 Subject: [PATCH 010/103] ENH - animate minesweeper markers --- .../src/assets/audio/minesweeper/place.wav | Bin 0 -> 63548 bytes .../src/features/games/minesweeper/audio.ts | 10 +- frontend/src/views/apps/MinesweeperApp.vue | 132 +++++++++++++++++- sky_phone/source/html/index.html | 4 +- 4 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 frontend/src/assets/audio/minesweeper/place.wav diff --git a/frontend/src/assets/audio/minesweeper/place.wav b/frontend/src/assets/audio/minesweeper/place.wav new file mode 100644 index 0000000000000000000000000000000000000000..de8b3567521df0cfdf3934fe45bb86dc4e1d9add GIT binary patch literal 63548 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
R9s~^Q>Ok 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 = { clear: clearUrl, flag: flagUrl, mine: mineUrl, + place: placeUrl, reveal: revealUrl, win: winUrl, } diff --git a/frontend/src/views/apps/MinesweeperApp.vue b/frontend/src/views/apps/MinesweeperApp.vue index 02fc7c9..ba3cb91 100644 --- a/frontend/src/views/apps/MinesweeperApp.vue +++ b/frontend/src/views/apps/MinesweeperApp.vue @@ -36,6 +36,8 @@ const minesRemaining = computed(() => ) const roundEffect = ref<'explosion' | 'victory' | null>(null) const resultVisible = ref(true) +const markerEffectCellId = ref(null) +const markerEffectKey = ref(0) const blastStyle = computed(() => { const currentGame = minesweeper.game const explodedCell = currentGame?.cells.find( @@ -48,11 +50,24 @@ const blastStyle = computed(() => { '--blast-top': `${((explodedCell.row + 0.5) / currentGame.height) * 100}%`, } as CSSProperties }) +const markerStyle = computed(() => { + const currentGame = minesweeper.game + const markedCell = currentGame?.cells.find( + (cell) => cell.id === markerEffectCellId.value, + ) + if (!currentGame || !markedCell) return {} + + return { + '--marker-left': `${((markedCell.column + 0.5) / currentGame.width) * 100}%`, + '--marker-top': `${((markedCell.row + 0.5) / currentGame.height) * 100}%`, + } as CSSProperties +}) let clockTimer: ReturnType | undefined let longPressTimer: ReturnType | undefined let suppressNextClick = false let suppressTimer: ReturnType | undefined let effectTimer: ReturnType | undefined +let markerEffectTimer: ReturnType | undefined function formatTime(milliseconds: number): string { const seconds = Math.floor(milliseconds / 1000) @@ -113,7 +128,21 @@ function startRoundEffect( function toggleFlag(cellId: number): void { const result = minesweeper.toggleFlag(cellId) - if (result?.changed) playMinesweeperSound('flag', minesweeper.soundEnabled) + if (!result?.changed) return + + const markedCell = result.state.cells.find((cell) => cell.id === cellId) + if (markedCell?.isFlagged) { + if (markerEffectTimer) clearTimeout(markerEffectTimer) + markerEffectCellId.value = cellId + markerEffectKey.value += 1 + playMinesweeperSound('place', minesweeper.soundEnabled) + markerEffectTimer = setTimeout(() => { + markerEffectCellId.value = null + markerEffectTimer = undefined + }, 720) + } else { + playMinesweeperSound('flag', minesweeper.soundEnabled) + } } function beginLongPress(cellId: number): void { @@ -143,8 +172,11 @@ function restart(): void { if (!minesweeper.game) return if (effectTimer) clearTimeout(effectTimer) + if (markerEffectTimer) clearTimeout(markerEffectTimer) effectTimer = undefined + markerEffectTimer = undefined roundEffect.value = null + markerEffectCellId.value = null resultVisible.value = true minesweeper.start(minesweeper.game.difficulty) } @@ -159,6 +191,7 @@ onBeforeUnmount(() => { if (longPressTimer) clearTimeout(longPressTimer) if (suppressTimer) clearTimeout(suppressTimer) if (effectTimer) clearTimeout(effectTimer) + if (markerEffectTimer) clearTimeout(markerEffectTimer) minesweeper.pause() minesweeper.persist() }) @@ -281,6 +314,7 @@ onBeforeUnmount(() => { 'minesweeper-cell--flagged': cell.isFlagged, 'minesweeper-cell--mine': cell.isMine && cell.isRevealed, 'minesweeper-cell--exploded': game.explodedCellId === cell.id, + 'minesweeper-cell--marking': markerEffectCellId === cell.id, [`minesweeper-cell--number-${cell.adjacentMines}`]: cell.isRevealed && !cell.isMine && cell.adjacentMines > 0, }" @@ -297,6 +331,20 @@ onBeforeUnmount(() => { {{ cell.adjacentMines }} + +
{ .minesweeper-board--expert .minesweeper-cell { border-radius: 6px; font-size: 11px; } .minesweeper-cell--revealed { color: #477078; background: #eef5e9; box-shadow: inset 0 1px 3px rgb(39 83 80 / 12%); animation: minesweeper-reveal 170ms ease-out; } .minesweeper-cell--flagged { color: #f35f58; background: linear-gradient(145deg, #5bcec5, #2ca5a4); } +.minesweeper-cell--marking > svg { animation: minesweeper-marker-flag 720ms ease-out; } .minesweeper-cell--mine { color: #263c51; background: #dce5dd; } .minesweeper-cell--exploded { color: #fff; background: radial-gradient(circle, #263238 0 31%, #743e37 34% 55%, #df584e 58%); box-shadow: inset 0 0 9px #050b0c, 0 0 12px #ff5a3c; animation: minesweeper-explode 720ms ease-out; } .minesweeper-cell--number-1 { color: #3275ce; } @@ -551,6 +600,58 @@ onBeforeUnmount(() => { pointer-events: none; } +.minesweeper-marker-drop { + position: absolute; + z-index: 11; + top: var(--marker-top); + left: var(--marker-left); + width: 0; + height: 0; + pointer-events: none; +} + +.minesweeper-marker-drop__bomb { + position: absolute; + z-index: 2; + width: 38px; + height: 38px; + display: grid; + place-items: center; + margin: -19px; + border: 2px solid #667985; + border-radius: 50%; + color: #172c36; + background: radial-gradient(circle at 35% 28%, #687b83, #263c45 48%, #12272f 75%); + box-shadow: inset -4px -5px 8px rgb(0 0 0 / 35%), 0 5px 9px rgb(11 42 45 / 42%); + animation: minesweeper-bomb-drop 720ms cubic-bezier(0.2, 0.8, 0.35, 1) forwards; +} + +.minesweeper-marker-drop__trail { + position: absolute; + z-index: 1; + width: 7px; + height: 95px; + margin: -87px 0 0 27px; + border-radius: 50%; + background: linear-gradient(to bottom, transparent, #ffe38a 45%, #ff6c42 83%, transparent); + filter: blur(2px); + transform: rotate(35deg); + transform-origin: bottom; + animation: minesweeper-bomb-trail 570ms ease-out forwards; +} + +.minesweeper-marker-drop__impact { + position: absolute; + width: 34px; + height: 34px; + margin: -17px; + border: 4px solid #8df3df; + border-radius: 50%; + box-shadow: 0 0 12px #4bc4bd; + opacity: 0; + animation: minesweeper-marker-impact 720ms ease-out forwards; +} + .minesweeper-blast__flash, .minesweeper-blast__ring, .minesweeper-blast__core, @@ -675,6 +776,33 @@ onBeforeUnmount(() => { 82% { transform: translate(2px, 1px); } } +@keyframes minesweeper-bomb-drop { + 0% { opacity: 0; transform: translate(105px, -185px) scale(0.55) rotate(160deg); } + 12% { opacity: 1; } + 66% { transform: translate(0, 0) scale(1) rotate(355deg); } + 78% { transform: translate(0, -13px) scale(0.9) rotate(370deg); } + 90% { opacity: 1; transform: translate(0, 0) scale(0.78) rotate(380deg); } + 100% { opacity: 0; transform: translate(0, 0) scale(0.35) rotate(390deg); } +} + +@keyframes minesweeper-bomb-trail { + 0% { opacity: 0; scale: 0.4; } + 18% { opacity: 0.9; } + 72%, 100% { opacity: 0; scale: 1; } +} + +@keyframes minesweeper-marker-impact { + 0%, 62% { opacity: 0; transform: scale(0.2); } + 68% { opacity: 1; } + 100% { opacity: 0; transform: scale(2.2); } +} + +@keyframes minesweeper-marker-flag { + 0%, 68% { opacity: 0; transform: scale(0.35) rotate(-18deg); } + 82% { opacity: 1; transform: scale(1.28) rotate(5deg); } + 100% { opacity: 1; transform: scale(1) rotate(0); } +} + @keyframes minesweeper-screen-flash { 0% { opacity: 0.82; } 18% { opacity: 0.22; } @@ -746,6 +874,8 @@ button:active { transform: scale(0.96); } .minesweeper-game--exploding .minesweeper-board, .minesweeper-game--exploding::after, .minesweeper-blast > *, + .minesweeper-marker-drop > *, + .minesweeper-cell--marking > svg, .minesweeper-celebration i, .minesweeper-game--victory .minesweeper-cell--flagged, .minesweeper-cell--revealed, diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index 75a4aac..fc4bd8a 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,8 +4,8 @@ Sky Phone - - + +
From 0dded888a160582de49efab5fdd106469e732622 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:28:30 +0200 Subject: [PATCH 011/103] ADD - tower stack phone game --- .../src/assets/audio/tower-stack/fall.wav | Bin 0 -> 81188 bytes frontend/src/assets/audio/tower-stack/hit.wav | Bin 0 -> 17684 bytes .../src/assets/audio/tower-stack/perfect.wav | Bin 0 -> 45908 bytes .../src/assets/audio/tower-stack/start.wav | Bin 0 -> 33560 bytes .../src/assets/img/app-icons/tower-stack.webp | Bin 0 -> 29112 bytes frontend/src/config/apps.test.ts | 6 + frontend/src/config/apps.ts | 15 + .../src/features/games/tower-stack/audio.ts | 42 ++ .../features/games/tower-stack/engine.test.ts | 79 ++++ .../src/features/games/tower-stack/engine.ts | 139 +++++++ .../src/features/games/tower-stack/store.ts | 96 +++++ .../src/features/games/tower-stack/types.ts | 29 ++ frontend/src/stores/phone.ts | 29 ++ frontend/src/types/apps.ts | 1 + frontend/src/utils/preferences.ts | 1 + frontend/src/views/apps/TowerStackApp.vue | 360 ++++++++++++++++++ sky_phone/config/locales/en.lua | 13 + sky_phone/source/html/index.html | 2 +- 18 files changed, 811 insertions(+), 1 deletion(-) create mode 100644 frontend/src/assets/audio/tower-stack/fall.wav create mode 100644 frontend/src/assets/audio/tower-stack/hit.wav create mode 100644 frontend/src/assets/audio/tower-stack/perfect.wav create mode 100644 frontend/src/assets/audio/tower-stack/start.wav create mode 100644 frontend/src/assets/img/app-icons/tower-stack.webp create mode 100644 frontend/src/features/games/tower-stack/audio.ts create mode 100644 frontend/src/features/games/tower-stack/engine.test.ts create mode 100644 frontend/src/features/games/tower-stack/engine.ts create mode 100644 frontend/src/features/games/tower-stack/store.ts create mode 100644 frontend/src/features/games/tower-stack/types.ts create mode 100644 frontend/src/views/apps/TowerStackApp.vue diff --git a/frontend/src/assets/audio/tower-stack/fall.wav b/frontend/src/assets/audio/tower-stack/fall.wav new file mode 100644 index 0000000000000000000000000000000000000000..935353389246a4f796c22f0c49e02236c159b7f3 GIT binary patch literal 81188 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 MAlngJvh%+Ce{Y9YtpET3 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/audio/tower-stack/hit.wav b/frontend/src/assets/audio/tower-stack/hit.wav new file mode 100644 index 0000000000000000000000000000000000000000..a7dbdec9c992be7ff41788d1afb89ac46ddf8fad GIT binary patch literal 17684 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 A;Q#;t literal 0 HcmV?d00001 diff --git a/frontend/src/assets/audio/tower-stack/start.wav b/frontend/src/assets/audio/tower-stack/start.wav new file mode 100644 index 0000000000000000000000000000000000000000..e0f17778b7d0c27a003a1073fe47c35a09979598 GIT binary patch literal 33560 zcmWJsV|bhk7u>9EBb!Y&w$U`TZ5y}7EpPGFwryLfkv44_+gRJmTHikJlVAC>d(OP) z%*>gcIAZ8f{5}9++JLD;mag6yfd>EpVWDU6a{%D*^e_MrfCnsIuyKKYZ|EO@50LpN zD}Dj>KI>h?!DvRp(v;O12|2g(YYU6}O&j=maL>>`!~Y$r8Tz4g3&(RN zWKD>kU>bjRJa+uTaVN)~8MACOdDNK^;$eXyxslG&R9FuS6 zK4uN0wGgLaTM^SBGQb{Rt_#^4X6EXbsYUWblKH~b-OoEB+RB=5G(M~s)()xZsJdAB zzlxLPfBr`Ny;at~3|J=rqxb_ZD=NEC2KjsHZ$`Pk{CmZ{%9~Zst7~ckwf*W(Hy9hI zH`ld{X=`m?(&_0s-;*J15^a=FWuN3TlrGhIO|tH{eyUM!T4S+WxAr>i|2lQ91)etV zaQ~M;BH(%$7PJR!hpd7r;R}&c)KZKAyA=;3UL~bbDyd88VCFs6V2(U|e*`b`Thzp8 zY0RoPWBfmftx0()CsJF|&>5MT!?Q+a=jPyZn{)q{N60^xuggy>m|n1`V0;0mpelcI z{kPlZilpx$7vq1TpTakRV*wT3IZlIh zmyxZlP#l-67Od~Q)@p6sQkPs!t;j4pP>T9l_Wj-0rq5BI?tPf>KDjvS-IBLI-wb|Z zd0qCp^tJkR&YPESCcce)$15KH{>_KspQvBB-N$sJ=XRXApPr@s* z7iyznqOIOFGoS{oL5Q(g0PmO3B zsUOui`sf(y*ezpUj{P?F?%26wZDZz+xjp*hsCy$9j_4gWb?D*2M+Q#oZ|OU|&(XXi z*;6viDYFx=#}-FD;qGP?(R9S)*mz_mWJ6f8-|y1)y39$2qZ+cZR{BxY+{5d--9E83 zyLm+8v3hUqrJA|bfz&eU z`qyu6_|`~h{!JX!P?BfP51W{pofo{;h5IuA`T!UDNGNb>)g7N1FF{H2LiBvu95F?6J!k!u4 z%RR;mk9y9}ig_QK9Dgk#kT^N{MoL>MAf1-M$;4*qvfgAb$Z_Rt&h5&L%o~?CCvR+C zcwSxZtlY93WKLW*H_MQ5CLNwOF=chqj0AGr&1gp?CxXQ3V63C|5W{hWs5}@0BoEy5 zjB^AmuMMj;g^DOitYB>C^;SyL_qq$!w<>zd#{RbctoqUVjqr8nXT~S_hwk^m;<3f$ z?^eFcdzbcZ;=7ygXvN=(PrX0;q5Nao=ejQszkU9J_;uy?%D=lSJ8QNy%xKx!A?evI znXH_y+h?w^$9qo!Y>-i?Y^J}~{s#;Z@r#`%K zQq!eoP0R4MH|^1#ce`SGUJLq*n#C)mK>0OAwyI9ORO{27HtKDIn%5Xlo%Dqp>VN-_=Rc4?l)S(2{_^|3 z?|C1de3<`n_@@P*Uw%pZru!}`!I$p(lUg28HL13$VPDIRj^dseNuA<>_MYiyug#qv zTn~PXsKz#u-q06wWW4y8^aNM(|I&YD{mR`{;43WXS2zGT==5OK5Y#a5u&={Mk9avk zKEg1fYQ**tVIyV^KQ!#%(CI@wgH{iG)xV_ZX5q+!-?_-_hzv;Tx5VLb&-mI1BnQg~ zkVW`U=+p33;7NedzS*wBy{+b92C3$;@|x_s7$-d4J+PDCp3}OiS=zY0p?`gH-Jsgt zHL~jE)ud`+RaI3>mA`6W^}T9tO>xb_+L*eqdUJhm1EMLdd1=e@)p z!V=MFi9ote4pClJrD@8vGxU1H4in09$;#_}Vo!0tabw73$rIr5ftWJ> z?8x6-FB`&?QqPk(_&w;~a5dNtF#CkAzr8Qb*Y%gw59PIDqF`GmqV0FnllmVukgA>K zv1Q=jq+gRu%DylAmjAWj%d*dZK8^VV`lR~k{Fwde&Zol9h%d0OdEah*FDjw_ivRsz z8N8ySN?lvfSkrQ|<3*2M{I4QhYc(ouW)~vB2j#JD*RRO`9s)Fyj_vOZAPx9)CjVr@swgPQX-cWP>DD7F99I%`kW^{a
qsIpzPT;tQ8)N_q5O?@qu)=9lR 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 HZ~y=R4Bh?X literal 0 HcmV?d00001 diff --git a/frontend/src/config/apps.test.ts b/frontend/src/config/apps.test.ts index 7c63ac4..e82fac6 100644 --- a/frontend/src/config/apps.test.ts +++ b/frontend/src/config/apps.test.ts @@ -50,6 +50,12 @@ describe('app registry', () => { labelKey: 'Apps.minesweeper.name', route: '/apps/minesweeper', }) + expect(PHONE_APPS.find((app) => app.id === 'tower-stack')).toMatchObject({ + dockOrder: null, + gridOrder: 15, + labelKey: 'Apps.towerStack.name', + route: '/apps/tower-stack', + }) expect( PHONE_APPS.filter((app) => app.dockOrder !== null) .sort((a, b) => (a.dockOrder ?? 0) - (b.dockOrder ?? 0)) diff --git a/frontend/src/config/apps.ts b/frontend/src/config/apps.ts index edc9bda..fe5cec1 100644 --- a/frontend/src/config/apps.ts +++ b/frontend/src/config/apps.ts @@ -7,6 +7,7 @@ import { Grid2X2, Brain, Images, + Layers3, Mail, MapPinned, NotebookPen, @@ -31,6 +32,7 @@ import snakeIcon from '@/assets/img/app-icons/snake.webp' import memoryIcon from '@/assets/img/app-icons/memory.webp' import numberMergeIcon from '@/assets/img/app-icons/number-merge.webp' import minesweeperIcon from '@/assets/img/app-icons/minesweeper.webp' +import towerStackIcon from '@/assets/img/app-icons/tower-stack.webp' import weatherIcon from '@/assets/img/app-icons/weather.webp' import type { PhoneAppDefinition, PhoneAppId } from '@/types/apps' @@ -230,6 +232,19 @@ export const PHONE_APPS: PhoneAppDefinition[] = [ labelKey: 'Apps.minesweeper.name', route: '/apps/minesweeper', }, + { + component: markRaw( + defineAsyncComponent(() => import('@/views/apps/TowerStackApp.vue')), + ), + dockOrder: null, + gridOrder: 15, + icon: markRaw(Layers3), + iconClass: 'app-icon--tower-stack', + iconImage: towerStackIcon, + id: 'tower-stack', + labelKey: 'Apps.towerStack.name', + route: '/apps/tower-stack', + }, ] export const PHONE_APP_IDS = PHONE_APPS.map((app) => app.id) diff --git a/frontend/src/features/games/tower-stack/audio.ts b/frontend/src/features/games/tower-stack/audio.ts new file mode 100644 index 0000000..5c9374f --- /dev/null +++ b/frontend/src/features/games/tower-stack/audio.ts @@ -0,0 +1,42 @@ +import fallUrl from '@/assets/audio/tower-stack/fall.wav?url' +import hitUrl from '@/assets/audio/tower-stack/hit.wav?url' +import perfectUrl from '@/assets/audio/tower-stack/perfect.wav?url' +import startUrl from '@/assets/audio/tower-stack/start.wav?url' + +export type TowerStackSound = 'fall' | 'hit' | 'perfect' | 'start' + +const soundUrls: Record = { + fall: fallUrl, + hit: hitUrl, + perfect: perfectUrl, + start: startUrl, +} +const playerPools = new Map() + +function getPlayers(sound: TowerStackSound): HTMLAudioElement[] { + const existing = playerPools.get(sound) + if (existing) return existing + + const players = Array.from({ length: 3 }, () => { + const player = new Audio(soundUrls[sound]) + player.preload = 'auto' + player.volume = 0.84 + return player + }) + playerPools.set(sound, players) + return players +} + +export function playTowerStackSound( + sound: TowerStackSound, + enabled: boolean, +): void { + if (!enabled) return + + const players = getPlayers(sound) + const player = players.find((candidate) => candidate.paused) ?? players[0] + player.currentTime = 0 + void player.play().catch((error: unknown) => { + console.error(`[Tower Stack audio] Failed to play ${sound}`, error) + }) +} diff --git a/frontend/src/features/games/tower-stack/engine.test.ts b/frontend/src/features/games/tower-stack/engine.test.ts new file mode 100644 index 0000000..04f72cf --- /dev/null +++ b/frontend/src/features/games/tower-stack/engine.test.ts @@ -0,0 +1,79 @@ +import { describe, expect, it } from 'vitest' + +import { + advanceTowerBlock, + createTowerGame, + placeTowerBlock, + TOWER_BASE_WIDTH, + TOWER_MAX_SPEED, + TOWER_PERFECT_TOLERANCE, +} from './engine' + +describe('tower stack engine', () => { + it('creates a centered foundation and moving block', () => { + const state = createTowerGame() + expect(state.blocks).toHaveLength(1) + expect(state.blocks[0].width).toBe(TOWER_BASE_WIDTH) + expect(state.active?.x).toBe(0) + expect(state.status).toBe('playing') + }) + + it('moves the active block using elapsed time', () => { + const state = createTowerGame() + const moved = advanceTowerBlock(state, 0.5) + expect(moved.active?.x).toBeCloseTo(11.5) + }) + + it('reflects a moving block at the field edge', () => { + const state = createTowerGame() + const moved = advanceTowerBlock(state, 2) + expect(moved.active?.direction).toBe(-1) + expect(moved.active?.x).toBeGreaterThanOrEqual(0) + }) + + it('keeps only the overlapping part', () => { + const state = createTowerGame() + state.active = { ...state.active!, x: 25 } + const result = placeTowerBlock(state) + expect(result.outcome).toBe('placed') + expect(result.state.blocks.at(-1)?.width).toBeCloseTo(59) + expect(result.cutWidth).toBeCloseTo(9) + }) + + it('rewards a perfect placement within tolerance', () => { + const state = createTowerGame() + state.active = { + ...state.active!, + x: state.blocks[0].x + TOWER_PERFECT_TOLERANCE / 2, + } + const result = placeTowerBlock(state) + expect(result.outcome).toBe('perfect') + expect(result.state.perfects).toBe(1) + expect(result.state.score).toBe(4) + }) + + it('ends the round on a complete miss', () => { + const state = createTowerGame() + state.active = { ...state.active!, width: 8, x: 0 } + const result = placeTowerBlock(state) + expect(result.outcome).toBe('missed') + expect(result.state.status).toBe('over') + expect(result.state.active).toBeNull() + }) + + it('alternates movement direction for each level', () => { + const state = createTowerGame() + state.active = { ...state.active!, x: state.blocks[0].x } + const result = placeTowerBlock(state) + expect(result.state.active?.direction).toBe(-1) + }) + + it('caps speed at the configured maximum', () => { + let state = createTowerGame() + for (let level = 0; level < 30; level += 1) { + state.active = { ...state.active!, x: state.blocks.at(-1)!.x } + state = placeTowerBlock(state).state + } + expect(state.active?.speed).toBe(TOWER_MAX_SPEED) + }) +}) diff --git a/frontend/src/features/games/tower-stack/engine.ts b/frontend/src/features/games/tower-stack/engine.ts new file mode 100644 index 0000000..ce08221 --- /dev/null +++ b/frontend/src/features/games/tower-stack/engine.ts @@ -0,0 +1,139 @@ +import type { + TowerActiveBlock, + TowerBlock, + TowerGameState, + TowerPlacement, +} from './types' + +export const TOWER_FIELD_WIDTH = 100 +export const TOWER_BASE_WIDTH = 68 +export const TOWER_PERFECT_TOLERANCE = 1.35 +export const TOWER_START_SPEED = 23 +export const TOWER_MAX_SPEED = 48 + +function speedForLevel(level: number): number { + return Math.min( + TOWER_MAX_SPEED, + TOWER_START_SPEED + Math.max(0, level - 1) * 1.65, + ) +} + +function createActiveBlock( + level: number, + width: number, + direction: -1 | 1, +): TowerActiveBlock { + return { + colorIndex: level % 6, + direction, + id: level, + level, + speed: speedForLevel(level), + width, + x: direction === 1 ? 0 : TOWER_FIELD_WIDTH - width, + } +} + +export function createTowerGame(): TowerGameState { + const base: TowerBlock = { + colorIndex: 0, + id: 0, + level: 0, + width: TOWER_BASE_WIDTH, + x: (TOWER_FIELD_WIDTH - TOWER_BASE_WIDTH) / 2, + } + + return { + active: createActiveBlock(1, TOWER_BASE_WIDTH, 1), + blocks: [base], + perfects: 0, + score: 0, + status: 'playing', + } +} + +export function advanceTowerBlock( + state: TowerGameState, + elapsedSeconds: number, +): TowerGameState { + if (state.status !== 'playing' || !state.active || elapsedSeconds <= 0) { + return state + } + + const active = { ...state.active } + let nextX = active.x + active.direction * active.speed * elapsedSeconds + const maximumX = TOWER_FIELD_WIDTH - active.width + + while (nextX < 0 || nextX > maximumX) { + if (nextX > maximumX) { + nextX = maximumX - (nextX - maximumX) + active.direction = -1 + } else { + nextX = -nextX + active.direction = 1 + } + } + + active.x = nextX + return { ...state, active } +} + +export function placeTowerBlock(state: TowerGameState): TowerPlacement { + if (state.status !== 'playing' || !state.active) { + return { cutSide: null, cutWidth: 0, outcome: 'missed', state } + } + + const active = state.active + const support = state.blocks[state.blocks.length - 1] + const overlapStart = Math.max(active.x, support.x) + const overlapEnd = Math.min(active.x + active.width, support.x + support.width) + const overlapWidth = overlapEnd - overlapStart + + if (overlapWidth <= 0) { + return { + cutSide: active.x < support.x ? 'left' : 'right', + cutWidth: active.width, + outcome: 'missed', + state: { ...state, active: null, status: 'over' }, + } + } + + const offset = active.x - support.x + const isPerfect = Math.abs(offset) <= TOWER_PERFECT_TOLERANCE + const placedWidth = isPerfect + ? Math.min(TOWER_BASE_WIDTH, support.width + 0.85) + : overlapWidth + const placedX = isPerfect + ? support.x - (placedWidth - support.width) / 2 + : overlapStart + const block: TowerBlock = { + colorIndex: active.colorIndex, + id: active.id, + level: active.level, + width: placedWidth, + x: placedX, + } + const nextLevel = active.level + 1 + const direction: -1 | 1 = nextLevel % 2 === 0 ? -1 : 1 + + return { + cutSide: isPerfect ? null : offset < 0 ? 'left' : 'right', + cutWidth: isPerfect ? 0 : active.width - overlapWidth, + outcome: isPerfect ? 'perfect' : 'placed', + state: { + active: createActiveBlock(nextLevel, placedWidth, direction), + blocks: [...state.blocks, block], + perfects: state.perfects + (isPerfect ? 1 : 0), + score: state.score + 1 + (isPerfect ? 3 : 0), + status: 'playing', + }, + } +} + +export function pauseTowerGame(state: TowerGameState): TowerGameState { + return state.status === 'playing' ? { ...state, status: 'paused' } : state +} + +export function resumeTowerGame(state: TowerGameState): TowerGameState { + return state.status === 'paused' ? { ...state, status: 'playing' } : state +} diff --git a/frontend/src/features/games/tower-stack/store.ts b/frontend/src/features/games/tower-stack/store.ts new file mode 100644 index 0000000..32ecf71 --- /dev/null +++ b/frontend/src/features/games/tower-stack/store.ts @@ -0,0 +1,96 @@ +import { defineStore } from 'pinia' + +import { useGamesStore } from '@/features/games/store' + +import { + advanceTowerBlock, + createTowerGame, + pauseTowerGame, + placeTowerBlock, + resumeTowerGame, +} from './engine' +import type { TowerGameState, TowerPlacement } from './types' + +type TowerStackSave = { + highHeight: number + highScore: number + soundEnabled: boolean +} + +export const useTowerStackStore = defineStore('tower-stack', { + state: () => ({ + game: null as TowerGameState | null, + highHeight: 0, + highScore: 0, + hydrated: false, + menuOpen: true, + soundEnabled: true, + }), + actions: { + hydrate(): void { + if (this.hydrated) return + + const saved = useGamesStore().readGame>( + 'tower-stack', + ) + this.highHeight = + typeof saved?.highHeight === 'number' && saved.highHeight >= 0 + ? Math.floor(saved.highHeight) + : 0 + this.highScore = + typeof saved?.highScore === 'number' && saved.highScore >= 0 + ? Math.floor(saved.highScore) + : 0 + if (typeof saved?.soundEnabled === 'boolean') { + this.soundEnabled = saved.soundEnabled + } + this.hydrated = true + }, + persist(): void { + useGamesStore().saveGame('tower-stack', { + highHeight: this.highHeight, + highScore: this.highScore, + soundEnabled: this.soundEnabled, + } satisfies TowerStackSave) + }, + start(): void { + this.game = createTowerGame() + this.menuOpen = false + }, + tick(elapsedSeconds: number): void { + if (this.game) { + this.game = advanceTowerBlock(this.game, elapsedSeconds) + } + }, + place(): TowerPlacement | null { + if (!this.game) return null + + const result = placeTowerBlock(this.game) + this.game = result.state + if (result.state.status === 'over') { + const height = result.state.blocks.length - 1 + this.highHeight = Math.max(this.highHeight, height) + this.highScore = Math.max(this.highScore, result.state.score) + this.persist() + } + return result + }, + pause(): void { + if (this.game) this.game = pauseTowerGame(this.game) + }, + resume(): void { + if (this.game) { + this.game = resumeTowerGame(this.game) + this.menuOpen = false + } + }, + showMenu(): void { + this.pause() + this.menuOpen = true + }, + setSoundEnabled(enabled: boolean): void { + this.soundEnabled = enabled + this.persist() + }, + }, +}) diff --git a/frontend/src/features/games/tower-stack/types.ts b/frontend/src/features/games/tower-stack/types.ts new file mode 100644 index 0000000..655b850 --- /dev/null +++ b/frontend/src/features/games/tower-stack/types.ts @@ -0,0 +1,29 @@ +export type TowerStatus = 'over' | 'paused' | 'playing' + +export type TowerBlock = { + colorIndex: number + id: number + level: number + width: number + x: number +} + +export type TowerActiveBlock = TowerBlock & { + direction: -1 | 1 + speed: number +} + +export type TowerGameState = { + active: TowerActiveBlock | null + blocks: TowerBlock[] + perfects: number + score: number + status: TowerStatus +} + +export type TowerPlacement = { + cutSide: 'left' | 'right' | null + cutWidth: number + outcome: 'missed' | 'perfect' | 'placed' + state: TowerGameState +} diff --git a/frontend/src/stores/phone.ts b/frontend/src/stores/phone.ts index b4a5b76..ab3c693 100644 --- a/frontend/src/stores/phone.ts +++ b/frontend/src/stores/phone.ts @@ -243,6 +243,35 @@ const defaultLocales: LocaleTree = { wonBody: 'Minefield cleared in {time}.', wonTitle: 'Field cleared!', }, + towerStack: { + name: 'Tower Stack', + backToMenu: 'Back to game menu', + bestHeight: 'Best Height', + bestScore: 'Best Score', + blocks: 'Blocks', + eyebrow: 'Timing challenge', + finalScore: 'Final Score', + gameHint: 'Tap the playfield to place the moving block', + gameOver: 'Tower collapsed', + height: 'Height', + mainMenu: 'Main Menu', + menuBody: + 'Stop each moving block above the tower. Only the overlapping part remains.', + menuTitle: 'How high can you build?', + mute: 'Mute game sounds', + newGame: 'Start New Game', + pause: 'Pause or resume game', + paused: 'Paused', + perfect: 'PERFECT!', + placeBlock: 'Place moving block', + playAgain: 'Play Again', + ready: 'Ready to stack?', + resume: 'Continue Game', + score: 'Score', + start: 'Start Game', + tapHint: 'Every tap places one block · perfect hits earn bonus points', + unmute: 'Turn on game sounds', + }, map: { name: 'Map', controls: 'Map controls', diff --git a/frontend/src/types/apps.ts b/frontend/src/types/apps.ts index 85ebee0..fb8e7fa 100644 --- a/frontend/src/types/apps.ts +++ b/frontend/src/types/apps.ts @@ -16,6 +16,7 @@ export type PhoneAppId = | 'memory' | 'number-merge' | 'minesweeper' + | 'tower-stack' export type AppLaunchOrigin = { borderRadius: number diff --git a/frontend/src/utils/preferences.ts b/frontend/src/utils/preferences.ts index 65a452e..13fdf54 100644 --- a/frontend/src/utils/preferences.ts +++ b/frontend/src/utils/preferences.ts @@ -54,6 +54,7 @@ const DEFAULT_APP_NOTIFICATIONS: Record< memory: { enabled: true, sounds: true }, 'number-merge': { enabled: true, sounds: true }, minesweeper: { enabled: true, sounds: true }, + 'tower-stack': { enabled: true, sounds: true }, camera: { enabled: true, sounds: true }, clock: { enabled: true, sounds: true }, weather: { enabled: true, sounds: true }, diff --git a/frontend/src/views/apps/TowerStackApp.vue b/frontend/src/views/apps/TowerStackApp.vue new file mode 100644 index 0000000..384d8fe --- /dev/null +++ b/frontend/src/views/apps/TowerStackApp.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/sky_phone/config/locales/en.lua b/sky_phone/config/locales/en.lua index d1a8087..f0b7b65 100644 --- a/sky_phone/config/locales/en.lua +++ b/sky_phone/config/locales/en.lua @@ -112,6 +112,19 @@ Locales["en"] = { playAgain = "Play Again", restart = "Restart", resume = "Continue Game", time = "Time", unmute = "Turn on game sounds", wonBody = "Minefield cleared in {time}.", wonTitle = "Field cleared!", }, + towerStack = { + name = "Tower Stack", backToMenu = "Back to game menu", bestHeight = "Best Height", + bestScore = "Best Score", blocks = "Blocks", eyebrow = "Timing challenge", finalScore = "Final Score", + gameHint = "Tap the playfield to place the moving block", gameOver = "Tower collapsed", + height = "Height", mainMenu = "Main Menu", + menuBody = "Stop each moving block above the tower. Only the overlapping part remains.", + menuTitle = "How high can you build?", mute = "Mute game sounds", newGame = "Start New Game", + pause = "Pause or resume game", paused = "Paused", perfect = "PERFECT!", + placeBlock = "Place moving block", playAgain = "Play Again", ready = "Ready to stack?", + resume = "Continue Game", score = "Score", start = "Start Game", + tapHint = "Every tap places one block · perfect hits earn bonus points", + unmute = "Turn on game sounds", + }, camera = { name = "Camera", shutter = "Take photo", flip = "Flip camera", flash = "Toggle flash", controls = "Camera controls", modes = { timelapse = "Timelapse", slowMo = "Slow-Mo", cinematic = "Cinematic", video = "Video", photo = "Photo", portrait = "Portrait", pano = "Pano" }, diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index fc4bd8a..6a23671 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,7 +4,7 @@ Sky Phone - + From b851dfaff83403d00eba22d71f9de1ba170ae6c7 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:37:35 +0200 Subject: [PATCH 012/103] ADD - sky flappy phone game --- .../src/assets/audio/sky-flappy/crash.wav | Bin 0 -> 66194 bytes frontend/src/assets/audio/sky-flappy/flap.wav | Bin 0 -> 19448 bytes .../src/assets/audio/sky-flappy/point.wav | Bin 0 -> 35324 bytes .../src/assets/img/app-icons/sky-flappy.webp | Bin 0 -> 71102 bytes frontend/src/config/apps.test.ts | 6 + frontend/src/config/apps.ts | 15 ++ .../src/features/games/sky-flappy/audio.ts | 24 +++ .../features/games/sky-flappy/engine.test.ts | 65 +++++++ .../src/features/games/sky-flappy/engine.ts | 119 +++++++++++++ .../src/features/games/sky-flappy/store.ts | 86 +++++++++ .../src/features/games/sky-flappy/types.ts | 18 ++ frontend/src/stores/phone.ts | 28 +++ frontend/src/types/apps.ts | 1 + frontend/src/utils/preferences.ts | 1 + frontend/src/views/apps/SkyFlappyApp.vue | 165 ++++++++++++++++++ sky_phone/config/locales/en.lua | 11 ++ sky_phone/source/html/index.html | 2 +- 17 files changed, 540 insertions(+), 1 deletion(-) create mode 100644 frontend/src/assets/audio/sky-flappy/crash.wav create mode 100644 frontend/src/assets/audio/sky-flappy/flap.wav create mode 100644 frontend/src/assets/audio/sky-flappy/point.wav create mode 100644 frontend/src/assets/img/app-icons/sky-flappy.webp create mode 100644 frontend/src/features/games/sky-flappy/audio.ts create mode 100644 frontend/src/features/games/sky-flappy/engine.test.ts create mode 100644 frontend/src/features/games/sky-flappy/engine.ts create mode 100644 frontend/src/features/games/sky-flappy/store.ts create mode 100644 frontend/src/features/games/sky-flappy/types.ts create mode 100644 frontend/src/views/apps/SkyFlappyApp.vue diff --git a/frontend/src/assets/audio/sky-flappy/crash.wav b/frontend/src/assets/audio/sky-flappy/crash.wav new file mode 100644 index 0000000000000000000000000000000000000000..1718d18258a88c2af153b6267202a38527e2e450 GIT binary patch literal 66194 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 VXd}~Y@)7YT5Uc&ziBI5V{|9#_#Z~|S literal 0 HcmV?d00001 diff --git a/frontend/src/assets/audio/sky-flappy/flap.wav b/frontend/src/assets/audio/sky-flappy/flap.wav new file mode 100644 index 0000000000000000000000000000000000000000..584124608335f0f43aeb49f203eed194c2ee2a56 GIT binary patch literal 19448 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 {{ phone.t('Apps.skyFlappy.firstTap') }} diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index be1dc48..ba95d5e 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,7 +4,7 @@ Sky Phone - + From aba7dd99e80ffaad04361792df550b2ac39f4a67 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:52:57 +0200 Subject: [PATCH 015/103] ENH - redesign sky flappy glider --- .../src/assets/img/app-icons/sky-flappy.svg | 14 ++++++++++++++ .../src/assets/img/app-icons/sky-flappy.webp | Bin 7064 -> 7378 bytes .../games/sky-flappy/SkyFlappyGlider.vue | 15 +++++++++++++++ frontend/src/views/apps/SkyFlappyApp.vue | 9 +++++---- sky_phone/source/html/index.html | 2 +- 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 frontend/src/assets/img/app-icons/sky-flappy.svg create mode 100644 frontend/src/features/games/sky-flappy/SkyFlappyGlider.vue diff --git a/frontend/src/assets/img/app-icons/sky-flappy.svg b/frontend/src/assets/img/app-icons/sky-flappy.svg new file mode 100644 index 0000000..3a8cc0d --- /dev/null +++ b/frontend/src/assets/img/app-icons/sky-flappy.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/frontend/src/assets/img/app-icons/sky-flappy.webp b/frontend/src/assets/img/app-icons/sky-flappy.webp index 7c21f26cb013c4dc8d29615b20ecf0a8e430be24..5d304692e14f965def0b7e3986a41a9851b6fa75 100644 GIT binary patch literal 7378 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 literal 7064 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 + + diff --git a/frontend/src/views/apps/SkyFlappyApp.vue b/frontend/src/views/apps/SkyFlappyApp.vue index befce7d..c179efa 100644 --- a/frontend/src/views/apps/SkyFlappyApp.vue +++ b/frontend/src/views/apps/SkyFlappyApp.vue @@ -3,6 +3,7 @@ import { ChevronLeft, Pause, Play, RotateCcw, Volume2, VolumeX, Wind } from 'luc import { computed, onBeforeUnmount, ref, watch, type CSSProperties } from 'vue' import { playSkyFlappySound } from '@/features/games/sky-flappy/audio' +import SkyFlappyGlider from '@/features/games/sky-flappy/SkyFlappyGlider.vue' import { useSkyFlappyStore } from '@/features/games/sky-flappy/store' import type { SkyFlappyDesign, SkyFlappyObstacle } from '@/features/games/sky-flappy/types' import { usePhoneStore } from '@/stores/phone' @@ -113,7 +114,7 @@ onBeforeUnmount(() => {
- + {{ phone.t('Apps.skyFlappy.firstTap') }} @@ -159,7 +160,7 @@ onBeforeUnmount(() => { .flappy-app { --sky-a:#53c9ed;--sky-b:#7970df;--tower:#645bd1; position:absolute;inset:0;overflow:hidden;padding:52px 16px 27px;color:#fff;background:linear-gradient(160deg,#19375e,#433b80);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;user-select:none;touch-action:manipulation; } .flappy-app--neon { --sky-a:#1b1e58;--sky-b:#7b258c;--tower:#23cbd1; }.flappy-app--storm { --sky-a:#526779;--sky-b:#24354e;--tower:#b06f64; } .flappy-header{height:55px;display:flex;align-items:center;justify-content:space-between}.flappy-header span{display:block;color:#c3d7ef;font-size:9px;font-weight:850;letter-spacing:1.1px;text-transform:uppercase}.flappy-header h1{margin:0;font-size:24px;line-height:1}.flappy-header button,.flappy-toolbar button{width:36px;height:36px;display:grid;place-items:center;padding:0;border:1px solid #ffffff1c;border-radius:12px;color:#fff;background:#ffffff12} -.flappy-menu{height:calc(100% - 55px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center}.flappy-menu__hero{position:relative;width:220px;height:210px;overflow:hidden;border-radius:28px;background:linear-gradient(var(--sky-a),var(--sky-b));box-shadow:0 18px 32px #101b3b66}.flappy-menu__tower{position:absolute;top:0;bottom:0;width:50px;background:repeating-linear-gradient(180deg,var(--tower) 0 42px,#ffffff2b 43px 48px);box-shadow:inset -7px 0 12px #0003}.flappy-menu__tower--left{left:0}.flappy-menu__tower--right{right:0}.flappy-menu__trail{position:absolute;top:103px;left:45px;width:72px;height:10px;border-radius:50%;background:#ffe381;filter:blur(5px);animation:flappy-trail 1s ease-in-out infinite}.sky-glider{position:absolute;z-index:4;width:48px;height:38px;border-radius:48% 54% 48% 52%;background:linear-gradient(145deg,#48e0db,#087f9d);box-shadow:inset -5px -7px 8px #064f7066,0 0 16px #7bfff0}.sky-glider::after{position:absolute;top:10px;right:7px;width:15px;height:15px;border-radius:50%;background:#ffd75f;box-shadow:inset 3px 0 0 #fff5bf;content:""}.sky-glider i,.sky-glider span{position:absolute;left:-13px;width:24px;height:12px;border-radius:70% 20%;background:#ffbd52;transform-origin:right}.sky-glider i{top:5px;transform:rotate(20deg)}.sky-glider span{bottom:4px;transform:rotate(-18deg)}.sky-glider b{position:absolute;right:0;bottom:3px;width:9px;height:6px;border-radius:50%;background:#ff765e}.sky-glider--hero{top:83px;left:84px;animation:flappy-hero 1.1s ease-in-out infinite alternate}.flappy-menu__copy>span{color:#ffda70;font-size:9px;font-weight:900;letter-spacing:1px;text-transform:uppercase}.flappy-menu__copy h2{margin:3px 0 5px;font-size:21px}.flappy-menu__copy p{max-width:275px;margin:0;color:#c0c8df;font-size:10px;line-height:1.4}.flappy-record{width:100%;display:flex;align-items:center;justify-content:space-between;padding:9px 14px;border:1px solid #ffffff14;border-radius:13px;background:#ffffff0c}.flappy-record span{color:#bdc8df;font-size:9px;font-weight:800;text-transform:uppercase}.flappy-record strong{font-size:19px}.flappy-designs{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.flappy-designs button{display:grid;place-items:center;gap:3px;padding:7px 3px;border:1px solid #ffffff12;border-radius:12px;color:#ccd4e9;background:#ffffff0a;font-size:8px}.flappy-designs button.active{border-color:#ffdd72;color:#fff;background:#ffffff1b}.flappy-designs i{width:26px;height:13px;border-radius:8px}.flappy-designs__dawn{background:linear-gradient(90deg,#58d6ee,#ff9b80)}.flappy-designs__neon{background:linear-gradient(90deg,#24255f,#ef55ca)}.flappy-designs__storm{background:linear-gradient(90deg,#71899b,#253750)}.flappy-primary,.flappy-secondary{width:100%;min-height:43px;display:flex;align-items:center;justify-content:center;gap:7px;border-radius:14px;font-size:11px;font-weight:850}.flappy-primary{border:0;color:#173353;background:linear-gradient(135deg,#ffe16c,#ff9d68)}.flappy-secondary{border:1px solid #ffffff18;color:#fff;background:#ffffff0b}.flappy-menu>p,.flappy-game__hint{margin:0;color:#aeb9d2;font-size:9px} +.flappy-menu{height:calc(100% - 55px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center}.flappy-menu__hero{position:relative;width:220px;height:210px;overflow:hidden;border-radius:28px;background:linear-gradient(var(--sky-a),var(--sky-b));box-shadow:0 18px 32px #101b3b66}.flappy-menu__tower{position:absolute;top:0;bottom:0;width:50px;background:repeating-linear-gradient(180deg,var(--tower) 0 42px,#ffffff2b 43px 48px);box-shadow:inset -7px 0 12px #0003}.flappy-menu__tower--left{left:0}.flappy-menu__tower--right{right:0}.flappy-menu__trail{position:absolute;top:103px;left:45px;width:72px;height:10px;border-radius:50%;background:#ffe381;filter:blur(5px);animation:flappy-trail 1s ease-in-out infinite}.sky-glider{position:absolute;z-index:4;width:58px;height:40px;overflow:visible;filter:drop-shadow(0 4px 5px #071d3e66) drop-shadow(0 0 7px #72fff088)}.sky-glider :deep(path){stroke-linejoin:round}.sky-glider :deep(.sky-flappy-glider__trail){fill:#ffb14a}.sky-glider :deep(.sky-flappy-glider__lower-wing){fill:#0aa2b7;stroke:#063653;stroke-width:2}.sky-glider :deep(.sky-flappy-glider__upper-wing){fill:#62f4e8;stroke:#063653;stroke-width:2}.sky-glider :deep(.sky-flappy-glider__body){fill:#20d7d2;stroke:#063653;stroke-width:2}.sky-glider :deep(.sky-flappy-glider__cockpit){fill:#fff0a6;stroke:#063653;stroke-width:1.5}.sky-glider :deep(.sky-flappy-glider__keel){fill:#087b98;stroke:#063653;stroke-width:2}.sky-glider--hero{top:84px;left:81px;animation:flappy-hero 1.1s ease-in-out infinite alternate}.sky-glider--hero :deep(.sky-flappy-glider__upper-wing),.sky-glider--hero :deep(.sky-flappy-glider__lower-wing){transform-box:fill-box;transform-origin:center;animation:flappy-glider-wing 1.1s ease-in-out infinite alternate}.flappy-menu__copy>span{color:#ffda70;font-size:9px;font-weight:900;letter-spacing:1px;text-transform:uppercase}.flappy-menu__copy h2{margin:3px 0 5px;font-size:21px}.flappy-menu__copy p{max-width:275px;margin:0;color:#c0c8df;font-size:10px;line-height:1.4}.flappy-record{width:100%;display:flex;align-items:center;justify-content:space-between;padding:9px 14px;border:1px solid #ffffff14;border-radius:13px;background:#ffffff0c}.flappy-record span{color:#bdc8df;font-size:9px;font-weight:800;text-transform:uppercase}.flappy-record strong{font-size:19px}.flappy-designs{width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.flappy-designs button{display:grid;place-items:center;gap:3px;padding:7px 3px;border:1px solid #ffffff12;border-radius:12px;color:#ccd4e9;background:#ffffff0a;font-size:8px}.flappy-designs button.active{border-color:#ffdd72;color:#fff;background:#ffffff1b}.flappy-designs i{width:26px;height:13px;border-radius:8px}.flappy-designs__dawn{background:linear-gradient(90deg,#58d6ee,#ff9b80)}.flappy-designs__neon{background:linear-gradient(90deg,#24255f,#ef55ca)}.flappy-designs__storm{background:linear-gradient(90deg,#71899b,#253750)}.flappy-primary,.flappy-secondary{width:100%;min-height:43px;display:flex;align-items:center;justify-content:center;gap:7px;border-radius:14px;font-size:11px;font-weight:850}.flappy-primary{border:0;color:#173353;background:linear-gradient(135deg,#ffe16c,#ff9d68)}.flappy-secondary{border:1px solid #ffffff18;color:#fff;background:#ffffff0b}.flappy-menu>p,.flappy-game__hint{margin:0;color:#aeb9d2;font-size:9px} .flappy-game{position:relative;height:calc(100% - 55px)}.flappy-toolbar{height:47px;display:grid;grid-template-columns:36px 1fr 1fr 36px;align-items:center;gap:7px}.flappy-toolbar div{display:grid;justify-items:center}.flappy-toolbar span{color:#bac9df;font-size:8px;font-weight:850;text-transform:uppercase}.flappy-toolbar strong{font-size:16px}.flappy-stage{position:relative;width:100%;height:500px;display:block;overflow:hidden;padding:0;border:1px solid #ffffff1c;border-radius:22px;background:linear-gradient(var(--sky-a),var(--sky-b));box-shadow:inset 0 0 35px #15244c55,0 16px 30px #10193477;touch-action:manipulation}.flappy-clouds i{position:absolute;width:80px;height:24px;border-radius:50%;background:#ffffff30;filter:blur(1px);animation:cloud-drift 7s linear infinite}.flappy-clouds i:nth-child(1){top:10%;left:15%}.flappy-clouds i:nth-child(2){top:25%;left:65%;animation-delay:-2s}.flappy-clouds i:nth-child(3){top:45%;left:35%;animation-delay:-4s}.flappy-clouds i:nth-child(4){top:68%;left:78%}.flappy-clouds i:nth-child(5){top:78%;left:4%;animation-delay:-3s}.flappy-obstacle{position:absolute;z-index:2;top:0;bottom:0}.flappy-obstacle span{position:absolute;right:0;left:0;background:linear-gradient(90deg,color-mix(in srgb,var(--tower),white 20%),var(--tower));box-shadow:inset -6px 0 8px #0003,0 0 13px #17204e55}.flappy-obstacle span::after{position:absolute;right:-4px;left:-4px;height:14px;border-radius:6px;background:color-mix(in srgb,var(--tower),white 10%);box-shadow:inset 0 3px 0 #ffffff25;content:""}.flappy-obstacle__top{top:0;border-radius:0 0 7px 7px}.flappy-obstacle__top::after{bottom:0}.flappy-obstacle__bottom{bottom:0;border-radius:7px 7px 0 0}.flappy-obstacle__bottom::after{top:0}.sky-glider--player{left:23%;animation:flappy-wing .2s ease-out}.flappy-ready{position:absolute;z-index:6;top:36%;left:50%;padding:9px 15px;border-radius:17px;background:#15284fbb;font-size:11px;transform:translateX(-50%)}.flappy-horizon{position:absolute;z-index:3;right:0;bottom:0;left:0;height:12px;background:#263a62;box-shadow:0 -5px 14px #ffffff26}.flappy-stage--crashed{animation:flappy-crash .55s ease-out}.flappy-game__hint{margin-top:8px;text-align:center}.flappy-overlay{position:absolute;z-index:12;inset:47px 0 25px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;padding:28px;border-radius:22px;background:#101a38dc;backdrop-filter:blur(7px);text-align:center}.flappy-overlay>svg{color:#ffdc71}.flappy-overlay>span{color:#ffad78;font-size:9px;font-weight:900;letter-spacing:1px;text-transform:uppercase}.flappy-overlay h2{margin:0 0 5px;font-size:26px} -@keyframes flappy-hero{from{transform:translateY(7px) rotate(-5deg)}to{transform:translateY(-8px) rotate(7deg)}}@keyframes flappy-trail{0%,100%{opacity:.25;transform:scaleX(.6)}50%{opacity:.9;transform:scaleX(1)}}@keyframes flappy-wing{from{filter:brightness(1.5);scale:1.08}to{filter:brightness(1);scale:1}}@keyframes cloud-drift{from{translate:90px 0}to{translate:-160px 0}}@keyframes flappy-crash{0%,100%{transform:translate(0)}25%{transform:translate(-5px,3px)}50%{transform:translate(5px,-2px)}75%{transform:translate(-3px,1px)}}button:active{transform:scale(.97)}@media(prefers-reduced-motion:reduce){.sky-glider,.flappy-menu__trail,.flappy-clouds i,.flappy-stage{animation:none}} +@keyframes flappy-hero{from{transform:translateY(7px) rotate(-5deg)}to{transform:translateY(-8px) rotate(7deg)}}@keyframes flappy-trail{0%,100%{opacity:.25;transform:scaleX(.6)}50%{opacity:.9;transform:scaleX(1)}}@keyframes flappy-wing{from{filter:brightness(1.5) drop-shadow(0 4px 5px #071d3e66);scale:1.1}to{filter:brightness(1) drop-shadow(0 4px 5px #071d3e66);scale:1}}@keyframes flappy-glider-wing{from{transform:scaleY(.72)}to{transform:scaleY(1.08)}}@keyframes cloud-drift{from{translate:90px 0}to{translate:-160px 0}}@keyframes flappy-crash{0%,100%{transform:translate(0)}25%{transform:translate(-5px,3px)}50%{transform:translate(5px,-2px)}75%{transform:translate(-3px,1px)}}button:active{transform:scale(.97)}@media(prefers-reduced-motion:reduce){.sky-glider,.sky-glider :deep(path),.flappy-menu__trail,.flappy-clouds i,.flappy-stage{animation:none}} diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index ba95d5e..fe78b85 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,7 +4,7 @@ Sky Phone - + From becd3f3cf7c0f7d413ae136c14884cea7c16b0b8 Mon Sep 17 00:00:00 2001 From: Eichenholz Date: Thu, 6 Aug 2026 10:04:46 +0200 Subject: [PATCH 016/103] CLN - remove old camera logic --- frontend/src/App.vue | 17 +- frontend/src/assets/main.css | 512 +------------------- frontend/src/components/AppIcon.vue | 3 + frontend/src/components/PhoneLockScreen.vue | 81 ++-- frontend/src/config/apps.test.ts | 21 +- frontend/src/config/apps.ts | 29 +- frontend/src/stores/app-store.ts | 28 ++ frontend/src/stores/media.ts | 89 ---- frontend/src/stores/notifications.ts | 4 +- frontend/src/stores/phone.ts | 57 +-- frontend/src/types/apps.ts | 12 +- frontend/src/utils/preferences.test.ts | 5 +- frontend/src/utils/preferences.ts | 14 +- frontend/src/views/PhoneAppWindow.vue | 2 +- frontend/src/views/apps/AppStoreApp.vue | 8 +- frontend/src/views/apps/CameraApp.vue | 126 ----- frontend/src/views/apps/PhotosApp.vue | 135 ------ frontend/src/views/apps/SettingsApp.vue | 20 +- sky_phone/config/locales/en.lua | 15 +- sky_phone/source/html/index.html | 4 +- sky_phone/source/server/phone.lua | 1 - 21 files changed, 172 insertions(+), 1011 deletions(-) create mode 100644 frontend/src/stores/app-store.ts delete mode 100644 frontend/src/stores/media.ts delete mode 100644 frontend/src/views/apps/CameraApp.vue delete mode 100644 frontend/src/views/apps/PhotosApp.vue diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 3648726..6d7b459 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -23,7 +23,7 @@ import { useClockStore } from '@/stores/clock' import { useCallsStore } from '@/stores/calls' import { useAccountStore } from '@/stores/account' import { useMailStore } from '@/stores/mail' -import { useMediaStore } from '@/stores/media' +import { useAppStoreStore } from '@/stores/app-store' import { useNotesStore } from '@/stores/notes' import { useWeatherStore } from '@/stores/weather' import { @@ -68,7 +68,7 @@ const account = useAccountStore() const clock = useClockStore() const calls = useCallsStore() const mail = useMailStore() -const media = useMediaStore() +const appStore = useAppStoreStore() const notes = useNotesStore() const weather = useWeatherStore() const notifications = useNotificationsStore() @@ -92,7 +92,6 @@ const phoneFrameImage = computed( ) let clockTicker: ReturnType | undefined let unlockTimer: number | undefined -let cameraTimer: number | undefined function getViewportScale(): number { const heightScale = window.innerHeight / REFERENCE_VIEWPORT_HEIGHT @@ -106,7 +105,7 @@ function hydratePhone(payload: PhoneOpenPayload): void { account.hydrate(payload.account ?? null) notes.hydrate(payload.notes ?? []) clock.hydrate(payload.device?.data.alarms?.payload) - media.hydrate(payload.device?.data.media?.payload) + appStore.hydrate(payload.device?.data.apps?.payload) void mail.bootstrap(payload.account?.email ?? '') void calls.bootstrap() } @@ -185,17 +184,11 @@ function updateViewportScale(): void { viewportScale.value = getViewportScale() } -function unlockPhone(destination?: 'camera'): void { +function unlockPhone(): void { if (!isLocked.value) return isUnlocking.value = true isLocked.value = false - if (destination === 'camera') { - cameraTimer = window.setTimeout(() => { - void router.push('/apps/camera') - }, 260) - } - unlockTimer = window.setTimeout(() => { isUnlocking.value = false }, 720) @@ -286,7 +279,6 @@ watch( () => phone.isOpen, (isOpen) => { if (unlockTimer !== undefined) window.clearTimeout(unlockTimer) - if (cameraTimer !== undefined) window.clearTimeout(cameraTimer) if (!isOpen) { weather.stop() isLocked.value = false @@ -305,7 +297,6 @@ onBeforeUnmount(() => { weather.stop() if (clockTicker) clearInterval(clockTicker) if (unlockTimer !== undefined) window.clearTimeout(unlockTimer) - if (cameraTimer !== undefined) window.clearTimeout(cameraTimer) window.removeEventListener('message', onMessage) window.removeEventListener('keydown', onKeydown) window.removeEventListener('resize', updateViewportScale) diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index 26f0f99..fe8609f 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -497,6 +497,18 @@ button { bottom: 25px; left: 0; } +.lock-screen__shortcuts { + display: flex; + justify-content: space-between; + padding: 0 48px; +} +.lock-screen__shortcut { + --color-primary: #8e8e93; +} +.lock-screen__shortcut svg { + width: 21px; + height: 21px; +} .lock-screen__swipe { width: 100%; margin-top: 18px; @@ -1076,7 +1088,12 @@ button { .weather-app--rain .weather-app__backdrop, .weather-app--thunder .weather-app__backdrop { background: - repeating-linear-gradient(104deg, transparent 0 22px, #bcecff17 23px 25px, transparent 26px 49px), + repeating-linear-gradient( + 104deg, + transparent 0 22px, + #bcecff17 23px 25px, + transparent 26px 49px + ), linear-gradient(165deg, #354b69 0%, #253952 46%, #101b2d 100%); } .weather-app--thunder .weather-app__backdrop { @@ -1705,174 +1722,9 @@ button { .clock-timer { padding-bottom: 28px; } -.camera-app { - padding: 45px 0 25px; - background: #080808; -} -.camera-viewfinder { - position: relative; - height: 510px; - overflow: hidden; - background: - radial-gradient(circle at 66% 25%, #ffc66c99, transparent 18%), - linear-gradient(145deg, #193641, #443354 55%, #0c1b20); -} -.camera-facing--front { - background: - radial-gradient(circle at 48% 32%, #ffb58f99, transparent 16%), - linear-gradient(145deg, #56394e, #172f48); -} -.camera-grid { - position: absolute; - inset: 0; - background: - linear-gradient( - transparent 33%, - #ffffff30 33.2%, - transparent 33.5%, - transparent 66%, - #ffffff30 66.2%, - transparent 66.5% - ), - linear-gradient( - 90deg, - transparent 33%, - #ffffff30 33.2%, - transparent 33.5%, - transparent 66%, - #ffffff30 66.2%, - transparent 66.5% - ); -} -.camera-flash { - position: absolute; - z-index: 3; - inset: 0; - background: white; - opacity: 0; - transition: opacity 0.12s; -} -.camera-flash.active { - opacity: 1; -} -.camera-zoom { - position: absolute; - bottom: 14px; - left: 0; - right: 0; - display: flex; - justify-content: center; - gap: 7px; -} -.camera-zoom button { - width: 34px; - height: 34px; - border: 0; - border-radius: 50%; - background: #0009; - color: white; - font-size: 11px; -} -.camera-zoom button.active { - color: #ffcc00; -} -.camera-modes { - height: 35px; - display: flex; - align-items: center; - justify-content: center; - gap: 18px; -} -.camera-modes button { - border: 0; - background: none; - color: white; - text-transform: uppercase; - font-size: 10px; -} -.camera-modes button.active { - color: #ffcc00; -} -.camera-controls { - display: grid; - grid-template-columns: 1fr 1fr 1fr; - align-items: center; - text-align: center; -} -.camera-controls > button { - justify-self: center; - width: 43px; - height: 43px; - border: 0; - border-radius: 50%; - background: #29292b; - color: white; -} -.camera-controls .shutter { - width: 65px; - height: 65px; - border: 4px solid white; - background: #fff; - color: #111; - box-shadow: inset 0 0 0 3px #000; -} -.photos-app, .store-app { background: #000; } -.photo-grid { - height: calc(100% - 115px); - overflow: auto; - display: grid; - grid-template-columns: repeat(3, 1fr); - grid-auto-rows: 111px; - gap: 2px; - padding-bottom: 65px; -} -.photo-tile { - min-height: 100px; -} -.album-cards { - padding: 12px 17px; - display: grid; - grid-template-columns: 1fr 1fr; - gap: 14px; -} -.album-cards article { - display: flex; - flex-direction: column; -} -.album-cards .photo-tile { - height: 145px; - border-radius: 13px; -} -.album-cards small { - color: #888; -} -.album-cards .favorites { - background: linear-gradient(145deg, #ff4777, #7f42db); -} -.featured-photo { - padding: 12px 17px; -} -.featured-photo p { - text-transform: uppercase; - color: #aaa; - font-size: 12px; - font-weight: 700; -} -.featured-photo div { - height: 390px; - border-radius: 19px; - display: flex; - align-items: flex-end; - padding: 18px; -} -.featured-photo span { - font-size: 25px; - font-weight: 700; - text-shadow: 0 2px 8px #000; -} .store-app { overflow-y: auto; } @@ -1951,165 +1803,6 @@ button { font-weight: 400; } -.reference-camera { - display: grid; - grid-template-rows: 83px minmax(0, 1fr) 190px; - padding: 0 0 24px; - background: #020202; -} -.camera-topbar { - display: grid; - grid-template-columns: 1fr auto 1fr; - align-items: end; - padding: 45px 15px 11px; -} -.camera-topbar > div { - display: flex; - gap: 17px; -} -.camera-topbar > svg { - justify-self: end; -} -.camera-topbar button { - border: 0; - background: transparent; - color: inherit; -} -.camera-topbar .camera-chevron { - width: 34px; - height: 26px; - display: grid; - place-items: center; - border-radius: 20px; - background: #262629; -} -.reference-viewfinder { - position: relative; - min-height: 0; - overflow: hidden; - background: - radial-gradient(circle at 66% 21%, #ffd88baa, transparent 15%), - radial-gradient(circle at 45% 52%, #6d8ca5 0 6%, transparent 7%), - linear-gradient(150deg, #173542, #5b3e5b 56%, #13191c); -} -.reference-viewfinder::after { - content: ''; - position: absolute; - inset: 0; - background: linear-gradient( - 115deg, - transparent 45%, - #ffffff0f 46%, - transparent 48% - ); -} -.focus-corner { - position: absolute; - z-index: 2; - width: 24px; - height: 24px; - border-color: white; -} -.focus-corner--tl { - top: 1px; - left: 1px; - border-top: 1px solid; - border-left: 1px solid; -} -.focus-corner--tr { - top: 1px; - right: 1px; - border-top: 1px solid; - border-right: 1px solid; -} -.focus-corner--bl { - bottom: 1px; - left: 1px; - border-bottom: 1px solid; - border-left: 1px solid; -} -.focus-corner--br { - right: 1px; - bottom: 1px; - border-right: 1px solid; - border-bottom: 1px solid; -} -.reference-viewfinder .camera-zoom { - z-index: 3; - bottom: 13px; -} -.reference-viewfinder .camera-zoom button { - display: inline-flex; - align-items: center; - justify-content: center; - background: #0008; - font-weight: 700; -} -.reference-viewfinder .camera-zoom small { - margin-left: 1px; - font-size: 8px; -} -.reference-camera-footer { - display: grid; - grid-template-rows: 43px 1fr; - background: #020202; -} -.camera-mode-strip { - display: flex; - align-items: center; - gap: 21px; - padding: 0 148px; - overflow: hidden; -} -.camera-mode-strip button { - flex: none; - padding: 0; - border: 0; - background: transparent; - color: white; - font-size: 10px; - font-weight: 650; - text-transform: uppercase; - white-space: nowrap; -} -.camera-mode-strip button.active { - color: #ffd60a; -} -.camera-shutter-row { - display: grid; - grid-template-columns: 1fr 1fr 1fr; - align-items: center; - padding: 0 31px 12px; -} -.camera-thumbnail { - width: 44px; - height: 44px; - border-radius: 4px; -} -.reference-shutter { - justify-self: center; - width: 62px; - height: 62px; - display: grid; - place-items: center; - border: 3px solid white; - border-radius: 50%; - background: white; - color: #111; - box-shadow: inset 0 0 0 3px #020202; -} -.reference-flip { - justify-self: end; - width: 42px; - height: 42px; - display: grid; - place-items: center; - border: 0; - border-radius: 50%; - background: #1c1c1e; - color: white; -} - .reference-tabbar { position: absolute; z-index: 6; @@ -2160,169 +1853,6 @@ button { color: #000; } -.reference-photos { - padding: 0 0 79px; - background: #020202; -} -.photos-library, -.photos-scroll { - height: 100%; - overflow-y: auto; -} -.photos-floating-header { - position: sticky; - z-index: 3; - top: 0; - height: 95px; - display: flex; - align-items: flex-end; - gap: 8px; - padding: 47px 17px 14px; - background: linear-gradient(#000 55%, transparent); -} -.photos-floating-header > div { - display: flex; - flex: 1; - flex-direction: column; -} -.photos-floating-header strong { - font-size: 17px; -} -.photos-floating-header span { - font-size: 12px; - font-weight: 600; -} -.photos-floating-header button { - height: 27px; - padding: 0 12px; - border: 0; - border-radius: 18px; - background: #ffffff1d; - color: white; - font-size: 11px; - font-weight: 650; - backdrop-filter: blur(15px); - -webkit-backdrop-filter: blur(15px); -} -.photos-floating-header button:last-child { - width: 28px; - padding: 0; - border-radius: 50%; -} -.reference-photo-grid { - display: grid; - grid-template-columns: repeat(5, 1fr); - gap: 2px; -} -.reference-photo-grid article { - aspect-ratio: 1; -} -.photos-count { - padding: 15px; - text-align: center; - font-size: 11px; -} -.photos-period { - position: sticky; - bottom: 5px; - width: max-content; - margin: 0 auto; - display: flex; - padding: 3px; - border-radius: 22px; - background: #303033aa; - backdrop-filter: blur(18px); - -webkit-backdrop-filter: blur(18px); -} -.photos-period button { - padding: 5px 12px; - border: 0; - border-radius: 18px; - background: transparent; - color: #ddd; - font-size: 10px; - font-weight: 650; -} -.photos-period button.active { - background: #ffffff25; - color: white; -} -.photos-scroll { - padding: 82px 16px 20px; -} -.photos-scroll > h1 { - margin: 0 0 28px; - font-size: 34px; -} -.photos-section-title { - margin-top: 22px; - padding-top: 13px; - display: flex; - align-items: end; - border-top: 1px solid #ffffff1b; -} -.photos-section-title h2 { - flex: 1; - margin: 0; - font-size: 22px; -} -.photos-section-title button { - border: 0; - background: transparent; - color: #0a84ff; -} -.memory-card { - position: relative; - height: 410px; - margin-top: 12px; - padding: 16px; - display: flex; - flex-direction: column; - border-radius: 17px; - box-shadow: inset 0 -160px 100px #0008; -} -.memory-card > svg { - margin-left: auto; -} -.memory-card > div { - margin-top: auto; - display: flex; - flex-direction: column; -} -.memory-card strong { - font-size: 26px; -} -.memory-card span { - font-size: 11px; - letter-spacing: 2px; - text-transform: uppercase; -} -.featured-row { - display: flex; - gap: 9px; - margin-top: 12px; - overflow-x: auto; -} -.featured-row article { - width: 88%; - flex: none; - display: flex; - flex-direction: column; -} -.featured-row article > div { - aspect-ratio: 1; - border-radius: 10px; -} -.featured-row article span { - color: #777; - font-size: 12px; -} -.reference-photos .photo-grid { - height: auto; - margin-top: 13px; - padding-bottom: 10px; -} - .reference-store { padding: 0 0 79px; background: #0e0e0e; @@ -2476,12 +2006,6 @@ button { *::-webkit-scrollbar { display: none; } -.camera-mode-strip { - padding: 0; -} -.camera-mode-strip button:first-child { - margin-left: -205px; -} @media (prefers-reduced-motion: reduce) { *, *::before, diff --git a/frontend/src/components/AppIcon.vue b/frontend/src/components/AppIcon.vue index ec13000..5f56c53 100644 --- a/frontend/src/components/AppIcon.vue +++ b/frontend/src/components/AppIcon.vue @@ -32,6 +32,8 @@ const notificationBadgeColors = { } function launch(event: MouseEvent): void { + if (!props.app.route) return + const button = event.currentTarget as HTMLElement const screen = button.closest('.phone-screen') const icon = button.querySelector('.app-icon') @@ -64,6 +66,7 @@ function launch(event: MouseEvent): void { :class="{ 'app-icon-button--compact': compact }" type="button" :aria-label="phone.t(app.labelKey)" + :aria-disabled="!app.route" @click="launch" >

xP>8aSabz7HKAG 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 IzM1&^2l5TU4*&oF literal 0 HcmV?d00001 diff --git a/frontend/src/assets/audio/sky-flappy/point.wav b/frontend/src/assets/audio/sky-flappy/point.wav new file mode 100644 index 0000000000000000000000000000000000000000..e0501dd95f38b5afb8cad17720e4e48f3e6c8f83 GIT binary patch literal 35324 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�cb*xz1JK{^GSV;`lVuM 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 { labelKey: 'Apps.towerStack.name', route: '/apps/tower-stack', }) + expect(PHONE_APPS.find((app) => app.id === 'sky-flappy')).toMatchObject({ + dockOrder: null, + gridOrder: 16, + labelKey: 'Apps.skyFlappy.name', + route: '/apps/sky-flappy', + }) expect( PHONE_APPS.filter((app) => app.dockOrder !== null) .sort((a, b) => (a.dockOrder ?? 0) - (b.dockOrder ?? 0)) diff --git a/frontend/src/config/apps.ts b/frontend/src/config/apps.ts index fe5cec1..1e864a5 100644 --- a/frontend/src/config/apps.ts +++ b/frontend/src/config/apps.ts @@ -15,6 +15,7 @@ import { Settings, ShoppingBag, CloudSun, + Wind, } from 'lucide-vue-next' import { defineAsyncComponent, markRaw } from 'vue' @@ -33,6 +34,7 @@ import memoryIcon from '@/assets/img/app-icons/memory.webp' import numberMergeIcon from '@/assets/img/app-icons/number-merge.webp' import minesweeperIcon from '@/assets/img/app-icons/minesweeper.webp' import towerStackIcon from '@/assets/img/app-icons/tower-stack.webp' +import skyFlappyIcon from '@/assets/img/app-icons/sky-flappy.webp' import weatherIcon from '@/assets/img/app-icons/weather.webp' import type { PhoneAppDefinition, PhoneAppId } from '@/types/apps' @@ -245,6 +247,19 @@ export const PHONE_APPS: PhoneAppDefinition[] = [ labelKey: 'Apps.towerStack.name', route: '/apps/tower-stack', }, + { + component: markRaw( + defineAsyncComponent(() => import('@/views/apps/SkyFlappyApp.vue')), + ), + dockOrder: null, + gridOrder: 16, + icon: markRaw(Wind), + iconClass: 'app-icon--sky-flappy', + iconImage: skyFlappyIcon, + id: 'sky-flappy', + labelKey: 'Apps.skyFlappy.name', + route: '/apps/sky-flappy', + }, ] export const PHONE_APP_IDS = PHONE_APPS.map((app) => app.id) diff --git a/frontend/src/features/games/sky-flappy/audio.ts b/frontend/src/features/games/sky-flappy/audio.ts new file mode 100644 index 0000000..a8af227 --- /dev/null +++ b/frontend/src/features/games/sky-flappy/audio.ts @@ -0,0 +1,24 @@ +import crashUrl from '@/assets/audio/sky-flappy/crash.wav?url' +import flapUrl from '@/assets/audio/sky-flappy/flap.wav?url' +import pointUrl from '@/assets/audio/sky-flappy/point.wav?url' + +export type SkyFlappySound = 'crash' | 'flap' | 'point' +const urls: Record = { crash: crashUrl, flap: flapUrl, point: pointUrl } +const pools = new Map() + +export function playSkyFlappySound(sound: SkyFlappySound, enabled: boolean): void { + if (!enabled) return + let players = pools.get(sound) + if (!players) { + players = Array.from({ length: 3 }, () => { + const player = new Audio(urls[sound]) + player.preload = 'auto' + player.volume = 0.84 + return player + }) + pools.set(sound, players) + } + const player = players.find((candidate) => candidate.paused) ?? players[0] + player.currentTime = 0 + void player.play().catch((error: unknown) => console.error(`[Sky Flappy audio] Failed to play ${sound}`, error)) +} diff --git a/frontend/src/features/games/sky-flappy/engine.test.ts b/frontend/src/features/games/sky-flappy/engine.test.ts new file mode 100644 index 0000000..3df016c --- /dev/null +++ b/frontend/src/features/games/sky-flappy/engine.test.ts @@ -0,0 +1,65 @@ +import { describe, expect, it } from 'vitest' + +import { + createSkyFlappyGame, + FLAPPY_GAP_HEIGHT, + FLAPPY_MAX_GAP_TOP, + FLAPPY_MIN_GAP_TOP, + flapSkyGlider, + stepSkyFlappy, +} from './engine' + +describe('sky flappy engine', () => { + it('starts in a ready state', () => { + expect(createSkyFlappyGame()).toMatchObject({ playerY: 48, score: 0, status: 'ready' }) + }) + + it('starts and applies an upward impulse on flap', () => { + const state = flapSkyGlider(createSkyFlappyGame()) + expect(state.status).toBe('playing') + expect(state.playerVelocity).toBeLessThan(0) + }) + + it('applies deterministic time-based physics', () => { + const state = flapSkyGlider(createSkyFlappyGame()) + expect(stepSkyFlappy(state, 0.1, () => 0.5)).toEqual( + stepSkyFlappy(state, 0.1, () => 0.5), + ) + }) + + it('keeps generated gaps inside playable bounds', () => { + const state = flapSkyGlider(createSkyFlappyGame()) + const low = stepSkyFlappy(state, 0.01, () => 0) + const high = stepSkyFlappy(state, 0.01, () => 1) + expect(low.obstacles[0].gapTop).toBe(FLAPPY_MIN_GAP_TOP) + expect(high.obstacles[0].gapTop).toBe(FLAPPY_MAX_GAP_TOP) + expect(high.obstacles[0].gapTop + FLAPPY_GAP_HEIGHT).toBeLessThan(100) + }) + + it('scores an obstacle only once', () => { + const state = { + ...flapSkyGlider(createSkyFlappyGame()), + obstacles: [{ gapTop: 30, id: 1, scored: false, x: 7 }], + } + const scored = stepSkyFlappy(state, 0.01, () => 0.5) + expect(scored.score).toBe(1) + expect(stepSkyFlappy(scored, 0.01, () => 0.5).score).toBe(1) + }) + + it('detects collision using the player edges', () => { + const state = { + ...flapSkyGlider(createSkyFlappyGame()), + obstacles: [{ gapTop: 40, id: 1, scored: false, x: 22 }], + playerY: 41, + playerVelocity: 0, + } + expect(stepSkyFlappy(state, 0.01).status).toBe('over') + }) + + it('ends at the upper and lower boundaries', () => { + const upper = { ...flapSkyGlider(createSkyFlappyGame()), playerY: 1 } + const lower = { ...flapSkyGlider(createSkyFlappyGame()), playerY: 99 } + expect(stepSkyFlappy(upper, 0.01).status).toBe('over') + expect(stepSkyFlappy(lower, 0.01).status).toBe('over') + }) +}) diff --git a/frontend/src/features/games/sky-flappy/engine.ts b/frontend/src/features/games/sky-flappy/engine.ts new file mode 100644 index 0000000..1413e0d --- /dev/null +++ b/frontend/src/features/games/sky-flappy/engine.ts @@ -0,0 +1,119 @@ +import type { SkyFlappyGameState, SkyFlappyObstacle } from './types' + +export const FLAPPY_PLAYER_X = 23 +export const FLAPPY_PLAYER_RADIUS = 3.2 +export const FLAPPY_GRAVITY = 82 +export const FLAPPY_IMPULSE = -34 +export const FLAPPY_OBSTACLE_WIDTH = 14 +export const FLAPPY_GAP_HEIGHT = 29 +export const FLAPPY_MIN_GAP_TOP = 15 +export const FLAPPY_MAX_GAP_TOP = 56 + +export function createSkyFlappyGame(): SkyFlappyGameState { + return { + nextObstacleId: 1, + obstacles: [], + playerVelocity: 0, + playerY: 48, + score: 0, + status: 'ready', + } +} + +export function flapSkyGlider(state: SkyFlappyGameState): SkyFlappyGameState { + if (state.status === 'over' || state.status === 'paused') return state + return { ...state, playerVelocity: FLAPPY_IMPULSE, status: 'playing' } +} + +function createObstacle( + id: number, + random: () => number, +): SkyFlappyObstacle { + return { + gapTop: + FLAPPY_MIN_GAP_TOP + + Math.max(0, Math.min(1, random())) * + (FLAPPY_MAX_GAP_TOP - FLAPPY_MIN_GAP_TOP), + id, + scored: false, + x: 108, + } +} + +function collidesWithObstacle( + playerY: number, + obstacle: SkyFlappyObstacle, +): boolean { + const horizontalCollision = + FLAPPY_PLAYER_X + FLAPPY_PLAYER_RADIUS > obstacle.x && + FLAPPY_PLAYER_X - FLAPPY_PLAYER_RADIUS < + obstacle.x + FLAPPY_OBSTACLE_WIDTH + if (!horizontalCollision) return false + + return ( + playerY - FLAPPY_PLAYER_RADIUS < obstacle.gapTop || + playerY + FLAPPY_PLAYER_RADIUS > obstacle.gapTop + FLAPPY_GAP_HEIGHT + ) +} + +export function stepSkyFlappy( + state: SkyFlappyGameState, + elapsedSeconds: number, + random: () => number = Math.random, +): SkyFlappyGameState { + if (state.status !== 'playing' || elapsedSeconds <= 0) return state + + const speed = Math.min(33, 20.5 + state.score * 0.38) + const playerVelocity = state.playerVelocity + FLAPPY_GRAVITY * elapsedSeconds + const playerY = state.playerY + playerVelocity * elapsedSeconds + let nextObstacleId = state.nextObstacleId + let obstacles = state.obstacles + .map((obstacle) => ({ + ...obstacle, + x: obstacle.x - speed * elapsedSeconds, + })) + .filter((obstacle) => obstacle.x + FLAPPY_OBSTACLE_WIDTH > -2) + + if (obstacles.length === 0 || obstacles[obstacles.length - 1].x < 61) { + obstacles = [...obstacles, createObstacle(nextObstacleId, random)] + nextObstacleId += 1 + } + + let score = state.score + obstacles = obstacles.map((obstacle) => { + if ( + !obstacle.scored && + obstacle.x + FLAPPY_OBSTACLE_WIDTH < FLAPPY_PLAYER_X + ) { + score += 1 + return { ...obstacle, scored: true } + } + return obstacle + }) + + const collided = + playerY - FLAPPY_PLAYER_RADIUS <= 0 || + playerY + FLAPPY_PLAYER_RADIUS >= 100 || + obstacles.some((obstacle) => collidesWithObstacle(playerY, obstacle)) + + return { + nextObstacleId, + obstacles, + playerVelocity, + playerY, + score, + status: collided ? 'over' : 'playing', + } +} + +export function pauseSkyFlappy( + state: SkyFlappyGameState, +): SkyFlappyGameState { + return state.status === 'playing' ? { ...state, status: 'paused' } : state +} + +export function resumeSkyFlappy( + state: SkyFlappyGameState, +): SkyFlappyGameState { + return state.status === 'paused' ? { ...state, status: 'playing' } : state +} diff --git a/frontend/src/features/games/sky-flappy/store.ts b/frontend/src/features/games/sky-flappy/store.ts new file mode 100644 index 0000000..7e21078 --- /dev/null +++ b/frontend/src/features/games/sky-flappy/store.ts @@ -0,0 +1,86 @@ +import { defineStore } from 'pinia' + +import { useGamesStore } from '@/features/games/store' + +import { + createSkyFlappyGame, + flapSkyGlider, + pauseSkyFlappy, + resumeSkyFlappy, + stepSkyFlappy, +} from './engine' +import type { SkyFlappyDesign, SkyFlappyGameState } from './types' + +type SkyFlappySave = { + design: SkyFlappyDesign + highScore: number + soundEnabled: boolean +} + +function isDesign(value: unknown): value is SkyFlappyDesign { + return value === 'dawn' || value === 'neon' || value === 'storm' +} + +export const useSkyFlappyStore = defineStore('sky-flappy', { + state: () => ({ + design: 'dawn' as SkyFlappyDesign, + game: null as SkyFlappyGameState | null, + highScore: 0, + hydrated: false, + menuOpen: true, + soundEnabled: true, + }), + actions: { + hydrate(): void { + if (this.hydrated) return + const saved = useGamesStore().readGame>('sky-flappy') + this.highScore = typeof saved?.highScore === 'number' && saved.highScore >= 0 ? Math.floor(saved.highScore) : 0 + this.design = isDesign(saved?.design) ? saved.design : 'dawn' + if (typeof saved?.soundEnabled === 'boolean') this.soundEnabled = saved.soundEnabled + this.hydrated = true + }, + persist(): void { + useGamesStore().saveGame('sky-flappy', { + design: this.design, + highScore: this.highScore, + soundEnabled: this.soundEnabled, + } satisfies SkyFlappySave) + }, + start(): void { + this.game = createSkyFlappyGame() + this.menuOpen = false + }, + flap(): void { + if (this.game) this.game = flapSkyGlider(this.game) + }, + tick(elapsedSeconds: number): void { + if (!this.game) return + this.game = stepSkyFlappy(this.game, elapsedSeconds) + if (this.game.status === 'over' && this.game.score > this.highScore) { + this.highScore = this.game.score + this.persist() + } + }, + pause(): void { + if (this.game) this.game = pauseSkyFlappy(this.game) + }, + resume(): void { + if (this.game) { + this.game = resumeSkyFlappy(this.game) + this.menuOpen = false + } + }, + showMenu(): void { + this.pause() + this.menuOpen = true + }, + setDesign(design: SkyFlappyDesign): void { + this.design = design + this.persist() + }, + setSoundEnabled(enabled: boolean): void { + this.soundEnabled = enabled + this.persist() + }, + }, +}) diff --git a/frontend/src/features/games/sky-flappy/types.ts b/frontend/src/features/games/sky-flappy/types.ts new file mode 100644 index 0000000..fa42cb4 --- /dev/null +++ b/frontend/src/features/games/sky-flappy/types.ts @@ -0,0 +1,18 @@ +export type SkyFlappyStatus = 'over' | 'paused' | 'playing' | 'ready' +export type SkyFlappyDesign = 'dawn' | 'neon' | 'storm' + +export type SkyFlappyObstacle = { + gapTop: number + id: number + scored: boolean + x: number +} + +export type SkyFlappyGameState = { + nextObstacleId: number + obstacles: SkyFlappyObstacle[] + playerVelocity: number + playerY: number + score: number + status: SkyFlappyStatus +} diff --git a/frontend/src/stores/phone.ts b/frontend/src/stores/phone.ts index ab3c693..4b0b25c 100644 --- a/frontend/src/stores/phone.ts +++ b/frontend/src/stores/phone.ts @@ -272,6 +272,34 @@ const defaultLocales: LocaleTree = { tapHint: 'Every tap places one block · perfect hits earn bonus points', unmute: 'Turn on game sounds', }, + skyFlappy: { + name: 'Sky Flappy', + backToMenu: 'Back to game menu', + best: 'Best', + design: 'Sky design', + designs: { dawn: 'Dawn', neon: 'Neon', storm: 'Storm' }, + eyebrow: 'Sky challenge', + firstTap: 'Tap to launch', + flap: 'Fly upward', + gameHint: 'Tap anywhere in the sky to fly upward', + gameOver: 'Flight ended', + highScore: 'High Score', + mainMenu: 'Main Menu', + menuBody: + 'Guide the Sky Glider through every tower opening without touching the edges.', + menuTitle: 'Fly between the towers', + mute: 'Mute game sounds', + pause: 'Pause or resume game', + paused: 'Paused', + playAgain: 'Fly Again', + points: 'Points', + ready: 'Ready for takeoff?', + resume: 'Continue Flight', + score: 'Score', + start: 'Start Flight', + tapHint: 'Tap to rise · gravity pulls the glider down', + unmute: 'Turn on game sounds', + }, map: { name: 'Map', controls: 'Map controls', diff --git a/frontend/src/types/apps.ts b/frontend/src/types/apps.ts index fb8e7fa..f763b7b 100644 --- a/frontend/src/types/apps.ts +++ b/frontend/src/types/apps.ts @@ -17,6 +17,7 @@ export type PhoneAppId = | 'number-merge' | 'minesweeper' | 'tower-stack' + | 'sky-flappy' export type AppLaunchOrigin = { borderRadius: number diff --git a/frontend/src/utils/preferences.ts b/frontend/src/utils/preferences.ts index 13fdf54..8eabc6e 100644 --- a/frontend/src/utils/preferences.ts +++ b/frontend/src/utils/preferences.ts @@ -55,6 +55,7 @@ const DEFAULT_APP_NOTIFICATIONS: Record< 'number-merge': { enabled: true, sounds: true }, minesweeper: { enabled: true, sounds: true }, 'tower-stack': { enabled: true, sounds: true }, + 'sky-flappy': { enabled: true, sounds: true }, camera: { enabled: true, sounds: true }, clock: { enabled: true, sounds: true }, weather: { enabled: true, sounds: true }, diff --git a/frontend/src/views/apps/SkyFlappyApp.vue b/frontend/src/views/apps/SkyFlappyApp.vue new file mode 100644 index 0000000..c727e9d --- /dev/null +++ b/frontend/src/views/apps/SkyFlappyApp.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/sky_phone/config/locales/en.lua b/sky_phone/config/locales/en.lua index f0b7b65..8ac5b53 100644 --- a/sky_phone/config/locales/en.lua +++ b/sky_phone/config/locales/en.lua @@ -125,6 +125,17 @@ Locales["en"] = { tapHint = "Every tap places one block · perfect hits earn bonus points", unmute = "Turn on game sounds", }, + skyFlappy = { + name = "Sky Flappy", backToMenu = "Back to game menu", best = "Best", design = "Sky design", + designs = { dawn = "Dawn", neon = "Neon", storm = "Storm" }, eyebrow = "Sky challenge", + firstTap = "Tap to launch", flap = "Fly upward", gameHint = "Tap anywhere in the sky to fly upward", + gameOver = "Flight ended", highScore = "High Score", mainMenu = "Main Menu", + menuBody = "Guide the Sky Glider through every tower opening without touching the edges.", + menuTitle = "Fly between the towers", mute = "Mute game sounds", pause = "Pause or resume game", + paused = "Paused", playAgain = "Fly Again", points = "Points", ready = "Ready for takeoff?", + resume = "Continue Flight", score = "Score", start = "Start Flight", + tapHint = "Tap to rise · gravity pulls the glider down", unmute = "Turn on game sounds", + }, camera = { name = "Camera", shutter = "Take photo", flip = "Flip camera", flash = "Toggle flash", controls = "Camera controls", modes = { timelapse = "Timelapse", slowMo = "Slow-Mo", cinematic = "Cinematic", video = "Video", photo = "Photo", portrait = "Portrait", pano = "Pano" }, diff --git a/sky_phone/source/html/index.html b/sky_phone/source/html/index.html index 6a23671..4723ce9 100644 --- a/sky_phone/source/html/index.html +++ b/sky_phone/source/html/index.html @@ -4,7 +4,7 @@ Sky Phone - + From b273c6af55cda269e7bc1e07d6927ef67986e06f Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:41:32 +0200 Subject: [PATCH 013/103] ENH - simplify sky flappy icon --- .../src/assets/img/app-icons/sky-flappy.webp | Bin 71102 -> 7064 bytes sky_phone/source/html/index.html | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/assets/img/app-icons/sky-flappy.webp b/frontend/src/assets/img/app-icons/sky-flappy.webp index d2d71c5c2dbc85d8db08b17c6d88d2eccb691902..7c21f26cb013c4dc8d29615b20ecf0a8e430be24 100644 GIT binary patch literal 7064 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 Sky Phone - + From 980ccdd075127dcfe727615a7b56c6b01aec94fb Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 6 Aug 2026 09:45:10 +0200 Subject: [PATCH 014/103] ENH - scale sky flappy difficulty --- .../features/games/sky-flappy/engine.test.ts | 18 +++++++++++-- .../src/features/games/sky-flappy/engine.ts | 26 ++++++++++++++++--- .../src/features/games/sky-flappy/types.ts | 1 + frontend/src/views/apps/SkyFlappyApp.vue | 2 +- sky_phone/source/html/index.html | 2 +- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/frontend/src/features/games/sky-flappy/engine.test.ts b/frontend/src/features/games/sky-flappy/engine.test.ts index 3df016c..5c88578 100644 --- a/frontend/src/features/games/sky-flappy/engine.test.ts +++ b/frontend/src/features/games/sky-flappy/engine.test.ts @@ -3,9 +3,12 @@ import { describe, expect, it } from 'vitest' import { createSkyFlappyGame, FLAPPY_GAP_HEIGHT, + FLAPPY_MAX_SPEED, FLAPPY_MAX_GAP_TOP, + FLAPPY_MIN_GAP_HEIGHT, FLAPPY_MIN_GAP_TOP, flapSkyGlider, + getSkyFlappyDifficulty, stepSkyFlappy, } from './engine' @@ -36,10 +39,21 @@ describe('sky flappy engine', () => { expect(high.obstacles[0].gapTop + FLAPPY_GAP_HEIGHT).toBeLessThan(100) }) + it('increases speed and narrows the gap as the score rises', () => { + const start = getSkyFlappyDifficulty(0) + const advanced = getSkyFlappyDifficulty(20) + const maximum = getSkyFlappyDifficulty(100) + + expect(advanced.speed).toBeGreaterThan(start.speed) + expect(advanced.gapHeight).toBeLessThan(start.gapHeight) + expect(maximum.speed).toBe(FLAPPY_MAX_SPEED) + expect(maximum.gapHeight).toBe(FLAPPY_MIN_GAP_HEIGHT) + }) + it('scores an obstacle only once', () => { const state = { ...flapSkyGlider(createSkyFlappyGame()), - obstacles: [{ gapTop: 30, id: 1, scored: false, x: 7 }], + obstacles: [{ gapHeight: FLAPPY_GAP_HEIGHT, gapTop: 30, id: 1, scored: false, x: 7 }], } const scored = stepSkyFlappy(state, 0.01, () => 0.5) expect(scored.score).toBe(1) @@ -49,7 +63,7 @@ describe('sky flappy engine', () => { it('detects collision using the player edges', () => { const state = { ...flapSkyGlider(createSkyFlappyGame()), - obstacles: [{ gapTop: 40, id: 1, scored: false, x: 22 }], + obstacles: [{ gapHeight: FLAPPY_GAP_HEIGHT, gapTop: 40, id: 1, scored: false, x: 22 }], playerY: 41, playerVelocity: 0, } diff --git a/frontend/src/features/games/sky-flappy/engine.ts b/frontend/src/features/games/sky-flappy/engine.ts index 1413e0d..4dae434 100644 --- a/frontend/src/features/games/sky-flappy/engine.ts +++ b/frontend/src/features/games/sky-flappy/engine.ts @@ -6,8 +6,21 @@ export const FLAPPY_GRAVITY = 82 export const FLAPPY_IMPULSE = -34 export const FLAPPY_OBSTACLE_WIDTH = 14 export const FLAPPY_GAP_HEIGHT = 29 +export const FLAPPY_MIN_GAP_HEIGHT = 22 export const FLAPPY_MIN_GAP_TOP = 15 export const FLAPPY_MAX_GAP_TOP = 56 +export const FLAPPY_BASE_SPEED = 20.5 +export const FLAPPY_MAX_SPEED = 40 + +export function getSkyFlappyDifficulty(score: number): { + gapHeight: number + speed: number +} { + return { + gapHeight: Math.max(FLAPPY_MIN_GAP_HEIGHT, FLAPPY_GAP_HEIGHT - score * 0.35), + speed: Math.min(FLAPPY_MAX_SPEED, FLAPPY_BASE_SPEED + score * 0.65), + } +} export function createSkyFlappyGame(): SkyFlappyGameState { return { @@ -27,9 +40,11 @@ export function flapSkyGlider(state: SkyFlappyGameState): SkyFlappyGameState { function createObstacle( id: number, + gapHeight: number, random: () => number, ): SkyFlappyObstacle { return { + gapHeight, gapTop: FLAPPY_MIN_GAP_TOP + Math.max(0, Math.min(1, random())) * @@ -52,7 +67,7 @@ function collidesWithObstacle( return ( playerY - FLAPPY_PLAYER_RADIUS < obstacle.gapTop || - playerY + FLAPPY_PLAYER_RADIUS > obstacle.gapTop + FLAPPY_GAP_HEIGHT + playerY + FLAPPY_PLAYER_RADIUS > obstacle.gapTop + obstacle.gapHeight ) } @@ -63,19 +78,22 @@ export function stepSkyFlappy( ): SkyFlappyGameState { if (state.status !== 'playing' || elapsedSeconds <= 0) return state - const speed = Math.min(33, 20.5 + state.score * 0.38) + const difficulty = getSkyFlappyDifficulty(state.score) const playerVelocity = state.playerVelocity + FLAPPY_GRAVITY * elapsedSeconds const playerY = state.playerY + playerVelocity * elapsedSeconds let nextObstacleId = state.nextObstacleId let obstacles = state.obstacles .map((obstacle) => ({ ...obstacle, - x: obstacle.x - speed * elapsedSeconds, + x: obstacle.x - difficulty.speed * elapsedSeconds, })) .filter((obstacle) => obstacle.x + FLAPPY_OBSTACLE_WIDTH > -2) if (obstacles.length === 0 || obstacles[obstacles.length - 1].x < 61) { - obstacles = [...obstacles, createObstacle(nextObstacleId, random)] + obstacles = [ + ...obstacles, + createObstacle(nextObstacleId, difficulty.gapHeight, random), + ] nextObstacleId += 1 } diff --git a/frontend/src/features/games/sky-flappy/types.ts b/frontend/src/features/games/sky-flappy/types.ts index fa42cb4..f4fd71d 100644 --- a/frontend/src/features/games/sky-flappy/types.ts +++ b/frontend/src/features/games/sky-flappy/types.ts @@ -2,6 +2,7 @@ export type SkyFlappyStatus = 'over' | 'paused' | 'playing' | 'ready' export type SkyFlappyDesign = 'dawn' | 'neon' | 'storm' export type SkyFlappyObstacle = { + gapHeight: number gapTop: number id: number scored: boolean diff --git a/frontend/src/views/apps/SkyFlappyApp.vue b/frontend/src/views/apps/SkyFlappyApp.vue index c727e9d..befce7d 100644 --- a/frontend/src/views/apps/SkyFlappyApp.vue +++ b/frontend/src/views/apps/SkyFlappyApp.vue @@ -141,7 +141,7 @@ onBeforeUnmount(() => {