테스트

aion-server 4.8

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

import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import com.aionemu.gameserver.configs.main.HousingConfig;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.house.House;
import com.aionemu.gameserver.model.house.HouseBids;
import com.aionemu.gameserver.model.templates.housing.HouseType;
import com.aionemu.gameserver.services.HousingBidService;
import com.aionemu.gameserver.services.HousingService;
import com.aionemu.gameserver.taskmanager.AbstractCronTask;

/**
 * Handles registering unoccupied houses automatically for auction.
 * 
 * @author Neon
 */
public class AuctionAutoFillTask extends AbstractCronTask {

	private static final AuctionAutoFillTask instance = new AuctionAutoFillTask();

	public static AuctionAutoFillTask getInstance() {
		return instance;
	}

	private AuctionAutoFillTask() {
		super(HousingConfig.AUCTION_AUTO_FILL_TIME);
	}

	@Override
	protected void executeTask() {
		if (HousingConfig.ENABLE_HOUSE_AUCTIONS) {
			autoFillAuction(Race.ELYOS);
			autoFillAuction(Race.ASMODIANS);
		}
	}

	private void autoFillAuction(Race race) {
		Set<House> auctionedHouses = findAuctionedHouses(race);
		List<House> auctionableHouses = findAuctionableHouses(race, auctionedHouses);
		Collections.shuffle(auctionableHouses);
		Map<HouseType, Long> auctionedHouseCounts = auctionedHouses.stream().collect(Collectors.groupingBy(House::getHouseType, Collectors.counting()));
		int[] added = { 0 };
		HousingConfig.AUCTION_AUTO_FILL_LIMITS.forEach((houseType, limit) -> {
			for (long auctioned = auctionedHouseCounts.getOrDefault(houseType, 0L); auctioned < limit; auctioned++) {
				House house = findAndRemoveHouse(auctionableHouses, houseType);
				if (house == null || !HousingBidService.getInstance().auction(house, house.getDefaultAuctionPrice()))
					break;
				added[0]++;
			}
		});
		log.info("[" + race + "] Added " + added[0] + " new houses automatically to auction.");
	}

	private Set<House> findAuctionedHouses(Race race) {
		return HousingBidService.getInstance().getBidInfo(race).stream().map(this::toHouse).collect(Collectors.toSet());
	}

	private House toHouse(HouseBids houseBids) {
		return HousingService.getInstance().findHouse(houseBids.getHouseObjectId());
	}

	private List<House> findAuctionableHouses(Race race, Set<House> auctionedHouses) {
		List<House> houses = HousingService.getInstance().getCustomHouses();
		houses.removeIf(house -> house.getOwnerId() != 0 || auctionedHouses.contains(house) || !house.matchesLandRace(race));
		return houses;
	}

	private House findAndRemoveHouse(List<House> houses, HouseType houseType) {
		for (Iterator<House> iterator = houses.iterator(); iterator.hasNext();) {
			House house = iterator.next();
			if (house.getHouseType() == houseType) {
				iterator.remove();
				return house;
			}
		}
		return null;
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 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