매칭 조금덧붙인부분
지엠명령어 일단 원활한 테스트위해서
/** 2013.6.3 개태,큐르 클랜매칭 실험명령어**/
} else if (cmd.equalsIgnoreCase("매칭")) {
gm.sendPackets(new S_ClanMatching());
} else if (cmd.equalsIgnoreCase("매칭0")) {
gm.sendPackets(new S_ClanMatching(gm, 0,0));
} else if (cmd.equalsIgnoreCase("매칭1")) {
gm.sendPackets(new S_ClanMatching(gm, 1,0));
} else if (cmd.equalsIgnoreCase("매칭2")) {
gm.sendPackets(new S_ClanMatching(gm, 2,0));
} else if (cmd.equalsIgnoreCase("매칭3")) {
gm.sendPackets(new S_ClanMatching(gm, 3,0));
} else if (cmd.equalsIgnoreCase("매칭4")) {
gm.sendPackets(new S_ClanMatching(gm, 4,0));
} else if (cmd.equalsIgnoreCase("매칭5")) {
gm.sendPackets(new S_ClanMatching(gm, 5,0));
} else if (cmd.equalsIgnoreCase("매칭6")) {
gm.sendPackets(new S_ClanMatching(gm, 6,0));
/** **/
아래껀추가
package l1j.server.server.serverpackets;
import javolution.util.FastTable;
import l1j.server.server.Opcodes;
import l1j.server.server.model.L1Clan;
import l1j.server.server.model.L1War;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1PcInstance;
/** 2013.6.3 개태,큐르 클랜매칭 **/
public class S_ClanMatching extends ServerBasePacket {
private static final String S_ClanMatching = "[S] S_ClanMatching";
private byte[] _byte = null;
public S_ClanMatching(L1PcInstance pc, int type, int subType) {
buildPacket(pc, type, subType);
}
public S_ClanMatching() {//군주부름클릭하라는부분일듯한데 현재모르것음 반응없음
writeC(Opcodes.S_OPCODE_CLANMATCHING);
writeC(0xf0);
writeC(0x56);
writeC(0x35);
writeC(0x23);
writeC(0x2b);
writeC(0xb5);
writeC(0xff);
writeC(0x27);
writeC(0xed);
writeC(0x52);
writeC(0xf6);
writeC(0x76);
writeC(0x20);
writeC(0xa9);
writeC(0xfb);
writeC(0x32);
writeC(0xef);
writeC(0x57);
writeC(0xe6);
writeC(0x43);
writeC(0x00);
writeC(0x81);
writeC(0xdf);
// ========================================================
// [Server] OPCODE :192 Size :24
// ========================================================
// [DATA]0000 :c0 f0 56 35 23 2b b5 ff 27 ed 52 f6 76 20 a9 fb ..V5#+..'.R.v ..
// [DATA]0010 :32 ef 57 e6 43 00 81 df 2.W.C...
}
/** 2013.6.3 개태,큐르 클랜매칭 **/
private void buildPacket(L1PcInstance pc, int type, int subType) {
int size = 0;
writeC(Opcodes.S_OPCODE_CLANMATCHING);
writeH(type); //매칭창 타입
if (type == 0) {//혈맹등록
} else if (type == 1) {//등록취소
} else if (type == 2 || type == 3) {//혈맹리스트 추천/신청
FastTable<L1Clan> MatchingList = null;
if (type == 2) {
MatchingList = L1World.getInstance().getClanMatchingList();
size = MatchingList.size();
writeC(size);//모든리스트갯수
} else if (type == 3) {
MatchingList = L1World.getInstance().getClanMatchingMyList(pc);
size = MatchingList.size();
writeC(size);//신청한리스트갯수
}
for (L1Clan clan : MatchingList) {
if (type == 3) {
writeD(clan.getClanId());//클렌아이디 월랜목록번호인데 구분쉽게 아이디가좋을듯
writeC(0x00);
}
writeD(clan.getClanId());//클렌아이디
writeS(clan.getClanName());//클렌네임
writeS(clan.getLeaderName());//리더네임
writeD(clan.OnlineMemberMatchCount); //섭다전까지최고유저로일단지정
writeC(clan.MatchWarType);// 타입 0:전투, 1:사냥, 2:친목
if (clan.getHouseId() > 0) {//아지트
writeC(0x01);
} else {
writeC(0x00);
}
boolean iswar = false;
String enemy_clan_name = null;
for (L1War war : L1World.getInstance().getWarList()) {
iswar = war.CheckClanInWar(clan.getClanName());
if (iswar) {
enemy_clan_name = war.GetEnemyClanName(clan.getClanName());
break;
}
}
if (enemy_clan_name != null) {
writeC(0x01); //전쟁상태 1:O, 0:X
writeC(0x01); //마우스오버 표시 1:표현, 0:미표현
writeS("\\aG전쟁중:" + enemy_clan_name + " 혈맹");
} else {
writeC(0x00);
writeC(0x00);
}
/** 혈맹 정보 **/
writeS("\\aD" + clan.MatchMent);//홍보문구
writeD(clan.getClanId());//클랜아이디
}
writeC(0x00);
writeC(0x00);
MatchingList.clear();
} else if (type == 4) {
} else if (type == 5) {
} else if (type == 6) {//취소 수락 거절
if (subType == 3) {//가입신청 취소할경우
//개태잠들어서 패킷끍어올수없음 ㅈㅈ
}
}
}
@Override
public byte[] getContent() {
if (_byte == null) {
_byte = getBytes();
}
return _byte;
}
@Override
public String getType() {
return S_ClanMatching;
}
}
아래도추가
package l1j.server.server.clientpackets;
import java.util.logging.Logger;
import javolution.util.FastTable;
import l1j.server.server.model.L1Clan;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.serverpackets.S_ClanMatching;
import l1j.server.server.serverpackets.S_SystemMessage;
import server.LineageClient;
/** 2013.6.3 개태,큐르 클랜매칭 **/
public class C_ClanMatching extends ClientBasePacket {
private static final String C_ClanMatching = "[C] C_ClanMatching";
private static Logger _log = Logger.getLogger(C_ClanMatching.class.getName());
/** 2013.6.3 개태,큐르 클랜매칭 **/
public C_ClanMatching(byte abyte0[], LineageClient clientthread) throws Exception {
super(abyte0);
int type = readC();
L1PcInstance pc = clientthread.getActiveChar();
L1Clan clan = null;
FastTable<L1Clan> MatchingList = null;
int clanid = 0;
switch (type) {
case 0://혈맹등록
int warType = readC();
String ment = readS();
clan = pc.getClan();
if (clan == null) {
pc.sendPackets(new S_SystemMessage("혈맹이 없습니다."));
//패킷이필요할지도
return;
}
clan.isClanMatch = true;
clan.MatchWarType = warType;
clan.MatchMent = ment;
pc.sendPackets(new S_ClanMatching(pc, 0, 0));
MatchingList = L1World.getInstance().getClanMatchingList();
for (L1Clan targetClan : MatchingList) {
if (clan == targetClan) {
pc.sendPackets(new S_SystemMessage("등록정보를 수정하셨습니다."));
return;
}
}
pc.sendPackets(new S_SystemMessage("혈맹을 등록하셨습니다."));
break;
case 1://등록취소
clan = pc.getClan();
if (clan == null) {
pc.sendPackets(new S_SystemMessage("혈맹이 없습니다."));
//패킷이필요할지도
return;
}
clan.isClanMatch = false;
clan.MatchWarType = 0;
clan.MatchMent = "";
clan.MatchPcList.clear();
pc.sendPackets(new S_ClanMatching(pc, 1, 0));
pc.sendPackets(new S_SystemMessage("혈맹등록을 취소하셨습니다."));
break;
case 2://새로고침
pc.sendPackets(new S_ClanMatching(pc, 2, 0));
break;
case 3://새로고침
pc.sendPackets(new S_ClanMatching(pc, 3, 0));
break;
case 4://새로고침
pc.sendPackets(new S_ClanMatching(pc, 4, 0));
break;
case 5://혈가입신청
clanid = readD();
L1World.getInstance().getClan(clanid).MatchPcList.add(pc);
pc.sendPackets(new S_ClanMatching(pc, 5, 0));
pc.sendPackets(new S_SystemMessage("혈맹에 가입을 신청하셨습니다."));
break;
case 6://혈가입취소
clanid = readD();
readD();
int Type = readD();
L1World.getInstance().getClan(clanid).MatchPcList.remove(pc);
pc.sendPackets(new S_SystemMessage("혈맹가입신청을 취소하셨습니다."));
//pc.sendPackets(new S_ClanMatching(pc, 6, Type)); //패킷부족 개태얼렁와
break;
default:
System.out.println("지정하지 않은 타입 : " + type);
break;
}
MatchingList.clear();
}
@Override
public String getType() {
return C_ClanMatching;
}
}
씨셀렉트케릭
for (L1PcInstance clanMember : clan.getOnlineClanMember()) {
if (clanMember.getId() != pc.getId() && !pc.isGm()) {
// 지금, 혈맹원의%0%s가 게임에 접속했습니다.
clanMember.sendPackets(new S_ServerMessage(843, pc.getName()));
}
}
/** 2013.6.3 개태,큐르 클랜매칭 **/
clan.setOnlineMemberMatchCount();
/** **/
엘원클랜
/** 2013.6.3 개태,큐르 클랜매칭 **/
public boolean isClanMatch = false;
public int OnlineMemberMatchCount = 0;
public int MatchWarType = 0;//타입 0:전투, 1:사냥, 2:친목
public String MatchMent = "";
public void setOnlineMemberMatchCount() {//디비입력귀찮으니 섭다전까지 최고수치
int count = 0;
for (int i = 0; i < clanMemberList.size(); i++) {
if (L1World.getInstance().getPlayer(clanMemberList.get(i).name) != null) {
count++;
}
}
if (OnlineMemberMatchCount < count) {
OnlineMemberMatchCount = count;
}
}
public final FastTable<L1PcInstance> MatchPcList = new FastTable<L1PcInstance>();
/** **/
엘원월드
/** 2013.6.3 개태,큐르 클랜매칭 **/
public FastTable<L1Clan> getClanMatchingList(){
FastTable<L1Clan> matchlist = new FastTable<L1Clan>();
for(L1Clan clan : getAllClans()){
if(clan.isClanMatch){
matchlist.add(clan);
}
}
return matchlist;
}
public FastTable<L1Clan> getClanMatchingMyList(L1PcInstance pc){
FastTable<L1Clan> matchpclist = new FastTable<L1Clan>();
for(L1Clan clan : getAllClans()){
if(clan.isClanMatch && clan.MatchPcList.contains(pc)){
matchpclist.add(clan);
}
}
return matchpclist;
}
/** **/
수락/거절/가입신청취소 부분 패킷이필요한데
대만접가능한 개태는 자러가버려서 ㅈㅈ
신청해둔목록리스트도 패킷이없어서 ㅈㅈ
아무거나쏘면서 노가다할수도잇지만 굳이 그럴이유는 없으니.....
다음에 패킷긁어오면 마저 처리
일단 지금 까지 작업한부분까지만 공개할께용
개태랑 큐르랑 공동작업
변수들은 귀찮아서 일단 캡슐화안한상태
[출처] 매칭 조금덧붙인부분 (미완 (비공개 카페)

준희미니 님의 최근 댓글
rt 2021 05.25 ㄳ 2021 05.11 ㄳ 2021 05.11 rt 2021 05.09 rt 2021 04.25