테스트

aion-server 4.8

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

import java.util.LinkedList;
import java.util.Objects;
import java.util.Queue;
import java.util.concurrent.Future;

import com.aionemu.gameserver.controllers.SiegeWeaponController;
import com.aionemu.gameserver.controllers.SummonController;
import com.aionemu.gameserver.controllers.attack.AggroList;
import com.aionemu.gameserver.controllers.attack.PlayerAggroList;
import com.aionemu.gameserver.controllers.movement.SiegeWeaponMoveController;
import com.aionemu.gameserver.controllers.movement.SummonMoveController;
import com.aionemu.gameserver.model.CreatureType;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.SkillElement;
import com.aionemu.gameserver.model.TribeClass;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.stats.container.SummonGameStats;
import com.aionemu.gameserver.model.stats.container.SummonLifeStats;
import com.aionemu.gameserver.model.summons.SkillOrder;
import com.aionemu.gameserver.model.summons.SummonMode;
import com.aionemu.gameserver.model.templates.npc.NpcTemplate;
import com.aionemu.gameserver.model.templates.npc.NpcTemplateType;
import com.aionemu.gameserver.model.templates.spawns.SpawnTemplate;
import com.aionemu.gameserver.world.WorldPosition;

/**
 * @author ATracer
 */
public class Summon extends Creature {

	private final Player master;
	private SummonMode mode = SummonMode.GUARD;
	private Queue<SkillOrder> skillOrders = new LinkedList<>();
	private Future<?> releaseTask;
	private SkillElement alwaysResistElement = SkillElement.NONE;
	private int summonedBySkillId, liveTime;

	public Summon(int objId, SummonController controller, SpawnTemplate spawnTemplate, NpcTemplate objectTemplate, Player master, int time, boolean autoReleaseObjectId) {
		super(objId, controller, spawnTemplate, objectTemplate, new WorldPosition(spawnTemplate.getWorldId()), autoReleaseObjectId);
		controller.setOwner(this);
		moveController = controller instanceof SiegeWeaponController ? new SiegeWeaponMoveController(this) : new SummonMoveController(this);
		this.liveTime = time;
		this.master = master;
		setGameStats(new SummonGameStats(this));
		setLifeStats(new SummonLifeStats(this));
		setAlwaysResistElement(objectTemplate);
	}

	private void setAlwaysResistElement(NpcTemplate template) {
		if (template != null) {
			switch (template.getName()) {
				case "earth spirit":
					this.alwaysResistElement = SkillElement.EARTH;
					break;
				case "fire spirit":
					this.alwaysResistElement = SkillElement.FIRE;
					break;
				case "water spirit":
					this.alwaysResistElement = SkillElement.WATER;
					break;
				case "wind spirit":
					this.alwaysResistElement = SkillElement.WIND;
					break;
			}
		}
	}

	@Override
	protected AggroList createAggroList() {
		return new PlayerAggroList(this);
	}

	@Override
	public SummonGameStats getGameStats() {
		return (SummonGameStats) super.getGameStats();
	}

	@Override
	public Player getMaster() {
		return master;
	}

	/**
	 * @return the level
	 */
	@Override
	public byte getLevel() {
		return getObjectTemplate().getLevel();
	}

	@Override
	public NpcTemplate getObjectTemplate() {
		return (NpcTemplate) super.getObjectTemplate();
	}

	public int getNpcId() {
		return getObjectTemplate().getTemplateId();
	}

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

	/**
	 * @return NpcObjectType.SUMMON
	 */
	@Override
	public NpcObjectType getNpcObjectType() {
		return NpcObjectType.SUMMON;
	}

	@Override
	public SummonController getController() {
		return (SummonController) super.getController();
	}

	/**
	 * @return the mode
	 */
	public SummonMode getMode() {
		return mode;
	}

	/**
	 * @param mode
	 *          the mode to set
	 */
	public void setMode(SummonMode mode) {
		if (mode != SummonMode.ATTACK)
			skillOrders.clear();
		this.mode = mode;
	}

	@Override
	public boolean isEnemy(Creature creature) {
		return master.isEnemy(creature);
	}

	@Override
	public boolean isEnemyFrom(Npc npc) {
		return master.isEnemyFrom(npc);
	}

	@Override
	public boolean isEnemyFrom(Player player) {
		return master.isEnemyFrom(player);
	}

	@Override
	public boolean isPvpTarget(Creature creature) {
		return creature.getActingCreature() instanceof Player;
	}

	@Override
	public TribeClass getTribe() {
		return master.getTribe();
	}

	public CreatureType getType(Creature creature) {
		boolean friend = master.getRace() == creature.getRace() && !creature.isEnemy(master);
		return friend ? CreatureType.SUPPORT : CreatureType.ATTACKABLE;
	}

	@Override
	public SummonMoveController getMoveController() {
		return (SummonMoveController) super.getMoveController();
	}

	@Override
	public Player getActingCreature() {
		return getMaster();
	}

	@Override
	public Race getRace() {
		return getMaster().getRace();
	}

	public boolean isPet() {
		return getObjectTemplate().getNpcTemplateType() == NpcTemplateType.SUMMON_PET;
	}

	/**
	 * @return liveTime in sec.
	 */
	public int getLiveTime() {
		return liveTime;
	}

	/**
	 * @param liveTime
	 *          in sec.
	 */
	public void setLiveTime(int liveTime) {
		this.liveTime = liveTime;
	}

	/**
	 * @return the summonedBySkillId
	 */
	public int getSummonedBySkillId() {
		return summonedBySkillId;
	}

	/**
	 * @param summonedBySkillId
	 *          the summonedBySkillId to set
	 */
	public void setSummonedBySkillId(int summonedBySkillId) {
		this.summonedBySkillId = summonedBySkillId;
	}

	public void setReleaseTask(Future<?> task) {
		releaseTask = task;
	}

	public void cancelReleaseTask() {
		if (releaseTask != null && !releaseTask.isDone()) {
			releaseTask.cancel(true);
		}
	}

	@Override
	public void setTarget(VisibleObject target) {
		SkillOrder order = skillOrders.peek();
		if (order != null && !Objects.equals(target, order.getTarget())) {
			skillOrders.clear();
		}
		super.setTarget(target);
	}

	public void addSkillOrder(int skillId, int skillLvl, Creature target, int hate, boolean release) {
		skillOrders.add(new SkillOrder(skillId, skillLvl, target, hate, release));
	}

	public SkillOrder retrieveNextSkillOrder() {
		return skillOrders.poll();
	}

	public SkillOrder getNextSkillOrder() {
		return skillOrders.peek();
	}

	public SkillElement getAlwaysResistElement() {
		return alwaysResistElement;
	}
}

📎 첨부파일

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