проверка на мейн класс

deadly4283

Свой человек
Пользователь
Сообщения
17
Розыгрыши
0
Репутация
0
Реакции
1
Баллы
525
Хроники
  1. Chaotic Throne: High Five
Сборка
fandc
Добрый день форумчане! Есть проблемка в сборке fandc. В КБ есть возможность брать саб класс, если ты эльф то страница сабклассов на темного эльфа пустая, однако через адреналин можно напрямую кинуть байпасс с ID класса, хоть хуман файтера, хоть камаеля, хоть любую третью профу. ДА может брать саб на Паладина, БД на СвСа и т.д.

Вот часть кода где вызывается байпасс для добавления нового саба. Может у кого есть идеи? Спасибо!
private static void addNewSubPage(Player player, String raceName)
{
Race race = Race.valueOf(raceName);
Set<PlayerClass> allSubs = VillageMasterInstance.getAllAvailableSubs(player, true);
allSubs = getSubsByRace(allSubs, race);

PlayerClass[] arraySubs = new PlayerClass[allSubs.size()];
arraySubs = allSubs.toArray(arraySubs);

String[] replacements = new String[FIELDS_IN_SUB_SELECT_PAGE * 2];
for(int i = 0; i < FIELDS_IN_SUB_SELECT_PAGE; i++)
{
replacements[i * 2] = "%sub" + i + '%';
if(arraySubs.length <= i)
replacements[i * 2 + 1] = "<br>";
else
{
PlayerClass playerClass = arraySubs;
replacements[i * 2 + 1] = "<button value=\"Add " + playerClass.name() + "\" action=\"bypass _bbsAddNewSub_" + playerClass.ordinal() + "\" width=200 height=30 back=\"L2UI_CT1.OlympiadWnd_DF_Fight1None_Down\" fore=\"L2UI_ct1.OlympiadWnd_DF_Fight1None\">";
}
}
sendFileToPlayer(player, "smallNpcs/subclassChanger_select.htm", true, replacements);
}

При стандартном взятии суб класса в PlayerClass.java есть вот такой код, для проверки совместимости классов:
public static boolean areClassesComportable(PlayerClass c1, PlayerClass c2)
{
if (c1.isOfRace(Race.kamael) != c2.isOfRace(Race.kamael))
return false; // камаэли только с камаэлями
if (c1.isOfRace(Race.elf) && c2.isOfRace(Race.darkelf) || c1.isOfRace(Race.darkelf) && c2.isOfRace(Race.elf))
return false; // эльфы несовместимы с темными
if (c1 == PlayerClass.Overlord || c1 == PlayerClass.Warsmith || c2 == PlayerClass.Overlord || c2 == PlayerClass.Warsmith)
return false; // эти вообще
if (subclassSetMap.get(c1) == subclassSetMap.get(c2))
return false; // однотипные
return true;
}

Как что-то подобное добавить для КБ и в каком это месте лежит чет не могу сообразить.
 
Купить защиту, сменить сборку.
 
Купить защиту, сменить сборку.
Чтож так кардинально Защита, по крайней мере смартгвардовская, никак на это не реагирует. Наверняка же есть способы просто добавить проверку. А сборка довольно неплохая, не знаю почему вы так)
 
Нужно добавить проверки в самом скрипте взятия сабов через alt+B.
Вероятно, что создатели того скрипта, о том просто не задумывались. Что будет если напрямую указывать ID.
А просто решили сделать "стрингом"....

Делов минут на 10 в самом деле то.

Сделай отдельные обозначения в самом скрипте каждому виду классов (их там не так много будет, возьми стандартную мап-часть из обычного скрипта по сабам, там обозначаются классы под каждый вариант саба - находится там же в PlayerClass.java только повыше того что ты скинул.)
Обозначения будут нечто типо: knight, mage, heler и т.д.

Затем в сам скрипт впиши на каждый под-вид проверки и сделай указание для каждого.

Например, если основа относится к списку knight`а, то тут можно или сделать, чтобы он не брал такие же или тупо вручную указать какие именно ID проф данной мапе запрещено брать.

Типо, если основа относится к knight и мы пробуем брать knight, то return; - можно даже перед ретурном отправить сообщение этому человеку аля: - "Вот тебе подарочек педик". И к примеру следом удалять чара кто попытался это сделать.

ну и так по аналогии со всеми классами и т.д. Просто постарайся не забыть указать в проверку какую-либо профу.

Тогда все будет нормально

Ну и еще там же сделай еще проверку, лучше в самом начале, что можно брать классы исключительно вторые.
(Это закроет проблему если кто-то укажет нулевые профы или третьи.)

Как это сделать? Если не можешь сделать через стандартные запросы, сделай перечислением.
Обычный инт, в который пишешь через запятую все реальные ID проф которые можно взять.

Ну, а следом уже идут проверки местечковые, которые будут смотреть на расу, или принадлежность к мапам.