테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
game-server/src/com/aionemu/gameserver/model/legionDominion/LegionDominionLocation.java
package com.aionemu.gameserver.model.legionDominion;

import java.sql.Timestamp;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.aionemu.gameserver.configs.main.LegionConfig;
import com.aionemu.gameserver.dao.LegionDominionDAO;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.team.legion.Legion;
import com.aionemu.gameserver.model.templates.LegionDominionInvasionRift;
import com.aionemu.gameserver.model.templates.LegionDominionLocationTemplate;
import com.aionemu.gameserver.model.templates.LegionDominionReward;
import com.aionemu.gameserver.network.aion.serverpackets.SM_LEGION_DOMINION_RANK;
import com.aionemu.gameserver.services.LegionService;
import com.aionemu.gameserver.utils.PacketSendUtility;

/**
 * @author Yeats, Sykra
 */
public class LegionDominionLocation {

	private final LegionDominionLocationTemplate template;
	private final String zoneName;
	private int legionId;
	private Timestamp occupiedDate;
	private Map<Integer, LegionDominionParticipantInfo> participantInfo = new TreeMap<>();

	public LegionDominionLocation(LegionDominionLocationTemplate template) {
		this.template = template;
		this.zoneName = template.getZone() + "_" + template.getWorldId();
	}

	public int getLocationId() {
		return template.getId();
	}

	public int getWorldId() {
		return template.getWorldId();
	}

	public Race getRace() {
		return template.getRace();
	}

	public String getL10n() {
		return template.getL10n();
	}

	public String getZoneNameAsString() {
		return zoneName;
	}

	public int getLegionId() {
		return legionId;
	}

	public LegionDominionInvasionRift getInvasionRift() {
		return template.getInvasionRift();
	}

	public void setLegionId(int legionId) {
		this.legionId = legionId;
	}

	public Timestamp getOccupiedDate() {
		return occupiedDate;
	}

	public void setOccupiedDate(Timestamp timestamp) {
		occupiedDate = timestamp;
	}

	public Map<Integer, LegionDominionParticipantInfo> getParticipantInfo() {
		return participantInfo;
	}

	public void setParticipantInfo(Map<Integer, LegionDominionParticipantInfo> info) {
		participantInfo = info;
	}

	public List<LegionDominionParticipantInfo> getLegionRanking(boolean removeNonEligibleLegions) {
		if (participantInfo.isEmpty())
			return Collections.emptyList();
		Stream<LegionDominionParticipantInfo> participantStream = participantInfo.values().stream();
		if (removeNonEligibleLegions)
			participantStream = participantStream.filter(info -> info.getPoints() > LegionConfig.STONESPEAR_REACH_MIN_POINTS_FOR_TERRITORY);
		return participantStream
			.sorted(Comparator.comparingInt(LegionDominionParticipantInfo::getPoints).reversed().thenComparingLong(LegionDominionParticipantInfo::getDate))
			.collect(Collectors.toList());
	}

	public Map<Integer, List<LegionDominionReward>> getRewards() {
		return template.getRewards().stream().collect(Collectors.groupingBy(LegionDominionReward::getRank));
	}

	public boolean join(int legionId) {
		if (participantInfo.containsKey(legionId)) {
			return false;
		}
		LegionDominionParticipantInfo info = new LegionDominionParticipantInfo();
		info.setLegionId(legionId);
		participantInfo.put(legionId, info);
		store(info, true);
		return true;
	}

	private void store(LegionDominionParticipantInfo info, boolean isNew) {
		if (isNew) {
			LegionDominionDAO.storeNewInfo(getLocationId(), info);
		} else {
			LegionDominionDAO.updateInfo(info);
		}
	}

	public List<LegionDominionParticipantInfo> getSortedTop25Participants(LegionDominionParticipantInfo curLegion) {
		List<LegionDominionParticipantInfo> info = getLegionRanking(false);
		if (info.isEmpty())
			return Collections.emptyList();
		info = info.subList(0,  Math.min(25, info.size()));
		if (!info.contains(curLegion)) {
			info.remove(info.size() -1);
			info.add(info.size() , curLegion);
		}
		return info;
	}

	public LegionDominionParticipantInfo getParticipantInfo(int legionId) {
		return participantInfo.get(legionId);
	}

	public void updateRanking() {
		for (LegionDominionParticipantInfo info : participantInfo.values()) {
			Legion legion = LegionService.getInstance().getLegion(info.getLegionId());
			if (legion != null)
				PacketSendUtility.broadcastToLegion(legion, new SM_LEGION_DOMINION_RANK(getLocationId()));
		}
	}

	public synchronized void reset() {
		participantInfo = new TreeMap<>();
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0