Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Search the Community

Showing results for tags 'tutoriais'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Haze
    • Announcements & Updates
    • Official Files
    • User Central
  • Web development
    • CMS & Scripts
    • Codes
    • Tutoriais
    • Work in Progress
    • Support
    • Others
  • Games Development
    • Browser Games
    • Minecraft
    • Unreal Engine
    • Unity 3D
    • Cry Engine
    • JavaScript (HTML5)
    • Publish your Project
    • Support
    • Outros
  • Desktop Development
    • Codes
    • Tutoriais
    • Work in Progress
    • Outros
  • Graphic Design
    • Tutorials
    • Resources
    • Gallery
    • Support
  • O mundo fora...
    • Sales & Purchases
    • Mídia
    • Debates
    • Taverna

Product Groups

  • Account Modifications
  • Licenses

Categories

  • Officials
  • CMS & Layouts
    • Wordpress
    • HTML/CSS
    • PHP Script
    • Outros
  • Jogos
    • Habbo Hotel
    • Minecraft
    • Engines
  • Desktop
    • C#
    • Node
  • Design
    • Editáveis
    • Recursos de Imagens
    • Others

Categories

  • games
  • TV Shows
  • Technology
  • Cinema

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


E-mail


Facebook


Twitter


Skype


Discord


WhatsApp


Behance


DeviantArt


GitHub


Codepen


Outro

