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

Помощь Java

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

Всем привет .

У меня есть скрипт skillseller то есть нпц продающий скилы от других професий .

  Показать контент

 

Идём к сути .

Я хочю добавить в скрипт такой момент , как максимум покупаемых скилов .

Вот весь вопрос как реализовать в этом скрипте ограничение на максимум покупки скилов .

Всем за полезные советы +

 

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


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

завести счетчик купленных игроком скиллов, инкрементить его при покупке скиллов + проверять его значение при попытке покупки - если значение достигло лимита - не давать учить.

не знаю как в этой сборке, но наверняка же есть что-то типа хранилища любых переменных для игрока, как к примеру в фениксе/овере таблица character_variables и методы работы с ней.

 

другой путь - более замороченный и сложный: считать сколько у игрока есть "левых" скиллов, т.е. от других проф и действовать по обстоятельствам. прокатит только если есть какие нибудь методы проверки допустимости выученных скиллов для профы, и не факт что они есть - иначе бы и мультипрофа не прокатила.

Изменено пользователем Gaikotsu
  • Upvote 1

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


Ссылка на сообщение
Поделиться на другие сайты
  В 12.11.2013 в 18:09, Gaikotsu сказал:

завести счетчик купленных игроком скиллов, инкрементить его при покупке скиллов + проверять его значение при попытке покупки - если значение достигло лимита - не давать учить.

 

не знаю как в этой сборке, но наверняка же есть что-то типа хранилища любых переменных для игрока, как к примеру в фениксе/овере таблица character_variables и методы работы с ней.

Честно сказать , не очень понял что вы написали , как в java недавно .

Но спасибо за попытку .

Вобще это скрипт под фрозенов хочю дополнить ограничением и адаптировать под акис.

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


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

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

 

З.Ы. хотя на фениксе/овере подобные проверки заняли бы всего несколько строк, а тут - хз.

Изменено пользователем Gaikotsu
  • Upvote 1

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


Ссылка на сообщение
Поделиться на другие сайты
  В 12.11.2013 в 18:15, Gaikotsu сказал:

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

 

З.Ы. хотя на фениксе/овере подобные проверки заняли бы всего несколько строк, а тут - хз.

Печально ...

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


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

Актуально еще, нет? Ну ладно. Возни здесь нет вообще.

 

Что нужно сделать?

 

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 патч, для наглядности.

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

  • Upvote 1

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


Ссылка на сообщение
Поделиться на другие сайты
  В 16.11.2013 в 13:45, Nha сказал:

Актуально еще, нет? Ну ладно. Возни здесь нет вообще.

 

Что нужно сделать?

 

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 патч, для наглядности.

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

Спасибо непременно попробую .

Оставь скайп , думаю будут вопросы :)

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


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

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

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

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

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

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

Войти

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

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

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

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

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