package services;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import l2.gameserver.Announcements;
import l2.gameserver.model.pledge.Clan;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.tables.ClanTable;
public class topClanScript implements ScriptFile {
public topClanScript() {
}
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
public void clanTopStart(){
scheduler.scheduleAtFixedRate(() -> {
Clan[] clans = ClanTable.getInstance().getClans();
List<Clan> sortedClans = Arrays.stream(clans)
.sorted(Comparator.comparingInt(Clan::getCustomPoints).reversed())
.limit(5)
.collect(Collectors.toList());
Announcements.getInstance().announceToAll("Топ 5 клана сервера по версии Сервера: ");
Announcements.getInstance().announceToAll("Top 5 server clans according to Сервера: ");
for (int i = 0; i < sortedClans.size(); i++) {
Clan clan = sortedClans.get(i);
String clanName = clan.getName();
int customPoints = clan.getCustomPoints();
Announcements.getInstance().announceToAll("Место №" + (i + 1) + " - Клан - " + clanName + " (" + customPoints + " Клан очков)");
}
}, 1, 60, TimeUnit.MINUTES);
}
@Override
public void onLoad() {
clanTopStart();
}
@Override
public void onReload() {
}
@Override
public void onShutdown() {
scheduler.shutdown();
}
}
Ну я основу дал, кому нужно, допишут для себя. Думаю не проблема. у меня пвп сервер, по этому не имеет смысла лвл клана.В целом выглядит норм, мог сделать через кастом меседж для универсальности и выдергивать так же по clanRep и левелу клана
Держи, можете тебе понадобится - но я добавил уже в ClanCustomPointsStatisticВывод топ 5 по кастомным очкам. выдернул у себя из класса. может что то упустил. надо проверить. но вроде на месте все.
public void scheduleTopClanAnnouncement()
{
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
ClanTable clanTable = ClanTable.getInstance();
Runnable task = () -> {
Clan[] clans = clanTable.getClans();
List<Clan> topClans = Arrays.stream(clans)
.sorted(Comparator.comparingInt(Clan::getCustomPoints).reversed())
.limit(Config.SERVICES_TOP_CLANS_LIST_ANNOUNCE_AMOUNT)
.collect(Collectors.toList());
Announcements.getInstance().announceByCustomMessage("TopClanService.Announce", new String[] {String.valueOf(Config.SERVICES_TOP_CLANS_LIST_ANNOUNCE_AMOUNT)});
int i = 0;
for (Clan clan : topClans) {
String clanName = clan.getName();
int clanPoints = clan.getCustomPoints();
String[] messageParams = {String.valueOf(++i), clanName, String.valueOf(clanPoints)};
Announcements.getInstance().announceByCustomMessage("TopClanService.AnnounceClanList", messageParams);
}
};
executor.scheduleAtFixedRate(task, Config.SERVICES_TOP_CLANS_LIST_ANNOUNCE_DELAY, Config.SERVICES_TOP_CLANS_LIST_ANNOUNCE_DELAY, TimeUnit.MINUTES);
}
Спасибо!)Держи, можете тебе понадобится - но я добавил уже в ClanCustomPointsStatistic
Java:public void scheduleTopClanAnnouncement() { ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); ClanTable clanTable = ClanTable.getInstance(); Runnable task = () -> { Clan[] clans = clanTable.getClans(); List<Clan> topClans = Arrays.stream(clans) .sorted(Comparator.comparingInt(Clan::getCustomPoints).reversed()) .limit(Config.SERVICES_TOP_CLANS_LIST_ANNOUNCE_AMOUNT) .collect(Collectors.toList()); Announcements.getInstance().announceByCustomMessage("TopClanService.Announce", new String[] {String.valueOf(Config.SERVICES_TOP_CLANS_LIST_ANNOUNCE_AMOUNT)}); int i = 0; for (Clan clan : topClans) { String clanName = clan.getName(); int clanPoints = clan.getCustomPoints(); String[] messageParams = {String.valueOf(++i), clanName, String.valueOf(clanPoints)}; Announcements.getInstance().announceByCustomMessage("TopClanService.AnnounceClanList", messageParams); } }; executor.scheduleAtFixedRate(task, Config.SERVICES_TOP_CLANS_LIST_ANNOUNCE_DELAY, Config.SERVICES_TOP_CLANS_LIST_ANNOUNCE_DELAY, TimeUnit.MINUTES); }