Found 9 results

  1. Como Funciona? A maioria dos jogos online multiplayer utilizam a arquitetura server-client. Cada player roda um cliente que no nosso caso será o Phaser.IO que é responsável por exibir e manipular a entrada do player, e cada cliente troca dados com um servidor (NodeJS) central e autoritário, que valida as ações dos jogadores e o transmite para os outros clientes. Configurando o Servidor Server.js Instale todos os Pacotes em seu NodeJs (Socket.IO e Express). Para instalar é simples basta você executar ‘npm install express’ e ‘npm install socket.io’. var express = require('express'); var app = express(); var server = require('http').Server(app); var io = require('socket.io').listen(server); Express é o módulo que usaremos para servir arquivos para os clientes. Criamos uma nova instância chamada app e, combinando-a ao módulo http , garantimos que nosso aplicativo expresso funcionará como um servidor http. Por fim, exigimos o módulo socket.io e o fazemos ouvir as conexões com esse servidor. Este é mais ou menos código clichê para começar com aplicativos simples. O próximo passo é entregar os arquivos, dependendo do caminho solicitado. app.use('/css',express.static(__dirname + '/css')); app.use('/js',express.static(__dirname + '/js')); app.use('/assets',express.static(__dirname + '/assets')); app.get('/',function(req,res){ res.sendFile(__dirname+'/index.html'); }); Essas linhas são necessárias para poder fornecer arquivos estáticos , como folhas de estilo CSS ou recursos de jogos, que não serão acessíveis diretamente, mas precisam ser acessados pelo seu jogo. Por conveniência, o segundo argumento do app.use () permite que você especifique os caminhos virtuais, que não são os caminhos reais para seus recursos, mas que serão os caminhos usados pelos seus scripts para acessá-los. Concluímos a configuração do servidor, indicando qual porta o servidor deve escutar e especificando qual arquivo será exibido como a página raiz. app.get('/',function(req,res){ res.sendFile(__dirname+'/index.html'); }); server.listen(8081,function(){ // Listens to port 8081 console.log('Listening on '+server.address().port); }); Configurando o Cliente Index.html Index.html é a página do gateway que será exibida ao se conectar ao seu servidor, e também neste caso a página na qual o jogo será exibido. Cabe a você estruturá-lo como quiser, mas deve conter pelo menos um elemento div com o id ' game '. Ele também deve incluir os arquivos Javascript necessários para o seu jogo, incluindo o socket.io. Aqui está como incluí-lo: <script src="/socket.io/socket.io.js"></script> Isso funciona porque o caminho virtual /socket.io/socket.io.js é criado automaticamente ao instalar o socket.io. Neste ponto, se você executar o servidor (digitando 'node server.js' em um terminal) e navegar para o seu aplicativo (por exemplo, em http: // localhost: 8081 / se você estiver executando localmente e mantido a porta padrão) , você deve ver o seu index.html servido para você, com qualquer conteúdo que você tenha colocado neste ponto (talvez um “Hello World”, para ter certeza de que funciona). Vamos agora incluir o game.js para configurar o jogo. Vou me referir a este processo doravante como "executando o jogo". js/game.js Agora podemos continuar configurando a tela do jogo (assumindo que temos um bloco div com o id ' game ') e declarando um único estado do jogo, chamado ' Game ', correspondente a um objeto Javascript com o mesmo nome. var game = new Phaser.Game(16*32, 600, Phaser.AUTO, document.getElementById('game')); game.state.add('Game',Game); game.state.start('Game'); var Game = {}; No Game.init () , existe apenas um parâmetro para definir: Game.init = function(){ game.stage.disableVisibilityChange = true; }; Isso não é obrigatório, mas é útil, pois fará com que o jogo continue reagindo às mensagens do servidor, mesmo quando a janela do jogo não tiver foco (o que é um comportamento desejado para a maioria dos jogos). No Game.preload () , nós carregamos os recursos que precisaremos, incluindo o mapa de blocos no formato JSON (exportado do Tiled). Eu não vou entrar em muitos detalhes aqui sobre como criar e lidar com tilemaps lado a lado, mas se você quiser que eu faça um tutorial para cobrir esses aspectos, não hesite em me avisar. Game.preload = function() { game.load.tilemap('map', 'assets/map/example_map.json', null, Phaser.Tilemap.TILED_JSON); game.load.spritesheet('tileset', 'assets/map/tilesheet.png',32,32); game.load.image('sprite','assets/sprites/sprite.png'); // this will be the sprite of the players }; Em Game.create () , começamos criando e exibindo nosso mapa. Game.create = function(){ var map = game.add.tilemap('map'); map.addTilesetImage('tilesheet', 'tileset'); // tilesheet is the key of the tileset in map's JSON file var layer; for(var i = 0; i < map.layers.length; i++) { layer = map.createLayer(i); } layer.inputEnabled = true; // Allows clicking on the map }; Observe que, embora os cliques estejam ativados no mapa, não há código no momento para lidar com isso; isso ocorrerá quando o servidor estiver em execução e a comunicação entre o cliente e o servidor estiver funcionando. Neste ponto, ao executar o jogo, você deve ver o mapa exibido, sem que nada mais aconteça: js/client.js Em index.html, inclua um novo arquivo Javascript, client.js , que conterá um objeto Clientque atuará como a interface entre o servidor e o próprio jogo. var Client = {}; Client.socket = io.connect(); O bit importante aqui é a segunda linha, onde iniciamos uma conexão com o servidor ( localhost se você não especificar de outra forma entre os parênteses). Cada vez que um jogador navega para seu aplicativo, uma conexão será estabelecida com o servidor. Isso irá criar um soquete. Soquetes são pontos de extremidade no fluxo de comunicação entre o servidor e o cliente. Com o socket.io, podemos enviar e receber mensagens através do soquete, o que constitui a maneira básica pela qual o cliente e o servidor irão interagir. Aqui, o soquete do cliente é armazenado no Client.socket para uso futuro. Interações em tempo real Agora a parte interessante começa. Precisamos deixar o servidor ciente do que os jogadores fazem, assim como fazer os clientes reagirem às mensagens vindas do servidor. Quando um jogador executa uma ação (conectando, desconectando ou movendo), usaremos a API Socket.io para enviar uma mensagem ao servidor para notificá-lo dessa ação. Em troca, o servidor usará a mesma API para enviar mensagens para os clientes quando precisarem ser informados sobre a ação de outro jogador. O restante deste tutorial ilustra como enviar e receber essas mensagens e como integrá-las a um jogo Phaser. Exibindo os jogadores conectados Quando um novo jogador se conecta, um novo sprite deve aparecer no jogo para todos os jogadores conectados, incluindo o recém-conectado. As coordenadas dos sprites são determinadas aleatoriamente pelo servidor. js/game.js Primeiro, vamos modificar o Game.create () no game.js para que o cliente notifique o servidor de que um novo player deve ser criado. Para esse fim, adicionamos Client.askNewPlayer (); no final de Game.create () . No começo, nós também adicionamos Game.playerMap = {}; : este objeto vazio será útil mais tarde para acompanhar os jogadores. Game.create = function(){ Game.playerMap = {}; var map = game.add.tilemap('map'); map.addTilesetImage('tilesheet', 'tileset'); // tilesheet is the key of the tileset in map's JSON file var layer; for(var i = 0; i < map.layers.length; i++) { layer = map.createLayer(i); } layer.inputEnabled = true; // Allows clicking on the map Client.askNewPlayer(); }; js/client.js Agora em client.js , precisamos definir o método Client.askNewPlayer () : Client.askNewPlayer = function(){ Client.socket.emit('newplayer'); }; Esse método usará nosso objeto de soquete e enviará uma mensagem para o servidor. Esta mensagem terá o rótulo 'newplayer', que é auto-explicativo. Um segundo argumento pode ser adicionado para passar dados adicionais, mas não será necessário neste caso. server.js No server.js , precisamos reagir às mensagens do cliente. Adicione o seguinte código: server.lastPlayderID = 0; // Keep track of the last id assigned to a new player io.on('connection',function(socket){ socket.on('newplayer',function(){ socket.player = { id: server.lastPlayderID++, x: randomInt(100,400), y: randomInt(100,400) }; socket.emit('allplayers',getAllPlayers()); socket.broadcast.emit('newplayer',socket.player); }); }); function getAllPlayers(){ var players = []; Object.keys(io.sockets.connected).forEach(function(socketID){ var player = io.sockets.connected[socketID].player; if(player) players.push(player); }); return players; } function randomInt (low, high) { return Math.floor(Math.random() * (high - low) + low); } Dizemos ao Socket.io para ouvir o evento 'connection', que é acionado toda vez que um cliente se conecta ao servidor (usando io.connect () ). Quando isso acontece, ele deve chamar o retorno de chamada especificado como o segundo argumento. Este retorno de chamada recebe como primeiro argumento o soquete usado para estabelecer a conexão, que, assim como o soquete do cliente, pode ser usado para passar mensagens. Usando o método socket.on () dos objetos de soquete, é possível especificar retornos de chamada para manipular mensagens diferentes. Portanto, cada vez que um cliente específico envia uma mensagem específica através de seu soquete, um retorno de chamada específico será chamado em reação. Nesse caso, definimos um retorno de chamada para reagir à mensagem 'newplayer'. Vamos decompor o que é feito lá: socket.on('newplayer',function(){ socket.player = { id: server.lastPlayderID++, x: randomInt(100,400), y: randomInt(100,400) }; socket.emit('allplayers',getAllPlayers()); socket.broadcast.emit('newplayer',socket.player); }); Primeiro, criamos um novo objeto personalizado, usado para representar um player, e armazená-lo no objeto de soquete. Como você pode ver, é possível adicionar propriedades arbitrárias específicas do cliente ao objeto de soquete, tornando-as convenientes para o acesso. Neste objeto, damos ao jogador um ID único (que será usado no lado do cliente) e determinamos aleatoriamente a posição do sprite. Então, queremos enviar para o novo jogador a lista de jogadores já conectados: socket.emit('allplayers',getAllPlayers()); Socket.emit () envia uma mensagem para um soquete específico. Aqui, enviamos para o cliente recém-conectado uma mensagem chamada 'allplayers' e, como segundo argumento, a saída de Client.getAllPlayers (), que será uma matriz dos players conectados no momento. Isso permite que os jogadores recém-conectados se atualizem com a quantidade e as posições dos jogadores já conectados. Vamos dar uma olhada rápida em Client.getAllPlayers () : function getAllPlayers(){ var players = []; Object.keys(io.sockets.connected).forEach(function(socketID){ var player = io.sockets.connected[socketID].player; if(player) players.push(player); }); return players; } O io.sockets.connected é uma matriz interna do Socket.io dos soquetes atualmente conectados ao servidor. Podemos usá-lo para iterar todos os sockets, obter a propriedade do player que adicionamos a eles (se houver) e enviá-los para uma lista, listando efetivamente os players conectados. E finalmente: socket.broadcast.emit('newplayer',socket.player); O socket.emit.broadcast () envia uma mensagem para todos os sockets conectados, exceto o soquete que acionou o retorno de chamada. Ele permite transmitir eventos de um cliente para todos os outros clientes, sem que eles sejam retornados ao cliente iniciante. Aqui, nós transmitimos a mensagem 'newplayer' e enviamos como dados o novo objeto de jogador. Para resumir o que fizemos nestes últimos passos: - Ouvimos as conexões dos clientes e definimos as chamadas de retorno para processar as mensagens enviadas pelos sockets - Quando recebemos a mensagem 'newplayer' de um cliente, criamos um objeto small player que armazenamos no socket do cliente - Para o novo cliente, enviamos uma lista de todos os outros players, para que ele possa exibi-los - Para os outros clientes, enviamos as informações sobre o recém-chegado Até agora, nosso servidor reage a uma mensagem dos clientes. Agora precisamos adaptar os clientes para que eles possam processar as mensagens 'allplayers' e 'newplayer' do servidor em retorno, completando assim o loop `connect - notificar o servidor que estou aqui - obter informações em retorno - display it`. Note que a mensagem 'newplayer' enviada pelo cliente e aquela enviada pelo servidor não é a mesma; Eu escolhi dar a eles o mesmo rótulo porque eles transmitem o mesmo tipo de informação, mas eles serão tratados separadamente, uma vez que eles têm endpoints diferentes (o servidor para o primeiro, o cliente para o último). js/client.js Em client.js , adicione este código: Client.socket.on('newplayer',function(data){ Game.addNewPlayer(data.id,data.x,data.y); }); Client.socket.on('allplayers',function(data){ console.log(data); for(var i = 0; i < data.length; i++){ Game.addNewPlayer(data[i].id,data[i].x,data[i].y); } }); Como você pode ver, a mesma sintaxe para manipular mensagens pode ser usada no lado do cliente. Quando os dados são enviados ao longo de uma mensagem, eles podem ser recuperados como o primeiro argumento do retorno de chamada no terminal de recebimento. Portanto, o objeto ' data ' alimentado para o callback 'newplayer' corresponde aos dados do socket.player enviados pelo servidor. Para a mensagem 'allplayers', é uma lista de objetos socket.player . Em ambos os casos, esses dados são processados chamando Game.addNewPlayer () , que agora podemos definir em game.js : js/game.js Game.addNewPlayer = function(id,x,y){ Game.playerMap[id] = game.add.sprite(x,y,'sprite'); }; Esse método cria um novo sprite nas coordenadas especificadas e armazena o objeto Sprite correspondente em um array associativo declarado em Game.create () , com o id fornecido como a chave. Isso permite acessar facilmente o sprite correspondente a um jogador específico, por exemplo, quando precisamos movê-lo ou removê-lo (veja abaixo). Neste ponto, se você reiniciar o servidor (para que as últimas modificações sejam levadas em conta) e navegue até o seu jogo, você verá um pequeno caractere exibido, correspondente ao seu sprite. Se você se conectar com outros navegadores, caracteres adicionais deverão aparecer na tela. Manipulando desconexões Como é, quando um jogador se desconecta, seu sprite permanecerá na tela dos outros jogadores, o que não é desejável. Isso pode ser corrigido ao processar a mensagem 'desconectar' que o servidor recebe automaticamente quando um cliente se desconecta ou atinge o tempo limite ativamente. Esta mensagem pode ser tratada como qualquer outra, da mesma forma que fizemos para o 'newplayer', por exemplo: ligando um callback a ele dentro do método io.on () : server.js io.on('connection',function(socket){ socket.on('newplayer',function(){ socket.player = { id: server.lastPlayderID++, x: randomInt(100,400), y: randomInt(100,400) }; socket.emit('allplayers',getAllPlayers()); socket.broadcast.emit('newplayer',socket.player); socket.on('disconnect',function(){ io.emit('remove',socket.player.id); }); }); }); Em reação à mensagem 'desconectar', usamos io.emit () , que envia uma mensagem para todos os clientes conectados. Enviamos a mensagem 'remove' e enviamos o id do jogador desconectado para remover. Nota: Obrigado ao Kaundur por apontar que o callback 'desconectado' deve ser registrado dentro do callback 'newplayer'; se não, e 'desconectar' é de alguma forma chamado antes de 'newplayer', o servidor irá travar! js/client.js Client.socket.on('remove',function(id){ Game.removePlayer(id); }); E no game.js : js/game.js Game.removePlayer = function(id){ Game.playerMap[id].destroy(); delete Game.playerMap[id]; }; Isso ilustrou o uso da estrutura de dados do Game.playerMap , a propósito. Não há necessidade de repetir sprites; o id permite buscar imediatamente. Agora tudo o que resta a fazer é processar e transmitir os movimentos dos jogadores. Movendo os movimentos do jogador js/game.js Chegou a hora de completar o Game.create () . Basicamente, queremos que, quando o mapa for clicado, as coordenadas sejam enviadas para o servidor, para que a posição do jogador que clicou possa ser atualizada para todos. Adicione a seguinte linha ao Game.create () : layer.events.onInputUp.add(Game.getCoordinates, this); Agora, o mapa reagirá aos cliques chamando o método Game.getCoordinates () , que podemos definir da seguinte forma: Game.getCoordinates = function(layer,pointer){ Client.sendClick(pointer.worldX,pointer.worldY); }; Callback de onInputUp eventos em Phaser receber como segundo argumento do correspondente objeto ponteiro, que contém duas propriedades worldX e worldy que podemos usar para saber onde, no mapa de jogo, fez o clique ocorrer. Podemos então passar essas coordenadas para Client.sendClick () em client.js : js/client.js Client.sendClick = function(x,y){ Client.socket.emit('click',{x:x,y:y}); }; Que simplesmente envia as coordenadas para o servidor, com o rótulo 'clique'. Não há necessidade de enviar qualquer ID de jogador, já que o socket é específico do cliente e associado a apenas um jogador. server.js Em server.js , aqui está a lista final de retornos de chamada de mensagem: io.on('connection',function(socket){ socket.on('newplayer',function(){ socket.player = { id: server.lastPlayderID++, x: randomInt(100,400), y: randomInt(100,400) }; socket.emit('allplayers',getAllPlayers()); socket.broadcast.emit('newplayer',socket.player); socket.on('click',function(data){ console.log('click to '+data.x+', '+data.y); socket.player.x = data.x; socket.player.y = data.y; io.emit('move',socket.player); }); socket.on('disconnect',function(){ io.emit('remove',socket.player.id); }); }); }); Os campos x e y da propriedade player do soquete são atualizados com as novas coordenadas e transmitidos imediatamente para todos, para que possam ver a alteração. Agora, o objeto socket.player completo é enviado, porque os outros clientes precisam saber o id do jogador que está se movendo, a fim de mover o sprite correto na tela (embora, nesse jogo minimalista, não exista um caminho real para distinguir os jogadores). js/client.js De volta ao client.js , precisamos lidar com a mensagem 'mover' do servidor, para que os clientes possam reagir a outro jogador em movimento: Client.socket.on('move',function(data){ Game.movePlayer(data.id,data.x,data.y); }); O processo deve começar a se tornar familiar para você. Em game.js : js/game.js Game.movePlayer = function(id,x,y){ var player = Game.playerMap[id]; var distance = Phaser.Math.distance(player.x,player.y,x,y); var duration = distance*10; var tween = game.add.tween(player); tween.to({x:x,y:y}, duration); tween.start(); }; Nós novamente fazemos uso da estrutura Game.playerMap para recuperar o sprite correto, e então nós o interpolamos para tornar o movimento progressivo. CÓDIGO FONTE COMPLETO (COMENTE PARA VER): [Hidden Content] Bjos Tio Unk ..
  2. Danellon

    ajuda

    Eu baixei o AsteroidPack mas não sei configurar o que faço??
  3. Unk

    Eai Pessoal, Trago para vocês um Tutorial de como baixar a famosa engine em que os jogos Far Cry, Crysis e Ryse foi desenvolvido. A engine chama Cry Engine (Ao o meu ver nenhuma outra engine atinge as qualidades gráficas que a Cry Engine pode exibir). A CryEngine pode ser baixada diretamente por este link, no GitHub. Mas para fazer o caminho completo, dá para ir ao site oficial da Crytek e passar pelo portal "pague o que quiser". A desenvolvedora está oferecendo sua engine gratuitamente, mas oferece a oportunidade para quem quiser (e puder) contribuir com algum investimento de volta. Pode ser qualquer um valor e quem estiver pagando pode escolher ainda quanto desse dinheiro vai para a Crytek e quanto vai para o Fundo de Desenvolvimento Indie, organizado pela empresa para ajudar estúdios pequenos a criar seus jogos na CryEngine. ATENÇÃO AOS REQUISITOS MINIMOS! Requisitos Mínimos para a CryEngine: OS: Windows Vista SP1, Windows 7, 8.1, 10 (apenas 64-bit) Processador: Intel Dual-Core 2GHz | AMD Dual-Core 2GHz Memória: 4 GB de RAM | 8GB de espaço disponível no armazenamento Gráficos: NVIDIA GeForce 400 series | AMD Radeon HD 6000 series DirectX: Version 11 Requisitos Recomendados para a CryEngine: OS: Windows 7, 8.1, 10 (64-bit) Processador: Intel Quad-Core (i5 2300) | AMD Octa-Core (FX 8150) Memória: 8 GB de RAM | 8GB de espaço disponível no armazenamento Gráficos: NVIDIA GeForce 660Ti (ou melhor) | AMD Radeon HD 7950 (ou melhor) DirectX: Version 11
  4. Unk

    Eai Pessoal, Hoje trago um tutorial de como baixar o Unity 3D (Versão Personal Free). Para baixar é simples basta acessar a Unity Store , aceitar os termos e clicar em "Baixar o instalador para Windows". ATENÇÃO VERIFIQUE OS REQUISITOS MINIMOS : OS: Windows 7 SP1+, 8, 10; macOS 10.11+. GPU: Placa de vídeo com suporte a DX9 (shader model 3.0) ou DX11 com suporte a feature level 9.3 Bjos do Tio Unk
  5. Se você tiver instalado o Rage Multiplayer e desejar criar um servidor, precisará saber como configurá-lo. Existem vários parâmetros que você pode definir no arquivo conf.json. Esses parâmetros permitirão que você altere alguns valores padrão, como portas usadas, taxas de atualização e mais coisas que estarão explicadas abaixo. Lista de Parâmetros Quando abrir o arquivo pela primeira vez, você encontrará algo parecido com isso: { { "announce": false, "bind": "127.0.0.1", "gamemode": "freeroam", "name": "RAGE:MP Unofficial server", "maxplayers": 100, "port": 22005, "streamdistance": 500.0 } } Esses são alguns dos parâmetros que podemos configurar, para adicionar outros, é só adicionar uma nova linha com os parâmetros listados abaixo: announce -> Este parâmetro define se o seu servidor irá aparecer na lista de servidores ou não (valores true/false), o padrão é false. bind -> Define o IP do servidor que você está hospedando, o valor padrão é 127.0.0.1. gamemode -> O nome do seu gamemode, será mostrado na lista de servidores, o valor padrão é freeroam. encryption -> Se a conexão com o servidor será criptografada ou não (valores true/false), o valor padrão é false. maxplayers -> A quantidade máxima de jogadores simultâneos que podem estar online no servidor, o valor padrão é 100. name -> O nome do seu servidor, isso ajudará as pessoas a encontrar e filtrar seu servidor na lista de servidores, o valor padrão é RAGE:MP Unofficial server. stream-distance -> A distância máxima em que o jogador será transmitido, o valor padrão é 500.0. port -> A porta que o servidor estará utilizando, o valor padrão é 22005. disallow-multiple-connections-per-ip -> Permite (false) ou não permite (true) que vários jogadores se conectem a partir do mesmo endereço de IP, o valor padrão é false. limit-time-of-connections-per-ip -> Tempo máximo que um jogador pode tentar reconectar antes de receber timeout, o valor padrão é 0 url -> O URL do seu site, onde você fornece mais informações sobre o servidor. language -> O idioma utilizado no seu servidor, utiliza dois caracteres, o valor padrão é en. sync-rate -> Esse número indica quantas vezes por segundo o servidor precisa sincronizar suas entidades, o valor padrão é 40. resource-scan-thread-limit -> Indica o número máximo de encadeamentos usados para a busca de recursos max-ping -> Ping máximo que um jogador pode ter para poder jogar no servidor min-fps -> Mínimo de frames por segundo que um jogador precisa para poder jogar no servidor max-packet-loss -> Perda máxima de pacotes que um jogador pode ter para poder jogar no servidor min-game-version -> Versão mínima do jogo necessária para se conectar ao servidor allow-cef-debugging -> Se o cliente pode (true) ou não (false) depurar as páginas CEF do servidor csharp -> Se o seu servidor estiver usando o plug-in C# Bridge, defina-o para verdadeiro, senão não adicione essa linha. Nota: Números e valores não precisam de aspas, você deve usá-las apenas em parâmetros de texto. Tópico original (Inglês): Rage.MP Forums Artigo original na Wiki: Server Settings
  6. Olá membros do Haze Fórum, venho anunciar para vocês uma série de tutoriais onde você vai aprender a codificar um site (HTML/CSS), começando do básico ao o que eu puder ensinar. Nos tutoriais vou tentar ser o mais direto possível e você poderá tirar suas dúvidas no tópico (caso a dúvida seja simples) ou criar um tópico de Suporte no fórum que será ajudado. Para iniciar, preciso da ajuda de vocês... com o que eu começo? PS: Por ser a primeira, optei por não começar com um site completo. 1- Power Mine Landing Page 2- Neodins Landing Page 3- NeoGames Login/Register Sobre a metodologia: Ainda estou pensando em ser somente tutorial Escrito, Escrito + Vídeo ou só Vídeo. Vai depender muito de minha disponibilidade, mas prometo ter pelo menos alguns vídeos.
  7. Oi! Gostaria de compartilhar um pequeno "fix" para um antigo mobi do habbo que muitos usuários adoram, a Água. Então, o que vou explicar aqui é uma maneira para você criar um algoritmo que faça aparecer as bordas da água e desaparecer de maneira correta Exemplo: Como isso funciona? Ao contrário de alguns mobis especiais, os mobis de água não precisam de compositores especiais (como presente, manequins, mobis de grupo, etc.) As bordas da água estão escondidas e são mostradas com 12 bits. Por que 12 bits? Cada bit representa uma borda do mobi. Como o mobi de água é um furni de 3x3, ele terá 12 quadrados de bordas que cercam o mobi. A configuração das bordas pode ser feita enviando um número inteiro com a configuração de bits Exemplo: 0b000000000001 A ordem de cada bit relacionada a cada posição é: Então, se quiser, defina as bordas superiores escondidas, você precisa definir os 7º, 8º, 9º e 10º bits como 1. Por exemplo. 0b001111000000. Para ocultar as bordas inferiores, você precisa definir os 1 º, 2 º, 3 º e 4 º bits como 1. Por exemplo. 0b000000001111 Mas, como faço para fazer um algoritmo com isso? Pode ser feito com Lógica Binária (PT) ou Bitwise (EN). Uma vez que você obteve o número inteiro com esses 12 bits, transforme-o em um String e escreva no compositor de extradata do mobi. Exemplo: Tenha em mente que o mobi pode ser sempre movido, com wired, pessoa ou qualquer coisa, então você precisa torná-lo capaz de atualizar a extra data sempre que o mobi é movido de um quadrado para outro. Por exemplo: Então é isso! Boa sorte para consertar a água no seu emulador. Tópico criado originalmente por cabeludo007 em inglês. Tradução feita por T0E.
  8. Vamos entender de vez como funciona esse negócio do Teal and Orange. Esse é um estilo de color grading baseado nas cores laranja e azul, laranja e ciano, amarelo e ciano, dentre outras que estão nesse mesmo espectro. Normalmente, aplicamos as sombras no azul e tons claros no laranja. Por que funciona? As cores tem algumas regras ou “fórmulas” que chamamos de color schemes ou esquemas cromáticos. São combinações de cores que sempre vão funcionar e ficar agradável aos olhos. Entenda as regras dos esquemas cromáticos: As cores complementares são caracterizadas ficam distantes na no círculo cromático. Isso representa um alto contraste de cores (não estamos falando de contraste de luminosidade). Este é um dos motivos que fazem com que o Teal and Orange seja utilizado com frequência. Justamente pelo contraste das cores, nesse esquema de color grading, a cor da pele acaba “saltando” bastante e ficando muito em destaque. E por fim, o Teal and Orange é uma combinação bastante agradável. Combinações de cores que seguem alguma das regras no círculo cromático sempre tendem a ficar esteticamente agradáveis – em outras palavras, mais bonitas. Dois exemplos de filmes que seguem esse estilo: Mad Max: esse é o melhor exemplo do uso de Teal and Orange. O filme usa da psicologia das cores para justificar o uso do esquema cromático. Para representar o calor no deserto usa-se o laranja, e o azul entra para representar a frieza dos personagens. Já o filme Transformers 2 não segue nenhum motivo específico para o uso do teal and orange, além de ser bastante forçado nas cenas. Stefan Sonnenfeld, colorista de Transformers, disse ao The Guardian: “não tem um processo de escolha das cores onde sentamos na sala de colorização e decidimos que só vamos usar teal and orange ou outro esquema. cada filme tem seu estilo.” A escolha do look do filme muitas vezes é uma decisão tomada pelo diretor junto com o colorista, e nesse caso do teal and orange, normalmente não é guiada pela psicologia das cores. Será que isso é Moda? Vlogs de viagem tem utilizado bastante esse esquema de cor. É inegável que funciona, mas quem tem que tomar a decisão de uso é você, que está colorindo. Minha recomendação é: não exagere. Tem gente que acha que color grading é bronzeador artificial e fica parecendo uma cenoura no vídeo. E procure seu estilo próprio… tem muita gente no esquema teal and orange, experimente algo novo pra se diferenciar. Como fazer? Tutorial passo a passo: Usando Luts: o LUT M31 é o mais famoso, mas existem vários outros, inclusive gratuitos. Usando ferramentas nativas: separe o que é amarelo com ferramenta de correção de cor secundária, principalmente a pele. Jogue o restante no azul.
  9. Se você acabou de baixar Paladins e ainda está um pouco perdido e/ou não entendeu muito bem como funcionam os sistemas do jogo, nós vamos explicar! Reserve um pouco do seu tempo para ler este guia, pois será muito útil na sua compreensão do funcionamento de Paladins. Iremos atualizá-lo conforme novas funcionalidades forem adicionadas ao jogo. Caso ainda tenha alguma dúvida ou queira deixar uma sugestão, entre em contato conosco! Conteúdos: O que é Paladins? Campeões Classes Cartas Cartas Lendárias Itens Essências Montarias Modos de Jogo Compras Maestria Conquistas Sprays Títulos O que é Paladins? Paladins: Champions of the Realm é um jogo de tiro baseado em equipes com elementos de estratégia e progressão do personagem no jogo através de um sistema de baralhos de cartas colecionáveis. Essas cartas ampliam ou adicionam pontos a um núcleo de habilidades dos personagens e podem ser combinadas de várias maneiras interessantes. Paladins é gratuito para jogar e está atualmente em fase Open Beta para PCs e para consoles. Para se registrar clique aqui. Campeões Em Paladins, os jogadores podem escolher um Campeão da lista para jogar durante cada partida. Cada Campeão tem um estilo diferente de jogo e habilidades únicas para ajudar a equipe. Os campeões tem cinco habilidades diferentes: uma arma/ferramenta para lutar, três habilidades específicas de cada campeão e uma habilidade especial (Ultimate). Você pode explorar as habilidades de cada Campeão na aba Campeões dentro do jogo. Classes Paladins possui atualmente 4 classes de campeões. Cada classe possui uma função dentro do jogo, sendo que os campeões dessas classes têm habilidades e cartas específicas para melhor desempenho na sua função, e não em outras. Linhas de Frente são campeões com bastante vida e com a habilidade de projetar escudos. Sua função é levar o dano do time inimigo no lugar dos seus aliados, protegendo-os e conquistando o ponto de captura. Eles também devem ajudar a eliminar o time inimigo, causando dano neles. Suportes são campeões cujas funções são curar e debilitar os inimigos. Eles devem permanecer logo atrás do Linha de Frente para que não morram facilmente. Manter o Linha de Frente vivo é a prioridade, mas eles também devem curar os outros aliados e controlar o time inimigo com debuffs (chamado de Controle Coletivo em Paladins) e dano. Danos são campeões cuja função principal é limpar o ponto de captura matando os inimigos. Eles devem permanecer perto do ponto para ajudar na captura caso o Linha de Frente morra. Flancos são campeões que sua função principal é atacar pelo flanco, ou seja, pelos lados e pelas costas. São rápidos e possuem dano massivo para eliminar um inimigo com facilidade caso a batalha fique um contra um. Além disso, o Flanco deve tirar a atenção do inimigo do ponto, podendo ir atrás deles na base inimiga para atrasá-los. Cartas As cartas são uma parte muito importante de Paladins, e construir o baralho certo para o seu estilo de jogo é fundamental. Felizmente, se você ainda está começando, cada Campeão possui um baralho predefinido para ajudar você a se acostumar com o sistema! As cartas podem ser obtidas tanto por criação com Essência quanto por Baús (veja a seção Baús mais abaixo). As cartas possuem vários níveis, sendo que quanto maior o nível, mais pontos a carta toma do baralho. Você pode decidir o nível de cada carta equipada no seu baralho. Baralhos Cada Campeão tem cinco Baralhos (Decks) para serem escolhidos durante o jogo. Um deles é predefinido e não pode ser alterado, os outros quatro podem ser montados pelo próprio jogador. Cada Baralho funciona com um sistema de pontos onde cada carta tem um valor específico associado a ela, e o baralho possui 12 pontos para serem gastos. Cada Baralho deve ter cinco cartas. Carregar as cartas custa pontos e aumentam a efetividade da carta. Você também pode importar baralhos de outros jogadores do ranking mundial, pesquisando por nome ou escolhendo na lista de amigos. A Raridade das cartas afeta o preço delas em Essência e a probabilidade de elas serem obtidas em baús. Cartas Lendárias As Cartas Lendárias funcionam como uma habilidade especial. Cada campeão começa com uma carta pré-definida, e as outras podem ser compradas com Essência (semelhante aos baralhos). Ela deve ser selecionada no início da partida, antes de selecionar o baralho, e não pode ser trocada durante a partida. Cartas Temporárias / Itens Durante uma partida, você ganhará Créditos por realizar várias tarefas (capturar um objetivo, matar um oponente etc.). No início de cada rodada, você pode usar os Créditos para comprar Cartas Temporárias ou Itens (Burn Cards), o painel é acessado com a tecla "i". Essas cartas podem te ajudar em coisas como reduzir a capacidade de cura do inimigo, fazer mais dano em escudos, e muito mais! Você ganha mais créditos ao fazer atividades de acordo com a sua classe, por exemplo, Linhas de Frente ao capturar o objetivo, Suportes ao curarem um aliado, Flancos por fazerem eliminações pelas costas, etc. Você pode ter no máximo quatro cartas temporárias, uma de cada categoria, e aumentar a efetividade delas gastando mais créditos. Elas expiram depois que a rodada termina no modo Carregamento. Essências Como dito anteriormente, Essência é a "moeda" usada para criar cartas (do baralho e Lendárias). Elas são obtidas nos Baús Radiantes ao receber cartas repetidas. Quanto maior a raridade da carta repetida, mais Essência ela dará em troca. Você também pode "desencantar" as cartas que você não usa para transformá-las em Essência e criar outras cartas. Montarias Ao começar uma rodada, você sobe na sua montaria, aumentando a velocidade de movimento. Levar dano em cima da montaria faz você descer dela, e, uma vez em combate, só poderá montar de novo quando reviver ou terminar a rodada. Modos de Jogo Atualmente existem três modos de jogo em Paladins: Cerco (Siege), Carregamento (Payload) e Sobrevivência (Survival). Todos colocam duas equipes de cinco Campeões cada, uma contra a outra. Eles podem estar dentro do modo Casual (contra jogadores) e Treinamento (contra bots, inteligência artificial). Um jogador novato joga contra bots até atingir o nível 5, mesmo selecionando o modo Casual. Cerco No modo Cerco ou Siege, o objetivo é conseguir quatro pontos antes do outro time. Uma equipe obtém 1 ponto capturando um ponto de captura, e mais 1 ponto se conseguir levar o carregamento até a base inimiga dentro do tempo. A equipe adversária ganha 1 ponto se impedir o carregamento de chegar na base. No início da rodada, um ponto de captura aparecerá no mapa dentro do tempo de preparo das equipes. As equipes devem correr para capturá-lo ficando dentro do círculo mais tempo que o outro time. Quando o ponto for capturado, um carrinho irá surgir, e a equipe terá que escoltar o carrinho até a base inimiga. Se não houver ninguém da equipe de captura próximo ao carrinho, ele para de se mover. Ele também para de se mover quando alguém da equipe de impedimento fica próximo ao carregamento. A partida termina quando o carregamento chega na base inimiga ou quando o tempo se esgota. Carregamento No modo Carregamento ou Payload, o objetivo é apenas escoltar ou impedir a carroça de chegar na outra base. Não há contagem de pontos, e sim uma porcentagem que indica quanto o seu time conseguiu empurrar a carroça, e o tempo aumenta quando o carregamento chega em um ponto de verificação (checkpoint). Há duas rodadas, e os itens são resetados ao término da primeira. Ganha a partida o time que chegar em 100% (ou o mais perto disso) em menos tempo. Chacina No modo Chacina, cada eliminação dá ao time 5 pontos, e controlar a grande área de combate no centro da arena (objetivo) dá 2 pontos por segundo. O primeiro time a conseguir 400 pontos, ou o time com mais pontos depois de 10 minutos, é o vencedor. Competitivo O modo competitivo atualmente funciona apenas como o modo Cerco, dando a mesma quantidade de ouro e experiência como recompensas, mas o modo Competitivo você ganha Pontos de Triunfo (Triumph Points, TP). Existem 7 Tiers/Camadas na Ranked 2.0: Bronze Prata Ouro Platina Diamante Mestre Grão-Mestre De Bronze até Diamante existem 5 divisões dentro de cada Tier. Jogar competitivamente agora lhe dá Pontos de Triunfo (Triumph Points, TP). Ganhar TP o suficiente irá promover você da sua divisão atual. Mestre é a maior divisão que pode ser alcançada, e a partir daí os 100 jogadores com mais TP são colocados na divisão Grão-Mestre. Antes de jogar o Modo Competitivo, um jogador precisará ter nível 15 de conta e possuir pelo menos 12 personagens desbloqueados. Não há requerimentos de maestria para esses personagens. Os novos jogadores precisarão jogar 15 partidas provisórias antes de serem colocados em uma divisão. A colocação será baseada na sua performance nos jogos qualificativos. Se você está em Bronze, Prata, Ouro ou Platina, você pode criar um grupo de 5 pessoas para jogar o modo competitivo, mas apenas se todos os jogadores no grupo também forem Bronze, Prata, Ouro ou Platina. Jogadores em Diamante, Mestre e Grão-Mestre podem apenas fazer grupo de 2 pessoas. Jogadores Diamante podem fazer grupo com Platina, Diamante, Mestre ou Grão-Mestre. Jogadores que ainda estão nos jogos provisórios podem apenas formar grupo de 2 pessoas com outros Bronze, Prata, Ouro ou Platina. Ganhar jogos competitivos fará você ganhar TP. Se você chegar a 100 TP, você é promovido para a próxima divisão e seus TPs voltam para 0. Pontos excessivos (por exemplo, 105) são adicionados na sua nova divisão (ficaria com 5). Performance excepcional pode fazer você pular ainda mais divisões quando promovido. Perder jogos competitivos fará você perder TP. Se você perder um jogo competitivo quando possuir 0 TP, você será rebaixado para a divisão anterior. Você não poderá ser rebaixado dessa forma até que jogue 5 jogos dentro da sua divisão atual. Jogadores ficam com 70 TP quando rebaixados. Conforme você joga a ranqueada, você poderá receber recompensas exclusivas para a temporada. Qualifique-se para o competitivo e receba uma borda de carregamento que mostra a divisão mais alta alcançada por você na temporada, e também receba um Baú de Aparência. Jogue 25 jogos competitivos e ganhe um Baú de Armas. Alcance a divisão Ouro 5 para receber a coleção épica do Drogoz: Terrormorph. Ganhe 100 jogos competitivos para receber a arma épica do Drogoz: Mandíbula Terrormorph. Ganhe 200 jogos competitivos para receber o título "Forjado Em Batalha". Termine a temporada como Grão-Mestre ou no Top 3 de qualquer Placar de Campeões para receber uma recompensa em Cristais. Mapas de Teste Dentro do modo Casual, você encontra o modo de Mapas de Teste, onde a partida ocorrerá dentro de um mapa sem textura, em desenvolvimento, e que você acessa um formulário de feedback após o término da partida. Esses mapas são atualizados constantemente. Personalizado O modo Personalizado possui salas de partidas criadas por jogadores, em que é possível selecionar o mapa (de modo Cerco ou Carregamento), a quantidade de jogadores (de 1v1 até 5v5), definir uma senha (opcional) e um nome para a sala. Neste modo não se ganha experiência nem ouro. Compras É possível obter alguns items por meio de compra dentro de Paladins, com as moedas de ouro. Para comprar Skins (aparências) de vestimentas e armas, é necessário escolher o Campeão que deseja customizar na aba Campeões ou ir na aba Loja. O ouro também é usado para desbloquear Campeões e comprar Baús Radiantes. Você obtém ouro ao completar partidas (se sair vitorioso, ganha mais ouro) e ao subir o nível de Maestria de campeões. Alguns itens também podem ser comprados com Cristais , que são obtidos em recompensa de login diário ou comprando com dinheiro real. Existe também o Pacote de Fundador (pago com dinheiro), que desbloqueia todos os campeões atuais e futuros, e garante cristais e roupas exclusivas, além de uma Melhoria de Conta de um mês (que pode ser comprada separadamente com cristais). A Melhoria dá o dobro de Experiência e Ouro no final das partidas e ao subir de nível. Baús Ao subir de nível na sua conta de Paladins, você ganha um Baú Radiante. Nesse baú vêm 3 itens (4 se você tiver a Melhoria de Conta ativada), que podem ser: cartas, emotes (ativados na tecla B durante a partida), roupas, sprays, Essência e poses de melhor jogada. O Baú Radiante também pode ser comprado com ouro. Existem outros tipos de Baú: o Baú Colossal garante uma customização de personagem de raridade Exclusiva ou Rara, mas vem um item por baú. Existem outros baús com pacotes de customização para um personagem apenas ou customizações eventuais, que irão sair do jogo em breve. Maestria Cada vez que você joga com um Campeão, dependendo do seu desempenho, você obtém pontos de maestria. Os pontos de maestria aumentam o nível de Maestria no campeão. As maestrias dão recompensas de Ouro ou Baú Radiante, e em níveis mais elevados desbloqueiam as Recompensas de Maestria (skin, spray, pose e emote). Conquistas As conquistas são tarefas específicas que lhe garantem uma insígnia ao completá-la. Algumas possuem níveis (como as conquistas de Maestria), outras são únicas (como a conquista Boom Head Shot). Sprays Sprays são imagens que são desenhadas ao pressionar T mirando em uma parte do mapa dentro da partida. Além do spray padrão, com o logo do Paladins, você pode ganhar sprays específicos de cada personagem nos Baús Radiantes e Colossais, ou em baús de pacotes de customização. Os sprays de baús radiantes e colossais vêm com uma carta dourada, e o spray é a arte dessa carta. Os sprays de cartas só podem ser usados com o personagem que possui aquela carta. Títulos Os títulos são frases que aparecem abaixo do seu nome durante o lobby de uma partida. Os títulos podem ser obtidos ao chegar na maestria 20 com algum campeão, e selecionados em seu perfil (acessado ao clicar no retângulo superior direito com suas informações). Em breve novos títulos poderão ser obtidos de outras maneiras. Créditos pelo Tutorial ao pessoal da Toca do Pip.
×