├── .editorconfig ├── .github ├── CODE_OF_CONDUCT.md ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── actions │ └── bump-manifest-version.js ├── contributing.md ├── pull_request_template.md └── workflows │ ├── discord-commit.yml │ ├── discord-release.yml │ ├── issues-project.yml │ ├── lint.yml │ ├── release-action.yml │ └── release.yml ├── .vscode ├── extensions.json └── settings.json ├── LICENSE ├── README.md ├── client ├── anpr.lua ├── camera.lua ├── evidence.lua ├── heli.lua ├── interactions.lua ├── job.lua ├── main.lua ├── objects.lua └── tracker.lua ├── config ├── client.lua ├── server.lua └── shared.lua ├── fxmanifest.lua ├── html ├── fingerprint.png ├── index.html ├── main.css ├── script.js └── vue.min.js ├── locales ├── ar.json ├── cs.json ├── da.json ├── de.json ├── en.json ├── es.json ├── fi.json ├── fr.json ├── it.json ├── pl.json ├── pt-br.json ├── pt.json ├── ro.json ├── sk.json └── tr.json └── server ├── commands.lua ├── main.lua ├── objects.lua └── storage.lua /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = false 6 | indent_style = space 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | indent_size = 4 10 | 11 | [*.{sql,html,css,json,js,ts,jsx,tsx}] 12 | indent_size = 2 13 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | education, socio-economic status, nationality, personal appearance, race, 10 | religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team in the discord at https://discord.gg/Z6Whda5hHA. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug report 2 | description: Create a report to help us improve or fix something 3 | labels: ['bug', 'need repro'] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thank you for taking the time to fill out a bug report! 9 | Please use our Discord Server to ask questions and receive support: https://discord.gg/Z6Whda5hHA 10 | - type: input 11 | id: summary 12 | attributes: 13 | label: Summary 14 | description: Write a short and concise description of your bug. 15 | validations: 16 | required: true 17 | - type: textarea 18 | id: repro 19 | attributes: 20 | label: Reproduction 21 | description: What did you do to make this happen? 22 | placeholder: | 23 | 1. Using ... 24 | 2. Do ... 25 | 3. Then use ... 26 | 4. See error 27 | validations: 28 | required: true 29 | - type: textarea 30 | id: expected 31 | attributes: 32 | label: Expected behavior 33 | description: What did you expect to happen? 34 | validations: 35 | required: true 36 | - type: textarea 37 | id: actual 38 | attributes: 39 | label: Actual behavior 40 | description: What actually happened? 41 | validations: 42 | required: true 43 | - type: textarea 44 | id: additional 45 | attributes: 46 | label: Additional context 47 | description: If you have any other context about the problem such as screenshots or videos, add them here. 48 | - type: input 49 | id: updated 50 | attributes: 51 | label: Current Version 52 | description: What version of the resource are you currently using? 53 | placeholder: e.g. v1.3.0, v1.4.0 54 | validations: 55 | required: true 56 | - type: input 57 | id: custom 58 | attributes: 59 | label: Custom Resources 60 | description: Are you using custom resources? Which ones? 61 | placeholder: e.g. zdiscord, qb-target 62 | validations: 63 | required: true 64 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Qbox Discord Server 4 | url: https://discord.gg/Z6Whda5hHA 5 | about: Ask questions, receive support, and discuss with the community in our Discord server. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for Qbox 3 | labels: enhancement 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Please use our Discord Server to ask questions and receive support: https://discord.gg/Z6Whda5hHA 9 | - type: textarea 10 | id: problem 11 | attributes: 12 | label: The problem 13 | description: A clear and concise description of what the problem is, or what feature you want to be implemented. 14 | placeholder: | 15 | Some examples: 16 | I'm frustrated that ... 17 | It would be nice if ... 18 | validations: 19 | required: true 20 | - type: textarea 21 | id: solution 22 | attributes: 23 | label: Ideal solution 24 | description: A clear and concise description of what you want to happen, with as much detail as possible. 25 | validations: 26 | required: true 27 | - type: textarea 28 | id: alternatives 29 | attributes: 30 | label: Alternative solutions 31 | description: A clear and concise description of any alternative solutions or features you've considered. 32 | - type: textarea 33 | id: additional 34 | attributes: 35 | label: Additional context 36 | description: If you have any other context about the problem such as screenshots or videos, add them here. 37 | -------------------------------------------------------------------------------- /.github/actions/bump-manifest-version.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | 3 | const version = process.env.TGT_RELEASE_VERSION 4 | const newVersion = version.replace('v', '') 5 | 6 | const manifestFile = fs.readFileSync('fxmanifest.lua', {encoding: 'utf8'}) 7 | 8 | const versionStr = `version '${newVersion}'` 9 | let newFileContent = manifestFile.replace(/\bversion\s+(.*)$/gm, versionStr) 10 | 11 | if (!newFileContent.includes(versionStr)) { 12 | newFileContent = manifestFile.replace(/\bgame\s+(.*)$/gm, `game 'gta5'\n${versionStr}`); 13 | } 14 | 15 | fs.writeFileSync('fxmanifest.lua', newFileContent) -------------------------------------------------------------------------------- /.github/contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to Qbox 2 | 3 | Thank you for taking the time to contribute! 4 | 5 | These guidelines will help you help us in the best way possible regardless of your skill level. We ask that you try to read everything related to the way you'd like to contribute and try and use your best judgement for anything not covered. 6 | 7 | Make sure to also read our [Contributor Code of Conduct](./CODE_OF_CONDUCT.md). 8 | 9 | If you still have further questions after reading be sure to join the [Qbox Discord server][discord link]. 10 | 11 | ## Issues 12 | 13 | Open a new issue to report a bug or request a new feature or improvement. 14 | 15 | If you want to ask a question, issues are not the place to do so. Please join our [Discord server][discord link] and ask over there instead. 16 | 17 | Before opening a new issue: 18 | 19 | - [Search](https://github.com/issues?q=is%3Aissue+org%3AQbox-Project) for existing issues; maybe someone else already experienced the same problem that you're having! Duplicate issues will be closed. 20 | - Download the latest release of the resource you are opening the issue for to make sure that it wasn't already fixed. Issues that are already fixed are considered invalid and will be closed. 21 | 22 | When opening a new issue, make sure to pick the right type of form and fill it out. The more information you provide, the easier it will be for us to work on your new issue. Issues that are invalid or do not follow the correct form may be ignored or even closed. 23 | 24 | ## Pull Requests 25 | 26 | Open a new pull request to contribute code. 27 | 28 | You can use your own editor of choice, but we recommend using [VSCode](https://code.visualstudio.com/) with these extensions: 29 | 30 | - [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) 31 | - [Lua Language Server](https://marketplace.visualstudio.com/items?itemName=sumneko.lua) 32 | - [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) 33 | - [CfxLua IntelliSense](https://marketplace.visualstudio.com/items?itemName=overextended.cfxlua-vscode) 34 | 35 | If you are new to contributing code, you can check out and try to fix issues marked with [`good first issue`](https://github.com/issues?q=is%3Aissue+is%3Aopen+org%3AQbox-Project+label%3A%22good+first+issue%22). 36 | 37 | If you want to contribute code but don't know what to do, please check out issues marked with [`help wanted`](https://github.com/issues?q=is%3Aissue+is%3Aopen+org%3AQbox-Project+label%3A%22help+wanted%22) as those are issues that we actually *need* help with. 38 | 39 | If you want to contribute code unrelated to an existing issue, you should open an issue yourself or ask over on the [Discord server][discord link] to discuss it with our team and ask whether your change is wanted, especially if you are planning on adding new features or large designs. 40 | 41 | Before opening a pull request: 42 | 43 | - Make sure that your contribution fits our [code conventions](#code-conventions) described below. After opening a pull request your code will be checked according to them. 44 | - Make sure that your pull request is small and focused. Break it into multiple smaller pull requests if not (see [Small Pull Request Manifesto](https://github.com/PlaytikaOSS/small-pull-request-manifesto)). 45 | - It is recommended to test your changes to make sure they work and don't break existing functionality. 46 | 47 | When opening a pull request, make sure to follow the template and explain your changes. If you are trying to contribute something related to a GitHub issue, make sure to mention it as well. 48 | 49 | ## Code Conventions 50 | 51 | Below are conventions that you must follow when contributing code. 52 | 53 | ### Commit Message Conventions 54 | 55 | - The first line of a commit message must be 72 characters at most. 56 | - Commit messages and pull request titles must follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). 57 | - Use `fix:` when patching a bug. 58 | - Use `feat:` when introducing a new feature. 59 | - Use `refactor:` when altering code without changing functionality. 60 | - Use `chore:` when your changes don't alter production code. 61 | - Append a `!` after the type/scope of the feature when you change code and introduce a breaking API change. Optionally add a footer to the bottom of your commit message separated by 2 newlines, starting with `BREAKING CHANGE:`, and explaining the breaking change. 62 | 63 | ### Lua Conventions 64 | 65 | #### General Style 66 | 67 | - Use 4 space indentation. 68 | - Prefer creating local variables over global ones. 69 | - Don't repeat yourself. If you're using the same operations in multiple different places convert them into a flexible function. 70 | - Exported functions must be properly annotated (see [LuaLS Annotations](https://luals.github.io/wiki/annotations/)). 71 | - Utilize [ox_lib](https://overextended.dev/ox_lib) to make your life easier. Prefer lib calls over native ones. 72 | - Make use of config options where it makes sense to make features optional and/or customizable. Configs should not be modified by other code. 73 | 74 | #### Optimization & Security 75 | 76 | - Consider [this Lua Performance guide](https://springrts.com/wiki/Lua_Performance). 77 | - Don't create unnecessary threads. Always try to find a better method of triggering events. 78 | - Set longer `Wait` calls in distance checking loops when the player is out of range. 79 | - Don't waste cycles; job specific loops should only run for players with that job. 80 | - When possible don't trust the client, *especially* with transactions. 81 | - Balance security and optimizations. 82 | - Use `#(vector3 - vector3)` instead of `GetDistanceBetweenCoords()`. 83 | - Use `myTable[#myTable + 1] = 'value'` instead of `table.insert(myTable, 'value')`. 84 | - Use `myTable['key'] = 'value'` instead of `table.insert(myTable, 'key', 'value')`. 85 | 86 | #### Naming 87 | 88 | - Use `camelCase` for local variables and functions. 89 | - Use `PascalCase` for global variables and functions. 90 | - Avoid acronyms as they can be confusing and context dependant. 91 | - Be descriptive; make it easy for the reader. 92 | - Booleans may be prefixed with `is`, `has`, `are`, etc. 93 | - Arrays should have plural names. 94 | 95 | ### JavaScript/TypeScript Conventions 96 | 97 | Consider following the [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html) and the [Google TypeScript Style Guide](https://google.github.io/styleguide/tsguide.html). 98 | 99 | [discord link]: https://discord.gg/Z6Whda5hHA 100 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | 4 | 5 | ## Checklist 6 | 7 | 8 | 9 | - [ ] I have personally loaded this code into an updated Qbox project and checked all of its functionality. 10 | - [ ] My pull request fits the contribution guidelines & code conventions. 11 | -------------------------------------------------------------------------------- /.github/workflows/discord-commit.yml: -------------------------------------------------------------------------------- 1 | name: "Discord Commit" 2 | 3 | on: [push] 4 | 5 | jobs: 6 | report-status: 7 | if: github.event.repository.default_branch == github.ref_name 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout repository 11 | uses: actions/checkout@v4 12 | - name: Discord Webhook 13 | uses: ChatDisabled/discord-commits@main 14 | with: 15 | id: ${{ secrets.WEBHOOK_ID }} 16 | token: ${{ secrets.WEBHOOK_TOKEN }} 17 | -------------------------------------------------------------------------------- /.github/workflows/discord-release.yml: -------------------------------------------------------------------------------- 1 | name: "Discord Releases" 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | github-releases-to-discord: 9 | name: Discord Releases Changelog 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout Repository 13 | uses: actions/checkout@v4 14 | - name: Github Releases To Discord 15 | uses: SethCohen/github-releases-to-discord@v1.16.2 16 | with: 17 | webhook_url: ${{ secrets.WEBHOOK_URL }} 18 | color: "15852866" 19 | username: ${{ github.event.repository.name }} 20 | avatar_url: "https://i.imgur.com/Eh1yiLI.png" 21 | footer_timestamp: true 22 | -------------------------------------------------------------------------------- /.github/workflows/issues-project.yml: -------------------------------------------------------------------------------- 1 | name: Issues Project Management 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | 8 | jobs: 9 | add-to-project: 10 | name: Add issue to project 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Get App Token 14 | uses: actions/create-github-app-token@v1 15 | id: generate_token 16 | with: 17 | app-id: ${{ secrets.APP_ID }} 18 | private-key: ${{ secrets.PRIVATE_KEY }} 19 | - uses: actions/add-to-project@v0.5.0 20 | with: 21 | project-url: https://github.com/orgs/Qbox-project/projects/4 22 | github-token: ${{ steps.generate_token.outputs.token }} 23 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | on: 3 | push: 4 | paths: 5 | - '**.lua' 6 | - '.github/workflows/lint.yml' 7 | pull_request_target: 8 | paths: 9 | - '**.lua' 10 | - '.github/workflows/lint.yml' 11 | jobs: 12 | lint: 13 | name: Lint Resource 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | with: 18 | ref: ${{ github.event.pull_request.head.sha }} 19 | - name: Lint 20 | uses: iLLeniumStudios/fivem-lua-lint-action@v2 21 | with: 22 | capture: "junit.xml" 23 | args: "-t --formatter JUnit" 24 | extra_libs: ox_lib+mysql+qblocales+qbox+qbox_playerdata+qbox_lib 25 | - name: Generate Lint Report 26 | if: always() 27 | uses: mikepenz/action-junit-report@v4 28 | with: 29 | report_paths: "**/junit.xml" 30 | check_name: Linting Report 31 | fail_on_failure: false 32 | -------------------------------------------------------------------------------- /.github/workflows/release-action.yml: -------------------------------------------------------------------------------- 1 | name: "release-action" 2 | 3 | on: 4 | push: 5 | tags: 6 | - "v*" 7 | 8 | jobs: 9 | release-action: 10 | name: "Create Release" 11 | runs-on: "ubuntu-latest" 12 | steps: 13 | - name: Checkout Repository 14 | uses: actions/checkout@v4 15 | with: 16 | fetch-depth: 0 17 | ref: ${{ github.event.repository.default_branch }} 18 | 19 | - name: Install ZIP 20 | run: sudo apt install zip 21 | 22 | - name: Bundle files 23 | run: | 24 | rm -rf ./.github ./.vscode ./.git 25 | shopt -s extglob 26 | mkdir ./${{ github.event.repository.name }} 27 | cp -r !(${{ github.event.repository.name }}) ${{ github.event.repository.name }} 28 | zip -r ./${{ github.event.repository.name }}.zip ./${{ github.event.repository.name }} 29 | 30 | - name: Get App Token 31 | uses: actions/create-github-app-token@v1 32 | id: generate_token 33 | with: 34 | app-id: ${{ secrets.APP_ID }} 35 | private-key: ${{ secrets.PRIVATE_KEY }} 36 | 37 | - name: Update CHANGELOG 38 | id: changelog 39 | uses: requarks/changelog-action@v1 40 | continue-on-error: true 41 | with: 42 | token: ${{ steps.generate_token.outputs.token }} 43 | tag: ${{ github.ref_name }} 44 | includeInvalidCommits: true 45 | useGitmojis: false 46 | writeToFile: false 47 | 48 | - name: Create Release 49 | uses: ncipollo/release-action@v1.14.0 50 | with: 51 | allowUpdates: true 52 | draft: false 53 | makeLatest: true 54 | name: ${{ github.ref_name }} 55 | tag: ${{ github.ref_name }} 56 | body: ${{ steps.changelog.outputs.changes }} 57 | artifacts: ${{ github.event.repository.name }}.zip 58 | token: ${{ steps.generate_token.outputs.token }} 59 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Create New Release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | version: 7 | required: true 8 | 9 | jobs: 10 | create-release: 11 | name: Create New Release 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Get App Token 15 | uses: actions/create-github-app-token@v1 16 | id: generate_token 17 | with: 18 | app-id: ${{ secrets.APP_ID }} 19 | private-key: ${{ secrets.PRIVATE_KEY }} 20 | 21 | - name: Checkout Repository 22 | uses: actions/checkout@v4 23 | with: 24 | token: ${{ steps.generate_token.outputs.token }} 25 | 26 | - name: Setup node 27 | uses: actions/setup-node@v4 28 | with: 29 | node-version: 20.x 30 | 31 | - name: Bump manifest version 32 | run: node .github/actions/bump-manifest-version.js 33 | env: 34 | TGT_RELEASE_VERSION: ${{ inputs.version }} 35 | 36 | - name: Push manifest change 37 | uses: EndBug/add-and-commit@v9 38 | with: 39 | add: fxmanifest.lua 40 | push: true 41 | message: 'chore: bump manifest version to ${{ inputs.version }}' 42 | tag: ${{ inputs.version }} 43 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "sumneko.lua", 4 | "overextended.cfxlua-vscode", 5 | "ihyajb.qbcore-code-snippets", 6 | "EditorConfig.EditorConfig", 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Lua.runtime.nonstandardSymbol": ["/**/", "`", "+=", "-=", "*=", "/="], 3 | "Lua.runtime.version": "Lua 5.4", 4 | "Lua.diagnostics.globals": [ 5 | "lib", 6 | "cache", 7 | "locale", 8 | "MySQL", 9 | "QBX", 10 | "qbx" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # qbx_policejob 2 | Police Job for QBOX :police_officer: 3 | 4 | ## Dependencies 5 | - [qbx_core](https://github.com/Qbox-project/qbx_core) 6 | - [ox_lib](https://github.com/overextended/ox_lib) - For UI elements and cached data 7 | 8 | ## Screenshots 9 | *We need new ones* 10 | 11 | ## Features 12 | - Classical requirements like on duty/off duty, clothing, vehicle, stash etc. 13 | - Citizen ID based armory (Whitelisted) 14 | - Fingerprint test 15 | - Evidence locker (stash) 16 | - Whitelisted vehicles 17 | - Speed radars across the map 18 | - Stormram 19 | - Impounding player vehicle (permanent / for an amount of money) 20 | - Integrated jail system 21 | - Bullet casings 22 | - GSR 23 | - Blood drop 24 | - Evidence bag & Money bag 25 | - Police radar 26 | - Handcuff as an item (Can used via command too. Check Commands section.) 27 | - Emergency services can see each other on map 28 | 29 | ### Commands 30 | - /spikestrip - Places spike strip on ground. 31 | - /grantlicense - Give access to a license for a user. 32 | - /revokelicense - Revoke access to a license for a user. 33 | - /pobject [cone/barrier/roadsign/tent/light/delete] - Places or deletes an object on/from ground. 34 | - /cuff - Cuffs/Uncuffs nearby player 35 | - /escort - Escorts nearby plyer. 36 | - /callsign [text] - Sets the player a callsign on database. 37 | - /clearcasings - Clears nearby bullet casings. 38 | - /jail [id] [time] - Sends a player to the jail. 39 | - /unjail [id] - Takes the player out of jail. 40 | - /clearblood - Clears nearby blood drops. 41 | - /seizecash - Seizes nearby player's cash. (Puts in money bag) 42 | - /sc - Puts soft cuff on nearby player. 43 | - /cam [cam] - Shows the selected security cam display. 44 | - /flagplate [plate] [reason] - Flags the vehicle. 45 | - /unflagplate [plate] - Removes the flag of a vehicle. 46 | - /plateinfo [plate] - Displays if a vehicle is marked or not. 47 | - /depot [price] - Depots nearby vehicle. Player can take it after paying the cost. 48 | - /impound - Impounds nearby vehicle permanently. 49 | - /paytow [id] - Makes payment to the tow driver. 50 | - /paylawyer [id] - Makes payment to the lawyer. 51 | - /anklet - Places anklet (tracking device) on nearby player. 52 | - /ankletlocation [citizenId] - Get the location of the player with the specified citizenId. 53 | - /takedna [id] - Takes a DNA sample from the player. 54 | - /911p [message] - Sends a report to the police. 55 | 56 | ## Installation 57 | ### Manual 58 | - Download the script and put it in the `[qbx]` directory. 59 | - Add the following code to your server.cfg/resouces.cfg 60 | 61 | ``` 62 | ensure qbx_core 63 | ensure qbx_policejob 64 | ``` 65 | -------------------------------------------------------------------------------- /client/anpr.lua: -------------------------------------------------------------------------------- 1 | local config = require 'config.client'.radars 2 | local sharedConfig = require 'config.shared'.radars 3 | 4 | if not config.enableRadars then return end 5 | 6 | local speedCams = {} 7 | 8 | local function speedRange(speed) 9 | speed = math.ceil(speed) 10 | for i = 1, #sharedConfig.speedFines do 11 | if speed < sharedConfig.speedFines[i].maxSpeed then 12 | TriggerServerEvent('police:server:Radar', i) 13 | TriggerServerEvent('InteractSound_SV:PlayOnSource', 'speedcamera', 0.25) 14 | break 15 | end 16 | end 17 | end 18 | 19 | local function handleSpeedCam(speedCam, radar) 20 | if not cache.vehicle or cache.seat ~= -1 or GetVehicleClass(cache.vehicle) == 18 then return end 21 | local plate = qbx.getVehiclePlate(cache.vehicle) 22 | local speed = GetEntitySpeed(cache.vehicle) * (config.useMPH and 2.236936 or 3.6) 23 | local overLimit = speed - speedCam.speed 24 | 25 | lib.callback('police:server:isPlateFlagged', false, function(result) 26 | if not result then return end 27 | local s1, s2 = GetStreetNameAtCoord(speedCam.coords.x, speedCam.coords.y, speedCam.coords.z) 28 | local street = GetStreetNameFromHashKey(s1) 29 | local street2 = GetStreetNameFromHashKey(s2) 30 | if street2 then 31 | street = street .. ' | ' .. street2 32 | end 33 | TriggerServerEvent('police:server:FlaggedPlateTriggered', radar, plate, street) 34 | end, plate) 35 | 36 | if not sharedConfig.speedFines or overLimit < 0 then return end 37 | speedRange(overLimit) 38 | end 39 | 40 | CreateThread(function() 41 | for i = 1, #config.locations do 42 | local point = lib.points.new({ 43 | coords = config.locations[i].coords, 44 | distance = 20.0, 45 | speed = config.locations[i].speedlimit, 46 | }) 47 | 48 | speedCams[#speedCams + 1] = point 49 | 50 | function point:onEnter() 51 | handleSpeedCam(self, #speedCams) 52 | end 53 | end 54 | end) 55 | -------------------------------------------------------------------------------- /client/camera.lua: -------------------------------------------------------------------------------- 1 | local config = require 'config.client'.securityCameras 2 | local currentCamIndex = 0 3 | local createdCam = 0 4 | local currentScaleform = -1 5 | 6 | local function getCurrentTime() 7 | local hours = GetClockHours() 8 | local minutes = GetClockMinutes() 9 | if hours < 10 then 10 | hours = tostring(0 .. GetClockHours()) 11 | end 12 | if minutes < 10 then 13 | minutes = tostring(0 .. GetClockMinutes()) 14 | end 15 | return tostring(hours .. ':' .. minutes) 16 | end 17 | 18 | local function createInstructionalScaleform(scaleform) 19 | scaleform = lib.requestScaleformMovie(scaleform) 20 | PushScaleformMovieFunction(scaleform, 'CLEAR_ALL') 21 | PopScaleformMovieFunctionVoid() 22 | 23 | PushScaleformMovieFunction(scaleform, 'SET_CLEAR_SPACE') 24 | PushScaleformMovieFunctionParameterInt(200) 25 | PopScaleformMovieFunctionVoid() 26 | 27 | PushScaleformMovieFunction(scaleform, 'SET_DATA_SLOT') 28 | PushScaleformMovieFunctionParameterInt(1) 29 | ScaleformMovieMethodAddParamPlayerNameString(GetControlInstructionalButton(1, 194, true)) 30 | BeginTextCommandScaleformString('STRING') 31 | AddTextComponentScaleform(locale('info.close_camera')) 32 | EndTextCommandScaleformString() 33 | PopScaleformMovieFunctionVoid() 34 | 35 | PushScaleformMovieFunction(scaleform, 'DRAW_INSTRUCTIONAL_BUTTONS') 36 | PopScaleformMovieFunctionVoid() 37 | 38 | PushScaleformMovieFunction(scaleform, 'SET_BACKGROUND_COLOUR') 39 | PushScaleformMovieFunctionParameterInt(0) 40 | PushScaleformMovieFunctionParameterInt(0) 41 | PushScaleformMovieFunctionParameterInt(0) 42 | PushScaleformMovieFunctionParameterInt(80) 43 | PopScaleformMovieFunctionVoid() 44 | 45 | return scaleform 46 | end 47 | 48 | local function changeSecurityCamera(x, y, z, r) 49 | if createdCam ~= 0 then 50 | DestroyCam(createdCam, false) 51 | createdCam = 0 52 | end 53 | 54 | if currentScaleform ~= -1 then 55 | SetScaleformMovieAsNoLongerNeeded(currentScaleform) 56 | currentScaleform = -1 57 | end 58 | 59 | local cam = CreateCam('DEFAULT_SCRIPTED_CAMERA', true) 60 | SetCamCoord(cam, x, y, z) 61 | SetCamRot(cam, r.x, r.y, r.z, 2) 62 | RenderScriptCams(true, false, 0, true, true) 63 | Wait(250) 64 | createdCam = cam 65 | currentScaleform = createInstructionalScaleform('instructional_buttons') 66 | end 67 | 68 | local function closeSecurityCamera() 69 | DestroyCam(createdCam, false) 70 | RenderScriptCams(false, false, 1, true, true) 71 | createdCam = 0 72 | SetScaleformMovieAsNoLongerNeeded(currentScaleform) 73 | currentScaleform = -1 74 | ClearTimecycleModifier() 75 | SetFocusEntity(cache.ped) 76 | if config.hideRadar then 77 | DisplayRadar(true) 78 | end 79 | FreezeEntityPosition(cache.ped, false) 80 | end 81 | 82 | RegisterNetEvent('police:client:ActiveCamera', function(camId) 83 | if GetInvokingResource() then return end 84 | if config.cameras[camId] then 85 | DoScreenFadeOut(250) 86 | while not IsScreenFadedOut() do 87 | Wait(0) 88 | end 89 | SendNUIMessage({ 90 | type = 'enablecam', 91 | label = config.cameras[camId].label, 92 | id = camId, 93 | connected = config.cameras[camId].isOnline, 94 | time = getCurrentTime(), 95 | }) 96 | local firstCamX = config.cameras[camId].coords.x 97 | local firstCamY = config.cameras[camId].coords.y 98 | local firstCamZ = config.cameras[camId].coords.z 99 | local firstCamR = config.cameras[camId].r 100 | SetFocusArea(firstCamX, firstCamY, firstCamZ, firstCamX, firstCamY, firstCamZ) 101 | changeSecurityCamera(firstCamX, firstCamY, firstCamZ, firstCamR) 102 | currentCamIndex = camId 103 | DoScreenFadeIn(250) 104 | elseif camId == 0 then 105 | DoScreenFadeOut(250) 106 | while not IsScreenFadedOut() do 107 | Wait(0) 108 | end 109 | closeSecurityCamera() 110 | SendNUIMessage({ 111 | type = 'disablecam', 112 | }) 113 | DoScreenFadeIn(250) 114 | else 115 | exports.qbx_core:Notify(locale('error.no_camera'), 'error') 116 | end 117 | end) 118 | 119 | RegisterNetEvent('police:client:DisableAllCameras', function() 120 | if GetInvokingResource() then return end 121 | for i = 1, #config.cameras do 122 | config.cameras[i].isOnline = false 123 | end 124 | end) 125 | 126 | RegisterNetEvent('police:client:EnableAllCameras', function() 127 | if GetInvokingResource() then return end 128 | for i = 1, #config.cameras do 129 | config.cameras[i].isOnline = true 130 | end 131 | end) 132 | 133 | RegisterNetEvent('police:client:SetCamera', function(key, isOnline) 134 | if GetInvokingResource() then return end 135 | if type(key) == 'table' and table.type(key) == 'array' then 136 | for i = 1, #key do 137 | config.cameras[key[i]].isOnline = isOnline 138 | end 139 | elseif type(key) == 'number' then 140 | config.cameras[key].isOnline = isOnline 141 | else 142 | error('police:client:SetCamera did not receive the right type of key\nreceived type: ' .. type(key) .. '\nreceived value: ' .. key) 143 | end 144 | end) 145 | 146 | local function listenForCamControls() 147 | DrawScaleformMovieFullscreen(currentScaleform, 255, 255, 255, 255, 0) 148 | SetTimecycleModifier('scanline_cam_cheap') 149 | SetTimecycleModifierStrength(1.0) 150 | 151 | if config.hideRadar then 152 | DisplayRadar(false) 153 | end 154 | 155 | -- CLOSE CAMERAS 156 | if IsControlJustPressed(1, 177) then 157 | DoScreenFadeOut(250) 158 | while not IsScreenFadedOut() do 159 | Wait(0) 160 | end 161 | closeSecurityCamera() 162 | SendNUIMessage({ 163 | type = 'disablecam', 164 | }) 165 | DoScreenFadeIn(250) 166 | end 167 | 168 | --------------------------------------------------------------------------- 169 | -- CAMERA ROTATION CONTROLS 170 | --------------------------------------------------------------------------- 171 | if config.cameras[currentCamIndex].canRotate then 172 | local getCamRot = GetCamRot(createdCam, 2) 173 | 174 | -- ROTATE UP 175 | if IsControlPressed(0, 32) then 176 | if getCamRot.x <= 0.0 then 177 | SetCamRot(createdCam, getCamRot.x + 0.7, 0.0, getCamRot.z, 2) 178 | end 179 | end 180 | 181 | -- ROTATE DOWN 182 | if IsControlPressed(0, 8) then 183 | if getCamRot.x >= -50.0 then 184 | SetCamRot(createdCam, getCamRot.x - 0.7, 0.0, getCamRot.z, 2) 185 | end 186 | end 187 | 188 | -- ROTATE LEFT 189 | if IsControlPressed(0, 34) then 190 | SetCamRot(createdCam, getCamRot.x, 0.0, getCamRot.z + 0.7, 2) 191 | end 192 | 193 | -- ROTATE RIGHT 194 | if IsControlPressed(0, 9) then 195 | SetCamRot(createdCam, getCamRot.x, 0.0, getCamRot.z - 0.7, 2) 196 | end 197 | end 198 | end 199 | 200 | CreateThread(function() 201 | while true do 202 | if createdCam == 0 or currentScaleform == -1 then 203 | Wait(2000) 204 | else 205 | listenForCamControls() 206 | Wait(0) 207 | end 208 | end 209 | end) 210 | -------------------------------------------------------------------------------- /client/main.lua: -------------------------------------------------------------------------------- 1 | local config = require 'config.shared' 2 | IsEscorted = false 3 | local dutyBlips = {} 4 | 5 | local function CreateDutyBlips(playerId, playerLabel, playerJob, playerLocation) 6 | local ped = GetPlayerPed(playerId) 7 | local blip = GetBlipFromEntity(ped) 8 | if not DoesBlipExist(blip) then 9 | if NetworkIsPlayerActive(playerId) then 10 | blip = AddBlipForEntity(ped) 11 | else 12 | blip = AddBlipForCoord(playerLocation.x, playerLocation.y, playerLocation.z) 13 | end 14 | SetBlipSprite(blip, 1) 15 | ShowHeadingIndicatorOnBlip(blip, true) 16 | SetBlipRotation(blip, math.ceil(playerLocation.w)) 17 | SetBlipScale(blip, 1.0) 18 | if playerJob == 'police' then 19 | SetBlipColour(blip, 38) 20 | else 21 | SetBlipColour(blip, 5) 22 | end 23 | SetBlipAsShortRange(blip, true) 24 | BeginTextCommandSetBlipName('STRING') 25 | AddTextComponentString(playerLabel) 26 | EndTextCommandSetBlipName(blip) 27 | dutyBlips[#dutyBlips + 1] = blip 28 | end 29 | 30 | if GetBlipFromEntity(cache.ped) == blip then 31 | -- Ensure we remove our own blip. 32 | RemoveBlip(blip) 33 | end 34 | end 35 | 36 | local function removeBlips() 37 | for i = 1, #dutyBlips do 38 | RemoveBlip(dutyBlips[i]) 39 | end 40 | dutyBlips = {} 41 | end 42 | 43 | AddEventHandler('QBCore:Client:OnPlayerLoaded', function() 44 | TriggerServerEvent('police:server:SetHandcuffStatus', false) 45 | TriggerServerEvent('police:server:UpdateCurrentCops') 46 | 47 | local trackerClothingData = {} 48 | 49 | if QBX.PlayerData.metadata.tracker then 50 | trackerClothingData.outfitData = { 51 | accessory = { 52 | item = 13, 53 | texture = 0 54 | } 55 | } 56 | else 57 | trackerClothingData.outfitData = { 58 | accessory = { 59 | item = -1, 60 | texture = 0 61 | } 62 | } 63 | end 64 | 65 | TriggerEvent('qb-clothing:client:loadOutfit', trackerClothingData) 66 | 67 | local job = QBX.PlayerData.job 68 | if not job or job.type ~= 'leo' and job.type ~= 'ems' then 69 | removeBlips() 70 | end 71 | end) 72 | 73 | RegisterNetEvent('QBCore:Client:OnPlayerUnload', function() 74 | TriggerServerEvent('police:server:SetHandcuffStatus', false) 75 | TriggerServerEvent('police:server:UpdateCurrentCops') 76 | IsEscorted = false 77 | ClearPedTasks(cache.ped) 78 | DetachEntity(cache.ped, true, false) 79 | removeBlips() 80 | end) 81 | 82 | RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job) 83 | if job.type ~= 'leo' and job.type ~= 'ems' then 84 | removeBlips() 85 | end 86 | end) 87 | 88 | RegisterNetEvent('police:client:sendBillingMail', function(amount) 89 | SetTimeout(math.random(2500, 4000), function() 90 | local charinfo = QBX.PlayerData.charinfo 91 | local gender = locale(charinfo.gender == 1 and 'info.mrs' or 'info.mr') 92 | TriggerServerEvent('qb-phone:server:sendNewMail', { 93 | sender = locale('email.sender'), 94 | subject = locale('email.subject'), 95 | message = locale('email.message', gender, charinfo.lastname, amount), 96 | button = {} 97 | }) 98 | end) 99 | end) 100 | 101 | RegisterNetEvent('police:client:UpdateBlips', function(players) 102 | local job = QBX.PlayerData.job 103 | if job and (job.type == 'leo' or job.type == 'ems') and job.onduty then 104 | removeBlips() 105 | if players then 106 | for i = 1, #players do 107 | local id = GetPlayerFromServerId(players[i].source) 108 | CreateDutyBlips(id, players[i].label, players[i].job, players[i].location) 109 | end 110 | end 111 | end 112 | end) 113 | 114 | RegisterNetEvent('police:client:policeAlert', function(coords, text, camId) 115 | local street1, street2 = GetStreetNameAtCoord(coords.x, coords.y, coords.z) 116 | local street1name = GetStreetNameFromHashKey(street1) 117 | local street2name = GetStreetNameFromHashKey(street2) 118 | if camId then 119 | exports.qbx_core:Notify(text, 'inform', 5000, street1name.. ' ' ..street2name.. '- Camera ID: ' .. camId) 120 | else 121 | exports.qbx_core:Notify(text,'inform', 5000, street1name.. ' ' ..street2name) 122 | end 123 | PlaySound(-1, 'Lose_1st', 'GTAO_FM_Events_Soundset', false, 0, true) 124 | local transG = 250 125 | local blip = AddBlipForCoord(coords.x, coords.y, coords.z) 126 | local blip2 = AddBlipForCoord(coords.x, coords.y, coords.z) 127 | local blipText = locale('info.blip_text', text) 128 | SetBlipSprite(blip, 60) 129 | SetBlipSprite(blip2, 161) 130 | SetBlipColour(blip, 1) 131 | SetBlipColour(blip2, 1) 132 | SetBlipDisplay(blip, 4) 133 | SetBlipDisplay(blip2, 8) 134 | SetBlipAlpha(blip, transG) 135 | SetBlipAlpha(blip2, transG) 136 | SetBlipScale(blip, 0.8) 137 | SetBlipScale(blip2, 2.0) 138 | SetBlipAsShortRange(blip, false) 139 | SetBlipAsShortRange(blip2, false) 140 | PulseBlip(blip2) 141 | BeginTextCommandSetBlipName('STRING') 142 | AddTextComponentString(blipText) 143 | EndTextCommandSetBlipName(blip) 144 | while transG ~= 0 do 145 | Wait(180 * 4) 146 | transG -= 1 147 | SetBlipAlpha(blip, transG) 148 | SetBlipAlpha(blip2, transG) 149 | if transG == 0 then 150 | RemoveBlip(blip) 151 | return 152 | end 153 | end 154 | end) 155 | 156 | RegisterNetEvent('police:client:SendToJail', function(time) 157 | TriggerServerEvent('police:server:SetHandcuffStatus', false) 158 | IsEscorted = false 159 | ClearPedTasks(cache.ped) 160 | DetachEntity(cache.ped, true, false) 161 | TriggerEvent('prison:client:Enter', time) 162 | end) 163 | 164 | RegisterNetEvent('police:client:SendPoliceEmergencyAlert', function() 165 | TriggerServerEvent('police:server:policeAlert', locale('info.officer_down', QBX.PlayerData.charinfo.lastname, QBX.PlayerData.metadata.callsign)) 166 | TriggerServerEvent('hospital:server:ambulanceAlert', locale('info.officer_down', QBX.PlayerData.charinfo.lastname, QBX.PlayerData.metadata.callsign)) 167 | end) 168 | 169 | CreateThread(function() 170 | for i = 1, #config.locations.stations do 171 | local station = config.locations.stations[i] 172 | local blip = AddBlipForCoord(station.coords.x, station.coords.y, station.coords.z) 173 | SetBlipSprite(blip, 60) 174 | SetBlipAsShortRange(blip, true) 175 | SetBlipScale(blip, 0.8) 176 | SetBlipColour(blip, 29) 177 | 178 | BeginTextCommandSetBlipName('STRING') 179 | AddTextComponentString(station.label) 180 | EndTextCommandSetBlipName(blip) 181 | end 182 | end) 183 | -------------------------------------------------------------------------------- /client/objects.lua: -------------------------------------------------------------------------------- 1 | local sharedConfig = require 'config.shared' 2 | 3 | local function checkIsSpikeObject(spikeStrips, fixedCoords, position, maxDistance) 4 | if #spikeStrips == 0 then return end 5 | for i = 1, #spikeStrips do 6 | local coords = fixedCoords[spikeStrips[i]] 7 | 8 | local distance = #(position - coords) 9 | if distance < maxDistance then 10 | return true 11 | end 12 | end 13 | end 14 | 15 | local function getClosestObject(objects, position, maxDistance, isFixed) 16 | if #objects == 0 then return end 17 | local minDistance, currentIndex 18 | 19 | for i = 1, #objects do 20 | local coords 21 | if isFixed then 22 | coords = GlobalState.fixedCoords[objects[i]] 23 | else 24 | local object = NetworkGetEntityFromNetworkId(objects[i]) 25 | coords = GetEntityCoords(object) 26 | end 27 | 28 | local distance = #(position - coords) 29 | if distance < maxDistance then 30 | if not minDistance or distance < minDistance then 31 | minDistance = distance 32 | currentIndex = i 33 | end 34 | end 35 | end 36 | 37 | return currentIndex 38 | end 39 | 40 | ---Spawn police object. 41 | ---@param item string name from `config/shared.lua` 42 | RegisterNetEvent('police:client:spawnPObj', function(item) 43 | if QBX.PlayerData.job.type ~= 'leo' or not QBX.PlayerData.job.onduty then return end 44 | 45 | if cache.vehicle then return exports.qbx_core:Notify(locale('error.in_vehicle'), 'error') end 46 | 47 | if lib.progressBar({ 48 | duration = 2500, 49 | label = locale('progressbar.place_object'), 50 | useWhileDead = false, 51 | canCancel = true, 52 | disable = { 53 | car = true, 54 | move = true, 55 | combat = true, 56 | mouse = false 57 | }, 58 | anim = { 59 | dict = 'anim@narcotics@trash', 60 | clip = 'drop_front' 61 | } 62 | }) then 63 | local objectConfig = sharedConfig.objects[item] 64 | local forward = GetEntityForwardVector(cache.ped) 65 | local spawnCoords = GetEntityCoords(cache.ped) + forward * 0.5 66 | local netid, error = lib.callback.await('police:server:spawnObject', false, 67 | objectConfig.model, spawnCoords, GetEntityHeading(cache.ped)) 68 | 69 | if not netid then return exports.qbx_core:Notify(locale(error), 'error') end 70 | 71 | local object = NetworkGetEntityFromNetworkId(netid) 72 | PlaceObjectOnGroundProperly(object) 73 | FreezeEntityPosition(object, objectConfig.freeze) 74 | else 75 | exports.qbx_core:Notify(locale('error.canceled'), 'error') 76 | end 77 | end) 78 | 79 | RegisterNetEvent('police:client:deleteObject', function() 80 | local objectId = getClosestObject(GlobalState.policeObjects, GetEntityCoords(cache.ped) , 5.0) 81 | if not objectId then return end 82 | if lib.progressBar({ 83 | duration = 2500, 84 | label = locale('progressbar.remove_object'), 85 | useWhileDead = false, 86 | canCancel = true, 87 | disable = { 88 | car = true, 89 | move = true, 90 | combat = true, 91 | mouse = false 92 | }, 93 | anim = { 94 | dict = 'weapons@first_person@aim_rng@generic@projectile@thermal_charge@', 95 | clip = 'plant_floor' 96 | } 97 | }) then 98 | TriggerServerEvent('police:server:despawnObject', objectId) 99 | else 100 | exports.qbx_core:Notify(locale('error.canceled'), 'error') 101 | end 102 | end) 103 | 104 | ---Spawn a spike strip. 105 | RegisterNetEvent('police:client:SpawnSpikeStrip', function() 106 | if QBX.PlayerData.job.type ~= 'leo' or not QBX.PlayerData.job.onduty then return end 107 | if #GlobalState.spikeStrips >= sharedConfig.maxSpikes then 108 | return exports.qbx_core:Notify(locale('error.no_spikestripe'), 'error') 109 | end 110 | 111 | if cache.vehicle then return exports.qbx_core:Notify(locale('error.in_vehicle'), 'error') end 112 | 113 | if lib.progressBar({ 114 | duration = 2500, 115 | label = locale('progressbar.place_object'), 116 | useWhileDead = false, 117 | canCancel = true, 118 | disable = { 119 | car = true, 120 | move = true, 121 | combat = true, 122 | mouse = false 123 | }, 124 | anim = { 125 | dict = 'amb@medic@standing@kneel@enter', 126 | clip = 'enter' 127 | } 128 | }) then 129 | local spawnCoords = GetOffsetFromEntityInWorldCoords(cache.ped, 0.0, 2.0, 0) 130 | local netid, error = lib.callback.await('police:server:spawnSpikeStrip', false, 131 | spawnCoords, GetEntityHeading(cache.ped)) 132 | 133 | if not netid then 134 | return exports.qbx_core:Notify(locale(error), 'error') 135 | end 136 | 137 | lib.requestAnimDict('p_ld_stinger_s') 138 | local spike = NetworkGetEntityFromNetworkId(netid) 139 | PlayEntityAnim(spike, 'p_stinger_s_deploy', 'p_ld_stinger_s', 1000.0, false, false, false, 0.0, 0) 140 | PlaceObjectOnGroundProperly(spike) 141 | RemoveAnimDict('p_ld_stinger_s') 142 | else 143 | exports.qbx_core:Notify(locale('error.canceled'), 'error') 144 | end 145 | 146 | RemoveAnimDict('amb@medic@standing@kneel@enter') 147 | end) 148 | 149 | local WHEEL_NAMES = { 150 | 'wheel_lf', 151 | 'wheel_rf', 152 | 'wheel_lm', 153 | 'wheel_rm', 154 | 'wheel_lr', 155 | 'wheel_rr', 156 | } 157 | 158 | local isSpike 159 | CreateThread(function() 160 | while true do 161 | if LocalPlayer.state.isLoggedIn then 162 | isSpike = checkIsSpikeObject(GlobalState.spikeStrips, GlobalState.fixedCoords, GetEntityCoords(cache.ped), 30) 163 | end 164 | Wait(500) 165 | end 166 | end) 167 | 168 | local isWatchInVehicleBusy 169 | local function burstTyreOnSpikeCollision(vehicle) 170 | CreateThread(function () 171 | if isWatchInVehicleBusy then return end 172 | isWatchInVehicleBusy = true 173 | local wheels = {} 174 | for i = 1, #WHEEL_NAMES do 175 | local w = GetEntityBoneIndexByName(vehicle, WHEEL_NAMES[i]) 176 | if w ~= -1 then 177 | wheels[#wheels + 1] = { wheel = w, index = i - 1 } 178 | end 179 | end 180 | 181 | pcall(lib.waitFor(function() return cache.value end, nil, sharedConfig.timeout)) 182 | 183 | while cache.vehicle do 184 | local spikeStrips = GlobalState.spikeStrips 185 | local fixedCoords = GlobalState.fixedCoords 186 | if isSpike then 187 | for i = 1, #wheels do 188 | if wheels[i].wheel then 189 | local wheelPosition = GetWorldPositionOfEntityBone(cache.vehicle, wheels[i].wheel) 190 | 191 | if checkIsSpikeObject(spikeStrips, fixedCoords, wheelPosition, 1.8) then 192 | local index = wheels[i].index 193 | if not IsVehicleTyreBurst(cache.vehicle, index, true) 194 | or IsVehicleTyreBurst(cache.vehicle, index, false) 195 | then 196 | SetVehicleTyreBurst(cache.vehicle, index, false, 1000.0) 197 | end 198 | end 199 | end 200 | end 201 | Wait(0) 202 | else 203 | Wait(250) 204 | end 205 | end 206 | isWatchInVehicleBusy = nil 207 | end) 208 | end 209 | 210 | local function displayInfoCloseToSpike() 211 | CreateThread(function () 212 | pcall(lib.waitFor(function() return cache.value and nil or false end, nil, sharedConfig.timeout)) 213 | 214 | while not cache.vehicle and LocalPlayer.state.isLoggedIn and QBX.PlayerData.job.type == 'leo' and QBX.PlayerData.job.onduty do 215 | local isOpen, text = lib.isTextUIOpen() 216 | 217 | if isSpike and checkIsSpikeObject(GlobalState.spikeStrips, GlobalState.fixedCoords, GetEntityCoords(cache.ped), 3) then 218 | if not isOpen or text ~= locale('info.delete_spike') then 219 | lib.showTextUI(locale('info.delete_spike')) 220 | end 221 | else 222 | if isOpen and text == locale('info.delete_spike') then 223 | lib.hideTextUI() 224 | end 225 | end 226 | 227 | Wait(500) 228 | end 229 | 230 | local isOpen, text = lib.isTextUIOpen() 231 | if isOpen and text == locale('info.delete_spike') then 232 | lib.hideTextUI() 233 | end 234 | end) 235 | end 236 | 237 | local keybind 238 | 239 | local function onPressed() 240 | if cache.vehicle then return end 241 | keybind:disable(true) 242 | local spike = getClosestObject(GlobalState.spikeStrips, GetEntityCoords(cache.ped), 4, true) 243 | if spike ~= nil then 244 | if lib.progressBar({ 245 | duration = 2500, 246 | label = locale('progressbar.remove_object'), 247 | useWhileDead = false, 248 | canCancel = true, 249 | disable = { 250 | car = true, 251 | move = true, 252 | combat = true, 253 | mouse = false 254 | }, 255 | anim = { 256 | dict = 'weapons@first_person@aim_rng@generic@projectile@thermal_charge@', 257 | clip = 'plant_floor' 258 | } 259 | }) then 260 | TriggerServerEvent('police:server:despawnSpikeStrip', spike) 261 | lib.hideTextUI() 262 | else 263 | exports.qbx_core:Notify(locale('error.canceled'), 'error') 264 | end 265 | end 266 | keybind:disable(false) 267 | end 268 | 269 | keybind = lib.addKeybind({ 270 | name = 'despawnSpikeStrip', 271 | description = locale('info.delete_spike'), 272 | defaultKey = 'E', 273 | secondaryMapper = 'PAD_DIGITALBUTTONANY', 274 | secondaryKey = 'LRIGHT_INDEX', 275 | onPressed = onPressed 276 | }) 277 | 278 | local function toggleJobFunctions(isWorkingLeo) 279 | if isWorkingLeo then 280 | keybind:disable(false) 281 | 282 | if not cache.vehicle then 283 | displayInfoCloseToSpike() 284 | end 285 | else 286 | keybind:disable(true) 287 | end 288 | end 289 | 290 | RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job) 291 | toggleJobFunctions(LocalPlayer.state.isLoggedIn and job.type == 'leo' and job.onduty) 292 | end) 293 | 294 | RegisterNetEvent('QBCore:Client:SetDuty', function(onDuty) 295 | local job = QBX.PlayerData.job 296 | toggleJobFunctions(LocalPlayer.state.isLoggedIn and job and job.type == 'leo' and onDuty) 297 | end) 298 | 299 | AddStateBagChangeHandler('isLoggedIn', ('player:%s'):format(cache.serverId), function(_, _, isLoggedIn) 300 | local job = QBX.PlayerData.job 301 | toggleJobFunctions(isLoggedIn and job and job.type == 'leo' and job.onduty) 302 | 303 | if cache.vehicle then 304 | burstTyreOnSpikeCollision(cache.vehicle) 305 | end 306 | end) 307 | 308 | lib.onCache('vehicle', function(vehicle) 309 | if vehicle then 310 | burstTyreOnSpikeCollision(vehicle) 311 | else 312 | displayInfoCloseToSpike() 313 | end 314 | end) 315 | 316 | AddEventHandler('onResourceStop', function (resource) 317 | if resource ~= GetCurrentResourceName() then return end 318 | local isOpen, text = lib.isTextUIOpen() 319 | if isOpen and text == locale('info.delete_spike') then 320 | lib.hideTextUI() 321 | end 322 | end) 323 | -------------------------------------------------------------------------------- /client/tracker.lua: -------------------------------------------------------------------------------- 1 | RegisterNetEvent('police:client:CheckDistance', function() 2 | local coords = GetEntityCoords(cache.ped) 3 | local player = lib.getClosestPlayer(coords, 2.5, false) 4 | if not player then 5 | return exports.qbx_core:Notify(locale('error.none_nearby'), 'error') 6 | end 7 | local playerId = GetPlayerServerId(player) 8 | TriggerServerEvent('police:server:SetTracker', playerId) 9 | end) 10 | 11 | RegisterNetEvent('police:client:SetTracker', function(bool) 12 | local trackerClothingData = { 13 | outfitData = { 14 | accessory = {item = -1, texture = 0} -- Neck / Tie 15 | } 16 | } 17 | 18 | if bool then 19 | trackerClothingData.outfitData = { 20 | accessory = {item = 13, texture = 0} 21 | } 22 | 23 | TriggerEvent('qb-clothing:client:loadOutfit', trackerClothingData) 24 | else 25 | TriggerEvent('qb-clothing:client:loadOutfit', trackerClothingData) 26 | end 27 | end) 28 | 29 | RegisterNetEvent('police:client:SendTrackerLocation', function(requestId) 30 | TriggerServerEvent('police:server:SendTrackerLocation', GetEntityCoords(cache.ped), requestId) 31 | end) 32 | 33 | RegisterNetEvent('police:client:TrackerMessage', function(msg, coords) 34 | PlaySound(-1, 'Lose_1st', 'GTAO_FM_Events_Soundset', false, 0, true) 35 | exports.qbx_core:Notify(msg, 'inform') 36 | local transG = 250 37 | local blip = AddBlipForCoord(coords.x, coords.y, coords.z) 38 | SetBlipSprite(blip, 458) 39 | SetBlipColour(blip, 1) 40 | SetBlipDisplay(blip, 4) 41 | SetBlipAlpha(blip, transG) 42 | SetBlipScale(blip, 1.0) 43 | BeginTextCommandSetBlipName('STRING') 44 | AddTextComponentString(locale('info.ankle_location')) 45 | EndTextCommandSetBlipName(blip) 46 | while transG ~= 0 do 47 | Wait(180 * 4) 48 | transG -= 1 49 | SetBlipAlpha(blip, transG) 50 | if transG == 0 then 51 | SetBlipSprite(blip, 2) 52 | RemoveBlip(blip) 53 | return 54 | end 55 | end 56 | end) 57 | -------------------------------------------------------------------------------- /config/server.lua: -------------------------------------------------------------------------------- 1 | return { 2 | licenseRank = 2, -- Grade needed to give out weapon licenses 3 | towPay = 500, -- Police tow paid 4 | lawyerPay = 500, -- Police lawyer paid 5 | validLicenses = { -- valid licenses 6 | driver = true, 7 | weapon = true, 8 | }, 9 | towJobs = { -- tow jobs 10 | tow = true, 11 | }, 12 | lawyerJobs = { -- lawyer jobs 13 | lawyer = true, 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /config/shared.lua: -------------------------------------------------------------------------------- 1 | return { 2 | timeout = 10000, 3 | maxSpikes = 5, 4 | policePlatePrefix = 'LSPD', 5 | objects = { 6 | cone = {model = `prop_roadcone02a`, freeze = false}, 7 | barrier = {model = `prop_barrier_work06a`, freeze = true}, 8 | roadsign = {model = `prop_snow_sign_road_06g`, freeze = true}, 9 | tent = {model = `prop_gazebo_03`, freeze = true}, 10 | light = {model = `prop_worklight_03b`, freeze = true}, 11 | chair = {model = `prop_chair_08`, freeze = true}, 12 | chairs = {model = `prop_chair_pile_01`, freeze = true}, 13 | tabe = {model = `prop_table_03`, freeze = true}, 14 | monitor = {model = `des_tvsmash_root`, freeze = true}, 15 | }, 16 | 17 | locations = { 18 | duty = { 19 | vec3(440.085, -974.924, 30.689), 20 | vec3(-449.811, 6012.909, 31.815), 21 | }, 22 | vehicle = { 23 | vec4(452.0, -996.0, 26.0, 175.0), 24 | vec4(447.0, -997.0, 26.0, 178.0), 25 | vec4(463.0, -1019.0, 28.0, 87.0), 26 | vec4(463.0, -1015.0, 28.0, 87.0), 27 | }, 28 | stash = { -- Not currently used, use ox_inventory stashes 29 | -- vec3(453.075, -980.124, 30.889), 30 | }, 31 | impound = { 32 | vec3(436.68, -1007.42, 27.32), 33 | vec3(-436.14, 5982.63, 31.34) 34 | }, 35 | helicopter = { 36 | vec4(449.168, -981.325, 43.691, 87.234), 37 | vec4(-475.43, 5988.353, 31.716, 31.34), 38 | }, 39 | armory = { -- Not currently used, use ox_inventory shops 40 | -- vec3(462.23, -981.12, 30.68), 41 | }, 42 | trash = { 43 | vec3(439.0907, -976.746, 30.776), 44 | }, 45 | fingerprint = { 46 | vec3(460.9667, -989.180, 24.92), 47 | }, 48 | evidence = { -- Not currently used, use ox_inventory evidence system 49 | }, 50 | stations = { 51 | {label = 'Mission Row Police Station', coords = vec3(434.0, -983.0, 30.7)}, 52 | {label = 'Sandy Shores Police Station', coords = vec3(1853.4, 3684.5, 34.3)}, 53 | -- {label = 'Vinewood Police Station', coords = vec3(637.1, 1.6, 81.8)}, 54 | -- {label = 'Vespucci Police Station', coords = vec3(-1092.6, -808.1, 19.3)}, 55 | -- {label = 'Davis Police Station', coords = vec3(368.0, -1618.8, 29.3)}, 56 | -- {label = 'Paleto Bay Police Station', coords = vec3(-448.4, 6011.8, 31.7)}, 57 | }, 58 | }, 59 | 60 | radars = { 61 | -- /!\ The maxspeed(s) need to be in an increasing order /!\ 62 | -- If you don't want to fine people just do that: 'config.speedFines = false' 63 | -- fine if you're maxspeed or less over the speedlimit 64 | -- (i.e if you're at 41 mph and the radar's limit is 35 you're 6mph over so a 25$ fine) 65 | speedFines = { 66 | {fine = 25, maxSpeed = 10 }, 67 | {fine = 50, maxSpeed = 30}, 68 | {fine = 250, maxSpeed = 80}, 69 | {fine = 500, maxSpeed = 180}, 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /fxmanifest.lua: -------------------------------------------------------------------------------- 1 | fx_version 'cerulean' 2 | game 'gta5' 3 | 4 | name 'qbx_policejob' 5 | description 'Police system for Qbox' 6 | repository 'https://github.com/Qbox-project/qbx_policejob' 7 | version '1.0.0' 8 | 9 | ox_lib 'locale' 10 | 11 | shared_scripts { 12 | '@ox_lib/init.lua', 13 | '@qbx_core/modules/lib.lua' 14 | } 15 | 16 | client_scripts { 17 | '@qbx_core/modules/playerdata.lua', 18 | 'client/*.lua' 19 | } 20 | 21 | server_scripts { 22 | '@oxmysql/lib/MySQL.lua', 23 | 'server/*.lua' 24 | } 25 | 26 | ui_page 'html/index.html' 27 | 28 | files { 29 | 'html/index.html', 30 | 'html/vue.min.js', 31 | 'html/script.js', 32 | 'html/fingerprint.png', 33 | 'html/main.css', 34 | 'config/client.lua', 35 | 'config/shared.lua', 36 | 'locales/*.json' 37 | } 38 | 39 | lua54 'yes' 40 | use_experimental_fxv2_oal 'yes' -------------------------------------------------------------------------------- /html/fingerprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Qbox-project/qbx_police/f687e5d914d6a9a937efeaa7380f170b8b030369/html/fingerprint.png -------------------------------------------------------------------------------- /html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 |
{{ cameraLabel }}
10 |
{{ dateLabel }}
11 |
{{ timeLabel }}
12 |
{{ ipLabel }}
13 |
{{ connectLabel }}
14 |
15 |
16 |
17 |
18 | fingerprint 19 |
20 | Fingerprint ID 21 |

