KOltin 1 Опубликовано 23 октября, 2019 Добрый всем день. При покупке ПА не добавляется скил ноблеса, появляется он только после ап лвла. в какую сторону копать подскажите?) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KATEKATE 10 Опубликовано 23 октября, 2019 Думаю скрипт ПА нужно смотреть Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Formatter 14 Опубликовано 23 октября, 2019 player.sendPacket(new SkillList(player)); или что-то подобное Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
mrS4Z 8 Опубликовано 23 октября, 2019 Должен быть метод, player.setNobless(true)... смотря какая сборка.. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 23 октября, 2019 39 минут назад, mrS4Z сказал: Должен быть метод, player.setNobless(true)... смотря какая сборка.. А если нет метода, что будешь делать) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KOltin 1 Опубликовано 23 октября, 2019 package custom.ServiceManager; import java.io.File; import java.io.FileReader; import java.io.LineNumberReader; import java.util.HashMap; import java.util.Map; import ru.catssoftware.gameserver.datatables.ItemTable; import ru.catssoftware.gameserver.handler.IVoicedCommandHandler; import ru.catssoftware.gameserver.handler.VoicedCommandHandler; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.quest.Quest; import ru.catssoftware.gameserver.model.quest.QuestState; import ru.catssoftware.gameserver.util.PcAction; import ru.catssoftware.util.Log; //import javolution.text.TextBuilder; import ru.catssoftware.gameserver.network.serverpackets.PlaySound; import ru.catssoftware.gameserver.network.serverpackets.PledgeSkillList; import ru.catssoftware.gameserver.datatables.SkillTable; public class ServiceManager extends Quest { private static String qn = "ServiceManager"; private static class Price { private int[] _itemId; private int[] _prices; public Price(int[] items, int[] count) { _itemId = items; _prices = count; } } private static Map<Integer, Price> _premiumPrice = new HashMap<Integer, Price>(); private static Map<Integer, Price> _heroPrice = new HashMap<Integer, Price>(); private static Price _colorPrice = new Price(new int[]{4037}, new int[]{10}); private static Price _NoblesPrice = new Price(new int[]{4037}, new int[]{3}); private static Price _ClanSkills = new Price(new int[]{4037}, new int[]{35}); //private static Price _setNamePrice = new Price(new int[]{4037}, new int[]{10}); private static Price _nullPK = new Price(new int[]{4037}, new int[]{10}); private static Price _clanlvl8 = new Price(new int[]{4037}, new int[]{15}); private static Price _crp10k = new Price(new int[]{4037}, new int[]{3}); private String colorTable = ""; private String colorTable2 = ""; public ServiceManager() { super(-1, qn, "quests"); // ================= ЦЕНЫ НА ДВОРЯНСТВО ======== // дни, new Price(new int[] {через , ИД предметов},new int[] {через , количество}); _premiumPrice.put(1, new Price(new int[]{4037}, new int[]{3})); _premiumPrice.put(3, new Price(new int[]{4037}, new int[]{7})); _premiumPrice.put(7, new Price(new int[]{4037}, new int[]{15})); // ================ ЦЕНЫ НА ГЕРОИЗМ =============== _heroPrice.put(3, new Price(new int[]{4037}, new int[]{12})); _heroPrice.put(7, new Price(new int[]{4037}, new int[]{28})); _heroPrice.put(14, new Price(new int[]{4037}, new int[]{50})); _heroPrice.put(21, new Price(new int[]{4037}, new int[]{70})); _heroPrice.put(31, new Price(new int[]{4037}, new int[]{100})); // Таблица цветов из colors.table File f = new File(getScriptFile()); try { LineNumberReader lnr = new LineNumberReader(new FileReader(f.getParent() + "/colors.table")); String line; while ((line = lnr.readLine()) != null) { String[] colors = line.split("\t"); colorTable += "<tr>"; colorTable2 += "<tr>"; for (int i = 0; i < colors.length; i++) { colorTable += "<td><a action=\"bypass -h Quest " + qn + " color " + colors[i] + "\"><font color=\"" + colors[i] + "\">%name%</font></a></td>"; colorTable2 += "<td><a action=\"bypass -h Quest " + qn + " color2 " + colors[i] + "\"><font color=\"" + colors[i] + "\">%name%</font></a></td>"; } colorTable += "</tr>"; colorTable2 += "</tr>"; } lnr.close(); } catch (Exception e) { System.out.println("Error reading " + f.getParent() + "/colors.table"); } } private boolean checkMoney(L2PcInstance player, Price price) { for (int i = 0; i < price._itemId.length; i++) // Проверяем средства { if (player.getInventory().getItemByItemId(price._itemId[i]) == null || player.getInventory().getItemByItemId(price._itemId[i]).getCount() < price._prices[i]) { return false; // Нет денег? Сории } } for (int i = 0; i < price._itemId.length; i++) // Отнимаем средства у населения { if (!player.destroyItemByItemId(qn, price._itemId[i], price._prices[i], null, true)) { return false; } } return true; } @Override public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player) { String[] args = event.split(" "); // Разбираем строку параметров if (args[0].equals("premiumlist")) { // Формируем список доступных дней премиума String html = "<html><body><br>Покупка премиума:<br><center>"; for (int days : _premiumPrice.keySet()) { html += "<a action=\"bypass -h Quest " + qn + " premium " + days + "\">На " + days + " дней</a> -"; Price price = _premiumPrice.get(days); for (int i = 0; i < price._itemId.length; i++) { // Формируем список стоимости if (i != 0) // Добавляем , { html += ","; } html += price._prices[i] + " " + ItemTable.getInstance().getTemplate(price._itemId[i]).getName(); } } html += "</center></body></html>"; return html; } else if (args[0].equals("herolist")) { // Список достпуного геройства, аналогично премиуму return "herolist.htm"; } else if (args[0].equals("nothing")) { // Список достпуного геройства, аналогично премиуму return "nothing.htm"; } else if (args[0].equals("premium")) { // Выдаем премиум if (player.getPremiumService() != 0) // Проверяем а не премимум ли чар? { return "already-premium"+player.getLang()+".htm"; } int numDays = 0; Price price = null; try { numDays = Integer.parseInt(args[1]); // В Java массивы нумеруются с 0 price = _premiumPrice.get(numDays); // Ищем цену в списке цен } catch (Exception e) { price = null; } if (price == null) // Не нашли. Что-то тут не то... { return "invalid-param"+player.getLang()+".htm"; } if (!checkMoney(player, price)) // Проверяем деньги { return "no-money"+player.getLang()+".htm"; } PcAction.addPremiumServices(player, numDays, player.getAccountName()); // Выдаем премиум Log.donate("Premium", player.getFingerPrints()); // Показываем .premium меню IVoicedCommandHandler premium = VoicedCommandHandler.getInstance().getVoicedCommandHandler("premium"); if (premium != null) { premium.useVoicedCommand("premium", player, null); } else { return "success"+player.getLang()+".htm"; } } else if (args[0].equals("noblese")) { // Дворянство if (player.isNoble()) // Игрок уже нубл { return "already-noble"+player.getLang()+".htm"; } if (!checkMoney(player, _NoblesPrice)) // Проверяем Деньги { return "no-money"+player.getLang()+".htm"; } player.setNoble(true); // Даем нубла Log.donate("Noble", player.getFingerPrints()); return "success"+player.getLang()+".htm"; } else if (args[0].equals("service")) { return "service"+player.getLang()+".htm"; } else if (args[0].equals("shop")) { return "shop"+player.getLang()+".htm"; } else if (args[0].equals("nullpk")) { return "nullpk"+player.getLang()+".htm"; } else if (args[0].equals("clan")) { return "clan"+player.getLang()+".htm"; } else if (args[0].equals("skills")) { if (!player.isClanLeader()) // Игрок не кланлидер { return "noclan-leader"+player.getLang()+".htm"; } if (!checkMoney(player, _ClanSkills)) // Проверяем Деньги { return "no-money"+player.getLang()+".htm"; } player.getClan().addNewSkill(SkillTable.getInstance().getInfo(370,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(371,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(372,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(373,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(374,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(375,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(376,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(377,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(378,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(379,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(380,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(381,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(382,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(383,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(384,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(385,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(386,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(387,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(388,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(389,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(390,3)); player.getClan().addNewSkill(SkillTable.getInstance().getInfo(391,1)); player.getClan().broadcastToOnlineMembers(new PledgeSkillList(player.getClan())); player.sendPacket(new PlaySound("ItemSound.quest_finish")); Log.donate("HeroStatus", player.getFingerPrints()); return "success"+player.getLang()+".htm"; } else if (args[0].equals("hero")) { // Геройство if (player.isHero()) { return "already-hero"+player.getLang()+".htm"; } int numDays = 0; Price price = null; try { numDays = Integer.parseInt(args[1]); // В Java массивы нумеруются с 0 price = _premiumPrice.get(numDays); // Ищем цену в списке цен } catch (Exception e) { price = null; } if (price == null) // Не нашли. Что-то тут не то... { return "invalid-param"+player.getLang()+".htm"; } if (!checkMoney(player, price)) // Проверяем Деньги { return "no-money"+player.getLang()+".htm"; } PcAction.addHeroStatus(player, numDays); // Даем героя России. Log.donate("HeroStatus", player.getFingerPrints()); return "success"+player.getLang()+".htm"; } else if (args[0].equals("colorlist")) { // Список цветов String prices = ""; for (int i = 0; i < _colorPrice._itemId.length; i++) // Проверяем средства { prices += _colorPrice._prices[i] + " " + ItemTable.getInstance().getItemName(_colorPrice._itemId[i]) + "<br>"; } return "<html><body><center>Цвет ника<br><br>Стоимость услуги: " + prices + "<br>" + "<button value=\"Продолжить\" action=\"bypass -h Quest ServiceManager colorlistok\" width=93 height=22 back=\"saitan.But2\" fore=\"saitan.But3\"></center></body></html>."; } else if (args[0].equals("colorlistok")) { // Список цветов String html = "<html><body><br>Выбор цвета<table width=220>"; html += (colorTable.replace("%name%", player.getName())); html += "</table></body></html>"; return html; } else if (args[0].equals("color")) { //Смена цвета if (!checkMoney(player, _colorPrice)) { return "no-money"+player.getLang()+".htm"; } int color = 0; /* try { String nicknamess = (new TextBuilder(""+args[1])).reverse().toString(); color = Integer.decode((new StringBuilder()).append("0x").append(nicknamess).toString()); } catch (Exception e) { color = 0; } if (color == 0) // Не нашли. Что-то тут не то... { return "invalid-param"+player.getLang()+".htm"; } */ try { color = Integer.parseInt(args[1], 16); // Получаем цвет и меняем старший и младший байты } catch (Exception e) { color = 0; } if (color == 0) // Не нашли. Что-то тут не то... { return "invalid-param.htm"; } color = (color & 0xFF) << 16 | (color & 0xff0000) >> 16 | (color & 0xff00); // Меняем цвет и посылаем всем пакет что цвет сменен player.getAppearance().setNameColor(color); player.broadcastFullInfo(); Log.donate("Color", player.getFingerPrints() + ", NameColor: " + args[1]); return "success"+player.getLang()+".htm"; } else if (args[0].equals("colorlist2")) { // Список цветов String prices = ""; for (int i = 0; i < _colorPrice._itemId.length; i++) // Проверяем средства { prices += _colorPrice._prices[i] + " " + ItemTable.getInstance().getItemName(_colorPrice._itemId[i]) + "<br>"; } return "<html><body><center>Цвет ника<br><br>Стоимость услуги: " + prices + "<br>" + "<button value=\"Продолжить\" action=\"bypass -h Quest ServiceManager colorlist2ok\" width=93 height=22 back=\"saitan.But2\" fore=\"saitan.But3\"></center></body></html>."; } else if (args[0].equals("colorlist2ok")) { // Список цветов String html = "<html><body><br>Выбор цвета<table width=220>"; html += (colorTable2.replace("%name%", player.getName())); html += "</table></body></html>"; return html; } else if (args[0].equals("color2")) { //Смена цвета if (!checkMoney(player, _colorPrice)) { return "no-money"+player.getLang()+".htm"; } int color = 0; /* try { String nicknamess = (new TextBuilder(""+args[1])).reverse().toString(); color = Integer.decode((new StringBuilder()).append("0x").append(nicknamess).toString()); } catch (Exception e) { color = 0; } if (color == 0) // Не нашли. Что-то тут не то... { return "invalid-param"+player.getLang()+".htm"; } */ try { color = Integer.parseInt(args[1], 16); // Получаем цвет и меняем старший и младший байты } catch (Exception e) { color = 0; } if (color == 0) // Не нашли. Что-то тут не то... { return "invalid-param.htm"; } color = (color & 0xFF) << 16 | (color & 0xff0000) >> 16 | (color & 0xff00); // Меняем цвет и посылаем всем пакет что цвет сменен player.getAppearance().setTitleColor(color); player.broadcastFullInfo(); Log.donate("Color", player.getFingerPrints() + ", TitleColor: " + args[1]); return "success"+player.getLang()+".htm"; } else if (args[0].equals("htmsetname")) { // Смена ника return "setnamehtm"+player.getLang()+".htm"; } else if (args[0].equals("setname")) { // Смена ника /*String nick = args[1]; if (nick.contains("?") || nick.contains("/") || nick.contains(";") || nick.contains(" ") || nick.contains(",")) { player.sendMessage("Ник не может содержать ? или ; или , или /");//Проверили на некоторые символы, вернули страницу ошибки return "invalid-param.htm"; } if (player.isClanLeader()) { player.sendMessage("Передайте клан другому персонажу на время смены ника!");//Проверили на Клство return "invalid-param.htm"; } if (!checkMoney(player, _setNamePrice)) // Проверяем Деньги { return "no-money.htm"; } player.setName(nick);// даем новый ник player.broadcastFullInfo(); player.sendMessage("Ваш ник удачно изменен на " + nick); return "success.htm";*/ return "invalid-param"+player.getLang()+".htm"; } else if (args[0].equals("nullpk")) { // Обнуление пк и кармы String prices = ""; for (int i = 0; i < _nullPK._itemId.length; i++) // Проверяем средства { prices += _nullPK._prices[i] + " " + ItemTable.getInstance().getItemName(_nullPK._itemId[i]) + "<br>"; } return "<html><body><center>Обнуление ПК<br><br>Стоимость услуги: " + prices + "<br>" + "<button value=\"Продолжить\" action=\"bypass -h Quest ServiceManager nullpkok\" width=93 height=22 back=\"saitan.But2\" fore=\"saitan.But3\"></body></center></html>."; } else if (args[0].equals("nullpkok")) { // Обнуление пк и кармы if (player.getPkKills() == 0) { // У игрока 0 пк player.sendMessage("У вас 0 ПК"); return "invalid-param"+player.getLang()+".htm"; } if (!checkMoney(player, _nullPK)) // Проверяем Деньги { return "no-money"+player.getLang()+".htm"; } player.setPkKills(0); // Обнуляем ПК player.setKarma(0); // Обнуляем карму player.sendMessage("Теперь у вас 0 ПК и 0 кармы!"); Log.donate("nullpk", player.getFingerPrints()); //return "<html><body><center><br><br>Теперь у вас 0 ПК и 0 кармы!<img src=\"l2ui.squaregray\" width=\"295\" height=\"1\"><br><br><tr><td><button value=\"Назад\" action=\"bypass -h Quest ServiceManager\" width=93 height=22 back=\"saitan.But2\" fore=\"saitan.But3\"></td></tr></center></body></html>."; return "success"+player.getLang()+".htm"; } else if (args[0].equals("clanlvl8")) { // 8 clan lvl if (player.getClan() == null || player.getClan().getLevel() < 5) //клан больше 5? { player.sendMessage("Уровень клана должен быть 5 или выше!"); //return "invalid-param"+player.getLang()+".htm"; return "<html><body><center><br><br>Уровень клана должен быть 5 или выше!<img src=\"l2ui.squaregray\" width=\"295\" height=\"1\"><br><br><tr><td><button value=\"Назад\" action=\"bypass -h Quest ServiceManager\" width=93 height=22 back=\"saitan.But2\" fore=\"saitan.But3\"></td></tr></center></body></html>."; } if (player.getClan() == null || player.getClan().getLevel() >= 8) //клан больше 5? { player.sendMessage("Уровень клана должен быть меньше 8 лвл!"); //return "invalid-param"+player.getLang()+".htm"; return "<html><body><center><br><br>Уровень клана должен быть меньше 8 лвл!<img src=\"l2ui.squaregray\" width=\"295\" height=\"1\"><br><br><tr><td><button value=\"Назад\" action=\"bypass -h Quest ServiceManager\" width=93 height=22 back=\"saitan.But2\" fore=\"saitan.But3\"></td></tr></center></body></html>."; } if (!checkMoney(player, _clanlvl8)) // Проверяем Деньги { return "no-money"+player.getLang()+".htm"; } player.getClan().changeLevel(8); // Делаем 8 лвл клану player.getClan().store(); player.sendMessage("Уровень клана: "+player.getClan().getLevel()+" лвл."); Log.donate("clanlvl8", player.getFingerPrints()); return "success"+player.getLang()+".htm"; } else if (args[0].equals("crp10k")) { // клан 10k crp if (player.getClan() == null || player.getClan().getLevel() <= 5) //клан больше 5? { player.sendMessage("Уровень клана должен быть 6 или выше!"); //return "invalid-param"+player.getLang()+".htm"; return "<html><body><center><br><br>Уровень клана должен быть 5 или выше!<img src=\"l2ui.squaregray\" width=\"295\" height=\"1\"><br><br><tr><td><button value=\"Назад\" action=\"bypass -h Quest ServiceManager\" width=93 height=22 back=\"saitan.But2\" fore=\"saitan.But3\"></td></tr></center></body></html>."; } if (!checkMoney(player, _crp10k)) // Проверяем Деньги { return "no-money"+player.getLang()+".htm"; } player.getClan().setReputationScore(player.getClan().getReputationScore() + 10000, true); // даем 10к крп //player.getClan().store(); player.sendMessage("Репутация клана: "+player.getClan().getReputationScore()+" очков."); Log.donate("crp10k", player.getFingerPrints()); return "success"+player.getLang()+".htm"; } else if (event.startsWith("lang")) { try { player.setChatLanguage(Integer.parseInt(event.substring(5))); } catch (Exception e) { } } return "hello"+player.getLang()+".htm"; } @Override public String onFirstTalk(L2NpcInstance npc, L2PcInstance player) { return onTalk(npc, player); } @Override public String onTalk(L2NpcInstance npc, L2PcInstance player) { QuestState qs = player.getQuestState(qn); if (qs == null) { qs = newQuestState(player); } return "hello"+player.getLang()+".htm"; } public static void main(String[] args) { ServiceManager ps = new ServiceManager(); ps.addFirstTalkId(50016); // Мы не хотим писать диалог для этого НПЦ ps.addStartNpc(50016); // Автоматический контроль состояния квеста ps.addTalkId(50016); // NPC с которым можно говорить. } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LordWinter 78 Опубликовано 23 октября, 2019 проверяйте класс setNoble в L2PcInstance.java он должен задавать нужные скилы Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Formatter 14 Опубликовано 23 октября, 2019 Скилл то дает, просто клиенту не отправляется обновленный список скиллов. Можно проверить релогом Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
mrS4Z 8 Опубликовано 24 октября, 2019 16 часов назад, Solution сказал: А если нет метода, что будешь делать) Создам свой метод Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KOltin 1 Опубликовано 24 октября, 2019 18 часов назад, Formatter сказал: Скилл то дает, просто клиенту не отправляется обновленный список скиллов. Можно проверить релогом в том то и дело что релог не помогает Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты