테스트

aion-server 4.8

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

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import com.aionemu.commons.utils.Rnd;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.gameobjects.player.Player;

/**
 * @author MrPoke
 */
@XmlRootElement(name = "drop_group")
@XmlAccessorType(XmlAccessType.FIELD)
public class DropGroup {

	@XmlElement(name = "drop")
	private List<Drop> drops;
	@XmlAttribute(name = "race")
	private Race race = Race.PC_ALL;
	@XmlAttribute(name = "name")
	private String name;
	@XmlAttribute(name = "level_based_chance_reduction")
	private boolean useLevelBasedChanceReduction;
	@XmlAttribute(name = "max_items")
	private int maxItems = 1;

	public List<Drop> getDrop() {
		return drops;
	}

	public Race getRace() {
		return race;
	}

	public int getMaxItems() {
		return maxItems;
	}

	public String getName() {
		return name;
	}

	public boolean isUseLevelBasedChanceReduction() {
		return useLevelBasedChanceReduction;
	}

	public int tryAddDropItems(Set<DropItem> result, int index, DropModifiers dropModifiers, Collection<Player> groupMembers) {
		Set<Drop> remainingDrops = new HashSet<>(drops);
		for (int i = 0; i < maxItems && !remainingDrops.isEmpty(); i++) {
			float chance = Rnd.chance();
			float nearestChanceDiff = Float.MAX_VALUE;
			List<Drop> nearestDropsOfSameChance = new ArrayList<>();
			for (Drop drop : remainingDrops) {
				float finalChance = dropModifiers.calculateDropChance(drop.getChance(), isUseLevelBasedChanceReduction());
				if (chance < finalChance) {
					float chanceDiff = finalChance - chance;
					if (nearestDropsOfSameChance.isEmpty() || chanceDiff <= nearestChanceDiff) {
						if (chanceDiff < nearestChanceDiff) {
							nearestDropsOfSameChance.clear();
							nearestChanceDiff = chanceDiff;
						}
						nearestDropsOfSameChance.add(drop);
					}
				}
			}
			Drop drop = Rnd.get(nearestDropsOfSameChance);
			if (drop != null) {
				index = addDropItem(index, result, drop, groupMembers);
				remainingDrops.remove(drop);
			}
		}
		return index;
	}

	private int addDropItem(int index, Set<DropItem> result, Drop drop, Collection<Player> groupMembers) {
		if (drop.isEachMember() && groupMembers != null && !groupMembers.isEmpty()) {
			for (Player player : groupMembers) {
				DropItem dropitem = new DropItem(drop);
				dropitem.calculateCount();
				dropitem.setIndex(index++);
				dropitem.setPlayerObjId(player.getObjectId());
				dropitem.setWinningPlayer(player);
				dropitem.isDistributeItem(true);
				result.add(dropitem);
			}
		} else {
			DropItem dropitem = new DropItem(drop);
			dropitem.calculateCount();
			dropitem.setIndex(index++);
			result.add(dropitem);
		}
		return index;
	}
}

📎 첨부파일

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