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

Ап уровня перса через ClassChangeService.java

  • Автор темы Автор темы WeRn
  • Дата начала Дата начала

WeRn

Ефрейтор
В принципе все сделано верно и правильно. Но после того как я получил диалог на выбор класса и выбрал класс данные перса не обновляются, т.е. я как был 9 уровнем, так и остался.

По коду:

Код:
	public static void setClass(Player player, PlayerClass playerClass) {
	   if (validateSwitch(player, playerClass)) {
		   player.getCommonData().setPlayerClass(playerClass);
		   player.getCommonData().setLevel(10);
		   player.getController().upgradePlayer();
		   SkillLearnService.addMissingSkills(player);
		   DAOManager.getDAO(PlayerDAO.class).storePlayer(player);
		   DAOManager.getDAO(PlayerQuestListDAO.class).store(player);   
		   PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(0, 0, 0));
	   }
  }

Должно все обновить было, но это произойдет только после того, как я выйду в релог этим персом.
Также и с базой, к примеру я после выбора класса засчитываю персу квесты:

Код:
	private static int [] elyQuests = {1000, 1006, 1007, 1929, 30217, 11276, 11049, 3932, 3931, 3930, 1044, 11550, 1205, 38002};
	private static int [] asmoQuests = {2000, 2008, 2009, 2900, 30317, 21278, 21049, 4936, 4935, 4934, 2042, 21550, 2132, 48002};

Но пока релог не сделаю персом, в базе не появляются данные об этом.

По коду ясно, что я обновляю данные, но ничего не происходит.
Код:
		   DAOManager.getDAO(PlayerDAO.class).storePlayer(player);
		   DAOManager.getDAO(PlayerQuestListDAO.class).store(player);

Может кто сталкивался с такой проблемой? Есть может у кого идеи от чего оно зависит?
Сборка Чистые AL (не шара)
 
Сделай обновление базы с задержкой, а то получается ты одновременно обновляешь лист перса и тут же обновляешь в базу, получается в базу обновляется то что было, ну как пример может не из лучших но попробуй))

public static void setClass(Player player, PlayerClass playerClass) {
if (validateSwitch(player, playerClass)) {
player.getCommonData().setPlayerClass(playerClass);
player.getCommonData().setLevel(10);
player.getController().upgradePlayer();
SkillLearnService.addMissingSkills(player);

ThreadPoolManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
DAOManager.getDAO(PlayerDAO.class).storePlayer(player);
DAOManager.getDAO(PlayerQuestListDAO.class).store(player);
}
}, 90);
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(0, 0, 0));
}
}
 
Сделай обновление базы с задержкой, а то получается ты одновременно обновляешь лист перса и тут же обновляешь в базу, получается в базу обновляется то что было, ну как пример может не из лучших но попробуй))

public static void setClass(Player player, PlayerClass playerClass) {
if (validateSwitch(player, playerClass)) {
player.getCommonData().setPlayerClass(playerClass);
player.getCommonData().setLevel(10);
player.getController().upgradePlayer();
SkillLearnService.addMissingSkills(player);

ThreadPoolManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
DAOManager.getDAO(PlayerDAO.class).storePlayer(player);
DAOManager.getDAO(PlayerQuestListDAO.class).store(player);
}
}, 90);
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(0, 0, 0));
}
}
Ну мне известно, что в программировании выполняется все по очереди, не так ли?..
Ну и этот метод с задержкой также не работает. Есть еще варианты?
Просто именно как я выдаю 9 уровень и сетаю класс - работает, а вот после того как класс выдал - данные обновляются только после выхода в релог.
 
было бы круто если за место не актуально, написал бы как ты решил данную задачу
Написал сервис, которые решает вопрос со стартом персонана. 2018 года сборка слитая на форуме лежит. Она еще вроде доступна. В 2020 года сборке более улучшенный сервис, но суть таже
[DOUBLEPOST=1630086079,1630085870][/DOUBLEPOST]Я имел ввиду в моих сборках, что сливали там можно найти сервис этот. сборка LD
 
Назад
Сверху