Summoned creatures and tempo of play

I currently GM for a level 13 D&D 5e group of 5 players. Recently combat has become heavily bogged down, primarily because the party has discovered their new favourite (‘Death by a Thousand Cuts’) trick of Crusader’s Mantle + summoning every possible creature they can. Between, potentially, the 5 player characters, the two NPCs they often travel with, a familiar, the Circle of the Shepherd druid summoning 24 wolves, and the sorcerer animating 14 tiny objects, they can populate a small militia.

As a result, our rounds end up taking a long time just in terms of the number of turns. The rounds also become very uneven, with the summoner players having much longer in the spotlight than, say, the rogue. I have tried to explain to my players that this tactic is not very fun to GM for, and I have also contrived situations such that their enemies have more saving throw/AOE attacks available to them to try and thin the herd (though this does not always make sense and leads to my players having a weird persecution complex).

Historically, our combats have been fast paced and I already encourage players to have their turns ready before they come around. The main problem here is keeping track of dozens and dozens of creatures and the necessary dice rolling that goes along with it.

How can I run these types of encounters in a more fun and ‘rapid fire’ way with less admin? Is it possible to better even out the total time-per-turn, such that the non-summoner characters feel as influential? Should I:

  1. Approach this issue more as a group discussion about table dynamics?
  2. Adapt the encounters I throw at them?
  3. Devise new mass-summon house rules to try and speed things up in a fair way?
  4. Set a cap on the number of summons I’ll allow to be active a once?
  5. Some other approach I’ve not thought of?

Any advice or experience would be appreciated.

Como diminuir tempo de execução desse código

To resolvendo um desafio aqui, que é esse aqui: https://justpaste.it/2277i

E minha solução foi essa:

https://justpaste.it/71ken

Ele passou em 10 dos 15 testes, e os outros 5 deu timeout. alguém tem alguma sugestão para otimizar o código? O erro que deu foi “Terminated due to timeout”, porque o codigo ficou executando por mais de 10 segundos (ele dá timeout qunado chega em 10). Como faço pra otimizar esse código?

Como pegar o tempo de duração de um vídeo em Java?

Estou desenvolvendo um player que vai passar imagens, paginas Web e Videos. As imagens e Paginas Web precisam de um temporizador que vai ser executado por 30 Segundos, só que agora preciso de um método que pegue o tempo de execução dos vídeos que insira o código aqui serão mostrados e colocar o valor na Trhead.sleep.

public void testeVideo(int indice){         ArrayList<Uri> listaExecucao = getListaExecucao();         String midia = listaExecucao.get(indice).toString();         Uri midia1 = Uri.parse(midia);         vv.setVisibility(View.VISIBLE);         vv.setVideoURI(midia1);         duracao = vv.getDuration();         String duracaoS = String.valueOf(duracao);          Toast.makeText(WebPlayerActivity.this,duracaoS, Toast.LENGTH_SHORT).show();     }

Tentei usar essa função e coloquei um Toast para saber qual o valor que foi passado porém o valor passado foi -1.

Como é possível não utilizar uma dependência para compilar, mas utiliza-la em tempo de execução?

Estudando ferramentas de build como maven, vi que é possível declarar o escopo de uma dependência apenas como runtime, o que impossibilitaria a compilação de um código que utiliza ela. Como isso é possível, não compilar uma dependência mas utiliza-la em runtime?

Usando input radio e fazendo operações em tempo real com javascript

Sobre dar aulas, quero que a aula iniciante custe 20 por aula e a avançada 40, diferenciando usando radio buton, e a quantidade de aula com input type range, mas não entendo muito de js e queria essa ajuda, ae vai o codigo que adaptei da internet mas ele só serve para aula iniciante pois faz a quantidade de aula vezes 20 e queria que coletasse a variavel do radio e usasse no lugar do 20.

OBG