No result

22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |

MODEL: COSAGNETTI

30 |
31 |
32 |

Spanish Ave | Lagunas Pl

33 |
34 |
35 |

PLATE: 01AGB123

36 |
37 |
38 |

420 KM/U

39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /html/main.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100&display=swap'); 2 | 3 | html { 4 | overflow-x: hidden; 5 | overflow-y: hidden; 6 | } 7 | 8 | #helicontainer { 9 | font-family: 'Poppins'; 10 | display:none; 11 | position: relative; 12 | height: 100vh; 13 | width: 100vw; 14 | background-color: transparent !important; 15 | color: #ffffff; 16 | text-transform: uppercase; 17 | } 18 | 19 | .vehicleinfo { 20 | display:none; 21 | } 22 | 23 | .heli-model { 24 | position:absolute; 25 | left: 50%; 26 | top: 35%; 27 | transform: translate(-50%, -50%); 28 | text-shadow: 29 | -1px -1px 0 #000, 30 | 1px -1px 0 #000, 31 | -1px 1px 0 #000, 32 | 1px 1px 0 #000; 33 | } 34 | 35 | .heli-plate { 36 | position:absolute; 37 | left: 50%; 38 | bottom: 30%; 39 | transform: translate(-50%, -50%); 40 | text-shadow: 41 | -1px -1px 0 #000, 42 | 1px -1px 0 #000, 43 | -1px 1px 0 #000, 44 | 1px 1px 0 #000; 45 | } 46 | 47 | .heli-street { 48 | position:absolute; 49 | left: 70%; 50 | top: 50.7%; 51 | transform: translate(-50%, -50%); 52 | text-shadow: 53 | -1px -1px 0 #000, 54 | 1px -1px 0 #000, 55 | -1px 1px 0 #000, 56 | 1px 1px 0 #000; 57 | } 58 | 59 | .heli-speed { 60 | position:absolute; 61 | left: 35%; 62 | top: 35%; 63 | text-shadow: 64 | -1px -1px 0 #000, 65 | 1px -1px 0 #000, 66 | -1px 1px 0 #000, 67 | 1px 1px 0 #000; 68 | font-size: 22px; 69 | } 70 | 71 | .heli-rectangle { 72 | position:absolute; 73 | left: 50%; 74 | top: 50%; 75 | width: 70px; 76 | height: 70px; 77 | background: transparent; 78 | border: 1px solid #ab0c0c; 79 | transform: translate(-50%, -50%); 80 | } 81 | 82 | .scan { 83 | position:absolute; 84 | left: 37%; 85 | bottom: 39%; 86 | border: 2px solid #cccccc; 87 | background: rgba(155, 155, 155, 0.0); 88 | height: 20vh; 89 | width: 1vw; 90 | } 91 | 92 | .scanBar { 93 | background: #cccccc; 94 | } 95 | 96 | #camcontainer { 97 | font-family: 'Poppins'; 98 | position: relative; 99 | height: 100vh; 100 | background-color: transparent !important; 101 | } 102 | 103 | #camlabel { 104 | position: absolute; 105 | left: 50%; 106 | bottom: 10%; 107 | transform: translate(-50%, -50%); 108 | font-size: 20px; 109 | color: white; 110 | background: rgba(0,0,0,0.9); 111 | padding: 0.3vw; 112 | text-align:center; 113 | text-transform: uppercase; 114 | } 115 | 116 | #camtimelabel { 117 | position: absolute; 118 | right: 10%; 119 | top: 10%; 120 | font-size: 20px; 121 | color: white; 122 | background: rgba(0,0,0,0.9); 123 | padding: 0.3vw; 124 | } 125 | 126 | #camdatelabel { 127 | position: absolute; 128 | left: 10%; 129 | top: 10%; 130 | font-size: 20px; 131 | color: white; 132 | background: rgba(0,0,0,0.9); 133 | padding: 0.3vw; 134 | } 135 | 136 | #iplabel { 137 | position: absolute; 138 | right: 10%; 139 | bottom: 15%; 140 | transform: translate(0, -50%); 141 | font-size: 20px; 142 | color: white; 143 | background: rgba(0,0,0,0.9); 144 | padding: 0.3vw; 145 | } 146 | 147 | #connectedlabel { 148 | position: absolute; 149 | right: 10%; 150 | bottom: 10%; 151 | transform: translate(0, -50%); 152 | font-size: 20px; 153 | color: white; 154 | background: rgba(0,0,0,0.9); 155 | padding: 0.3vw; 156 | } 157 | 158 | .connected { 159 | color:#3cc71a!important; 160 | } 161 | 162 | .disconnect { 163 | color:#ba1e1e!important; 164 | } 165 | 166 | #blockscreen { 167 | position: absolute; 168 | top: 0; 169 | left: 0; 170 | width: 100vw; 171 | height: 100vh; 172 | background: rgba(25,25,25,1.0); 173 | display: none; 174 | z-index: -99; 175 | } 176 | 177 | .fingerprint-container { 178 | display: none; 179 | position: relative; 180 | width: 60vh; 181 | margin: 0 auto; 182 | top: 10vh; 183 | } 184 | 185 | .fingerprint-frame { 186 | width: 60vh; 187 | } 188 | 189 | .take-fingerprint { 190 | position: absolute; 191 | height: 12.5vh; 192 | width: 10vh; 193 | background: rgba(250, 250, 250, 0.45); 194 | margin: 0 auto; 195 | left: 0; 196 | right: 0; 197 | bottom: 15vh; 198 | transition: 0.1s; 199 | } 200 | 201 | .take-fingerprint:hover { 202 | background: rgba(250, 250, 250, 0.65); 203 | } 204 | 205 | .fingerprint-id { 206 | position: absolute; 207 | width: 22vh; 208 | height: 13vh; 209 | top: 23vh; 210 | margin: 0 auto; 211 | left: 0; 212 | right: 0; 213 | text-align: center; 214 | padding-top: 2vh; 215 | font-family: 'Poppins'; 216 | font-weight: bold; 217 | } 218 | 219 | .fingerprint-id > p { 220 | padding-top: 2vh; 221 | font-weight: lighter; 222 | } 223 | -------------------------------------------------------------------------------- /html/script.js: -------------------------------------------------------------------------------- 1 | const CameraApp = new Vue({ 2 | el: "#camcontainer", 3 | data: { 4 | camerasOpen: false, 5 | cameraLabel: ":)", 6 | connectLabel: "CONNECTED", 7 | ipLabel: "192.168.0.1", 8 | dateLabel: "04/09/1999", 9 | timeLabel: "16:27:49", 10 | }, 11 | methods: { 12 | OpenCameras(label, connected, cameraId, time) { 13 | var today = new Date(); 14 | var date = today.getDate() + '/' + (today.getMonth() + 1) + '/' + today.getFullYear(); 15 | var formatTime = "00:" + time; 16 | 17 | this.camerasOpen = true; 18 | this.ipLabel = "145.101.0." + cameraId; 19 | if (connected) { 20 | $("#blockscreen").css("display", "none"); 21 | this.cameraLabel = label; 22 | this.connectLabel = "CONNECTED"; 23 | this.dateLabel = date; 24 | this.timeLabel = formatTime; 25 | 26 | $("#connectedlabel").removeClass("disconnect"); 27 | $("#connectedlabel").addClass("connect"); 28 | } else { 29 | $("#blockscreen").css("display", "block"); 30 | this.cameraLabel = "ERROR #400: BAD REQUEST"; 31 | this.connectLabel = "CONNECTION FAILED"; 32 | this.dateLabel = "ERROR"; 33 | this.timeLabel = "ERROR"; 34 | 35 | $("#connectedlabel").removeClass("connect"); 36 | $("#connectedlabel").addClass("disconnect"); 37 | } 38 | }, 39 | 40 | CloseCameras() { 41 | this.camerasOpen = false; 42 | $("#blockscreen").css("display", "none"); 43 | }, 44 | 45 | UpdateCameraLabel(label) { 46 | this.cameraLabel = label; 47 | }, 48 | 49 | UpdateCameraTime(time) { 50 | var formatTime = "00:" + time; 51 | this.timeLabel = formatTime; 52 | }, 53 | } 54 | }); 55 | 56 | HeliCam = {}; 57 | Fingerprint = {}; 58 | 59 | HeliCam.Open = () => { 60 | $("#helicontainer").css("display", "block"); 61 | $(".scanBar").css("height", "0%"); 62 | } 63 | 64 | HeliCam.UpdateScan = (data) => { 65 | $(".scanBar").css("height", data.scanvalue + "%"); 66 | } 67 | 68 | HeliCam.UpdateVehicleInfo = (data) => { 69 | $(".vehicleinfo").css("display", "block"); 70 | $(".scanBar").css("height", "100%"); 71 | $(".heli-model").find("p").html("MODEL: " + data.model); 72 | $(".heli-plate").find("p").html("PLATE: " + data.plate); 73 | $(".heli-street").find("p").html(data.street); 74 | $(".heli-speed").find("p").html(data.speed + " KM/U"); 75 | } 76 | 77 | HeliCam.DisableVehicleInfo = () => { 78 | $(".vehicleinfo").css("display", "none"); 79 | } 80 | 81 | HeliCam.Close = () => { 82 | $("#helicontainer").css("display", "none"); 83 | $(".vehicleinfo").css("display", "none"); 84 | $(".scanBar").css("height", "0%"); 85 | } 86 | 87 | Fingerprint.Open = () => { 88 | $(".fingerprint-container").fadeIn(150); 89 | $(".fingerprint-id").html("Fingerprint ID

