Minhas idéias... Eu vi o tabahost e gostei muito. Maravilhoso trabalho de voces. Eu tive algumas idéias, espero que não sejam mal recebidas, falo sem conhecimento do código atual nem das funções que já estão incorporadas nele : - Eu vi que existe um limite de 130 entidades globais : pensei na seguinte solução, tomando a arena FH atual (aquele mapa com a africa do norte) como exemplo : - um piloto em F1 não tem a minima nocao do que ocorre em F17, por exemplo. - normalmente as distancias envolvidas e a velocidade dos drones é tão lenta que eles podem ser considerados semi-estáticos. Portanto, poderia ser feito um tipo de "drone cache" : O FE do piloto só toma conhecimento das últimas 130 unidades com as quais teve contato, considerando "contato" como sendo uma distância especifica (digamos 500000 feets). Toda vez que o piloto está para entrar em contato com uma unidade, a última unidade do cache é removida para abrir espaco para essa nova unidade. Outro ponto, o rádio : Os rádios daquela época tinham alcançe limitado, poderia ser considerado cada elemento da arena, possuidor de rádio, tanto estatico quanto móvel, como sendo um repetidor potencial : Os rádios teriam um limite de alcançe, baseado em dados históricos, sendo impossivel um piloto em F1 (por exemplo) contatar um piloto em F17, ou mesmo a própria torre desse field... Existindo um campo com radio ativo, cuja distância permita alcançe eletromagnético tanto para o aviao em F1 quanto para o avião em F17, esse radio faz a "ponte" entre os dois pilotos permitindo que os mesmos se comuniquem... Havia uma dificuldade de comunicacao terrivel nessa época, os rádios eram bastante primitivos e ao mesmo tempo era difícil impedir que o inimigo ouvisse seus sinais (ou seja, quem você queria que ouvisse, não ouvia e quem você nao queria que ouvisse, podia ouvir...) Radar : Atualmente a cobertura de radar se limita aos campos, o que não é realistico. Existiam centenas de estações de radar (algumas até móveis) em toda a europa. (Vide radar Freya alemão, ou Home guard britânico). Poderiam ser adicionados fixos de radar por todo o mapa, evelopando boa parte do cenário, conforme fatos históricos (os japoneses tiveram algumas dificuldades em cobrir os territórios conquistados com radares, e os radares alemães na europa oriental sofriam constantes ataques de sabotadores, comandos, etc). Por outro lado, sempre existiu uma guerra de eletrônica e contra-eletrônica, os buffs reds, por exemplo, lançavam cortinas de chaff (pequenos pedaços de alumínio) que causavam ecos radar falsos e dificultavam a operação), e também haviam aviões bombardeiros convertidos especialmente para missões de escuta e embaralhamento (Jammer). Poderia ser adicionado dois novos comandos, para os buffs : .chaff : cria ecos falsos na área em que o buff está, centenas deles. .jammer [on|off[ : ativa/desativa o jammer onboard, fazendo os radares da área ficarem cegos. Não sei se é possível adicionar novas estruturas aos mapas atuais, como "Forward radar huts". O que eu sei é que os bombardeiros aliados não entravam no espaço aéreo alemão sem serem notados. (A nao ser o mossie e os bombers que vinham à baixa altitude) Por outro lado os radares da época tinham desempenho à baixa altitude sofrível, baixo PRF e o fato de não terem capacidade Doppler, faziam com que interceptações abaixo de 5000 feet serem baseadas em testemunhas oculares, oráculos, etc, tudo menos radar... Somado a isso, quando tais radares tentavam (focavam) baixas altitudes, surgiam centenas de ecos falsos provenientes da supefície e dos "Side lobes" (nenhum radar tem apenas um lóbulo de deteção, a maioria tem cerca de 5 principais, na verdade infinitos, mas os que vem depois desses 5 normalmente sao menores que o próprio comprimento de onda, sendo despercebidos). ......................2 .......................\....3..... .........................\..|..... ...........1----------------R..... ........................./..|..... ......................./....5..... .....................4 R = Radar !, 2, 3, 4 Lobes É meio complicado de desenhar com ascii Os operadores não tinham como saber se um alvo (alias, tinham, mas deixa isso pra depois) estava em 1, 2, 3, 4 ou 5, pois todos apareciam como sendo o mesmo eco... A única forma de diferenciar era "rodando" a antena de forma a comparar a "força" dos ecos conforme eles passavam em 1 e com isso diferencia-los, ou seja, não era algo simples ou imediato... Alguns radares como o Home Guard (O freya conseguia) nem isso conseguiam fazer, tinham multiplos ecos e pronto. (Por isso eles criaram lá aquela central de informações, pra cruzar os dados dos multiplos radares e saber o que era o eco realmente). Daí, poderia ser colocado um "delay de deteção", correspondente à época da guerra e à tecnologia envolvida, inicialmente os alvos apareceriam embaralhados e marcados em branco, enquanto os operadores (no caso, o server) fazia toda a triagem necessária para determinar altura, velocidade, tipo de alvo e que alvo o buffer ia atacar (estimado). As acks pesadas dependiam dessa informação para montar barragens. Assim que o processo fosse concluido, o host enviaria uma mensagem para quem estivesse proximo do field ou unidade de radar de solo indicando o alvo, sua velocidade, altitude, direção, etc... Sendo que, alvos muito próximos entre si seriam considerados "formação". (pra evitar repeticao de mensagens) -HOST- Alarm ! Buffers at X, Y Speed 000 Alt 000 Heading 000 à partir daí os buffers passam a ter marcação Red ou Gold. Caso estivessem dotados de jammers ou usassem chaffs (chaffs teriam quantidade limitada), alguma dessas informações apareceriam deturpadas : -HOST- Alarm ! Buffers at X, Y Speed (cannot determine) Alt (cannot determine) Heading (cannot determine). Seria adicionado um novo comando : .interception <radar unit> Que atualizaria essa informação para o piloto, adicionando um vetor de interceptação : -HOST- Buffers at X, Y Speed 000 Alt 000 Heading 000 -HOST- Alt 000 Vector 000 Speed 000, interception point at X, Y Uma mensagem dessas para cada grupo de alvos na área. Se o radar nao soubesse nada sobre alvos na área, responderia -HOST- No targets reported in our area of coverage. Field Chain : Seria construído um banco de dados de rotas, necessário para várias operações : Rotas aéreas, rotas navais, rotas terrestres, ligando cada estrutura do mapa, de forma que, quando um buffer estivesse perdido, poderia acionar o comando : .waypoint <target> E o host responderia (se houver um radio hut próximo o suficiente) -HOST- Your next waypoint to <target> is X,Y -HOST- Vector 000 Indicando o waypoint mais próximo do piloto, motorista, etc, que leve ao alvo <target>. Se você não quiser seguir uma rota já manjada, TE VIRA. .homebase Indica que rota seguir para voltar à base de onde você decolou -HOST- Home base vector 000. ao comando .field seria adicionado um vetor : .field fX -HOST- Field F00 Side (Red) Status (CLOSED) Capture (TRUE) Vector (000). Blackboard AI : Esse mesmo field chain seria usado no field supply system, utilizando um sistema de inteligência artificial (Blackboard). A blackboard AI controlaria a maior parte dos efetivos terrestres e navais, inclusive o porta aviões. Os canais que ficam restritos à cada lado (101, 103) seriam usados para informar os eventos da AI. O funcionamento é simples : Toda vez que uma unidade detectasse algum tipo de alvo (visualmente), geraria no canal correspondente ao lado a seguinte mensagem : UnitXX: Visual contact <targettype> at X, Y essa mesma mensagem seria codificada em um Queue, no servidor : (eu nao sei C++ ) Type TWBUnitIDType = Longint; TWBMapPosition = Record X, Y : Real; End; TWBMissionType = (MiInterception, MiJABO, MiLevelBomb, MiTankFight, MiSEAD, MiAirDefence, MiRessuply). TBlackBoardMessageKind = (MsgContact, MsgUnderAttack, MsgAttacking, MsgDestroyed, MsgOutOfFuel, MsgOutOfAmmo, MsgOutOfSpares, MsgFieldClosed, MsgFieldOpen, MsgSendingAmmo, MsgSendingFuel, MsgSendingSpares); TWBUnitType = (UnitFighter, UnitBomber, UnitTank, UnitArtillery, UnitNaval, UnitSubmarine, UnitHalftrack, UnitHeavyBomber, UnitLightFlak, UnitHeavyFlak); TWBWarningLevel = (LvIngore, LvLow, LvMed, LvHigh, LvExtreme); TWBSide = (Red, Green, Purple, Gold); TBlackBoardMessage = Record Sender : TWBUnitIDType; Position : TWBMapPosition; Mission : TWBMissionType; Kind : TBlackBoardMessageKind; Threat : TWBUnitType; Level : TWBWarningLevel; Side : TWBSide; Attrib : Byte; Time : TDateTime; Expires : TDateTime; End; TBlackBoardQueue = Array Of TBlackBoardMessage; Toda vez que ocorrer um evento, seja com alguma unidade da AI, seja com alguma unidade humana, o seu "ESPELHO" no servidor cria uma entrada no Queue da blackboard, descrevendo o ocorrido. Numa blackboard existem dois tipos de unidades, os geradores e os receptores. Os geradores criam essas mensagens (todas as unidades são geradoras). E os receptores pegam as mensagens conforme sua capacidade, gerando respostas e criando eventos. Por exemplo : Um bombardeiro pesado foi atacado por flaks pesadas em uma ilha distante, digamos F17. A unidade AI de F1 não tem rotas terrestres para alcancar F17, nem pode comandar bombardeiros (Aviões são atribuições dos jogadores humanos), então ela simplesmente ignora essa mensagem que está no queue. Mas F13 tem como chegar em F17, então ela pega essa mensagem no queue, gera uma resposta : Sending Tanks to supress acks at F13. Coloca no queue, e ativa uma coluna de tanques indo de F13 para F17, por uma rota terrestre. Agora vamos supor que o field F14 está sem aviões (MsgOutOfSpares). F14 coloca essa mensagem no Queue, com nivel LvExtreme. F11 é do mesmo lado e possui peças sobressalentes. Pelo campo Expires da mensagem F11 sabe que deve enviar rapidamente, além de ser uma mensagem de nivel LvExtreme, então F11 coloca uma resposta no Queue (MsgSendingSpares). E lança um voo de JU52 cargueiros para F14. Mas vamos supor que os reds são espertos, e ficam esperando por esse JU52. Quando o JU52 for derrubado, ele envia uma mensagem (MsgDestroyed). O que F11 responde criando um coluna de Jeep acks enviada para o local da queda, e um novo JU52 (isso dependendo se o próprio F11 ainda tem Ju52 sobressalentes e jeeps). Coloca no queue que esta enviando uma missão tipo MiAirDefence, e outra mensagem MiResupply). E assim por diante. Um jogo reativo. Onde as missões aéreas principais são feitas pelos jogadores (se eles quiserem e se ficarem com o rádio tunado no canal do Blackboard). Esses waypoints poderiam ser usados por unidades navais (um combio de navios saindo de um porto em direcao à outro para abastecer uma ilha que esta totalmente sem suprimentos). O que ganha uma guerra é a logística, se um lado isola totalmente uma ilha, os campos dessa ilha vao lutar com o suprimento que tem, até esgotar, tornando-se um alvo fácil logo após isso. Miscellânea : Patrol Boats : Um gripo de 3 barcos patrulha (tipo os S-Boats alemães) que pode atacar tanto CVs quanto barcos de suprimento, quanto defender um field (ficando estáticos). Field captured by ground units : Um campo foi fechado e outro campo aliado próximo lancou uma coluna terrestre e conseguiu capturá-lo. (coluna composta de um tanque e dois halftracks). Amphibious landing : Um porto lancou um grupo de desembarque contra um field fechado e foi bem sucedido. Etc. Commanders Front-End : Um novo aplicativo que permite visualisar a ação em 2d, num mapa, com ícones descrevendo alvos, unidades detectadas pelo radar, etc, toda ação que está ocorrendo e permitindo alterar os eventos da blackboard. Eu sei que é muita coisa, mas eu posso ajudar se preciso. Obrigado pela atencao ! E parabens pelo trabalho com o Tabajara Host.
Re: Minhas idéias... Mais uma coisa. Seria muito difícil adicionar trens ? O supply chain comecaria numa fabrica, se espalharia em comboios de trem, navios e caminhões, até o ultimo field alcançável. Isso faria as pontes realmente úteis (e também útil bombardeá-las). Adicionando estruturas do tipo "train crossing", "train depot" ou "train station" afetaria a distribuição de recursos. Recon missions : A AI geraria voos com aviões específicos (realisticamente usados para reconhecimento de grande altitude). O aviao subiria até a sua altitude operacional (MUITO ALTA) e seguria por way points definidos. Se conseguisse voltar a base a AI teria um snapshot da situacao atual da área em volta. Gerando missões. Outra coisa que eu pensei : Os waypoints poderiam ser extendidos, vários deles. E funcionariam como um tabuleiro de xadrez : Tanques andariam pelos waypoints vagos (tornando esse waypoint vago um waypoint aliado) ou aliados até encontrar um waypoint obstruído por unidades inimigas. Comecaria então um combate (puramente estatístico) até que algum dos lados fosse destruído, tornando o waypoint vago e permitindo novo avanço. All the way to a field. Os pilotos poderiam ajudar fazendo missões CAS (com o il2 ou com o ju87). Esse sistema seria válido apenas para unidades terrestres. Unidades navais combateriam (excluindo ai os cvs) usando taticas mais complexas. Quando a esquadra inimiga fosse derotada, abriria caminho para um ataque de marines ou um ataque ao porto. Não sei até que ponto essas idéias são implementáveis, não sei quantos limites o atual FE do warbirds impõe.
Re: Minhas idéias... Descricao de uma blackboard : http://bbtech.com/index.html?intro.html&main PDF http://bbtech.com/papers/ai-expert.pdf
Um exemplo de blackboard em que eu estou trabalhando Code: // Blackboard for a Warfare MMOG // Copyright 2006 - (C) J. Aldo G. de F. Junior // Released under the terms of LGPL Unit Blackboard; Interface Uses Classes; Type // Foward declared class, will be solved later // Needed to inform the AI entity about the blackboard itself TBlackboard = Class; // Game Generics T2dPosition = Record X, Y : Real; End; T3dPosition = Record X, Y, Z : Real; End; TGameTimeStamp = Int64; // 64 bit signed // Actions TAIAction = ( ActIdle, // Sitting there and doing nothing, only defending myself ActPrepareToFly, // Walking around towards the runaway start ActTakingOff, // Full power and taking off the ground ActLanding, // Landing in the airstrip ActPrepareToLand, // Preparing to land ActMoveTo, // Just moving to somewhere ActAttack, // Attacking somewhere ActEvade, // Trying not to be catch ActEmergency, // Doing fancy things ActBail, // Praying ActSearch, // Searching for the enemy ActHelp, // Assisting nearby units in their duties ActFighting, // Fighting with something ActDropTroops, // Droping the paratroopers somewhere ActSupply // Droping supplies somewhere ); // What kind of entity sent this information ? TBlackboardEntityType = ( EntLightFighter, // Ki-27, I-5... EntMedFighter, // Bf-109, Zero... EntHvyFighter, // Bf-110, Me-410... EntDiveBomber, // Ju-87 EntLightBomber, // TBF EntMedBomber, // G4M EntHvyBomber, // B-17 EntHalftrack, // Jeepack, and ... EntFieldTower, // The tower EntStructure, // Something, like a fuel drum, a city, etc... EntLightTank, // Do we have some ? EntHeavyTank, // Panzer VIE EntLightAAA, // 12mm EntMedAAA, // 20mm, 40mm EntHvyAAA, // 88mm EntSubmarine, // Those things that can go below water and come back... EntNavalEscort, // Destroyers, Cruisers EntCarrier, // The carrier itself EntTransportShip, // Merchants EntTrain, // Train head EntTruck, // A GAZ truck EntPTBoat, // Small patrol boat, S-Boat EntTransportPlane // Ju-52, Li-2, DC-3 ); // What is this message main payload TBlackboardMessage = ( MsgContact, // I saw something MsgAttackedBy, // I was attacked by something MsgDestroyedBy, // Something destroyed me MsgAttacking, // I am attacking something MsgDestroyed, // I destroyed something MsgOutOfSupplies, // I´ve run out of something very important MsgNoEnemyInArea // I don´t see any enemy... ); // Wich kind of mission is this ? TAIMissionKind = ( MissionCAS, // Go and kill all the tanks and halftracks in an area MissionBombRun, // Carpet bomb an area MissionAntishipping, // Go and destroy these ships MissionIntercept, // Go and bring down the bombers MissionSupply, // Go there and drop supplies MissionInfiltrate, // Go there and drop paratroopers MissionAdvanceTo, // Just move to another position MissionRecon, // Fly over somewhere and say to us what you see there MissionDestroy, // Destroy some specific structure MissionSEAD, // Supress the enemy air defences over an area MissionAirDefence, // Ground or naval unit, protect something against enemy air attack MissionEscort, // Escort those bombers towards their targets MissionFighterSweep, // Go there and atract the enemy fighters, then shot them down, easy... MissionInterdiction, // Level bomb the battle field MissionCloseField, // Go there and try to close the field MissionArtilleryStrike, // Strike someplace with indirect fire (MLRS, Cannon Arty, Naval Arty... MissionIdle, // Sit there and wait MissionTransfer // Ferry itself to another field ); // Combo of actions and places TAIRoutine = Record Position : T3dPosition; Action : TAIAction; End; // Mission itself TAIMission = Record Kind : TAIMissionKind; Routine : Array Of TAIRoutine; // Dynamic array is built by the Blackboard manager End; // Wich kind of entry is this ? TBlackboardEntryKind = ( KindContact, // I saw something KindRequest, // I am requesting something KindGeneric); // I am doing something not specific // How important is this information ? TBlackboardEntryLevel = ( LevelIgnore, // Just routine work LevelLow, // Low level threat LevelMed, // Medium level threat LevelHigh, // High level threat LevelExtreme // Something of utmost importance ! ); // A.I. Entities Interface, all entities must provide this interface in order to be allowed to talk to the blackboard IAIEntity = IInterface // Unique BlackboardID for this entity, set by the blackboard Property BlackboardID : Int64; // Estimate time to reach a map position, results seconds Function EstimateETA(Pos : T2dPosition) : Integer; // Current Position Property Position : T3dPosition; // Current speed Property Speed : Real; // Current Heading Property Heading : Real; // Current Azimuth Property Azimuth : Real; // Current Action, what part of the current mission this unit is executing Property Action : TAIAction; // Current Mission, what mission i am assigned to Property Mission : TAIMission; // Pointer to the blackboard itself Property Blackboard : TBlackboard; // Wich kinds of missions i am able to comply ? Property PossibleMissions : TAIMissionKind; End; // Blackboard entry TBlackboardEntry = Record ID : Longint; // This message unique ID Sender : Longint; // Who sent this ? SenderEntity : TBlackboardEntityType; // Wich kind of unit sent this ? ObjectEntity : TBlackboardEntityType; // Wich kind of unit this message talks about ? Kind : TBlackboardEntryKind; // Wich kind of message is this ? Level : TBlackboardEntryLevel; // Estimated (By the sender) threat level of this message Message : TBlackboardMessage; // The message properly Position : T3dPosition; // Where was the object when this ocurred ? Heading : Real; // Where was the object when this ocurred ? Speed : Real; // Object speed when this ocurred ? Time : TGameTimeStamp; // When this message was sent ? Expires : TGameTimeStamp; // Estimated (By the sender) time when this message will become obsolete Specifics : Int64; // Generic container for specific data, can store aditional information needed by a entity End; // The blackboard properly TBlackboard = Class Private fBuffer : Array Of TBlackboardEntry; fEntities : Array Of IAIEntity; Procedure DelMessage(Index : Int64); Procedure CheckExpiredMessages; Public Constructor Create; // Allocate everything Destructor Destroy; Override; // Frees all data Function AddEntity(Var Entity : IAIEntity): Int64; // Adds a new entity to the chain Function AddMessage(Msg : TBlackboardEntry): Int64; // Adds new information to the blackboad Procedure DelEntity(Var Entity : IAIEntity); // Kills entity Procedure Loop; // Game tick Property Messages[Index : Int64]: TBlackboardEntry Read fBuffer; Default; Property Entities[Index : Int64]: IAIEntity Read fEntities; End; Implementation // I am tired.. he he Later i will write the rest End.
Como prever Buff raids Num nivel mais alto de estratégia, uma das necessidades da AI é tomar a iniciativa, preemptivamente. Uma maneira de alcancar isso é imitar os jogadores humanos, da seguinte forma : Separamos os eventos em duas categorias : - Eventos táticos : Um tanque foi destruido, um barco afundou, um aviao derrubou outro, etc. - Eventos estratégicos : Um field sofreu uma sortie de bombardeiros, um cv foi atacado, um campo foi fechado e capturado, etc. Os eventos estratégicos são organizados numa tabela. Vamos supor que existam 4 eventos estratégicos possiveis (so existem dois fields na arena) Code: |F1 attacked|F1 Captured|F2 attacked|F2 captured| F1 attacked| X | 100% | 0% | 0% | F1 Captured| 0% | X | 100% | 0% | F2 attacked| 0% | 0% | X | 100% | F2 captured| 100% | 0% | 0% | X | Esta é uma "tabela de Markov" que registra a probabilidade da transicao de um evento estrategico para outro, indiferente do lado. Dai, conforme os eventos vão acontecendo, essa tabela vai sendo alterada em suas probabilidades a partir do histórico, levando em consideracao nao o campo mais atacado ou coisa do tipo, mas a fluidez, a sequencia de como os eventos aconteceram no passado. O computador usa essa informacao para planejar a sua defesa e o seu ataque. Se apos F1 ser atacado a maior probabilidade eh dele ser fechado, e F1 é um campo aliado, o computador se prepara para defender esse campo, enquanto a "outra face" se prepara para capturá-lo. Eu não sei se eu expliquei bem, mas tem um link na wikipedia para as series de markov. É um algoritmo adaptativo que permite imitar e simular sequencias de acoes humanas. Eu o usei para criar um bot que conversa e aprende, por exemplo.
Radio jamming Tive uma idéia rápida agora, sobre radio jamming. As mensagens enviadas numa área que esta sofrendo jamming poderiam ser truncadas da seguinte forma : O sujeito digitou : Help, i saw a bomber ! o server cortaria aleatoriamente entre 20% a 80% das letras da frase, gerando o seguinte resultado : H..p....saw..a.b.m.e.. E quem ouvisse teria que decifrar o que está sendo dito...
Re: Minhas idéias... Caramba! Se eu me senti bombardeado agora, fico imaginando o franz! Quantas idéias! E quantas coisas interessantes para fazer!! Coitado do franz se todo mundo aprovar as idéias! Resumindo tudo o que você disse: - 130 drones -> drone cache (para aumentar a capacidade de drones); - Alcance do radar - Radar .chaff: cria ecos falsos na área em que o buff está, centenas deles; - Radar .jammer [1|0]: ativa/desativa o jammer onboard, fazendo os radares da área ficarem cegos; - Radar móvel (achei muito legal essa idéia!) - Field Chain - buffer perdido usaria isso... acredito que não seja necessário, afinal, quem se perde no WB? A tecla F1 diz tudo que é necessário para se localizar, daí fica inútil o Field Chain, embora seja uma idéia interessante; - Trens (hemant já deu essa idéia, devido a impossibilidade de criar um objeto com cara de trem, ele sugeriu -> Comboios com rotas pré-definidas, por exemplo, numa fila indianda, aparentando um trem, e a partir daí toda aquela idéia de reposição de aviões, combustível...) Cara, tem como vc resumir o resto, é muita coisa!! Rapaiz, vou abrir uma conta pra vc no wiki do tabahost, daí lá é melhor para organizar suas idéias! Uma em cada tópico! Abraços
Re: Minhas idéias... - Field Chain - buffer perdido usaria isso... acredito que não seja necessário, afinal, quem se perde no WB? A tecla F1 diz tudo que é necessário para se localizar, daí fica inútil o Field Chain, embora seja uma idéia interessante; O computador se perde As vezes eu quero saber o vetor que me leve a um field sem erro (Quando eu to de Ju52 e quero chegar urgentemente). Acho que todo mundo já fez um buff raid e viu como é chato ter que ficar corrigindo a rota. Buffers na vida real tinham toda a ajuda para conseguirem chegar nos seus alvos sem ter que corrigir muito a tragetória (O que ajudaria os caças a interceptá-los). Além disso na vida real tanto os reds quanto os golds tinham sistemas de radionavegação (X-Gerat e Oboe, por exemplo). Poderiam ser simulados assim. A inteligência artificial poderia até dar dicas de quando soltar chaffs ou ligar o jammer... (O uso do jammer não é tão simples, as vezes ele ajudava, as vezes ele tornava os buffers um alvo mais fácil ainda, era possível usar home on jam... Ou você podia acabar jammeando um canal aliado) Pensei noutra coisa. O comando jammer poderia aceitar um parâmetro. .jammer <channel> e ele atrapalharia a comunicação nesse canal específico. .jammer radar e ele atrapalharia apenas o radar na área. Imagina a frustração de um buff raid se decola um He-177 com jammers, escaneia as frequências até descobrir qual eles tão usando, e bloqueia toda a cooperação de vôo