├── .eslintrc.js ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── autosave_map.json ├── bridge └── runtime │ ├── Ben.Demystifier.dll │ ├── Bootstrapper.dll │ ├── Bootstrapper.xml │ ├── Colorful.Console.dll │ ├── NeoSmart.Hashing.dll │ └── xxHash.dll ├── bt.dat ├── bt_old.dat ├── client ├── index.ts ├── package-lock.json ├── package.json └── tsconfig.json ├── client_packages ├── MapEditor │ ├── MapEditor.js │ ├── Natives.js │ └── object_data.js ├── client │ ├── index.js │ └── index.js.map ├── index.js ├── index.js.map ├── index.ts ├── noclip │ └── index.js ├── packages │ └── rpg │ │ └── interfaces │ │ ├── brazucas-eventos.js │ │ └── brazucas-eventos.js.map └── sistemas │ └── taxi.js ├── common ├── brazucas-server.js ├── brazucas-server.js.map ├── brazucas-server.ts ├── database │ ├── config │ │ └── config.json.dist │ ├── database.js │ ├── database.js.map │ ├── database.ts │ ├── models │ │ ├── BancoConta.js │ │ ├── BancoConta.js.map │ │ ├── BancoConta.ts │ │ ├── BancoTipoTransacao.js │ │ ├── BancoTipoTransacao.js.map │ │ ├── BancoTipoTransacao.ts │ │ ├── BancoTransacao.js │ │ ├── BancoTransacao.js.map │ │ ├── BancoTransacao.ts │ │ ├── Jogador.js │ │ ├── Jogador.js.map │ │ ├── Jogador.ts │ │ ├── Notificacao.js │ │ ├── Notificacao.js.map │ │ ├── Notificacao.ts │ │ ├── Profissao.js │ │ ├── Profissao.js.map │ │ ├── Profissao.ts │ │ ├── Propriedade.js │ │ ├── Propriedade.js.map │ │ ├── Propriedade.ts │ │ ├── TipoPropriedade.js │ │ ├── TipoPropriedade.js.map │ │ ├── TipoPropriedade.ts │ │ ├── Veiculo.js │ │ ├── Veiculo.js.map │ │ └── Veiculo.ts │ └── seeders │ │ ├── 20190127204953-TipoPropriedade.js │ │ └── 20190128132621-BancoTipoTransacao.js ├── environment.js ├── environment.js.map ├── environment.ts ├── interfaces.js ├── interfaces.js.map ├── interfaces.ts └── util │ ├── skins.js │ ├── skins.js.map │ ├── skins.ts │ ├── util.js │ ├── util.js.map │ ├── util.ts │ ├── vehicles.js │ ├── vehicles.js.map │ ├── vehicles.ts │ ├── weapons.js │ ├── weapons.js.map │ └── weapons.ts ├── conf.json.dist ├── demo ├── demo1.jpeg ├── demo2.jpeg ├── demo3.png └── demo4.png ├── docker-compose.yml ├── docker ├── ragemp.yml └── start_server.sh ├── lib └── cli.js ├── node.dll ├── package.json ├── packages ├── MapEditor │ ├── MapEditorServer.js │ └── index.js ├── index.js └── rpg │ ├── consts │ ├── rpg-consts.js │ ├── rpg-consts.js.map │ ├── rpg-consts.ts │ ├── status.js │ ├── status.js.map │ └── status.ts │ ├── handler │ ├── playerChat.js │ ├── playerChat.js.map │ ├── playerChat.ts │ ├── playerDeath.js │ ├── playerDeath.js.map │ ├── playerDeath.ts │ ├── playerEnterVehicle.js │ ├── playerEnterVehicle.js.map │ ├── playerEnterVehicle.ts │ ├── playerExitVehicle.js │ ├── playerExitVehicle.js.map │ ├── playerExitVehicle.ts │ ├── playerJoin.js │ ├── playerJoin.js.map │ ├── playerJoin.ts │ ├── playerQuit.js │ ├── playerQuit.js.map │ └── playerQuit.ts │ ├── index.js │ ├── index.js.map │ ├── index.ts │ ├── interfaces │ ├── brazucas-eventos.js │ ├── brazucas-eventos.js.map │ ├── brazucas-eventos.ts │ ├── death-reason.js │ ├── death-reason.js.map │ ├── death-reason.ts │ ├── mp.veiculo-cor.interface.js │ ├── mp.veiculo-cor.interface.js.map │ ├── mp.veiculo-cor.interface.ts │ ├── player.interface.js │ ├── player.interface.js.map │ ├── player.interface.ts │ ├── veiculo.interface.js │ ├── veiculo.interface.js.map │ └── veiculo.interface.ts │ ├── lib │ ├── commands │ │ ├── comandos-admin.js │ │ ├── comandos-admin.js.map │ │ ├── comandos-admin.ts │ │ ├── commands.js │ │ ├── commands.js.map │ │ └── commands.ts │ ├── events │ │ ├── events.js │ │ ├── events.js.map │ │ └── events.ts │ ├── functions │ │ ├── bootstrap.js │ │ ├── bootstrap.js.map │ │ ├── bootstrap.ts │ │ ├── player.js │ │ ├── player.js.map │ │ └── player.ts │ └── timers │ │ ├── player-timer.js │ │ ├── player-timer.js.map │ │ ├── player-timer.ts │ │ ├── vehicles-timer.js │ │ ├── vehicles-timer.js.map │ │ └── vehicles-timer.ts │ ├── maps │ ├── bulldozer.json │ ├── bulldozer.xml │ ├── circulos.json │ ├── circulos.xml │ ├── naufragos.json │ ├── naufragos.xml │ ├── resta1.json │ └── resta1.xml │ ├── providers │ ├── player.provider.js │ ├── player.provider.js.map │ ├── player.provider.ts │ ├── veiculo.provider.js │ ├── veiculo.provider.js.map │ ├── veiculo.provider.ts │ ├── voice-chat.provider.js │ ├── voice-chat.provider.js.map │ └── voice-chat.provider.ts │ ├── rpg.js │ ├── rpg.js.map │ └── rpg.ts ├── server ├── tsconfig.json ├── tslint.json └── yarn.lock /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'env': { 3 | 'node': true, 4 | 'es6': true 5 | }, 6 | 'extends': 'eslint:recommended', 7 | 'rules': { 8 | 'indent': [2, 4], 9 | 'quotes': [2, 'single', { 'allowTemplateLiterals': true, 'avoidEscape': true } ], 10 | 'semi': [2, 'always'], 11 | 'brace-style': [2, '1tbs'], 12 | 'array-bracket-spacing': [2, 'never'], 13 | 'camelcase': [2, {'properties': 'always'}], 14 | 'keyword-spacing': [2], 15 | 'eol-last': [2], 16 | 'no-trailing-spaces': [2], 17 | 'no-unused-vars': [1] 18 | }, 19 | 'globals': { 20 | 'mp': true, 21 | '$': true, 22 | 'document': true, 23 | 'window': true 24 | } 25 | }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | *.iml 61 | .idea 62 | .listcache 63 | serviceAccountKey.json 64 | conf.json 65 | /dist 66 | 67 | /common/database/config/config.json 68 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Base image from https://github.com/Disinterpreter/docker-ragemp/blob/master/Dockerfile 2 | 3 | FROM debian:jessie 4 | 5 | ENV RAGEMP 0.3.5 6 | 7 | MAINTAINER Disinterpreter "disinterpreter@protonmail.ch" & Pedro Papadópolis 8 | 9 | EXPOSE 20005 10 | EXPOSE 22005/udp 11 | EXPOSE 22006 12 | 13 | RUN echo 'deb http://httpredir.debian.org/debian testing main contrib non-free' > /etc/apt/sources.list && \ 14 | apt-get update && \ 15 | apt-get install -y -t testing gcc wget && \ 16 | apt-get clean 17 | 18 | RUN apt-get update && apt-get install -y --no-install-recommends apt-utils 19 | 20 | RUN apt-get install git python-pip openssh-client -y 21 | 22 | RUN apt-get install curl software-properties-common && \ 23 | curl -sL https://deb.nodesource.com/setup_10.x | bash - && \ 24 | apt-get install nodejs && \ 25 | curl -L https://npmjs.org/install.sh | - 26 | 27 | RUN useradd ragemp && \ 28 | # Mountable volume 29 | mkdir /ragemp 30 | 31 | # Download and extract 32 | ADD server /tmp/ 33 | 34 | RUN mkdir /opt/x64/ && \ 35 | mv /tmp/server /opt/x64/server 36 | 37 | RUN chmod +x /opt/x64/server 38 | 39 | ADD docker/start_server.sh /opt 40 | 41 | RUN chmod +x /opt/start_server.sh 42 | 43 | ENTRYPOINT ["/opt/start_server.sh"] 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 brazucas 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # REPOSITÓRIO ARQUIVADO 2 | **O servidor agora está sendo desenvolvido com código-fonte fechado, este repositório foi arquivado e permancerá disponível apenas como histórico.** 3 | 4 | 5 | 6 | ================================================ 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | # Histórico 17 | 18 | ##### Sobre o Brazuca's 19 | 20 | O Brazuca's é um servidor de jogo de uma modificação do jogo Grand Theft Auto: San Andreas chamado SA-MP (San Andreas Multiplayer), que permite que qualquer pessoa crie seu próprio servidor do jogo e outras pessoas possam jogar nele, utilizando uma API fornecida pelos desenvolvedores do mod. Mais informações em http://sa-mp.com. O Brazuca's surgiu em 2006 e passou por altos e baixos, até que em meados de 2014 passou a ficar praticamente sem jogadores. 21 | 22 | O RageMP (Modificação do jogo GTA: V, que basicamente segue a mesma ideia do SA-MP) é a aposta do Brazuca's para continuar sendo um servidor de GTA popular, nosso objetivo é oferecer a melhor experiência de jogo possível, tanto para jogadores casuais como hardcore. 23 | 24 | ##### Porque não o GTA Network? 25 | Nós iniciamos um projeto lá, mas depois de alguns meses houve um anúncio basicamente dizendo que o GTA Network seria integrado ao RageMP. 26 | 27 | ##### Expectativas 28 | 29 | Nós não daremos dicas, anúncios ou data de lançamento enquanto o servidor não estiver completamente jogável. Tudo relacionamento ao desenvolvimento do servidor estará disponível apenas nesse repositório do GitHUB, sinta-se a vontade para fazer um fork ou "watch" no projeto. 30 | 31 | ##### Código-Aberto? 32 | 33 | Nós manteremos o código aberto até o anúncio oficial da abertura do servidor, ou até mesmo depois disso. 34 | 35 | ##### Objetivo inicial 36 | 37 | A primeira versão do servidor irá contemplar o RPG e os Minigames, nossa ideia, diferente de como era no SA-MP, é manter o servidor online 24/7 no mesmo modo de jogo. 38 | 39 | ##### Roadmap 40 | 41 | É possível acompanhar como está o desenvolvimento de todas as funcionalidades que existirão através da nossa página de [projetos](https://github.com/brazucas/ragemp/projects). 42 | 43 | ##### Posso entrar no time de testes? 44 | Atualmente nosso time de testes está cheio. 45 | 46 | ##### Posso entrar no time de desenvolvimento? 47 | 48 | Claro! o projeto é de código aberto e qualquer um pode contribuir, basta fazer um fork e pull requests. 49 | 50 | # Abrindo o servidor local 51 | 52 | 1. Faça clone do projeto. 53 | 2. Faça uma cópia do arquivo ```conf.json.dist``` para ```conf.json```. 54 | 3. Abra as portas 22005/udp e 22006 no seu firewall. 55 | 4. Baixe e instale o Docker: https://docs.docker.com/install/ 56 | 57 | 6. Execute o arquivo utilizando o seguinte comando: 58 | > docker-compose -f docker/ragemp.yml up -d 59 | 60 | Aguarde alguns minutos para que o Docker baixe as imagens e suba os containers. 61 | 62 | 7. Comandos úteis 63 | - Iniciar servidor: ```docker start ragemp_server```. 64 | - Parar servidor: ```docker stop ragemp_server```. 65 | - Reiniciar servidor: ```docker restart ragemp_server```. 66 | - Logs do servidor: ```docker service logs ragemp_server -f```. 67 | - Destruir o stack: ```docker stack rm ragemp```. 68 | 69 | 8. Acesse o servidor pelo RageMP utilizando a opção "Direct Connect", com o IP do seu computador. 70 | 71 | # Contribuindo 72 | 73 | 1. Siga os passos para abrir o servidor local. 74 | 2. Instale o NodeJS, NPM, Typescript, Docker e o Angular CLI. 75 | 76 | - NodeJS: https://nodejs.org/en/download/ 77 | - NPM: https://docs.npmjs.com/cli/install 78 | - Typescript: Basta executar o comando ```npm i typescript -g```. 79 | - Angular CLI: Basta executar o comando ```npm i @angular/cli -g```. 80 | - Docker: https://docs.docker.com/install/ 81 | 3. Faça instalação dos pacotes: 82 | > npm install 83 | 84 | 4. Inicialize o Docker 85 | 86 | 5. Suba os containers do Docker responsáveis pelo o ambiente de desenvolvimento: 87 | > docker-compose up -d 88 | 89 | Acesse o link: http://localhost:4200/ para acessar o projeto. A página de login, por exemplo, pode ser vista em: http://localhost:4200/#/login. 90 | 91 | 6. Para fazer a build do código client-side para ser utilizado no servidor, execute o seguinte comando: 92 | > docker exec -it ragemp_ragemp_browser_server_1 bash -c "ng build --output-path=../client_packages/browser/ --prod" 93 | 94 | 6. Para parar os containers do Docker execute o seguinte comando: 95 | > docker-compose down 96 | -------------------------------------------------------------------------------- /autosave_map.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "model": 3748955783, 4 | "x": -758.05517578125, 5 | "y": -2550.11083984375, 6 | "z": 29.65949249267578, 7 | "rx": 0, 8 | "ry": 0, 9 | "rz": 0, 10 | "col": true, 11 | "freeze": true 12 | }, 13 | { 14 | "model": 3748955783, 15 | "x": -758.5108032226562, 16 | "y": -2551.04150390625, 17 | "z": 29.65949249267578, 18 | "rx": 0, 19 | "ry": 0, 20 | "rz": 0, 21 | "col": true, 22 | "freeze": true 23 | }, 24 | { 25 | "model": 3748955783, 26 | "x": -778.3053588867188, 27 | "y": -2498.50146484375, 28 | "z": 13.029151916503906, 29 | "rx": 0, 30 | "ry": 0, 31 | "rz": 0, 32 | "col": true, 33 | "freeze": true 34 | }, 35 | { 36 | "model": 4263848243, 37 | "x": -786.5042724609375, 38 | "y": -2486.66455078125, 39 | "z": 12.97791862487793, 40 | "rx": 0, 41 | "ry": 0, 42 | "rz": 0, 43 | "col": true, 44 | "freeze": true 45 | } 46 | ] -------------------------------------------------------------------------------- /bridge/runtime/Ben.Demystifier.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/bridge/runtime/Ben.Demystifier.dll -------------------------------------------------------------------------------- /bridge/runtime/Bootstrapper.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/bridge/runtime/Bootstrapper.dll -------------------------------------------------------------------------------- /bridge/runtime/Colorful.Console.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/bridge/runtime/Colorful.Console.dll -------------------------------------------------------------------------------- /bridge/runtime/NeoSmart.Hashing.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/bridge/runtime/NeoSmart.Hashing.dll -------------------------------------------------------------------------------- /bridge/runtime/xxHash.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/bridge/runtime/xxHash.dll -------------------------------------------------------------------------------- /bt.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/bt.dat -------------------------------------------------------------------------------- /bt_old.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/bt_old.dat -------------------------------------------------------------------------------- /client/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/ragemp-c": { 8 | "version": "git+https://github.com/CocaColaBear/types-ragemp-c.git#40266dacf5996f922801ac8ead22525a776ccf38", 9 | "from": "git+https://github.com/CocaColaBear/types-ragemp-c.git" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@types/ragemp-c": "git+https://github.com/CocaColaBear/types-ragemp-c.git" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "target": "es6", 5 | "module": "commonjs", 6 | "sourceMap": true, 7 | "moduleResolution": "node", 8 | "lib": [ 9 | "es5", "es2015.promise", "dom", "es2015" 10 | ], 11 | "allowSyntheticDefaultImports": true, 12 | "declaration": false, 13 | "emitDecoratorMetadata": true, 14 | "experimentalDecorators": true, 15 | "skipLibCheck": true, 16 | "outDir": "../client_packages", 17 | "rootDir": "../" 18 | }, 19 | "typeRoots": [ 20 | "node_modules/@types" 21 | ], 22 | "include": [ 23 | "./**/*.ts" 24 | ], 25 | } 26 | 27 | -------------------------------------------------------------------------------- /client_packages/MapEditor/Natives.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * 2 - 1.43 4 | * 1 - 1.42 5 | * 0 - 1.41 6 | * -1 - invalid version 7 | */ 8 | const __GameVersion__ = mp.game.streaming.isModelValid(0x4ABEBF23) ? 2 : mp.game.streaming.isModelValid(0x46699F47) ? 1 : mp.game.streaming.isModelValid(0xA52F6866) ? 0 : -1; 9 | 10 | const __Natives__ = { 11 | SET_ENTITY_ALPHA: ['0x6B7820A04F7672B8', '0x93271EC996EE94D2', '0xCFA0B475EBE9E2B7'], 12 | RESET_ENTITY_ALPHA: ['0x646D2E88F7E1B20A', '0x2087B43C7787E236', '0x76932C1879032DCE'], 13 | GET_ENTITY_MODEL: ['0xE9559A12052415BE', '0x4F69FBD64CDF125B', '0x82FF3DFBC3965CC0'] 14 | }; 15 | 16 | const proxyNatives = new Proxy(__Natives__, { 17 | get: (target, name, receiver) => __Natives__[name][__GameVersion__] 18 | }); 19 | 20 | exports = proxyNatives; 21 | -------------------------------------------------------------------------------- /client_packages/index.js: -------------------------------------------------------------------------------- 1 | require('client/index.js'); 2 | require('noclip/index.js'); 3 | require("MapEditor/MapEditor.js"); 4 | require("MapEditor/object_data.js"); 5 | require("MapEditor/Natives.js"); 6 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /client_packages/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC3B,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAClC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AACpC,OAAO,CAAC,sBAAsB,CAAC,CAAC"} -------------------------------------------------------------------------------- /client_packages/index.ts: -------------------------------------------------------------------------------- 1 | require('client/index.js'); 2 | require('noclip/index.js'); 3 | require("MapEditor/MapEditor.js"); 4 | require("MapEditor/object_data.js"); 5 | require("MapEditor/Natives.js"); 6 | -------------------------------------------------------------------------------- /client_packages/noclip/index.js: -------------------------------------------------------------------------------- 1 | var getNormalizedVector = function(vector) { 2 | var mag = Math.sqrt( 3 | vector.x * vector.x + vector.y * vector.y + vector.z * vector.z 4 | ); 5 | vector.x = vector.x / mag; 6 | vector.y = vector.y / mag; 7 | vector.z = vector.z / mag; 8 | return vector; 9 | }; 10 | var getCrossProduct = function(v1, v2) { 11 | var vector = new mp.Vector3(0, 0, 0); 12 | vector.x = v1.y * v2.z - v1.z * v2.y; 13 | vector.y = v1.z * v2.x - v1.x * v2.z; 14 | vector.z = v1.x * v2.y - v1.y * v2.x; 15 | return vector; 16 | }; 17 | var bindVirtualKeys = { 18 | F2: 0x71, 19 | F7: 0x76, 20 | }; 21 | var bindASCIIKeys = { 22 | Q: 69, 23 | E: 81, 24 | LCtrl: 17, 25 | Shift: 16 26 | }; 27 | mp.game.graphics.notify('~r~NoClip ~w~by ~b~Morbo'); 28 | var isNoClip = false; 29 | var noClipCamera; 30 | var shiftModifier = false; 31 | var controlModifier = false; 32 | var localPlayer = mp.players.local; 33 | mp.keys.bind(bindVirtualKeys.F7, true, function() { 34 | isNoClip = !isNoClip; 35 | mp.game.ui.displayRadar(!isNoClip); 36 | if (isNoClip) { 37 | startNoClip(); 38 | } else { 39 | stopNoClip(); 40 | } 41 | }); 42 | function startNoClip() { 43 | mp.game.graphics.notify('NoClip ~g~activated'); 44 | var camPos = new mp.Vector3( 45 | localPlayer.position.x, 46 | localPlayer.position.y, 47 | localPlayer.position.z 48 | ); 49 | var camRot = mp.game.cam.getGameplayCamRot(2); 50 | noClipCamera = mp.cameras.new('default', camPos, camRot, 45); 51 | noClipCamera.setActive(true); 52 | mp.game.cam.renderScriptCams(true, false, 0, true, false); 53 | localPlayer.freezePosition(true); 54 | localPlayer.setInvincible(true); 55 | localPlayer.setVisible(false, false); 56 | localPlayer.setCollision(false, false); 57 | } 58 | function stopNoClip() { 59 | mp.game.graphics.notify('NoClip ~r~disabled'); 60 | if (noClipCamera) { 61 | localPlayer.position = noClipCamera.getCoord(); 62 | localPlayer.setHeading(noClipCamera.getRot(2).z); 63 | noClipCamera.destroy(true); 64 | noClipCamera = null; 65 | } 66 | mp.game.cam.renderScriptCams(false, false, 0, true, false); 67 | localPlayer.freezePosition(false); 68 | localPlayer.setInvincible(false); 69 | localPlayer.setVisible(true, false); 70 | localPlayer.setCollision(true, false); 71 | } 72 | mp.events.add('render', function() { 73 | if (!noClipCamera || mp.gui.cursor.visible) { 74 | return; 75 | } 76 | controlModifier = mp.keys.isDown(bindASCIIKeys.LCtrl); 77 | shiftModifier = mp.keys.isDown(bindASCIIKeys.Shift); 78 | var rot = noClipCamera.getRot(2); 79 | var fastMult = 1; 80 | var slowMult = 1; 81 | if (shiftModifier) { 82 | fastMult = 3; 83 | } else if (controlModifier) { 84 | slowMult = 0.5; 85 | } 86 | var rightAxisX = mp.game.controls.getDisabledControlNormal(0, 220); 87 | var rightAxisY = mp.game.controls.getDisabledControlNormal(0, 221); 88 | var leftAxisX = mp.game.controls.getDisabledControlNormal(0, 218); 89 | var leftAxisY = mp.game.controls.getDisabledControlNormal(0, 219); 90 | var pos = noClipCamera.getCoord(); 91 | var rr = noClipCamera.getDirection(); 92 | var vector = new mp.Vector3(0, 0, 0); 93 | vector.x = rr.x * leftAxisY * fastMult * slowMult; 94 | vector.y = rr.y * leftAxisY * fastMult * slowMult; 95 | vector.z = rr.z * leftAxisY * fastMult * slowMult; 96 | var upVector = new mp.Vector3(0, 0, 1); 97 | var rightVector = getCrossProduct( 98 | getNormalizedVector(rr), 99 | getNormalizedVector(upVector) 100 | ); 101 | rightVector.x *= leftAxisX * 0.5; 102 | rightVector.y *= leftAxisX * 0.5; 103 | rightVector.z *= leftAxisX * 0.5; 104 | var upMovement = 0.0; 105 | if (mp.keys.isDown(bindASCIIKeys.Q)) { 106 | upMovement = 0.5; 107 | } 108 | var downMovement = 0.0; 109 | if (mp.keys.isDown(bindASCIIKeys.E)) { 110 | downMovement = 0.5; 111 | } 112 | mp.players.local.position = new mp.Vector3( 113 | pos.x + vector.x + 1, 114 | pos.y + vector.y + 1, 115 | pos.z + vector.z + 1 116 | ); 117 | mp.players.local.heading = rr.z; 118 | noClipCamera.setCoord( 119 | pos.x - vector.x + rightVector.x, 120 | pos.y - vector.y + rightVector.y, 121 | pos.z - vector.z + rightVector.z + upMovement - downMovement 122 | ); 123 | noClipCamera.setRot( 124 | rot.x + rightAxisY * -5.0, 125 | 0.0, 126 | rot.z + rightAxisX * -5.0, 127 | 2 128 | ); 129 | }); 130 | -------------------------------------------------------------------------------- /client_packages/packages/rpg/interfaces/brazucas-eventos.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var BrazucasEventos; 4 | (function (BrazucasEventos) { 5 | BrazucasEventos["BROWSER"] = "browser"; 6 | BrazucasEventos["SERVER"] = "server"; 7 | BrazucasEventos["AUTENTICAR_JOGADOR"] = "AutenticarJogador"; 8 | BrazucasEventos["CRIAR_VEICULO"] = "CriarVeiculo"; 9 | BrazucasEventos["REGISTRAR_JOGADOR"] = "RegistrarJogador"; 10 | BrazucasEventos["AUTENTICACAO_RESULTADO"] = "AutenticacaoResultado"; 11 | BrazucasEventos["REGISTRO_RESULTADO"] = "RegistroResultado"; 12 | BrazucasEventos["DADOS_JOGADOR"] = "DadosJogador"; 13 | BrazucasEventos["ATUALIZAR_DADOS_JOGADOR"] = "AtualizarDadosJogador"; 14 | BrazucasEventos["INICIAR_NAVEGADOR"] = "IniciarNavegador"; 15 | BrazucasEventos["CURSOR"] = "cursor"; 16 | BrazucasEventos["HABILITAR_VOICE_CHAT"] = "HabilitarVoiceChat"; 17 | BrazucasEventos["DESABILITAR_VOICE_CHAT"] = "DesabilitarVoiceChat"; 18 | BrazucasEventos["ANIMACAO_VOICE_CHAT"] = "AnimacaoVoiceChat"; 19 | BrazucasEventos["ATUALIZAR_FOME"] = "AtualizarFome"; 20 | BrazucasEventos["ATUALIZAR_SEDE"] = "AtualizarSede"; 21 | BrazucasEventos["ATUALIZAR_SONO"] = "AtualizarSono"; 22 | BrazucasEventos["ATUALIZAR_FORCA_FISICA"] = "AtualizarForcaFisica"; 23 | BrazucasEventos["VISUALIZAR_ANIMACAO"] = "VisualizarAnimacao"; 24 | })(BrazucasEventos = exports.BrazucasEventos || (exports.BrazucasEventos = {})); 25 | //# sourceMappingURL=brazucas-eventos.js.map -------------------------------------------------------------------------------- /client_packages/packages/rpg/interfaces/brazucas-eventos.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"brazucas-eventos.js","sourceRoot":"","sources":["../../../../packages/rpg/interfaces/brazucas-eventos.ts"],"names":[],"mappings":";;AAAA,IAAY,eAoBX;AApBD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,oCAAiB,CAAA;IACjB,2DAAwC,CAAA;IACxC,iDAA8B,CAAA;IAC9B,yDAAsC,CAAA;IACtC,mEAAgD,CAAA;IAChD,2DAAwC,CAAA;IACxC,iDAA8B,CAAA;IAC9B,oEAAiD,CAAA;IACjD,yDAAsC,CAAA;IACtC,oCAAiB,CAAA;IACjB,8DAA2C,CAAA;IAC3C,kEAA+C,CAAA;IAC/C,4DAAyC,CAAA;IACzC,mDAAgC,CAAA;IAChC,mDAAgC,CAAA;IAChC,mDAAgC,CAAA;IAChC,kEAA+C,CAAA;IAC/C,6DAA0C,CAAA;AAC5C,CAAC,EApBW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAoB1B"} -------------------------------------------------------------------------------- /client_packages/sistemas/taxi.js: -------------------------------------------------------------------------------- 1 | let vehicle ,vehSeat, vehMaxSpeed = null; 2 | let chat = false; 3 | let MissaoTaxi = 0; 4 | let cpEstacao = null; 5 | let cpEntrega = null; 6 | let ehUmTaxi = false; 7 | 8 | mp.keys.bind(0x54, true, (player) => { // If Chat was triggered 9 | if (!chat) { 10 | chat = true; 11 | } 12 | }); 13 | 14 | mp.keys.bind(0x0D, true, (player) => { // If Chat was stopped. 15 | if (chat) { 16 | chat = false; 17 | } 18 | }); 19 | 20 | mp.events.add('VehicleEnter', (seat) => { 21 | if (seat == -1) { 22 | vehSeat = seat; 23 | vehicle = mp.players.local.vehicle; 24 | let modelo = 'taxi'; 25 | let modeloHash = mp.game.joaat(modelo); 26 | if (vehicle.model === modeloHash) { 27 | mp.game.graphics.notify(`Aperte 2 para iniciar as missoes de taxi.`); 28 | ehUmTaxi = true; 29 | } 30 | } 31 | }); 32 | 33 | mp.events.add('VehicleExit', (seat) => { // Reseting Data when driver exits the vehicle. 34 | vehicle = null; 35 | vehSeat = -3; 36 | ehUmTaxi = false; 37 | }); 38 | 39 | mp.events.add('playerEnterCheckpoint', (player, checkpoint) => { 40 | if (MissaoTaxi == 1 && ehUmTaxi) { 41 | if (cpEstacao) cpEstacao.destroy(); 42 | cpEstacao = null; 43 | cpEntrega = mp.checkpoints.new(1, new mp.Vector3(237.73, -369.84, 43.5), 3.5, 44 | { 45 | direction: new mp.Vector3(237.73, -369.84, 43.5), 46 | color: [255,0,0,255], 47 | visible: true, 48 | dimension: 0 49 | }); 50 | mp.game.ui.setNewWaypoint(237.73, -369.84); 51 | MissaoTaxi = 2; 52 | mp.gui.chat.push('Eu sei que odeia este trabalho... FODA-SE!! E entregue isto! O Cliente está esperando!'); 53 | } else if (MissaoTaxi == 2 && cpEntrega && ehUmTaxi) { 54 | if (cpEntrega) cpEntrega.destroy(); 55 | cpEntrega = null; 56 | cpEstacao = mp.checkpoints.new(1, new mp.Vector3(-110.49005, -1991.33044, 17.62281), 3.5, 57 | { 58 | direction: new mp.Vector3(-110.49005, -1991.33044, 17.62281), 59 | color: [255,0,0,255], 60 | visible: true, 61 | dimension: 0 62 | }); 63 | mp.game.ui.setNewWaypoint(-110.49005, -1991.33044); 64 | mp.gui.chat.push('Entregue! Tá aí sua gorjeta, agora volte para pegar mais produtos...'); 65 | MissaoTaxi = 1; 66 | } 67 | }); 68 | 69 | mp.keys.bind(0x32, true, _ => { // binding 2 to the cruise speed 70 | let modelo = 'taxi'; 71 | let modeloHash = mp.game.joaat(modelo); 72 | if (vehSeat == -1 && vehicle && !chat && vehicle.model == modeloHash) { // if he/she was driver and chat isn't active. 73 | if (MissaoTaxi == 0) { // if cruise was disabled 74 | MissaoTaxi = 1; 75 | cpEstacao = mp.checkpoints.new(1, new mp.Vector3(-110.49005, -1991.33044, 17.62281), 3.5, 76 | { 77 | direction: new mp.Vector3(-110.49005, -1991.33044, 17.62281), 78 | color: [255,0,0,255], 79 | visible: true, 80 | dimension: 0 81 | }); 82 | mp.game.ui.setNewWaypoint(-110.49005, -1991.33044); 83 | mp.gui.chat.push('Dirija até o local indicado no mapa para iniciar as entregas!'); 84 | } else { 85 | MissaoTaxi = 0; 86 | mp.gui.chat.push('Serviço de entregas cancelado!'); 87 | if (cpEstacao) { 88 | cpEstacao.destroy(); 89 | cpEstacao = null; 90 | } else if (cpEntrega) { 91 | cpEntrega.destroy(); 92 | cpEntrega = null; 93 | } 94 | } 95 | } else { 96 | return false; 97 | } 98 | }); 99 | 100 | mp.events.add('render', () => { 101 | 102 | if (vehicle) 103 | mp.game.graphics.drawText(`${(vehicle.getSpeed() * 3.6).toFixed(0)} km/h`, 7, [255, 255, 255, 185], 0.9, 0.9, true, 0.5, 0.005); // It was made to debug the script. 104 | }); 105 | 106 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /common/brazucas-server.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"brazucas-server.js","sourceRoot":"","sources":["brazucas-server.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /common/brazucas-server.ts: -------------------------------------------------------------------------------- 1 | import { BehaviorSubject } from 'rxjs'; 2 | import 'rxjs/add/observable/forkJoin'; 3 | import 'rxjs/add/observable/of'; 4 | import { forkJoin } from 'rxjs/internal/observable/forkJoin'; 5 | import { Observable } from 'rxjs/Observable'; 6 | import * as Sequelize from 'sequelize'; 7 | import { DadosVeiculo } from '../browser/src/app/services/veiculo.service'; 8 | import { DadosRegistro } from '../browser/src/interfaces/login.interface'; 9 | import { Database } from './database/database'; 10 | import { Jogador } from './database/models/Jogador'; 11 | import { Veiculo } from './database/models/Veiculo'; 12 | import { PLAYER_NAME_MAXLENGTH, PLAYER_NAME_MINLENGTH, PLAYER_NAME_REGEXP } from './interfaces'; 13 | import { bcryptCompare, bcryptHash, hexToRgb, soNumeros } from './util/util'; 14 | import { Veiculos } from './util/vehicles'; 15 | import Bluebird = require('bluebird'); 16 | 17 | export class BrazucasServer { 18 | private database: Database; 19 | public isReady: BehaviorSubject = new BehaviorSubject(false); 20 | 21 | constructor() { 22 | this.database = new Database(); 23 | } 24 | 25 | public onload(): Observable { 26 | const fork = forkJoin( 27 | ...[ 28 | this.database.sync(), 29 | this.database.authenticate(), 30 | ], 31 | ); 32 | 33 | fork.subscribe(() => this.isReady.next(true)); 34 | 35 | return fork; 36 | } 37 | 38 | public loadPlayer(playerName: string): Bluebird { 39 | return Jogador.findOne({ 40 | ['where' as any]: { 41 | nome: Sequelize.where(Sequelize.fn('LOWER', Sequelize.col('nome')), '=', playerName.toLowerCase()) 42 | } 43 | }); 44 | } 45 | 46 | public async autenticarJogador(playerName: string, senha: string): Promise { 47 | const jogador = await this.loadPlayer(playerName); 48 | 49 | if (!jogador) { 50 | throw 'Jogador não encontrado'; 51 | } 52 | 53 | const autenticado = await bcryptCompare(senha, jogador.senha); 54 | 55 | return autenticado ? jogador : null; 56 | } 57 | 58 | public async registrarJogador(player: PlayerMp, dados: DadosRegistro): Promise { 59 | console.debug(`[REGISTRO] Novo jogador ${player.name}`); 60 | 61 | if ( 62 | !dados.senhaConfirma || !dados.senha || !dados.celular || !dados.email || 63 | !dados.senhaConfirma.length || !dados.senha.length || !dados.celular.length || !dados.email.length 64 | ) { 65 | throw 'Todos os campos devem ser informados'; 66 | } 67 | 68 | if (dados.senha !== dados.senhaConfirma) { 69 | throw 'As senhas informadas diferem'; 70 | } 71 | 72 | const playerNameClean = PLAYER_NAME_REGEXP.exec(player.name); 73 | 74 | if ( 75 | !playerNameClean || 76 | (playerNameClean[1].length !== player.name.length) || 77 | player.name.length < PLAYER_NAME_MINLENGTH || 78 | player.name.length > PLAYER_NAME_MAXLENGTH 79 | ) { 80 | throw 'Nick não permitido'; 81 | } 82 | 83 | const jogadorExistente = await this.loadPlayer(player.name); 84 | 85 | if (jogadorExistente) { 86 | throw 'Já existe um jogador cadastrado com esse nick'; 87 | } 88 | 89 | console.debug(`[REGISTRO] Criando jogador ${player.name}`); 90 | 91 | const senhaHash = await bcryptHash(dados.senha); 92 | 93 | const jogador = new Jogador({ 94 | nome: player.name, 95 | senha: (senhaHash as string), 96 | nivel: 1, 97 | email: dados.email, 98 | celular: soNumeros(dados.celular), 99 | }); 100 | 101 | return jogador.save(); 102 | } 103 | 104 | public async criarVeiculo(player: PlayerMp, dadosVeiculo: DadosVeiculo): Promise { 105 | console.debug(`[CRIAR VEICULO] Novo veículo criado por ${player.name}`); 106 | 107 | if (!Veiculos[dadosVeiculo.modelo]) { 108 | throw 'Modelo não encontrado'; 109 | } 110 | 111 | const rgbPrimaria = hexToRgb(dadosVeiculo.corPrimaria); 112 | const rgbSecundaria = hexToRgb(dadosVeiculo.corSecundaria); 113 | 114 | const jogador = await this.loadPlayer(player.name); 115 | 116 | if (!jogador) { 117 | throw 'Jogador não encontrado'; 118 | } 119 | 120 | const veiculo = new Veiculo({ 121 | placaOriginal: dadosVeiculo.placa, 122 | placaExibido: dadosVeiculo.placa, 123 | modelo: dadosVeiculo.modelo, 124 | posicaoX: dadosVeiculo.posicaoX, 125 | posicaoY: dadosVeiculo.posicaoY, 126 | posicaoZ: dadosVeiculo.posicaoZ, 127 | posicaoOriginalX: dadosVeiculo.posicaoX, 128 | posicaoOriginalY: dadosVeiculo.posicaoY, 129 | posicaoOriginalZ: dadosVeiculo.posicaoZ, 130 | rotacao: 0, 131 | transparencia: dadosVeiculo.transparencia, 132 | corPrimariaR: rgbPrimaria.r, 133 | corPrimariaG: rgbPrimaria.g, 134 | corPrimariaB: rgbPrimaria.b, 135 | corSecundariaR: rgbSecundaria.r, 136 | corSecundariaG: rgbSecundaria.g, 137 | corSecundariaB: rgbSecundaria.b, 138 | trancado: dadosVeiculo.trancado, 139 | motor: dadosVeiculo.motor, 140 | mundo: 0, 141 | valorOriginal: dadosVeiculo.valorOriginal, 142 | valorVenda: dadosVeiculo.valorVenda, 143 | aVenda: dadosVeiculo.aVenda, 144 | jogadorVeiculo: jogador, 145 | }); 146 | 147 | await veiculo.save(); 148 | 149 | const veiculoMp = mp.vehicles.new(Veiculos[dadosVeiculo.modelo], 150 | new mp.Vector3(parseFloat(dadosVeiculo.posicaoX), parseFloat(dadosVeiculo.posicaoY), parseFloat(dadosVeiculo.posicaoZ))); 151 | 152 | veiculoMp.engine = dadosVeiculo.motor; 153 | veiculoMp.locked = dadosVeiculo.trancado; 154 | veiculoMp.setColorRGB(rgbPrimaria.r, rgbPrimaria.g, rgbPrimaria.b, rgbSecundaria.r, rgbSecundaria.g, rgbSecundaria.b); 155 | veiculoMp.numberPlate = dadosVeiculo.placa; 156 | veiculoMp.alpha = dadosVeiculo.transparencia; 157 | 158 | veiculoMp.spawn(veiculoMp.position, 0); 159 | 160 | return true; 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /common/database/config/config.json.dist: -------------------------------------------------------------------------------- 1 | { 2 | "development": { 3 | "username": "root", 4 | "password": null, 5 | "database": "database_test", 6 | "host": "localhost", 7 | "port": "3306", 8 | "dialect": "mysql" 9 | }, 10 | "test": { 11 | "username": "root", 12 | "password": null, 13 | "database": "database_test", 14 | "host": "127.0.0.1", 15 | "dialect": "mysql" 16 | }, 17 | "production": { 18 | "username": "root", 19 | "password": null, 20 | "database": "database_production", 21 | "host": "127.0.0.1", 22 | "dialect": "mysql" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /common/database/database.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.Database = void 0; 4 | require("rxjs/add/observable/of"); 5 | const from_1 = require("rxjs/internal/observable/from"); 6 | const SequelizeOrigin = require("sequelize"); 7 | const sequelize_typescript_1 = require("sequelize-typescript"); 8 | const environment_1 = require("../environment"); 9 | class Database { 10 | constructor() { 11 | const Op = SequelizeOrigin.Op; 12 | this.handler = new sequelize_typescript_1.Sequelize({ 13 | host: environment_1.environment.database_host, 14 | port: environment_1.environment.database_port, 15 | database: environment_1.environment.database_name, 16 | pool: { 17 | max: 5, 18 | min: 0, 19 | idle: 10000, 20 | }, 21 | operatorsAliases: Op, 22 | dialect: 'mysql', 23 | username: environment_1.environment.database_username, 24 | password: environment_1.environment.database_password, 25 | modelPaths: [__dirname + '/models'], 26 | sync: { 27 | alter: true, 28 | force: false, 29 | }, 30 | }); 31 | } 32 | sync() { 33 | return from_1.from(this.handler.sync()); 34 | } 35 | authenticate() { 36 | return from_1.from(this.handler.authenticate()); 37 | } 38 | } 39 | exports.Database = Database; 40 | //# sourceMappingURL=database.js.map -------------------------------------------------------------------------------- /common/database/database.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"database.js","sourceRoot":"","sources":["database.ts"],"names":[],"mappings":";;;AACA,kCAAgC;AAChC,wDAAqD;AACrD,6CAA6C;AAC7C,+DAAiD;AACjD,gDAA6C;AAE7C,MAAa,QAAQ;IAGnB;QACE,MAAM,EAAE,GAAQ,eAAe,CAAC,EAAE,CAAC;QAEnC,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAS,CAAC;YAC3B,IAAI,EAAE,yBAAW,CAAC,aAAa;YAC/B,IAAI,EAAE,yBAAW,CAAC,aAAa;YAC/B,QAAQ,EAAE,yBAAW,CAAC,aAAa;YACnC,IAAI,EAAE;gBACJ,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,KAAK;aACZ;YACD,gBAAgB,EAAE,EAAE;YACpB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,yBAAW,CAAC,iBAAiB;YACvC,QAAQ,EAAE,yBAAW,CAAC,iBAAiB;YACvC,UAAU,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;YACnC,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CAAC;IACL,CAAC;IAEM,IAAI;QACT,OAAO,WAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAEM,YAAY;QACjB,OAAO,WAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF;AAlCD,4BAkCC"} -------------------------------------------------------------------------------- /common/database/database.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'rxjs/Observable'; 2 | import 'rxjs/add/observable/of'; 3 | import { from } from 'rxjs/internal/observable/from'; 4 | import * as SequelizeOrigin from 'sequelize'; 5 | import { Sequelize } from 'sequelize-typescript'; 6 | import { environment } from '../environment'; 7 | 8 | export class Database { 9 | public handler: any; 10 | 11 | constructor() { 12 | const Op: any = SequelizeOrigin.Op; 13 | 14 | this.handler = new Sequelize({ 15 | host: environment.database_host, 16 | port: environment.database_port, 17 | database: environment.database_name, 18 | pool: { 19 | max: 5, 20 | min: 0, 21 | idle: 10000, 22 | }, 23 | operatorsAliases: Op, 24 | dialect: 'mysql', 25 | username: environment.database_username, 26 | password: environment.database_password, 27 | modelPaths: [__dirname + '/models'], 28 | sync: { 29 | alter: true, 30 | force: false, 31 | }, 32 | }); 33 | } 34 | 35 | public sync(): Observable { 36 | return from(this.handler.sync()); 37 | } 38 | 39 | public authenticate(): Observable { 40 | return from(this.handler.authenticate()); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /common/database/models/BancoConta.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.BancoConta = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const Jogador_1 = require("./Jogador"); 15 | const Propriedade_1 = require("./Propriedade"); 16 | let BancoConta = class BancoConta extends sequelize_typescript_1.Model { 17 | }; 18 | __decorate([ 19 | sequelize_typescript_1.Column({ allowNull: false }), 20 | __metadata("design:type", String) 21 | ], BancoConta.prototype, "numero", void 0); 22 | __decorate([ 23 | sequelize_typescript_1.BelongsTo(() => Propriedade_1.Propriedade, { foreignKey: { allowNull: false, name: 'propriedade' } }), 24 | __metadata("design:type", Propriedade_1.Propriedade) 25 | ], BancoConta.prototype, "bancoContaPropriedade", void 0); 26 | __decorate([ 27 | sequelize_typescript_1.BelongsTo(() => Jogador_1.Jogador, { foreignKey: { allowNull: false, name: 'jogador' } }), 28 | __metadata("design:type", Jogador_1.Jogador) 29 | ], BancoConta.prototype, "bancoContaJogador", void 0); 30 | BancoConta = __decorate([ 31 | sequelize_typescript_1.Table({ 32 | timestamps: true, 33 | createdAt: 'dataCriado', 34 | deletedAt: 'dataExcluido', 35 | updatedAt: 'dataAtualizado', 36 | paranoid: true, 37 | }) 38 | ], BancoConta); 39 | exports.BancoConta = BancoConta; 40 | //# sourceMappingURL=BancoConta.js.map -------------------------------------------------------------------------------- /common/database/models/BancoConta.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"BancoConta.js","sourceRoot":"","sources":["BancoConta.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAuE;AACvE,uCAAoC;AACpC,+CAA4C;AAS5C,IAAa,UAAU,GAAvB,MAAa,UAAW,SAAQ,4BAAiB;CAUhD,CAAA;AAPC;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;0CACZ;AAGf;IADC,gCAAS,CAAC,GAAG,EAAE,CAAC,yBAAW,EAAE,EAAC,UAAU,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAC,EAAC,CAAC;8BAC7D,yBAAW;yDAAC;AAGnC;IADC,gCAAS,CAAC,GAAG,EAAE,CAAC,iBAAO,EAAE,EAAC,UAAU,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAC,EAAC,CAAC;8BACzD,iBAAO;qDAAC;AAThB,UAAU;IAPtB,4BAAK,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI;KACf,CAAC;GACW,UAAU,CAUtB;AAVY,gCAAU"} -------------------------------------------------------------------------------- /common/database/models/BancoConta.ts: -------------------------------------------------------------------------------- 1 | import { BelongsTo, Column, Model, Table } from 'sequelize-typescript'; 2 | import { Jogador } from './Jogador'; 3 | import { Propriedade } from './Propriedade'; 4 | 5 | @Table({ 6 | timestamps: true, 7 | createdAt: 'dataCriado', 8 | deletedAt: 'dataExcluido', 9 | updatedAt: 'dataAtualizado', 10 | paranoid: true, 11 | }) 12 | export class BancoConta extends Model { 13 | 14 | @Column({allowNull: false}) 15 | numero: string; 16 | 17 | @BelongsTo(() => Propriedade, {foreignKey: {allowNull: false, name: 'propriedade'}}) 18 | bancoContaPropriedade: Propriedade; 19 | 20 | @BelongsTo(() => Jogador, {foreignKey: {allowNull: false, name: 'jogador'}}) 21 | bancoContaJogador: Jogador; 22 | } 23 | -------------------------------------------------------------------------------- /common/database/models/BancoTipoTransacao.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.BancoTipoTransacao = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const BancoTransacao_1 = require("./BancoTransacao"); 15 | let BancoTipoTransacao = class BancoTipoTransacao extends sequelize_typescript_1.Model { 16 | }; 17 | __decorate([ 18 | sequelize_typescript_1.PrimaryKey, 19 | sequelize_typescript_1.Column, 20 | __metadata("design:type", Number) 21 | ], BancoTipoTransacao.prototype, "id", void 0); 22 | __decorate([ 23 | sequelize_typescript_1.Column({ allowNull: false }), 24 | __metadata("design:type", String) 25 | ], BancoTipoTransacao.prototype, "nome", void 0); 26 | __decorate([ 27 | sequelize_typescript_1.Column({ allowNull: false }), 28 | __metadata("design:type", String) 29 | ], BancoTipoTransacao.prototype, "identificador", void 0); 30 | __decorate([ 31 | sequelize_typescript_1.HasMany(() => BancoTransacao_1.BancoTransacao, 'tipo'), 32 | __metadata("design:type", Array) 33 | ], BancoTipoTransacao.prototype, "transacoes", void 0); 34 | BancoTipoTransacao = __decorate([ 35 | sequelize_typescript_1.Table({ 36 | timestamps: true, 37 | createdAt: 'dataCriado', 38 | deletedAt: 'dataExcluido', 39 | updatedAt: 'dataAtualizado', 40 | paranoid: true, 41 | indexes: [ 42 | { 43 | unique: true, 44 | fields: ['identificador'], 45 | } 46 | ] 47 | }) 48 | ], BancoTipoTransacao); 49 | exports.BancoTipoTransacao = BancoTipoTransacao; 50 | //# sourceMappingURL=BancoTipoTransacao.js.map -------------------------------------------------------------------------------- /common/database/models/BancoTipoTransacao.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"BancoTipoTransacao.js","sourceRoot":"","sources":["BancoTipoTransacao.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAiF;AACjF,qDAAkD;AAelD,IAAa,kBAAkB,GAA/B,MAAa,kBAAmB,SAAQ,4BAAyB;CAchE,CAAA;AAVC;IAFC,iCAAU;IACV,6BAAM;;8CACI;AAGX;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;gDACd;AAGb;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;yDACL;AAGtB;IADC,8BAAO,CAAC,GAAG,EAAE,CAAC,+BAAc,EAAE,MAAM,CAAC;;sDACT;AAblB,kBAAkB;IAb9B,4BAAK,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,CAAC,eAAe,CAAC;aAC1B;SACF;KACF,CAAC;GACW,kBAAkB,CAc9B;AAdY,gDAAkB"} -------------------------------------------------------------------------------- /common/database/models/BancoTipoTransacao.ts: -------------------------------------------------------------------------------- 1 | import { Column, HasMany, Model, PrimaryKey, Table } from 'sequelize-typescript'; 2 | import { BancoTransacao } from './BancoTransacao'; 3 | 4 | @Table({ 5 | timestamps: true, 6 | createdAt: 'dataCriado', 7 | deletedAt: 'dataExcluido', 8 | updatedAt: 'dataAtualizado', 9 | paranoid: true, 10 | indexes: [ 11 | { 12 | unique: true, 13 | fields: ['identificador'], 14 | } 15 | ] 16 | }) 17 | export class BancoTipoTransacao extends Model { 18 | 19 | @PrimaryKey 20 | @Column 21 | id: number; 22 | 23 | @Column({allowNull: false}) 24 | nome: string; 25 | 26 | @Column({allowNull: false}) 27 | identificador: string; 28 | 29 | @HasMany(() => BancoTransacao, 'tipo') 30 | transacoes: BancoTransacao[]; 31 | } 32 | -------------------------------------------------------------------------------- /common/database/models/BancoTransacao.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.BancoTransacao = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const BancoConta_1 = require("./BancoConta"); 15 | const BancoTipoTransacao_1 = require("./BancoTipoTransacao"); 16 | let BancoTransacao = class BancoTransacao extends sequelize_typescript_1.Model { 17 | }; 18 | __decorate([ 19 | sequelize_typescript_1.Column, 20 | __metadata("design:type", Number) 21 | ], BancoTransacao.prototype, "valor", void 0); 22 | __decorate([ 23 | sequelize_typescript_1.BelongsTo(() => BancoConta_1.BancoConta, { foreignKey: { allowNull: false, name: 'conta' } }), 24 | __metadata("design:type", BancoConta_1.BancoConta) 25 | ], BancoTransacao.prototype, "bancoTransacaoConta", void 0); 26 | __decorate([ 27 | sequelize_typescript_1.BelongsTo(() => BancoTipoTransacao_1.BancoTipoTransacao, { foreignKey: { allowNull: false, name: 'tipo' } }), 28 | __metadata("design:type", BancoTipoTransacao_1.BancoTipoTransacao) 29 | ], BancoTransacao.prototype, "bancoTransacaoTipo", void 0); 30 | BancoTransacao = __decorate([ 31 | sequelize_typescript_1.Table({ 32 | timestamps: true, 33 | createdAt: 'dataCriado', 34 | deletedAt: 'dataExcluido', 35 | updatedAt: 'dataAtualizado', 36 | paranoid: true, 37 | }) 38 | ], BancoTransacao); 39 | exports.BancoTransacao = BancoTransacao; 40 | //# sourceMappingURL=BancoTransacao.js.map -------------------------------------------------------------------------------- /common/database/models/BancoTransacao.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"BancoTransacao.js","sourceRoot":"","sources":["BancoTransacao.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAuE;AACvE,6CAA0C;AAC1C,6DAA0D;AAS1D,IAAa,cAAc,GAA3B,MAAa,cAAe,SAAQ,4BAAqB;CAUxD,CAAA;AAPC;IADC,6BAAM;;6CACO;AAGd;IADC,gCAAS,CAAC,GAAG,EAAE,CAAC,uBAAU,EAAE,EAAC,UAAU,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAC,EAAC,CAAC;8BACxD,uBAAU;2DAAC;AAGhC;IADC,gCAAS,CAAC,GAAG,EAAE,CAAC,uCAAkB,EAAE,EAAC,UAAU,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,EAAC,CAAC;8BAChE,uCAAkB;0DAAC;AAT5B,cAAc;IAP1B,4BAAK,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI;KACf,CAAC;GACW,cAAc,CAU1B;AAVY,wCAAc"} -------------------------------------------------------------------------------- /common/database/models/BancoTransacao.ts: -------------------------------------------------------------------------------- 1 | import { BelongsTo, Column, Model, Table } from 'sequelize-typescript'; 2 | import { BancoConta } from './BancoConta'; 3 | import { BancoTipoTransacao } from './BancoTipoTransacao'; 4 | 5 | @Table({ 6 | timestamps: true, 7 | createdAt: 'dataCriado', 8 | deletedAt: 'dataExcluido', 9 | updatedAt: 'dataAtualizado', 10 | paranoid: true, 11 | }) 12 | export class BancoTransacao extends Model { 13 | 14 | @Column 15 | valor: number; 16 | 17 | @BelongsTo(() => BancoConta, {foreignKey: {allowNull: false, name: 'conta'}}) 18 | bancoTransacaoConta: BancoConta; 19 | 20 | @BelongsTo(() => BancoTipoTransacao, {foreignKey: {allowNull: false, name: 'tipo'}}) 21 | bancoTransacaoTipo: BancoTipoTransacao; 22 | } 23 | -------------------------------------------------------------------------------- /common/database/models/Jogador.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.Jogador = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const Notificacao_1 = require("./Notificacao"); 15 | const Profissao_1 = require("./Profissao"); 16 | let Jogador = class Jogador extends sequelize_typescript_1.Model { 17 | }; 18 | __decorate([ 19 | sequelize_typescript_1.Column({ allowNull: false }), 20 | __metadata("design:type", String) 21 | ], Jogador.prototype, "nome", void 0); 22 | __decorate([ 23 | sequelize_typescript_1.Column({ allowNull: false }), 24 | __metadata("design:type", String) 25 | ], Jogador.prototype, "senha", void 0); 26 | __decorate([ 27 | sequelize_typescript_1.Column({ allowNull: false }), 28 | __metadata("design:type", String) 29 | ], Jogador.prototype, "email", void 0); 30 | __decorate([ 31 | sequelize_typescript_1.Column({ allowNull: false }), 32 | __metadata("design:type", String) 33 | ], Jogador.prototype, "celular", void 0); 34 | __decorate([ 35 | sequelize_typescript_1.Column({ defaultValue: 1 }), 36 | __metadata("design:type", Number) 37 | ], Jogador.prototype, "nivel", void 0); 38 | __decorate([ 39 | sequelize_typescript_1.Column({ defaultValue: 0 }), 40 | __metadata("design:type", Number) 41 | ], Jogador.prototype, "dinheiro", void 0); 42 | __decorate([ 43 | sequelize_typescript_1.Column({ defaultValue: 0 }), 44 | __metadata("design:type", Number) 45 | ], Jogador.prototype, "creditos", void 0); 46 | __decorate([ 47 | sequelize_typescript_1.Column({ defaultValue: 100 }), 48 | __metadata("design:type", Number) 49 | ], Jogador.prototype, "fome", void 0); 50 | __decorate([ 51 | sequelize_typescript_1.Column({ defaultValue: 100 }), 52 | __metadata("design:type", Number) 53 | ], Jogador.prototype, "sono", void 0); 54 | __decorate([ 55 | sequelize_typescript_1.Column({ defaultValue: 100 }), 56 | __metadata("design:type", Number) 57 | ], Jogador.prototype, "forcaFisica", void 0); 58 | __decorate([ 59 | sequelize_typescript_1.Column({ defaultValue: 100 }), 60 | __metadata("design:type", Number) 61 | ], Jogador.prototype, "sede", void 0); 62 | __decorate([ 63 | sequelize_typescript_1.BelongsTo(() => Profissao_1.Profissao, { foreignKey: { allowNull: true, name: 'profissao' } }), 64 | __metadata("design:type", Profissao_1.Profissao) 65 | ], Jogador.prototype, "jogadorProfissao", void 0); 66 | __decorate([ 67 | sequelize_typescript_1.HasMany(() => Notificacao_1.Notificacao), 68 | __metadata("design:type", Array) 69 | ], Jogador.prototype, "notificacoes", void 0); 70 | Jogador = __decorate([ 71 | sequelize_typescript_1.Table({ 72 | timestamps: true, 73 | createdAt: 'dataCriado', 74 | deletedAt: 'dataExcluido', 75 | updatedAt: 'dataAtualizado', 76 | paranoid: true, 77 | indexes: [ 78 | { 79 | unique: true, 80 | fields: ['nome'], 81 | } 82 | ] 83 | }) 84 | ], Jogador); 85 | exports.Jogador = Jogador; 86 | //# sourceMappingURL=Jogador.js.map -------------------------------------------------------------------------------- /common/database/models/Jogador.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Jogador.js","sourceRoot":"","sources":["Jogador.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAgF;AAChF,+CAA4C;AAC5C,2CAAwC;AAexC,IAAa,OAAO,GAApB,MAAa,OAAQ,SAAQ,4BAAc;CAwC1C,CAAA;AArCC;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;qCACd;AAGb;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;sCACb;AAGd;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;sCACb;AAGd;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;wCACX;AAGhB;IADC,6BAAM,CAAC,EAAC,YAAY,EAAE,CAAC,EAAC,CAAC;;sCACZ;AAGd;IADC,6BAAM,CAAC,EAAC,YAAY,EAAE,CAAC,EAAC,CAAC;;yCACT;AAGjB;IADC,6BAAM,CAAC,EAAC,YAAY,EAAE,CAAC,EAAC,CAAC;;yCACT;AAGjB;IADC,6BAAM,CAAC,EAAC,YAAY,EAAE,GAAG,EAAC,CAAC;;qCACf;AAGb;IADC,6BAAM,CAAC,EAAC,YAAY,EAAE,GAAG,EAAC,CAAC;;qCACf;AAGb;IADC,6BAAM,CAAC,EAAC,YAAY,EAAE,GAAG,EAAC,CAAC;;4CACR;AAGpB;IADC,6BAAM,CAAC,EAAC,YAAY,EAAE,GAAG,EAAC,CAAC;;qCACf;AAGb;IADC,gCAAS,CAAC,GAAG,EAAE,CAAC,qBAAS,EAAE,EAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAC,EAAC,CAAC;8BAC7D,qBAAS;iDAAC;AAG5B;IADC,8BAAO,CAAC,GAAG,EAAE,CAAC,yBAAW,CAAC;;6CACC;AAvCjB,OAAO;IAbnB,4BAAK,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,CAAC,MAAM,CAAC;aACjB;SACF;KACF,CAAC;GACW,OAAO,CAwCnB;AAxCY,0BAAO"} -------------------------------------------------------------------------------- /common/database/models/Jogador.ts: -------------------------------------------------------------------------------- 1 | import { BelongsTo, Column, HasMany, Model, Table } from 'sequelize-typescript'; 2 | import { Notificacao } from './Notificacao'; 3 | import { Profissao } from './Profissao'; 4 | 5 | @Table({ 6 | timestamps: true, 7 | createdAt: 'dataCriado', 8 | deletedAt: 'dataExcluido', 9 | updatedAt: 'dataAtualizado', 10 | paranoid: true, 11 | indexes: [ 12 | { 13 | unique: true, 14 | fields: ['nome'], 15 | } 16 | ] 17 | }) 18 | export class Jogador extends Model { 19 | 20 | @Column({allowNull: false}) 21 | nome: string; 22 | 23 | @Column({allowNull: false}) 24 | senha: string; 25 | 26 | @Column({allowNull: false}) 27 | email: string; 28 | 29 | @Column({allowNull: false}) 30 | celular: string; 31 | 32 | @Column({defaultValue: 1}) 33 | nivel: number; 34 | 35 | @Column({defaultValue: 0}) 36 | dinheiro: number; 37 | 38 | @Column({defaultValue: 0}) 39 | creditos: number; 40 | 41 | @Column({defaultValue: 100}) 42 | fome: number; 43 | 44 | @Column({defaultValue: 100}) 45 | sono: number; 46 | 47 | @Column({defaultValue: 100}) 48 | forcaFisica: number; 49 | 50 | @Column({defaultValue: 100}) 51 | sede: number; 52 | 53 | @BelongsTo(() => Profissao, {foreignKey: {allowNull: true, name: 'profissao'}}) 54 | jogadorProfissao: Profissao; 55 | 56 | @HasMany(() => Notificacao) 57 | notificacoes: Notificacao[]; 58 | } 59 | -------------------------------------------------------------------------------- /common/database/models/Notificacao.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.Notificacao = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const Jogador_1 = require("./Jogador"); 15 | let Notificacao = class Notificacao extends sequelize_typescript_1.Model { 16 | }; 17 | __decorate([ 18 | sequelize_typescript_1.Column({ allowNull: false }), 19 | __metadata("design:type", String) 20 | ], Notificacao.prototype, "titulo", void 0); 21 | __decorate([ 22 | sequelize_typescript_1.Column({ allowNull: false }), 23 | __metadata("design:type", String) 24 | ], Notificacao.prototype, "descricao", void 0); 25 | __decorate([ 26 | sequelize_typescript_1.Column({ defaultValue: false }), 27 | __metadata("design:type", Boolean) 28 | ], Notificacao.prototype, "lido", void 0); 29 | __decorate([ 30 | sequelize_typescript_1.Column, 31 | __metadata("design:type", String) 32 | ], Notificacao.prototype, "dataLido", void 0); 33 | __decorate([ 34 | sequelize_typescript_1.ForeignKey(() => Jogador_1.Jogador), 35 | __metadata("design:type", Jogador_1.Jogador) 36 | ], Notificacao.prototype, "jogador", void 0); 37 | Notificacao = __decorate([ 38 | sequelize_typescript_1.Table({ 39 | timestamps: true, 40 | createdAt: 'dataCriado', 41 | deletedAt: 'dataExcluido', 42 | updatedAt: 'dataAtualizado', 43 | paranoid: true, 44 | }) 45 | ], Notificacao); 46 | exports.Notificacao = Notificacao; 47 | //# sourceMappingURL=Notificacao.js.map -------------------------------------------------------------------------------- /common/database/models/Notificacao.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Notificacao.js","sourceRoot":"","sources":["Notificacao.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAwE;AACxE,uCAAoC;AASpC,IAAa,WAAW,GAAxB,MAAa,WAAY,SAAQ,4BAAkB;CAgBlD,CAAA;AAbC;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;2CACZ;AAGf;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;8CACT;AAGlB;IADC,6BAAM,CAAC,EAAC,YAAY,EAAE,KAAK,EAAC,CAAC;;yCAChB;AAGd;IADC,6BAAM;;6CACU;AAGjB;IADC,iCAAU,CAAC,GAAG,EAAE,CAAC,iBAAO,CAAC;8BACjB,iBAAO;4CAAC;AAfN,WAAW;IAPvB,4BAAK,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI;KACf,CAAC;GACW,WAAW,CAgBvB;AAhBY,kCAAW"} -------------------------------------------------------------------------------- /common/database/models/Notificacao.ts: -------------------------------------------------------------------------------- 1 | import { Column, ForeignKey, Model, Table } from 'sequelize-typescript'; 2 | import { Jogador } from './Jogador'; 3 | 4 | @Table({ 5 | timestamps: true, 6 | createdAt: 'dataCriado', 7 | deletedAt: 'dataExcluido', 8 | updatedAt: 'dataAtualizado', 9 | paranoid: true, 10 | }) 11 | export class Notificacao extends Model { 12 | 13 | @Column({allowNull: false}) 14 | titulo: string; 15 | 16 | @Column({allowNull: false}) 17 | descricao: string; 18 | 19 | @Column({defaultValue: false}) 20 | lido: boolean; 21 | 22 | @Column 23 | dataLido: string; 24 | 25 | @ForeignKey(() => Jogador) 26 | jogador: Jogador; 27 | } 28 | -------------------------------------------------------------------------------- /common/database/models/Profissao.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.Profissao = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const Jogador_1 = require("./Jogador"); 15 | let Profissao = class Profissao extends sequelize_typescript_1.Model { 16 | }; 17 | __decorate([ 18 | sequelize_typescript_1.Column({ allowNull: false }), 19 | __metadata("design:type", String) 20 | ], Profissao.prototype, "nome", void 0); 21 | __decorate([ 22 | sequelize_typescript_1.Column({ allowNull: false, defaultValue: 10 }), 23 | __metadata("design:type", Number) 24 | ], Profissao.prototype, "vagas", void 0); 25 | __decorate([ 26 | sequelize_typescript_1.Column({ allowNull: false, defaultValue: 1 }), 27 | __metadata("design:type", Number) 28 | ], Profissao.prototype, "nivelMinimo", void 0); 29 | __decorate([ 30 | sequelize_typescript_1.Column({ allowNull: false }), 31 | __metadata("design:type", Number) 32 | ], Profissao.prototype, "salario", void 0); 33 | __decorate([ 34 | sequelize_typescript_1.HasMany(() => Jogador_1.Jogador, 'profissao'), 35 | __metadata("design:type", Array) 36 | ], Profissao.prototype, "jogadores", void 0); 37 | Profissao = __decorate([ 38 | sequelize_typescript_1.Table({ 39 | timestamps: true, 40 | createdAt: 'dataCriado', 41 | deletedAt: 'dataExcluido', 42 | updatedAt: 'dataAtualizado', 43 | paranoid: true, 44 | indexes: [ 45 | { 46 | unique: true, 47 | fields: ['nome'], 48 | } 49 | ] 50 | }) 51 | ], Profissao); 52 | exports.Profissao = Profissao; 53 | //# sourceMappingURL=Profissao.js.map -------------------------------------------------------------------------------- /common/database/models/Profissao.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Profissao.js","sourceRoot":"","sources":["Profissao.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAqE;AACrE,uCAAoC;AAepC,IAAa,SAAS,GAAtB,MAAa,SAAU,SAAQ,4BAAgB;CAgB9C,CAAA;AAbC;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;uCACd;AAGb;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAC,CAAC;;wCAC/B;AAGd;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAC,CAAC;;8CACxB;AAGpB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;0CACX;AAGhB;IADC,8BAAO,CAAC,GAAG,EAAE,CAAC,iBAAO,EAAE,WAAW,CAAC;;4CACf;AAfV,SAAS;IAbrB,4BAAK,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,CAAC,MAAM,CAAC;aACjB;SACF;KACF,CAAC;GACW,SAAS,CAgBrB;AAhBY,8BAAS"} -------------------------------------------------------------------------------- /common/database/models/Profissao.ts: -------------------------------------------------------------------------------- 1 | import { Column, HasMany, Model, Table } from 'sequelize-typescript'; 2 | import { Jogador } from './Jogador'; 3 | 4 | @Table({ 5 | timestamps: true, 6 | createdAt: 'dataCriado', 7 | deletedAt: 'dataExcluido', 8 | updatedAt: 'dataAtualizado', 9 | paranoid: true, 10 | indexes: [ 11 | { 12 | unique: true, 13 | fields: ['nome'], 14 | } 15 | ] 16 | }) 17 | export class Profissao extends Model { 18 | 19 | @Column({allowNull: false}) 20 | nome: string; 21 | 22 | @Column({allowNull: false, defaultValue: 10}) 23 | vagas: number; 24 | 25 | @Column({allowNull: false, defaultValue: 1}) 26 | nivelMinimo: number; 27 | 28 | @Column({allowNull: false}) 29 | salario: number; 30 | 31 | @HasMany(() => Jogador, 'profissao') 32 | jogadores: Jogador[]; 33 | } 34 | -------------------------------------------------------------------------------- /common/database/models/Propriedade.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.Propriedade = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const TipoPropriedade_1 = require("./TipoPropriedade"); 15 | let Propriedade = class Propriedade extends sequelize_typescript_1.Model { 16 | }; 17 | __decorate([ 18 | sequelize_typescript_1.Column({ allowNull: false }), 19 | __metadata("design:type", String) 20 | ], Propriedade.prototype, "nomeOriginal", void 0); 21 | __decorate([ 22 | sequelize_typescript_1.Column({ allowNull: false }), 23 | __metadata("design:type", String) 24 | ], Propriedade.prototype, "nomeExibido", void 0); 25 | __decorate([ 26 | sequelize_typescript_1.Column({ allowNull: false }), 27 | __metadata("design:type", Number) 28 | ], Propriedade.prototype, "portaEntradaX", void 0); 29 | __decorate([ 30 | sequelize_typescript_1.Column({ allowNull: false }), 31 | __metadata("design:type", Number) 32 | ], Propriedade.prototype, "portaEntradaY", void 0); 33 | __decorate([ 34 | sequelize_typescript_1.Column({ allowNull: false }), 35 | __metadata("design:type", Number) 36 | ], Propriedade.prototype, "portaEntradaZ", void 0); 37 | __decorate([ 38 | sequelize_typescript_1.Column({ allowNull: false }), 39 | __metadata("design:type", Number) 40 | ], Propriedade.prototype, "portaSaidaX", void 0); 41 | __decorate([ 42 | sequelize_typescript_1.Column({ allowNull: false }), 43 | __metadata("design:type", Number) 44 | ], Propriedade.prototype, "portaSaidaY", void 0); 45 | __decorate([ 46 | sequelize_typescript_1.Column({ allowNull: false }), 47 | __metadata("design:type", Number) 48 | ], Propriedade.prototype, "portaSaidaZ", void 0); 49 | __decorate([ 50 | sequelize_typescript_1.Column({ allowNull: false }), 51 | __metadata("design:type", String) 52 | ], Propriedade.prototype, "iconePickup", void 0); 53 | __decorate([ 54 | sequelize_typescript_1.BelongsTo(() => TipoPropriedade_1.TipoPropriedade, { foreignKey: { allowNull: false, name: 'tipo' } }), 55 | __metadata("design:type", TipoPropriedade_1.TipoPropriedade) 56 | ], Propriedade.prototype, "tipoPropriedade", void 0); 57 | Propriedade = __decorate([ 58 | sequelize_typescript_1.Table({ 59 | timestamps: true, 60 | createdAt: 'dataCriado', 61 | deletedAt: 'dataExcluido', 62 | updatedAt: 'dataAtualizado', 63 | paranoid: true, 64 | indexes: [ 65 | { 66 | unique: true, 67 | fields: ['nomeOriginal', 'nomeExibido'], 68 | } 69 | ] 70 | }) 71 | ], Propriedade); 72 | exports.Propriedade = Propriedade; 73 | //# sourceMappingURL=Propriedade.js.map -------------------------------------------------------------------------------- /common/database/models/Propriedade.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Propriedade.js","sourceRoot":"","sources":["Propriedade.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAuE;AACvE,uDAAoD;AAepD,IAAa,WAAW,GAAxB,MAAa,WAAY,SAAQ,4BAAkB;CA+BlD,CAAA;AA5BC;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;iDACN;AAGrB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;gDACP;AAGpB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;kDACL;AAGtB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;kDACL;AAGtB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;kDACL;AAGtB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;gDACP;AAGpB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;gDACP;AAGpB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;gDACP;AAGpB;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;gDACP;AAGpB;IADC,gCAAS,CAAC,GAAG,EAAE,CAAC,iCAAe,EAAE,EAAC,UAAU,EAAE,EAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,EAAC,CAAC;8BAChE,iCAAe;oDAAC;AA9BtB,WAAW;IAbvB,4BAAK,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC;aACxC;SACF;KACF,CAAC;GACW,WAAW,CA+BvB;AA/BY,kCAAW"} -------------------------------------------------------------------------------- /common/database/models/Propriedade.ts: -------------------------------------------------------------------------------- 1 | import { BelongsTo, Column, Model, Table } from 'sequelize-typescript'; 2 | import { TipoPropriedade } from './TipoPropriedade'; 3 | 4 | @Table({ 5 | timestamps: true, 6 | createdAt: 'dataCriado', 7 | deletedAt: 'dataExcluido', 8 | updatedAt: 'dataAtualizado', 9 | paranoid: true, 10 | indexes: [ 11 | { 12 | unique: true, 13 | fields: ['nomeOriginal', 'nomeExibido'], 14 | } 15 | ] 16 | }) 17 | export class Propriedade extends Model { 18 | 19 | @Column({allowNull: false}) 20 | nomeOriginal: string; 21 | 22 | @Column({allowNull: false}) 23 | nomeExibido: string; 24 | 25 | @Column({allowNull: false}) 26 | portaEntradaX: number; 27 | 28 | @Column({allowNull: false}) 29 | portaEntradaY: number; 30 | 31 | @Column({allowNull: false}) 32 | portaEntradaZ: number; 33 | 34 | @Column({allowNull: false}) 35 | portaSaidaX: number; 36 | 37 | @Column({allowNull: false}) 38 | portaSaidaY: number; 39 | 40 | @Column({allowNull: false}) 41 | portaSaidaZ: number; 42 | 43 | @Column({allowNull: false}) 44 | iconePickup: string; 45 | 46 | @BelongsTo(() => TipoPropriedade, {foreignKey: {allowNull: false, name: 'tipo'}}) 47 | tipoPropriedade: TipoPropriedade; 48 | } 49 | -------------------------------------------------------------------------------- /common/database/models/TipoPropriedade.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.TipoPropriedade = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const Propriedade_1 = require("./Propriedade"); 15 | let TipoPropriedade = class TipoPropriedade extends sequelize_typescript_1.Model { 16 | }; 17 | __decorate([ 18 | sequelize_typescript_1.PrimaryKey, 19 | sequelize_typescript_1.Column, 20 | __metadata("design:type", Number) 21 | ], TipoPropriedade.prototype, "id", void 0); 22 | __decorate([ 23 | sequelize_typescript_1.Column({ allowNull: false }), 24 | __metadata("design:type", String) 25 | ], TipoPropriedade.prototype, "nome", void 0); 26 | __decorate([ 27 | sequelize_typescript_1.Column({ allowNull: false }), 28 | __metadata("design:type", String) 29 | ], TipoPropriedade.prototype, "identificador", void 0); 30 | __decorate([ 31 | sequelize_typescript_1.HasMany(() => Propriedade_1.Propriedade, 'tipo'), 32 | __metadata("design:type", Array) 33 | ], TipoPropriedade.prototype, "propriedades", void 0); 34 | TipoPropriedade = __decorate([ 35 | sequelize_typescript_1.Table({ 36 | timestamps: true, 37 | createdAt: 'dataCriado', 38 | deletedAt: 'dataExcluido', 39 | updatedAt: 'dataAtualizado', 40 | paranoid: true, 41 | indexes: [ 42 | { 43 | unique: true, 44 | fields: ['identificador'], 45 | } 46 | ] 47 | }) 48 | ], TipoPropriedade); 49 | exports.TipoPropriedade = TipoPropriedade; 50 | //# sourceMappingURL=TipoPropriedade.js.map -------------------------------------------------------------------------------- /common/database/models/TipoPropriedade.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"TipoPropriedade.js","sourceRoot":"","sources":["TipoPropriedade.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAAiF;AACjF,+CAA4C;AAe5C,IAAa,eAAe,GAA5B,MAAa,eAAgB,SAAQ,4BAAsB;CAc1D,CAAA;AAVC;IAFC,iCAAU;IACV,6BAAM;;2CACI;AAGX;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;6CACd;AAGb;IADC,6BAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;sDACL;AAGtB;IADC,8BAAO,CAAC,GAAG,EAAE,CAAC,yBAAW,EAAE,MAAM,CAAC;;qDACP;AAbjB,eAAe;IAb3B,4BAAK,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,gBAAgB;QAC3B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,CAAC,eAAe,CAAC;aAC1B;SACF;KACF,CAAC;GACW,eAAe,CAc3B;AAdY,0CAAe"} -------------------------------------------------------------------------------- /common/database/models/TipoPropriedade.ts: -------------------------------------------------------------------------------- 1 | import { Column, HasMany, Model, PrimaryKey, Table } from 'sequelize-typescript'; 2 | import { Propriedade } from './Propriedade'; 3 | 4 | @Table({ 5 | timestamps: true, 6 | createdAt: 'dataCriado', 7 | deletedAt: 'dataExcluido', 8 | updatedAt: 'dataAtualizado', 9 | paranoid: true, 10 | indexes: [ 11 | { 12 | unique: true, 13 | fields: ['identificador'], 14 | } 15 | ] 16 | }) 17 | export class TipoPropriedade extends Model { 18 | 19 | @PrimaryKey 20 | @Column 21 | id: number; 22 | 23 | @Column({allowNull: false}) 24 | nome: string; 25 | 26 | @Column({allowNull: false}) 27 | identificador: string; 28 | 29 | @HasMany(() => Propriedade, 'tipo') 30 | propriedades: Propriedade[]; 31 | } 32 | -------------------------------------------------------------------------------- /common/database/models/Veiculo.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 6 | return c > 3 && r && Object.defineProperty(target, key, r), r; 7 | }; 8 | var __metadata = (this && this.__metadata) || function (k, v) { 9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.Veiculo = void 0; 13 | const sequelize_typescript_1 = require("sequelize-typescript"); 14 | const Jogador_1 = require("./Jogador"); 15 | let Veiculo = class Veiculo extends sequelize_typescript_1.Model { 16 | }; 17 | __decorate([ 18 | sequelize_typescript_1.Column({ allowNull: false }), 19 | __metadata("design:type", String) 20 | ], Veiculo.prototype, "placaOriginal", void 0); 21 | __decorate([ 22 | sequelize_typescript_1.Column({ allowNull: false }), 23 | __metadata("design:type", String) 24 | ], Veiculo.prototype, "placaExibido", void 0); 25 | __decorate([ 26 | sequelize_typescript_1.Column({ allowNull: false }), 27 | __metadata("design:type", String) 28 | ], Veiculo.prototype, "modelo", void 0); 29 | __decorate([ 30 | sequelize_typescript_1.Column({ allowNull: false, type: sequelize_typescript_1.DataType.STRING }), 31 | __metadata("design:type", String) 32 | ], Veiculo.prototype, "posicaoX", void 0); 33 | __decorate([ 34 | sequelize_typescript_1.Column({ allowNull: false, type: sequelize_typescript_1.DataType.STRING }), 35 | __metadata("design:type", String) 36 | ], Veiculo.prototype, "posicaoY", void 0); 37 | __decorate([ 38 | sequelize_typescript_1.Column({ allowNull: false, type: sequelize_typescript_1.DataType.STRING }), 39 | __metadata("design:type", String) 40 | ], Veiculo.prototype, "posicaoZ", void 0); 41 | __decorate([ 42 | sequelize_typescript_1.Column({ allowNull: false, type: sequelize_typescript_1.DataType.STRING }), 43 | __metadata("design:type", String) 44 | ], Veiculo.prototype, "posicaoOriginalX", void 0); 45 | __decorate([ 46 | sequelize_typescript_1.Column({ allowNull: false, type: sequelize_typescript_1.DataType.STRING }), 47 | __metadata("design:type", String) 48 | ], Veiculo.prototype, "posicaoOriginalY", void 0); 49 | __decorate([ 50 | sequelize_typescript_1.Column({ allowNull: false, type: sequelize_typescript_1.DataType.STRING }), 51 | __metadata("design:type", String) 52 | ], Veiculo.prototype, "posicaoOriginalZ", void 0); 53 | __decorate([ 54 | sequelize_typescript_1.Column({ allowNull: false }), 55 | __metadata("design:type", Number) 56 | ], Veiculo.prototype, "rotacao", void 0); 57 | __decorate([ 58 | sequelize_typescript_1.Column({ allowNull: false }), 59 | __metadata("design:type", Number) 60 | ], Veiculo.prototype, "transparencia", void 0); 61 | __decorate([ 62 | sequelize_typescript_1.Column({ allowNull: false }), 63 | __metadata("design:type", Number) 64 | ], Veiculo.prototype, "corPrimariaR", void 0); 65 | __decorate([ 66 | sequelize_typescript_1.Column({ allowNull: false }), 67 | __metadata("design:type", Number) 68 | ], Veiculo.prototype, "corPrimariaG", void 0); 69 | __decorate([ 70 | sequelize_typescript_1.Column({ allowNull: false }), 71 | __metadata("design:type", Number) 72 | ], Veiculo.prototype, "corPrimariaB", void 0); 73 | __decorate([ 74 | sequelize_typescript_1.Column({ allowNull: false }), 75 | __metadata("design:type", Number) 76 | ], Veiculo.prototype, "corSecundariaR", void 0); 77 | __decorate([ 78 | sequelize_typescript_1.Column({ allowNull: false }), 79 | __metadata("design:type", Number) 80 | ], Veiculo.prototype, "corSecundariaG", void 0); 81 | __decorate([ 82 | sequelize_typescript_1.Column({ allowNull: false }), 83 | __metadata("design:type", Number) 84 | ], Veiculo.prototype, "corSecundariaB", void 0); 85 | __decorate([ 86 | sequelize_typescript_1.Column({ allowNull: false, defaultValue: true }), 87 | __metadata("design:type", Boolean) 88 | ], Veiculo.prototype, "trancado", void 0); 89 | __decorate([ 90 | sequelize_typescript_1.Column({ allowNull: false, defaultValue: false }), 91 | __metadata("design:type", Boolean) 92 | ], Veiculo.prototype, "motor", void 0); 93 | __decorate([ 94 | sequelize_typescript_1.Column({ allowNull: false, defaultValue: 1 }), 95 | __metadata("design:type", Number) 96 | ], Veiculo.prototype, "mundo", void 0); 97 | __decorate([ 98 | sequelize_typescript_1.Column({ allowNull: false }), 99 | __metadata("design:type", Number) 100 | ], Veiculo.prototype, "valorOriginal", void 0); 101 | __decorate([ 102 | sequelize_typescript_1.Column({ allowNull: false }), 103 | __metadata("design:type", Number) 104 | ], Veiculo.prototype, "valorVenda", void 0); 105 | __decorate([ 106 | sequelize_typescript_1.Column({ allowNull: false, defaultValue: true }), 107 | __metadata("design:type", Boolean) 108 | ], Veiculo.prototype, "aVenda", void 0); 109 | __decorate([ 110 | sequelize_typescript_1.BelongsTo(() => Jogador_1.Jogador, { foreignKey: { allowNull: true, name: 'jogador' } }), 111 | __metadata("design:type", Jogador_1.Jogador) 112 | ], Veiculo.prototype, "jogadorVeiculo", void 0); 113 | Veiculo = __decorate([ 114 | sequelize_typescript_1.Table({ 115 | timestamps: true, 116 | createdAt: 'dataCriado', 117 | deletedAt: 'dataExcluido', 118 | updatedAt: 'dataAtualizado', 119 | paranoid: true, 120 | indexes: [ 121 | { 122 | unique: true, 123 | fields: ['placaOriginal', 'placaExibido'], 124 | } 125 | ] 126 | }) 127 | ], Veiculo); 128 | exports.Veiculo = Veiculo; 129 | //# sourceMappingURL=Veiculo.js.map -------------------------------------------------------------------------------- /common/database/models/Veiculo.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Veiculo.js","sourceRoot":"","sources":["Veiculo.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /common/database/models/Veiculo.ts: -------------------------------------------------------------------------------- 1 | import { BelongsTo, Column, DataType, Model, Table } from 'sequelize-typescript'; 2 | import { Jogador } from './Jogador'; 3 | 4 | @Table({ 5 | timestamps: true, 6 | createdAt: 'dataCriado', 7 | deletedAt: 'dataExcluido', 8 | updatedAt: 'dataAtualizado', 9 | paranoid: true, 10 | indexes: [ 11 | { 12 | unique: true, 13 | fields: ['placaOriginal', 'placaExibido'], 14 | } 15 | ] 16 | }) 17 | export class Veiculo extends Model { 18 | 19 | @Column({allowNull: false}) 20 | placaOriginal: string; 21 | 22 | @Column({allowNull: false}) 23 | placaExibido: string; 24 | 25 | @Column({allowNull: false}) 26 | modelo: string; 27 | 28 | @Column({allowNull: false, type: DataType.STRING}) 29 | posicaoX: string; 30 | 31 | @Column({allowNull: false, type: DataType.STRING}) 32 | posicaoY: string; 33 | 34 | @Column({allowNull: false, type: DataType.STRING}) 35 | posicaoZ: string; 36 | 37 | @Column({allowNull: false, type: DataType.STRING}) 38 | posicaoOriginalX: string; 39 | 40 | @Column({allowNull: false, type: DataType.STRING}) 41 | posicaoOriginalY: string; 42 | 43 | @Column({allowNull: false, type: DataType.STRING}) 44 | posicaoOriginalZ: string; 45 | 46 | @Column({allowNull: false}) 47 | rotacao: number; 48 | 49 | @Column({allowNull: false}) 50 | transparencia: number; 51 | 52 | @Column({allowNull: false}) 53 | corPrimariaR: number; 54 | 55 | @Column({allowNull: false}) 56 | corPrimariaG: number; 57 | 58 | @Column({allowNull: false}) 59 | corPrimariaB: number; 60 | 61 | @Column({allowNull: false}) 62 | corSecundariaR: number; 63 | 64 | @Column({allowNull: false}) 65 | corSecundariaG: number; 66 | 67 | @Column({allowNull: false}) 68 | corSecundariaB: number; 69 | 70 | @Column({allowNull: false, defaultValue: true}) 71 | trancado: boolean; 72 | 73 | @Column({allowNull: false, defaultValue: false}) 74 | motor: boolean; 75 | 76 | @Column({allowNull: false, defaultValue: 1}) 77 | mundo: number; 78 | 79 | @Column({allowNull: false}) 80 | valorOriginal: number; 81 | 82 | @Column({allowNull: false}) 83 | valorVenda: number; 84 | 85 | @Column({allowNull: false, defaultValue: true}) 86 | aVenda: boolean; 87 | 88 | @BelongsTo(() => Jogador, {foreignKey: {allowNull: true, name: 'jogador'}}) 89 | jogadorVeiculo: Jogador; 90 | } 91 | -------------------------------------------------------------------------------- /common/database/seeders/20190127204953-TipoPropriedade.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | up: (queryInterface, Sequelize) => { 5 | return queryInterface.bulkInsert('TipoPropriedade', [{ 6 | id: '1', 7 | nome: 'Banco', 8 | identificador: 'banco', 9 | dataCriado: new Date(), 10 | dataAtualizado: new Date(), 11 | }, { 12 | id: '2', 13 | nome: 'Posto de Gasolina', 14 | identificador: 'posto-gasolina', 15 | dataCriado: new Date(), 16 | dataAtualizado: new Date(), 17 | }, { 18 | id: '3', 19 | nome: 'Bar', 20 | identificador: 'bar', 21 | dataCriado: new Date(), 22 | dataAtualizado: new Date(), 23 | }, { 24 | id: '4', 25 | nome: 'Lanchonete', 26 | identificador: 'lanchonete', 27 | dataCriado: new Date(), 28 | dataAtualizado: new Date(), 29 | }, { 30 | id: '5', 31 | nome: 'Restaurante', 32 | identificador: 'restaurante', 33 | dataCriado: new Date(), 34 | dataAtualizado: new Date(), 35 | }, { 36 | id: '6', 37 | nome: 'Auto Escola', 38 | identificador: 'auto-escola', 39 | dataCriado: new Date(), 40 | dataAtualizado: new Date(), 41 | }, { 42 | id: '7', 43 | nome: 'Locadora de Veículos', 44 | identificador: 'locadora-veiculos', 45 | dataCriado: new Date(), 46 | dataAtualizado: new Date(), 47 | }, { 48 | id: '8', 49 | nome: 'Loja de Armas', 50 | identificador: 'loja-armas', 51 | dataCriado: new Date(), 52 | dataAtualizado: new Date(), 53 | }, { 54 | id: '9', 55 | nome: 'Loja de Roupas', 56 | identificador: 'loja-roupas', 57 | dataCriado: new Date(), 58 | dataAtualizado: new Date(), 59 | }, { 60 | id: '10', 61 | nome: 'Loja de Utensílios', 62 | identificador: 'loja-utensilios', 63 | dataCriado: new Date(), 64 | dataAtualizado: new Date(), 65 | }, { 66 | id: '11', 67 | nome: 'Academia', 68 | identificador: 'academia', 69 | dataCriado: new Date(), 70 | dataAtualizado: new Date(), 71 | }, { 72 | id: '12', 73 | nome: 'Imobiliaria', 74 | identificador: 'imobiliaria', 75 | dataCriado: new Date(), 76 | dataAtualizado: new Date(), 77 | }], {}); 78 | }, 79 | 80 | down: (queryInterface, Sequelize) => { 81 | return queryInterface.bulkDelete('TipoPropriedade', null, {}); 82 | } 83 | }; 84 | -------------------------------------------------------------------------------- /common/database/seeders/20190128132621-BancoTipoTransacao.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | up: (queryInterface, Sequelize) => { 5 | return queryInterface.bulkInsert('BancoTipoTransacao', [{ 6 | id: '1', 7 | nome: 'Crédito', 8 | identificador: 'credito', 9 | dataCriado: new Date(), 10 | dataAtualizado: new Date(), 11 | }, { 12 | id: '2', 13 | nome: 'Débito', 14 | identificador: 'debito', 15 | dataCriado: new Date(), 16 | dataAtualizado: new Date(), 17 | }], {}); 18 | }, 19 | 20 | down: (queryInterface, Sequelize) => { 21 | /* 22 | Add reverting commands here. 23 | Return a promise to correctly handle asynchronicity. 24 | 25 | Example: 26 | return queryInterface.bulkDelete('People', null, {}); 27 | */ 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /common/environment.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.environment = void 0; 4 | exports.environment = { 5 | database_name: 'BRAZUCAS', 6 | database_username: 'root', 7 | database_password: 'abcd1234', 8 | database_host: 'ragemp_mysql', 9 | database_port: '3306', 10 | posicaoLogin: new mp.Vector3(-1081.1380615234375, -2586.490234375, 13.800606727600098), 11 | }; 12 | //# sourceMappingURL=environment.js.map -------------------------------------------------------------------------------- /common/environment.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"environment.js","sourceRoot":"","sources":["environment.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAQ;IAC9B,aAAa,EAAE,UAAU;IACzB,iBAAiB,EAAE,MAAM;IACzB,iBAAiB,EAAE,UAAU;IAC7B,aAAa,EAAE,cAAc;IAC7B,aAAa,EAAE,MAAM;IACrB,YAAY,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,CAAC,cAAc,EAAE,kBAAkB,CAAC;CACvF,CAAC"} -------------------------------------------------------------------------------- /common/environment.ts: -------------------------------------------------------------------------------- 1 | export const environment: any = { 2 | database_name: 'BRAZUCAS', 3 | database_username: 'root', 4 | database_password: 'abcd1234', 5 | database_host: 'ragemp_mysql', 6 | database_port: '3306', 7 | posicaoLogin: new mp.Vector3(-1081.1380615234375, -2586.490234375, 13.800606727600098), 8 | }; 9 | -------------------------------------------------------------------------------- /common/interfaces.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.PLAYER_NAME_MAXLENGTH = exports.PLAYER_NAME_MINLENGTH = exports.PLAYER_NAME_REGEXP = void 0; 4 | exports.PLAYER_NAME_REGEXP = new RegExp('([a-zA-Z,0-9]+(_|)[a-zA-Z,0-9]+)'); 5 | exports.PLAYER_NAME_MINLENGTH = 3; 6 | exports.PLAYER_NAME_MAXLENGTH = 22; 7 | //# sourceMappingURL=interfaces.js.map -------------------------------------------------------------------------------- /common/interfaces.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["interfaces.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG,IAAI,MAAM,CAAC,kCAAkC,CAAC,CAAC;AACpE,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAC1B,QAAA,qBAAqB,GAAG,EAAE,CAAC"} -------------------------------------------------------------------------------- /common/interfaces.ts: -------------------------------------------------------------------------------- 1 | export const PLAYER_NAME_REGEXP = new RegExp('([a-zA-Z,0-9]+(_|)[a-zA-Z,0-9]+)'); 2 | export const PLAYER_NAME_MINLENGTH = 3; 3 | export const PLAYER_NAME_MAXLENGTH = 22; 4 | -------------------------------------------------------------------------------- /common/util/util.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.hexToRgb = exports.bcryptCompare = exports.bcryptHash = exports.soNumeros = exports.EnumToArray = void 0; 4 | const bcrypt = require("bcrypt-nodejs"); 5 | const StringIsNumber = value => isNaN(Number(value)) === false; 6 | function EnumToArray(enumme) { 7 | return Object.keys(enumme) 8 | .filter(StringIsNumber) 9 | .map(key => enumme[key]); 10 | } 11 | exports.EnumToArray = EnumToArray; 12 | function soNumeros(texto) { 13 | return texto.replace(/\D/g, ''); 14 | } 15 | exports.soNumeros = soNumeros; 16 | function bcryptHash(texto) { 17 | return new Promise((resolve, reject) => { 18 | bcrypt.hash(texto, null, null, (err, resultado) => { 19 | if (err) { 20 | reject(err); 21 | } 22 | else { 23 | resolve(resultado); 24 | } 25 | }); 26 | }); 27 | } 28 | exports.bcryptHash = bcryptHash; 29 | function bcryptCompare(data, hash) { 30 | return new Promise((resolve, reject) => { 31 | bcrypt.compare(data, hash, (err, resultado) => { 32 | if (err) { 33 | reject(err); 34 | } 35 | else { 36 | resolve(resultado); 37 | } 38 | }); 39 | }); 40 | } 41 | exports.bcryptCompare = bcryptCompare; 42 | function hexToRgb(hex) { 43 | const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); 44 | return result ? { 45 | r: parseInt(result[1], 16), 46 | g: parseInt(result[2], 16), 47 | b: parseInt(result[3], 16) 48 | } : null; 49 | } 50 | exports.hexToRgb = hexToRgb; 51 | //# sourceMappingURL=util.js.map -------------------------------------------------------------------------------- /common/util/util.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"util.js","sourceRoot":"","sources":["util.ts"],"names":[],"mappings":";;;AAAA,wCAAwC;AAExC,MAAM,cAAc,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC;AAE/D,SAAgB,WAAW,CAAC,MAAM;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SACvB,MAAM,CAAC,cAAc,CAAC;SACtB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,CAAC;AAJD,kCAIC;AAED,SAAgB,SAAS,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAFD,8BAEC;AAED,SAAgB,UAAU,CAAC,KAAa;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,SAAiB,EAAE,EAAE;YACxD,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;iBAAM;gBACL,OAAO,CAAC,SAAS,CAAC,CAAC;aACpB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAVD,gCAUC;AAED,SAAgB,aAAa,CAAC,IAAY,EAAE,IAAY;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,SAAkB,EAAE,EAAE;YACrD,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;iBAAM;gBACL,OAAO,CAAC,SAAS,CAAC,CAAC;aACpB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAVD,sCAUC;AAED,SAAgB,QAAQ,CAAC,GAAG;IAK1B,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAErE,OAAO,MAAM,CAAC,CAAC,CAAC;QACd,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KAC3B,CAAC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAZD,4BAYC"} -------------------------------------------------------------------------------- /common/util/util.ts: -------------------------------------------------------------------------------- 1 | import * as bcrypt from 'bcrypt-nodejs'; 2 | 3 | const StringIsNumber = value => isNaN(Number(value)) === false; 4 | 5 | export function EnumToArray(enumme) { 6 | return Object.keys(enumme) 7 | .filter(StringIsNumber) 8 | .map(key => enumme[key]); 9 | } 10 | 11 | export function soNumeros(texto: string) { 12 | return texto.replace(/\D/g, ''); 13 | } 14 | 15 | export function bcryptHash(texto: string) { 16 | return new Promise((resolve, reject) => { 17 | bcrypt.hash(texto, null, null, (err, resultado: string) => { 18 | if (err) { 19 | reject(err); 20 | } else { 21 | resolve(resultado); 22 | } 23 | }); 24 | }); 25 | } 26 | 27 | export function bcryptCompare(data: string, hash: string) { 28 | return new Promise((resolve, reject) => { 29 | bcrypt.compare(data, hash, (err, resultado: boolean) => { 30 | if (err) { 31 | reject(err); 32 | } else { 33 | resolve(resultado); 34 | } 35 | }); 36 | }); 37 | } 38 | 39 | export function hexToRgb(hex): { 40 | r: number, 41 | g: number, 42 | b: number, 43 | } { 44 | const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); 45 | 46 | return result ? { 47 | r: parseInt(result[1], 16), 48 | g: parseInt(result[2], 16), 49 | b: parseInt(result[3], 16) 50 | } : null; 51 | } 52 | -------------------------------------------------------------------------------- /common/util/weapons.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.Weapons = void 0; 4 | exports.Weapons = '{"Melee":[{"name":"BaseballBat","hash":"WEAPON_Bat"},{"name":"Knife","hash":"WEAPON_Knife"},{"name":"Nightstick","hash":"WEAPON_Nightstick"},{"name":"Crowbar","hash":"WEAPON_Crowbar"},{"name":"GolfClub","hash":"WEAPON_Golfclub"},{"name":"Hammer","hash":"WEAPON_Hammer"},{"name":"BrokenBottle","hash":"WEAPON_Bottle"},{"name":"AntiqueCavalryDagger","hash":"WEAPON_Dagger"},{"name":"Hatchet","hash":"WEAPON_Hatchet"},{"name":"KnuckleDuster","hash":"WEAPON_Knuckle"},{"name":"Machete","hash":"WEAPON_Machete"},{"name":"Flashlight","hash":"WEAPON_Flashlight"},{"name":"Switchblade","hash":"WEAPON_SwitchBlade"},{"name":"PoolCue","hash":"WEAPON_Poolcue"},{"name":"Wrench","hash":"WEAPON_Wrench"},{"name":"BattleAxe","hash":"WEAPON_Battleaxe"}],"Handguns":[{"name":"Pistol","hash":"WEAPON_Pistol"},{"name":"CombatPistol","hash":"WEAPON_CombatPistol"},{"name":"APPistol","hash":"WEAPON_APPistol"},{"name":"APStunGun","hash":"WEAPON_StunGun"},{"name":"Pistol.50","hash":"WEAPON_Pistol50"},{"name":"SNSPistol","hash":"WEAPON_SNSPistol"},{"name":"HeavyPistol","hash":"WEAPON_HeavyPistol"},{"name":"VintagePistol","hash":"WEAPON_VintagePistol"},{"name":"FlareGun","hash":"WEAPON_FlareGun"},{"name":"MarksmanPistol","hash":"WEAPON_MarksmanPistol"},{"name":"HeavyRevolver","hash":"WEAPON_Revolver"}],"SubmachineGuns":[{"name":"MicroSMG","hash":"WEAPON_MicroSMG"},{"name":"SMG","hash":"WEAPON_SMG"},{"name":"AssaultSMG","hash":"WEAPON_AssaultSMG"},{"name":"CombatPDW","hash":"WEAPON_CombatPDW"},{"name":"MachinePistol","hash":"WEAPON_MachinePistol"},{"name":"MiniSMG","hash":"WEAPON_MiniSMG"}],"Shotguns":[{"name":"PumpShotgun","hash":"WEAPON_PumpShotgun"},{"name":"Sawed-OffShotgun","hash":"WEAPON_SawnoffShotgun"},{"name":"AssaultShotgun","hash":"WEAPON_AssaultShotgun"},{"name":"BullpupShotgun","hash":"WEAPON_BullpupShotgun"},{"name":"Musket","hash":"WEAPON_Musket"},{"name":"HeavyShotgun","hash":"WEAPON_HeavyShotgun"},{"name":"DoubleBarreledShotgun","hash":"WEAPON_Dbshotgun"},{"name":"SweeperShotgun","hash":"WEAPON_Autoshotgun"}],"AssaultRifles":[{"name":"AssaultRifle","hash":"WEAPON_AssaultRifle"},{"name":"CarbineRifle","hash":"WEAPON_CarbineRifle"},{"name":"AdvancedRifle","hash":"WEAPON_AdvancedRifle"},{"name":"SpecialCarbine","hash":"WEAPON_SpecialCarbine"},{"name":"BullpupRifle","hash":"WEAPON_BullpupRifle"},{"name":"CompactRifle","hash":"WEAPON_CompactRifle"}],"LightMachineGuns":[{"name":"MG","hash":"WEAPON_MG"},{"name":"CombatMG","hash":"WEAPON_CombatMG"},{"name":"GusenbergSweeper","hash":"WEAPON_Gusenberg"}],"SniperRifles":[{"name":"SniperRifle","hash":"WEAPON_SniperRifle"},{"name":"HeavySniper","hash":"WEAPON_HeavySniper"},{"name":"MarksmanRifle","hash":"WEAPON_MarksmanRifle"}],"HeavyWeapons":[{"name":"RPG","hash":"WEAPON_RPG"},{"name":"GrenadeLauncher","hash":"WEAPON_GrenadeLauncher"},{"name":"Minigun","hash":"WEAPON_Minigun"},{"name":"FireworkLauncher","hash":"WEAPON_Firework"},{"name":"RailGun","hash":"WEAPON_Railgun"},{"name":"HomingLauncher","hash":"WEAPON_HomingLauncher"},{"name":"CompactGrenadeLauncher","hash":"WEAPON_CompactLauncher"}],"Thrown":[{"name":"Grenade","hash":"WEAPON_Grenade"},{"name":"TearGas","hash":"WEAPON_BZGas"},{"name":"MolotovCocktail","hash":"WEAPON_Molotov"},{"name":"StickyBomb","hash":"WEAPON_StickyBomb"},{"name":"ProximityMines","hash":"WEAPON_PROXMINE"},{"name":"Snowballs","hash":"WEAPON_Snowball"},{"name":"PipeBomb","hash":"WEAPON_Pipebomb"}],"Miscellaneous":[{"name":"JerryCan","hash":"WEAPON_PetrolCan"},{"name":"Parachute","hash":"GADGET_PARACHUTE"},{"name":"FireExtinguisher","hash":"WEAPON_FIREEXTINGUISHER"}]}'; 5 | //# sourceMappingURL=weapons.js.map -------------------------------------------------------------------------------- /common/util/weapons.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"weapons.js","sourceRoot":"","sources":["weapons.ts"],"names":[],"mappings":";;;AAAW,QAAA,OAAO,GAAG,y/GAAy/G,CAAC"} -------------------------------------------------------------------------------- /common/util/weapons.ts: -------------------------------------------------------------------------------- 1 | export let Weapons = '{"Melee":[{"name":"BaseballBat","hash":"WEAPON_Bat"},{"name":"Knife","hash":"WEAPON_Knife"},{"name":"Nightstick","hash":"WEAPON_Nightstick"},{"name":"Crowbar","hash":"WEAPON_Crowbar"},{"name":"GolfClub","hash":"WEAPON_Golfclub"},{"name":"Hammer","hash":"WEAPON_Hammer"},{"name":"BrokenBottle","hash":"WEAPON_Bottle"},{"name":"AntiqueCavalryDagger","hash":"WEAPON_Dagger"},{"name":"Hatchet","hash":"WEAPON_Hatchet"},{"name":"KnuckleDuster","hash":"WEAPON_Knuckle"},{"name":"Machete","hash":"WEAPON_Machete"},{"name":"Flashlight","hash":"WEAPON_Flashlight"},{"name":"Switchblade","hash":"WEAPON_SwitchBlade"},{"name":"PoolCue","hash":"WEAPON_Poolcue"},{"name":"Wrench","hash":"WEAPON_Wrench"},{"name":"BattleAxe","hash":"WEAPON_Battleaxe"}],"Handguns":[{"name":"Pistol","hash":"WEAPON_Pistol"},{"name":"CombatPistol","hash":"WEAPON_CombatPistol"},{"name":"APPistol","hash":"WEAPON_APPistol"},{"name":"APStunGun","hash":"WEAPON_StunGun"},{"name":"Pistol.50","hash":"WEAPON_Pistol50"},{"name":"SNSPistol","hash":"WEAPON_SNSPistol"},{"name":"HeavyPistol","hash":"WEAPON_HeavyPistol"},{"name":"VintagePistol","hash":"WEAPON_VintagePistol"},{"name":"FlareGun","hash":"WEAPON_FlareGun"},{"name":"MarksmanPistol","hash":"WEAPON_MarksmanPistol"},{"name":"HeavyRevolver","hash":"WEAPON_Revolver"}],"SubmachineGuns":[{"name":"MicroSMG","hash":"WEAPON_MicroSMG"},{"name":"SMG","hash":"WEAPON_SMG"},{"name":"AssaultSMG","hash":"WEAPON_AssaultSMG"},{"name":"CombatPDW","hash":"WEAPON_CombatPDW"},{"name":"MachinePistol","hash":"WEAPON_MachinePistol"},{"name":"MiniSMG","hash":"WEAPON_MiniSMG"}],"Shotguns":[{"name":"PumpShotgun","hash":"WEAPON_PumpShotgun"},{"name":"Sawed-OffShotgun","hash":"WEAPON_SawnoffShotgun"},{"name":"AssaultShotgun","hash":"WEAPON_AssaultShotgun"},{"name":"BullpupShotgun","hash":"WEAPON_BullpupShotgun"},{"name":"Musket","hash":"WEAPON_Musket"},{"name":"HeavyShotgun","hash":"WEAPON_HeavyShotgun"},{"name":"DoubleBarreledShotgun","hash":"WEAPON_Dbshotgun"},{"name":"SweeperShotgun","hash":"WEAPON_Autoshotgun"}],"AssaultRifles":[{"name":"AssaultRifle","hash":"WEAPON_AssaultRifle"},{"name":"CarbineRifle","hash":"WEAPON_CarbineRifle"},{"name":"AdvancedRifle","hash":"WEAPON_AdvancedRifle"},{"name":"SpecialCarbine","hash":"WEAPON_SpecialCarbine"},{"name":"BullpupRifle","hash":"WEAPON_BullpupRifle"},{"name":"CompactRifle","hash":"WEAPON_CompactRifle"}],"LightMachineGuns":[{"name":"MG","hash":"WEAPON_MG"},{"name":"CombatMG","hash":"WEAPON_CombatMG"},{"name":"GusenbergSweeper","hash":"WEAPON_Gusenberg"}],"SniperRifles":[{"name":"SniperRifle","hash":"WEAPON_SniperRifle"},{"name":"HeavySniper","hash":"WEAPON_HeavySniper"},{"name":"MarksmanRifle","hash":"WEAPON_MarksmanRifle"}],"HeavyWeapons":[{"name":"RPG","hash":"WEAPON_RPG"},{"name":"GrenadeLauncher","hash":"WEAPON_GrenadeLauncher"},{"name":"Minigun","hash":"WEAPON_Minigun"},{"name":"FireworkLauncher","hash":"WEAPON_Firework"},{"name":"RailGun","hash":"WEAPON_Railgun"},{"name":"HomingLauncher","hash":"WEAPON_HomingLauncher"},{"name":"CompactGrenadeLauncher","hash":"WEAPON_CompactLauncher"}],"Thrown":[{"name":"Grenade","hash":"WEAPON_Grenade"},{"name":"TearGas","hash":"WEAPON_BZGas"},{"name":"MolotovCocktail","hash":"WEAPON_Molotov"},{"name":"StickyBomb","hash":"WEAPON_StickyBomb"},{"name":"ProximityMines","hash":"WEAPON_PROXMINE"},{"name":"Snowballs","hash":"WEAPON_Snowball"},{"name":"PipeBomb","hash":"WEAPON_Pipebomb"}],"Miscellaneous":[{"name":"JerryCan","hash":"WEAPON_PetrolCan"},{"name":"Parachute","hash":"GADGET_PARACHUTE"},{"name":"FireExtinguisher","hash":"WEAPON_FIREEXTINGUISHER"}]}'; 2 | -------------------------------------------------------------------------------- /conf.json.dist: -------------------------------------------------------------------------------- 1 | { 2 | "maxplayers" : 50, 3 | "name" : "[:.:.Brazuca's Server.:.:] Sempre um passo a frente!", 4 | "gamemode" : "rpg/minigames", 5 | "streamdistance" : 500.0, 6 | "announce" : false, 7 | "port": 22005, 8 | "language": "pt", 9 | "url": "http://brazucas-server.com", 10 | "allow-cef-debugging": true 11 | } 12 | -------------------------------------------------------------------------------- /demo/demo1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/demo/demo1.jpeg -------------------------------------------------------------------------------- /demo/demo2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/demo/demo2.jpeg -------------------------------------------------------------------------------- /demo/demo3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/demo/demo3.png -------------------------------------------------------------------------------- /demo/demo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/demo/demo4.png -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | # docker-compose used for the dev environment 2 | 3 | version: "3.2" 4 | 5 | services: 6 | ragemp_server: 7 | image: brzserver/ragemp 8 | depends_on: 9 | - ragemp_mysql 10 | ports: 11 | - target: 22005 12 | published: 22005 13 | protocol: udp 14 | mode: host 15 | - 22006:22006 16 | volumes: 17 | - ./:/ragemp 18 | networks: 19 | - ragemp 20 | 21 | ragemp_mysql: 22 | image: mysql:5.6 23 | volumes: 24 | - ../ragemp-data/mysql:/var/lib/mysql 25 | ports: 26 | - 33010:3306 27 | environment: 28 | MYSQL_ROOT_PASSWORD: abcd1234 29 | MYSQL_DATABASE: BRAZUCAS 30 | networks: 31 | - ragemp 32 | 33 | ragemp_browser_server: 34 | ports: 35 | - 4230:4200 36 | image: node 37 | command: bash -c "npm i -g @angular/cli && ng serve --open --host 0.0.0.0 --disable-host-check" 38 | volumes: 39 | - ./:/source 40 | working_dir: /source/browser 41 | networks: 42 | - ragemp 43 | 44 | typescript_compiler: 45 | image: node 46 | command: bash -c "npm i typescript -g && tsc -w" 47 | volumes: 48 | - ./:/source 49 | working_dir: /source 50 | networks: 51 | - ragemp 52 | 53 | networks: 54 | ragemp: 55 | driver: bridge 56 | -------------------------------------------------------------------------------- /docker/ragemp.yml: -------------------------------------------------------------------------------- 1 | # docker-compose used for the dev environment 2 | 3 | version: "3.2" 4 | 5 | services: 6 | ragemp_server: 7 | image: brzserver/ragemp 8 | depends_on: 9 | - ragemp_mysql 10 | ports: 11 | - target: 22005 12 | published: 22005 13 | protocol: udp 14 | mode: host 15 | - 22006:22006 16 | volumes: 17 | - ./:/ragemp 18 | networks: 19 | - ragemp 20 | 21 | ragemp_mysql: 22 | image: mysql:5.6 23 | volumes: 24 | - ../ragemp-data/mysql:/var/lib/mysql 25 | ports: 26 | - 33010:3306 27 | environment: 28 | MYSQL_ROOT_PASSWORD: changeme 29 | MYSQL_DATABASE: BRAZUCAS 30 | networks: 31 | - ragemp 32 | 33 | networks: 34 | ragemp: 35 | driver: bridge 36 | -------------------------------------------------------------------------------- /docker/start_server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | echo "Starting server" 3 | cp -r -n /opt/x64/* /ragemp 4 | cd /ragemp 5 | npm install --no-package-lock 6 | /ragemp/server 7 | -------------------------------------------------------------------------------- /node.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/node.dll -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "brazucas-server-ragemp", 3 | "version": "1.0.0", 4 | "description": "Servidor do Brazucas para o RageMP", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/brazucas/ragemp.git" 12 | }, 13 | "author": "Pedro Papadópolis", 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/brazucas/ragemp/issues" 17 | }, 18 | "homepage": "https://github.com/brazucas/ragemp#readme", 19 | "dependencies": { 20 | "@types/bcrypt-nodejs": "0.0.30", 21 | "@types/glob": "^5.0.35", 22 | "@types/mocha": "^5.2.2", 23 | "@types/node": "^10.3.3", 24 | "@types/ragemp-s": "github:CocaColaBear/types-ragemp-s#master", 25 | "@types/rx": "^4.1.1", 26 | "@types/sequelize": "^4.27.23", 27 | "angular-cli-ghpages": "^0.6.2", 28 | "bcrypt": "^3.0.6", 29 | "bcrypt-nodejs": "0.0.3", 30 | "commitplease": "^3.2.0", 31 | "eslint": "^4.6.1", 32 | "fs": "0.0.1-security", 33 | "glob": "^7.1.2", 34 | "lodash": "^4.17.11", 35 | "mocha": "^5.2.0", 36 | "mysql": "^2.15.0", 37 | "mysql2": "^1.5.3", 38 | "reflect-metadata": "^0.1.12", 39 | "rxjs": "^6.2.1", 40 | "rxjs-compat": "^6.2.1", 41 | "sequelize": "^4.44.0", 42 | "sequelize-cli": "^5.4.0", 43 | "sequelize-typescript": "^0.6.5", 44 | "tslint-eslint-rules": "^5.4.0", 45 | "typescript": "^2.9.2", 46 | "underscore": "^1.8.3", 47 | "util": "^0.10.4" 48 | }, 49 | "devDependencies": {} 50 | } 51 | -------------------------------------------------------------------------------- /packages/MapEditor/index.js: -------------------------------------------------------------------------------- 1 | require("./MapEditorServer.js") -------------------------------------------------------------------------------- /packages/index.js: -------------------------------------------------------------------------------- 1 | require('rpg/index.js'); 2 | -------------------------------------------------------------------------------- /packages/rpg/consts/rpg-consts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.RpgConsts = void 0; 4 | var RpgConsts; 5 | (function (RpgConsts) { 6 | RpgConsts[RpgConsts["MINIMUM_PLAYERS"] = 0] = "MINIMUM_PLAYERS"; 7 | })(RpgConsts = exports.RpgConsts || (exports.RpgConsts = {})); 8 | //# sourceMappingURL=rpg-consts.js.map -------------------------------------------------------------------------------- /packages/rpg/consts/rpg-consts.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"rpg-consts.js","sourceRoot":"","sources":["rpg-consts.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAEX;AAFD,WAAY,SAAS;IACnB,+DAAmB,CAAA;AACrB,CAAC,EAFW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAEpB"} -------------------------------------------------------------------------------- /packages/rpg/consts/rpg-consts.ts: -------------------------------------------------------------------------------- 1 | export enum RpgConsts { 2 | MINIMUM_PLAYERS = 0, 3 | } 4 | -------------------------------------------------------------------------------- /packages/rpg/consts/status.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.StatusConsts = void 0; 4 | var StatusConsts; 5 | (function (StatusConsts) { 6 | StatusConsts[StatusConsts["WAITING_PLAYERS"] = 1] = "WAITING_PLAYERS"; 7 | StatusConsts[StatusConsts["STARTING"] = 2] = "STARTING"; 8 | StatusConsts[StatusConsts["IN_PROGRESS"] = 3] = "IN_PROGRESS"; 9 | StatusConsts[StatusConsts["FINISHED"] = 4] = "FINISHED"; 10 | })(StatusConsts = exports.StatusConsts || (exports.StatusConsts = {})); 11 | //# sourceMappingURL=status.js.map -------------------------------------------------------------------------------- /packages/rpg/consts/status.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"status.js","sourceRoot":"","sources":["status.ts"],"names":[],"mappings":";;;AAAA,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,qEAAmB,CAAA;IACnB,uDAAY,CAAA;IACZ,6DAAe,CAAA;IACf,uDAAY,CAAA;AACd,CAAC,EALW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAKvB"} -------------------------------------------------------------------------------- /packages/rpg/consts/status.ts: -------------------------------------------------------------------------------- 1 | export enum StatusConsts { 2 | WAITING_PLAYERS = 1, 3 | STARTING = 2, 4 | IN_PROGRESS = 3, 5 | FINISHED = 4, 6 | } 7 | -------------------------------------------------------------------------------- /packages/rpg/handler/playerChat.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.PlayerChatHandler = void 0; 4 | function PlayerChatHandler(brazucasServer, player, text) { 5 | console.log(`[CHAT] (${player.id}) ${player.name}: ${text}`); 6 | mp.players.broadcast(`!{#FFFF00}(${player.id}) ${player.name}: !{#FFFFFF}${text}`); 7 | } 8 | exports.PlayerChatHandler = PlayerChatHandler; 9 | //# sourceMappingURL=playerChat.js.map -------------------------------------------------------------------------------- /packages/rpg/handler/playerChat.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"playerChat.js","sourceRoot":"","sources":["playerChat.ts"],"names":[],"mappings":";;;AAEA,SAAgB,iBAAiB,CAAC,cAA8B,EAAE,MAAgB,EAAE,IAAY;IAC9F,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;IAE7D,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,eAAe,IAAI,EAAE,CAAC,CAAC;AACrF,CAAC;AAJD,8CAIC"} -------------------------------------------------------------------------------- /packages/rpg/handler/playerChat.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasServer } from '../../../common/brazucas-server'; 2 | 3 | export function PlayerChatHandler(brazucasServer: BrazucasServer, player: PlayerMp, text: string) { 4 | console.log(`[CHAT] (${player.id}) ${player.name}: ${text}`); 5 | 6 | mp.players.broadcast(`!{#FFFF00}(${player.id}) ${player.name}: !{#FFFFFF}${text}`); 7 | } 8 | -------------------------------------------------------------------------------- /packages/rpg/handler/playerDeath.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.PlayerDeathHandler = void 0; 4 | const death_reason_1 = require("../interfaces/death-reason"); 5 | function PlayerDeathHandler(brazucasServer, player, reason, killer) { 6 | console.debug(`!{FF0000}[MORTE]!{FFFFFF} ${killer.name} matou ${player.name} (${reason}) (${death_reason_1.razaoMorte(reason)})`); 7 | mp.players.broadcast(`[MORTE] ${killer.name} matou ${player.name} (${death_reason_1.razaoMorte(reason)})`); 8 | player.spawn(player.position); 9 | } 10 | exports.PlayerDeathHandler = PlayerDeathHandler; 11 | //# sourceMappingURL=playerDeath.js.map -------------------------------------------------------------------------------- /packages/rpg/handler/playerDeath.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"playerDeath.js","sourceRoot":"","sources":["playerDeath.ts"],"names":[],"mappings":";;;AACA,6DAAwD;AAExD,SAAgB,kBAAkB,CAAE,cAA8B,EAAE,MAAgB,EAAE,MAAc,EAAE,MAAgB;IACpH,OAAO,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI,KAAK,MAAM,MAAM,yBAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEnH,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI,KAAK,yBAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE5F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAND,gDAMC"} -------------------------------------------------------------------------------- /packages/rpg/handler/playerDeath.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasServer } from '../../../common/brazucas-server'; 2 | import { razaoMorte } from '../interfaces/death-reason'; 3 | 4 | export function PlayerDeathHandler (brazucasServer: BrazucasServer, player: PlayerMp, reason: number, killer: PlayerMp) { 5 | console.debug(`!{FF0000}[MORTE]!{FFFFFF} ${killer.name} matou ${player.name} (${reason}) (${razaoMorte(reason)})`); 6 | 7 | mp.players.broadcast(`[MORTE] ${killer.name} matou ${player.name} (${razaoMorte(reason)})`); 8 | 9 | player.spawn(player.position); 10 | } 11 | -------------------------------------------------------------------------------- /packages/rpg/handler/playerEnterVehicle.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.PlayerEnterVehicle = void 0; 4 | const veiculo_provider_1 = require("../providers/veiculo.provider"); 5 | function PlayerEnterVehicle(brazucasServer, vehicle, seat) { 6 | veiculo_provider_1.VeiculoProvider.estacionar(vehicle); 7 | } 8 | exports.PlayerEnterVehicle = PlayerEnterVehicle; 9 | //# sourceMappingURL=playerEnterVehicle.js.map -------------------------------------------------------------------------------- /packages/rpg/handler/playerEnterVehicle.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"playerEnterVehicle.js","sourceRoot":"","sources":["playerEnterVehicle.ts"],"names":[],"mappings":";;;AACA,oEAAgE;AAEhE,SAAgB,kBAAkB,CAAC,cAA8B,EAAE,OAAkB,EAAE,IAAY;IACjG,kCAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,gDAEC"} -------------------------------------------------------------------------------- /packages/rpg/handler/playerEnterVehicle.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasServer } from '../../../common/brazucas-server'; 2 | import { VeiculoProvider } from '../providers/veiculo.provider'; 3 | 4 | export function PlayerEnterVehicle(brazucasServer: BrazucasServer, vehicle: VehicleMp, seat: number) { 5 | VeiculoProvider.estacionar(vehicle); 6 | } 7 | -------------------------------------------------------------------------------- /packages/rpg/handler/playerExitVehicle.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.PlayerExitVehicle = void 0; 4 | const veiculo_provider_1 = require("../providers/veiculo.provider"); 5 | function PlayerExitVehicle(brazucasServer, vehicle) { 6 | veiculo_provider_1.VeiculoProvider.estacionar(vehicle); 7 | } 8 | exports.PlayerExitVehicle = PlayerExitVehicle; 9 | //# sourceMappingURL=playerExitVehicle.js.map -------------------------------------------------------------------------------- /packages/rpg/handler/playerExitVehicle.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"playerExitVehicle.js","sourceRoot":"","sources":["playerExitVehicle.ts"],"names":[],"mappings":";;;AAEA,oEAAgE;AAEhE,SAAgB,iBAAiB,CAAE,cAA8B,EAAE,OAAkB;IACnF,kCAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,8CAEC"} -------------------------------------------------------------------------------- /packages/rpg/handler/playerExitVehicle.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasServer } from '../../../common/brazucas-server'; 2 | import { notificarTodos } from '../lib/functions/player'; 3 | import { VeiculoProvider } from '../providers/veiculo.provider'; 4 | 5 | export function PlayerExitVehicle (brazucasServer: BrazucasServer, vehicle: VehicleMp) { 6 | VeiculoProvider.estacionar(vehicle); 7 | } 8 | -------------------------------------------------------------------------------- /packages/rpg/handler/playerJoin.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.PlayerJoinHandler = void 0; 13 | const brazucas_eventos_1 = require("../interfaces/brazucas-eventos"); 14 | const player_1 = require("../lib/functions/player"); 15 | const rpg_1 = require("../rpg"); 16 | function PlayerJoinHandler(brazucasServer, player) { 17 | console.debug(`[ENTRADA] ${player.name} entrou no servidor (${player.ip})`); 18 | player_1.notificarTodos(`~y~${player.name} ~w~entrou no servidor`); 19 | const subscribe = brazucasServer.isReady.subscribe(() => __awaiter(this, void 0, void 0, function* () { 20 | const jogador = yield brazucasServer.loadPlayer(player.name); 21 | if (jogador) { 22 | console.debug(`[LOAD PLAYER] Jogador ${jogador.nome} carregado`); 23 | } 24 | else { 25 | console.debug('[LOAD PLAYER] Jogador não encontrado'); 26 | } 27 | rpg_1.Rpg.playerProvider.addPlayer({ 28 | mp: player, 29 | storage: jogador, 30 | }); 31 | player_1.playerEvent(player, brazucas_eventos_1.BrazucasEventos.DADOS_JOGADOR, jogador.toJSON()); 32 | subscribe.unsubscribe(); 33 | })); 34 | } 35 | exports.PlayerJoinHandler = PlayerJoinHandler; 36 | //# sourceMappingURL=playerJoin.js.map -------------------------------------------------------------------------------- /packages/rpg/handler/playerJoin.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"playerJoin.js","sourceRoot":"","sources":["playerJoin.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,qEAAiE;AACjE,oDAAsE;AACtE,gCAA6B;AAE7B,SAAgB,iBAAiB,CAAC,cAA8B,EAAE,MAAgB;IAChF,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,IAAI,wBAAwB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAE5E,uBAAc,CAAC,MAAM,MAAM,CAAC,IAAI,wBAAwB,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,GAAS,EAAE;QAC5D,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE7D,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;SAClE;aAAM;YACL,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACvD;QAGD,SAAG,CAAC,cAAc,CAAC,SAAS,CAAC;YAC3B,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,oBAAW,CAAU,MAAM,EAAE,kCAAe,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1B,CAAC,CAAA,CAAC,CAAC;AACL,CAAC;AAvBD,8CAuBC"} -------------------------------------------------------------------------------- /packages/rpg/handler/playerJoin.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasServer } from '../../../common/brazucas-server'; 2 | import { Jogador } from '../../../common/database/models/Jogador'; 3 | import { BrazucasEventos } from '../interfaces/brazucas-eventos'; 4 | import { notificarTodos, playerEvent } from '../lib/functions/player'; 5 | import { Rpg } from '../rpg'; 6 | 7 | export function PlayerJoinHandler(brazucasServer: BrazucasServer, player: PlayerMp) { 8 | console.debug(`[ENTRADA] ${player.name} entrou no servidor (${player.ip})`); 9 | 10 | notificarTodos(`~y~${player.name} ~w~entrou no servidor`); 11 | 12 | const subscribe = brazucasServer.isReady.subscribe(async () => { 13 | const jogador = await brazucasServer.loadPlayer(player.name); 14 | 15 | if (jogador) { 16 | console.debug(`[LOAD PLAYER] Jogador ${jogador.nome} carregado`); 17 | } else { 18 | console.debug('[LOAD PLAYER] Jogador não encontrado'); 19 | } 20 | 21 | 22 | Rpg.playerProvider.addPlayer({ 23 | mp: player, 24 | storage: jogador, 25 | }); 26 | 27 | playerEvent(player, BrazucasEventos.DADOS_JOGADOR, jogador.toJSON()); 28 | subscribe.unsubscribe(); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /packages/rpg/handler/playerQuit.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.PlayerQuitHandler = void 0; 4 | const _ = require("underscore"); 5 | const player_1 = require("../lib/functions/player"); 6 | const rpg_1 = require("../rpg"); 7 | function PlayerQuitHandler(brazucasServer, player, exitType, reason) { 8 | console.debug(`[SAÍDA] ${player.name} saiu do servidor (IP: ${player.ip}, Tipo: ${exitType}, Razão: ${reason})`); 9 | const playerToRemove = rpg_1.Rpg.playerProvider.players$.value.find(BRZPlayer => BRZPlayer.storage.nome === player.name); 10 | rpg_1.Rpg.playerProvider.players$.next(_.without(rpg_1.Rpg.playerProvider.players$.value, playerToRemove)); 11 | player_1.notificarTodos(`~r~${player.name} ~w~saiu do servidor`); 12 | } 13 | exports.PlayerQuitHandler = PlayerQuitHandler; 14 | //# sourceMappingURL=playerQuit.js.map -------------------------------------------------------------------------------- /packages/rpg/handler/playerQuit.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"playerQuit.js","sourceRoot":"","sources":["playerQuit.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAEhC,oDAAyD;AACzD,gCAA6B;AAE7B,SAAgB,iBAAiB,CAAC,cAA8B,EAAE,MAAgB,EAAE,QAAgB,EAAE,MAAc;IAClH,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,0BAA0B,MAAM,CAAC,EAAE,WAAW,QAAQ,YAAY,MAAM,GAAG,CAAC,CAAC;IAEjH,MAAM,cAAc,GAAG,SAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;IAEnH,SAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAE/F,uBAAc,CAAC,MAAM,MAAM,CAAC,IAAI,sBAAsB,CAAC,CAAC;AAC1D,CAAC;AARD,8CAQC"} -------------------------------------------------------------------------------- /packages/rpg/handler/playerQuit.ts: -------------------------------------------------------------------------------- 1 | import * as _ from 'underscore'; 2 | import { BrazucasServer } from '../../../common/brazucas-server'; 3 | import { notificarTodos } from '../lib/functions/player'; 4 | import { Rpg } from '../rpg'; 5 | 6 | export function PlayerQuitHandler(brazucasServer: BrazucasServer, player: PlayerMp, exitType: number, reason: number) { 7 | console.debug(`[SAÍDA] ${player.name} saiu do servidor (IP: ${player.ip}, Tipo: ${exitType}, Razão: ${reason})`); 8 | 9 | const playerToRemove = Rpg.playerProvider.players$.value.find(BRZPlayer => BRZPlayer.storage.nome === player.name); 10 | 11 | Rpg.playerProvider.players$.next(_.without(Rpg.playerProvider.players$.value, playerToRemove)); 12 | 13 | notificarTodos(`~r~${player.name} ~w~saiu do servidor`); 14 | } 15 | -------------------------------------------------------------------------------- /packages/rpg/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const brazucas_server_1 = require("../../common/brazucas-server"); 13 | const playerChat_1 = require("./handler/playerChat"); 14 | const playerDeath_1 = require("./handler/playerDeath"); 15 | const playerEnterVehicle_1 = require("./handler/playerEnterVehicle"); 16 | const playerExitVehicle_1 = require("./handler/playerExitVehicle"); 17 | const playerJoin_1 = require("./handler/playerJoin"); 18 | const playerQuit_1 = require("./handler/playerQuit"); 19 | const brazucas_eventos_1 = require("./interfaces/brazucas-eventos"); 20 | const commands_1 = require("./lib/commands/commands"); 21 | const events_1 = require("./lib/events/events"); 22 | const player_1 = require("./lib/functions/player"); 23 | const rpg_1 = require("./rpg"); 24 | var EventKey = RageEnums.EventKey; 25 | mp.events.add(EventKey.PLAYER_COMMAND, (player, command) => { 26 | console.debug(`[COMANDO] ${player.name} enviou o comando ${command}`); 27 | const comandos = new commands_1.Commands(brazucasServer); 28 | const arr = command.split(' '); 29 | if (comandos[arr[0]]) { 30 | const comando = arr[0]; 31 | arr.shift(); 32 | comandos[comando](player, ...arr); 33 | } 34 | else { 35 | player.outputChatBox('!{#FF0000}Comando desconhecido'); 36 | } 37 | }); 38 | let brazucasServer = new brazucas_server_1.BrazucasServer(); 39 | mp.events.add(EventKey.PLAYER_JOIN, playerJoin_1.PlayerJoinHandler.bind(playerJoin_1.PlayerJoinHandler, brazucasServer)); 40 | mp.events.add(EventKey.PLAYER_QUIT, playerQuit_1.PlayerQuitHandler.bind(playerQuit_1.PlayerQuitHandler, brazucasServer)); 41 | mp.events.add(EventKey.PLAYER_CHAT, playerChat_1.PlayerChatHandler.bind(playerChat_1.PlayerChatHandler, brazucasServer)); 42 | mp.events.add(EventKey.PLAYER_DEATH, playerDeath_1.PlayerDeathHandler.bind(playerDeath_1.PlayerDeathHandler, brazucasServer)); 43 | mp.events.add(EventKey.PLAYER_EXIT_VEHICLE, playerExitVehicle_1.PlayerExitVehicle.bind(playerExitVehicle_1.PlayerExitVehicle, brazucasServer)); 44 | mp.events.add(EventKey.PLAYER_ENTER_VEHICLE, playerEnterVehicle_1.PlayerEnterVehicle.bind(playerEnterVehicle_1.PlayerEnterVehicle, brazucasServer)); 45 | mp.events.add(brazucas_eventos_1.BrazucasEventos.BROWSER, (player, serverEventStr) => __awaiter(void 0, void 0, void 0, function* () { 46 | const serverEvent = JSON.parse(serverEventStr); 47 | console.debug(`[EVENTOS] Jogador ${player.name} ativou o evento ${serverEvent.event} (ID ${serverEvent.eventId})` 48 | + ` com os seguintes parâmetros: ${serverEvent.data}`); 49 | const data = JSON.parse(serverEvent.data); 50 | const events = new events_1.Events(brazucasServer); 51 | if (events[serverEvent.event]) { 52 | const resposta = yield events[serverEvent.event](player, data); 53 | player_1.playerEvent(player, brazucas_eventos_1.BrazucasEventos.SERVER, resposta, serverEvent.eventId); 54 | } 55 | else { 56 | console.error(`[ERROR] O evento ${event} é inexistente`); 57 | } 58 | })); 59 | brazucasServer.onload() 60 | .subscribe(() => new rpg_1.Rpg(brazucasServer), console.error); 61 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /packages/rpg/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /packages/rpg/index.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import { AutenticacaoResultado } from '../../browser/src/interfaces/login.interface'; 4 | import { BrazucasServer } from '../../common/brazucas-server'; 5 | import { PlayerChatHandler } from './handler/playerChat'; 6 | import { PlayerDeathHandler } from './handler/playerDeath'; 7 | import { PlayerEnterVehicle } from './handler/playerEnterVehicle'; 8 | import { PlayerExitVehicle } from './handler/playerExitVehicle'; 9 | import { PlayerJoinHandler } from './handler/playerJoin'; 10 | import { PlayerQuitHandler } from './handler/playerQuit'; 11 | import { BrazucasEventos, ServerEvent } from './interfaces/brazucas-eventos'; 12 | import { Commands } from './lib/commands/commands'; 13 | import { Events } from './lib/events/events'; 14 | import { playerEvent } from './lib/functions/player'; 15 | import { Rpg } from './rpg'; 16 | import EventKey = RageEnums.EventKey; 17 | 18 | mp.events.add(EventKey.PLAYER_COMMAND, (player: PlayerMp, command: string) => { 19 | console.debug(`[COMANDO] ${player.name} enviou o comando ${command}`); 20 | 21 | const comandos = new Commands(brazucasServer); 22 | 23 | const arr = command.split(' '); 24 | 25 | if (comandos[arr[0]]) { 26 | const comando = arr[0]; 27 | 28 | arr.shift(); 29 | 30 | comandos[comando](player, ...arr); 31 | } else { 32 | player.outputChatBox('!{#FF0000}Comando desconhecido'); 33 | } 34 | }); 35 | 36 | let brazucasServer = new BrazucasServer(); 37 | 38 | mp.events.add(EventKey.PLAYER_JOIN, PlayerJoinHandler.bind(PlayerJoinHandler, brazucasServer)); 39 | mp.events.add(EventKey.PLAYER_QUIT, PlayerQuitHandler.bind(PlayerQuitHandler, brazucasServer)); 40 | mp.events.add(EventKey.PLAYER_CHAT, PlayerChatHandler.bind(PlayerChatHandler, brazucasServer)); 41 | mp.events.add(EventKey.PLAYER_DEATH, PlayerDeathHandler.bind(PlayerDeathHandler, brazucasServer)); 42 | mp.events.add(EventKey.PLAYER_EXIT_VEHICLE, PlayerExitVehicle.bind(PlayerExitVehicle, brazucasServer)); 43 | mp.events.add(EventKey.PLAYER_ENTER_VEHICLE, PlayerEnterVehicle.bind(PlayerEnterVehicle, brazucasServer)); 44 | 45 | mp.events.add(BrazucasEventos.BROWSER, async (player: PlayerMp, serverEventStr: string) => { 46 | const serverEvent: ServerEvent = JSON.parse(serverEventStr); 47 | 48 | console.debug(`[EVENTOS] Jogador ${player.name} ativou o evento ${serverEvent.event} (ID ${serverEvent.eventId})` 49 | + ` com os seguintes parâmetros: ${serverEvent.data}`); 50 | 51 | const data: any = JSON.parse(serverEvent.data); 52 | 53 | const events = new Events(brazucasServer); 54 | 55 | if (events[serverEvent.event]) { 56 | const resposta = await events[serverEvent.event](player, data); 57 | 58 | playerEvent(player, BrazucasEventos.SERVER, resposta, serverEvent.eventId); 59 | } else { 60 | console.error(`[ERROR] O evento ${event} é inexistente`); 61 | } 62 | }); 63 | 64 | brazucasServer.onload() 65 | .subscribe(() => new Rpg(brazucasServer), console.error); 66 | -------------------------------------------------------------------------------- /packages/rpg/interfaces/brazucas-eventos.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.BrazucasEventos = void 0; 4 | var BrazucasEventos; 5 | (function (BrazucasEventos) { 6 | BrazucasEventos["BROWSER"] = "browser"; 7 | BrazucasEventos["SERVER"] = "server"; 8 | BrazucasEventos["AUTENTICAR_JOGADOR"] = "AutenticarJogador"; 9 | BrazucasEventos["CRIAR_VEICULO"] = "CriarVeiculo"; 10 | BrazucasEventos["REGISTRAR_JOGADOR"] = "RegistrarJogador"; 11 | BrazucasEventos["AUTENTICACAO_RESULTADO"] = "AutenticacaoResultado"; 12 | BrazucasEventos["REGISTRO_RESULTADO"] = "RegistroResultado"; 13 | BrazucasEventos["DADOS_JOGADOR"] = "DadosJogador"; 14 | BrazucasEventos["ATUALIZAR_DADOS_JOGADOR"] = "AtualizarDadosJogador"; 15 | BrazucasEventos["INICIAR_NAVEGADOR"] = "IniciarNavegador"; 16 | BrazucasEventos["CURSOR"] = "cursor"; 17 | BrazucasEventos["HABILITAR_VOICE_CHAT"] = "HabilitarVoiceChat"; 18 | BrazucasEventos["DESABILITAR_VOICE_CHAT"] = "DesabilitarVoiceChat"; 19 | BrazucasEventos["ANIMACAO_VOICE_CHAT"] = "AnimacaoVoiceChat"; 20 | BrazucasEventos["ATUALIZAR_FOME"] = "AtualizarFome"; 21 | BrazucasEventos["ATUALIZAR_SEDE"] = "AtualizarSede"; 22 | BrazucasEventos["ATUALIZAR_SONO"] = "AtualizarSono"; 23 | BrazucasEventos["ATUALIZAR_FORCA_FISICA"] = "AtualizarForcaFisica"; 24 | BrazucasEventos["VISUALIZAR_ANIMACAO"] = "VisualizarAnimacao"; 25 | })(BrazucasEventos = exports.BrazucasEventos || (exports.BrazucasEventos = {})); 26 | //# sourceMappingURL=brazucas-eventos.js.map -------------------------------------------------------------------------------- /packages/rpg/interfaces/brazucas-eventos.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"brazucas-eventos.js","sourceRoot":"","sources":["brazucas-eventos.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAoBX;AApBD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,oCAAiB,CAAA;IACjB,2DAAwC,CAAA;IACxC,iDAA8B,CAAA;IAC9B,yDAAsC,CAAA;IACtC,mEAAgD,CAAA;IAChD,2DAAwC,CAAA;IACxC,iDAA8B,CAAA;IAC9B,oEAAiD,CAAA;IACjD,yDAAsC,CAAA;IACtC,oCAAiB,CAAA;IACjB,8DAA2C,CAAA;IAC3C,kEAA+C,CAAA;IAC/C,4DAAyC,CAAA;IACzC,mDAAgC,CAAA;IAChC,mDAAgC,CAAA;IAChC,mDAAgC,CAAA;IAChC,kEAA+C,CAAA;IAC/C,6DAA0C,CAAA;AAC5C,CAAC,EApBW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAoB1B"} -------------------------------------------------------------------------------- /packages/rpg/interfaces/brazucas-eventos.ts: -------------------------------------------------------------------------------- 1 | export enum BrazucasEventos { 2 | BROWSER = 'browser', 3 | SERVER = 'server', 4 | AUTENTICAR_JOGADOR = 'AutenticarJogador', 5 | CRIAR_VEICULO = 'CriarVeiculo', 6 | REGISTRAR_JOGADOR = 'RegistrarJogador', 7 | AUTENTICACAO_RESULTADO = 'AutenticacaoResultado', 8 | REGISTRO_RESULTADO = 'RegistroResultado', 9 | DADOS_JOGADOR = 'DadosJogador', 10 | ATUALIZAR_DADOS_JOGADOR = 'AtualizarDadosJogador', 11 | INICIAR_NAVEGADOR = 'IniciarNavegador', 12 | CURSOR = 'cursor', 13 | HABILITAR_VOICE_CHAT = 'HabilitarVoiceChat', 14 | DESABILITAR_VOICE_CHAT = 'DesabilitarVoiceChat', 15 | ANIMACAO_VOICE_CHAT = 'AnimacaoVoiceChat', 16 | ATUALIZAR_FOME = 'AtualizarFome', 17 | ATUALIZAR_SEDE = 'AtualizarSede', 18 | ATUALIZAR_SONO = 'AtualizarSono', 19 | ATUALIZAR_FORCA_FISICA = 'AtualizarForcaFisica', 20 | VISUALIZAR_ANIMACAO = 'VisualizarAnimacao', 21 | } 22 | 23 | export interface ServerEvent { 24 | eventId?: number, 25 | event: string, 26 | data: T, 27 | } 28 | -------------------------------------------------------------------------------- /packages/rpg/interfaces/death-reason.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"death-reason.js","sourceRoot":"","sources":["death-reason.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /packages/rpg/interfaces/mp.veiculo-cor.interface.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.MpVeiculoCorInterface = void 0; 4 | var MpVeiculoCorInterface; 5 | (function (MpVeiculoCorInterface) { 6 | MpVeiculoCorInterface[MpVeiculoCorInterface["PRIMARIA"] = 0] = "PRIMARIA"; 7 | MpVeiculoCorInterface[MpVeiculoCorInterface["SECUNDARIA"] = 1] = "SECUNDARIA"; 8 | })(MpVeiculoCorInterface = exports.MpVeiculoCorInterface || (exports.MpVeiculoCorInterface = {})); 9 | //# sourceMappingURL=mp.veiculo-cor.interface.js.map -------------------------------------------------------------------------------- /packages/rpg/interfaces/mp.veiculo-cor.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"mp.veiculo-cor.interface.js","sourceRoot":"","sources":["mp.veiculo-cor.interface.ts"],"names":[],"mappings":";;;AAAA,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,yEAAY,CAAA;IACZ,6EAAc,CAAA;AAChB,CAAC,EAHW,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QAGhC"} -------------------------------------------------------------------------------- /packages/rpg/interfaces/mp.veiculo-cor.interface.ts: -------------------------------------------------------------------------------- 1 | export enum MpVeiculoCorInterface { 2 | PRIMARIA = 0, 3 | SECUNDARIA = 1, 4 | } 5 | -------------------------------------------------------------------------------- /packages/rpg/interfaces/player.interface.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | //# sourceMappingURL=player.interface.js.map -------------------------------------------------------------------------------- /packages/rpg/interfaces/player.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"player.interface.js","sourceRoot":"","sources":["player.interface.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /packages/rpg/interfaces/player.interface.ts: -------------------------------------------------------------------------------- 1 | import { Jogador } from '../../../common/database/models/Jogador'; 2 | 3 | export interface BRZPlayerInterface { 4 | mp: PlayerMp; 5 | storage: Jogador; 6 | } 7 | -------------------------------------------------------------------------------- /packages/rpg/interfaces/veiculo.interface.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | //# sourceMappingURL=veiculo.interface.js.map -------------------------------------------------------------------------------- /packages/rpg/interfaces/veiculo.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"veiculo.interface.js","sourceRoot":"","sources":["veiculo.interface.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /packages/rpg/interfaces/veiculo.interface.ts: -------------------------------------------------------------------------------- 1 | import { Veiculo } from '../../../common/database/models/Veiculo'; 2 | 3 | export interface RPGVeiculo { 4 | mp: VehicleMp; 5 | storage: Veiculo; 6 | } 7 | -------------------------------------------------------------------------------- /packages/rpg/lib/commands/comandos-admin.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.ComandosAdmin = void 0; 4 | class ComandosAdmin { 5 | constructor(brazucasServer) { 6 | this.brazucasServer = brazucasServer; 7 | } 8 | static tlt(player, playerOrigemHash, playerDestinoHash) { 9 | if (!playerOrigemHash || !playerDestinoHash) { 10 | return player.outputChatBox('!{FF0000}[SINTAXE] /tlt [id/nick] [id/nick]'); 11 | } 12 | let playerOrigem; 13 | let playerDestino; 14 | if (!isNaN(parseInt(playerOrigemHash))) { 15 | playerOrigem = mp.players.at(playerOrigemHash); 16 | } 17 | else { 18 | mp.players.forEach((player) => { 19 | if (player.name.toLowerCase() === playerOrigemHash.toLowerCase()) { 20 | playerOrigem = player; 21 | } 22 | }); 23 | } 24 | if (!isNaN(parseInt(playerDestinoHash))) { 25 | playerDestino = mp.players.at(playerDestinoHash); 26 | } 27 | else { 28 | mp.players.forEach((player) => { 29 | if (player.name.toLowerCase() === playerDestinoHash.toLowerCase()) { 30 | playerDestino = player; 31 | } 32 | }); 33 | } 34 | if (!playerOrigem) { 35 | return player.outputChatBox((!isNaN(parseInt(playerOrigemHash))) 36 | ? `Jogador com ID ${playerOrigemHash} não encontrado.` : `Jogador com nick ${playerOrigemHash} não encontrado.`); 37 | } 38 | if (!playerDestino) { 39 | return player.outputChatBox((!isNaN(parseInt(playerDestinoHash))) 40 | ? `Jogador com ID ${playerDestinoHash} não encontrado.` : `Jogador com nick ${playerDestinoHash} não encontrado.`); 41 | } 42 | if (playerOrigem === playerDestino) { 43 | return player.outputChatBox('!{FF0000} Você não pode teleportar um jogador para ele mesmo!'); 44 | } 45 | console.debug(`[COMANDOS - tlt] teleportando jogador ${playerOrigem.name} para ${playerDestino.name}`); 46 | playerOrigem.outputChatBox(`!{00FF00} Você foi teleportado para o jogador ${playerDestino.name}`); 47 | playerDestino.outputChatBox(`!{00FF00} O jogador ${playerOrigem.name} foi teleportado até você`); 48 | mp.players.broadcast(`!{0000FF}[ADMIN] ${player.name} teleporta ${playerOrigem.name} para ${playerDestino.name}`); 49 | playerOrigem.position = playerDestino.position; 50 | } 51 | irparaveiculo(player, vehId) { 52 | let veh = mp.vehicles[vehId]; 53 | if (veh && veh.position) { 54 | player.position = veh.position; 55 | } 56 | else { 57 | console.log('Veículo com ID ' + vehId + ' não encontrado.'); 58 | } 59 | } 60 | } 61 | exports.ComandosAdmin = ComandosAdmin; 62 | //# sourceMappingURL=comandos-admin.js.map -------------------------------------------------------------------------------- /packages/rpg/lib/commands/comandos-admin.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"comandos-admin.js","sourceRoot":"","sources":["comandos-admin.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /packages/rpg/lib/commands/comandos-admin.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasServer } from '../../../../common/brazucas-server'; 2 | 3 | export class ComandosAdmin { 4 | protected brazucasServer: BrazucasServer; 5 | 6 | constructor(brazucasServer: BrazucasServer) { 7 | this.brazucasServer = brazucasServer; 8 | } 9 | 10 | public static tlt(player: PlayerMp, playerOrigemHash: number | string, playerDestinoHash: number | string) { 11 | if (!playerOrigemHash || !playerDestinoHash) { 12 | return player.outputChatBox('!{FF0000}[SINTAXE] /tlt [id/nick] [id/nick]'); 13 | } 14 | 15 | let playerOrigem: PlayerMp; 16 | let playerDestino: PlayerMp; 17 | 18 | if (!isNaN(parseInt((playerOrigemHash as string)))) { 19 | playerOrigem = mp.players.at((playerOrigemHash as number)); 20 | } else { 21 | mp.players.forEach((player) => { 22 | if (player.name.toLowerCase() === (playerOrigemHash as string).toLowerCase()) { 23 | playerOrigem = player; 24 | } 25 | }); 26 | } 27 | 28 | if (!isNaN(parseInt((playerDestinoHash as string)))) { 29 | playerDestino = mp.players.at((playerDestinoHash as number)); 30 | } else { 31 | mp.players.forEach((player) => { 32 | if (player.name.toLowerCase() === (playerDestinoHash as string).toLowerCase()) { 33 | playerDestino = player; 34 | } 35 | }); 36 | } 37 | 38 | if (!playerOrigem) { 39 | return player.outputChatBox( 40 | (!isNaN(parseInt((playerOrigemHash as string)))) 41 | ? `Jogador com ID ${playerOrigemHash} não encontrado.` : `Jogador com nick ${playerOrigemHash} não encontrado.`); 42 | } 43 | 44 | if (!playerDestino) { 45 | return player.outputChatBox( 46 | (!isNaN(parseInt((playerDestinoHash as string)))) 47 | ? `Jogador com ID ${playerDestinoHash} não encontrado.` : `Jogador com nick ${playerDestinoHash} não encontrado.`); 48 | } 49 | 50 | if (playerOrigem === playerDestino) { 51 | return player.outputChatBox('!{FF0000} Você não pode teleportar um jogador para ele mesmo!'); 52 | } 53 | 54 | console.debug(`[COMANDOS - tlt] teleportando jogador ${playerOrigem.name} para ${playerDestino.name}`); 55 | 56 | playerOrigem.outputChatBox(`!{00FF00} Você foi teleportado para o jogador ${playerDestino.name}`); 57 | playerDestino.outputChatBox(`!{00FF00} O jogador ${playerOrigem.name} foi teleportado até você`); 58 | 59 | mp.players.broadcast(`!{0000FF}[ADMIN] ${player.name} teleporta ${playerOrigem.name} para ${playerDestino.name}`); 60 | 61 | playerOrigem.position = playerDestino.position; 62 | } 63 | 64 | irparaveiculo(player: PlayerMp, vehId: number) { 65 | let veh: VehicleMp = mp.vehicles[vehId]; 66 | 67 | if (veh && veh.position) { 68 | player.position = veh.position; 69 | } else { 70 | console.log('Veículo com ID ' + vehId + ' não encontrado.'); 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /packages/rpg/lib/commands/commands.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /// 3 | Object.defineProperty(exports, "__esModule", { value: true }); 4 | exports.Commands = void 0; 5 | const brazucas_eventos_1 = require("../../interfaces/brazucas-eventos"); 6 | const player_1 = require("../functions/player"); 7 | const comandos_admin_1 = require("./comandos-admin"); 8 | class Commands extends comandos_admin_1.ComandosAdmin { 9 | constructor(brazucasServer) { 10 | super(brazucasServer); 11 | } 12 | dararma(player, weaponHash) { 13 | console.debug(`[COMANDOS - dararma] Dando arma ${weaponHash} para o jogador ${player.name}`); 14 | const asset = mp.joaat(weaponHash); 15 | player.giveWeapon(asset, 1000); 16 | player.notify(`Arma ${weaponHash} recebida!`); 17 | } 18 | posicaoatual(player) { 19 | console.debug(`[COMANDOS - posicaoatual] Posição atual de ${player.name}: ${player.position.toString()}`); 20 | player.outputChatBox(`Posição atual: ${player.position.toString()}`); 21 | } 22 | browser(player) { 23 | player_1.playerEvent(player, brazucas_eventos_1.BrazucasEventos.INICIAR_NAVEGADOR); 24 | } 25 | cursor(player) { 26 | player_1.playerEvent(player, brazucas_eventos_1.BrazucasEventos.CURSOR); 27 | } 28 | } 29 | exports.Commands = Commands; 30 | //# sourceMappingURL=commands.js.map -------------------------------------------------------------------------------- /packages/rpg/lib/commands/commands.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"commands.js","sourceRoot":"","sources":["commands.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;AAG3E,wEAAoE;AACpE,gDAAkD;AAClD,qDAAiD;AAEjD,MAAa,QAAS,SAAQ,8BAAa;IAEzC,YAAY,cAA8B;QACxC,KAAK,CAAC,cAAc,CAAC,CAAC;IACxB,CAAC;IAEM,OAAO,CAAC,MAAgB,EAAE,UAAkB;QACjD,OAAO,CAAC,KAAK,CAAC,mCAAmC,UAAU,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7F,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEnC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE/B,MAAM,CAAC,MAAM,CAAC,QAAQ,UAAU,YAAY,CAAC,CAAC;IAChD,CAAC;IAEM,YAAY,CAAC,MAAgB;QAClC,OAAO,CAAC,KAAK,CAAC,8CAA8C,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE1G,MAAM,CAAC,aAAa,CAAC,kBAAkB,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IAEM,OAAO,CAAC,MAAgB;QAC7B,oBAAW,CAAM,MAAM,EAAE,kCAAe,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,MAAgB;QAC5B,oBAAW,CAAM,MAAM,EAAE,kCAAe,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;CACF;AA7BD,4BA6BC"} -------------------------------------------------------------------------------- /packages/rpg/lib/commands/commands.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import { BrazucasServer } from '../../../../common/brazucas-server'; 4 | import { BrazucasEventos } from '../../interfaces/brazucas-eventos'; 5 | import { playerEvent } from '../functions/player'; 6 | import { ComandosAdmin } from './comandos-admin'; 7 | 8 | export class Commands extends ComandosAdmin { 9 | 10 | constructor(brazucasServer: BrazucasServer) { 11 | super(brazucasServer); 12 | } 13 | 14 | public dararma(player: PlayerMp, weaponHash: string) { 15 | console.debug(`[COMANDOS - dararma] Dando arma ${weaponHash} para o jogador ${player.name}`); 16 | 17 | const asset = mp.joaat(weaponHash); 18 | 19 | player.giveWeapon(asset, 1000); 20 | 21 | player.notify(`Arma ${weaponHash} recebida!`); 22 | } 23 | 24 | public posicaoatual(player: PlayerMp) { 25 | console.debug(`[COMANDOS - posicaoatual] Posição atual de ${player.name}: ${player.position.toString()}`); 26 | 27 | player.outputChatBox(`Posição atual: ${player.position.toString()}`); 28 | } 29 | 30 | public browser(player: PlayerMp) { 31 | playerEvent(player, BrazucasEventos.INICIAR_NAVEGADOR); 32 | } 33 | 34 | public cursor(player: PlayerMp) { 35 | playerEvent(player, BrazucasEventos.CURSOR); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /packages/rpg/lib/events/events.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"events.js","sourceRoot":"","sources":["events.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /packages/rpg/lib/events/events.ts: -------------------------------------------------------------------------------- 1 | import { DadosVeiculo } from '../../../../browser/src/app/services/veiculo.service'; 2 | import { DadosLogin, DadosRegistro, RegistroResultado } from '../../../../browser/src/interfaces/login.interface'; 3 | import { BrazucasServer } from '../../../../common/brazucas-server'; 4 | import { Jogador } from '../../../../common/database/models/Jogador'; 5 | import { environment } from '../../../../common/environment'; 6 | import { BrazucasEventos } from '../../interfaces/brazucas-eventos'; 7 | import { VoiceChatProvider } from '../../providers/voice-chat.provider'; 8 | import { Rpg } from '../../rpg'; 9 | import { playerEvent } from '../functions/player'; 10 | 11 | export class Events { 12 | protected brazucasServer: BrazucasServer; 13 | 14 | constructor(brazucasServer: BrazucasServer) { 15 | this.brazucasServer = brazucasServer; 16 | } 17 | 18 | public async [BrazucasEventos.AUTENTICAR_JOGADOR](player: PlayerMp, dados: DadosLogin) { 19 | try { 20 | const jogador: Jogador = await this.brazucasServer.autenticarJogador(player.name, dados.senha); 21 | 22 | if (jogador) { 23 | player.spawn(environment.posicaoLogin); 24 | 25 | await Rpg.playerProvider.update(player, jogador.toJSON()); 26 | 27 | return { 28 | eventoResposta: 'AutenticacaoResultado', 29 | credenciaisInvalidas: false, 30 | autenticado: true, 31 | }; 32 | } else { 33 | return { 34 | eventoResposta: 'AutenticacaoResultado', 35 | credenciaisInvalidas: true, 36 | autenticado: false, 37 | }; 38 | } 39 | } catch (err) { 40 | console.error(err.toString()); 41 | 42 | return { 43 | eventoResposta: 'AutenticacaoResultado', 44 | credenciaisInvalidas: false, 45 | autenticado: false, 46 | }; 47 | } 48 | } 49 | 50 | public async [BrazucasEventos.REGISTRAR_JOGADOR](player: PlayerMp, dados: DadosRegistro) { 51 | try { 52 | const jogador: Jogador = await this.brazucasServer.registrarJogador(player, dados); 53 | 54 | if (jogador) { 55 | player.spawn(environment.posicaoLogin); 56 | 57 | playerEvent(player, BrazucasEventos.REGISTRO_RESULTADO, { 58 | erro: false, 59 | jogador: jogador, 60 | registrado: true, 61 | }); 62 | } else { 63 | playerEvent(player, BrazucasEventos.REGISTRO_RESULTADO, { 64 | registrado: false, 65 | erro: true, 66 | }); 67 | } 68 | } catch (err) { 69 | console.debug(`[REGISTRO] Um erro ocorreu ao criar o jogador ${player.name}`); 70 | console.error(err.toString()); 71 | 72 | playerEvent(player, BrazucasEventos.REGISTRO_RESULTADO, { 73 | registrado: false, 74 | erro: true, 75 | mensagem: err.toString() || 'Erro interno ao cadastrar', 76 | }); 77 | } 78 | } 79 | 80 | public async [BrazucasEventos.CRIAR_VEICULO](player: PlayerMp, dados: DadosVeiculo) { 81 | try { 82 | await this.brazucasServer.criarVeiculo(player, dados); 83 | } catch (err) { 84 | console.debug(`[VEÍCULOS] Um erro ocorreu ao criar o veículo`); 85 | console.error(err.toString()); 86 | 87 | return false; 88 | } 89 | } 90 | 91 | public async [BrazucasEventos.HABILITAR_VOICE_CHAT](player: PlayerMp, dados: any) { 92 | console.log(`[VOICE CHAT] Ativando voice chat para ${player.name} com os dados: ${JSON.stringify(dados)}`); 93 | 94 | const target = mp.players.at(dados.targetId); 95 | 96 | if (!target) { 97 | return { 98 | erro: true, 99 | mensagem: 'Jogador não encontrado', 100 | }; 101 | } 102 | 103 | VoiceChatProvider.habilitar(player, target); 104 | } 105 | 106 | public async [BrazucasEventos.DESABILITAR_VOICE_CHAT](player: PlayerMp, dados: any) { 107 | console.log(`[VOICE CHAT] Desativando voice chat para ${player.name} com os dados: ${JSON.stringify(dados)}`); 108 | 109 | const target = mp.players.at(dados.targetId); 110 | 111 | if (!target) { 112 | return { 113 | erro: true, 114 | mensagem: 'Jogador não encontrado', 115 | }; 116 | } 117 | 118 | VoiceChatProvider.desabilitar(player, target); 119 | } 120 | 121 | public async [BrazucasEventos.ANIMACAO_VOICE_CHAT](player: PlayerMp) { 122 | console.log(`[VOICE CHAT] Aplicando animação para ${player.name}`); 123 | 124 | player.playAnimation('special_ped@baygor@monologue_3@monologue_3e', 'trees_can_talk_4', 1, 0); 125 | } 126 | 127 | public async [BrazucasEventos.VISUALIZAR_ANIMACAO](player: PlayerMp, dados: { 128 | pacote: string, 129 | nome: string; 130 | }) { 131 | player.stopAnimation(); 132 | player.playAnimation(dados.pacote, dados.nome, 1, 0); 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /packages/rpg/lib/functions/bootstrap.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /// 3 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 4 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 5 | return new (P || (P = Promise))(function (resolve, reject) { 6 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 7 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 8 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 9 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 10 | }); 11 | }; 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | exports.carregarTimers = exports.carregarVeiculos = void 0; 14 | const Veiculo_1 = require("../../../../common/database/models/Veiculo"); 15 | const vehicles_1 = require("../../../../common/util/vehicles"); 16 | const veiculo_provider_1 = require("../../providers/veiculo.provider"); 17 | const player_timer_1 = require("../timers/player-timer"); 18 | const vehicles_timer_1 = require("../timers/vehicles-timer"); 19 | function carregarVeiculos() { 20 | return __awaiter(this, void 0, void 0, function* () { 21 | let veiculos = yield Veiculo_1.Veiculo.findAll(); 22 | veiculos.forEach((veiculo) => { 23 | const veiculoMp = mp.vehicles.new(vehicles_1.Veiculos[veiculo.modelo], new mp.Vector3(parseFloat(veiculo.posicaoX), parseFloat(veiculo.posicaoY), parseFloat(veiculo.posicaoZ))); 24 | veiculoMp.setColorRGB(veiculo.corPrimariaR, veiculo.corPrimariaG, veiculo.corPrimariaB, veiculo.corSecundariaR, veiculo.corSecundariaG, veiculo.corSecundariaB); 25 | veiculoMp.locked = veiculo.trancado; 26 | veiculoMp.engine = veiculo.motor; 27 | // veiculoMp.dimension = veiculo.mundo; 28 | veiculoMp.numberPlate = veiculo.placaExibido; 29 | veiculoMp.spawn(veiculoMp.position, 0); 30 | veiculo_provider_1.VeiculoProvider.veiculos.next({ 31 | mp: veiculoMp, 32 | storage: veiculo, 33 | }); 34 | }); 35 | }); 36 | } 37 | exports.carregarVeiculos = carregarVeiculos; 38 | function carregarTimers(brazucasServer) { 39 | return __awaiter(this, void 0, void 0, function* () { 40 | new vehicles_timer_1.VehiclesTimer(brazucasServer); 41 | new player_timer_1.PlayerTimer(brazucasServer); 42 | }); 43 | } 44 | exports.carregarTimers = carregarTimers; 45 | //# sourceMappingURL=bootstrap.js.map -------------------------------------------------------------------------------- /packages/rpg/lib/functions/bootstrap.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["bootstrap.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;;;;;;;;;;AAG3E,wEAAqE;AACrE,+DAA4D;AAC5D,uEAAmE;AACnE,yDAAqD;AACrD,6DAAyD;AAIzD,SAAsB,gBAAgB;;QACpC,IAAI,QAAQ,GAAG,MAAM,iBAAO,CAAC,OAAO,EAAE,CAAC;QAEvC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CACxE,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC5B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC5B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAC7B,CAAC,CAAC;YAEH,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,EAC5G,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;YAElD,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;YACpC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;YACjC,uCAAuC;YACvC,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;YAE7C,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAEvC,kCAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC5B,EAAE,EAAE,SAAS;gBACb,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CAAA;AAzBD,4CAyBC;AAED,SAAsB,cAAc,CAAC,cAA8B;;QACjE,IAAI,8BAAa,CAAC,cAAc,CAAC,CAAC;QAClC,IAAI,0BAAW,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;CAAA;AAHD,wCAGC"} -------------------------------------------------------------------------------- /packages/rpg/lib/functions/bootstrap.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import { BrazucasServer } from '../../../../common/brazucas-server'; 4 | import { Veiculo } from '../../../../common/database/models/Veiculo'; 5 | import { Veiculos } from '../../../../common/util/vehicles'; 6 | import { VeiculoProvider } from '../../providers/veiculo.provider'; 7 | import { PlayerTimer } from '../timers/player-timer'; 8 | import { VehiclesTimer } from '../timers/vehicles-timer'; 9 | 10 | declare const mp: Mp; 11 | 12 | export async function carregarVeiculos() { 13 | let veiculos = await Veiculo.findAll(); 14 | 15 | veiculos.forEach((veiculo) => { 16 | const veiculoMp = mp.vehicles.new(Veiculos[veiculo.modelo], new mp.Vector3( 17 | parseFloat(veiculo.posicaoX), 18 | parseFloat(veiculo.posicaoY), 19 | parseFloat(veiculo.posicaoZ) 20 | )); 21 | 22 | veiculoMp.setColorRGB(veiculo.corPrimariaR, veiculo.corPrimariaG, veiculo.corPrimariaB, veiculo.corSecundariaR, 23 | veiculo.corSecundariaG, veiculo.corSecundariaB); 24 | 25 | veiculoMp.locked = veiculo.trancado; 26 | veiculoMp.engine = veiculo.motor; 27 | // veiculoMp.dimension = veiculo.mundo; 28 | veiculoMp.numberPlate = veiculo.placaExibido; 29 | 30 | veiculoMp.spawn(veiculoMp.position, 0); 31 | 32 | VeiculoProvider.veiculos.next({ 33 | mp: veiculoMp, 34 | storage: veiculo, 35 | }); 36 | }); 37 | } 38 | 39 | export async function carregarTimers(brazucasServer: BrazucasServer) { 40 | new VehiclesTimer(brazucasServer); 41 | new PlayerTimer(brazucasServer); 42 | } 43 | -------------------------------------------------------------------------------- /packages/rpg/lib/functions/player.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.playersEvent = exports.playerEvent = exports.notificarTodos = void 0; 4 | const brazucas_eventos_1 = require("../../interfaces/brazucas-eventos"); 5 | function notificarTodos(text) { 6 | mp.players.forEach(player => player.notify(text)); 7 | } 8 | exports.notificarTodos = notificarTodos; 9 | function playerEvent(player, event, data, eventId) { 10 | console.debug(`[PLAYER EVENT] ${player.name} chamou o evento ${event} (ID ${eventId}) com os seguintes dados: ${JSON.stringify(data)}`); 11 | player.call(brazucas_eventos_1.BrazucasEventos.SERVER, [{ 12 | eventId: eventId, 13 | event: event, 14 | data: data, 15 | }]); 16 | } 17 | exports.playerEvent = playerEvent; 18 | function playersEvent(event, data, eventId) { 19 | console.debug(`[ALL PLAYER EVENT] Evento ${event} (ID ${eventId}) com os seguintes dados: ${JSON.stringify(data)} disparado para ${mp.players.length} jogadores.`); 20 | mp.players.call(brazucas_eventos_1.BrazucasEventos.SERVER, [{ 21 | eventId: eventId, 22 | event: event, 23 | data: data, 24 | }]); 25 | } 26 | exports.playersEvent = playersEvent; 27 | //# sourceMappingURL=player.js.map -------------------------------------------------------------------------------- /packages/rpg/lib/functions/player.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"player.js","sourceRoot":"","sources":["player.ts"],"names":[],"mappings":";;;AAAA,wEAAiF;AAEjF,SAAgB,cAAc,CAAC,IAAY;IACzC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC;AAFD,wCAEC;AAED,SAAgB,WAAW,CAAI,MAAgB,EAAE,KAAa,EAAE,IAAQ,EAAE,OAAgB;IACxF,OAAO,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,IAAI,oBAAoB,KAAK,QAAQ,OAAO,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAExI,MAAM,CAAC,IAAI,CAAC,kCAAe,CAAC,MAAM,EAAE,CAAkB;YACpD,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;SACX,CAAC,CAAC,CAAC;AACN,CAAC;AARD,kCAQC;AAED,SAAgB,YAAY,CAAI,KAAa,EAAE,IAAQ,EAAE,OAAgB;IACvE,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,QAAQ,OAAO,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;IAEnK,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,kCAAe,CAAC,MAAM,EAAE,CAAkB;YACxD,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;SACX,CAAC,CAAC,CAAC;AACN,CAAC;AARD,oCAQC"} -------------------------------------------------------------------------------- /packages/rpg/lib/functions/player.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasEventos, ServerEvent } from '../../interfaces/brazucas-eventos'; 2 | 3 | export function notificarTodos(text: string) { 4 | mp.players.forEach(player => player.notify(text)); 5 | } 6 | 7 | export function playerEvent(player: PlayerMp, event: string, data?: T, eventId?: number) { 8 | console.debug(`[PLAYER EVENT] ${player.name} chamou o evento ${event} (ID ${eventId}) com os seguintes dados: ${JSON.stringify(data)}`); 9 | 10 | player.call(BrazucasEventos.SERVER, [> { 11 | eventId: eventId, 12 | event: event, 13 | data: data, 14 | }]); 15 | } 16 | 17 | export function playersEvent(event: string, data?: T, eventId?: number) { 18 | console.debug(`[ALL PLAYER EVENT] Evento ${event} (ID ${eventId}) com os seguintes dados: ${JSON.stringify(data)} disparado para ${mp.players.length} jogadores.`); 19 | 20 | mp.players.call(BrazucasEventos.SERVER, [> { 21 | eventId: eventId, 22 | event: event, 23 | data: data, 24 | }]); 25 | } 26 | -------------------------------------------------------------------------------- /packages/rpg/lib/timers/player-timer.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.PlayerTimer = void 0; 4 | const rpg_1 = require("../../rpg"); 5 | const FOME_DEFAULT_DECREASE = 1; 6 | const SEDE_DEFAULT_DECREASE = 1; 7 | const SONO_DEFAULT_DECREASE = 1; 8 | const FORCA_FISICA_DEFAULT_DECREASE = 1; 9 | class PlayerTimer { 10 | constructor(brazucasServer) { 11 | this.brazucasServer = brazucasServer; 12 | setInterval(() => this.atualizarFome(), 60000); 13 | setInterval(() => this.atualizarSede(), 45000); 14 | setInterval(() => this.atualizarSono(), 180000); 15 | setInterval(() => this.atualizarForcaFisica(), 200000); 16 | } 17 | atualizarFome() { 18 | mp.players.forEach(playerMp => { 19 | const brzPlayer = rpg_1.Rpg.playerProvider.findFromMp(playerMp); 20 | const updatedValue = Math.max(brzPlayer.storage.fome - FOME_DEFAULT_DECREASE, 0); 21 | if (updatedValue === 0) { 22 | playerMp.health -= 1; 23 | } 24 | rpg_1.Rpg.playerProvider.update(playerMp, { 25 | fome: updatedValue, 26 | }); 27 | }); 28 | } 29 | atualizarSede() { 30 | mp.players.forEach(playerMp => { 31 | const brzPlayer = rpg_1.Rpg.playerProvider.findFromMp(playerMp); 32 | const updatedValue = Math.max(brzPlayer.storage.sede - SEDE_DEFAULT_DECREASE, 0); 33 | if (updatedValue === 0) { 34 | brzPlayer.storage.fome -= 1; 35 | } 36 | rpg_1.Rpg.playerProvider.update(playerMp, { 37 | sede: updatedValue, 38 | }); 39 | }); 40 | } 41 | atualizarSono() { 42 | mp.players.forEach(playerMp => { 43 | const brzPlayer = rpg_1.Rpg.playerProvider.findFromMp(playerMp); 44 | const updatedValue = Math.max(brzPlayer.storage.sono - SONO_DEFAULT_DECREASE, 0); 45 | if (updatedValue === 0) { 46 | // @TODO fazer o jogador dormir 47 | } 48 | rpg_1.Rpg.playerProvider.update(playerMp, { 49 | sono: updatedValue, 50 | }); 51 | }); 52 | } 53 | atualizarForcaFisica() { 54 | mp.players.forEach(playerMp => { 55 | const brzPlayer = rpg_1.Rpg.playerProvider.findFromMp(playerMp); 56 | const updatedValue = Math.max(brzPlayer.storage.forcaFisica - FORCA_FISICA_DEFAULT_DECREASE, 0); 57 | if (updatedValue === 0) { 58 | // @TODO O que fazer quando chegar a zero? 59 | } 60 | rpg_1.Rpg.playerProvider.update(playerMp, { 61 | forcaFisica: updatedValue, 62 | }); 63 | }); 64 | } 65 | } 66 | exports.PlayerTimer = PlayerTimer; 67 | //# sourceMappingURL=player-timer.js.map -------------------------------------------------------------------------------- /packages/rpg/lib/timers/player-timer.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"player-timer.js","sourceRoot":"","sources":["player-timer.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /packages/rpg/lib/timers/player-timer.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasServer } from '../../../../common/brazucas-server'; 2 | import { Rpg } from '../../rpg'; 3 | 4 | const FOME_DEFAULT_DECREASE = 1; 5 | const SEDE_DEFAULT_DECREASE = 1; 6 | const SONO_DEFAULT_DECREASE = 1; 7 | const FORCA_FISICA_DEFAULT_DECREASE = 1; 8 | 9 | export class PlayerTimer { 10 | protected brazucasServer: BrazucasServer; 11 | 12 | constructor(brazucasServer: BrazucasServer) { 13 | this.brazucasServer = brazucasServer; 14 | 15 | setInterval(() => this.atualizarFome(), 60000); 16 | setInterval(() => this.atualizarSede(), 45000); 17 | setInterval(() => this.atualizarSono(), 180000); 18 | setInterval(() => this.atualizarForcaFisica(), 200000); 19 | } 20 | 21 | private atualizarFome() { 22 | mp.players.forEach(playerMp => { 23 | const brzPlayer = Rpg.playerProvider.findFromMp(playerMp); 24 | 25 | const updatedValue = Math.max(brzPlayer.storage.fome - FOME_DEFAULT_DECREASE, 0); 26 | 27 | if (updatedValue === 0) { 28 | playerMp.health -= 1; 29 | } 30 | 31 | Rpg.playerProvider.update(playerMp, { 32 | fome: updatedValue, 33 | }); 34 | }); 35 | } 36 | 37 | private atualizarSede() { 38 | mp.players.forEach(playerMp => { 39 | const brzPlayer = Rpg.playerProvider.findFromMp(playerMp); 40 | 41 | const updatedValue = Math.max(brzPlayer.storage.sede - SEDE_DEFAULT_DECREASE, 0); 42 | 43 | if (updatedValue === 0) { 44 | brzPlayer.storage.fome -= 1; 45 | } 46 | 47 | Rpg.playerProvider.update(playerMp, { 48 | sede: updatedValue, 49 | }); 50 | }); 51 | } 52 | 53 | private atualizarSono() { 54 | mp.players.forEach(playerMp => { 55 | const brzPlayer = Rpg.playerProvider.findFromMp(playerMp); 56 | 57 | const updatedValue = Math.max(brzPlayer.storage.sono - SONO_DEFAULT_DECREASE, 0); 58 | 59 | if (updatedValue === 0) { 60 | // @TODO fazer o jogador dormir 61 | } 62 | 63 | Rpg.playerProvider.update(playerMp, { 64 | sono: updatedValue, 65 | }); 66 | }); 67 | } 68 | 69 | private atualizarForcaFisica() { 70 | mp.players.forEach(playerMp => { 71 | const brzPlayer = Rpg.playerProvider.findFromMp(playerMp); 72 | 73 | const updatedValue = Math.max(brzPlayer.storage.forcaFisica - FORCA_FISICA_DEFAULT_DECREASE, 0); 74 | 75 | if (updatedValue === 0) { 76 | // @TODO O que fazer quando chegar a zero? 77 | } 78 | 79 | Rpg.playerProvider.update(playerMp, { 80 | forcaFisica: updatedValue, 81 | }); 82 | }); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /packages/rpg/lib/timers/vehicles-timer.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.VehiclesTimer = void 0; 4 | const veiculo_provider_1 = require("../../providers/veiculo.provider"); 5 | class VehiclesTimer { 6 | constructor(brazucasServer) { 7 | this.brazucasServer = brazucasServer; 8 | setInterval(() => { 9 | this.atualizarPosicoes(); 10 | }, 5000); 11 | } 12 | atualizarPosicoes() { 13 | mp.vehicles.forEach((vehicle) => { 14 | veiculo_provider_1.VeiculoProvider.estacionar(vehicle); 15 | }); 16 | } 17 | } 18 | exports.VehiclesTimer = VehiclesTimer; 19 | //# sourceMappingURL=vehicles-timer.js.map -------------------------------------------------------------------------------- /packages/rpg/lib/timers/vehicles-timer.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"vehicles-timer.js","sourceRoot":"","sources":["vehicles-timer.ts"],"names":[],"mappings":";;;AACA,uEAAmE;AAEnE,MAAa,aAAa;IAGxB,YAAY,cAA8B;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QAErC,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAEO,iBAAiB;QACvB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,kCAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAhBD,sCAgBC"} -------------------------------------------------------------------------------- /packages/rpg/lib/timers/vehicles-timer.ts: -------------------------------------------------------------------------------- 1 | import { BrazucasServer } from '../../../../common/brazucas-server'; 2 | import { VeiculoProvider } from '../../providers/veiculo.provider'; 3 | 4 | export class VehiclesTimer { 5 | protected brazucasServer: BrazucasServer; 6 | 7 | constructor(brazucasServer: BrazucasServer) { 8 | this.brazucasServer = brazucasServer; 9 | 10 | setInterval(() => { 11 | this.atualizarPosicoes(); 12 | }, 5000); 13 | } 14 | 15 | private atualizarPosicoes() { 16 | mp.vehicles.forEach((vehicle) => { 17 | VeiculoProvider.estacionar(vehicle); 18 | }); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/rpg/providers/player.provider.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.PlayerProvider = void 0; 13 | const BehaviorSubject_1 = require("rxjs/BehaviorSubject"); 14 | const brazucas_eventos_1 = require("../interfaces/brazucas-eventos"); 15 | class PlayerProvider { 16 | constructor(brazucasServer) { 17 | this.players$ = new BehaviorSubject_1.BehaviorSubject([]); 18 | PlayerProvider.brazucasServer = brazucasServer; 19 | } 20 | findFromMp(player) { 21 | return this.players$.value.find((storedPlayer) => (storedPlayer.mp && storedPlayer.mp.id === player.id)); 22 | } 23 | update(player, data, autoSave = true) { 24 | return __awaiter(this, void 0, void 0, function* () { 25 | try { 26 | const brzPlayer = this.findFromMp(player); 27 | if (brzPlayer) { 28 | Object.keys(data).forEach((key) => brzPlayer.storage[key] = data[key]); 29 | if (autoSave) { 30 | yield brzPlayer.storage.save(); 31 | } 32 | console.log(`Atualizando jogador ${player.name} ${JSON.stringify(brzPlayer.storage.toJSON())}`); 33 | player.call(brazucas_eventos_1.BrazucasEventos.ATUALIZAR_DADOS_JOGADOR, [brzPlayer.storage.toJSON()]); 34 | } 35 | else { 36 | console.warn('[WARNING] Jogador não encontrado para atualizar'); 37 | } 38 | return true; 39 | } 40 | catch (err) { 41 | console.error(`[ERROR] Um erro ocorreu ao atualizar o jogador.`); 42 | console.error(err); 43 | throw err; 44 | } 45 | }); 46 | } 47 | savePlayer(player) { 48 | const brzPlayer = this.findFromMp(player); 49 | if (brzPlayer) { 50 | return brzPlayer.storage.save(); 51 | } 52 | } 53 | addPlayer(brzPlayer) { 54 | const players = this.players$.value; 55 | players.push(brzPlayer); 56 | this.players$.next(players); 57 | } 58 | } 59 | exports.PlayerProvider = PlayerProvider; 60 | //# sourceMappingURL=player.provider.js.map -------------------------------------------------------------------------------- /packages/rpg/providers/player.provider.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"player.provider.js","sourceRoot":"","sources":["player.provider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0DAAuD;AAGvD,qEAAiE;AAGjE,MAAa,cAAc;IAGzB,YAAY,cAA8B;QAInC,aAAQ,GAA+C,IAAI,iCAAe,CAAC,EAAE,CAAC,CAAC;QAHpF,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC;IACjD,CAAC;IAIM,UAAU,CAAC,MAAgB;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3G,CAAC;IAEY,MAAM,CAAC,MAAgB,EAAE,IAAmB,EAAE,QAAQ,GAAG,IAAI;;YACxE,IAAI;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAE1C,IAAI,SAAS,EAAE;oBACb,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAE/E,IAAI,QAAQ,EAAE;wBACZ,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;qBAChC;oBAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;oBAEhG,MAAM,CAAC,IAAI,CAAC,kCAAe,CAAC,uBAAuB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;iBACpF;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;iBACjE;gBAED,OAAO,IAAI,CAAC;aACb;YAAC,OAAO,GAAG,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEnB,MAAM,GAAG,CAAC;aACX;QACH,CAAC;KAAA;IAED,UAAU,CAAC,MAAgB;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,SAAS,EAAE;YACb,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACjC;IACH,CAAC;IAEM,SAAS,CAAC,SAA6B;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEpC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAExB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;CAEF;AAxDD,wCAwDC"} -------------------------------------------------------------------------------- /packages/rpg/providers/player.provider.ts: -------------------------------------------------------------------------------- 1 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 2 | import { BrazucasServer } from '../../../common/brazucas-server'; 3 | import { Jogador } from '../../../common/database/models/Jogador'; 4 | import { BrazucasEventos } from '../interfaces/brazucas-eventos'; 5 | import { BRZPlayerInterface } from '../interfaces/player.interface'; 6 | 7 | export class PlayerProvider { 8 | private static brazucasServer: BrazucasServer; 9 | 10 | constructor(brazucasServer: BrazucasServer) { 11 | PlayerProvider.brazucasServer = brazucasServer; 12 | } 13 | 14 | public players$: BehaviorSubject> = new BehaviorSubject([]); 15 | 16 | public findFromMp(player: PlayerMp) { 17 | return this.players$.value.find((storedPlayer) => (storedPlayer.mp && storedPlayer.mp.id === player.id)); 18 | } 19 | 20 | public async update(player: PlayerMp, data: Jogador | any, autoSave = true) { 21 | try { 22 | const brzPlayer = this.findFromMp(player); 23 | 24 | if (brzPlayer) { 25 | Object.keys(data).forEach((key: string) => brzPlayer.storage[key] = data[key]); 26 | 27 | if (autoSave) { 28 | await brzPlayer.storage.save(); 29 | } 30 | 31 | console.log(`Atualizando jogador ${player.name} ${JSON.stringify(brzPlayer.storage.toJSON())}`); 32 | 33 | player.call(BrazucasEventos.ATUALIZAR_DADOS_JOGADOR, [brzPlayer.storage.toJSON()]); 34 | } else { 35 | console.warn('[WARNING] Jogador não encontrado para atualizar'); 36 | } 37 | 38 | return true; 39 | } catch (err) { 40 | console.error(`[ERROR] Um erro ocorreu ao atualizar o jogador.`); 41 | console.error(err); 42 | 43 | throw err; 44 | } 45 | } 46 | 47 | savePlayer(player: PlayerMp) { 48 | const brzPlayer = this.findFromMp(player); 49 | 50 | if (brzPlayer) { 51 | return brzPlayer.storage.save(); 52 | } 53 | } 54 | 55 | public addPlayer(brzPlayer: BRZPlayerInterface) { 56 | const players = this.players$.value; 57 | 58 | players.push(brzPlayer); 59 | 60 | this.players$.next(players); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /packages/rpg/providers/veiculo.provider.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.VeiculoProvider = void 0; 4 | const BehaviorSubject_1 = require("rxjs/BehaviorSubject"); 5 | const Observable_1 = require("rxjs/Observable"); 6 | const mp_veiculo_cor_interface_1 = require("../interfaces/mp.veiculo-cor.interface"); 7 | class VeiculoProvider { 8 | static findFromMp(vehicle) { 9 | return VeiculoProvider.veiculosArmazenados.find((rpgVeiculo) => rpgVeiculo.mp === vehicle); 10 | } 11 | static salvar(vehicle) { 12 | return new Observable_1.Observable((resolver) => { 13 | let rpgVeiculo = VeiculoProvider.findFromMp(vehicle); 14 | if (rpgVeiculo) { 15 | rpgVeiculo.storage.placaExibido = vehicle.numberPlate; 16 | rpgVeiculo.storage.trancado = vehicle.locked; 17 | [rpgVeiculo.storage.corPrimariaR, rpgVeiculo.storage.corPrimariaG, rpgVeiculo.storage.corPrimariaB] = vehicle.getColorRGB(mp_veiculo_cor_interface_1.MpVeiculoCorInterface.PRIMARIA); 18 | [rpgVeiculo.storage.corSecundariaR, rpgVeiculo.storage.corSecundariaG, rpgVeiculo.storage.corSecundariaB] = vehicle.getColorRGB(mp_veiculo_cor_interface_1.MpVeiculoCorInterface.SECUNDARIA); 19 | rpgVeiculo.storage.modelo = vehicle.model.toString(); 20 | rpgVeiculo.storage.motor = vehicle.engine; 21 | rpgVeiculo.storage.mundo = vehicle.dimension; 22 | rpgVeiculo.storage.rotacao = vehicle.heading; 23 | rpgVeiculo.storage.transparencia = vehicle.alpha; 24 | resolver.next(rpgVeiculo.storage.save()); 25 | resolver.complete(); 26 | } 27 | else { 28 | resolver.error(`[VeiculoProvider - salvar] Veículo ID ${vehicle.id} não encontrado nos veículos armazenados.`); 29 | } 30 | }); 31 | } 32 | static estacionar(vehicle) { 33 | return new Observable_1.Observable((resolver) => { 34 | let rpgVeiculo = VeiculoProvider.findFromMp(vehicle); 35 | if (rpgVeiculo) { 36 | rpgVeiculo.storage.posicaoX = vehicle.position.x.toString(); 37 | rpgVeiculo.storage.posicaoY = vehicle.position.y.toString(); 38 | rpgVeiculo.storage.posicaoZ = vehicle.position.z.toString(); 39 | rpgVeiculo.storage.rotacao = vehicle.heading; 40 | resolver.next(rpgVeiculo.storage.save()); 41 | resolver.complete(); 42 | } 43 | else { 44 | resolver.error(`[VeiculoProvider - estacionar] Veículo ID ${vehicle.id} não encontrado nos veículos armazenados.`); 45 | } 46 | }); 47 | } 48 | init() { 49 | VeiculoProvider.veiculos.subscribe((rpgVeiculo) => { 50 | VeiculoProvider.veiculosArmazenados.push(rpgVeiculo); 51 | }); 52 | } 53 | } 54 | exports.VeiculoProvider = VeiculoProvider; 55 | VeiculoProvider.veiculosArmazenados = []; 56 | VeiculoProvider.veiculos = new BehaviorSubject_1.BehaviorSubject(null); 57 | //# sourceMappingURL=veiculo.provider.js.map -------------------------------------------------------------------------------- /packages/rpg/providers/veiculo.provider.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"veiculo.provider.js","sourceRoot":"","sources":["veiculo.provider.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /packages/rpg/providers/veiculo.provider.ts: -------------------------------------------------------------------------------- 1 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 2 | import { Observable } from 'rxjs/Observable'; 3 | import { MpVeiculoCorInterface } from '../interfaces/mp.veiculo-cor.interface'; 4 | import { RPGVeiculo } from '../interfaces/veiculo.interface'; 5 | 6 | export class VeiculoProvider { 7 | private static veiculosArmazenados: Array = []; 8 | public static veiculos: BehaviorSubject = new BehaviorSubject(null); 9 | 10 | public static findFromMp(vehicle: VehicleMp) { 11 | return VeiculoProvider.veiculosArmazenados.find((rpgVeiculo) => rpgVeiculo.mp === vehicle); 12 | } 13 | 14 | public static salvar(vehicle: VehicleMp) { 15 | return new Observable((resolver) => { 16 | let rpgVeiculo = VeiculoProvider.findFromMp(vehicle); 17 | 18 | if (rpgVeiculo) { 19 | rpgVeiculo.storage.placaExibido = vehicle.numberPlate; 20 | rpgVeiculo.storage.trancado = vehicle.locked; 21 | [rpgVeiculo.storage.corPrimariaR, rpgVeiculo.storage.corPrimariaG, rpgVeiculo.storage.corPrimariaB] = vehicle.getColorRGB(MpVeiculoCorInterface.PRIMARIA); 22 | [rpgVeiculo.storage.corSecundariaR, rpgVeiculo.storage.corSecundariaG, rpgVeiculo.storage.corSecundariaB] = vehicle.getColorRGB(MpVeiculoCorInterface.SECUNDARIA); 23 | rpgVeiculo.storage.modelo = vehicle.model.toString(); 24 | rpgVeiculo.storage.motor = vehicle.engine; 25 | rpgVeiculo.storage.mundo = vehicle.dimension; 26 | rpgVeiculo.storage.rotacao = vehicle.heading; 27 | rpgVeiculo.storage.transparencia = vehicle.alpha; 28 | 29 | resolver.next(rpgVeiculo.storage.save()); 30 | resolver.complete(); 31 | } else { 32 | resolver.error(`[VeiculoProvider - salvar] Veículo ID ${vehicle.id} não encontrado nos veículos armazenados.`); 33 | } 34 | }); 35 | } 36 | 37 | public static estacionar(vehicle: VehicleMp) { 38 | return new Observable((resolver) => { 39 | let rpgVeiculo = VeiculoProvider.findFromMp(vehicle); 40 | 41 | if (rpgVeiculo) { 42 | rpgVeiculo.storage.posicaoX = vehicle.position.x.toString(); 43 | rpgVeiculo.storage.posicaoY = vehicle.position.y.toString(); 44 | rpgVeiculo.storage.posicaoZ = vehicle.position.z.toString(); 45 | rpgVeiculo.storage.rotacao = vehicle.heading; 46 | 47 | resolver.next(rpgVeiculo.storage.save()); 48 | resolver.complete(); 49 | } else { 50 | resolver.error(`[VeiculoProvider - estacionar] Veículo ID ${vehicle.id} não encontrado nos veículos armazenados.`); 51 | } 52 | }); 53 | } 54 | 55 | public init() { 56 | VeiculoProvider.veiculos.subscribe((rpgVeiculo) => { 57 | VeiculoProvider.veiculosArmazenados.push(rpgVeiculo); 58 | }); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /packages/rpg/providers/voice-chat.provider.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.VoiceChatProvider = void 0; 4 | class VoiceChatProvider { 5 | static habilitar(player, target) { 6 | console.debug(`[VOICE CHAT] Habilitando voice chat de ${player.name} para ${target.name}`); 7 | player.enableVoiceTo(target); 8 | } 9 | static desabilitar(player, target) { 10 | console.debug(`[VOICE CHAT] Desabilitando voice chat de ${player.name} para ${target.name}`); 11 | player.disableVoiceTo(target); 12 | } 13 | } 14 | exports.VoiceChatProvider = VoiceChatProvider; 15 | //# sourceMappingURL=voice-chat.provider.js.map -------------------------------------------------------------------------------- /packages/rpg/providers/voice-chat.provider.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"voice-chat.provider.js","sourceRoot":"","sources":["voice-chat.provider.ts"],"names":[],"mappings":";;;AAAA,MAAa,iBAAiB;IACrB,MAAM,CAAC,SAAS,CAAC,MAAgB,EAAE,MAAgB;QACxD,OAAO,CAAC,KAAK,CAAC,0CAA0C,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,MAAgB,EAAE,MAAgB;QAC1D,OAAO,CAAC,KAAK,CAAC,4CAA4C,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF;AAVD,8CAUC"} -------------------------------------------------------------------------------- /packages/rpg/providers/voice-chat.provider.ts: -------------------------------------------------------------------------------- 1 | export class VoiceChatProvider { 2 | public static habilitar(player: PlayerMp, target: PlayerMp) { 3 | console.debug(`[VOICE CHAT] Habilitando voice chat de ${player.name} para ${target.name}`); 4 | player.enableVoiceTo(target); 5 | } 6 | 7 | public static desabilitar(player: PlayerMp, target: PlayerMp) { 8 | console.debug(`[VOICE CHAT] Desabilitando voice chat de ${player.name} para ${target.name}`); 9 | player.disableVoiceTo(target); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/rpg/rpg.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | exports.Rpg = void 0; 13 | const fs = require("fs"); 14 | const glob = require("glob"); 15 | require("rxjs/add/observable/of"); 16 | const _ = require("underscore"); 17 | const bootstrap_1 = require("./lib/functions/bootstrap"); 18 | const player_provider_1 = require("./providers/player.provider"); 19 | class Rpg { 20 | constructor(brazucasServer) { 21 | this.maps = []; 22 | this.mapSelected = null; 23 | this.status = null; 24 | this.brazucasServer = brazucasServer; 25 | Rpg.playerProvider = new player_provider_1.PlayerProvider(brazucasServer); 26 | this.init(); 27 | } 28 | init() { 29 | return __awaiter(this, void 0, void 0, function* () { 30 | this.carregarMapas(); 31 | console.log(`${this.maps.length} mapa(s) carregado(s).`); 32 | yield bootstrap_1.carregarVeiculos(); 33 | console.log(`${mp.vehicles.length} veículos carregados.`); 34 | yield bootstrap_1.carregarTimers(this.brazucasServer); 35 | this.mainLoop(); 36 | }); 37 | } 38 | carregarArquivosMapas() { 39 | let maps = glob.sync('packages/rpg/maps/*.json'); 40 | let self = this; 41 | _.forEach(maps, function (map) { 42 | self.maps.push(JSON.parse(fs.readFileSync(map, 'utf8'))); 43 | }); 44 | return this.maps; 45 | } 46 | carregarMapas() { 47 | let mapas = this.carregarArquivosMapas(); 48 | mapas.forEach((mapa) => { 49 | // this.carregarMapa(mapa); 50 | }); 51 | } 52 | carregarMapa(mapData) { 53 | console.log(`Carregando mapa ${mapData.Map.Metadata.Name}.`); 54 | if (mapData) { 55 | if (mapData.Map && mapData.Map.Objects && mapData.Map.Objects.MapObject) { 56 | let loadedVehicles = 0, loadedProps = 0; 57 | _.forEach(mapData.Map.Objects.MapObject, function (object) { 58 | switch (object.Type) { 59 | case 'Prop': 60 | mp.objects.new(parseInt(object.Hash, 10), new mp.Vector3(parseFloat(object.Position.X), parseFloat(object.Position.Y), parseFloat(object.Position.Z))); 61 | ++loadedProps; 62 | break; 63 | case 'Vehicle': 64 | mp.vehicles.new(parseInt(object.Hash, 10), new mp.Vector3(parseFloat(object.Position.X), parseFloat(object.Position.Y), parseFloat(object.Position.Z))); 65 | ++loadedVehicles; 66 | break; 67 | default: 68 | console.log(`Objeto do tipo ${object.Type} não pôde ser carregado.`); 69 | } 70 | }); 71 | console.log(`${mapData.Map.Objects.MapObject.length} objetos carregados (${loadedVehicles} veículos, ${loadedProps} 72 | objetos)`); 73 | } 74 | else { 75 | console.log(`O mapa ${mapData.Map.Metadata.id} não implementa um ou várias propriedades como Map, Map.Objects ou 76 | Map.Objects.MapObject.`); 77 | } 78 | } 79 | else { 80 | console.log(`Mapa ${mapData.Map.Metadata.id} não encontrado.`); 81 | } 82 | } 83 | unloadCurrentMap() { 84 | console.log('Descarregando mapa atual.'); 85 | let objectsLength = mp.objects.toArray().length; 86 | let vehiclesLength = mp.vehicles.toArray().length; 87 | mp.objects.forEach(function (object) { 88 | object.destroy(); 89 | }); 90 | mp.vehicles.forEach(function (vehicle) { 91 | vehicle.destroy(); 92 | }); 93 | console.log(objectsLength + ' objetos descarregados.'); 94 | console.log(vehiclesLength + ' veículos descarregados.'); 95 | } 96 | mainLoop() { 97 | return __awaiter(this, void 0, void 0, function* () { 98 | // console.log('[MAINLOOP] Executando mainloop'); 99 | switch (this.status) { 100 | } 101 | let self = this; 102 | setTimeout(function () { 103 | self.mainLoop(); 104 | }, 1000); 105 | }); 106 | } 107 | getMapMetadata(property) { 108 | return this.mapSelected['Map']['Metadata'][property]; 109 | } 110 | } 111 | exports.Rpg = Rpg; 112 | //# sourceMappingURL=rpg.js.map -------------------------------------------------------------------------------- /packages/rpg/rpg.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"rpg.js","sourceRoot":"","sources":["rpg.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /packages/rpg/rpg.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as glob from 'glob'; 3 | import 'rxjs/add/observable/of'; 4 | import * as _ from 'underscore'; 5 | import { BrazucasServer } from '../../common/brazucas-server'; 6 | import { carregarTimers, carregarVeiculos } from './lib/functions/bootstrap'; 7 | import { PlayerProvider } from './providers/player.provider'; 8 | 9 | export class Rpg { 10 | private maps: Array = []; 11 | public mapSelected: any = null; 12 | public status: any = null; 13 | public brazucasServer: BrazucasServer; 14 | 15 | public static playerProvider: PlayerProvider; 16 | 17 | constructor(brazucasServer: BrazucasServer) { 18 | this.brazucasServer = brazucasServer; 19 | 20 | Rpg.playerProvider = new PlayerProvider(brazucasServer); 21 | 22 | this.init(); 23 | } 24 | 25 | private async init() { 26 | this.carregarMapas(); 27 | 28 | console.log(`${this.maps.length} mapa(s) carregado(s).`); 29 | 30 | await carregarVeiculos(); 31 | 32 | console.log(`${mp.vehicles.length} veículos carregados.`); 33 | 34 | await carregarTimers(this.brazucasServer); 35 | 36 | this.mainLoop(); 37 | } 38 | 39 | private carregarArquivosMapas() { 40 | let maps = glob.sync('packages/rpg/maps/*.json'); 41 | 42 | let self = this; 43 | _.forEach(maps, function(map: Buffer) { 44 | self.maps.push(JSON.parse(fs.readFileSync(map, 'utf8'))); 45 | }); 46 | 47 | return this.maps; 48 | } 49 | 50 | private carregarMapas() { 51 | let mapas = this.carregarArquivosMapas(); 52 | 53 | mapas.forEach((mapa) => { 54 | // this.carregarMapa(mapa); 55 | }); 56 | } 57 | 58 | public carregarMapa(mapData) { 59 | console.log(`Carregando mapa ${mapData.Map.Metadata.Name}.`); 60 | 61 | if (mapData) { 62 | if (mapData.Map && mapData.Map.Objects && mapData.Map.Objects.MapObject) { 63 | let loadedVehicles = 0, loadedProps = 0; 64 | 65 | _.forEach(mapData.Map.Objects.MapObject, function(object: any) { 66 | switch (object.Type) { 67 | case 'Prop': 68 | mp.objects.new( 69 | parseInt(object.Hash, 10), 70 | new mp.Vector3(parseFloat(object.Position.X), parseFloat(object.Position.Y), parseFloat(object.Position.Z))); 71 | ++loadedProps; 72 | break; 73 | case 'Vehicle': 74 | mp.vehicles.new( 75 | parseInt(object.Hash, 10), 76 | new mp.Vector3(parseFloat(object.Position.X), parseFloat(object.Position.Y), parseFloat(object.Position.Z)), 77 | ); 78 | ++loadedVehicles; 79 | break; 80 | default: 81 | console.log(`Objeto do tipo ${object.Type} não pôde ser carregado.`); 82 | } 83 | }); 84 | 85 | console.log(`${mapData.Map.Objects.MapObject.length} objetos carregados (${loadedVehicles} veículos, ${loadedProps} 86 | objetos)`); 87 | } else { 88 | console.log(`O mapa ${mapData.Map.Metadata.id} não implementa um ou várias propriedades como Map, Map.Objects ou 89 | Map.Objects.MapObject.`); 90 | } 91 | } else { 92 | console.log(`Mapa ${mapData.Map.Metadata.id} não encontrado.`); 93 | } 94 | } 95 | 96 | public unloadCurrentMap() { 97 | console.log('Descarregando mapa atual.'); 98 | 99 | let objectsLength = mp.objects.toArray().length; 100 | let vehiclesLength = mp.vehicles.toArray().length; 101 | 102 | mp.objects.forEach(function(object) { 103 | object.destroy(); 104 | }); 105 | 106 | mp.vehicles.forEach(function(vehicle) { 107 | vehicle.destroy(); 108 | }); 109 | 110 | console.log(objectsLength + ' objetos descarregados.'); 111 | console.log(vehiclesLength + ' veículos descarregados.'); 112 | } 113 | 114 | private async mainLoop() { 115 | // console.log('[MAINLOOP] Executando mainloop'); 116 | 117 | switch (this.status) { 118 | 119 | } 120 | 121 | let self = this; 122 | setTimeout(function() { 123 | self.mainLoop(); 124 | }, 1000); 125 | } 126 | 127 | public getMapMetadata(property) { 128 | return this.mapSelected['Map']['Metadata'][property]; 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /server: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brazucas/ragemp-server/9654c541f11e7a8757516eb322479083501c95f7/server -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "target": "es6", 5 | "module": "commonjs", 6 | "sourceMap": true, 7 | "moduleResolution": "node", 8 | "lib": [ 9 | "dom", 10 | "es2015" 11 | ], 12 | "allowSyntheticDefaultImports": true, 13 | "declaration": false, 14 | "emitDecoratorMetadata": true, 15 | "experimentalDecorators": true, 16 | "skipLibCheck": true 17 | }, 18 | "files": [ 19 | "./node_modules/@types/mocha/index.d.ts", 20 | "./node_modules/@types/node/index.d.ts" 21 | ], 22 | "include": [ 23 | "./**/*.ts" 24 | ], 25 | "exclude": [ 26 | "node_modules", 27 | "browser", 28 | "docker", 29 | "client" 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "arrow-return-shorthand": true, 4 | "callable-types": true, 5 | "class-name": true, 6 | "comment-format": [ 7 | true, 8 | "check-space" 9 | ], 10 | "curly": true, 11 | "eofline": true, 12 | "forin": true, 13 | "import-blacklist": [ 14 | true, 15 | "lodash", 16 | "rxjs", 17 | "rxjs/Rx" 18 | ], 19 | "import-spacing": true, 20 | "indent": [ 21 | true, 22 | "spaces", 23 | 2 24 | ], 25 | "interface-over-type-literal": true, 26 | "label-position": true, 27 | "max-line-length": [ 28 | true, 29 | 140 30 | ], 31 | "member-access": false, 32 | "member-ordering": [ 33 | true, 34 | { 35 | "order": [ 36 | "static-field", 37 | "instance-field", 38 | "static-method", 39 | "instance-method" 40 | ] 41 | } 42 | ], 43 | "no-arg": true, 44 | "no-bitwise": true, 45 | "no-console": [ 46 | true, 47 | "debug", 48 | "info", 49 | "time", 50 | "timeEnd", 51 | "trace" 52 | ], 53 | "no-consecutive-blank-lines": [ 54 | true, 55 | 2 56 | ], 57 | "no-construct": true, 58 | "no-debugger": true, 59 | "no-duplicate-variable": true, 60 | "no-duplicate-super": true, 61 | "no-empty": false, 62 | "no-empty-interface": true, 63 | "no-eval": true, 64 | "no-inferrable-types": [ 65 | true, 66 | "ignore-params" 67 | ], 68 | "no-misused-new": true, 69 | "no-non-null-assertion": false, 70 | "no-shadowed-variable": false, 71 | "no-string-literal": false, 72 | "no-string-throw": true, 73 | "no-switch-case-fall-through": true, 74 | "no-trailing-whitespace": true, 75 | "no-unnecessary-initializer": true, 76 | "no-unused-expression": true, 77 | "no-unused-variable": [ 78 | true, 79 | { 80 | "ignore-pattern": "^_" 81 | } 82 | ], 83 | "no-var-keyword": true, 84 | "object-literal-sort-keys": false, 85 | "one-line": [ 86 | true, 87 | "check-open-brace", 88 | "check-catch", 89 | "check-else", 90 | "check-whitespace" 91 | ], 92 | "ordered-imports": [ 93 | true, 94 | { 95 | "import-sources-order": "lowercase-last", 96 | "named-imports-order": "case-insensitive" 97 | } 98 | ], 99 | "prefer-const": false, 100 | "quotemark": [ 101 | true, 102 | "single", 103 | "avoid-escape" 104 | ], 105 | "radix": true, 106 | "semicolon": [ 107 | true, 108 | "always", 109 | "strict-bound-class-methods" 110 | ], 111 | "trailing-comma": [ 112 | true, 113 | { 114 | "multiline": "always", 115 | "singleline": "never" 116 | } 117 | ], 118 | "triple-equals": [ 119 | true, 120 | "allow-null-check" 121 | ], 122 | "typedef-whitespace": [ 123 | true, 124 | { 125 | "call-signature": "nospace", 126 | "index-signature": "nospace", 127 | "parameter": "nospace", 128 | "property-declaration": "nospace", 129 | "variable-declaration": "nospace" 130 | } 131 | ], 132 | "unified-signatures": true, 133 | "variable-name": false, 134 | "whitespace": [ 135 | true, 136 | "check-branch", 137 | "check-decl", 138 | "check-module", 139 | "check-operator", 140 | "check-preblock", 141 | "check-separator", 142 | "check-type" 143 | ] 144 | }, 145 | "rulesDirectory": [ 146 | "node_modules/tslint-eslint-rules/dist/rules" 147 | ] 148 | } 149 | --------------------------------------------------------------------------------