테스트

aion-server 4.8

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

import java.util.List;

import com.aionemu.gameserver.dataholders.DataManager;
import com.aionemu.gameserver.model.gameobjects.Persistable;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SKILL_REMOVE;
import com.aionemu.gameserver.skillengine.model.SkillLearnTemplate;
import com.aionemu.gameserver.skillengine.model.StigmaType;

/**
 * @author ATracer, Neon
 */
public class PlayerSkillEntry extends SkillEntry implements Persistable {

	private int skillType; // 0 normal skill , 1 stigma skill , 3 linked stigma skill
	private volatile int currentXp; // for crafting skills
	private PersistentState persistentState;

	public PlayerSkillEntry(Player player, int skillId, int skillLvl, PersistentState persistentState) {
		this(skillId, skillLvl, 0, persistentState);
		List<SkillLearnTemplate> learnTemplates = DataManager.SKILL_TREE_DATA.getTemplatesForSkill(skillId, player.getPlayerClass(), player.getRace());
		if (learnTemplates.size() == 0)
			skillType = DataManager.SKILL_DATA.getSkillTemplate(skillId).getStigmaType() == StigmaType.NONE ? 0 : 1; // no way to tell if linked stigma
		else {
			for (SkillLearnTemplate template : learnTemplates) {
				if (template.isStigma()) {
					skillType = template.isLinkedStigma() ? 3 : 1;
					break;
				}
			}
		}
	}

	public PlayerSkillEntry(int skillId, int skillLvl, int skillType, PersistentState persistentState) {
		super(skillId, skillLvl);
		this.skillType = skillType;
		this.persistentState = persistentState;
	}

	public boolean isStigmaSkill() {
		return skillType > 0;
	}

	public boolean isNormalStigmaSkill() {
		return isStigmaSkill() && !isLinkedStigmaSkill();
	}

	public boolean isLinkedStigmaSkill() {
		return skillType >= 3;
	}

	public boolean isNormalSkill() {
		return !isStigmaSkill() && skillId < 30000;
	}

	public boolean isNormalOrStigmaSkill() {
		return skillId < 30000;
	}

	public boolean isTappingSkill() {
		return skillId >= 30001 && skillId <= 30003;
	}

	public boolean isCraftingSkill() {
		return skillId >= 40001 && skillId <= 40010 && !isMorphSkill();
	}

	public boolean isMorphSkill() {
		return skillId == 40009;
	}

	public boolean isProfessionSkill() {
		return skillId >= 30000 && skillId < 50000; // 50000 or greater are actions etc.
	}

	/**
	 * Stupid NC shit: For profession skills, these values are also needed in {@link SM_SKILL_REMOVE} to be able to remove the skill from
	 * list.
	 * 
	 * @return The flag that the client wants for the skill.
	 */
	public int getProfessionFlag() {
		if (isTappingSkill() || isMorphSkill())
			return 1; // not sure for morph
		if (isCraftingSkill())
			return getCurrentXp(); // not implemented in DB
		return 0;
	}

	public int getFlag() {
		return isNormalSkill() ? getDateLearned() : 0;
	}

	public int getDateLearned() {
		return (int) (System.currentTimeMillis() / 1000); // not implemented in DB
	}

	public int getSkillType() {
		return skillType;
	}

	@Override
	public void setSkillLvl(int skillLevel) {
		super.setSkillLvl(skillLevel);
		if (getPersistentState() != PersistentState.NOACTION)
			setPersistentState(PersistentState.UPDATE_REQUIRED);
	}

	/**
	 * This number controls the max point number for the professions skill bar. Current values are:<br>
	 * Tapping: 0 = 99, 1 = 199, 2 = 299, 3 = 399, 4 = 499<br>
	 * Crafting: 0 = 99, 1 = 199, 2 = 299, 3 = 399, 4 = 449, 5 = 499, 6 = 549
	 */
	public int getProfessionSkillBarSize() {
		if (!isProfessionSkill())
			return 0;
		int size = skillLevel / 100;
		if (isCraftingSkill() && skillLevel >= 450)
			size += (skillLevel - 350) / 100; // above 400 points, the crafting max points increase by 50 instead of 100
		return isTappingSkill() ? Math.min(size, 4) : size; // limit tapping bar size to 4 (499) to prevent black bar above 500 points
	}

	public int getCurrentXp() {
		return currentXp;
	}

	public void setCurrentXp(int currentXp) {
		this.currentXp = currentXp;
	}

	@Override
	public PersistentState getPersistentState() {
		return persistentState;
	}

	@Override
	public void setPersistentState(PersistentState persistentState) {
		switch (persistentState) {
			case DELETED:
				if (this.persistentState == PersistentState.NEW)
					this.persistentState = PersistentState.NOACTION;
				else
					this.persistentState = PersistentState.DELETED;
				break;
			case UPDATE_REQUIRED:
				if (this.persistentState != PersistentState.NEW)
					this.persistentState = PersistentState.UPDATE_REQUIRED;
				break;
			case NOACTION:
				break;
			default:
				this.persistentState = persistentState;
		}
	}
}

📎 첨부파일

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