테스트

aion-server 4.8

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

import com.aionemu.gameserver.dataholders.DataManager;
import com.aionemu.gameserver.model.templates.QuestTemplate;
import com.aionemu.gameserver.model.templates.quest.QuestExtraCategory;
import com.aionemu.gameserver.network.aion.AionConnection;
import com.aionemu.gameserver.network.aion.AionServerPacket;
import com.aionemu.gameserver.questEngine.model.QuestState;

/**
 * @author VladimirZ
 */
public class SM_QUEST_ACTION extends AionServerPacket {

	private ActionType actionType;
	private int questId;
	private int status;
	private int step;
	private int flags;
	private int timer;
	private int sharerId;
	private boolean shareInAlliance;

	/**
	 * Use this constructor to notify the client about a new/abandoned quest or quest state updates.
	 * 
	 * @param actionType
	 *          - {@link ActionType#ADD ADD}, {@link ActionType#UPDATE UPDATE} or {@link ActionType#ABANDON ABANDON}
	 * @param qs
	 *          - concerned quest
	 */
	public SM_QUEST_ACTION(ActionType actionType, QuestState qs) {
		this.actionType = actionType;
		this.questId = qs.getQuestId();
		this.status = qs.getStatus().value();
		this.step = qs.getQuestVars().getQuestVars();
		this.flags = qs.getFlags();
	}

	public SM_QUEST_ACTION(int questId) {
		this.actionType = ActionType.UNK;
		this.questId = questId;
	}

	/**
	 * Display Timer
	 * 
	 * @param questId
	 * @param timer
	 */
	public SM_QUEST_ACTION(int questId, int timer) {
		this.actionType = ActionType.TIMER;
		this.questId = questId;
		this.timer = timer;
	}

	/**
	 * Shows a question window that asks to share the quest with the packet receiver.
	 */
	public SM_QUEST_ACTION(int questId, int sharerId, boolean shareInAlliance) {
		this.actionType = ActionType.SHARE;
		this.questId = questId;
		this.sharerId = sharerId;
		this.shareInAlliance = shareInAlliance;
	}

	@Override
	protected void writeImpl(AionConnection con) {
		QuestTemplate questTemplate = DataManager.QUEST_DATA.getQuestById(questId);
		if (questTemplate != null && questTemplate.getExtraCategory() != QuestExtraCategory.NONE)
			return;
		writeC(actionType.getId());
		writeD(questId);
		switch (actionType) {
			case ADD:
				writeC(status);// quest status goes by ENUM value
				writeC(0x0);
				writeD(step | flags << 24);// current quest step
				writeH(0);
				writeC(0); // seen sometimes 1 for campaign quests
				break;
			case UPDATE:
				writeC(status);// quest status goes by ENUM value
				writeC(0x0);
				writeD(step | flags << 24);// current quest step
				writeH(0); // seen sometimes 1 when status == COMPLETED
				break;
			case ABANDON:
				writeD(0);
				break;
			case TIMER:
				writeD(timer);// sets client timer ie 84030000 is 900 seconds/15 mins
				writeC(timer > 0 ? 1 : 0);
				break;
			case SHARE:
				writeD(sharerId);
				writeD(shareInAlliance ? 1 : 0); // 0: group, 1: alliance
				break;
			case UNK:
				writeH(0x01);// ???
				writeH(0x0);
				break;
		}
	}

	public enum ActionType {
		ADD(1),
		UPDATE(2),
		ABANDON(3),
		TIMER(4),
		SHARE(5),
		UNK(6);

		private final int id;

		ActionType(int id) {
			this.id = id;
		}

		int getId() {
			return id;
		}
	}
}

📎 첨부파일

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