테스트

aion-server 4.8

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

import java.util.Set;

import org.slf4j.LoggerFactory;

import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.team.legion.Legion;
import com.aionemu.gameserver.network.aion.AionClientPacket;
import com.aionemu.gameserver.network.aion.AionConnection.State;
import com.aionemu.gameserver.network.aion.serverpackets.SM_LEGION_INFO;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
import com.aionemu.gameserver.services.LegionService;

/**
 * @author Simple
 */
public class CM_LEGION extends AionClientPacket {

	private int exOpcode;
	private short deputyPermission;
	private short centurionPermission;
	private short legionarPermission;
	private short volunteerPermission;
	private int rank;
	private int legionDominionId;
	private String legionName;
	private String charName;
	private String newNickname;
	private String announcement;
	private String newSelfIntro;

	public CM_LEGION(int opcode, Set<State> validStates) {
		super(opcode, validStates);
	}

	@Override
	protected void readImpl() {
		exOpcode = readUC();

		switch (exOpcode) {
			// Create a legion
			case 0x00:
				readD(); // 00 78 19 00 40
				legionName = readS();
				break;
			// Invite to legion
			case 0x01:
				readD(); // empty
				charName = readS();
				break;
			// Leave legion
			case 0x02:
				readD(); // empty
				readH(); // empty
				break;
			// Kick member from legion
			case 0x04:
				readD(); // empty
				charName = readS();
				break;
			// Appoint a new Brigade General
			case 0x05:
				readD();
				charName = readS();
				break;
			// Change rank
			case 0x06:
				rank = readD();
				charName = readS();
				break;
			// Show current announcement (via /gnotice)
			case 0x07:
			// Refresh legion info
			case 0x08:
				readD(); // 0
				readH(); // empty
				break;
			// Edit current announcement (from legion window or via /gnotice New text)
			case 0x09:
				readD(); // empty or char id?
				announcement = readS();
				break;
			// Change self introduction
			case 0x0A:
				readD(); // empty char id?
				newSelfIntro = readS();
				break;
			// Edit permissions
			case 0x0D:
				deputyPermission = readH();
				centurionPermission = readH();
				legionarPermission = readH();
				volunteerPermission = readH();
				break;
			// Level legion up
			case 0x0E:
				readD(); // empty
				readH(); // empty
				break;
			case 0x0F:
				charName = readS();
				newNickname = readS();
				break;
			case 0x10: // selected legion dominion
				legionDominionId = readD();
				break;
			default:
				LoggerFactory.getLogger(CM_LEGION.class).warn("Unknown Legion exOpcode 0x" + Integer.toHexString(exOpcode).toUpperCase());
				break;
		}
	}

	@Override
	protected void runImpl() {
		final Player activePlayer = getConnection().getActivePlayer();
		if (activePlayer.isLegionMember()) {
			final Legion legion = activePlayer.getLegion();

			if (charName != null) {
				LegionService.getInstance().handleCharNameRequest(exOpcode, activePlayer, charName, newNickname, rank);
			} else {
				switch (exOpcode) {
					case 0x02: // leave legion
						LegionService.getInstance().leaveLegion(activePlayer, false);
						break;
					case 0x07: // show legion notice (from /gnotice chat command)
						Legion.Announcement currentAnnouncement = legion.getAnnouncement();
						if (currentAnnouncement == null)
							sendPacket(SM_SYSTEM_MESSAGE.STR_MSG_NOSET_GUILD_NOTICE());
						else
							sendPacket(SM_SYSTEM_MESSAGE.STR_GUILD_NOTICE(currentAnnouncement.message(), currentAnnouncement.time().getTime() / 1000));
						break;
					case 0x08: // refresh legion info
						sendPacket(new SM_LEGION_INFO(legion));
						break;
					case 0x09: // edit announcements
						LegionService.getInstance().changeAnnouncement(activePlayer, announcement);
						break;
					case 0x0A: // change self introduction
						LegionService.getInstance().changeSelfIntro(activePlayer, newSelfIntro);
						break;
					case 0x0D: // edit permissions
						LegionService.getInstance().changePermissions(activePlayer, legion, deputyPermission, centurionPermission, legionarPermission, volunteerPermission);
						break;
					case 0x0E: // level up legion
						LegionService.getInstance().requestChangeLevel(activePlayer);
						break;
					case 0x10: // select Legion Dominion to participate
						LegionService.getInstance().joinLegionDominion(activePlayer, legionDominionId);
						break;
				}
			}
		} else {
			switch (exOpcode) {
				case 0x00: // create a legion
					LegionService.getInstance().createLegion(activePlayer, legionName);
					break;
			}
		}
	}
}

📎 첨부파일

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