Перейти к содержанию
Авторизация  
webdes27

Помогите Убрать Часть Кода С Саб Класса Камаель!

Рекомендуемые сообщения

Вот решил на сервере линдвиор срезать рассу камаель, помучавшись минут 20-30 убрал все упоминания из ядра о камаель, но я в java не силён и упустил простенькое условие. Точней не упустил а немного не понял как граматнее удалить условия для камаель но при том не удалив условия для других рас!

Вот код:

if(race == Race.kamael)
{
availSubs = EnumSet.copyOf(KAMAEL_SUBCLASS_SET);
}
else
{
ClassId classId = player.getClassId();
if((classId.isOfLevel(ClassLevel.Third)) || (classId.isOfLevel(ClassLevel.Fourth)) || (classId.isOfLevel(ClassLevel.Awaking)))
{
availSubs = EnumSet.copyOf(MAIN_SUBCLASS_SET);
availSubs1 = EnumSet.copyOf(MAIN_SUBCLASS_SET1);
availSubs.removeAll(BANNED_SUBCLASSES);
availSubs.remove(classId);
availSubs1.removeAll(BANNED_SUBCLASSES);
availSubs1.remove(classId);
switch(race.ordinal())
{
 case 1:
 availSubs.removeAll(getSet(Race.darkelf, ClassLevel.Third));
 break;
 case 2:
 availSubs.removeAll(getSet(Race.elf, ClassLevel.Third));
}
switch(race.ordinal())
{
 case 1:
 availSubs1.removeAll(getSet(Race.darkelf, ClassLevel.Awaking));
 break;
 case 2:
 availSubs1.removeAll(getSet(Race.elf, ClassLevel.Awaking));
}
Set<?> unavailableClasses = SUBCLASS_SET_MAP.get(classId);
if(unavailableClasses != null)
{
 availSubs.removeAll(unavailableClasses);
 availSubs1.removeAll(unavailableClasses);
}
}
}

Класс SubClassInfo. Сборка феникса подобная, Lindvior. Был бы признателен за подсказку как граматней удалить!

Мне надо лишится этой части кода:

if(race == Race.kamael)
{
availSubs = EnumSet.copyOf(KAMAEL_SUBCLASS_SET);
}

