• SiteAnalyzer, технический и SEO-анализ сайтов

Рейтинг бездны

nokiafan1111

Ефрейтор
Всем привет.
Использую сборку 4.9 геров с клиентом 4.9 руофф.
Столкнулся с 1 проблемой, если в рейтинге бездны свыше 44 персонажа, то при потыке открыть окно рейтинга клиент критует, при этом ошибок в логах нету, идет просто дисконект и вылетает сендлог.

Копался и нарыл этот файл AbyssRankingCache с:
Код:
private List<SM_ABYSS_RANKING_PLAYERS> generatePacketsForRace(Race race) {
		//players orderd by ap
		ArrayList<AbyssRankingResult> list = getDAO().getAbyssRankingPlayers(race, RankingConfig.TOP_RANKING_MAX_OFFLINE_DAYS);
		int page = 1;
		List<SM_ABYSS_RANKING_PLAYERS> playerPackets = new ArrayList<SM_ABYSS_RANKING_PLAYERS>();
		for (int i = 0; i < list.size(); i += 44) {
			if (list.size() > i + 44) {
				playerPackets.add(new SM_ABYSS_RANKING_PLAYERS(lastUpdate, list.subList(i, i + 44), race, page, false));
			} else {
				playerPackets.add(new SM_ABYSS_RANKING_PLAYERS(lastUpdate, list.subList(i, list.size()), race, page, true));
			}
			page++;
		}
		return playerPackets;
	}

Изменил значение 44 на 300, не помогло, откатил файл до исходного состояния.

В чем заключается проблема? В клиенте, или в пакетах сервера?
Можете подсказать где это правиться?
 
а ты тут походу нечего не сделаешь ( особо не смотрел ) , мне кажется тут такая же хрень как и с почтой если больше 100 писем сам клиент критует
 
в консоли кроме как лога дисконекта нету(
заменил 44 на 10, все равно так же.
ошибка это во всех открытых сборках 4.8+ , где то наверное в пакетке что-то не то. Может кто сталкивался с этим?
на 4,7 все нормас, даже с тем кодом, который я скинул выше.
 
Значит сам пакет кривой, посмотри SM_ABYSS_RANKING_PLAYERS от 5+ версий, может подойдёт на 4.9
 
я думаю вы хней маетесь , если в рейтинге не отображается больше 44 персонажей то скорей всего сам клиент ( окно рейтинга ) больше не вмещает ,
для начала зайдите на офф сервер и посмотрите какое там количество персонажей отображается в рейтинге
 
На оффе всё нормально, но там версия уже намного выше, так что про 4.9 точно не узнать, но как минимум 300 в топе должно быть.
 
private List<SM_ABYSS_RANKING_PLAYERS> generatePacketsForRace(Race race) {
ArrayList<AbyssRankingResult> list = getDAO().getAbyssRankingPlayers(race, AbyssRankEnum.STAR1_OFFICER.getRequiredGP(), RankingConfig.TOP_RANKING_MAX_OFFLINE_DAYS);
int page = 1;
List<SM_ABYSS_RANKING_PLAYERS> playerPackets = new ArrayList();
for (int i = 0; i < list.size(); i += 300) {
if (list.size() > i + 300) {
playerPackets.add(new SM_ABYSS_RANKING_PLAYERS(this.lastUpdate, list.subList(i, i + 300), race, page, false));
} else {
playerPackets.add(new SM_ABYSS_RANKING_PLAYERS(this.lastUpdate, list.subList(i, list.size()), race, page, true));
}
page++;
}
return playerPackets;
}

public class SM_ABYSS_RANKING_PLAYERS

@Override
protected void writeImpl(AionConnection con) {

writeD(race);// 0:Elyos 1:Asmo
writeD(lastUpdate);// Date
writeD(page);
writeD(isEndPacket ? 0x7F : 0);// 0:Nothing 1:Update Table
writeH(data.size());// list size

for (AbyssRankingResult rs : data) {
writeD(rs.getRankPos());// Current Rank
writeD(rs.getPlayerAbyssRank());// Abyss rank
writeD((rs.getOldRankPos() == 0) ? 501 : rs.getOldRankPos());// Old Rank
writeD(rs.getPlayerId()); // PlayerID
writeD(race);
writeD(rs.getPlayerClass().getClassId());// Class Id
writeD(0); // Sex ? 0=male / 1=female
writeQ(rs.getPlayerAP());// Abyss Points
writeD(rs.getPlayerGP());// Glory Points 4.5.2
writeH(rs.getPlayerLevel());
writeS(rs.getPlayerName(), 52);// Player Name
writeS(rs.getLegionName(), 82);// Legion Name
writeD(0);//unk 3.5
}
}

Вот структура пакета для 4.9 .
 
А вообще надо какие нибудь логи показывать, все ровно для вывода инфы в игре если ошибка то покажет в консоль.
 
private List<SM_ABYSS_RANKING_PLAYERS> generatePacketsForRace(Race race) {
ArrayList<AbyssRankingResult> list = getDAO().getAbyssRankingPlayers(race, AbyssRankEnum.STAR1_OFFICER.getRequiredGP(), RankingConfig.TOP_RANKING_MAX_OFFLINE_DAYS);
int page = 1;
List<SM_ABYSS_RANKING_PLAYERS> playerPackets = new ArrayList();
for (int i = 0; i < list.size(); i += 300) {
if (list.size() > i + 300) {
playerPackets.add(new SM_ABYSS_RANKING_PLAYERS(this.lastUpdate, list.subList(i, i + 300), race, page, false));
} else {
playerPackets.add(new SM_ABYSS_RANKING_PLAYERS(this.lastUpdate, list.subList(i, list.size()), race, page, true));
}
page++;
}
return playerPackets;
}

public class SM_ABYSS_RANKING_PLAYERS

@Override
protected void writeImpl(AionConnection con) {

writeD(race);// 0:Elyos 1:Asmo
writeD(lastUpdate);// Date
writeD(page);
writeD(isEndPacket ? 0x7F : 0);// 0:Nothing 1:Update Table
writeH(data.size());// list size

for (AbyssRankingResult rs : data) {
writeD(rs.getRankPos());// Current Rank
writeD(rs.getPlayerAbyssRank());// Abyss rank
writeD((rs.getOldRankPos() == 0) ? 501 : rs.getOldRankPos());// Old Rank
writeD(rs.getPlayerId()); // PlayerID
writeD(race);
writeD(rs.getPlayerClass().getClassId());// Class Id
writeD(0); // Sex ? 0=male / 1=female
writeQ(rs.getPlayerAP());// Abyss Points
writeD(rs.getPlayerGP());// Glory Points 4.5.2
writeH(rs.getPlayerLevel());
writeS(rs.getPlayerName(), 52);// Player Name
writeS(rs.getLegionName(), 82);// Legion Name
writeD(0);//unk 3.5
}
}

Вот структура пакета для 4.9 .
Думаю там не просто так стоит ограничение 44 тела на пакет) Клиент больше не принимает скорее всего
 
Назад
Сверху