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

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г пакетах от сервера к клиенту шлется базовый класс и текущий класс.
 
раса персонажа привязана к базовому классу. 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);
            }
 
Назад
Сверху Снизу