Там остаётся else { но как я понимаю это не правильно! Надо с if и что то далие, вот мне это и нужно! Был бы признателен за подсказку. Извеняюсь за глупую тему, я больше по клиент части, просто нужно решить проблему со срезом рассы, я могу конечно это зделать просто окуратно затерев через клиент, но считаю не правильным оставлять упоминания о камаель рассе вещах и каких либо предметах, в сервере!

 

Если я правельно понял, то примерно так должно быть?

  ClassId classId = player.getClassId();
  if((classId.isOfLevel(ClassLevel.Third)) || (classId.isOfLevel(ClassLevel.Fourth)) || (classId.isOfLevel(ClassLevel.Awaking)))
  {
   availSubs = EnumSet.copyOf(MAIN_SUBCLASS_SET);
   availSubs1 = EnumSet.copyOf(MAIN_SUBCLASS_SET1);
   availSubs.removeAll(BANNED_SUBCLASSES);
   availSubs.remove(classId);
   availSubs1.removeAll(BANNED_SUBCLASSES);
   availSubs1.remove(classId);
   switch(race.ordinal())
   {
 case 1:
  availSubs.removeAll(getSet(Race.darkelf, ClassLevel.Third));
  break;
 case 2:
  availSubs.removeAll(getSet(Race.elf, ClassLevel.Third));
   }
   switch(race.ordinal())
   {
 case 1:
  availSubs1.removeAll(getSet(Race.darkelf, ClassLevel.Awaking));
  break;
 case 2:
  availSubs1.removeAll(getSet(Race.elf, ClassLevel.Awaking));
   }
   Set<?> unavailableClasses = SUBCLASS_SET_MAP.get(classId);
   if(unavailableClasses != null)
   {
 availSubs.removeAll(unavailableClasses);
 availSubs1.removeAll(unavailableClasses);
   }
  }

Изменено пользователем webdes27

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделай вот так

 

if(race != Race.kamael)
{
ClassId classId = player.getClassId();
if((classId.isOfLevel(ClassLevel.Third)) || (classId.isOfLevel(ClassLevel.Fourth)) || (classId.isOfLevel(ClassLevel.Awaking)))
{
availSubs = EnumSet.copyOf(MAIN_SUBCLASS_SET);
availSubs1 = EnumSet.copyOf(MAIN_SUBCLASS_SET1);
availSubs.removeAll(BANNED_SUBCLASSES);
availSubs.remove(classId);
availSubs1.removeAll(BANNED_SUBCLASSES);
availSubs1.remove(classId);
switch(race.ordinal())
{
	 case 1:
	 availSubs.removeAll(getSet(Race.darkelf, ClassLevel.Third));
	 break;
	 case 2:
	 availSubs.removeAll(getSet(Race.elf, ClassLevel.Third));
}
switch(race.ordinal())
{
	 case 1:
	 availSubs1.removeAll(getSet(Race.darkelf, ClassLevel.Awaking));
	 break;
	 case 2:
	 availSubs1.removeAll(getSet(Race.elf, ClassLevel.Awaking));
}
Set<?> unavailableClasses = SUBCLASS_SET_MAP.get(classId);
if(unavailableClasses != null)
{
	 availSubs.removeAll(unavailableClasses);
	 availSubs1.removeAll(unavailableClasses);
}
}
}

 

Так точно не ошибешься, но если ты вырезал тип рассы камаэлей, то

 

ClassId classId = player.getClassId();
if((classId.isOfLevel(ClassLevel.Third)) || (classId.isOfLevel(ClassLevel.Fourth)) || (classId.isOfLevel(ClassLevel.Awaking)))
{
availSubs = EnumSet.copyOf(MAIN_SUBCLASS_SET);
availSubs1 = EnumSet.copyOf(MAIN_SUBCLASS_SET1);
availSubs.removeAll(BANNED_SUBCLASSES);
availSubs.remove(classId);
availSubs1.removeAll(BANNED_SUBCLASSES);
availSubs1.remove(classId);
switch(race.ordinal())
{
	 case 1:
	 availSubs.removeAll(getSet(Race.darkelf, ClassLevel.Third));
	 break;
	 case 2:
	 availSubs.removeAll(getSet(Race.elf, ClassLevel.Third));
}
switch(race.ordinal())
{
	 case 1:
	 availSubs1.removeAll(getSet(Race.darkelf, ClassLevel.Awaking));
	 break;
	 case 2:
	 availSubs1.removeAll(getSet(Race.elf, ClassLevel.Awaking));
}
Set<?> unavailableClasses = SUBCLASS_SET_MAP.get(classId);
if(unavailableClasses != null)
{
	 availSubs.removeAll(unavailableClasses);
	 availSubs1.removeAll(unavailableClasses);
}
}

Изменено пользователем SmokiMo
  • Upvote 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не проще было просто запретить создание персонажей данной расы и все?

и ничего более вырезать бы не пришлось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не проще!Я вырезаю любое упоминание о рассе. Извеняюсь что не писал, я в больнице лежал, это отпустили чуть раньше))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Повырезал весь код о камаель и классах сабах и квесты и всё что вообще о камаель в сервере. Но на создание рассы входит и когда пытаюсь создать кидает ошибку в гс. Ну это понятно что ошибка будет, пакет та шлётся! Как зделать затычку на расу камаель? Как я понял l2next.gameserver.network.clientpackets.CharacterCreate вот тут. Примерно здесь _raceId = readD();

Как зделать там затычку на создание рассы с идом 5 (Камаель).

Вот такого рода ошибка:

