Смена рассы персонажа

Eternal12

Знаменитый
Участник
Сообщения
5
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
1 233
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
JDEV (v12.0)
Интересует где можно найти часть кода по поводу смены рассы персонажа.
Выше хрониках и на других сборках видел в админ панели. Но тут такой функции нету.
 
Код можно найти в network.clientpackets.RequestCharacterCreate (создания персонажа), как раз там присутствует код присвоение расы в зависимости от выбранного класса.
 
Еще не факт что раса где-то явно хранится - во многих старых сборках на эту ему не запаривались и выставляли расу на лету чисто по расе основной профы.
Мне вот в свое время в оригинальном овере как раз и пришлось при добавлении услуги смены расы вводить еще и отдельно сохранение расы в бд, т.к. там оно по основной профе и определялось автоматом.
 
public enum ClassRace
{
HUMAN(1),
ELF(1.5),
DARK_ELF(1.5),
ORC(0.9),
DWARF(0.8);

Вроде что то нашел, но понять не могу почему числа не целые ))
 
ну так смотри где они используются
походу какие-то модификаторы для чего-то, например каких-то стат

а так то что ты нашел - это просто перечисление имеющихся рас, а я выше писал про то что явно в бд раса может не сохраняться в сборке, а просто автоматом назначаться по профе перса.
 
player.getRace().ordinal(); только не могу понять как использовать это. например куда вбить значение нынешней расы например human(0) и на замену значение dark elf(2)
 
либо player.setRace, либо, как я писал раньше, смотри RequestCharacterCreate, как там раса присваивается при создании персонажа.
 
раса персонажа привязана к базовому классу. 0,10, 18,25, 31,38, 44, 49,53. грубо говоря клиент рисует модель персонажа по этим данным.
вроде в 2г пакетах от сервера к клиенту шлется базовый класс и текущий класс.
 
setRace так не канает попробую через getBaseclass

Через player.setBaseClass() получается, но приходится перезаходить. Только в gameserver ошибки пробигают Player.Restore <player.java:4579>
 
Последнее редактирование модератором:
Через player.setBaseClass() получается, но приходится перезаходить.
Если не брать во внимание ошибки и то, что Вьі базовьій класс меняете, а не только отображаемую расу, то чем плохо, что перезаходить нужно при смене расьі? )
Если прямо на лету нужно, то можно подпилить чар/юзер инфо пакетьі, которьіе шлют расу. Правда, не помню уже в чем там бьіла суть, но при смене расьі на лету на ИЛе отпадали анимации и чар в Т-позе замирал, чтобьі его оживить без релога надо покостьілять. )
 
В случае ИТ, лучше делать принудительный релог, иначе не избежать критов....
 
Не ну , но то, что через релог (и при необходимости и вход назад, чтобьі лухари бьіло) делать точно в разьі легче, надежнее и всем привьічнее - єто факт. ))
 
Да проще релог прописать, на этом пока остановлюсь. Спасибо всем
 
для смены рассы персонажа основном еще нада изменять класс персонажа,
просто тупо поменять расу не получится, по крайне мере в моих сурцах что делал нельзя тупо менять расу
ниже скинул код, перепишешь под себя

