Changed action cards logic. x14
All checks were successful
gitea/JBunker/pipeline/head This commit looks good
All checks were successful
gitea/JBunker/pipeline/head This commit looks good
This commit is contained in:
parent
d8e47ee70b
commit
8c14b04ee4
@ -5,6 +5,7 @@ public interface Constants {
|
|||||||
String REMOVE_PLAYER = "Игрок %s покидает бункер.";
|
String REMOVE_PLAYER = "Игрок %s покидает бункер.";
|
||||||
String ENDVOTE = "Голосование окончено.";
|
String ENDVOTE = "Голосование окончено.";
|
||||||
String DRAW = "Ничья. Никто не уходит из игры.";
|
String DRAW = "Ничья. Никто не уходит из игры.";
|
||||||
|
String DRAW_GONE = "Ничья. Из игры уходит случайный игрок.";
|
||||||
String GROUP_SET = "Чат выбран.";
|
String GROUP_SET = "Чат выбран.";
|
||||||
String INTERRUPT_GAME = "Игра остановлена.";
|
String INTERRUPT_GAME = "Игра остановлена.";
|
||||||
String USER_VOTED = "%s проголосовал.";
|
String USER_VOTED = "%s проголосовал.";
|
||||||
@ -81,4 +82,24 @@ public interface Constants {
|
|||||||
String RESURRECTION_CARD = "Воскресить игрока";
|
String RESURRECTION_CARD = "Воскресить игрока";
|
||||||
|
|
||||||
String RESURRECTION_CARD_TRIGGERED = "Вы воскресили игрока %s";
|
String RESURRECTION_CARD_TRIGGERED = "Вы воскресили игрока %s";
|
||||||
|
|
||||||
|
String FOOD_SUPPLY_COND = "В бункере есть запас еды на месяц.";
|
||||||
|
|
||||||
|
String POWER_MALFUNCTION = "Генератор проработает от силы 10 дней, а потом сломается";
|
||||||
|
|
||||||
|
String STRUCTURAL_ISSUES = "В стенах бункера есть трещины, землятресение он не переживет.";
|
||||||
|
|
||||||
|
String MEDS_SUPPLY_COND = "В бункере есть запас лекарств";
|
||||||
|
|
||||||
|
String AI_STUFF_COND = "В бункере есть панель управления с ИИ. Главное чтобы не выключился свет.";
|
||||||
|
|
||||||
|
String WHISPERS_COND = "В этом месте есть что-то странное, обитатели иногда говорят, что слышат чужие разговоры за стенами, хотя там никого нет.";
|
||||||
|
|
||||||
|
String AIR_COND = "В бункере что-то источает отвратительный аромат. Здесь даже Шура Стоун не поможет.";
|
||||||
|
|
||||||
|
String MAX_TIE_NONE = "В этом раунде выбывает тот, за кого проголосовало большинство. При ничье никто не выбывает";
|
||||||
|
|
||||||
|
String MAX_TIE_RANDOM = "В этом раунде выбывает тот, за кого проголосовало большинство. При ничье выбывает случайный игрок.";
|
||||||
|
|
||||||
|
String LEAST_VOTES_OUT = "В этом раунде выбывает тот, за кого меньше всего голосов отдали.";
|
||||||
}
|
}
|
7
src/main/java/com/alterdekim/javabot/bot/VotingType.java
Normal file
7
src/main/java/com/alterdekim/javabot/bot/VotingType.java
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package com.alterdekim.javabot.bot;
|
||||||
|
|
||||||
|
public enum VotingType {
|
||||||
|
MaxTieNone,
|
||||||
|
MaxTieRandom,
|
||||||
|
LeastVotesOut
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.alterdekim.javabot.bot.conditions;
|
||||||
|
|
||||||
|
import com.alterdekim.javabot.Constants;
|
||||||
|
import com.alterdekim.javabot.components.BunkerBot;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
|
||||||
|
public class AIStuff implements ConditionCard {
|
||||||
|
@Override
|
||||||
|
public void executeCard(BunkerBot bot, String chatId) {
|
||||||
|
bot.sendApi(new SendMessage(chatId, Constants.AI_STUFF_COND));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.alterdekim.javabot.bot.conditions;
|
||||||
|
|
||||||
|
import com.alterdekim.javabot.Constants;
|
||||||
|
import com.alterdekim.javabot.components.BunkerBot;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
|
||||||
|
public class AirStuff implements ConditionCard {
|
||||||
|
@Override
|
||||||
|
public void executeCard(BunkerBot bot, String chatId) {
|
||||||
|
bot.sendApi(new SendMessage(chatId, Constants.AIR_COND));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.alterdekim.javabot.bot.conditions;
|
||||||
|
|
||||||
|
|
||||||
|
import com.alterdekim.javabot.components.BunkerBot;
|
||||||
|
|
||||||
|
public interface ConditionCard {
|
||||||
|
void executeCard(BunkerBot bot, String chatId);
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.alterdekim.javabot.bot.conditions;
|
||||||
|
|
||||||
|
import com.alterdekim.javabot.Constants;
|
||||||
|
import com.alterdekim.javabot.components.BunkerBot;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
|
||||||
|
public class FoodSupply implements ConditionCard {
|
||||||
|
@Override
|
||||||
|
public void executeCard(BunkerBot bot, String chatId) {
|
||||||
|
bot.liveFormula.add(5.0d / 100.0d);
|
||||||
|
bot.sendApi(new SendMessage(chatId, Constants.FOOD_SUPPLY_COND));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.alterdekim.javabot.bot.conditions;
|
||||||
|
|
||||||
|
import com.alterdekim.javabot.Constants;
|
||||||
|
import com.alterdekim.javabot.components.BunkerBot;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
|
||||||
|
public class MedicalSupply implements ConditionCard {
|
||||||
|
@Override
|
||||||
|
public void executeCard(BunkerBot bot, String chatId) {
|
||||||
|
bot.liveFormula.add(5.0d / 100.0d);
|
||||||
|
bot.sendApi(new SendMessage(chatId, Constants.MEDS_SUPPLY_COND));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.alterdekim.javabot.bot.conditions;
|
||||||
|
|
||||||
|
import com.alterdekim.javabot.Constants;
|
||||||
|
import com.alterdekim.javabot.components.BunkerBot;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
|
||||||
|
public class PowerMalfunction implements ConditionCard {
|
||||||
|
@Override
|
||||||
|
public void executeCard(BunkerBot bot, String chatId) {
|
||||||
|
bot.liveFormula.sub(5.0d / 100.0d);
|
||||||
|
bot.sendApi(new SendMessage(chatId, Constants.POWER_MALFUNCTION));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.alterdekim.javabot.bot.conditions;
|
||||||
|
|
||||||
|
import com.alterdekim.javabot.Constants;
|
||||||
|
import com.alterdekim.javabot.components.BunkerBot;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
|
||||||
|
public class StructuralIssues implements ConditionCard {
|
||||||
|
@Override
|
||||||
|
public void executeCard(BunkerBot bot, String chatId) {
|
||||||
|
bot.liveFormula.sub(5.0d / 100.0d);
|
||||||
|
bot.sendApi(new SendMessage(chatId, Constants.STRUCTURAL_ISSUES));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.alterdekim.javabot.bot.conditions;
|
||||||
|
|
||||||
|
import com.alterdekim.javabot.Constants;
|
||||||
|
import com.alterdekim.javabot.components.BunkerBot;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
|
|
||||||
|
public class Whispers implements ConditionCard {
|
||||||
|
@Override
|
||||||
|
public void executeCard(BunkerBot bot, String chatId) {
|
||||||
|
bot.sendApi(new SendMessage(chatId, Constants.WHISPERS_COND));
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ import com.alterdekim.javabot.Commands;
|
|||||||
import com.alterdekim.javabot.Constants;
|
import com.alterdekim.javabot.Constants;
|
||||||
import com.alterdekim.javabot.TelegramConfig;
|
import com.alterdekim.javabot.TelegramConfig;
|
||||||
import com.alterdekim.javabot.bot.cards.*;
|
import com.alterdekim.javabot.bot.cards.*;
|
||||||
|
import com.alterdekim.javabot.bot.conditions.*;
|
||||||
import com.alterdekim.javabot.entities.*;
|
import com.alterdekim.javabot.entities.*;
|
||||||
import com.alterdekim.javabot.service.*;
|
import com.alterdekim.javabot.service.*;
|
||||||
import com.alterdekim.javabot.util.*;
|
import com.alterdekim.javabot.util.*;
|
||||||
@ -54,6 +55,7 @@ public class BunkerBot extends TelegramLongPollingBot {
|
|||||||
private final DisasterService disasterService;
|
private final DisasterService disasterService;
|
||||||
private final SynergyService synergyService;
|
private final SynergyService synergyService;
|
||||||
private List<Class<? extends ActionCard>> actionCards;
|
private List<Class<? extends ActionCard>> actionCards;
|
||||||
|
private List<ConditionCard> condCards;
|
||||||
|
|
||||||
public final RandomComponent random;
|
public final RandomComponent random;
|
||||||
|
|
||||||
@ -63,6 +65,8 @@ public class BunkerBot extends TelegramLongPollingBot {
|
|||||||
|
|
||||||
public LiveFormula liveFormula;
|
public LiveFormula liveFormula;
|
||||||
|
|
||||||
|
private VotingType votingType;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public BunkerBot(TelegramConfig telegramConfig,
|
public BunkerBot(TelegramConfig telegramConfig,
|
||||||
BioService bioService,
|
BioService bioService,
|
||||||
@ -95,7 +99,9 @@ public class BunkerBot extends TelegramLongPollingBot {
|
|||||||
Sabotage.class,
|
Sabotage.class,
|
||||||
GodsWillCard.class,
|
GodsWillCard.class,
|
||||||
StealActionCard.class,
|
StealActionCard.class,
|
||||||
ResurrectionCard.class));
|
ResurrectionCard.class
|
||||||
|
));
|
||||||
|
this.condCards = List.of(new AirStuff(), new AIStuff(), new FoodSupply(), new MedicalSupply(), new PowerMalfunction(), new StructuralIssues(), new Whispers());
|
||||||
this.random = randomComponent;
|
this.random = randomComponent;
|
||||||
this.dayNightFields = new DayNightFields();
|
this.dayNightFields = new DayNightFields();
|
||||||
this.linkedQueue = new ConcurrentLinkedQueue<>();
|
this.linkedQueue = new ConcurrentLinkedQueue<>();
|
||||||
@ -190,7 +196,7 @@ public class BunkerBot extends TelegramLongPollingBot {
|
|||||||
private void startGame() {
|
private void startGame() {
|
||||||
if( gameState != GameState.JOINING )
|
if( gameState != GameState.JOINING )
|
||||||
return;
|
return;
|
||||||
if(players.size() < 1) { // TODO: change to 2
|
if(players.size() < 2) { // TODO: change to 2
|
||||||
sendApi(new SendMessage(groupId, Constants.PLAYERS_LESS_THAN_ZERO));
|
sendApi(new SendMessage(groupId, Constants.PLAYERS_LESS_THAN_ZERO));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -202,7 +208,8 @@ public class BunkerBot extends TelegramLongPollingBot {
|
|||||||
this.liveFormula.setSynergies(synergyService.getAllSynergies());
|
this.liveFormula.setSynergies(synergyService.getAllSynergies());
|
||||||
Disaster d = (Disaster) BotUtils.getRandomFromList(disasterService.getAllDisasters(), random);
|
Disaster d = (Disaster) BotUtils.getRandomFromList(disasterService.getAllDisasters(), random);
|
||||||
sendApi(new SendMessage(groupId, getStringById(d.getDescTextId())));
|
sendApi(new SendMessage(groupId, getStringById(d.getDescTextId())));
|
||||||
//sendApi(new SendMessage(groupId, String.format(Constants.BUNKER_STATS, )));
|
ConditionCard conditionCard = (ConditionCard) BotUtils.getRandomFromList(this.condCards, this.random);
|
||||||
|
conditionCard.executeCard(this, groupId);
|
||||||
List<Bio> bios = bioService.getAllBios();
|
List<Bio> bios = bioService.getAllBios();
|
||||||
List<Work> works = workService.getAllWorks();
|
List<Work> works = workService.getAllWorks();
|
||||||
List<Luggage> luggs = luggageService.getAllLuggages();
|
List<Luggage> luggs = luggageService.getAllLuggages();
|
||||||
@ -369,6 +376,12 @@ public class BunkerBot extends TelegramLongPollingBot {
|
|||||||
sendApi(new SendMessage(groupId, String.format(Constants.DAY_MESSAGE, p)));
|
sendApi(new SendMessage(groupId, String.format(Constants.DAY_MESSAGE, p)));
|
||||||
}
|
}
|
||||||
this.last_p = p;
|
this.last_p = p;
|
||||||
|
this.votingType = (VotingType) BotUtils.getRandomFromList(new ArrayList<>(List.of(VotingType.MaxTieRandom, VotingType.MaxTieNone, VotingType.LeastVotesOut)), this.random);
|
||||||
|
sendApi(new SendMessage(groupId, switch (this.votingType) {
|
||||||
|
case MaxTieNone -> Constants.MAX_TIE_NONE;
|
||||||
|
case MaxTieRandom -> Constants.MAX_TIE_RANDOM;
|
||||||
|
case LeastVotesOut -> Constants.LEAST_VOTES_OUT;
|
||||||
|
}));
|
||||||
sendApi(new SendMessage(groupId, dayNightFields.getDayMessage()));
|
sendApi(new SendMessage(groupId, dayNightFields.getDayMessage()));
|
||||||
dayNightFields.setDayMessage("");
|
dayNightFields.setDayMessage("");
|
||||||
setAllNotAnswered();
|
setAllNotAnswered();
|
||||||
@ -442,15 +455,41 @@ public class BunkerBot extends TelegramLongPollingBot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void endVote() {
|
private void endVote() {
|
||||||
Integer max = dayNightFields.getPoll().values().stream().max(Integer::compareTo).orElse(0);
|
switch (this.votingType) {
|
||||||
long count = dayNightFields.getPoll().values().stream().filter(p -> p.equals(max)).count();
|
case MaxTieNone -> {
|
||||||
SendMessage sendMessage = new SendMessage(groupId, Constants.ENDVOTE);
|
Integer max = dayNightFields.getPoll().values().stream().max(Integer::compareTo).orElse(0);
|
||||||
if( count > 1 ) {
|
long count = dayNightFields.getPoll().values().stream().filter(p -> p.equals(max)).count();
|
||||||
sendMessage = new SendMessage(groupId, Constants.DRAW);
|
SendMessage sendMessage = new SendMessage(groupId, Constants.ENDVOTE);
|
||||||
} else {
|
if( count > 1 ) {
|
||||||
removeVotePlayers(max);
|
sendMessage = new SendMessage(groupId, Constants.DRAW);
|
||||||
|
} else {
|
||||||
|
removeVotePlayers(max);
|
||||||
|
}
|
||||||
|
sendApi(sendMessage);
|
||||||
|
}
|
||||||
|
case MaxTieRandom -> {
|
||||||
|
Integer max = dayNightFields.getPoll().values().stream().max(Integer::compareTo).orElse(0);
|
||||||
|
long count = dayNightFields.getPoll().values().stream().filter(p -> p.equals(max)).count();
|
||||||
|
SendMessage sendMessage = new SendMessage(groupId, Constants.ENDVOTE);
|
||||||
|
if( count > 1 ) {
|
||||||
|
int p_index = this.random.nextInt(this.players.size());
|
||||||
|
sendMessage = new SendMessage(groupId, Constants.DRAW_GONE);
|
||||||
|
sendApi(new SendMessage(groupId, String.format(Constants.REMOVE_PLAYER, players.get(p_index).getFirstName())));
|
||||||
|
dead_players.add(players.get(p_index));
|
||||||
|
players.remove(p_index);
|
||||||
|
} else {
|
||||||
|
removeVotePlayers(max);
|
||||||
|
}
|
||||||
|
sendApi(sendMessage);
|
||||||
|
}
|
||||||
|
case LeastVotesOut -> {
|
||||||
|
Integer min = dayNightFields.getPoll().values().stream().min(Integer::compareTo).orElse(0);
|
||||||
|
SendMessage sendMessage = new SendMessage(groupId, Constants.ENDVOTE);
|
||||||
|
removeVotePlayers(min);
|
||||||
|
sendApi(sendMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sendApi(sendMessage);
|
|
||||||
if( !checkEndGame() ) {
|
if( !checkEndGame() ) {
|
||||||
doNight();
|
doNight();
|
||||||
return;
|
return;
|
||||||
@ -476,15 +515,17 @@ public class BunkerBot extends TelegramLongPollingBot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void removeVotePlayers(Integer max) {
|
private void removeVotePlayers(Integer max) {
|
||||||
dayNightFields.getPoll()
|
var first = dayNightFields.getPoll()
|
||||||
.entrySet()
|
.entrySet()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(e -> e.getValue().equals(max))
|
.filter(e -> e.getValue().equals(max))
|
||||||
.forEach(i -> {
|
.findFirst();
|
||||||
sendApi(new SendMessage(groupId, String.format(Constants.REMOVE_PLAYER, players.get(i.getKey()).getFirstName())));
|
if( first.isPresent() ) {
|
||||||
dead_players.add(players.get(i.getKey().intValue()));
|
var i = first.get();
|
||||||
players.remove(i.getKey().intValue());
|
sendApi(new SendMessage(groupId, String.format(Constants.REMOVE_PLAYER, players.get(i.getKey()).getFirstName())));
|
||||||
});
|
dead_players.add(players.get(i.getKey().intValue()));
|
||||||
|
players.remove(i.getKey().intValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void interruptGame() {
|
private void interruptGame() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user