[14:25:52] ERROR Client: AUTHED IP: 127.0.0.1 Account: webdes27 - Failed running
: [C] CharacterCreate
java.lang.ArrayIndexOutOfBoundsException: 5
    at l2next.gameserver.model.Player.create(Player.java:718)
    at l2next.gameserver.network.clientpackets.CharacterCreate.runImpl(Chara
cterCreate.java:78)
    at l2next.gameserver.network.clientpackets.L2GameClientPacket.run(L2Game
ClientPacket.java:49)
    at l2next.commons.net.nio.impl.MMOExecutableQueue.run(MMOExecutableQueue
.java:42)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
[14:31:38]  INFO SpawnManager: spawned 92 npc; spawns: 92; group: magmeld_ritual

 

Был бы признателен за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вариант условие, и если _raceId = 5, то пусть _raceId станет к примеру 1

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Буду думать! Я просто больше по клиенту, в java я дуб дерево хвойное)) Щас подумаем)) Но в любом случае уже спасибо, лучше чем не чего уже! Благодарю за подсказку!

Просто хотим ещё карту интерлюда втулить на клиент линдвиер! Не просто абрезать тп и убрать спавн а именно со стороны клиента как положенно зделать карту интерлюда))

Изменено пользователем webdes27

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нечего ты не сделаешь, клиент шлем пакет серверу через Engine.dll, при нажатии на выбор рассы, отображаться все-равно будут камаэли.

Чтобы они не отображались нужно много чего переделать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нечего у вас не выйдет, во первых пакет отсылается(Engine.dll) клиентом при нажатии на кнопку выбора рассы, во вторых кнопка прописана самим клиентом в Engine.dll.

Из лобби создания персонажа - меню выбора камаэля не убрать - без редактирования Engine.dll .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
не проще!Я вырезаю любое упоминание о рассе.
ну, хозяин барин - если удобнее вырезать гланды через задницу, то что я тут могу сказать.

 

З.Ы. а ведь достаточно к примеру всего навсего в пакете CharacterCreate поправить в начале runImpl() проверку на допустимость класса создаваемого персонажа на примерно такое

 

       for (ClassId cid : ClassId.VALUES)
           if (cid.getId() == _classId && (!cid.isOfLevel(ClassLevel.FIRST) || cid.getRace() == Race.KAMAEL))
               return;

и все - невозможно создать персонажа расы камаэлей, а а это уже можно считать почти все что связано с камаэлями уже становится недоступным.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! Просто удалял код что б зделать сервер без кода камаель. Что б код чище был без лишнего! Как бы так правельней а не просто отключить но и за заглушку спасибо!

А что по клиенту я знаю я не собираюсь убирать кнопку с линдвиор так просто я знаю что её не убрать и что и где в клиенте!Всё это делается через сервер!Кнопка то будет! Только толку от того что есть, она будет бездейственна если правельно зделать!Либо при нажатии на неё будет кидать не на камаель а на другую рассу!Те же люди!А изменить уже название кнопки куда проще!Да и вычистить клиент от камаель не помешает! Это фигова куча лишних мегабайт!Тот kamael.ukx или mkamael.utx и fkamael.utx, а сколько звуков и музыки которые принадлежат только камаель! Да и не кто не мешает поправить ещё и charactergrp.dat вычистив от камаель ко всему! И куча лишних строк с итемами камаель и скилами! И т.д! Скажем так мне нечего делать, вот я и решил поизвращаться, авось что выйдет! А не выйдит ну и бог с ним, зато буду знать что я попробывал! Не люблю сидеть без дела!

 

У меня по клиенту вообще в планах оставить только миханику линдвиор! А локи мобы и т.д оставить только до интерлюда примерно! Разве что может новые вещи в виде камалок оставить и пары таких мелочей и всё! Так же формулы расчёта по инту хп мп експ и т.д! Ну то уже если дела пойдёт, попрошу за магарычь кого то)))Так как в серверной части увы, но знаю только датапак, в ядре примерно знаю что где но яву саму не знаю, могу по мелочи по аналогу что то зделать, или перенести или убрать и т.д, но не более! Ну я к этому и не стремлюсь, как говориться у каждого должна быть своя работа!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело просто в том что в лобби кнопка - Kamael, пишется движком Engine.dll и не на что другое ты ее не заменишь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну и что что там кнопка мне она не мешает от того что она есть! Я ж говорил можно зделать что б она вообще не камаель вызывало миню а людей к примеру и всё! А почти все тексты в датках, там можно просто дать ей другое название. Я ещё правда не смотрел менюхи но старые клиенты были именно так! А вырезать кнопку мне и не надо! Зачем?Что б красивее было? Оно и так нормально! Я не дюмаю что лишняя кнопка и то которая адресует на людей или просто не чего не делает, помешает кому то! Тем более если в описании на сайте будет указано что нету рассы камаель!!!

