테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
game-server/data/handlers/admincommands/UseSkill.java
package admincommands;

import org.apache.commons.lang3.math.NumberUtils;

import com.aionemu.gameserver.dataholders.DataManager;
import com.aionemu.gameserver.model.gameobjects.Creature;
import com.aionemu.gameserver.model.gameobjects.VisibleObject;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.skillengine.SkillEngine;
import com.aionemu.gameserver.skillengine.model.Skill;
import com.aionemu.gameserver.skillengine.model.SkillTemplate;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.utils.chathandlers.AdminCommand;

/**
 * @author Source, kecimis, Estrayl, Neon
 */
public class UseSkill extends AdminCommand {

	public UseSkill() {
		super("useskill", "Use (or let a target use) any skill, even those not in skill list.");

		// @formatter:off
		setSyntaxInfo(
			"<id> [lvl] [f] - Uses the skill with the specified skill level on your target (f = force use).",
			"<me|self|target> <id> [lvl] [f] - Let's your target use the skill on you, itself or its target (f = force use)."
		);
		// @formatter:on
	}

	@Override
	protected void execute(Player admin, String... params) {
		if (params.length == 0) {
			sendInfo(admin);
			return;
		}

		try {
			String targetMode = params[0].toLowerCase();
			int i = 0;
			switch (targetMode) {
				case "me":
				case "self":
				case "target":
					i++;
					break;
				default:
					targetMode = null;
			}
			SkillTemplate template = DataManager.SKILL_DATA.getSkillTemplate(Integer.parseInt(params[i++]));
			if (template != null) {
				int skillLevel = params.length > i && NumberUtils.isNumber(params[i]) ? Integer.parseInt(params[i++]) : template.getLvl();
				boolean forceUse = params.length > i && params[i].equals("f");
				if (useSkill(admin, template, skillLevel, targetMode, forceUse))
					sendInfo(admin, "Used skill: " + template.getL10n());
				else
					sendInfo(admin, "Could not use skill (" + (forceUse ? "missing preconditions" : "add parameter 'f' to force use") + ").");
			} else {
				sendInfo(admin, "Invalid skill id.");
			}
		} catch (NumberFormatException e) {
			sendInfo(admin, "Invalid skill id or level.");
		}
	}

	private boolean useSkill(Player player, SkillTemplate template, int skillLevel, String targetMode, boolean forceUse) {
		Creature effector;
		VisibleObject target;
		if (targetMode != null) {
			if (!(player.getTarget() instanceof Creature creatureTarget)) {
				PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_INVALID_TARGET());
				return false;
			}
			effector = creatureTarget;
			target = getTarget(player, targetMode);
		} else {
			effector = player;
			target = player.getTarget();
		}

		Skill skill = SkillEngine.getInstance().getSkill(effector, template.getSkillId(), skillLevel, target);
		if (skill != null)
			return forceUse ? skill.useWithoutPropSkill() : skill.useNoAnimationSkill();

		return false;
	}

	private VisibleObject getTarget(Player player, String targetMode) {
		return switch (targetMode) {
			case "me" -> player;
			case "self" -> player.getTarget();
			case "target" -> player.getTarget() == null ? null : player.getTarget().getTarget();
			default -> null;
		};
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 100,792
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 58,079
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,969
7 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
8 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
9 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0