테스트

aion-server 4.8

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

import com.aionemu.gameserver.model.gameobjects.Summon;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.stats.calc.Stat2;
import com.aionemu.gameserver.model.summons.SummonMode;
import com.aionemu.gameserver.model.templates.stats.StatsTemplate;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SUMMON_UPDATE;
import com.aionemu.gameserver.skillengine.model.Effect;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.utils.stats.CalculationType;

/**
 * @author ATracer
 */
public class SummonGameStats extends CreatureGameStats<Summon> {

	public SummonGameStats(Summon owner) {
		super(owner);
	}

	@Override
	protected void onStatsChange(Effect effect) {
		updateStatsAndSpeedVisually();
	}

	public void updateStatsAndSpeedVisually() {
		updateStatsVisually();
		checkSpeedStats();
	}

	public void updateStatsVisually() {
		owner.getGameStats().updateStatInfo();
	}

	@Override
	public Stat2 getStat(StatEnum statEnum, float base, CalculationType... calculationTypes) {
		Stat2 stat = super.getStat(statEnum, base, calculationTypes);
		if (owner.getMaster() == null)
			return stat;
		switch (statEnum) {
			case MAXHP:
			case PHYSICAL_ATTACK:
			case MAGICAL_ATTACK:
			case EVASION:
			case PARRY:
			case PHYSICAL_DEFENSE:
			case MAGICAL_DEFEND:
			case MAGIC_SKILL_BOOST_RESIST:
			case MAGICAL_CRITICAL:
			case MAGICAL_RESIST:
				return getStatWithBonusRate(statEnum, stat, 0.5f);
			case PHYSICAL_CRITICAL:
				return getStatWithBonusRate(StatEnum.MAIN_HAND_CRITICAL, stat, 0.5f);
			case PHYSICAL_ACCURACY:
				return getStatWithBonusRate(StatEnum.MAIN_HAND_ACCURACY, stat, 0.5f);
			case BOOST_MAGICAL_SKILL:
			case MAGICAL_ACCURACY:
				return getStatWithBonusRate(statEnum, stat, 0.8f);
			case PARALYZE_RESISTANCE:
			case SLEEP_RESISTANCE:
			case POISON_RESISTANCE:
				if ("lava spirit".equals(owner.getObjectTemplate().getName()) || "tempest spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(100);
				}
				break;
			case EARTH_RESISTANCE:
				if ("lava spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(200);
				} else if ("wind spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(-200);
				}
				break;
			case FIRE_RESISTANCE:
				if ("lava spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(200);
				} else if ("water spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(-200);
				}
				break;
			case WIND_RESISTANCE:
				if ("tempest spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(200);
				} else if ("earth spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(-200);
				}
				break;
			case WATER_RESISTANCE:
				if ("tempest spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(200);
				} else if ("fire spirit".equals(owner.getObjectTemplate().getName())) {
					stat.addToBase(-200);
				}
				break;

		}
		return stat;
	}

	private Stat2 getStatWithBonusRate(StatEnum statEnum, Stat2 stat, float bonusRate) {
		Stat2 statToReturn = owner.getMaster().getGameStats().getItemStatBoost(statEnum, stat);
		statToReturn.setBonusRate(bonusRate);
		return statToReturn;
	}

	@Override
	public StatsTemplate getStatsTemplate() {
		return owner.getObjectTemplate().getStatsTemplate();
	}

	@Override
	public Stat2 getAttackSpeed() {
		return getStat(StatEnum.ATTACK_SPEED, owner.getObjectTemplate().getAttackSpeed());
	}

	@Override
	public Stat2 getMovementSpeed() {
		int bonusSpeed = 0;
		Player master = owner.getMaster();
		if (master != null && master.isFlying()) {
			bonusSpeed += 3000;
		}
		return getStat(StatEnum.SPEED, Math.round(getStatsTemplate().getRunSpeed() * 1000) + bonusSpeed);
	}

	@Override
	public Stat2 getAttackRange() {
		return getStat(StatEnum.ATTACK_RANGE, owner.getObjectTemplate().getAttackRange() * 1000);
	}

	@Override
	public Stat2 getHpRegenRate() {
		int base = (int) (owner.getLifeStats().getMaxHp() * (owner.getMode() == SummonMode.REST ? 0.05f : 0.025f));
		return getStat(StatEnum.REGEN_HP, base);
	}

	@Override
	public Stat2 getMpRegenRate() {
		throw new IllegalStateException("No mp regen for Summon");
	}

	@Override
	public void updateStatInfo() {
		Player master = owner.getMaster();
		if (master != null) {
			PacketSendUtility.sendPacket(master, new SM_SUMMON_UPDATE(owner));
		}
	}
}

📎 첨부파일

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