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 ENDVOTE = "Голосование окончено.";
|
||||
String DRAW = "Ничья. Никто не уходит из игры.";
|
||||
String DRAW_GONE = "Ничья. Из игры уходит случайный игрок.";
|
||||
String GROUP_SET = "Чат выбран.";
|
||||
String INTERRUPT_GAME = "Игра остановлена.";
|
||||
String USER_VOTED = "%s проголосовал.";
|
||||
@ -81,4 +82,24 @@ public interface Constants {
|
||||
String RESURRECTION_CARD = "Воскресить игрока";
|
||||
|
||||
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.TelegramConfig;
|
||||
import com.alterdekim.javabot.bot.cards.*;
|
||||
import com.alterdekim.javabot.bot.conditions.*;
|
||||
import com.alterdekim.javabot.entities.*;
|
||||
import com.alterdekim.javabot.service.*;
|
||||
import com.alterdekim.javabot.util.*;
|
||||
@ -54,6 +55,7 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
private final DisasterService disasterService;
|
||||
private final SynergyService synergyService;
|
||||
private List<Class<? extends ActionCard>> actionCards;
|
||||
private List<ConditionCard> condCards;
|
||||
|
||||
public final RandomComponent random;
|
||||
|
||||
@ -63,6 +65,8 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
|
||||
public LiveFormula liveFormula;
|
||||
|
||||
private VotingType votingType;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public BunkerBot(TelegramConfig telegramConfig,
|
||||
BioService bioService,
|
||||
@ -95,7 +99,9 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
Sabotage.class,
|
||||
GodsWillCard.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.dayNightFields = new DayNightFields();
|
||||
this.linkedQueue = new ConcurrentLinkedQueue<>();
|
||||
@ -190,7 +196,7 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
private void startGame() {
|
||||
if( gameState != GameState.JOINING )
|
||||
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));
|
||||
return;
|
||||
}
|
||||
@ -202,7 +208,8 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
this.liveFormula.setSynergies(synergyService.getAllSynergies());
|
||||
Disaster d = (Disaster) BotUtils.getRandomFromList(disasterService.getAllDisasters(), random);
|
||||
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<Work> works = workService.getAllWorks();
|
||||
List<Luggage> luggs = luggageService.getAllLuggages();
|
||||
@ -369,6 +376,12 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
sendApi(new SendMessage(groupId, String.format(Constants.DAY_MESSAGE, 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()));
|
||||
dayNightFields.setDayMessage("");
|
||||
setAllNotAnswered();
|
||||
@ -442,6 +455,8 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
}
|
||||
|
||||
private void endVote() {
|
||||
switch (this.votingType) {
|
||||
case MaxTieNone -> {
|
||||
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);
|
||||
@ -451,6 +466,30 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
if( !checkEndGame() ) {
|
||||
doNight();
|
||||
return;
|
||||
@ -476,15 +515,17 @@ public class BunkerBot extends TelegramLongPollingBot {
|
||||
}
|
||||
|
||||
private void removeVotePlayers(Integer max) {
|
||||
dayNightFields.getPoll()
|
||||
var first = dayNightFields.getPoll()
|
||||
.entrySet()
|
||||
.stream()
|
||||
.filter(e -> e.getValue().equals(max))
|
||||
.forEach(i -> {
|
||||
.findFirst();
|
||||
if( first.isPresent() ) {
|
||||
var i = first.get();
|
||||
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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user