No result

"); 90 | } 91 | 92 | Fingerprint.Close = () => { 93 | $(".fingerprint-container").fadeOut(150); 94 | $.post(`https://${GetParentResourceName()}/closeFingerprint`); 95 | } 96 | 97 | Fingerprint.Update = (data) => { 98 | $(".fingerprint-id").html("Fingerprint ID

" + data.fingerprintId + "

"); 99 | } 100 | 101 | $(document).on('click', '.take-fingerprint', () => { 102 | $.post(`https://${GetParentResourceName()}/doFingerScan`); 103 | }) 104 | 105 | document.onreadystatechange = () => { 106 | if (document.readyState === "complete") { 107 | window.addEventListener('message', (event) => { 108 | if (event.data.type == "enablecam") { 109 | CameraApp.OpenCameras(event.data.label, event.data.connected, event.data.id, event.data.time); 110 | } else if (event.data.type == "disablecam") { 111 | CameraApp.CloseCameras(); 112 | } else if (event.data.type == "updatecam") { 113 | CameraApp.UpdateCameraLabel(event.data.label); 114 | } else if (event.data.type == "updatecamtime") { 115 | CameraApp.UpdateCameraTime(event.data.time); 116 | } else if (event.data.type == "heliopen") { 117 | HeliCam.Open(); 118 | } else if (event.data.type == "heliclose") { 119 | HeliCam.Close(); 120 | } else if (event.data.type == "heliscan") { 121 | HeliCam.UpdateScan(event.data); 122 | } else if (event.data.type == "heliupdateinfo") { 123 | HeliCam.UpdateVehicleInfo(event.data); 124 | } else if (event.data.type == "disablescan") { 125 | HeliCam.DisableVehicleInfo(); 126 | } else if (event.data.type == "fingerprintOpen") { 127 | Fingerprint.Open(); 128 | } else if (event.data.type == "fingerprintClose") { 129 | Fingerprint.Close(); 130 | } else if (event.data.type == "updateFingerprintId") { 131 | Fingerprint.Update(event.data); 132 | } 133 | }); 134 | }; 135 | }; 136 | 137 | $(document).on('keydown', (event) => { 138 | switch(event.which) { 139 | case 27: // ESC 140 | Fingerprint.Close(); 141 | break; 142 | } 143 | }); 144 | -------------------------------------------------------------------------------- /locales/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "اللاعب لديه ترخيص بالفعل", 4 | "error_license": "اللاعب ليس لديه هذا الترخيص", 5 | "no_camera": "الكاميرا غير موجودة", 6 | "blood_not_cleared": "لم يتم مسح الدم", 7 | "bullet_casing_not_removed": "أغلفة الرصاص لم تتم إزالتها", 8 | "none_nearby": "لا أحد في الجوار", 9 | "canceled": "الغاء", 10 | "time_higher": "0 يجب تحديد اكثر من", 11 | "amount_higher": "0 يجب تحديد اكثر من", 12 | "vehicle_cuff": "لا يمكنك كلبشة شخص في السيارة", 13 | "no_cuff": "ليس لديك كلبشات", 14 | "no_impound": "لا توجد سيارات محجوزة", 15 | "no_spikestripe": "لا يمكن وضع المزيد من الاشواك", 16 | "error_license_type": "نوع الترخيص غير موجود", 17 | "rank_license": "لست بمرتبة عالية بما يكفي لمنح الترخيص", 18 | "revoked_license": "لقد تم إبطال الترخيص الخاص بك", 19 | "rank_revoke": "أنت لست برتبة عالية بما يكفي لإلغاء الترخيص", 20 | "on_duty_police_only": "يجب ان تكون داخل الخدمة", 21 | "vehicle_not_flag": "لم يتم وضع علامة على المركبة", 22 | "not_towdriver": "ليس سائق سطحة", 23 | "not_lawyer": "الشخص ليس محاميا", 24 | "no_anklet": "هذا الشخص ليس لديه خلخال تتبع", 25 | "have_evidence_bag": "يجب أن يكون معك حقيبة أدلة فارغة", 26 | "no_driver_license": "بدون رخصة قيادة", 27 | "not_cuffed_dead": "الشخص ليس مكلبش أو ميت" 28 | }, 29 | "success": { 30 | "uncuffed": "أنت لست مكلبش", 31 | "granted_license": "لقد حصلت على ترخيص", 32 | "grant_license": "لقد منحت ترخيصًا", 33 | "revoke_license": "لقد ألغيت ترخيصًا", 34 | "tow_paid": "$500 لقد دفعت لك", 35 | "blood_clear": "مسح الدم", 36 | "bullet_casing_removed": "تمت إزالة بقايا الرصاص", 37 | "anklet_taken_off": "تم خلع جهاز التعقب عنك", 38 | "took_anklet_from": "%s %s تم الغاء تعقب", 39 | "put_anklet": "وضعت عليه جهاز تعقب", 40 | "put_anklet_on": "%s %s وضع تعقب على", 41 | "vehicle_flagged": "%s | %s تم الابلاغ عن", 42 | "impound_vehicle_removed": "اخرجت السيارة من الحجز", 43 | "impounded": "السيارة محجوزة" 44 | }, 45 | "info": { 46 | "mr": "السيد.", 47 | "mrs": "السيدة.", 48 | "impound_price": "السعر الذي يدفعه اللاعب لإخراج السيارة من الحجز", 49 | "plate_number": "رقم لوحة السيارة", 50 | "flag_reason": "السبب", 51 | "camera_id": "ايدي الكاميرا", 52 | "callsign_name": "اسم إشارة النداء المعروف بيها", 53 | "poobject_object": "اسم الاداة/ حدفها", 54 | "player_id": "ايدي اللاعب", 55 | "citizen_id": "ايدي اللاعب", 56 | "dna_sample": "عينة الحمض النووي", 57 | "jail_time": "عدد الاشهر لسجنه", 58 | "jail_time_no": "0 يجب ان يكون اكثر من", 59 | "license_type": "(driver/weapon) النوع", 60 | "ankle_location": "أماكن الخلاخل", 61 | "cuff": "أنت مكلبش", 62 | "cuffed_walk": "أنت مكلبش و يمكنك التحرك فقط", 63 | "vehicle_flagged": "%s | %s تم الإبلاغ عنه لـ", 64 | "unflag_vehicle": "%s تم تحريرها", 65 | "tow_driver_paid": "لقد دفعت لسائق الشاحنة", 66 | "paid_lawyer": "لقد دفعت لمحامي", 67 | "vehicle_taken_depot": "$%s السيارة التي تم أخذها إلى المستودع مقابل", 68 | "vehicle_seized": "تم حجز السيارة", 69 | "stolen_money": "$%s لقد سرقت", 70 | "cash_robbed": "$%s لقد سرق منك", 71 | "driving_license_confiscated": "تمت مصادرة رخصة قيادتك", 72 | "cash_confiscated": "تمت مصادرة أموالك", 73 | "being_searched": "يتم تفتيشك", 74 | "cash_found": "$%s وجدت", 75 | "sent_jail_for": "شهر %s تم ارسالك لسجن لمدة", 76 | "fine_received": "$%s لقد تلقيت غرامة قدرها", 77 | "blip_text": "ﻍﻼﺑ", 78 | "jail_time_input": "ﻦﺠﺴﻟﺍ ﺖﻗﻭ", 79 | "submit": "تأكيد", 80 | "time_months": "عدد الاشهر", 81 | "bill": "الغرامة", 82 | "amount": "السعر", 83 | "vehicle_info": "المحرك: %s % | البنزين: %s %", 84 | "evidence_stash": "خزنة الأدلة | %s", 85 | "slot": "(1,2,3)", 86 | "current_evidence": "%s | الدرج %s", 87 | "on_duty": "[~g~E~s~] - ﺔﻣﺪﺨﻟﺍ ﻝﻮﺧﺩ", 88 | "off_duty": "[~r~E~s~] - ﺔﻣﺪﺨﻟﺍ ﻦﻣ ﺝﻭﺮﺨﻟﺍ", 89 | "onoff_duty": "ﺔﻣﺪﺨﻟﺍ ﺔﻟﺎﺣ", 90 | "stash": "%s", 91 | "delete_spike": "[~r~E~s~] ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺔﻟﺍﺯﺇ", 92 | "close_camera": "Close Camera", 93 | "bullet_casing": "[~g~G~s~] %s ﺹﺎﺻﺭ ﺎﻳﺎﻘﺑ", 94 | "casing": "بقايا رصاص", 95 | "blood": "دم", 96 | "blood_text": "[~g~G~s~] %s ﻡﺩ ﺎﻳﺎﻘﺑ", 97 | "fingerprint_text": "[~g~G~s~] ﻊﺒﺻﻹﺍ ﺔﻤﺼﺑ ﺢﺴﻣ", 98 | "fingerprint": "ﻊﺒﺻﻹﺍ ﺔﻤﺼﺑ", 99 | "store_heli": "[~g~E~s~] ﺝﺍﺮﻏ", 100 | "take_heli": "[~g~E~s~] ﺝﺍﺮﻏ", 101 | "impound_veh": "[~g~E~s~] - ﺓﺯﻮﺠﺤﻤﻟﺍ ﺕﺍﺭﺎﻴﺴﻟﺍ", 102 | "store_veh": "[~g~E~s~] - ﺝﺍﺮﻏ", 103 | "armory": "Armory", 104 | "enter_armory": "[~g~E~s~] ﺔﺤﻠﺳﻻﺍ ﺔﻧﺰﺧ", 105 | "finger_scan": "ﻊﺒﺻﻹﺍ ﺔﻤﺼﺑ ﺢﺴﻣ", 106 | "scan_fingerprint": "[~g~E~s~] ﻊﺒﺻﻹﺍ ﺔﻤﺼﺑ ﺢﺴﻣ", 107 | "trash": "ﺮﻳﻭﺪﺘﻟﺍ ﺓﺩﺎﻋﺍ", 108 | "trash_enter": "[~g~E~s~] ﺮﻳﻭﺪﺘﻟﺍ ﺓﺩﺎﻋﺍ", 109 | "stash_enter": "[~g~E~s~] ﻞﺧﺩﺃ", 110 | "target_location": "%s %s تم تسجيله في الخريطة", 111 | "anklet_location": "ﻊﺒﺘﺗ ﻝﺎﺨﻠﺧ", 112 | "new_call": "اتصال جديد", 113 | "officer_down": "%s | %s مات" 114 | }, 115 | "evidence": { 116 | "red_hands": "الأيدي حمراء", 117 | "wide_pupils": "همممممممم", 118 | "red_eyes": "عيون حمراء", 119 | "weed_smell": "تنبعث منه رائحة الحشيش", 120 | "gunpowder": "بقايا رصاص في ملابسه", 121 | "chemicals": "رائحة كيميائية", 122 | "heavy_breathing": "يتنفس بشكل كبير", 123 | "sweat": "يتعرق كثيرا", 124 | "handbleed": "الدم على اليدين", 125 | "confused": "خجول", 126 | "alcohol": "رائحته مثل الكحول", 127 | "heavy_alcohol": "رائحته تشبه إلى حد كبير رائحة الكحول", 128 | "agitated": "علامات استخدام الميث", 129 | "serial_not_visible": "الرقم التسلسلي غير مرئي" 130 | }, 131 | "menu": { 132 | "garage_title": "سيارات الشرطة", 133 | "close": "⬅ اغلاق", 134 | "impound": "سيارات محجوزة", 135 | "pol_impound": "سيارات محجوزة", 136 | "pol_garage": "سيارات الشرطة", 137 | "pol_armory": "خزنة الأسلحة" 138 | }, 139 | "email": { 140 | "sender": "وكالة الجباية القضائية المركزية", 141 | "subject": "تحصيل الديون", 142 | "message": "مرحبا %s. %s,

فرضت وكالة التحصيل القضائي المركزية الغرامات التي تتقاضاها من الشرطة.
= $%s سحبت من حسابك

