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

ПА скилы

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

Добрый всем день. При покупке ПА не добавляется скил ноблеса, появляется он только после ап лвла. в какую сторону копать подскажите?)

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


Ссылка на сообщение
Поделиться на другие сайты
player.sendPacket(new SkillList(player));

или что-то подобное

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


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

Должен быть метод, player.setNobless(true)... смотря какая сборка..

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


Ссылка на сообщение
Поделиться на другие сайты
39 минут назад, mrS4Z сказал:

Должен быть метод, player.setNobless(true)... смотря какая сборка..

А если нет метода, что будешь делать)

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


Ссылка на сообщение
Поделиться на другие сайты
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 с которым можно говорить.
    }
}

 

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


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

проверяйте класс

setNoble

в

L2PcInstance.java

он должен задавать нужные скилы

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


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

Скилл то дает, просто клиенту не отправляется обновленный список скиллов. Можно проверить релогом

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


Ссылка на сообщение
Поделиться на другие сайты
16 часов назад, Solution сказал:

А если нет метода, что будешь делать)

Создам свой метод ;)

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


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

Скилл то дает, просто клиенту не отправляется обновленный список скиллов. Можно проверить релогом

в том то и дело что релог не помогает

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


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

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

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

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

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

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

Войти

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

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

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

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

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