Актуально еще, нет? Ну ладно. Возни здесь нет вообще.
Что нужно сделать?
1) Выполнить в БД такой запрос:
ALTER TABLE characters ADD trader_skills_count INT DEFAULT 0;
Добавляет столбец trader_skills_count в конец таблицы character.
2) Правим файл L2PcInstance.java (Добавляем этот столбец уже в самом коде)
В строковых методах UPDATE_CHARACTER и RESTORE_CHARACTER по аналогии добавляем нашу колонку trader_skills_count (Это шаблоны запросов в БД)
Добавляем переменную с нашим счетчиком:
private int _traderSkillsCount = 0;
В методе createDb() по аналогии добавляем нашу колонку trader_skills_count:
con.prepareStatement("INSERT INTO characters (level, .... ,last_recom_date,trader_skills_count) values (?, .... ,?,?)");
Тут же заносим в параметр:
statement.setInt(ПОРЯДКОВЫЙ НОМЕР В ЗАПРОСЕ, getTraderSkillsCount());
Далее в методе restore(int objectId):
player.setTraderSkillsCount(rset.getInt("trader_skills_count"));
Где, догадаться не трудно, все аналогично.
Дальше в storeCharBase():
statement.setInt(ПОРЯДКОВЫЙ НОМЕР В ЗАПРОСЕ, getTraderSkillsCount());
statement.setInt(ПОСЛЕДНИЙ НОМЕР В ЗАПРОСЕ, getObjectId());
Ну и добавляем где-нибудь в конце файла пару методов:
public int getTraderSkillsCount()
{
return _traderSkillsCount;
}
public int setTraderSkillsCount(int value)
{
_traderSkillsCount = value;
}
Конечно, можно не допереть что-куда вставлять, чтобы понять, нужно просто взять какую-нибудь колонку из character.sql (pkkills к примеру) и просто в поиске по файлу смотреть где и как оно здесь фигурирует.
3) Теперь направляемся в файл L2TraderManagerInstance.java и изменяем байпасс:
if (command.startsWith("TraderSkillList"))
{
// Максимальное допустимое число покупки умений
final int maxCount = 10;
if (player.getTraderSkillsCount() < maxCount)
{
player.setSkillLearningClassId(player.getClassId());
showTraderSkillList(player);
}
else
{
player.sendMessage("Вы уже выучили " + maxCount + " умений!");
}
}
Ну и наконец инкрементируем счетчик в RequestAquireSkill:
Где-нибудь под этим:
SystemMessage sm = new SystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
sm.addItemName(costid);
sm.addItemNumber(costcount);
sendPacket(sm);
sm = null;
Вставляем это:
player.setTraderSkillsCount(player.getTraderSkillsCount() + 1);
Вот diff патч, для наглядности.
Ну как-то так, писалось почти на коленке, да и в блокноте, так что могут быть ошибки, если все же эта тема актуальна, обращайся.