Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
при смене ID класса на не рассовый- меняется скин рассы и встает в Т-позу
Как убрать смену рассы в клиенте при смене класса например спойлера на СХ? гнома становится ДЕтелкой и отваливаются анимации. Сабклассы при этом нормально отображаются, такой глюк ток на мейне. надо убрать инфу о скине класса в ЧарИнфо?
Как убрать смену рассы в клиенте при смене класса например спойлера на СХ? гнома становится ДЕтелкой и отваливаются анимации. Сабклассы при этом нормально отображаются, такой глюк ток на мейне. надо убрать инфу о скине класса в ЧарИнфо?
Пакеты, UserInfo твой главный враг и глянуть в CharInfo проблема в том, что раса закреплена за ClassId, твоя задача - это выкинуть в помойку
например копать в этом направлении
Любая паблик для ИТ хроник строится на подобной привязке, тут мы видим, что чтобы получить расу - нужно получить PlayerTemplate, но чтобы получить PlayerTemplate - нужно указать classId (baseClass)
Отвяжи это, сделай это раздельным, например PcAppearance должен хранить расу, а не PlayerTemplate и все будет красиво и четко.
P.S. Мой вариант не 100%ый, однако я такое уже проворачивал и помню что в отправке пакетов мы шлем:
А как получается playerTemplate? правильной из _baseClass.
Как-то так. Удачи!
P.S. результатом станет спокойная смена класса на любой расе без глюков лагов и багов.
collisionHeight/radius - закреплены за PlayerTemplate классом, т.к. раса теперь отдельно в Appearance - внешний вид в плане "жирноты и высоты" переносим туда же
бд скрипты (возможно) если что-то завязано на расе
бд скрипты characteers (INSERT/UPDATE) точно имеют свои реализации, там раса ставится от getTemplate().getRace() а нам нужно будет поменять на apeparance.getRace()
Примерный пул изменений который пригодятся:
В большинстве своем эжто поменять getTemplate().getRace() на getAppearance().getRace()
Но где-то нужно будет и другие манипуляшки проводить например явно указать collision radius/height ну или че-то вроде этого
Ну там не думаю что особо много надо переписывать - я когда-то овере выносил хранение расы тоже отдельно и в целом там все что надо было - это вот добавить новую переменную для расы ну и работу с ней. А так же при смене расы апдейтить на лету темплейт у игрока, чтобы и все особенности новой расы применялись - коллизии и другие параметры.
Ну и у себя я добавлял автоустановку этой новой переменной, т.к. не стал уж прямо сразу при переделке всем явно прописывать их расы по базовому классу, а просто назначал ее при входе в игру, если данных про расу еще нет в соответствующем поле.
Ну как-то так, до сих пор в методе restore у игрока
Java:
final ClassId classId = ClassId.VALUES[rs2.getInt("class_id")];
final ClassId defaultClassId = ClassId.VALUES[rs2.getInt("default_class_id")];
int raceId = rs1.getInt("race");
if (raceId < 0 || raceId >= PlayerRace.values().length)
raceId = !classId.isOldAwakenedClass() ? classId.getRace().ordinal() : defaultClassId.getRace().ordinal();
final PlayerTemplate template = PlayerTemplateDataHolder.getInstance().getData(PlayerRace.values()[raceId], classId, Sex.VALUES[rs1.getInt("sex")], false);
player = new Player(objectId, template);
Ну там не думаю что особо много надо переписывать - я когда-то овере выносил хранение расы тоже отдельно и в целом там все что надо было - это вот добавить новую переменную для расы ну и работу с ней. А так же при смене расы апдейтить на лету темплейт у игрока, чтобы и все особенности новой расы применялись - коллизии и другие параметры.
Ну и у себя я добавлял автоустановку этой новой переменной, т.к. не стал уж прямо сразу при переделке всем явно прописывать их расы по базовому классу, а просто назначал ее при входе в игру, если данных про расу еще нет в соответствующем поле.
Ну как-то так, до сих пор в методе restore у игрока
Java:
final ClassId classId = ClassId.VALUES[rs2.getInt("class_id")];
final ClassId defaultClassId = ClassId.VALUES[rs2.getInt("default_class_id")];
int raceId = rs1.getInt("race");
if (raceId < 0 || raceId >= PlayerRace.values().length)
raceId = !classId.isOldAwakenedClass() ? classId.getRace().ordinal() : defaultClassId.getRace().ordinal();
final PlayerTemplate template = PlayerTemplateDataHolder.getInstance().getData(PlayerRace.values()[raceId], classId, Sex.VALUES[rs1.getInt("sex")], false);
player = new Player(objectId, template);
На данном сайте используются файлы cookie, чтобы персонализировать содержимое и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.