Кстати пробывал затычку которую выложили выше, не помогает!

Делал как и сказали вот таким способом:

 for(ClassId cid : ClassId.VALUES)
 {
  if(cid.getId() == _classId && (!cid.isOfLevel(ClassLevel.First) || cid.getRace() == Race.kamael))
  {
   return;
  }
 }

Изменено пользователем webdes27

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну и что что там кнопка мне она не мешает от того что она есть! Я ж говорил можно зделать что б она вообще не камаель вызывало миню а людей к примеру и всё! А почти все тексты в датках, там можно просто дать ей другое название. Я ещё правда не смотрел менюхи но старые клиенты были именно так! А вырезать кнопку мне и не надо! Зачем?Что б красивее было? Оно и так нормально! Я не дюмаю что лишняя кнопка и то которая адресует на людей или просто не чего не делает, помешает кому то! Тем более если в описании на сайте будет указано что нету рассы камаель!!!

Кстати пробывал затычку которую выложили выше, не помогает!

Делал как и сказали вот таким способом:

for(ClassId cid : ClassId.VALUES)
{
if(cid.getId() == _classId && (!cid.isOfLevel(ClassLevel.First) || cid.getRace() == Race.kamael))
{
return;
}
}

pre_1378213638__tcl5eek.png

Название камаэль прописывается так же через Engine.dll , как и многое другое, никакие .dat или любые другие файлы, при этом не используются.

Изменено пользователем sauronhlmt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно мне про клиент часть сейчас всё равно.Что по клиенту можно я сам сеье зделаю.Меня интересует конкретно ядро сервера. И там можно зделать затычку что б расса не выбиралась камаель или в место неё другая была! Мне этого достаточно я не спрашую как убрать кнопку в клиенте!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно мне про клиент часть сейчас всё равно.Что по клиенту можно я сам сеье зделаю.Меня интересует конкретно ядро сервера. И там можно зделать затычку что б расса не выбиралась камаель или в место неё другая была! Мне этого достаточно я не спрашую как убрать кнопку в клиенте!

Я могу конечно 99-ый раз повторить - ВЫБОР РАССЫ ОСУЩЕСТВЛЯЕТСЯ ПО средствам клиента, и когда ты там меняешь что-то на сервере(Мнимую затычку) происходит кращ игры - понятно ?. При выборе рассы в любом случае - будет появляться кнопка с камаэлями.

Я убирал название самой кнопки(Kamael) "Упомянание" но сама по себе она там остается т.к. создана движком Engine.dll И при нажатии на нее вылетает, даже если там нету ничего(просто пустая кнопка).

 

P.S.

Можно конечно кое что простое сделать -но это будет мутно(точнее трудоемко).

Изменено пользователем sauronhlmt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тебе что делать нечего спасибо за усердное разьяснение но я сказал что я это знаю мне это не нужно я другое совсем спрашую, зачем ты ко мне со своим клиентом прицепился! Мне надо просто что б блин не создавалась расса камаель и не вылетала ошибка в сервере и всё!Что тут не понятного мне всё равно на кнопку есть она или нет! Я и сам зделал вырезав всю рассу что камаель не создаётся но ошибку кидает в гс при попытки создать так как пакет отправляет на создание рассы, вот мне и нужна затычка! Зачем мне твой енгайн я хз! И при желании если умеешь пользываться дизасемблером и идой и т.д, можно очень многое зделать с той же длл!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...