أطيب التحيات,
Mr. I.K. Graai" 143 | }, 144 | "commands": { 145 | "place_spike": "وضع اشواك", 146 | "license_grant": "منح رخصة لشخص ما", 147 | "license_revoke": "إبطال رخصة من شخص ما", 148 | "place_object": "وضع / حذف الادوات", 149 | "cuff_player": "كلبشة شخص", 150 | "escort": "سحب لاعب", 151 | "callsign": "امنح نفسك إشارة نداء", 152 | "clear_casign": "حدف الادلة", 153 | "jail_player": "سجن لاعب", 154 | "unjail_player": "اخراج شخص من السجن", 155 | "clearblood": "تنظيف المنطة من الدم", 156 | "seizecash": "حجز الأموال", 157 | "softcuff": "كلبشة عل الخفيف", 158 | "camera": "فتح الكاميرا", 159 | "flagplate": "الابلاغ عن لوحة سيارة", 160 | "unflagplate": "الغاء الابلاغ عن لوحة سيارة", 161 | "plateinfo": "البحث عن لوحة سيارة", 162 | "depot": "الحجز مع غرامة", 163 | "impound": "حجز سيارة", 164 | "paytow": "دفع لسائق السطحة", 165 | "paylawyer": "دفع للمحامي", 166 | "anklet": "إرفاق خلخال للتتبع", 167 | "ankletlocation": "الحصول على موقع خلخال الأشخاص", 168 | "removeanklet": "الغاء خلخال تتبع لشخص معين", 169 | "drivinglicense": "حجز الرخصة", 170 | "takedna": "DNA تحصيل", 171 | "police_report": "تقرير الشرطة", 172 | "message_sent": "سيتم إرسال الرسالة", 173 | "civilian_call": "نداء مدني", 174 | "emergency_call": "911 اتصال من" 175 | }, 176 | "progressbar": { 177 | "blood_clear": "تطهير الدم", 178 | "bullet_casing": "إزالة أغلفة الرصاص", 179 | "robbing": "سرقة شخص", 180 | "place_object": "إضافة في الارض", 181 | "remove_object": "حدف الارض", 182 | "impound": "يتم حجز السيارة.." 183 | } 184 | } 185 | -------------------------------------------------------------------------------- /locales/cs.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "Hráč již má licenci", 4 | "error_license": "Hráč nemá tuto licenci", 5 | "no_camera": "Kamera neexistuje", 6 | "blood_not_cleared": "Krev NENI smazána", 7 | "bullet_casing_not_removed": "Nábojnice NEBYLY odstraněny", 8 | "none_nearby": "Nikdo není v blízkosti!", 9 | "canceled": "Zrušeno..", 10 | "time_higher": "Čas musí být vyšší než 0", 11 | "amount_higher": "Množství musí být vyšší než 0", 12 | "vehicle_cuff": "Nemůžete spoutat někoho ve vozidle", 13 | "no_cuff": "Nemáte u sebe pouta", 14 | "no_impound": "Nejsou žádná zabavená vozidla", 15 | "no_spikestripe": "Nelze umístit další hřebíky", 16 | "error_license_type": "Neplatný typ licence", 17 | "rank_license": "Nemáte dostatečně vysokou hodnost k udělení licence", 18 | "revoked_license": "Měl(a) jste odebranou licenci", 19 | "rank_revoke": "Nemáte dostatečně vysokou hodnost k odebrání licence", 20 | "on_duty_police_only": "Pouze pro policisty na službě", 21 | "vehicle_not_flag": "Vozidlo není označeno", 22 | "vehicle_flag": "Vozidlo je již označeno", 23 | "not_towdriver": "Není to řidič odtahového vozidla", 24 | "not_lawyer": "Osoba není právník", 25 | "no_anklet": "Tato osoba nemá na sobě náramek", 26 | "have_evidence_bag": "Musíte mít prázdný pytel na důkazy u sebe", 27 | "no_driver_license": "Žádný řidičský průkaz", 28 | "not_cuffed_dead": "Civilista není spoután nebo mrtvý", 29 | "no_rob": "Tato osoba není spoutaná, mrtvá nebo nemá ruce nahoru" 30 | }, 31 | "success": { 32 | "uncuffed": "Byli jste odspoutáni", 33 | "granted_license": "Byla vám udělena licence", 34 | "grant_license": "Udělili jste licenci", 35 | "revoke_license": "Odebrali jste licenci", 36 | "tow_paid": "Obdrželi jste $500", 37 | "blood_clear": "Krev smazána", 38 | "bullet_casing_removed": "Nábojnice odstraněny...", 39 | "anklet_taken_off": "Váš náramek na kotníku byl sundán.", 40 | "took_anklet_from": "Sundali jste náramek na kotníku z osoby %s %s", 41 | "put_anklet": "Připnuli jste náramek na kotníku.", 42 | "put_anklet_on": "Připnuli jste náramek na kotníku osobě %s %s", 43 | "vehicle_flagged": "Vozidlo %s bylo označeno pro %s", 44 | "impound_vehicle_removed": "Vozidlo vyjato ze zabavení!", 45 | "impounded": "Vozidlo bylo zabaveno" 46 | }, 47 | "info": { 48 | "mr": "Pan", 49 | "mrs": "Paní", 50 | "impound_price": "Cena, kterou hráč zaplatí za vysvobození vozidla (může být 0)", 51 | "plate_number": "Číslo registrační značky", 52 | "flag_reason": "Důvod označení vozidla", 53 | "camera_id_help": "ID kamery", 54 | "callsign_name": "Vaše volací značka", 55 | "poobject_object": "Typ objektu ke spawnutí nebo \"smazat\" pro smazání", 56 | "player_id": "ID hráče", 57 | "citizen_id": "Občanský průkaz hráče", 58 | "dna_sample": "DNA vzorek", 59 | "jail_time": "Čas, který musí být ve vězení", 60 | "jail_time_no": "Doba vězení musí být vyšší než 0", 61 | "license_type": "Typ licence (řidič/ zbraň)", 62 | "ankle_location": "Poloha náramku na kotníku", 63 | "cuff": "Jste spoutaní!", 64 | "cuffed_walk": "Jste spoutaní, ale můžete chodit", 65 | "vehicle_flagged": "Vozidlo %s je označeno pro: %s", 66 | "unflag_vehicle": "Vozidlo %s již není označeno", 67 | "tow_driver_paid": "Zaplatili jste řidiči odtahového vozidla", 68 | "paid_lawyer": "Zaplatili jste právníkovi", 69 | "vehicle_taken_depot": "Vozidlo odvezeno do úschovny za $%s", 70 | "vehicle_seized": "Vozidlo zabaveno", 71 | "stolen_money": "Ukradli jste $%s", 72 | "cash_robbed": "Byli jste oloupeni o $%s", 73 | "driving_license_confiscated": "Váš řidičský průkaz byl zkonfiskován", 74 | "cash_confiscated": "Vaše hotovost byla zkonfiskována", 75 | "searched_success": "Provedli jste prohlídku této osoby", 76 | "being_searched": "Jste prohledáváni", 77 | "cash_found": "Na civilistovi bylo nalezeno $%s", 78 | "sent_jail_for": "Odsoudili jste osobu do vězení na %s měsíců", 79 | "fine_received": "Obdrželi jste pokutu ve výši $%s", 80 | "blip_text": "Policejní varování - %s", 81 | "jail_time_input": "Doba vězení", 82 | "submit": "Potvrdit", 83 | "time_months": "Čas v měsících", 84 | "bill": "Faktura", 85 | "amount": "Částka", 86 | "vehicle_info": "Motor: %s % | Palivo: %s %", 87 | "evidence_stash": "Schránka na důkazy | %s", 88 | "slot": "Slot č. (1,2,3)", 89 | "current_evidence": "%s | Zásuvka %s", 90 | "on_duty": "[E] - Nastoupit na službu", 91 | "off_duty": "[E] - Odejít ze služby", 92 | "onoff_duty": "Ve službě/Mimo službu", 93 | "stash": "Schránka %s", 94 | "delete_spike": "[E] Smazat hřebík", 95 | "close_camera": "Zavřít kameru", 96 | "bullet_casing": "[~g~G~s~] Nábojnice %s", 97 | "casing": "Nábojnice", 98 | "blood": "Krev", 99 | "blood_text": "[~g~G~s~] Krev %s", 100 | "fingerprint_text": "[G] Otisky prstů", 101 | "fingerprint": "Otisky prstů", 102 | "store_heli": "[E] Uložit vrtulník", 103 | "take_heli": "[E] Vzít vrtulník", 104 | "impound_veh": "[E] - Zabavit vozidlo", 105 | "store_veh": "[E] - Uložit vozidlo", 106 | "grab_veh": "[E] - Garáž na vozidla", 107 | "armory": "Zbrojnice", 108 | "enter_armory": "[E] Zbrojnice", 109 | "finger_scan": "Skenování otisků prstů", 110 | "scan_fingerprint": "[E] Skenovat otisky prstů", 111 | "trash": "Odpadky", 112 | "trash_enter": "[E] Koš na odpadky", 113 | "stash_enter": "[E] Vstoupit do skříně", 114 | "evidence": "[E] - Důkazy", 115 | "target_location": "Poloha %s %s je zaznamenána na vaší mapě", 116 | "anklet_location": "Poloha náramku na kotníku", 117 | "new_call": "Nový hovor", 118 | "officer_down": "Policista %s | %s Poraněn", 119 | "plate_triggered": "Vozidlo s registrační značkou %s bylo označeno na ulici %s radarovým systémem #%s", 120 | "plate_triggered_blip": "Vozidlo označeno radarovým systémem #%s", 121 | "camera_id": " - ID kamery: " 122 | }, 123 | "evidence": { 124 | "red_hands": "Červené ruce", 125 | "wide_pupils": "Rozšířené zornice", 126 | "red_eyes": "Červené oči", 127 | "weed_smell": "Zápach konopí", 128 | "gunpowder": "Zápach střelného prachu na oblečení", 129 | "chemicals": "Zápach chemikálií", 130 | "heavy_breathing": "Těžký dech", 131 | "sweat": "Hodně potí se", 132 | "handbleed": "Krev na rukou", 133 | "confused": "Zmatený/Zmatená", 134 | "alcohol": "Zápach alkoholu", 135 | "heavy_alcohol": "Intenzivní zápach alkoholu", 136 | "agitated": "Nenasytný - Příznaky užívání methamfetaminu", 137 | "serial_not_visible": "Sériové číslo není viditelné..." 138 | }, 139 | "menu": { 140 | "garage_title": "Policejní vozidla", 141 | "close": "⬅ Zavřít menu", 142 | "impound": "Zabavená vozidla", 143 | "pol_impound": "Policejní zabavení", 144 | "pol_garage": "Policejní garáž", 145 | "pol_armory": "Policejní zbrojnice" 146 | }, 147 | "email": { 148 | "sender": "Centrální soudní exekutorská agentura", 149 | "subject": "Inkaso dluhu", 150 | "message": "Vážený/á %s. %s,

Centrální soudní exekutorská agentura (CJCA) naúčtovala pokuty, které jste obdrželi od policie.
Z vašeho účtu bylo vybráno $%s.

S pozdravem,
Pan I.K. Graai" 151 | }, 152 | "commands": { 153 | "place_spike": "Umístit hřebík (Pouze pro policii)", 154 | "license_grant": "Udělit licenci někomu", 155 | "license_revoke": "Odebrat licenci někomu", 156 | "place_object": "Umístit/Smazat objekt (Pouze pro policii)", 157 | "cuff_player": "Spoutat hráče (Pouze pro policii)", 158 | "escort": "Es escort hráče", 159 | "callsign": "Nastavit si volací značku", 160 | "clear_casign": "Vyčistit oblast od nábojnic (Pouze pro policii)", 161 | "jail_player": "Věznit hráče (Pouze pro policii)", 162 | "unjail_player": "Osvobodit hráče z vězení (Pouze pro policii)", 163 | "clearblood": "Vyčistit oblast od krve (Pouze pro policii)", 164 | "seizecash": "Zabavit hotovost (Pouze pro policii)", 165 | "softcuff": "Měkké spoutání (Pouze pro policii)", 166 | "camera": "Zobrazit bezpečnostní kameru (Pouze pro policii)", 167 | "flagplate": "Označit značku (Pouze pro policii)", 168 | "unflagplate": "Odznačit značku (Pouze pro policii)", 169 | "plateinfo": "Zkontrolovat značku (Pouze pro policii)", 170 | "depot": "Zabavit s cenou (Pouze pro policii)", 171 | "impound": "Zabavit vozidlo (Pouze pro policii)", 172 | "paytow": "Zaplatit odtahové službě (Pouze pro policii)", 173 | "paylawyer": "Zaplatit advokátovi (Pouze pro policii, soudce)", 174 | "anklet": "Připevnit sledovací náramek (Pouze pro policii)", 175 | "ankletlocation": "Získat polohu náramku na kotníku osoby", 176 | "removeanklet": "Odstranit sledovací náramek (Pouze pro policii)", 177 | "drivinglicense": "Zabavit řidičský průkaz (Pouze pro policii)", 178 | "takedna": "Vzít vzorek DNA od osoby (potřebný prázdný pytel na důkazy) (Pouze pro policii)", 179 | "police_report": "Policijská zpráva", 180 | "message_sent": "Zpráva k odeslání", 181 | "civilian_call": "Hovor od civilisty", 182 | "emergency_call": "Nový hovor na linku 911" 183 | }, 184 | "progressbar": { 185 | "blood_clear": "Čištění krve...", 186 | "bullet_casing": "Odstraňování nábojnic..", 187 | "robbing": "Loupež osoby...", 188 | "place_object": "Umisťování objektu..", 189 | "remove_object": "Odstraňování objektu..", 190 | "impound": "Zabavování vozidla.." 191 | } 192 | } 193 | -------------------------------------------------------------------------------- /locales/da.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "in_vehicle": "Du kan ikke gøre det i et køretøj", 4 | "license_already": "Spilleren har allerede en licens", 5 | "error_license": "Spilleren har ikke den licens", 6 | "no_camera": "Kameraet eksisterer ikke", 7 | "blood_not_cleared": "Blod IKKE ryddet", 8 | "bullet_casing_not_removed": "Patronhylstre IKKE fjernet", 9 | "none_nearby": "Ingen i nærheden!", 10 | "canceled": "Annulleret..", 11 | "time_higher": "Tiden skal være højere end 0", 12 | "amount_higher": "Beløbet skal være højere end 0", 13 | "vehicle_cuff": "Du kan ikke lægge nogen i håndjern i et køretøj", 14 | "no_cuff": "Du har ikke håndjern på dig", 15 | "no_impound": "Der er ingen beslaglagte køretøjer", 16 | "no_spikestripe": "Kan ikke placere flere sømmåtter", 17 | "error_license_type": "Ugyldig licenstype", 18 | "rank_license": "Du er ikke af høj nok rang til at give en licens", 19 | "revoked_license": "Du har fået en licens inddraget", 20 | "rank_revoke": "Du er ikke af høj nok rang til at inddrage en licens", 21 | "on_duty_police_only": "Kun for politiet på vagt", 22 | "vehicle_not_flag": "Køretøjet er ikke markeret", 23 | "vehicle_flag": "Køretøjet er allerede markeret", 24 | "not_towdriver": "Ikke en bugseringschauffør", 25 | "not_lawyer": "Personen er ikke en advokat", 26 | "no_anklet": "Denne person har ikke en ankelsporing på.", 27 | "have_evidence_bag": "Du skal have en tom bevispose med dig", 28 | "no_driver_license": "Ingen kørekort", 29 | "not_cuffed_dead": "Civilisten er ikke i håndjern eller død", 30 | "no_rob": "Denne person er ikke i håndjern, død eller med hænderne oppe" 31 | }, 32 | "success": { 33 | "uncuffed": "Du er blevet løsnet fra håndjern", 34 | "granted_license": "Du har fået en licens", 35 | "grant_license": "Du har givet en licens", 36 | "revoke_license": "Du har inddraget en licens", 37 | "tow_paid": "Du blev betalt $500", 38 | "blood_clear": "Blod ryddet", 39 | "bullet_casing_removed": "Patronhylstre fjernet...", 40 | "anklet_taken_off": "Din ankelsporing er taget af.", 41 | "took_anklet_from": "Du tog %s %s tracker af", 42 | "put_anklet": "Du satte en ankelsporing på.", 43 | "put_anklet_on": "Du satte en ankelsporing på %s %s", 44 | "vehicle_flagged": "Køretøj %s er markeret for %s", 45 | "impound_vehicle_removed": "Køretøj taget ud af beslag!", 46 | "impounded": "Køretøj beslaglagt" 47 | }, 48 | "info": { 49 | "mr": "Hr.", 50 | "mrs": "Fru.", 51 | "impound_price": "Pris spilleren betaler for at få køretøjet ud af beslag (kan være 0)", 52 | "plate_number": "Registreringsnummer", 53 | "flag_reason": "Årsag til markering af køretøj", 54 | "camera_id_help": "Kamera ID", 55 | "callsign_name": "Navn på din kaldesignal", 56 | "poobject_object": "Objekttype at spawne eller \"slette\" for at slette", 57 | "player_id": "Spiller ID", 58 | "citizen_id": "Borger ID for spiller", 59 | "dna_sample": "DNA Prøve", 60 | "jail_time": "Tid de skal være i fængsel", 61 | "jail_time_no": "Fængselstid skal være højere end 0", 62 | "license_type": "Licenstype (kørekort/våben)", 63 | "ankle_location": "Ankelsporingens placering", 64 | "cuff": "Du er i håndjern!", 65 | "cuffed_walk": "Du er i håndjern, men du kan gå", 66 | "vehicle_flagged": "Køretøj %s er markeret for: %s", 67 | "unflag_vehicle": "Køretøj %s er unflagget", 68 | "tow_driver_paid": "Du betalte bugseringschaufføren", 69 | "paid_lawyer": "Du betalte en advokat", 70 | "vehicle_taken_depot": "Køretøj taget til depot for $%s", 71 | "vehicle_seized": "Køretøj beslaglagt", 72 | "stolen_money": "Du har stjålet $%s", 73 | "cash_robbed": "Du er blevet bestjålet $%s", 74 | "driving_license_confiscated": "Dit kørekort er blevet konfiskeret", 75 | "cash_confiscated": "Dine kontanter blev konfiskeret", 76 | "searched_success": "Du har gennemført en søgning på denne person", 77 | "being_searched": "Du bliver gennemsøgt", 78 | "cash_found": "Fundet $%s på civilisten", 79 | "sent_jail_for": "Du sendte personen i fængsel i %s måneder", 80 | "fine_received": "Du har modtaget en bøde på $%s", 81 | "blip_text": "Politialarm - %s", 82 | "jail_time_input": "Fængselstid", 83 | "submit": "Indsend", 84 | "time_months": "Tid i måneder", 85 | "bill": "Regning", 86 | "amount": "Beløb", 87 | "vehicle_info": "Motor: %s % | Brændstof: %s %", 88 | "evidence_stash": "Bevislager | %s", 89 | "slot": "Slot nr. (1,2,3)", 90 | "current_evidence": "%s | Skuffe %s", 91 | "on_duty": "[E] - Gå på vagt", 92 | "off_duty": "[E] - Gå af vagt", 93 | "onoff_duty": "På/Af Vagt", 94 | "stash": "Lager %s", 95 | "delete_spike": "[E] Slet sømmåtte", 96 | "close_camera": "Luk kamera", 97 | "bullet_casing": "[~g~G~s~] Patronhylster %s", 98 | "casing": "Patronhylster", 99 | "blood": "Blod", 100 | "blood_text": "[~g~G~s~] Blod %s", 101 | "fingerprint_text": "[G] Fingeraftryk", 102 | "fingerprint": "Fingeraftryk", 103 | "store_heli": "[E] Parker helikopter", 104 | "take_heli": "[E] Tag helikopter", 105 | "impound_veh": "[E] - Beslaglæg køretøj", 106 | "store_veh": "[E] - Parker køretøj", 107 | "grab_veh": "[E] - Køretøjsgarage", 108 | "armory": "Våbenlager", 109 | "enter_armory": "[E] Våbenlager", 110 | "finger_scan": "Fingeraftryksscanning", 111 | "scan_fingerprint": "[E] Scan fingeraftryk", 112 | "trash": "Skrald", 113 | "trash_enter": "[E] Skraldespand", 114 | "stash_enter": "[E] Gå ind i skabet", 115 | "evidence": "[E] - Beviser", 116 | "target_location": "Placeringen af %s %s er markeret på dit kort", 117 | "anklet_location": "Ankelsporingens placering", 118 | "new_call": "Nyt opkald", 119 | "officer_down": "Betjent %s | %s nede", 120 | "plate_triggered": "Et køretøj med nummerplade %s blev markeret på %s af radar #%s", 121 | "plate_triggered_blip": "Køretøj markeret af radar #%s", 122 | "camera_id": " - Kamera ID: " 123 | }, 124 | "evidence": { 125 | "red_hands": "Røde hænder", 126 | "wide_pupils": "Udvidede pupiller", 127 | "red_eyes": "Røde øjne", 128 | "weed_smell": "Lugter af hash", 129 | "gunpowder": "Krudt på tøj", 130 | "chemicals": "lugter kemisk", 131 | "heavy_breathing": "Trækker vejret tungt", 132 | "sweat": "Sveder meget", 133 | "handbleed": "Blod på hænder", 134 | "confused": "Forvirret", 135 | "alcohol": "Lugter af alkohol", 136 | "heavy_alcohol": "Lugter meget af alkohol", 137 | "agitated": "Ophidset - Tegn på meth-brug", 138 | "serial_not_visible": "Serienummer ikke synligt..." 139 | }, 140 | "menu": { 141 | "garage_title": "Politikøretøjer", 142 | "close": "⬅ Luk Menu", 143 | "impound": "Beslaglagte køretøjer", 144 | "pol_impound": "Politiets beslag", 145 | "pol_garage": "Politiets garage", 146 | "pol_armory": "Politiets våbenlager" 147 | }, 148 | "email": { 149 | "sender": "Central Judicial Collection Agency", 150 | "subject": "Gældsinddrivelse", 151 | "message": "Kære %s. %s,

Det Centrale Retslige Inddrivelsesagentur (CJCA) har trukket de bøder, du modtog fra politiet.
Der er $%s trukket fra din konto.

Venlig hilsen,
Hr. I.K. Graai" 152 | }, 153 | "commands": { 154 | "place_spike": "Placer sømmåtte (Kun politi)", 155 | "license_grant": "Giv en licens til nogen", 156 | "license_revoke": "Inddrag en licens fra nogen", 157 | "place_object": "Placer/Slet et objekt (Kun politi)", 158 | "cuff_player": "Læg spiller i håndjern (Kun politi)", 159 | "escort": "Eskortér spiller", 160 | "callsign": "Giv dig selv et kaldesignal", 161 | "clear_casign": "Ryd området for hylstre (Kun politi)", 162 | "jail_player": "Fængsl spiller (Kun politi)", 163 | "unjail_player": "Løslad spiller (Kun politi)", 164 | "clearblood": "Ryd området for blod (Kun politi)", 165 | "seizecash": "Beslaglæg kontanter (Kun politi)", 166 | "softcuff": "Læg bløde håndjern (Kun politi)", 167 | "camera": "Se overvågningskamera (Kun politi)", 168 | "flagplate": "Markér en nummerplade (Kun politi)", 169 | "unflagplate": "Fjern markering af nummerplade (Kun politi)", 170 | "plateinfo": "Kør en nummerplade (Kun politi)", 171 | "depot": "Beslaglæg med pris (Kun politi)", 172 | "impound": "Beslaglæg et køretøj (Kun politi)", 173 | "paytow": "Betal bugseringschauffør (Kun politi)", 174 | "paylawyer": "Betal advokat (Politi, dommer kun)", 175 | "anklet": "Fastgør ankelsporing (Kun politi)", 176 | "ankletlocation": "Få placeringen af en persons ankelsporing", 177 | "removeanklet": "Fjern ankelsporing (Kun politi)", 178 | "drivinglicense": "Beslaglæg kørekort (Kun politi)", 179 | "takedna": "Tag en DNA-prøve fra en person (tom bevispose nødvendig) (Kun politi)", 180 | "police_report": "Politi rapport", 181 | "message_sent": "Besked at sende", 182 | "civilian_call": "Civilt opkald", 183 | "emergency_call": "Nyt 911 opkald" 184 | }, 185 | "progressbar": { 186 | "blood_clear": "Rydder blod...", 187 | "bullet_casing": "Fjerner patronhylstre..", 188 | "robbing": "Røver person...", 189 | "place_object": "Placerer objekt..", 190 | "remove_object": "Fjerner objekt..", 191 | "impound": "Beslaglægger køretøj.." 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /locales/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "Bürger hat bereits diese Lizenz", 4 | "error_license": "Bürger hat diese Lizenz nicht", 5 | "no_camera": "Kamera existiert nicht", 6 | "blood_not_cleared": "Blut NICHT entfernt", 7 | "bullet_casing_not_removed": "Patronenhülsen NICHT entfernt", 8 | "none_nearby": "Niemand in der nähe!", 9 | "canceled": "Abbruch..", 10 | "time_higher": "Zeit muss größer als 0 sein", 11 | "amount_higher": "Betrag muss größer als 0 sein", 12 | "vehicle_cuff": "Du kannst niemanden im Fahrzeug die Handschellen anlegen", 13 | "no_cuff": "Du hast keine Handschellen bei dir", 14 | "no_impound": "Keine beschlagnahmten Fahrzeuge", 15 | "no_spikestripe": "Mehr Nagelbänder auswerfen nicht möglich", 16 | "error_license_type": "Falscher Lizenztyp", 17 | "rank_license": "Du hast nicht die erforderliche Rangstufe, um eine Lizenz zu vergeben", 18 | "revoked_license": "Dir wurde eine Lizenz entzogen", 19 | "rank_revoke": "Du hast nicht die erforderliche Rangstufe, um eine Lizenz zu entziehen", 20 | "on_duty_police_only": "Nur Polizei im Dienst", 21 | "vehicle_not_flag": "Fahrzeug nicht markiert", 22 | "not_towdriver": "Kein Abschleppwagenfahrer", 23 | "not_lawyer": "Person ist kein Anwalt", 24 | "no_anklet": "Diese Person hat keine Fußfessel", 25 | "have_evidence_bag": "Du brauchst einen leeren Beweisbeutel", 26 | "no_driver_license": "Keinen Führerschein", 27 | "not_cuffed_dead": "Person ist nicht gefesselt oder tot", 28 | "no_rob": "Diese Person ist nicht gefesselt, tot oder hat die Hände hoch." 29 | }, 30 | "success": { 31 | "uncuffed": "Du wurdest gefesselt", 32 | "granted_license": "Gratulation, dir wurde eine Lizenz ausgestellt", 33 | "grant_license": "Lizenz ausgestellt!", 34 | "revoke_license": "Lizenz entzogen!", 35 | "tow_paid": "Dir wurden €500 bezahlt", 36 | "blood_clear": "Blut entfernt", 37 | "bullet_casing_removed": "Patronenhülsen entfernt", 38 | "anklet_taken_off": "Deine Fußfessel wurde entfernt", 39 | "took_anklet_from": "Du hast %s %s die Fußfessel entfernt", 40 | "put_anklet": "Du hast der Person eine Fußfessel angelegt", 41 | "put_anklet_on": "Du hast %s %s eine Fußfessel angelegt", 42 | "vehicle_flagged": "Fahrzeug %s wird zur Fahndung ausgeschrieben, Grund: %s", 43 | "impound_vehicle_removed": "Fahrzeug aus dem Verwahrhof entfernt!", 44 | "impounded": "Fahrzeugbeschlagnahmung" 45 | }, 46 | "info": { 47 | "mr": "Mr.", 48 | "mrs": "Mrs.", 49 | "impound_price": "Preis um das Fahrzeug auszulösen (kann 0 sein)", 50 | "plate_number": "Kennzeichen", 51 | "flag_reason": "Grund für Markierung", 52 | "camera_id": " - Kamera ID: ", 53 | "camera_id_help": "ID der Kamera", 54 | "callsign_name": "Funkrufname", 55 | "poobject_object": "cone, barrier, roadsign, tent, light or delete", 56 | "player_id": "ID des Bürgers", 57 | "citizen_id": "CIV-ID des Bürgers", 58 | "dna_sample": "DNA Probe", 59 | "jail_time": "Zeit in Monaten", 60 | "jail_time_no": "Hafteinheiten müssen größer als 0 sein", 61 | "license_type": "Lizenztyp (FÜhrerschein/Waffen)", 62 | "ankle_location": "Fußfessel-Position", 63 | "cuff": "Du wurdest gefesselt!", 64 | "cuffed_walk": "Du wurdest gefesselt, aber kannst gehen", 65 | "vehicle_flagged": "Das Fahrzeug %s ist mit folgendem Grund markiert: %s", 66 | "unflag_vehicle": "Das Fahrzeug %s ist nicht mehr markiert", 67 | "tow_driver_paid": "Du hast den Abschlepper bezahlt", 68 | "paid_lawyer": "Du hast den Anwalt bezahlt", 69 | "vehicle_taken_depot": "Fahrzeug wird in den Verwahrhof gebracht. Kosten: $%s", 70 | "vehicle_seized": "Fahrzeug beschlagnahmt!", 71 | "stolen_money": "Du hast €%s gestohlen", 72 | "cash_robbed": "Dir wurde $%s gestohlen", 73 | "driving_license_confiscated": "Dein Führerschein wurde Konfisziert!", 74 | "cash_confiscated": "Dein Geld wurde konfisziert", 75 | "being_searched": "Du wirst gerade durchsucht", 76 | "searched_success": "Du hast die Durchsuchung der Person durchgeführt", 77 | "cash_found": "Dieser Bürger hat €%s Bargeld in seiner Tasche", 78 | "sent_jail_for": "Du hast die Person für %s Monate inhaftiert", 79 | "fine_received": "Du hast eine Strafe über €%s bekommen!", 80 | "blip_text": "#DISPATCH ALARM - %s", 81 | "jail_time_input": "Haftzeit", 82 | "submit": "Absenden", 83 | "time_months": "Zeit in Monaten", 84 | "bill": "Rechnung", 85 | "amount": "Betrag", 86 | "vehicle_info": "Motor: %s % | Tank: %s %", 87 | "evidence_stash": "Spurensicherungslager | %s", 88 | "slot": "Regal-Nr. (1,2,3)", 89 | "current_evidence": "%s | Regal %s", 90 | "on_duty": "[E] - Einstempeln", 91 | "off_duty": "[E] - Ausstempeln", 92 | "onoff_duty": "EIN/AUS Dienst", 93 | "stash": "Schließfach %s", 94 | "delete_spike": "[E] - Nagelband entfernen", 95 | "close_camera": "Kamera schließen", 96 | "bullet_casing": "[G] - Patronenhülse %s", 97 | "casing": "Patronenhülse", 98 | "blood": "Blut", 99 | "blood_text": "[G] - Blut %s", 100 | "fingerprint_text": "[G] - Fingerabdruck", 101 | "fingerprint": "Fingerabdruck", 102 | "store_heli": "[E] - Helikopter einparken", 103 | "take_heli": "[E] - Helikopter ausparken", 104 | "impound_veh": "[E] - Fahrzeug beschlagnahmen", 105 | "store_veh": "[E] - Fahrzeug einparken", 106 | "grab_veh": "[E] - Fahrzeug ausparken", 107 | "armory": "Waffenkammer", 108 | "enter_armory": "[E] - Waffenkammer", 109 | "finger_scan": "Scannen von Fingerabdrücken", 110 | "scan_fingerprint": "[E] - Fingerabdruck scannen", 111 | "trash": "Müll", 112 | "trash_enter": "[E] - Mülleimer", 113 | "stash_enter": "[E] - Schließfach öffnen", 114 | "evidence": "[E] - Spurensicherung", 115 | "target_location": "Der Aufenthaltsort von %s %s ist auf der Karte markiert", 116 | "anklet_location": "Ort der Fußfessel", 117 | "new_call": "Neuer Anruf", 118 | "officer_down": "Polizist %s | %s am Boden", 119 | "plate_triggered": "Ein Fahrzeug mit dem Kennzeichen %s wurde auf der Straße %s vom Radar #%s erfasst", 120 | "plate_triggered_blip": "Fahrzeug von Radar #%s erfasst" 121 | }, 122 | "evidence": { 123 | "red_hands": "Blutige Hände", 124 | "wide_pupils": "Weite Pupillen", 125 | "red_eyes": "Rote Augen", 126 | "weed_smell": "Richt nach Gras", 127 | "gunpowder": "Schießpulver auf der Kleidung", 128 | "chemicals": "Richt nach Chemie", 129 | "heavy_breathing": "Atmet schwer", 130 | "sweat": "Schwitzt ein bisschen", 131 | "handbleed": "Blut an den Händen", 132 | "confused": "Verwirrt", 133 | "alcohol": "Richt nach Alkohol", 134 | "heavy_alcohol": "Richt stark nach Alkohol", 135 | "agitated": "Nervös - Anzeichen von Meth-Konsum", 136 | "serial_not_visible": "Seriennummer nicht sichtbar..." 137 | }, 138 | "menu": { 139 | "garage_title": "Polizeifahrzeuge", 140 | "close": "⬅ Menü schließen", 141 | "impound": "Abgeschleppte Fahrzeuge", 142 | "pol_impound": "Polizei-Abschleppdienst", 143 | "pol_garage": "Polizeigarage", 144 | "pol_armory": "Polizei-Waffenkammer" 145 | }, 146 | "email": { 147 | "sender": "Department of Justice", 148 | "subject": "Ausständige Zahlungen", 149 | "message": "Sehr geehrte/r %s. %s,

Die Justiz hat beschlossen Ihre Strafzettel beim Staat einzutreiben.
Der ausständige Betrag von $%s wurde von ihrem Konto abgebucht.

Mit freundlichen Grüßen,
Department of Justice" 150 | }, 151 | "commands": { 152 | "place_spike": "Platziere Nagelband (Polizei)", 153 | "license_grant": "Lizenz ausstellen", 154 | "license_revoke": "Lizenz entziehen", 155 | "place_object": "Objekt platzieren/löschen (Polizei)", 156 | "cuff_player": "Person festnehmen (Polizei)", 157 | "escort": "Person eskortieren", 158 | "callsign": "Funkrufname", 159 | "clear_casign": "Bereich Säubern von Patronenhülsen (Polizei)", 160 | "jail_player": "Ins Gefängnis stecken (Polizei)", 161 | "unjail_player": "Person freilassen (Polizei)", 162 | "clearblood": "Von Blut gesäubert (Polizei)", 163 | "seizecash": "Bargeld beschlagnahmen (Polizei)", 164 | "softcuff": "Gefesselt (Polizei)", 165 | "camera": "Überwachungskamera ansehen (Polizei)", 166 | "flagplate": "Kennzeichen markieren (Polizei)", 167 | "unflagplate": "Kennzeichen markierung Entfernen (Polizei)", 168 | "plateinfo": "Kennzeichen überprüfen (Polizei)", 169 | "depot": "Verwahrhof mit Preis (Polizei)", 170 | "impound": "Beschlagnahmen (Polizei)", 171 | "paytow": "Abschlepper bezahlen (Polizei)", 172 | "paylawyer": "Anwalt bezahlen (Polizei, Richter)", 173 | "anklet": "Fußfessel anbringen (Polizei)", 174 | "ankletlocation": "Ort der Fußfessel einer Person orten", 175 | "removeanklet": "Fußfessel entfernen (Polizei)", 176 | "drivinglicense": "Führerschein entziehen (Polizei)", 177 | "takedna": "DNA Probe nehmen (leere Beutel notwendig) (Polizei)", 178 | "police_report": "Polizeibericht", 179 | "message_sent": "Nachricht", 180 | "civilian_call": "Zivilist in Not", 181 | "emergency_call": "Polizei NOTRUF" 182 | }, 183 | "progressbar": { 184 | "blood_clear": "Blut entfernen...", 185 | "bullet_casing": "Patronenhülsen entfernen..", 186 | "robbing": "Ausrauben..", 187 | "place_object": "Objekt platzieren..", 188 | "remove_object": "Objekt entfernen..", 189 | "impound": "Fahrzeug wird beschlagnahmt.." 190 | } 191 | } 192 | -------------------------------------------------------------------------------- /locales/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "in_vehicle": "You can't do it in a vehicle", 4 | "license_already": "Player already has a license", 5 | "error_license": "Player doesn't have that license", 6 | "no_camera": "Camera doesn't exist", 7 | "blood_not_cleared": "Blood NOT cleared", 8 | "bullet_casing_not_removed": "Bullet Casings NOT Removed", 9 | "none_nearby": "No one nearby!", 10 | "canceled": "Canceled..", 11 | "time_higher": "Time must be higher than 0", 12 | "amount_higher": "Amount must be higher than 0", 13 | "vehicle_cuff": "You can't cuff someone in a vehicle", 14 | "no_cuff": "You don't have handcuffs on you", 15 | "no_impound": "There are no impounded vehicles", 16 | "no_spikestripe": "Cannot place anymore spike strips", 17 | "error_license_type": "Invalid license type", 18 | "rank_license": "You are not a high enough rank to grant a license", 19 | "revoked_license": "You've had a license revoked", 20 | "rank_revoke": "You are not a high enough rank to revoke a license", 21 | "on_duty_police_only": "For on-duty police only", 22 | "vehicle_not_flag": "Vehicle not flagged", 23 | "vehicle_flag": "Vehicle already flagged", 24 | "not_towdriver": "Not a tow truck driver", 25 | "not_lawyer": "Person is not a lawyer", 26 | "no_anklet": "This person doesn't have an anklet on.", 27 | "have_evidence_bag": "You must have an empty evidence bag with you", 28 | "no_driver_license": "No drivers license", 29 | "not_cuffed_dead": "Civilian isn't cuffed or dead", 30 | "no_rob": "This person isn't cuffed, dead, or hands up" 31 | }, 32 | "success": { 33 | "uncuffed": "You have been uncuffed", 34 | "granted_license": "You have been granted a license", 35 | "grant_license": "You granted a license", 36 | "revoke_license": "You revoked a license", 37 | "tow_paid": "You were paid $500", 38 | "blood_clear": "Blood Cleared", 39 | "bullet_casing_removed": "Bullet Casings Removed...", 40 | "anklet_taken_off": "Your ankle tracker is taken off.", 41 | "took_anklet_from": "You took off %s %s tracker", 42 | "put_anklet": "You put on an ankle tracker.", 43 | "put_anklet_on": "You put on an ankle tracker on %s %s", 44 | "vehicle_flagged": "Vehicle %s has been flagged for %s", 45 | "impound_vehicle_removed": "Vehicle taken out of impound!", 46 | "impounded": "Vehicle impounded", 47 | "escapedcuff": "You slipped out of the cuffs!" 48 | }, 49 | "info": { 50 | "mr": "Mr.", 51 | "mrs": "Mrs.", 52 | "impound_price": "Price the player pays to get vehicle out of impound (can be 0)", 53 | "plate_number": "License Plate Number", 54 | "flag_reason": "Reason for flagging vehicle", 55 | "camera_id_help": "Camera ID", 56 | "callsign_name": "Name of your callsign", 57 | "poobject_object": "Object type to spawn or \"delete\" to delete", 58 | "player_id": "ID of Player", 59 | "citizen_id": "Citizen ID of Player", 60 | "dna_sample": "DNA Sample", 61 | "jail_time": "Time they have to be in jail", 62 | "jail_time_no": "Jail time needs to be higher than 0", 63 | "license_type": "License Type (driver/weapon)", 64 | "ankle_location": "Ankle Tracker Location", 65 | "cuff": "You are cuffed!", 66 | "cuffed_walk": "You are cuffed, but you can walk", 67 | "vehicle_flagged": "Vehicle %s is flagged for: %s", 68 | "unflag_vehicle": "Vehicle %s is unflagged", 69 | "tow_driver_paid": "You paid the tow truck driver", 70 | "paid_lawyer": "You paid a lawyer", 71 | "vehicle_taken_depot": "Vehicle taken into depot for $%s", 72 | "vehicle_seized": "Vehicle seized", 73 | "stolen_money": "You have stolen $%s", 74 | "cash_robbed": "You have been robbed of $%s", 75 | "driving_license_confiscated": "Your driving license has been confiscated", 76 | "cash_confiscated": "Your cash was confiscated", 77 | "searched_success": "You completed a search on this person", 78 | "being_searched": "You are being searched", 79 | "cash_found": "Found $%s on the civilian", 80 | "sent_jail_for": "You sent the person to prison for %s months", 81 | "fine_received": "You received a fine of $%s", 82 | "blip_text": "Police Alert - %s", 83 | "jail_time_input": "Jail time", 84 | "submit": "Submit", 85 | "time_months": "Time in Months", 86 | "bill": "Bill", 87 | "amount": "Amount", 88 | "vehicle_info": "Engine: %s % | Fuel: %s %", 89 | "evidence_stash": "Evidence Stash | %s", 90 | "slot": "Slot no. (1,2,3)", 91 | "current_evidence": "%s | Drawer %s", 92 | "on_duty": "[E] - Go on duty", 93 | "off_duty": "[E] - Go off duty", 94 | "onoff_duty": "On/Off Duty", 95 | "stash": "Stash %s", 96 | "delete_spike": "[E] Delete Spike Strip", 97 | "close_camera": "Close Camera", 98 | "bullet_casing": "[~g~G~s~] Bullet Casing %s", 99 | "casing": "Bullet Casing", 100 | "blood": "Blood", 101 | "blood_text": "[~g~G~s~] Blood %s", 102 | "fingerprint_text": "[G] Fingerprint", 103 | "fingerprint": "Fingerprint", 104 | "store_heli": "[E] Store Helicopter", 105 | "take_heli": "[E] Take Helicopter", 106 | "impound_veh": "[E] - Impound Vehicle", 107 | "store_veh": "[E] - Store Vehicle", 108 | "grab_veh": "[E] - Vehicle Garage", 109 | "armory": "Armory", 110 | "enter_armory": "[E] Armory", 111 | "finger_scan": "Fingerprint Scanning", 112 | "scan_fingerprint": "[E] Scan Fingerprint", 113 | "trash": "Trash", 114 | "trash_enter": "[E] Trash Bin", 115 | "stash_enter": "[E] Enter Locker", 116 | "evidence": "[E] - Evidence", 117 | "target_location": "The location of %s %s is marked on your map", 118 | "anklet_location": "Anklet location", 119 | "new_call": "New Call", 120 | "officer_down": "Officer %s | %s Down", 121 | "plate_triggered": "A vehicle with plate %s was flagged on %s by radar #%s", 122 | "plate_triggered_blip": "Vehicle flagged by radar #%s", 123 | "camera_id": " - Camera ID: " 124 | }, 125 | "evidence": { 126 | "red_hands": "Red hands", 127 | "wide_pupils": "Wide Pupils", 128 | "red_eyes": "Red Eyes", 129 | "weed_smell": "Smells like weed", 130 | "gunpowder": "Gunpowder in clothing", 131 | "chemicals": "smells chemical", 132 | "heavy_breathing": "Breathes heavily", 133 | "sweat": "Sweats a lot", 134 | "handbleed": "Blood on hands", 135 | "confused": "Confused", 136 | "alcohol": "Smells like alcohol", 137 | "heavy_alcohol": "Smells very much like alcohol", 138 | "agitated": "Agitated - Signs of Meth Use", 139 | "serial_not_visible": "Serial number not visible..." 140 | }, 141 | "menu": { 142 | "garage_title": "Police Vehicles", 143 | "close": "⬅ Close Menu", 144 | "impound": "Impounded Vehicles", 145 | "pol_impound": "Police Impound", 146 | "pol_garage": "Police Garage", 147 | "pol_armory": "Police Armory" 148 | }, 149 | "email": { 150 | "sender": "Central Judicial Collection Agency", 151 | "subject": "Debt collection", 152 | "message": "Dear %s. %s,

The Central Judicial Collection Agency (CJCA) charged the fines you received from the police.
There is $%s withdrawn from your account.

Kind regards,
Mr. I.K. Graai" 153 | }, 154 | "commands": { 155 | "place_spike": "Place Spike Strip (Police Only)", 156 | "license_grant": "Grant a license to someone", 157 | "license_revoke": "Revoke a license from someone", 158 | "place_object": "Place/Delete An Object (Police Only)", 159 | "cuff_player": "Cuff Player (Police Only)", 160 | "escort": "Escort Player", 161 | "callsign": "Give Yourself A Callsign", 162 | "clear_casign": "Clear Area of Casings (Police Only)", 163 | "jail_player": "Jail Player (Police Only)", 164 | "unjail_player": "Unjail Player (Police Only)", 165 | "clearblood": "Clear The Area of Blood (Police Only)", 166 | "seizecash": "Seize Cash (Police Only)", 167 | "softcuff": "Soft Cuff (Police Only)", 168 | "camera": "View Security Camera (Police Only)", 169 | "flagplate": "Flag A Plate (Police Only)", 170 | "unflagplate": "Unflag A Plate (Police Only)", 171 | "plateinfo": "Run A Plate (Police Only)", 172 | "depot": "Impound With Price (Police Only)", 173 | "impound": "Impound A Vehicle (Police Only)", 174 | "paytow": "Pay Tow Driver (Police Only)", 175 | "paylawyer": "Pay Lawyer (Police, Judge Only)", 176 | "anklet": "Attach Tracking Anklet (Police Only)", 177 | "ankletlocation": "Get the location of a persons anklet", 178 | "removeanklet": "Remove Tracking Anklet (Police Only)", 179 | "drivinglicense": "Seize Drivers License (Police Only)", 180 | "takedna": "Take a DNA sample from a person (empty evidence bag needed) (Police Only)", 181 | "police_report": "Police Report", 182 | "message_sent": "Message to be sent", 183 | "civilian_call": "Civilian Call", 184 | "emergency_call": "New 911 Call" 185 | }, 186 | "progressbar": { 187 | "blood_clear": "Clearing Blood...", 188 | "bullet_casing": "Removing bullet casings..", 189 | "robbing": "Robbing Person...", 190 | "place_object": "Placing object..", 191 | "remove_object": "Removing object..", 192 | "impound": "Impounding Vehicle.." 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /locales/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "El jugador ya tiene una licencia", 4 | "error_license": "El jugador no tiene licencia", 5 | "no_camera": "La camara no existe", 6 | "blood_not_cleared": "Sangre NO limpiada", 7 | "bullet_casing_not_removed": "Casquillos NO recogidos", 8 | "none_nearby": "No tienes a nadie cerca!", 9 | "canceled": "Cancelado...", 10 | "time_higher": "El tiempo debe ser superior a 0", 11 | "amount_higher": "La cantidad debe ser mayor que 0", 12 | "vehicle_cuff": "No puedes esposar a alguien en un vehículo", 13 | "no_cuff": "No tienes esposas", 14 | "no_impound": "No hay vehículos confiscados", 15 | "no_spikestripe": "No pudes poner mas pinchos", 16 | "error_license_type": "Tipo de licencia no válido", 17 | "rank_license": "No es un rango lo suficientemente alto como para otorgar una licencia", 18 | "revoked_license": "Has revocado una licencia", 19 | "rank_revoke": "No es un rango lo suficientemente alto como para revocar una licencia", 20 | "on_duty_police_only": "Solo para la policía en servicio", 21 | "vehicle_not_flag": "Vehículo no marcado", 22 | "not_towdriver": "No es un conductor de grúa", 23 | "not_lawyer": "La persona no es abogada", 24 | "no_anklet": "Esta persona no tiene una tobillera puesta.", 25 | "have_evidence_bag": "Debes tener una bolsa de evidencia vacía contigo", 26 | "no_driver_license": "No tienes permiso de conducir", 27 | "not_cuffed_dead": "Civil no está esposado ni muerto" 28 | }, 29 | "success": { 30 | "uncuffed": "Has sido desesposado", 31 | "granted_license": "Se le ha otorgado una licencia", 32 | "grant_license": "Usted otorgó una licencia", 33 | "revoke_license": "Revocó una licencia", 34 | "tow_paid": "Te pagaron $500", 35 | "blood_clear": "Sangre despejada", 36 | "bullet_casing_removed": "Tripas de bala eliminadas ...", 37 | "anklet_taken_off": "Tu tobillera ha sido quitada.", 38 | "took_anklet_from": "Quitaste %s %s Seguidor", 39 | "put_anklet": "Has puesto una tobillera rastreadora.", 40 | "put_anklet_on": "Has puesto una tobillera a %s %s", 41 | "vehicle_flagged": "Vehiculo %s Ha sido marcado por %s", 42 | "impound_vehicle_removed": "¡Vehículo sacado del embargo!", 43 | "impounded": "Vehículo incautado.." 44 | }, 45 | "info": { 46 | "mr": "Sr.", 47 | "mrs": "Sra.", 48 | "impound_price": "Precio que el jugador paga para sacar el vehículo del embargo (puede ser 0)", 49 | "plate_number": "Matricula numero:", 50 | "flag_reason": "Motivo marcado del vehiculo", 51 | "camera_id_help": "Id de la camara", 52 | "callsign_name": "Nombre de su asignacion", 53 | "poobject_object": "Tipo de objeto para spawnear \"delete\" para eliminar", 54 | "player_id": "ID del jugador", 55 | "citizen_id": "Id Citzen del jugador", 56 | "dna_sample": "Prueba de ADN", 57 | "jail_time": "Tiempo tienen que estar en la cárcel", 58 | "jail_time_no": "El tiempo de la cárcel debe ser más alto que 0", 59 | "license_type": "Tipo de licencia (conductor/arma)", 60 | "ankle_location": "Ubicación de la tobillera", 61 | "cuff": "¡Estás esposado!", 62 | "cuffed_walk": "Estás esposado, pero puedes caminar", 63 | "vehicle_flagged": "El vehiculo %s ha sido marcado por: %s", 64 | "unflag_vehicle": "El vehiculo %s ha sido desmarcado", 65 | "tow_driver_paid": "Le pagaste al conductor de la grúa", 66 | "paid_lawyer": "Le pagaste al abogado", 67 | "vehicle_taken_depot": "Vehiculo en el deposito pague: $%s", 68 | "vehicle_seized": "Vehículo incautado", 69 | "stolen_money": "Has robado $%s", 70 | "cash_robbed": "Te han robado $%s", 71 | "driving_license_confiscated": "Su licencia de conducir ha sido confiscada", 72 | "cash_confiscated": "Tu efectivo fue confiscado", 73 | "being_searched": "Estas siendo cacheado", 74 | "cash_found": "Encontraste $%s en el civil", 75 | "sent_jail_for": "Enviaste a %s %s a prisión por %s meses", 76 | "fine_received": "You received a fine of $%s", 77 | "blip_text": "Alerta de la policia - %s", 78 | "jail_time_input": "Tiempo en prision", 79 | "submit": "Aceptar", 80 | "time_months": "Tiempo en meses", 81 | "bill": "Multa", 82 | "amount": "Cantidad", 83 | "vehicle_info": "Motor: %s % | Combustible: %s %", 84 | "evidence_stash": "Armario de pruebas | %s", 85 | "slot": "Hueco número. (1,2,3)", 86 | "current_evidence": "%s | Cajón %s", 87 | "on_duty": "[E] - Entrar de servicio", 88 | "off_duty": "[E] - Salir de servicio", 89 | "onoff_duty": "On/Fuera Servicio", 90 | "stash": "Hueco %s", 91 | "delete_spike": "[~r~E~s~] Eliminar pinchos", 92 | "close_camera": "Cerrar camara", 93 | "bullet_casing": "[~g~G~s~] Casquillo de bala %s", 94 | "casing": "Casquillo", 95 | "blood": "Sangre", 96 | "blood_text": "[~g~G~s~] Sangre %s", 97 | "fingerprint_text": "[G] Huella", 98 | "fingerprint": "Huella", 99 | "store_heli": "[E] Guardar helicoptero", 100 | "take_heli": "[E] Sacar helicpotero", 101 | "impound_veh": "[E] - Embargar vehiculo", 102 | "store_veh": "[E] - Guardar vehiculo", 103 | "armory": "Arsenal", 104 | "enter_armory": "[E] Acceder al arsenal", 105 | "finger_scan": "Escaneo de huellas", 106 | "scan_fingerprint": "[E] Escaneo de huellas", 107 | "trash": "Basura", 108 | "trash_enter": "[E] Papelera", 109 | "stash_enter": "[E] Entrar armario", 110 | "target_location": "La localizacion de %s %s Esta marcada en el mapa", 111 | "anklet_location": "Localizacion tobillera", 112 | "new_call": "Nueva llamada", 113 | "officer_down": "official %s | %s Salio de servicio", 114 | "camera_id": " - ID de Cámara: " 115 | }, 116 | "evidence": { 117 | "red_hands": "Manos rojas", 118 | "wide_pupils": "Pupilas dilatadas", 119 | "red_eyes": "Ojos rojos", 120 | "weed_smell": "Huele a cannabis", 121 | "gunpowder": "Polvora en la ropa", 122 | "chemicals": "Huele a quimicos", 123 | "heavy_breathing": "Respira fatigado", 124 | "sweat": "Suda mucho", 125 | "handbleed": "Sangre en las manos", 126 | "confused": "Confundida", 127 | "alcohol": "Huele a alcohol", 128 | "heavy_alcohol": "Huele mucho al alcohol", 129 | "agitated": "Alterado - signos de uso de metanfetamina", 130 | "serial_not_visible": "Numero de serie no visible..." 131 | }, 132 | "menu": { 133 | "garage_title": "Vehiculos policia", 134 | "close": "⬅ Cerrar menu", 135 | "impound": "Vehiculos embargados", 136 | "pol_impound": "Embargos de policia", 137 | "pol_garage": "Garage de policia", 138 | "pol_armory": "Armeria policial" 139 | }, 140 | "email": { 141 | "sender": "Agencia Central de morosos", 142 | "subject": "Cobro de deudas", 143 | "message": "Querido %s. %s,

La agencia central de morosos (ACM) cargó las multas que recibió de la policía.
Esto es $%s retirado de su cuenta.

Kind Saludos,
Mr.Richard Brown " 144 | }, 145 | "commands": { 146 | "place_spike": "Colocar pinchos (Policia solo)", 147 | "license_grant": "Otorgar una licencia a alguien", 148 | "license_revoke": "Revocar una licencia de alguien", 149 | "place_object": "Colocar/eliminar un objeto (solo policía) ", 150 | "cuff_player": "Esposar jugador (Solo policia)", 151 | "escort": "Escolta", 152 | "callsign": "Dar una asignacion", 153 | "clear_casign": "Borrar cona de asignaciones (Solo policia)", 154 | "jail_player": "Jugador de cárcel (solo policía)", 155 | "unjail_player": "Jugador sacado de la carcel (solo policía)", 156 | "clearblood": "Borrar el área de la sangre (solo la policía)", 157 | "seizecash": "Aprovechar el efectivo (solo la policía)", 158 | "softcuff": "Esposar suave (Solo policia)", 159 | "camera": "Ver cámara de seguridad (solo policía)", 160 | "flagplate": "Marcar una matricula (Solo policia)", 161 | "unflagplate": "Desmarcar una matricula (Solo polcia)", 162 | "plateinfo": "Buscar matricula (solo la policía)", 163 | "depot": "Embargar con precio (Solo la policia)", 164 | "impound": "Embargar un coche (Solo la policia)", 165 | "paytow": "Paga para remolcador (Solo la policia)", 166 | "paylawyer": "Abogado de pago (Police, Judge Only)", 167 | "anklet": "Adjuntar rastreo de la tobillera (Solo la policia)", 168 | "ankletlocation": "Obtenga la ubicación de una tobillera de personas", 169 | "removeanklet": "Eliminar la tobillera de seguimiento (Solo la policia)", 170 | "drivinglicense": "Aprovechar la licencia de conducir (Solo la policia)", 171 | "takedna": "Tome una muestra de ADN de una persona (se necesita bolsa de evidencia vacía) (Solo la policia)", 172 | "police_report": "Reporte policial", 173 | "message_sent": "Mensaje a enviar", 174 | "civilian_call": "Llamada civil", 175 | "emergency_call": "Nueva llamada al 911" 176 | }, 177 | "progressbar": { 178 | "blood_clear": "Limpiar la sangre ...", 179 | "bullet_casing": "Eliminando casquillos de bala.", 180 | "robbing": "Robando a la persona ...", 181 | "place_object": "Colocación del objeto ..", 182 | "remove_object": "Eliminar objeto ..", 183 | "impound": "Incautación de vehículo.." 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /locales/fi.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "Pelaajalla on jo lisenssi", 4 | "error_license": "Pelaajalla ei ole kyseistä lisenssiä", 5 | "no_camera": "Kameraa ei ole olemassa", 6 | "blood_not_cleared": "Verta ei puhdisteta", 7 | "bullet_casing_not_removed": "Luodin koteloita ei poisteta", 8 | "none_nearby": "Kukaan ei ole lähelläsi!", 9 | "canceled": "Peruuttui..", 10 | "time_higher": "Ajan on oltava suurempi kuin 0", 11 | "amount_higher": "Määrän on oltava suurempi kuin 0", 12 | "vehicle_cuff": "Et voi raudoittaa jotakuta ajoneuvossa", 13 | "no_cuff": "Sinulla ei ole käsirautoja", 14 | "no_impound": "Takavarikoituja ajoneuvoja ei ole", 15 | "no_spikestripe": "Ei voi enää sijoittaa piikkimattoja", 16 | "error_license_type": "Virheellinen lisenssi tyyppi", 17 | "rank_license": "Et ole tarpeeksi korkea arvo lisenssin myöntämiseen", 18 | "revoked_license": "Lisenssi on kumottu", 19 | "rank_revoke": "Et ole tarpeeksi korkea arvo lisenssin peruuttamiseen", 20 | "on_duty_police_only": "Vain päivystävälle poliisille", 21 | "vehicle_not_flag": "Ajoneuvoa ei ole merkitty", 22 | "not_towdriver": "Et ole hinausauton kuljettaja", 23 | "not_lawyer": "Pelaaja ei ole asianajaja", 24 | "no_anklet": "Tällä henkilöllä ei ole nilkkapantaa päällä.", 25 | "have_evidence_bag": "Sinulla on oltava tyhjä todistuspussi mukanasi", 26 | "no_driver_license": "Ei ajokorttia", 27 | "not_cuffed_dead": "Siviili ei ole raudoitettu tai kuollut" 28 | }, 29 | "success": { 30 | "uncuffed": "Olet nyt vapaa", 31 | "granted_license": "Sinulle on myönnetty lisenssi", 32 | "grant_license": "Olet myöntänyt lisenssin", 33 | "revoke_license": "Olet peruuttanut lisenssin", 34 | "tow_paid": "Sinulle maksettiin $500", 35 | "blood_clear": "Veri puhdistettiin", 36 | "bullet_casing_removed": "Luodin kotelot poistettu...", 37 | "anklet_taken_off": "Nilkkaseurantalaite otetaan pois.", 38 | "took_anklet_from": "Otit pois %s %s seurannan", 39 | "put_anklet": "Laitat nilkkaseurannan.", 40 | "put_anklet_on": "Laitat nilkkaseurannan päälle %s %s", 41 | "vehicle_flagged": "Ajoneuvo %s on merkitty %s", 42 | "impound_vehicle_removed": "Ajoneuvo otettu pois takavarikosta!", 43 | "impounded": "Ajoneuvo takavarikoitu" 44 | }, 45 | "info": { 46 | "mr": "Herra.", 47 | "mrs": "Rouva.", 48 | "impound_price": "Hinta, jonka pelaaja maksaa saadakseen ajoneuvon pois takavarikoinnista (voi olla 0)", 49 | "plate_number": "Rekisterikilven numero", 50 | "flag_reason": "Ajoneuvon merkitsemisen syy", 51 | "camera_id": "Kameran tunnus", 52 | "callsign_name": "Kutsumerkkisi nimi", 53 | "poobject_object": "Objektti tyyppi aseta tai \"poista\" ", 54 | "player_id": "Pelaajan tunnus", 55 | "citizen_id": "Pelaajan kansalaistunnus", 56 | "dna_sample": "DNA-näyte", 57 | "jail_time": "Aika, jonka heidän on oltava vankilassa", 58 | "jail_time_no": "Vankila-ajan on oltava yli 0", 59 | "license_type": "Lisenssi tyyppi (kuljettaja/ase)", 60 | "ankle_location": "Nilkkaseurannan sijainti", 61 | "cuff": "Olet raudoitettu!", 62 | "cuffed_walk": "Olet raudoitettu, voit silti kävellä", 63 | "vehicle_flagged": "Ajoneuvo %s on merkitty koska: %s", 64 | "unflag_vehicle": "Ajoneuvo %s ei ole enään merkitty", 65 | "tow_driver_paid": "Maksoit hinausauton kuljettajalle", 66 | "paid_lawyer": "Maksoit asianajajan", 67 | "vehicle_taken_depot": "Ajoneuvo on viety kalustoon hinta: $%s", 68 | "vehicle_seized": "Ajoneuvo takavarikoitu", 69 | "stolen_money": "Olet verastanut $%s", 70 | "cash_robbed": "Sinulta ollaan ryöstetty $%s", 71 | "driving_license_confiscated": "Ajokorttisi on takavarikoitu", 72 | "cash_confiscated": "Rahasi takavarikoitiin", 73 | "being_searched": "Sinun taskut tutkintaan", 74 | "cash_found": "Taskuista löytyi $%s", 75 | "sent_jail_for": "Sinut on laitettu vankilaan %s kuukaudeksi", 76 | "fine_received": "Olet saanut sakon $%s", 77 | "blip_text": "Poliisin hälytys - %s", 78 | "jail_time_input": "Vankila aika", 79 | "submit": "Lähetä", 80 | "time_months": "Aika kuukausina", 81 | "bill": "Lasku", 82 | "amount": "Paljonko", 83 | "vehicle_info": "Moottori: %s % | Bensa: %s %", 84 | "evidence_stash": "Todisteet | %s", 85 | "slot": "Kolikkopelin numero. (1,2,3)", 86 | "current_evidence": "%s | Laatikko %s", 87 | "on_duty": "[E] - Mene virkaajalle", 88 | "off_duty": "[E] - Mene virkavapaalle", 89 | "onoff_duty": "Päälle/Pois Virka", 90 | "stash": "Kätkeä %s", 91 | "delete_spike": "[~r~E~s~] Poista piikkimatto", 92 | "close_camera": "Sulje kamera", 93 | "bullet_casing": "[~g~G~s~] Bullet Casing %s", 94 | "casing": "Luodin kotelo", 95 | "blood": "Verta", 96 | "blood_text": "[~g~G~s~] Verta %s", 97 | "fingerprint_text": "[G] Sormenjälki", 98 | "fingerprint": "Sormenjälki", 99 | "store_heli": "[E] Säilytä helikopteri", 100 | "take_heli": "[E] Ota helikopteri", 101 | "impound_veh": "[E] - Takavarikoi Ajoneuvo", 102 | "store_veh": "[E] - Tallenna Ajoneuvo", 103 | "armory": "Asevarasto", 104 | "enter_armory": "[E] Asevarasto", 105 | "finger_scan": "Sormenjälki skanneri", 106 | "scan_fingerprint": "[E] Skannaa sormenjälki", 107 | "trash": "Roskis", 108 | "trash_enter": "[E] Roskis", 109 | "stash_enter": "[E] Pukuhuone", 110 | "target_location": "Sijainti %s %s on nyt kartassasi", 111 | "anklet_location": "Nilkkapannan sijainti", 112 | "new_call": "Uusi Soitto", 113 | "officer_down": "Virkamies %s | %s Kuoli" 114 | }, 115 | "evidence": { 116 | "red_hands": "Punaiset kädet", 117 | "wide_pupils": "Leveät pupillit", 118 | "red_eyes": "Punaiset silmät", 119 | "weed_smell": "Kannabiksen haju", 120 | "gunpowder": "Ruuti vaatteissa", 121 | "chemicals": "Haisee kemikaaleilta", 122 | "heavy_breathing": "Hengittää syvästi", 123 | "sweat": "Hikoilee paljon", 124 | "handbleed": "Verta käsissä", 125 | "confused": "Ihmettynyt", 126 | "alcohol": "Haisee alkoholilta", 127 | "heavy_alcohol": "Haisee paljon alkoholilta", 128 | "agitated": "Metafetamiinin käyttö", 129 | "serial_not_visible": "Sarjanumero ei näy..." 130 | }, 131 | "menu": { 132 | "garage_title": "Virkamiesten Autotalli", 133 | "close": "⬅ Sulje valikko", 134 | "impound": "Takavarikoidut ajoneuvot", 135 | "pol_impound": "Poliisin Takavarikko", 136 | "pol_garage": "Poliisin Autotalli", 137 | "pol_armory": "Poliisin Asevarasto" 138 | }, 139 | "email": { 140 | "sender": "Oikeudellinen perintätoimisto", 141 | "subject": "Perintä", 142 | "message": "%s. %s,

Central Judicial Collection Agency (CJCA) veloitti poliisilta saamasi sakot.
on $%s nostettu tililtäsi.


Mr. I.K. Graai" 143 | }, 144 | "commands": { 145 | "place_spike": "Aseta piikkilanka (vain poliisi)", 146 | "license_grant": "Lisenssin myöntäminen", 147 | "license_revoke": "Lisenssin peruuttaminen", 148 | "place_object": "Objektin sijoittaminen/poistaminen (vain poliisi)", 149 | "cuff_player": "Raudoita pelaaja (vain poliisi)", 150 | "escort": "Raahaa pelaaja", 151 | "callsign": "Anna itsellesi kutsumanimike", 152 | "clear_casign": "Selkeä koteloalue (vain poliisi)", 153 | "jail_player": "Lähetä pelaaja vankilaan (vain poliisi)", 154 | "unjail_player": "Vapauta pelaaja vankilasta (vain poliisi)", 155 | "clearblood": "Tyhjennä verialue (vain poliisi)", 156 | "seizecash": "Takavarikoi käteistä (vain poliisi)", 157 | "softcuff": "Pehmeä raudoitus (vain poliisi)", 158 | "camera": "Valvontakameran tarkastaminen (vain poliisi)", 159 | "flagplate": "Merkitse levy (vain poliisi)", 160 | "unflagplate": "Poista rekisterin merkintä (vain poliisi)", 161 | "plateinfo": "Tarkasta rekisteri (vain poliisi)", 162 | "depot": "Takavarikoimisen hinta (vain poliisi)", 163 | "impound": "Takavarikoi ajoneuvo (vain poliisi)", 164 | "paytow": "Maksa hinauskuljettaja (vain poliisi)", 165 | "paylawyer": "Maksa (tuomarille, vain poliisi)", 166 | "anklet": "Liitä nilkkapanta (vain poliisi)", 167 | "ankletlocation": "Hanki henkilön nilkapannan sijainti", 168 | "removeanklet": "Poista nilkkapanta (vain poliisi)", 169 | "drivinglicense": "Takavarikoi ajokortti (vain poliisi)", 170 | "takedna": "Ota DNA-näyte henkilöltä (tarvitaan tyhjä todistepussi) (vain poliisi)", 171 | "police_report": "Poliisin raportti", 172 | "message_sent": "Lähetettävä viesti", 173 | "civilian_call": "Siviilipuhelu", 174 | "emergency_call": "Uusi 112 hälytys" 175 | }, 176 | "progressbar": { 177 | "blood_clear": "Veren puhdistaminen...", 178 | "bullet_casing": "Luodin koteloiden poistaminen..", 179 | "robbing": "Ryöstää pelaajaa...", 180 | "place_object": "Laitetaan objektia..", 181 | "remove_object": "Poistetaan objektia..", 182 | "impound": "Takavarikoidaan ajoneuvoa.." 183 | } 184 | } 185 | -------------------------------------------------------------------------------- /locales/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "La personne a déjà un Permis.", 4 | "error_license": "La personne n'a pas de Permis.", 5 | "no_camera": "Cette caméra n'existe pas.", 6 | "blood_not_cleared": "Le sang n'a PAS été nettoyé.", 7 | "bullet_casing_not_removed": "Les douilles n'ont PAS été retirée.", 8 | "none_nearby": "Personne n'est proche!", 9 | "canceled": "Annulé..", 10 | "time_higher": "Le Temps doit être supérieur à 0.", 11 | "amount_higher": "Le Montant doit être supérieur à 0.", 12 | "vehicle_cuff": "Vous ne pouvez pas menotter quelqu'un qui est dans un véhicule.", 13 | "no_cuff": "Vous n'avez pas de menottes.", 14 | "no_impound": "Il n'y a pas de véhicule en fourrière.", 15 | "no_spikestripe": "Impossible de placer plus de herses.", 16 | "error_license_type": "Type de Permis invalide.", 17 | "rank_license": "Vous n'êtes pas suffisament haut-gradé pour donner un Permis.", 18 | "revoked_license": "Une license vous à été révoquée.", 19 | "rank_revoke": "Vous n'êtes pas suffisament haut-gradé pour révoquer un Permis.", 20 | "on_duty_police_only": "Reservé aux policiers en service.", 21 | "vehicle_not_flag": "véhicule non-signalé.", 22 | "not_towdriver": "Ce n'est pas un dépanneur.", 23 | "not_lawyer": "Ce n'est pas un Avocat.", 24 | "no_anklet": "Cette personne n'a pas de Bracelet éléctronique.", 25 | "have_evidence_bag": "Vous devez avoir un sac de preuve vide sur vous.", 26 | "no_driver_license": "Pas de permis de conduire", 27 | "not_cuffed_dead": "Le civil n'est pas menotté ou mort." 28 | }, 29 | "success": { 30 | "uncuffed": "Vous avez été démenotté!", 31 | "granted_license": "Ont vous a accordé un Permis!", 32 | "grant_license": "Vous avez accordé un Pemis.", 33 | "revoke_license": "Vous avez révoqué un Permis.", 34 | "tow_paid": "Vous avez été payé $500 !", 35 | "blood_clear": "Le sang à été nettoyé.", 36 | "bullet_casing_removed": "Douille retirée...", 37 | "anklet_taken_off": "Votre bracelet éléctronique à été retiré.", 38 | "took_anklet_from": "Vous avez retiré le bracelet de %s %s.", 39 | "put_anklet": "Vous avez mis un bracelet éléctronique.", 40 | "put_anklet_on": "Vous avez mis un bracelet éléctronique sur %s %s.", 41 | "vehicle_flagged": "Vehicule %s à été signalé pour %s", 42 | "impound_vehicle_removed": "Le véhicule à été sortis de la fourrière!", 43 | "impounded": "Vehicule mis en fourrière" 44 | }, 45 | "info": { 46 | "mr": "Mr.", 47 | "mrs": "Mme.", 48 | "impound_price": "Prix que la personne doit payé pour sortir le véhicule de fourrière (Peut être 0)", 49 | "plate_number": "Numéro de plaque", 50 | "flag_reason": "Raison du signalement de véhicule", 51 | "camera_id": "ID de la caméra", 52 | "callsign_name": "Votre Matricule", 53 | "poobject_object": "Type d'objet a spawn 'supprimer' à supprimer", 54 | "player_id": "ID du joueur", 55 | "citizen_id": "ID citoyen du joueur", 56 | "dna_sample": "Echantillon ADN", 57 | "jail_time_input": "Temps que la personne doit passer en prison", 58 | "jail_time_no": "Le temps de prison doit être supérieur a 0", 59 | "license_type": "Type de permis (driver/weapon)", 60 | "ankle_location": "Localisation du Bracelet éléctronique", 61 | "cuff": "Vous êtes menotté!", 62 | "cuffed_walk": "Vous êtes menotté, Mais vous pouvez marché", 63 | "vehicle_flagged": "Vehicule %s est signalé pour: %s", 64 | "unflag_vehicle": "Vehicule %s n'est plus signalé", 65 | "tow_driver_paid": "Vous avez payé le dépanneur", 66 | "paid_lawyer": "Vous avez payé l'Avocat", 67 | "vehicle_taken_depot": "Le véhicule à été mis a la fourrière pour $%s", 68 | "vehicle_seized": "Véhicule saisi", 69 | "stolen_money": "Vous avez volé $%s", 70 | "cash_robbed": "Vous avez été dépouillé de $%s", 71 | "driving_license_confiscated": "Votre Permis de conduire à été suspendu !", 72 | "cash_confiscated": "Votre argent à été saisi", 73 | "being_searched": "Vous êtes fouillé", 74 | "cash_found": "Vous avez trouvé $%s sur le civil.", 75 | "sent_jail_for": "Vous avez envoyé la personne en prison pour %s mois", 76 | "fine_received": "Vous avez reçu une amende de $%s", 77 | "blip_text": "Alerte 911 - %s", 78 | "jail_time": "Temps de prison", 79 | "submit": "Soummettre", 80 | "time_months": "Temps en mois", 81 | "bill": "Amender", 82 | "amount": "Montant", 83 | "vehicle_info": "Moteur: %s % | Essence: %s %", 84 | "evidence_stash": "Coffre des Preuves | %s", 85 | "slot": "Emplacement N° (1,2,3)", 86 | "current_evidence": "%s | Tirroir %s", 87 | "on_duty": "[~g~E~s~] - Prendre son service", 88 | "off_duty": "[~r~E~s~] - Quitter son service", 89 | "onoff_duty": "On/Off Service", 90 | "stash": "Coffre %s", 91 | "delete_spike": "[~r~E~s~] Prendre la Herse", 92 | "close_camera": "Fermer la caméra", 93 | "bullet_casing": "[~g~G~s~] Douilles %s", 94 | "casing": "Douille", 95 | "blood": "Sang", 96 | "blood_text": "[~g~G~s~] Sang %s", 97 | "fingerprint_text": "[~g~G~s~] Empreinte", 98 | "fingerprint": "Empreinte digitale", 99 | "store_heli": "[~g~E~s~] Ranger l'hélicoptère", 100 | "take_heli": "[~g~E~s~] Prendre l'hélicoptère", 101 | "impound_veh": "[~g~E~s~] - Fourrière", 102 | "store_veh": "[~g~E~s~] - Ranger le véhicule", 103 | "armory": "Armurerie", 104 | "enter_armory": "[~g~E~s~] Armurerie", 105 | "finger_scan": "Scan d'Empreinte Digitale", 106 | "scan_fingerprint": "[~g~E~s~] Scan d'Empreinte Digitale", 107 | "trash": "Poubelle", 108 | "trash_enter": "[~g~E~s~] Poubelle", 109 | "stash_enter": "[~g~E~s~] Entrer dans le Casier", 110 | "target_location": "La position de %s %s à été marqué sur votre carte.", 111 | "anklet_location": "Position du bracelet", 112 | "new_call": "Nouvel appel", 113 | "officer_down": "Officier %s | %s Au sol" 114 | }, 115 | "evidence": { 116 | "red_hands": "Mains rouges", 117 | "wide_pupils": "Pupilles dilatées", 118 | "red_eyes": "Yeux rouges", 119 | "weed_smell": "Sent la weed", 120 | "gunpowder": "Poudre à cannon sur les vêtements", 121 | "chemicals": "Sent les produits chimiques", 122 | "heavy_breathing": "Respire fortement", 123 | "sweat": "Transpire beaucoup", 124 | "handbleed": "Mains ensanglantées", 125 | "confused": "Confus", 126 | "alcohol": "Sent l'alcool", 127 | "heavy_alcohol": "Sent beaucoup l'alcool", 128 | "agitated": "Agité - Signe de consomation de Meth", 129 | "serial_not_visible": "Numéro de série invisible..." 130 | }, 131 | "menu": { 132 | "garage_title": "Véhicule de police", 133 | "close": "⬅ Fermer le menu", 134 | "impound": "Fourrière", 135 | "pol_impound": "Fourrière de Police", 136 | "pol_garage": "Garage de Police", 137 | "pol_armory": "Armurerie" 138 | }, 139 | "email": { 140 | "sender": "Agence Centrale de Collection Judiciare", 141 | "subject": "Collection de dette", 142 | "message": "Cher(e) %s. %s,

L'Agence Centrale de Collection judiciaire (ACCJ) a facturé les amendes que vous avez reçu de la police.
Il y à $%s qui ont été retiré de votre compte.

Cordialement,
Mr. I.K. Graai" 143 | }, 144 | "commands": { 145 | "place_spike": "Poser une herse (Police Only)", 146 | "license_grant": "Donner un Permis a quelqu'un", 147 | "license_revoke": "Révoqué un Permis", 148 | "place_object": "Placer/Supprimer un objet (Police Only)", 149 | "cuff_player": "Menotter un joueur (Police Only)", 150 | "escort": "Escorter un joueur", 151 | "callsign": "Donner vous un matricule", 152 | "clear_casign": "Nettoyer les douilles de la zone (Police Only)", 153 | "jail_player": "Mettre un joueur un prison (Police Only)", 154 | "unjail_player": "Sortir un joueur de prison (Police Only)", 155 | "clearblood": "Nettoie la zone du sang (Police Only)", 156 | "seizecash": "Saisir du Cash (Police Only)", 157 | "softcuff": "Menotter calmement (Police Only)", 158 | "camera": "Voir les caméras de sécurité (Police Only)", 159 | "flagplate": "Signaler une plaque (Police Only)", 160 | "unflagplate": "Retirer un signalement de plaque (Police Only)", 161 | "plateinfo": "Verifier une plaque (Police Only)", 162 | "depot": "Mettre en fourrière avec un prix (Police Only)", 163 | "impound": "Mettre en fourrière (Police Only)", 164 | "paytow": "Payer le dépanneur (Police Only)", 165 | "paylawyer": "Payer l'avocat (Police, Judge Only)", 166 | "anklet": "Attacher un bracelet éléctronique (Police Only)", 167 | "ankletlocation": "Recevoir la position d'un bracelet éléctronique", 168 | "removeanklet": "Retirer un bracelet éléctronique (Police Only)", 169 | "drivinglicense": "Saisir le permis de conduire (Police Only)", 170 | "takedna": "Prendre un échantillon ADN de quelqu'un (Sac de preuve vide requis) (Police Only)", 171 | "police_report": "Rapport de police", 172 | "message_sent": "Message a envoyer", 173 | "civilian_call": "Appel civil", 174 | "emergency_call": "Nouvel appel 911" 175 | }, 176 | "progressbar": { 177 | "blood_clear": "Nettoie le sang...", 178 | "bullet_casing": "Retire les Douilles..", 179 | "robbing": "Dépouille la personne...", 180 | "place_object": "Place un objet..", 181 | "remove_object": "Retire un objet..", 182 | "impound": "Met le véhicule en fourrière.." 183 | } 184 | } 185 | -------------------------------------------------------------------------------- /locales/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "Il giocatore ha già una licenza", 4 | "error_license": "Il giocatore non ha quella licenza", 5 | "no_camera": "La telecamera non esiste", 6 | "blood_not_cleared": "Sangue NON pulito", 7 | "bullet_casing_not_removed": "Traccie di Proiettile NON rimosse", 8 | "none_nearby": "Nessuno vicino!", 9 | "canceled": "Cancellato.", 10 | "time_higher": "Il tempo deve essere maggiore di 0", 11 | "amount_higher": "La quantità deve essere maggiore di 0", 12 | "vehicle_cuff": "Non puoi arrestare qualcuno in un veicolo", 13 | "no_cuff": "Non hai le manette con te", 14 | "no_impound": "Non ci sono veicoli sequestrati", 15 | "no_spikestripe": "Non puoi piazzare più strisce chiodate", 16 | "error_license_type": "Tipo di licenza non valida", 17 | "rank_license": "Non sei abbastanza alto in grado per dare una licenza", 18 | "revoked_license": "Ti è stata rimossa una licenza", 19 | "rank_revoke": "Non sei abbastanza alto in grado per rimuovere una licenza", 20 | "on_duty_police_only": "Solo per polizia in servizio", 21 | "vehicle_not_flag": "Veicolo non segnalato", 22 | "not_towdriver": "Non un guidatore di carro attrezzi", 23 | "not_lawyer": "La persona non è un avvocato", 24 | "no_anklet": "Questa persona non ha una cavigliera.", 25 | "have_evidence_bag": "Devi avere una busta per le prove vuota con te", 26 | "no_driver_license": "Nessun licenza di guida", 27 | "not_cuffed_dead": "Il cittadino non è arrestato o morto" 28 | }, 29 | "success": { 30 | "uncuffed": "Sei stato smanettato", 31 | "granted_license": "Ti hanno concesso una licenza", 32 | "grant_license": "Hai concesso una licenza", 33 | "revoke_license": "Hai ritirato una licenza", 34 | "tow_paid": "Hai pagato $500", 35 | "blood_clear": "Sangue Pulito", 36 | "bullet_casing_removed": "Tracce di Proiettile rimosse...", 37 | "anklet_taken_off": "La tua cavigliera è stata rimossa.", 38 | "took_anklet_from": "Hai tolto a %s %s la cavigliera", 39 | "put_anklet": "Hai messo su una cavigliera.", 40 | "put_anklet_on": "Hai messo una cavigliera su %s %s", 41 | "vehicle_flagged": "Veicolo %s segnalato per %s", 42 | "impound_vehicle_removed": "Veicolo dissequestrato!" 43 | }, 44 | "info": { 45 | "mr": "Sr.", 46 | "mrs": "Sr.ina", 47 | "impound_price": "Prezzo che il giocatore deve pagare per dissequestrare il veicolo (può essere 0)", 48 | "plate_number": "Numero Targa", 49 | "flag_reason": "Motivo per segnalare il veicolo", 50 | "camera_id": "Camera ID", 51 | "callsign_name": "Nome del tuo soprannome", 52 | "poobject_object": "Tipo di oggetto da spawnare o \"delete\" per eliminare", 53 | "player_id": "ID del giocatore", 54 | "citizen_id": "ID Cittadino del giocatore", 55 | "dna_sample": "Campione di DNA", 56 | "jail_time": "Tempo che deve restare in prigione", 57 | "jail_time_no": "Il tempo di detenzione deve essere maggiore di 0", 58 | "license_type": "Tipo di licenza (driver/weapon)", 59 | "ankle_location": "Posizione Cavigliera", 60 | "cuff": "Sei ammanettato!", 61 | "cuffed_walk": "Sei ammanettato, ma puoi camminare.", 62 | "vehicle_flagged": "Il veicolo %s è segnalato per: %s", 63 | "unflag_vehicle": "Il veicolo %s non è segnalato", 64 | "tow_driver_paid": "Hai pagato il carro attrezzi", 65 | "paid_lawyer": "Hai pagato un avvocato", 66 | "vehicle_taken_depot": "Veicolo preso dal deposito per $%s", 67 | "vehicle_seized": "Veicolo sequestrato", 68 | "stolen_money": "Hai rubato $%s", 69 | "cash_robbed": "Sei stato derubato di $%s", 70 | "driving_license_confiscated": "La tua licenza di guida è stata confiscata", 71 | "cash_confiscated": "Il tuo denaro è stato confiscato", 72 | "being_searched": "Ti stanno perquisendo", 73 | "cash_found": "Trovati $%s sul civile", 74 | "sent_jail_for": "Hai mandato la persona in prigione per %s mesi", 75 | "fine_received": "Hai ricevuto una multa di $%s", 76 | "blip_text": "Allerta Polizia - %s", 77 | "jail_time_input": "Tempo Carcere", 78 | "submit": "Invia", 79 | "time_months": "Tempo in Mesi", 80 | "bill": "Fattura", 81 | "amount": "Quantità", 82 | "vehicle_info": "Motore: %s % | Carburante: %s %", 83 | "evidence_stash": "Magazzino Prove | %s", 84 | "slot": "Slot no. (1,2,3)", 85 | "current_evidence": "%s | Cassetto %s", 86 | "on_duty": "[~g~E~s~] - Vai in servizio", 87 | "off_duty": "[~r~E~s~] - Vai fuori servizio", 88 | "onoff_duty": "Entra/Fuori Servizio", 89 | "stash": "Magazzino %s", 90 | "delete_spike": "[~r~E~s~] Rimuovi Strice Chiodate", 91 | "close_camera": "Chiudi Camera", 92 | "bullet_casing": "[~g~G~s~] Traccia di Proiettile %s", 93 | "casing": "Traccia di proiettile", 94 | "blood": "Sangue", 95 | "blood_text": "[~g~G~s~] Sangue %s", 96 | "fingerprint_text": "[~g~G~s~] Impronta", 97 | "fingerprint": "Impronta", 98 | "store_heli": "[~g~E~s~] Deposita Elicottero", 99 | "take_heli": "[~g~E~s~] Prendi Elicottero", 100 | "impound_veh": "[~g~E~s~] - Sequestra Veicolo", 101 | "store_veh": "[~g~E~s~] - Deposita Veicolo", 102 | "armory": "Armeria", 103 | "enter_armory": "[~g~E~s~] Armeria", 104 | "finger_scan": "Scansione Impronte Digitali.", 105 | "scan_fingerprint": "[~g~E~s~] Scansiona Impronta", 106 | "trash": "Cestino", 107 | "trash_enter": "[~g~E~s~] Cestino", 108 | "stash_enter": "[~g~E~s~] Entra Armadietto", 109 | "target_location": "La posizione di ${firstname} ${lastname} è marcata sulla mappa", 110 | "anklet_location": "Posizione cavigliera", 111 | "new_call": "Nuova chiamata" 112 | }, 113 | "evidence": { 114 | "red_hands": "Mani Rosse", 115 | "wide_pupils": "Pupille Dilatate", 116 | "red_eyes": "Occhi Rossi", 117 | "weed_smell": "Odore Di Erba", 118 | "gunpowder": "Polvere Da Sparo Nei Vestiti", 119 | "chemicals": "Odora Di Chimico", 120 | "heavy_breathing": "Respiro Affannato", 121 | "sweat": "Suda Un Sacco", 122 | "handbleed": "Sangue Sulle Mani", 123 | "confused": "Confuso", 124 | "alcohol": "Odora Come Alcool", 125 | "heavy_alcohol": "Odore Molto Simile All\"Alcool", 126 | "agitated": "Agitato - Segno Di Uso Di Met", 127 | "serial_not_visible": "Numero seriale non visibile..." 128 | }, 129 | "menu": { 130 | "garage_title": "Veicoli Polizia", 131 | "close": "⬅ Chiudi Menu", 132 | "impound": "Veicoli Sequestrati", 133 | "pol_impound": "Sequestro Polizia", 134 | "pol_garage": "Garage Polizia", 135 | "pol_armory": "Armeria Polizia" 136 | }, 137 | "email": { 138 | "sender": "Agenzia Giudiziaria Centrale", 139 | "subject": "Collezzione Debiti", 140 | "message": "Caro %s. %s,

L\"Agenzia Giudiziaria Centrale (AGC) ha addebitato le multe che hai ricevuto dalla polizia.
Sono stati ritirati $%s dal tuo account.

Saluti" 141 | }, 142 | "commands": { 143 | "place_spike": "Piazza strisce chiodate (Solo Polizia)", 144 | "license_grant": "Dai licenze a qualcuno", 145 | "license_revoke": "Ritira licenza a qualcuno", 146 | "place_object": "Piazza/Elimina un oggetto (Solo Polizia)", 147 | "cuff_player": "Arresta giocatore (Solo Polizia)", 148 | "escort": "Scorta giocatore", 149 | "callsign": "Datti un soprannome", 150 | "clear_casign": "Pulisci area dalle prove (Solo Polizia)", 151 | "jail_player": "Arresta giocatore (Solo Polizia)", 152 | "unjail_player": "Scarcera giocatore (Solo Polizia)", 153 | "clearblood": "Pulisci area dal sangue (Solo Polizia)", 154 | "seizecash": "Sequestra denaro (Solo Polizia)", 155 | "softcuff": "Arresto morbido (Solo Polizia)", 156 | "camera": "Guarda telecamere di sicurezza (Solo Polizia)", 157 | "flagplate": "Segnala una targa (Solo Polizia)", 158 | "unflagplate": "Ripulisci una targa (Solo Polizia)", 159 | "plateinfo": "Controlla targa (Solo Polizia)", 160 | "depot": "Sequesta con prezzo (Solo Polizia)", 161 | "impound": "Sequestra un veicolo (Solo Polizia)", 162 | "paytow": "Paga carro attrezzi (Solo Polizia)", 163 | "paylawyer": "Paga avvocato (Solo Polizia, Giudice)", 164 | "anklet": "Attacca cavigliera (Solo Polizia)", 165 | "ankletlocation": "Prendi posizione della cavigliera di una persona", 166 | "removeanklet": "Rimuovi Cavigliera (Solo Polizia)", 167 | "drivinglicense": "Sequestra licenza di guida (Solo Polizia)", 168 | "takedna": "Prendi campione di DNA da una persona (sacchetto delle prove vuoto necessario) (Solo Polizia)", 169 | "police_report": "Report Polizia", 170 | "message_sent": "Messaggio da inviare", 171 | "civilian_call": "Chiamata Cittadino", 172 | "emergency_call": "Nuova chiamata 911" 173 | }, 174 | "progressbar": { 175 | "blood_clear": "Pulendo sangue...", 176 | "bullet_casing": "Rimuovendo bossolo...", 177 | "robbing": "Rapinando persona...", 178 | "place_object": "Piazzando oggetto...", 179 | "remove_object": "Rimuovendo oggetto..." 180 | } 181 | } 182 | -------------------------------------------------------------------------------- /locales/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "in_vehicle": "Nie możesz tego zrobić w pojeździe", 4 | "license_already": "Gracz już ma to pozwolenie", 5 | "error_license": "Gracz nie ma tego pozwolenia", 6 | "no_camera": "Kamera nie istnieje", 7 | "blood_not_cleared": "Krew NIE została usunięta", 8 | "bullet_casing_not_removed": "Łuski NIE zostały usunięte", 9 | "none_nearby": "Nikogo nie ma w pobliżu!", 10 | "canceled": "Anulowano..", 11 | "time_higher": "Czas musi być większy niż 0", 12 | "amount_higher": "Kwota musi być większa niż 0", 13 | "vehicle_cuff": "Nie możesz zakładać kajdanek komuś w pojeździe", 14 | "no_cuff": "Nie masz przy sobie kajdanek", 15 | "no_impound": "Nie ma pojazdów w areszcie", 16 | "no_spikestripe": "Nie można już umieścić kolczatek", 17 | "error_license_type": "Nieprawidłowy typ pozwolenia", 18 | "rank_license": "Nie masz wystarczająco wysokiej rangi, aby przyznać pozwolenie", 19 | "revoked_license": "Twoje pozwolenie zostało cofnięte", 20 | "rank_revoke": "Nie masz wystarczająco wysokiej rangi, aby cofnąć pozwolenie", 21 | "on_duty_police_only": "Tylko dla policji na służbie", 22 | "vehicle_not_flag": "Pojazd nie jest oznaczony", 23 | "vehicle_flag": "Pojazd jest już oznaczony", 24 | "not_towdriver": "Nie jesteś kierowcą lawety", 25 | "not_lawyer": "Ta osoba nie jest prawnikiem", 26 | "no_anklet": "Ta osoba nie ma nadajnika na kostce", 27 | "have_evidence_bag": "Musisz mieć przy sobie pustą torbę na dowody", 28 | "no_driver_license": "Brak prawa jazdy", 29 | "not_cuffed_dead": "Obywatel nie jest zakuty lub martwy", 30 | "no_rob": "Ta osoba nie jest zakuta, martwa ani nie ma rąk w górze" 31 | }, 32 | "success": { 33 | "uncuffed": "Odkuto", 34 | "granted_license": "Otrzymano pozwolenie", 35 | "grant_license": "Przyznano pozwolenie", 36 | "revoke_license": "Cofnięto pozwolenie", 37 | "tow_paid": "Otrzymano 500 $", 38 | "blood_clear": "Krew została usunięta", 39 | "bullet_casing_removed": "Łuski zostały usunięte...", 40 | "anklet_taken_off": "Zdejmowano Ci nadajnik na kostce.", 41 | "took_anklet_from": "Zdjęto nadajnik z %s %s", 42 | "put_anklet": "Założono nadajnik na kostkę.", 43 | "put_anklet_on": "Założono nadajnik na kostkę %s %s", 44 | "vehicle_flagged": "Pojazd %s został oznaczony z powodu: %s", 45 | "impound_vehicle_removed": "Pojazd został odebrany z aresztu!", 46 | "impounded": "Pojazd został aresztowany", 47 | "escapedcuff": "Wymknięto się z kajdanek!" 48 | }, 49 | "info": { 50 | "mr": "Pan", 51 | "mrs": "Pani", 52 | "impound_price": "Cena, jaką gracz płaci za odbiór pojazdu z aresztu (może być 0)", 53 | "plate_number": "Numer rejestracyjny", 54 | "flag_reason": "Powód oznaczenia pojazdu", 55 | "camera_id_help": "ID kamery", 56 | "callsign_name": "Nazwa twojego znaku rozpoznawczego", 57 | "poobject_object": "Typ obiektu do postawienia lub \"delete\", aby usunąć", 58 | "player_id": "ID gracza", 59 | "citizen_id": "ID obywatela gracza", 60 | "dna_sample": "Próbka DNA", 61 | "jail_time": "Czas, jaki musi spędzić w więzieniu", 62 | "jail_time_no": "Czas w więzieniu musi być większy niż 0", 63 | "license_type": "Typ pozwolenia (prowadzenie pojazdów/broń)", 64 | "ankle_location": "Lokalizacja nadajnika na kostce", 65 | "cuff": "Jesteś zakuty!", 66 | "cuffed_walk": "Jesteś zakuty, ale możesz chodzić", 67 | "vehicle_flagged": "Pojazd %s jest oznaczony z powodu: %s", 68 | "unflag_vehicle": "Pojazd %s został odznaczony", 69 | "tow_driver_paid": "Zapłacono kierowcy lawety", 70 | "paid_lawyer": "Zapłacono prawnikowi", 71 | "vehicle_taken_depot": "Pojazd zabrany do depozytu za $%s", 72 | "vehicle_seized": "Pojazd zajęty", 73 | "stolen_money": "Skradziono $%s", 74 | "cash_robbed": "Skradziono ci $%s", 75 | "driving_license_confiscated": "Twoje prawo jazdy zostało skonfiskowane", 76 | "cash_confiscated": "Twoje pieniądze zostały skonfiskowane", 77 | "searched_success": "Przeprowadzono rewizję tej osoby", 78 | "being_searched": "Jesteś przeszukiwany", 79 | "cash_found": "Znaleziono $%s u obywatela", 80 | "sent_jail_for": "Wysłano osobę do więzienia na %s miesięcy", 81 | "fine_received": "Otrzymano mandat w wysokości $%s", 82 | "blip_text": "Alarm policyjny - %s", 83 | "jail_time_input": "Czas w więzieniu", 84 | "submit": "Zatwierdź", 85 | "time_months": "Czas w miesiącach", 86 | "bill": "Rachunek", 87 | "amount": "Kwota", 88 | "vehicle_info": "Silnik: %s % | Paliwo: %s %", 89 | "evidence_stash": "Skrytka na dowody | %s", 90 | "slot": "Numer slotu (1,2,3)", 91 | "current_evidence": "%s | Szuflada %s", 92 | "on_duty": "[E] - Zgłoś się na służbę", 93 | "off_duty": "[E] - Zakończ służbę", 94 | "onoff_duty": "Na służbie/Zakończ służbę", 95 | "stash": "Skrytka %s", 96 | "delete_spike": "[E] Usuń kolczatkę", 97 | "close_camera": "Zamknij kamerę", 98 | "bullet_casing": "[~g~G~s~] Łuska %s", 99 | "casing": "Łuska", 100 | "blood": "Krew", 101 | "blood_text": "[~g~G~s~] Krew %s", 102 | "fingerprint_text": "[G] Odcisk palca", 103 | "fingerprint": "Odcisk palca", 104 | "store_heli": "[E] Odstaw śmigłowiec", 105 | "take_heli": "[E] Weź śmigłowiec", 106 | "impound_veh": "[E] - Aresztuj pojazd", 107 | "store_veh": "[E] - Odstaw pojazd", 108 | "grab_veh": "[E] - Garaż pojazdów", 109 | "armory": "Zbrojownia", 110 | "enter_armory": "[E] Zbrojownia", 111 | "finger_scan": "Skanowanie odcisku palca", 112 | "scan_fingerprint": "[E] Skanuj odcisk palca", 113 | "trash": "Kosz", 114 | "trash_enter": "[E] Kosz na śmieci", 115 | "stash_enter": "[E] Wejdź do szafki", 116 | "evidence": "[E] - Dowody", 117 | "target_location": "Lokalizacja %s %s została zaznaczona na mapie", 118 | "anklet_location": "Lokalizacja nadajnika na kostce", 119 | "new_call": "Nowe zgłoszenie", 120 | "officer_down": "Oficer %s | %s Ranny", 121 | "plate_triggered": "Pojazd o numerze rejestracyjnym %s został oznaczony na %s przez radar #%s", 122 | "plate_triggered_blip": "Pojazd oznaczony przez radar #%s", 123 | "camera_id": " - ID kamery: " 124 | }, 125 | "evidence": { 126 | "red_hands": "Czerwone dłonie", 127 | "wide_pupils": "Rozszerzone źrenice", 128 | "red_eyes": "Czerwone oczy", 129 | "weed_smell": "Pachnie marihuaną", 130 | "gunpowder": "Proch strzelniczy na ubraniu", 131 | "chemicals": "Pachnie chemikaliami", 132 | "heavy_breathing": "Ciężki oddech", 133 | "sweat": "Silne pocenie się", 134 | "handbleed": "Krew na dłoniach", 135 | "confused": "Zdezorientowanie", 136 | "alcohol": "Pachnie alkoholem", 137 | "heavy_alcohol": "Bardzo wyraźnie pachnie alkoholem", 138 | "agitated": "Pobudzenie – oznaki użycia metamfetaminy", 139 | "serial_not_visible": "Numer seryjny niewidoczny..." 140 | }, 141 | "menu": { 142 | "garage_title": "Pojazdy policyjne", 143 | "close": "⬅ Zamknij menu", 144 | "impound": "Pojazdy w areszcie", 145 | "pol_impound": "Policyjny areszt", 146 | "pol_garage": "Policyjny garaż", 147 | "pol_armory": "Policyjna zbrojownia" 148 | }, 149 | "email": { 150 | "sender": "Centralna Agencja Ścigania Sądowego", 151 | "subject": "Windykacja długów", 152 | "message": "Drogi %s. %s,

Centralna Agencja Ścigania Sądowego (CAŚS) obciążyła Cię mandatami otrzymanymi od policji.
Z Twojego konta zostało pobrane $%s.

Z poważaniem,
Pan I.K. Graai" 153 | }, 154 | "commands": { 155 | "place_spike": "Umieść kolczatkę (tylko policja)", 156 | "license_grant": "Przyznaj komuś pozwolenie", 157 | "license_revoke": "Cofnij komuś pozwolenie", 158 | "place_object": "Umieść/Usuń obiekt (tylko policja)", 159 | "cuff_player": "Zakuj gracza (tylko policja)", 160 | "escort": "Eskortuj gracza", 161 | "callsign": "Nadaj sobie znak rozpoznawczy", 162 | "clear_casign": "Oczyść teren z łusek (tylko policja)", 163 | "jail_player": "Wsadź gracza do więzienia (tylko policja)", 164 | "unjail_player": "Wypuść gracza z więzienia (tylko policja)", 165 | "clearblood": "Oczyść teren z krwi (tylko policja)", 166 | "seizecash": "Skonfiskuj gotówkę (tylko policja)", 167 | "softcuff": "Miękkie kajdanki (tylko policja)", 168 | "camera": "Podgląd kamery bezpieczeństwa (tylko policja)", 169 | "flagplate": "Oznacz pojazd (tylko policja)", 170 | "unflagplate": "Odznacz pojazd (tylko policja)", 171 | "plateinfo": "Sprawdź numer rejestracyjny (tylko policja)", 172 | "depot": "Aresztuj pojazd z opłatą (tylko policja)", 173 | "impound": "Aresztuj pojazd (tylko policja)", 174 | "paytow": "Zapłać kierowcy lawety (tylko policja)", 175 | "paylawyer": "Zapłać prawnikowi (tylko policja, sędzia)", 176 | "anklet": "Załóż nadajnik na kostkę (tylko policja)", 177 | "ankletlocation": "Uzyskaj lokalizację nadajnika na kostce", 178 | "removeanklet": "Zdejmij nadajnik z kostki (tylko policja)", 179 | "drivinglicense": "Skonfiskuj prawo jazdy (tylko policja)", 180 | "takedna": "Pobierz próbkę DNA od osoby (wymagana pusta torba na dowody) (tylko policja)", 181 | "police_report": "Raport policyjny", 182 | "message_sent": "Wiadomość do wysłania", 183 | "civilian_call": "Zgłoszenie cywilne", 184 | "emergency_call": "Nowe zgłoszenie 911" 185 | }, 186 | "progressbar": { 187 | "blood_clear": "Usuwanie krwi...", 188 | "bullet_casing": "Usuwanie łusek...", 189 | "robbing": "Okradanie osoby...", 190 | "place_object": "Umieszczanie obiektu...", 191 | "remove_object": "Usuwanie obiektu...", 192 | "impound": "Holowanie pojazdu..." 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /locales/pt-br.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "in_vehicle": "Você não pode fazer isso dentro de um veículo", 4 | "license_already": "O jogador já possui uma licença", 5 | "error_license": "O jogador não tem essa licença", 6 | "no_camera": "A câmera não existe", 7 | "blood_not_cleared": "Sangue NÃO limpo", 8 | "bullet_casing_not_removed": "Cartuchos NÃO removidos", 9 | "none_nearby": "Ninguém por perto!", 10 | "canceled": "Cancelado..", 11 | "time_higher": "O tempo deve ser maior que 0", 12 | "amount_higher": "A quantidade deve ser maior que 0", 13 | "vehicle_cuff": "Você não pode algemar alguém em um veículo", 14 | "no_cuff": "Você não tem algemas com você", 15 | "no_impound": "Não há veículos apreendidos", 16 | "no_spikestripe": "Não é possível colocar mais tiras de espinhos", 17 | "error_license_type": "Tipo de licença inválido", 18 | "rank_license": "Você não tem um cargo alto o suficiente para conceder uma licença", 19 | "revoked_license": "Sua licença foi revogada", 20 | "rank_revoke": "Você não tem um cargo alto o suficiente para revogar uma licença", 21 | "on_duty_police_only": "Apenas para policiais de serviço", 22 | "vehicle_not_flag": "Veículo não sinalizado", 23 | "vehicle_flag": "Veículo já sinalizado", 24 | "not_towdriver": "Não é motorista de guincho", 25 | "not_lawyer": "A pessoa não é advogado", 26 | "no_anklet": "Esta pessoa não tem um rastreador no tornozelo.", 27 | "have_evidence_bag": "Você deve ter uma bolsa de evidências vazia com você", 28 | "no_driver_license": "Nenhuma licença de motorista", 29 | "not_cuffed_dead": "O civil não está algemado ou morto", 30 | "no_rob": "Esta pessoa não está algemada, morta ou com as mãos para cima" 31 | }, 32 | "success": { 33 | "uncuffed": "Você foi desvinculado das algemas", 34 | "granted_license": "Você recebeu uma licença", 35 | "grant_license": "Você concedeu uma licença", 36 | "revoke_license": "Você revogou uma licença", 37 | "tow_paid": "Você foi pago $500", 38 | "blood_clear": "Sangue Limpo", 39 | "bullet_casing_removed": "Cartuchos Removidos...", 40 | "anklet_taken_off": "Seu rastreador de tornozelo foi retirado.", 41 | "took_anklet_from": "Você retirou o rastreador de %s %s", 42 | "put_anklet": "Você colocou um rastreador de tornozelo.", 43 | "put_anklet_on": "Você colocou um rastreador de tornozelo em %s %s", 44 | "vehicle_flagged": "Veículo %s foi sinalizado por %s", 45 | "impound_vehicle_removed": "Veículo retirado do depósito!", 46 | "impounded": "Veículo apreendido", 47 | "escapedcuff": "Você escapuliu das algemas!" 48 | }, 49 | "info": { 50 | "mr": "Sr.", 51 | "mrs": "Sra.", 52 | "impound_price": "Preço que o jogador paga para retirar o veículo do depósito (pode ser 0)", 53 | "plate_number": "Número da Placa", 54 | "flag_reason": "Motivo para sinalizar o veículo", 55 | "camera_id_help": "ID da Câmera", 56 | "callsign_name": "Nome do seu sinal de chamada", 57 | "poobject_object": "Tipo de objeto a ser gerado ou \"deletar\" para excluir", 58 | "player_id": "ID do Jogador", 59 | "citizen_id": "ID de Cidadão do Jogador", 60 | "dna_sample": "Amostra de DNA", 61 | "jail_time": "Tempo que eles devem ficar na prisão", 62 | "jail_time_no": "O tempo de prisão precisa ser maior que 0", 63 | "license_type": "Tipo de Licença (motorista/arma)", 64 | "ankle_location": "Localização do Rastreado no Tornozelo", 65 | "cuff": "Você está algemado!", 66 | "cuffed_walk": "Você está algemado, mas pode andar", 67 | "vehicle_flagged": "Veículo %s está sinalizado por: %s", 68 | "unflag_vehicle": "Veículo %s foi desmarcado", 69 | "tow_driver_paid": "Você pagou o motorista de guincho", 70 | "paid_lawyer": "Você pagou um advogado", 71 | "vehicle_taken_depot": "Veículo levado para o depósito por $%s", 72 | "vehicle_seized": "Veículo apreendido", 73 | "stolen_money": "Você roubou $%s", 74 | "cash_robbed": "Você foi roubado de $%s", 75 | "driving_license_confiscated": "Sua licença de motorista foi confiscada", 76 | "cash_confiscated": "Seu dinheiro foi confiscado", 77 | "searched_success": "Você completou uma busca nesta pessoa", 78 | "being_searched": "Você está sendo revistado", 79 | "cash_found": "Encontrado $%s no civil", 80 | "sent_jail_for": "Você enviou a pessoa para a prisão por %s meses", 81 | "fine_received": "Você recebeu uma multa de $%s", 82 | "blip_text": "Alerta Policial - %s", 83 | "jail_time_input": "Tempo de Prisão", 84 | "submit": "Enviar", 85 | "time_months": "Tempo em Meses", 86 | "bill": "Conta", 87 | "amount": "Quantidade", 88 | "vehicle_info": "Motor: %s % | Combustível: %s %", 89 | "evidence_stash": "Esconderijo de Evidências | %s", 90 | "slot": "Número do slot (1,2,3)", 91 | "current_evidence": "%s | Gaveta %s", 92 | "on_duty": "[E] - Entrar em serviço", 93 | "off_duty": "[E] - Sair de serviço", 94 | "onoff_duty": "Em/fora de serviço", 95 | "stash": "Esconderijo %s", 96 | "delete_spike": "[E] Deletar Tira de Espinhos", 97 | "close_camera": "Fechar Câmera", 98 | "bullet_casing": "[~g~G~s~] Cartucho %s", 99 | "casing": "Cartucho", 100 | "blood": "Sangue", 101 | "blood_text": "[~g~G~s~] Sangue %s", 102 | "fingerprint_text": "[G] Impressão Digital", 103 | "fingerprint": "Impressão Digital", 104 | "store_heli": "[E] Armazenar Helicóptero", 105 | "take_heli": "[E] Pegar Helicóptero", 106 | "impound_veh": "[E] - Apreender Veículo", 107 | "store_veh": "[E] - Armazenar Veículo", 108 | "grab_veh": "[E] - Garagem de Veículos", 109 | "armory": "Arsenal", 110 | "enter_armory": "[E] Arsenal", 111 | "finger_scan": "Escaneamento de Impressão Digital", 112 | "scan_fingerprint": "[E] Escanear Impressão Digital", 113 | "trash": "Lixo", 114 | "trash_enter": "[E] Lixeira", 115 | "stash_enter": "[E] Entrar no Armário", 116 | "evidence": "[E] - Evidência", 117 | "target_location": "A localização de %s %s está marcada no seu mapa", 118 | "anklet_location": "Localização do rastreador", 119 | "new_call": "Nova Chamada", 120 | "officer_down": "Oficial %s | %s Abaixo", 121 | "plate_triggered": "Um veículo com a placa %s foi sinalizado em %s pelo radar #%s", 122 | "plate_triggered_blip": "Veículo sinalizado pelo radar #%s", 123 | "camera_id": " - ID da Câmera: " 124 | }, 125 | "evidence": { 126 | "red_hands": "Mãos Vermelhas", 127 | "wide_pupils": "Pupilas Dilatadas", 128 | "red_eyes": "Olhos Vermelhos", 129 | "weed_smell": "Cheira a maconha", 130 | "gunpowder": "Pólvora na roupa", 131 | "chemicals": "cheira a químico", 132 | "heavy_breathing": "Respira pesadamente", 133 | "sweat": "Suda muito", 134 | "handbleed": "Sangue nas mãos", 135 | "confused": "Confuso", 136 | "alcohol": "Cheira a álcool", 137 | "heavy_alcohol": "Cheira muito a álcool", 138 | "agitated": "Agitado - Sinais de Uso de Metanfetamina", 139 | "serial_not_visible": "Número de série não visível..." 140 | }, 141 | "menu": { 142 | "garage_title": "Veículos Policiais", 143 | "close": "⬅ Fechar Menu", 144 | "impound": "Veículos Apreendidos", 145 | "pol_impound": "Depósito Policial", 146 | "pol_garage": "Garagem Policial", 147 | "arrest": "Prender", 148 | "traffic": "Tráfego", 149 | "patrol": "Patrulha", 150 | "prison": "Prisão", 151 | "seatbelt": "Cinto de Segurança", 152 | "none": "Nenhum", 153 | "phone": "Telefone", 154 | "camera": "Câmera", 155 | "billboard": "Painel", 156 | "custom": "Personalizado", 157 | "main": "Principal", 158 | "search": "Procurar", 159 | "sign": "Sinalizar", 160 | "flag": "Sinalizar Veículo", 161 | "evidence": "Evidência", 162 | "track": "Rastreador", 163 | "empty": "Vazio", 164 | "analyze": "Analisar", 165 | "analyze_blood": "Analisar Sangue", 166 | "item": "Item" 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /locales/pt.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "in_vehicle": "Não podes fazer isto num veículo", 4 | "license_already": "O jogador já possui uma licença", 5 | "error_license": "O jogador não possui essa licença", 6 | "no_camera": "A câmara não existe", 7 | "blood_not_cleared": "Sangue NÃO limpo", 8 | "bullet_casing_not_removed": "Cápsulas de balas NÃO removidas", 9 | "none_nearby": "Ninguém por perto!", 10 | "canceled": "Cancelado..", 11 | "time_higher": "O tempo deve ser maior que 0", 12 | "amount_higher": "A quantidade deve ser maior que 0", 13 | "vehicle_cuff": "Não podes algemar alguém num veículo", 14 | "no_cuff": "Não tens as algemas consigo", 15 | "no_impound": "Não existem veículos apreendidos", 16 | "no_spikestripe": "Não podes colocar mais fitas de pregos", 17 | "error_license_type": "Tipo de licença inválido", 18 | "rank_license": "Não tens a patente suficientemente alta para conceder uma licença", 19 | "revoked_license": "Teve uma licença revogada", 20 | "rank_revoke": "Não tens a patente suficientemente alta para revogar uma licença", 21 | "on_duty_police_only": "Apenas para polícias em serviço", 22 | "vehicle_not_flag": "Veículo não sinalizado", 23 | "vehicle_flag": "Veículo já sinalizado", 24 | "not_towdriver": "Não és motorista de reboque", 25 | "not_lawyer": "A pessoa não é um advogado", 26 | "no_anklet": "Esta pessoa não tem uma tornozeleira eletrónica.", 27 | "have_evidence_bag": "Deves ter um saco de provas vazio contigo", 28 | "no_driver_license": "Sem carta de condução", 29 | "not_cuffed_dead": "O civil não está algemado ou morto", 30 | "no_rob": "Esta pessoa não está algemada, morta, ou de mãos ao ar" 31 | }, 32 | "success": { 33 | "uncuffed": "Foi desalgemado", 34 | "granted_license": "Foi-lhe concedida uma licença", 35 | "grant_license": "Concedeu uma licença", 36 | "revoke_license": "Revogou uma licença", 37 | "tow_paid": "Foi pago 500€", 38 | "blood_clear": "Sangue limpo", 39 | "bullet_casing_removed": "Cápsulas de balas removidas...", 40 | "anklet_taken_off": "O teu rastreador de tornozelo foi retirado.", 41 | "took_anklet_from": "Retiraste o rastreador de tornozelo de %s %s", 42 | "put_anklet": "Colocaste um rastreador de tornozelo.", 43 | "put_anklet_on": "Colocaste um rastreador de tornozelo em %s %s", 44 | "vehicle_flagged": "O Veículo %s foi sinalizado por %s", 45 | "impound_vehicle_removed": "Veículo retirado do depósito!", 46 | "impounded": "Veículo apreendido", 47 | "escapedcuff": "Escapaste das algemas!" 48 | }, 49 | "info": { 50 | "mr": "Sr.", 51 | "mrs": "Sra.", 52 | "impound_price": "Preço que o jogador paga para retirar veículo do depósito (pode ser 0)", 53 | "plate_number": "Número da Matrícula", 54 | "flag_reason": "Razão para sinalizar o veículo", 55 | "camera_id_help": "ID da Câmara", 56 | "callsign_name": "Nome do teu indicativo", 57 | "poobject_object": "Tipo de objeto para gerar ou \"delete\" para eliminar", 58 | "player_id": "ID do Jogador", 59 | "citizen_id": "ID de Cidadão do Jogador", 60 | "dna_sample": "Amostra de DNA", 61 | "jail_time": "Tempo que têm de ficar na prisão", 62 | "jail_time_no": "O tempo de prisão precisa ser maior que 0", 63 | "license_type": "Tipo de Licença (condução/arma)", 64 | "ankle_location": "Localização do Rastreador de Tornozelo", 65 | "cuff": "Está algemado!", 66 | "cuffed_walk": "Está algemado, mas pode caminhar", 67 | "vehicle_flagged": "Veículo %s está sinalizado por: %s", 68 | "unflag_vehicle": "Veículo %s está desmarcado", 69 | "tow_driver_paid": "Pagaste ao motorista de reboque", 70 | "paid_lawyer": "Pagaste a um advogado", 71 | "vehicle_taken_depot": "Veículo levado para o depósito por €%s", 72 | "vehicle_seized": "Veículo apreendido", 73 | "stolen_money": "Roubou €%s", 74 | "cash_robbed": "Foste roubado, valor €%s", 75 | "driving_license_confiscated": "A tua carta de condução foi confiscada", 76 | "cash_confiscated": "O teu dinheiro foi confiscado", 77 | "searched_success": "Concluiste uma busca nesta pessoa", 78 | "being_searched": "Estás a ser revistado", 79 | "cash_found": "Encontrados €%s no civil", 80 | "sent_jail_for": "Enviaste a pessoa para a prisão por %s meses", 81 | "fine_received": "Recebeste uma multa de €%s", 82 | "blip_text": "Alerta Policial - %s", 83 | "jail_time_input": "Tempo de prisão", 84 | "submit": "Submeter", 85 | "time_months": "Tempo em Meses", 86 | "bill": "Fatura", 87 | "amount": "Quantidade", 88 | "vehicle_info": "Motor: %s % | Combustível: %s %", 89 | "evidence_stash": "Depósito de Provas | %s", 90 | "slot": "Número do slot (1,2,3)", 91 | "current_evidence": "%s | Gaveta %s", 92 | "on_duty": "[E] - Entrar em serviço", 93 | "off_duty": "[E] - Sair de serviço", 94 | "onoff_duty": "Entrar/Sair de serviço", 95 | "stash": "Depósito %s", 96 | "delete_spike": "[E] Eliminar Fita de Pregos", 97 | "close_camera": "Fechar Câmara", 98 | "bullet_casing": "[~g~G~s~] Cápsula de Bala %s", 99 | "casing": "Cápsula de Bala", 100 | "blood": "Sangue", 101 | "blood_text": "[~g~G~s~] Sangue %s", 102 | "fingerprint_text": "[G] Impressão Digital", 103 | "fingerprint": "Impressão Digital", 104 | "store_heli": "[E] Guardar Helicóptero", 105 | "take_heli": "[E] Retirar Helicóptero", 106 | "impound_veh": "[E] - Apreender Veículo", 107 | "store_veh": "[E] - Guardar Veículo", 108 | "grab_veh": "[E] - Garagem de Veículos", 109 | "armory": "Armaria", 110 | "enter_armory": "[E] Armaria", 111 | "finger_scan": "Digitalização de Impressões Digitais", 112 | "scan_fingerprint": "[E] Digitalizar Impressão Digital", 113 | "trash": "Lixo", 114 | "trash_enter": "[E] Caixote do Lixo", 115 | "stash_enter": "[E] Entrar no Armário", 116 | "evidence": "[E] - Provas", 117 | "target_location": "A localização de %s %s está marcada no seu mapa", 118 | "anklet_location": "Localização do rastreador de tornozelo", 119 | "new_call": "Nova Chamada", 120 | "officer_down": "Agente %s | %s Abatido", 121 | "plate_triggered": "Um veículo com a matrícula %s foi sinalizado em %s pelo radar #%s", 122 | "plate_triggered_blip": "Veículo sinalizado pelo radar #%s", 123 | "camera_id": " - ID da Câmara: " 124 | }, 125 | "evidence": { 126 | "red_hands": "Mãos vermelhas", 127 | "wide_pupils": "Pupilas dilatadas", 128 | "red_eyes": "Olhos vermelhos", 129 | "weed_smell": "Cheira a erva", 130 | "gunpowder": "Pólvora na roupa", 131 | "chemicals": "cheira a químicos", 132 | "heavy_breathing": "Respiração pesada", 133 | "sweat": "Estás a suar muito", 134 | "handbleed": "Sangue nas mãos", 135 | "confused": "Confuso", 136 | "alcohol": "Cheira a álcool", 137 | "heavy_alcohol": "Cheira muito a álcool", 138 | "agitated": "Agitado - Sinais de uso de Metanfetaminas", 139 | "serial_not_visible": "Número de série não visível..." 140 | }, 141 | "menu": { 142 | "garage_title": "Veículos Policiais", 143 | "close": "⬅ Fechar Menu", 144 | "impound": "Veículos Apreendidos", 145 | "pol_impound": "Depósito Policial", 146 | "pol_garage": "Garagem Policial", 147 | "pol_armory": "Armaria Policial" 148 | }, 149 | "email": { 150 | "sender": "Agência Central de Cobrança Judicial", 151 | "subject": "Cobrança de dívida", 152 | "message": "Caro %s. %s,

A Agência Central de Cobrança Judicial (ACCJ) processou as multas que recebeu da polícia.
Foram retirados €%s da sua conta.

Cumprimentos cordiais,
Sr. I.K. Graai" 153 | }, 154 | "commands": { 155 | "place_spike": "Colocar Faixa de Pregos (Apenas Polícia)", 156 | "license_grant": "Conceder uma licença a alguém", 157 | "license_revoke": "Revogar uma licença de alguém", 158 | "place_object": "Colocar/Eliminar Um Objeto (Apenas Polícia)", 159 | "cuff_player": "Algemar Jogador (Apenas Polícia)", 160 | "escort": "Escoltar Jogador", 161 | "callsign": "Atribuir Um Indicativo", 162 | "clear_casign": "Limpar Área de Cápsulas (Apenas Polícia)", 163 | "jail_player": "Encarcerar Jogador (Apenas Polícia)", 164 | "unjail_player": "Libertar Jogador (Apenas Polícia)", 165 | "clearblood": "Limpar Área de Sangue (Apenas Polícia)", 166 | "seizecash": "Apreender Dinheiro (Apenas Polícia)", 167 | "softcuff": "Algemar Levemente (Apenas Polícia)", 168 | "camera": "Visualizar Câmara de Segurança (Apenas Polícia)", 169 | "flagplate": "Sinalizar Uma Matrícula (Apenas Polícia)", 170 | "unflagplate": "Desmarcar Uma Matrícula (Apenas Polícia)", 171 | "plateinfo": "Consultar Uma Matrícula (Apenas Polícia)", 172 | "depot": "Apreender com Preço (Apenas Polícia)", 173 | "impound": "Apreender Um Veículo (Apenas Polícia)", 174 | "paytow": "Pagar Motorista de Reboque (Apenas Polícia)", 175 | "paylawyer": "Pagar Advogado (Apenas Polícia, Juiz)", 176 | "anklet": "Colocar Tornozeleira de Rastreamento (Apenas Polícia)", 177 | "ankletlocation": "Obter a localização da tornozeleira de uma pessoa", 178 | "removeanklet": "Remover Tornozeleira de Rastreamento (Apenas Polícia)", 179 | "drivinglicense": "Confiscar Carta de Condução (Apenas Polícia)", 180 | "takedna": "Tirar uma amostra de DNA de uma pessoa (saco de provas vazio necessário) (Apenas Polícia)", 181 | "police_report": "Relatório Policial", 182 | "message_sent": "Mensagem a ser enviada", 183 | "civilian_call": "Chamada Civil", 184 | "emergency_call": "Nova Chamada 911" 185 | }, 186 | "progressbar": { 187 | "blood_clear": "A limpar Sangue...", 188 | "bullet_casing": "A remover cápsulas de balas...", 189 | "robbing": "Roubando Pessoa...", 190 | "place_object": "Colocando objeto...", 191 | "remove_object": "Removendo objeto...", 192 | "impound": "Apreendendo Veículo..." 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /locales/ro.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "Cetateanul are deja permis", 4 | "error_license": "Cetateanul nu are acel permis", 5 | "no_camera": "Aceasta camera video nu exista", 6 | "blood_not_cleared": "Urmele de sange NU au fost inlaturate/colectate.", 7 | "bullet_casing_not_removed": "Cartusele NU au fost inlaturate/colectate.", 8 | "none_nearby": "Nu este nimeni langa tine!", 9 | "canceled": "Anulat..", 10 | "time_higher": "Perioada de timp trebuie sa fie mai mare de 0", 11 | "amount_higher": "Suma de plata trebuie sa fie mai mare de 0", 12 | "vehicle_cuff": "Nu poti pune catusele unei persoane in vehicul", 13 | "no_cuff": "Nu ai catuse disponibile la tine", 14 | "no_impound": "Nu exista niciun vehicul confiscat", 15 | "no_spikestripe": "Nu mai poti pune tepuse pentru cauciucuri", 16 | "error_license_type": "Tip de permis invalid", 17 | "rank_license": "Nu ai grad suficient de mare pentru a acorda un permis", 18 | "revoked_license": "Permisul ti-a fost suspendat", 19 | "rank_revoke": "Nu ai grad suficient de mare pentru a revoca/suspenda un permis", 20 | "on_duty_police_only": "Disponibil doar ofiterilor activi (on-duty)", 21 | "vehicle_not_flag": "Vehiculul nu are niciun flag activ", 22 | "not_towdriver": "Nu este agent de remorcari", 23 | "not_lawyer": "Cetateanul nu este avocat, atentie!", 24 | "no_anklet": "Cetateanul nu are bratara de urmarire la picior.", 25 | "have_evidence_bag": "Iti trebuie o punga pentru dovezi goala, se pare ca nu ai asa ceva la tine.", 26 | "no_driver_license": "Lipsa permis conducere", 27 | "not_cuffed_dead": "Cetateanul nu are catusele puse si nici nu este mort/ranit." 28 | }, 29 | "success": { 30 | "uncuffed": "Ti-au fost scoase catusele", 31 | "granted_license": "Ai primit un permis valid", 32 | "grant_license": "Ai eliberat o adeverinta pentru permis", 33 | "revoke_license": "Ai suspendat un permis", 34 | "tow_paid": "Ai fost platit $500", 35 | "blood_clear": "Urmele de sange au fost colectate", 36 | "bullet_casing_removed": "Cartusele au fost adunate...", 37 | "anklet_taken_off": "Trackerul ti-a fost scos.", 38 | "took_anklet_from": "Trackerul pentru %s %s a fost inlaturat/dezactivat.", 39 | "put_anklet": "Ai activat un tracker de urmarire.", 40 | "put_anklet_on": "Ai montat un tracker pentru %s %s", 41 | "vehicle_flagged": "Vehiculul cu numarul %s are flag pentru %s", 42 | "impound_vehicle_removed": "Vehiculul a fost scos din impound!", 43 | "impounded": "Vehicul confiscat (impounded)" 44 | }, 45 | "info": { 46 | "mr": "D-nul.", 47 | "mrs": "D-na.", 48 | "impound_price": "Pretul platit de cetateni pentru a scoate masinile sechestrare (poate sa fie 0)", 49 | "plate_number": "Numarul de inmatriculare", 50 | "flag_reason": "Motivul flagului activ", 51 | "camera_id": "ID-ul camerei video", 52 | "callsign_name": "Callsignul tau (numar matricol)", 53 | "poobject_object": "Tipul obiectului de spawnat sau de sters", 54 | "player_id": "ID-ul cetateanului", 55 | "citizen_id": "CNP-ul cetateanului", 56 | "dna_sample": "Proba ADN", 57 | "jail_time": "Timpul aferent pedepsei de incarcerare", 58 | "jail_time_no": "Timpul de incarcerare trebuie sa fie mai mare de 0", 59 | "license_type": "Tipul permisului (conducere/portarma)", 60 | "ankle_location": "Locatia trackerului", 61 | "cuff": "Ai fost incatusat!", 62 | "cuffed_walk": "Ai fost incatusat, dar te poti misca", 63 | "vehicle_flagged": "Vehiculul %s are flag activ pentru: %s", 64 | "unflag_vehicle": "Vehiculul %s nu are flag activ", 65 | "tow_driver_paid": "Ai platit agentul de remorcari", 66 | "paid_lawyer": "Ai platit avocatul", 67 | "vehicle_taken_depot": "Vehiculul a fost sechestrat, pentru suma de $%s", 68 | "vehicle_seized": "Vehicul confiscat/sechestrat", 69 | "stolen_money": "Ai furat suma de $%s", 70 | "cash_robbed": "Ti-a fost furata suma de $%s", 71 | "driving_license_confiscated": "Permisul de conducere ti-a fost confiscat", 72 | "cash_confiscated": "Ti-au fost confiscati toti banii de pe tine", 73 | "being_searched": "Esti perchezitionat(a)!", 74 | "cash_found": "S-a gasit suma de $%s pe cetatean", 75 | "sent_jail_for": "Ai trimis cetateanul la inchisoare pentru %s luni", 76 | "fine_received": "Ai primit o amenda in valoare de $%s", 77 | "blip_text": "Alerta M.A.I - %s", 78 | "jail_time_input": "Perioada de incarcerare", 79 | "submit": "Strimite", 80 | "time_months": "Timp in luni de zile", 81 | "bill": "Facturi", 82 | "amount": "Suma", 83 | "vehicle_info": "Motor: %s % | Combustibil: %s %", 84 | "evidence_stash": "Fisiet dovezi | %s", 85 | "slot": "Slot nr. (1,2,3)", 86 | "current_evidence": "%s | Sertar %s", 87 | "on_duty": "[E] - Intra in tura", 88 | "off_duty": "[E] - Iesi din tura", 89 | "onoff_duty": "Intra/Iesi din tura", 90 | "stash": "Fiset %s", 91 | "delete_spike": "[~r~E~s~] Sterge tepusele", 92 | "close_camera": "Inchide camera", 93 | "bullet_casing": "[~g~G~s~] Cartusele %s", 94 | "casing": "Cartuse", 95 | "blood": "Sange", 96 | "blood_text": "[~g~G~s~] Sange %s", 97 | "fingerprint_text": "[G] Amprente", 98 | "fingerprint": "Amprente", 99 | "store_heli": "[E] Parcheaza elicopterul", 100 | "take_heli": "[E] Foloseste elicopterul", 101 | "impound_veh": "[E] Confisca vehicul", 102 | "store_veh": "[E] - Parcheaza vehicul", 103 | "armory": "Armurier", 104 | "enter_armory": "[E] Armurier", 105 | "finger_scan": "Scaneaza amprentele", 106 | "scan_fingerprint": "[E] Scaneaza amprentele", 107 | "trash": "Gunoi", 108 | "trash_enter": "[E] Cos de gunoi", 109 | "stash_enter": "[E] Vestiar", 110 | "target_location": "Locatia pentru %s %s este marcata pe GPS.", 111 | "anklet_location": "Pozitionarea trackerului", 112 | "new_call": "Apel nou", 113 | "officer_down": "Colegul nostru %s | %s a fost ranit!" 114 | }, 115 | "evidence": { 116 | "red_hands": "Maini zgariate", 117 | "wide_pupils": "Pupile dilatate", 118 | "red_eyes": "Ochi rosii", 119 | "weed_smell": "Miroase a iarba", 120 | "gunpowder": "Praf de pusca pe haine", 121 | "chemicals": "miros de chimicale puternic", 122 | "heavy_breathing": "Respira greu", 123 | "sweat": "Transpira mult", 124 | "handbleed": "Sange pe maini", 125 | "confused": "Confuz", 126 | "alcohol": "Miroase a alcool", 127 | "heavy_alcohol": "Miroase tare a alcool", 128 | "agitated": "Agitat - posibil consum de metamfetamina", 129 | "serial_not_visible": "Codul de serie nu este vizibil..." 130 | }, 131 | "menu": { 132 | "garage_title": "Vehicule MAI", 133 | "close": "⬅ Inchide meniul", 134 | "impound": "Vehicule confiscate", 135 | "pol_impound": "Police Impound", 136 | "pol_garage": "Garaj MAI", 137 | "pol_armory": "Armurier" 138 | }, 139 | "email": { 140 | "sender": "Agentia Nationala de Administrare Fiscala", 141 | "subject": "Colectare datorii", 142 | "message": "Stimate %s. %s,

Agentia Nationala de Administrare Fiscala (ANAF) aa aduce la cunostinta faptul ca din conturile dumneavoastra a fost retrasa o suma de bani, reprezentand amenzi primite pe teritoriul statul San Andreas.
Suma retrasa este de $%s.

Cu stima,
Alexandru Vasilescu" 143 | }, 144 | "commands": { 145 | "place_spike": "Plaseaza tapuse pe strada (Doar pentru M.A.I)", 146 | "license_grant": "Ofera un permis unei persoane.", 147 | "license_revoke": "Suspenda permisul unei persoane", 148 | "place_object": "Plaseaza/Sterge un obiect (Doar pentru M.A.I)", 149 | "cuff_player": "Incatuseaza un cetatean (Doar pentru M.A.I)", 150 | "escort": "Escorteaza un cetatean", 151 | "callsign": "Iti setezi numarul matricol", 152 | "clear_casign": "Colectezi cartusele din zona (Doar pentru M.A.I)", 153 | "jail_player": "Trimiti un cetatean la inchisoare (Doar pentru M.A.I)", 154 | "unjail_player": "Scoti de la inchisoare un cetatean (Doar pentru M.A.I)", 155 | "clearblood": "Colectezi probele de sange din zona (Doar pentru M.A.I)", 156 | "seizecash": "Confisti banii unui cetatean (Doar pentru M.A.I)", 157 | "softcuff": "Incatusare usoara (Doar pentru M.A.I)", 158 | "camera": "Urmareste o camera de securitate (Doar pentru M.A.I)", 159 | "flagplate": "Pune flag unui vehicul (Doar pentru M.A.I)", 160 | "unflagplate": "Scoate flagul unui vehicul (Doar pentru M.A.I)", 161 | "plateinfo": "Verifica un numar de inmatriculare (Doar pentru M.A.I)", 162 | "depot": "Confisca un vehicul cu plata (Doar pentru M.A.I)", 163 | "impound": "Confisca un behicul fara plata (Doar pentru M.A.I)", 164 | "paytow": "Plateste un agent de remorcari (Doar pentru M.A.I)", 165 | "paylawyer": "Plateste un avocat (M.A.I sau M.J)", 166 | "anklet": "Monteaza un device de tracking (Doar pentru M.A.I)", 167 | "ankletlocation": "Obtine locatia unui device de tracking", 168 | "removeanklet": "Dezactivezi si scoti un device de tracking (Doar pentru M.A.I)", 169 | "drivinglicense": "Suspendarea si confiscarea permisului de conducere (Doar pentru M.A.I)", 170 | "takedna": "Iei o proba de ADN de la un cetatean (necesita punga goala de dovezi) (Doar pentru M.A.I)", 171 | "police_report": "Raport al M.A.I", 172 | "message_sent": "Mesaj de trimis", 173 | "civilian_call": "Apel de la cetateni", 174 | "emergency_call": "Apel la 911" 175 | }, 176 | "progressbar": { 177 | "blood_clear": "Strangi urmele de sange...", 178 | "bullet_casing": "Strangi cartusele..", 179 | "robbing": "Jefuiesti un cetatean...", 180 | "place_object": "Plasezi un obiect..", 181 | "remove_object": "Strangi un obiect..", 182 | "impound": "Comfisti un vehicul.." 183 | } 184 | } 185 | -------------------------------------------------------------------------------- /locales/sk.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "license_already": "Hráč už má licenciu", 4 | "error_license": "Hráč túto licenciu nemá", 5 | "no_camera": "Kamera neexistuje", 6 | "blood_not_cleared": "Krv NIE JE vyčistená", 7 | "bullet_casing_not_removed": "Puzdrá nábojov NIE sú odstránené", 8 | "none_nearby": "Nikto nablízku!", 9 | "canceled": "Zrušené..", 10 | "time_higher": "Čas musí byť väčší ako 0", 11 | "amount_higher": "Suma musí byť vyššia ako 0", 12 | "vehicle_cuff": "Nemôžete pripútať niekoho, kto je vo vozidle", 13 | "no_cuff": "Nemáš pri sebe putá", 14 | "no_impound": "Nenašli sa žiadne odtiahnuté vozidlá", 15 | "no_spikestripe": "Nie je možné umiestniť ďalšie pásiky s hrotmi", 16 | "error_license_type": "Neplatný typ licencie", 17 | "rank_license": "Nemáte dostatočne vysokú hodnosť na udelenie licencie", 18 | "revoked_license": "Bola vám odobratá licencia", 19 | "rank_revoke": "Nemáte dostatočne vysokú hodnosť na odobratie licencie", 20 | "on_duty_police_only": "Len pre políciu v službe", 21 | "vehicle_not_flag": "Vozidlo nie je označené", 22 | "not_towdriver": "Nie je vodič odťahovky", 23 | "not_lawyer": "Osoba nie je právnik", 24 | "no_anklet": "Táto osoba nemá členkový sledovač.", 25 | "have_evidence_bag": "Musíte mať so sebou prázdnu tašku s dôkazmi", 26 | "no_driver_license": "Žiaden vodičský preukaz", 27 | "not_cuffed_dead": "Civilista nie je spútaný a ani mŕtvy" 28 | }, 29 | "success": { 30 | "uncuffed": "Boli ste zbavení pút", 31 | "granted_license": "Bola vám udelená licencia", 32 | "grant_license": "Udelili ste licenciu", 33 | "revoke_license": "Odobrali ste licenciu", 34 | "tow_paid": "Dostali ste zaplatené $500", 35 | "blood_clear": "Krv vyčistená", 36 | "bullet_casing_removed": "Odstránená nábojnica...", 37 | "anklet_taken_off": "Váš členkový sledovač je odstránený.", 38 | "took_anklet_from": "Dal si dole sledovač osobe %s %s", 39 | "put_anklet": "Nasadil si členkový sledovač.", 40 | "put_anklet_on": "Nasadil si sledovač osobe %s %s", 41 | "vehicle_flagged": "Vozidlo %s bol označený pre %s", 42 | "impound_vehicle_removed": "Vozidlo vytiahnuté z odťahovky!" 43 | }, 44 | "info": { 45 | "mr": "Pán", 46 | "mrs": "Pani", 47 | "impound_price": "Cena, ktorú hráč zaplatí, aby dostal vozidlo zo zabavenia (môže byť 0)", 48 | "plate_number": "Evidenčné číslo", 49 | "flag_reason": "Dôvod označenia vozidla", 50 | "camera_id": "ID kamery", 51 | "callsign_name": "Názov vašej volacej značky", 52 | "poobject_object": "Typ objektu na vytvorenie alebo na odstránenie", 53 | "player_id": "ID Hráča", 54 | "citizen_id": "ID Osoby", 55 | "dna_sample": "Vzorka DNA", 56 | "jail_time": "Čas, kedy musia byť vo väzení", 57 | "jail_time_no": "Čas väzenia musí byť vyšší ako 0", 58 | "license_type": "Typ licencie (vodičký/zborjný)", 59 | "ankle_location": "Lokalizácia sledovača", 60 | "cuff": "Si spútaný!", 61 | "cuffed_walk": "Si spútaný, ale môžeš chodiť", 62 | "vehicle_flagged": "Vozidlo %s je označené pre: %s", 63 | "unflag_vehicle": "Vozidlo %s už nie je označené", 64 | "tow_driver_paid": "Zaplatil si vodičovi odťahovky", 65 | "paid_lawyer": "Zaplatil si právnika", 66 | "vehicle_taken_depot": "Vozidlo odvezené do depa za $%s", 67 | "vehicle_seized": "Vozidlo bolo zaistené", 68 | "stolen_money": "Ukradol si $%s", 69 | "cash_robbed": "Boli ste okradnutý o $%s", 70 | "driving_license_confiscated": "Váš vodičský preukaz bol zadržaný", 71 | "cash_confiscated": "Vaša hotovosť bola zabavená", 72 | "being_searched": "Ste prehľadavný", 73 | "cash_found": "Nájdených $%s u osoby", 74 | "sent_jail_for": "Poslal si osobu do väzenia na %s mesiac/e", 75 | "fine_received": "Dostali ste pokutu za $%s", 76 | "blip_text": "Policia Upozornenie - %s", 77 | "jail_time_input": "Čas väzenia", 78 | "submit": "Potvrdiť", 79 | "time_months": "Čas v mesiacoch", 80 | "bill": "účet", 81 | "amount": "Čiastka", 82 | "vehicle_info": "Motor: %s % | Palivo: %s %", 83 | "evidence_stash": "Úložisko pre Dôkazy | %s", 84 | "slot": "Priestor č. (1,2,3)", 85 | "current_evidence": "%s | Zásuvka %s", 86 | "on_duty": "[~g~E~s~] - Ísť do služby", 87 | "off_duty": "[~r~E~s~] - Ísť mimo službu", 88 | "onoff_duty": "On/Off Duty", 89 | "stash": "Úložisko %s", 90 | "delete_spike": "[~r~E~s~] Odstrániť Spajky", 91 | "close_camera": "Zatvoriť kameru", 92 | "bullet_casing": "[~g~G~s~] Nábojnica %s", 93 | "casing": "Nábojnica", 94 | "blood": "Krv", 95 | "blood_text": "[~g~G~s~] Krv %s", 96 | "fingerprint_text": "[~g~G~s~] Odtlačok Prsta", 97 | "fingerprint": "Odtlačok Prsta", 98 | "store_heli": "[~g~E~s~] Uložiť helikoptéru", 99 | "take_heli": "[~g~E~s~] Vybrať helikoptéru", 100 | "impound_veh": "[~g~E~s~] - Vybrať vozidlo", 101 | "store_veh": "[~g~E~s~] - Vložiť vozidlo", 102 | "armory": "Zbrojnica", 103 | "enter_armory": "[~g~E~s~] Zbrojnica", 104 | "finger_scan": "Skenovanie odtlačku prsta", 105 | "scan_fingerprint": "[~g~E~s~] Skenovanie odtlačku prsta", 106 | "trash": "Smetie", 107 | "trash_enter": "[~g~E~s~] Odpadkový kôš", 108 | "stash_enter": "[~g~E~s~] Otvoriť úložisko", 109 | "target_location": "Lokácia osoby ${firstname} ${lastname} je vyznačená na mape", 110 | "anklet_location": "Lokácia sledovača", 111 | "new_call": "Nový hovor" 112 | }, 113 | "evidence": { 114 | "red_hands": "Červené ruky", 115 | "wide_pupils": "Rozšírené zreničky", 116 | "red_eyes": "Červené oči", 117 | "weed_smell": "Vonia za trávou", 118 | "gunpowder": "Pušný prach na oblečení", 119 | "chemicals": "Vonia za chemikáliou", 120 | "heavy_breathing": "Ťažko dýcha", 121 | "sweat": "Veľmi sa potí", 122 | "handbleed": "Krv na rukách", 123 | "confused": "Zmätený", 124 | "alcohol": "Vonia za alkoholom", 125 | "heavy_alcohol": "Vonia veľmi za alkoholom", 126 | "agitated": "Rozrušený - Známky užívania pervitínu", 127 | "serial_not_visible": "Sériové číslo nie je viditeľné..." 128 | }, 129 | "menu": { 130 | "garage_title": "Policajné vozidlá", 131 | "close": "⬅ Zatvoriť menu", 132 | "impound": "Odtiahnuté vozidlá", 133 | "pol_impound": "Policajná odťahovka", 134 | "pol_garage": "Policajná garáž", 135 | "pol_armory": "Policajná zbrojnica" 136 | }, 137 | "email": { 138 | "sender": "Ústredná Súdna Inkasná Agentúra", 139 | "subject": "Vymáhanie pohľadávok", 140 | "message": "Vážený/á %s. %s,

Centrálna súdna inkasná agentúra (CJCA) vám zaúčtovala pokuty, ktoré ste dostali od polície.
Bolo vám odobraných $%s z vašého účtu.

S priateľským pozdravom,
Mr. I.K. Graai" 141 | }, 142 | "commands": { 143 | "place_spike": "Položiť Spajky (Len Polícia)", 144 | "license_grant": "Udeliť niekomu licenciu", 145 | "license_revoke": "Odobrať niekomu licenciu", 146 | "place_object": "Umiestniť/Vymazať objekt (Len Polícia)", 147 | "cuff_player": "Spútať osobu (Len Polícia)", 148 | "escort": "Eskortovať osobu", 149 | "callsign": "Nastaviť si volaciu značku", 150 | "clear_casign": "Vyčistiť oblasť puzdier (Len Polícia)", 151 | "jail_player": "Uväzniť osobu (Len Polícia)", 152 | "unjail_player": "Zrušte väzenie osoby (Len Polícia)", 153 | "clearblood": "Vyčistiž oblasť krvi (Len Polícia)", 154 | "seizecash": "Zabaviť hotovosť (Len Polícia)", 155 | "softcuff": "Jemné Cuff (Len Polícia)", 156 | "camera": "Pozrieť si bezpečnostnú kameru (Len Polícia)", 157 | "flagplate": "Označiť ŠPZ (Len Polícia)", 158 | "unflagplate": "Odstrániť označenie ŠPZ (Len Polícia)", 159 | "plateinfo": "Vyhľadať ŠPZ (Len Polícia)", 160 | "depot": "Zabavenie s cenou (Len Polícia)", 161 | "impound": "Zabaviť vozidlo (Len Polícia)", 162 | "paytow": "Zaplatiť vodiča odťahovej služby (Len Polícia)", 163 | "paylawyer": "Zaplatiť právnika (Len Polícia a Súd)", 164 | "anklet": "Nasadiť sledovací náramok (Len Polícia)", 165 | "ankletlocation": "Získajte polohu sledovača osoby", 166 | "removeanklet": "Odstráňte sledovací náramok (Len Polícia)", 167 | "drivinglicense": "Seize Drivers License (Len Polícia)", 168 | "takedna": "Odoberte vzorku DNA od osoby (potrebné prázdne vrecko na dôkazy) (Len Polícia)", 169 | "police_report": "Policajná správa", 170 | "message_sent": "Správa na odoslanie", 171 | "civilian_call": "Hovor od civilistu", 172 | "emergency_call": "Nový 911 hovor" 173 | }, 174 | "progressbar": { 175 | "blood_clear": "Čistíš krv...", 176 | "bullet_casing": "Odstráňuješ púzdra od nábojníc..", 177 | "robbing": "Okrádaš...", 178 | "place_object": "Pokládaš objekt..", 179 | "remove_object": "Odstraňuješ objekt.." 180 | } 181 | } 182 | -------------------------------------------------------------------------------- /locales/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "error": { 3 | "in_vehicle": "Aracınızda bunu yapamazsınız", 4 | "license_already": "Oyuncunun zaten bir lisansı var", 5 | "error_license": "Oyuncunun o lisansı yok", 6 | "no_camera": "Kamera mevcut değil", 7 | "blood_not_cleared": "Kan temizlenemedi", 8 | "bullet_casing_not_removed": "Mermi kovanları kaldırılmadı", 9 | "none_nearby": "Yakınlarda kimse yok!", 10 | "canceled": "İptal edildi..", 11 | "time_higher": "Zaman 0'dan yüksek olmalı", 12 | "amount_higher": "Miktar 0'dan yüksek olmalı", 13 | "vehicle_cuff": "Birini araçta kelepçeleyemezsiniz", 14 | "no_cuff": "Üzerinizde kelepçe yok", 15 | "no_impound": "El konulan araç yok", 16 | "no_spikestripe": "Daha fazla diken şeridi yerleştirilemez", 17 | "error_license_type": "Geçersiz lisans türü", 18 | "rank_license": "Lisans verebilmek için yeterince yüksek rütbede değilsiniz", 19 | "revoked_license": "Bir lisansınız iptal edildi", 20 | "rank_revoke": "Lisansı iptal etmek için yeterince yüksek rütbede değilsiniz", 21 | "on_duty_police_only": "Sadece görevli polisler için", 22 | "vehicle_not_flag": "Araç işaretlenmedi", 23 | "vehicle_flag": "Araç zaten işaretlendi", 24 | "not_towdriver": "Çekici şoförü değilsiniz", 25 | "not_lawyer": "Kişi avukat değil", 26 | "no_anklet": "Bu kişinin bileklik takılı değil.", 27 | "have_evidence_bag": "Boş bir delil poşeti bulundurmalısınız", 28 | "no_driver_license": "Sürücü belgesi yok", 29 | "not_cuffed_dead": "Sivil kelepçeli veya ölü değil", 30 | "no_rob": "Bu kişi kelepçeli, ölü veya eller yukarıda değil" 31 | }, 32 | "success": { 33 | "uncuffed": "Kelepçeleriniz çözüldü", 34 | "granted_license": "Bir lisans verildi", 35 | "grant_license": "Bir lisans verdiniz", 36 | "revoke_license": "Bir lisans iptal edildi", 37 | "tow_paid": "Çekiciye $500 ödendi", 38 | "blood_clear": "Kan temizlendi", 39 | "bullet_casing_removed": "Mermi kovanları kaldırıldı...", 40 | "anklet_taken_off": "Ayak bilek takip cihazınız çıkarıldı.", 41 | "took_anklet_from": "%s %s takip cihazını çıkardınız", 42 | "put_anklet": "Bir ayak bileği takip cihazı taktınız.", 43 | "put_anklet_on": "%s %s üzerine bir ayak bileği takip cihazı taktınız", 44 | "vehicle_flagged": "Araç %s için %s olarak işaretlendi", 45 | "impound_vehicle_removed": "Araç depodan çıkarıldı!", 46 | "impounded": "Araç el konuldu", 47 | "escapedcuff": "Kelepçelerinizden kaçtınız!" 48 | }, 49 | "info": { 50 | "mr": "Bay", 51 | "mrs": "Bayan", 52 | "impound_price": "Oyuncunun depodan aracını çıkarması için ödemesi gereken miktar (0 olabilir)", 53 | "plate_number": "Plaka Numarası", 54 | "flag_reason": "Araç işaretleme nedeni", 55 | "camera_id_help": "Kamera ID", 56 | "callsign_name": "Çağrı işareti adı", 57 | "poobject_object": "Oluşturulacak nesne türü veya silinecek nesne \"sil\"", 58 | "player_id": "Oyuncu ID'si", 59 | "citizen_id": "Oyuncunun vatandaşlık numarası", 60 | "dna_sample": "DNA örneği", 61 | "jail_time": "Hapiste geçirecekleri süre", 62 | "jail_time_no": "Hapishane süresi 0'dan yüksek olmalı", 63 | "license_type": "Lisans Türü (sürücü/silah)", 64 | "ankle_location": "Bileklik konumu", 65 | "cuff": "Kelepçelisiniz!", 66 | "cuffed_walk": "Kelepçelisiniz, ancak yürüyebilirsiniz", 67 | "vehicle_flagged": "Araç %s için işaretlendi: %s", 68 | "unflag_vehicle": "Araç %s için işaret kaldırıldı", 69 | "tow_driver_paid": "Çekici şoföre ödeme yapıldı", 70 | "paid_lawyer": "Bir avukata ödeme yapıldı", 71 | "vehicle_taken_depot": "Araç depoya $%s alındı", 72 | "vehicle_seized": "Araç el konuldu", 73 | "stolen_money": "$%s çaldınız", 74 | "cash_robbed": "$%s soyuldunuz", 75 | "driving_license_confiscated": "Sürücü belgeniz el konuldu", 76 | "cash_confiscated": "Paranız el konuldu", 77 | "searched_success": "Bu kişi üzerinde arama tamamlandı", 78 | "being_searched": "Aranıyorsunuz", 79 | "cash_found": "Sivil üzerinde $%s bulundu", 80 | "sent_jail_for": "Kişiyi %s ay hapishaneye gönderdiniz", 81 | "fine_received": "$%s ceza aldınız", 82 | "blip_text": "Polis Uyarısı - %s", 83 | "jail_time_input": "Hapishane süresi", 84 | "submit": "Gönder", 85 | "time_months": "Ay cinsinden süre", 86 | "bill": "Fatura", 87 | "amount": "Miktar", 88 | "vehicle_info": "Motor: %s % | Yakıt: %s %", 89 | "evidence_stash": "Delil Saklama | %s", 90 | "slot": "Yer no. (1,2,3)", 91 | "current_evidence": "%s | Çekmece %s", 92 | "on_duty": "[E] - Göreve başla", 93 | "off_duty": "[E] - Görevden ayrıl", 94 | "onoff_duty": "Görevde/İzinde", 95 | "stash": "%s sakla", 96 | "delete_spike": "[E] Diken şerit sil", 97 | "close_camera": "Kamera kapat", 98 | "bullet_casing": "[~g~G~s~] Mermi kovanı %s", 99 | "casing": "Mermi kovanı", 100 | "blood": "Kan", 101 | "blood_text": "[~g~G~s~] Kan %s", 102 | "fingerprint_text": "[G] Parmak izi", 103 | "fingerprint": "Parmak izi", 104 | "store_heli": "[E] Helikopteri depola", 105 | "take_heli": "[E] Helikopteri al", 106 | "impound_veh": "[E] - Araç el koy", 107 | "store_veh": "[E] - Araç depola", 108 | "grab_veh": "[E] - Araç garajı", 109 | "armory": "Silah Deposu", 110 | "enter_armory": "[E] Silah Deposuna gir", 111 | "finger_scan": "Parmak izi tarayıcı", 112 | "scan_fingerprint": "[E] Parmak izi tarayın", 113 | "trash": "Çöp", 114 | "trash_enter": "[E] Çöp Kutusu", 115 | "stash_enter": "[E] Kilitli kutuya gir", 116 | "evidence": "[E] - Delil", 117 | "target_location": "%s %s konumu haritanıza işaretlendi", 118 | "anklet_location": "Bileklik konumu", 119 | "new_call": "Yeni Çağrı", 120 | "officer_down": "Memur %s | %s Yaralı", 121 | "plate_triggered": "%s plakalı bir araç, radar #%s tarafından işaretlendi", 122 | "plate_triggered_blip": "Radar #%s tarafından araç işaretlendi", 123 | "camera_id": " - Kamera ID: " 124 | }, 125 | "evidence": { 126 | "red_hands": "Kızarmış eller", 127 | "wide_pupils": "Geniş göz bebekleri", 128 | "red_eyes": "Kızıl gözler", 129 | "weed_smell": "Kenevir kokusu", 130 | "gunpowder": "Giysilerde barut izi", 131 | "chemicals": "Kimyasal kokusu", 132 | "heavy_breathing": "Ağır nefes alma", 133 | "sweat": "Çok terleme", 134 | "handbleed": "Ellerde kan izi", 135 | "confused": "Kafası karışık", 136 | "alcohol": "Alkol kokusu", 137 | "heavy_alcohol": "Çok fazla alkol kokusu", 138 | "agitated": "Huzursuz - Metamfetamin kullanım belirtileri", 139 | "serial_not_visible": "Seri numarası görünmüyor..." 140 | }, 141 | "menu": { 142 | "garage_title": "Polis Araçları", 143 | "close": "⬅ Menüyü Kapat", 144 | "impound": "El Konulan Araçlar", 145 | "pol_impound": "Polis El Koyma", 146 | "pol_garage": "Polis Garajı", 147 | "pol_armory": "Polis Silah Deposu" 148 | }, 149 | "email": { 150 | "sender": "Merkezi Adli Tahsilat Ajansı", 151 | "subject": "Borç tahsilatı", 152 | "message": "Sayın %s. %s,

Merkezi Adli Tahsilat Ajansı (MATA) tarafından polisten aldığınız cezalar tahsil edildi.
Hesabınızdan $%s çekildi.

Saygılarımızla,
Bay I.K. Graai" 153 | }, 154 | "commands": { 155 | "place_spike": "Diken şeridi yerleştir (Sadece Polis)", 156 | "license_grant": "Birine lisans ver", 157 | "license_revoke": "Bir lisansı iptal et", 158 | "place_object": "Nesne yerleştir/sil (Sadece Polis)", 159 | "cuff_player": "Oyuncuyu kelepçele (Sadece Polis)", 160 | "escort": "Oyuncuyu eşlik et", 161 | "callsign": "Kendinize bir çağrı işareti ver", 162 | "clear_casign": "Kovanları temizle (Sadece Polis)", 163 | "jail_player": "Oyuncuyu hapishaneye gönder (Sadece Polis)", 164 | "unjail_player": "Oyuncuyu hapishaneden çıkar (Sadece Polis)", 165 | "clearblood": "Kanı temizle (Sadece Polis)", 166 | "seizecash": "Nakit el koyma (Sadece Polis)", 167 | "softcuff": "Yumuşak kelepçeleme (Sadece Polis)", 168 | "camera": "Güvenlik kamerasını izle (Sadece Polis)", 169 | "flagplate": "Plakayı işaretle (Sadece Polis)", 170 | "unflagplate": "Plakayı işaretten kaldır (Sadece Polis)", 171 | "plateinfo": "Plaka sorgula (Sadece Polis)", 172 | "depot": "Fiyatla depo (Sadece Polis)", 173 | "impound": "Araç el koy (Sadece Polis)", 174 | "paytow": "Çekici şoföre ödeme yap (Sadece Polis)", 175 | "paylawyer": "Avukata ödeme yap (Sadece Polis, Hakim)", 176 | "anklet": "Takip bileziği tak (Sadece Polis)", 177 | "ankletlocation": "Bir kişinin bileklik konumunu al", 178 | "removeanklet": "Takip bileziğini çıkar (Sadece Polis)", 179 | "drivinglicense": "Sürücü belgesini el koy (Sadece Polis)", 180 | "takedna": "Bir kişiden DNA örneği al (boş delil poşeti gerekli) (Sadece Polis)", 181 | "police_report": "Polis Raporu", 182 | "message_sent": "Gönderilecek mesaj", 183 | "civilian_call": "Sivil Çağrı", 184 | "emergency_call": "Yeni 911 Çağrısı" 185 | }, 186 | "progressbar": { 187 | "blood_clear": "Kan temizleniyor...", 188 | "bullet_casing": "Mermi kovanları kaldırılıyor..", 189 | "robbing": "Kişi soyuluyor...", 190 | "place_object": "Nesne yerleştiriliyor..", 191 | "remove_object": "Nesne kaldırılıyor..", 192 | "impound": "Araç el koyuluyor.." 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /server/objects.lua: -------------------------------------------------------------------------------- 1 | local sharedConfig = require 'config.shared' 2 | 3 | ---Spawns object 4 | ---@param modelHash string 5 | ---@param coords vector4 6 | ---@param zOffset number 7 | ---@param isFixed boolean? 8 | ---@return table? objects 9 | ---@return number? object 10 | local function spawnObject(objects, modelHash, coords, zOffset, isFixed) 11 | local object = CreateObject(modelHash, coords.x, coords.y, coords.z - zOffset, true, true, false) 12 | SetEntityHeading(object, coords.w) 13 | FreezeEntityPosition(object, true) 14 | 15 | local exists = lib.waitFor(function () 16 | if DoesEntityExist(object) then return true end 17 | end, ('Failed to spawn prop %s'):format(modelHash), sharedConfig.timeout) 18 | 19 | if exists then 20 | local netid = NetworkGetNetworkIdFromEntity(object) 21 | objects[#objects+1] = netid 22 | if isFixed then 23 | local coordsState = GlobalState.fixedCoords 24 | coordsState[netid] = GetEntityCoords(object) 25 | GlobalState.fixedCoords = coordsState 26 | end 27 | 28 | return objects, netid 29 | end 30 | end 31 | 32 | ---Spawns spike strip 33 | ---@param coords vector3 34 | ---@param heading number 35 | lib.callback.register('police:server:spawnSpikeStrip', function(_, coords, heading) 36 | if #GlobalState.spikeStrips > sharedConfig.maxSpikes then return nil, 'error.no_spikestripe' end 37 | local objects, netid = spawnObject(GlobalState.spikeStrips, `P_ld_stinger_s`, 38 | vector4(coords.x, coords.y, coords.z, heading), 1, true) 39 | GlobalState.spikeStrips = objects 40 | 41 | return netid 42 | end) 43 | 44 | ---Spawns police object 45 | ---@param modelHash string 46 | ---@param coords vector3 47 | ---@param heading number 48 | lib.callback.register('police:server:spawnObject', function(_, modelHash, coords, heading) 49 | local objects, netid = spawnObject(GlobalState.policeObjects, modelHash, 50 | vector4(coords.x, coords.y, coords.z, heading), 0.3) 51 | GlobalState.policeObjects = objects 52 | 53 | return netid 54 | end) 55 | 56 | local function despawnObject(objects, index) 57 | DeleteEntity(NetworkGetEntityFromNetworkId(objects[index])) 58 | objects[index] = objects[#objects] 59 | objects[#objects] = nil 60 | return objects 61 | end 62 | 63 | RegisterNetEvent('police:server:despawnSpikeStrip', function(index) 64 | GlobalState.spikeStrips = despawnObject(GlobalState.spikeStrips, index) 65 | end) 66 | 67 | RegisterNetEvent('police:server:despawnObject', function(index) 68 | GlobalState.policeObjects = despawnObject(GlobalState.policeObjects, index) 69 | end) 70 | 71 | AddEventHandler('onResourceStart', function (resourceName) 72 | if (GetCurrentResourceName() ~= resourceName) then return end 73 | GlobalState.spikeStrips = {} 74 | GlobalState.policeObjects = {} 75 | GlobalState.fixedCoords = {} 76 | end) 77 | 78 | AddEventHandler('onResourceStop', function (resourceName) 79 | if (GetCurrentResourceName() ~= resourceName) then return end 80 | local spikeStrips = GlobalState.spikeStrips 81 | for i = 1, #spikeStrips do 82 | DeleteEntity(NetworkGetEntityFromNetworkId(spikeStrips[i])) 83 | end 84 | 85 | local policeObjects = GlobalState.policeObjects 86 | for i = 1, #policeObjects do 87 | DeleteEntity(NetworkGetEntityFromNetworkId(policeObjects[i])) 88 | end 89 | 90 | GlobalState.spikeStrips = nil 91 | GlobalState.policeObjects = nil 92 | GlobalState.fixedCoords = nil 93 | end) 94 | -------------------------------------------------------------------------------- /server/storage.lua: -------------------------------------------------------------------------------- 1 | function IsVehicleOwned(plate) 2 | local count = MySQL.scalar.await('SELECT count(*) FROM player_vehicles WHERE plate = ?', {plate}) 3 | return count > 0 4 | end 5 | 6 | function FetchImpoundedVehicles() 7 | local result = MySQL.query.await('SELECT * FROM player_vehicles WHERE state = 2') 8 | if result[1] then 9 | return result 10 | end 11 | end 12 | 13 | function Unimpound(plate) 14 | MySQL.update('UPDATE player_vehicles SET state = 0 WHERE plate = ?', {plate}) 15 | end 16 | 17 | function ImpoundWithPrice(price, body, engine, fuel, plate) 18 | MySQL.query('UPDATE player_vehicles SET state = 0, depotprice = ?, body = ?, engine = ?, fuel = ? WHERE plate = ?', {price, body, engine, fuel, plate}) 19 | end 20 | 21 | function ImpoundForever(body, engine, fuel, plate) 22 | MySQL.query('UPDATE player_vehicles SET state = 2, body = ?, engine = ?, fuel = ? WHERE plate = ?', {body, engine, fuel, plate}) 23 | end --------------------------------------------------------------------------------