Java:
else if ("changerace".equals(cmd2)) {
                final int feeItemId = 4037; // ID валюты (например, 57 = адена)
                final long feeItemCount = 30; // Стоимость смены расы

                TIntStringHashMap tpls = HtmCache.getInstance().getTemplates("scripts/handler/bbs/pages/changerace.htm", player);
                html = tpls.get(0);

                StringBuilder content = new StringBuilder();

                if (!st.hasMoreTokens()) {
                    if (feeItemCount > 0) {
                        String feeBlock = tpls.get(1)
                            .replace("<?fee_item_count?>", Util.formatAdena(feeItemCount))
                            .replace("<?fee_item_name?>", HtmlUtils.htmlItemName(feeItemId));
                        content.append(feeBlock);
                    } else {
                        content.append(tpls.get(2));
                    }

                    // Создаём таблицу с выбором рас и классов
                    String raceTable = "<table width=700 border=0 background=\"L2UI_CT1.editbox_df_bg\">";
                   
                    raceTable += "<tr>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Человек Воин" : "Human Warrior") + "\" action=\"bypass _cbbsservices_changerace_0_0\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Человек Маг" : "Human Mage") + "\" action=\"bypass _cbbsservices_changerace_0_10\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "</tr>";

                    raceTable += "<tr>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Эльф Воин" : "Elf Warrior") + "\" action=\"bypass _cbbsservices_changerace_1_18\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Эльф Маг" : "Elf Mage") + "\" action=\"bypass _cbbsservices_changerace_1_25\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "</tr>";

                    raceTable += "<tr>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Темный Эльф Воин" : "Dark Elf Warrior") + "\" action=\"bypass _cbbsservices_changerace_2_31\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Темный Эльф Маг" : "Dark Elf Mage") + "\" action=\"bypass _cbbsservices_changerace_2_38\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "</tr>";

                    raceTable += "<tr>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Орк Воин" : "Orc Warrior") + "\" action=\"bypass _cbbsservices_changerace_3_44\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Орк Маг" : "Orc Mage") + "\" action=\"bypass _cbbsservices_changerace_3_49\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "</tr>";

                    raceTable += "<tr>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Гном Воин" : "Dwarf Warrior") + "\" action=\"bypass _cbbsservices_changerace_4_53\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "<td align=center width=230></td>";
                    raceTable += "</tr>";

                    raceTable += "<tr>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Камаэль Мужчина" : "Kamael Male") + "\" action=\"bypass _cbbsservices_changerace_5_123\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "<td align=center width=230><button value=\"" + (player.isLangRus() ? "Камаэль Женщина" : "Kamael Female") + "\" action=\"bypass _cbbsservices_changerace_5_124\" width=200 height=30 back=\"L2UI_ct1.button_df_down\" fore=\"L2UI_ct1.button_df\"></td>";
                    raceTable += "</tr>";

                    raceTable += "</table>";

                    content.append(raceTable);
                } else {
                    if (!BBSConfig.GLOBAL_USE_FUNCTIONS_CONFIGS && !checkUseCondition(player)) {
                        onWrongCondition(player);
                        return;
                    }

                    int raceId, classId;
                    try {
                        raceId = Integer.parseInt(st.nextToken());
                        classId = Integer.parseInt(st.nextToken());
                    } catch (NumberFormatException e) {
                        player.sendMessage(player.isLangRus() ? "Ошибка: некорректный ID расы или класса." : "Error: invalid race or class ID.");
                        player.sendPacket(ShowBoard.CLOSE);
                        return;
                    }

                    if (raceId < 0 || raceId >= Race.VALUES.length) {
                        player.sendMessage(player.isLangRus() ? "Ошибка: указанная раса не существует." : "Error: the specified race does not exist.");
                        player.sendPacket(ShowBoard.CLOSE);
                        return;
                    }

                    Race newRace = Race.VALUES[raceId];
                    ClassId newClassId = ClassId.VALUES[classId];

                    if (newClassId.getRace() != newRace || newClassId.getClassLevel() != ClassLevel.NONE) {
                        player.sendMessage(player.isLangRus() ? "Ошибка: выбранный класс не соответствует расе." : "Error: selected class does not match the race.");
                        player.sendPacket(ShowBoard.CLOSE);
                        return;
                    }

                    if (feeItemCount > 0 && !ItemFunctions.deleteItem(player, feeItemId, feeItemCount, true)) {
                        String noHaveItemBlock = tpls.get(4)
                            .replace("<?fee_item_count?>", Util.formatAdena(feeItemCount))
                            .replace("<?fee_item_name?>", HtmlUtils.htmlItemName(feeItemId));
                        content.append(noHaveItemBlock);
                    } else {
                        boolean noban = true;

                        player.setRace(0, raceId);
                        player.setClassId(newClassId.getId(), noban, false);
                        player.broadcastUserInfo(true);

                        content.append(
                            tpls.get(5)
                                .replace("<?player_name?>", player.getName())
                                .replace("<?race_name?>", newRace.name())
                                .replace("<?class_name?>", newClassId.name())
                        );

                        Log.LogEvent(player.getName(), "ChangeRace", "RaceChange", "changed race to: " + newRace.name() + " with class " + newClassId.name());
                    }
                }

                html = html.replace("<?content?>", content.toString());
                ShowBoard.separateAndSend(html, player);
            }
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…