<!DOCTYPE html> <html>   <head>     <title></title>     <meta charset="utf-8">   </head>   <body> 	<section>       <h3>Escolha o pacote desejado</h3><hr>         Iniciante<input type="radio" name="radio" id="iniciante" checked /><br>         Avançado<input type="radio" name="radio" id="avancado" />          <h4>Quantidade de Aulas:</h4>          <input id="price" class="slider" type="range" min="1" max="30" value="1"/>           <span id="resultado1" style="font-size: 25px;"></span>        <h4>Total:</h4>         <p id="resultado2">Preço: </p> </section> <script>  var p = document.getElementById("price"),     res1 = document.getElementById("resultado1"),     res2 = document.getElementById("resultado2");  p.addEventListener("input", function () {     res1.innerHTML = p.value; }, false); p.addEventListener("mouseup", function () {     res2.innerHTML = "Preço: " + p.value * 20 + ",00"; }, false);  </script>   </body> </html>

Tempo de envio de dados

Estou a desenvolver uma pequena estação de meteorologia para aplicar num terreno agricola, que consiste em ter um sensor de temperatura, um sensor de chuva e um sensor de humidade este a incoporar mais tarde pois ainda não o tenho. No entanto queria pôr a enviar os dados de temperatura com um delay de 600000ms e que o sensor de chuva tivesse um delay de 1000. Não estou ver a forma como faze-lo. O que fiz de código até agora é o seguinte:

#include <ESP8266WiFi.h> #include <PubSubClient.h> #include <Wire.h> #include <farmerkeith_BMP280.h>  int rainSensor = A0; int rainLED = 2; int dryLED = 3; int sensorVal; int sensortrigger = 350; /*    Conexao ao AP    Credenciais de acesso    SSID - Nome do AP de acesso    Password - Passsword de acesso */ #define wifi_ssid "xxxxxxxx" #define wifi_password "xxxxxxxxx" /*    Endereço IP do MQTT Broker (Mosquitto) */ #define mqtt_server "192.168.1.10" /*    Definição dos tópicos dos dados dos sensores */ #define bmp_temperature_topic "temperaturebmp" #define bmp_pressure_topic "pressurebmp" #define rain_sensor_topic "rainstate"  /*    Inicialização das classes */ WiFiClient espClient; PubSubClient client(espClient); bmp280 bmp0;  void setup() {   Serial.begin(115200);   pinMode(rainSensor, INPUT);   pinMode(rainLED, OUTPUT);   pinMode(dryLED, OUTPUT);   digitalWrite(rainLED, LOW);   digitalWrite(dryLED, LOW);   setup_wifi();   client.setServer(mqtt_server, 1883);   bmp0.begin(); } void setup_wifi() {   delay(10);   /*      Inicio de conexão á rede Wi-Fi   */   Serial.println();   Serial.print("Connecting to ");   Serial.println(wifi_ssid);   WiFi.begin(wifi_ssid, wifi_password);   while (WiFi.status() != WL_CONNECTED) {     delay(500);     Serial.print(".");   }   Serial.println("");   Serial.println("WiFi connected");   Serial.println("IP address: ");   Serial.println(WiFi.localIP()); }  void reconnect() {   /*    *Loop de reconexão até que se conecte na rede Wi-Fi e no MQTT Broker    */   while (!client.connected()) {     Serial.print("Attempting MQTT connection...");     // Attempt to connect     // If you do not want to use a username and password, change next line to     // if (client.connect("ESP8266Client")) {     if (client.connect("changeMe")) {       Serial.println("connected");     } else {       Serial.print("failed, rc=");       Serial.print(client.state());       Serial.println(" try again in 5 seconds");       // Wait 5 seconds before retrying       delay(5000);     }   } } void loop() {   if (!client.connected()) {     reconnect();   }   client.loop();   // Segundos de espera entre medidas        int sensorVal = analogRead(rainSensor);       if (sensorVal < sensortrigger) {         Serial.println("Rain");         digitalWrite(dryLED, LOW);         digitalWrite(rainLED, HIGH);         client.publish(rain_sensor_topic, String("Raining").c_str(), true);       }       else {         Serial.println("Not Rain");         digitalWrite(rainLED, LOW);         digitalWrite(dryLED, HIGH);         client.publish(rain_sensor_topic, String("Not Raining").c_str(), true);       }       // Leitura da temperatura e pressão       double temperature = bmp0.readTemperature (); // measure temperature       Serial.print("Temperature = ");       Serial.print(temperature, 3); // print with 3 decimal places       Serial.println( " degrees Celsius");       client.publish(bmp_temperature_topic, String(temperature).c_str(), true);        double pressure = bmp0.readPressure (); // measure pressure       Serial.print("Atmospheric pressure = ");       Serial.print(pressure, 4); // print with 4 decimal places       Serial.println( " mbar");       client.publish(bmp_pressure_topic, String(pressure).c_str(), true);       delay(2000); } 

Problema com gráfico em tempo real C#

Estou tentando desenhar um gráfico em tempo real.

Nesse gráfico eu vou desenhando o sinal do ponto (0,y) até ao ponto (Width,y) usando um cursor vermelho para saber onde está desenhando atualmente. Quando o gráfico atingir o valor da propriedade Width, deve retornar ao início (ponto(0,y)). Ao iniciar novamente o desenho do gráfico eu devo ir apagando as colunas de pixels a frente do cursor vermelho.

Para exemplificar estou anexando o código:

public class GraphControl : Control {     int contador = 0;     public int _minValue;     public int _maxValue;     public int _dataCount;     private List<float> _values1 = new List<float>();      public GraphControl()     {         SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);     }      public void AddValue(float value1)     {         _values1.Add(value1);         contador++;         if (contador == 3)         {             Invalidate();             contador = 0;         }     }      protected override void OnPaint(PaintEventArgs e)     {         using (var p = new Pen(Color.FromArgb(95, 95, 95), 1.5f)) e.Graphics.DrawRectangle(p, 0, 0, Width - 1, Height - 1);         e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;         var wid = (float)Width / (float)_dataCount;          var total = _maxValue - _minValue;          var lastPoint1 = new PointF(0F, (float)(Height / 2));         PointF newPoint1 = new PointF();          for (int i = 0, a = 0; i < _values1.Count; i++, a++)         {             float value;             try             {                 value = (float)(_values1[i]);             }             catch             {                 value = (float)(_values1[i - 1]);             }              var porcent = value / total;              if (porcent > 1) porcent = 1;             var hg = porcent * (Height / 4);              newPoint1.X = (a + 1) * wid;              if (porcent >= 1) newPoint1.Y = Height / 4 - hg;             else newPoint1.Y = Height / 4 - hg - 1;              using (var p = new Pen(Color.Lime, 0.1f)) e.Graphics.DrawLine(p, lastPoint1, newPoint1);              lastPoint1 = newPoint1;              //cursor vermelho             using (var p = new Pen(Color.Red, 2)) e.Graphics.DrawLine(p, new PointF((a+1)*wid,0), new PointF((a+1)*wid,Height));              //apagando coluna de pixel (com cinza, cor do grafico)             using (var p = new Pen(Color.FromArgb(53, 53, 53))) e.Graphics.DrawLine(p, new PointF((a + 2) * wid, 0), new PointF((a + 2) * wid, Height));              if (a == _dataCount) a = 0;         }         base.OnPaint(e);     } } 

Há dois problemas com o código:

  • O cursor vermelho é desenhado várias vezes durante todo o percurso fazendo um borrão vermelho na tela
  • O jeito que eu estou apagando os próximos pixels não funciona.

Alguém pode me ajudar com esse problema ou dar dicas da resolução? Procurei em vários fóruns e não encontrei nada relacionado.

Como manter a requisição aberta para usar o método write() depois de muito tempo

Eu preciso manter a conexão aberta para depois de 180 segundos escrever os novos dados. O problema é que dessa forma que eu fiz, a stream simplesmente para depois da primeira musica. Como posso fazer para continuar aberta a conexão e tocar a segunda musica também ?

app.get('/current', async (req, res) => {     let stream = fs.createReadStream('sounds/musica 1.mp3')      stream.on('data', chunk => {         res.write(chunk)     })      setInterval(() => {         let temp = fs.createReadStream('sounds/musica 2.mp3')          temp.on('data', chunk => {             res.write(chunk)         })     }, 180*1000) })  server.listen(3005, async function () {     console.log('Server is running on port 3005...') });