SkipOver 2 Опубликовано 31 июля, 2012 (изменено) по сути код рабочий но в нем одна проблема , нпс не кушает итем , он тока смотрит если есть . Скрытый текст package com.l2jfrozen.gameserver.model.actor.instance; import com.l2jfrozen.Config; import com.l2jfrozen.gameserver.ai.CtrlIntention; import com.l2jfrozen.gameserver.datatables.SkillTable; import com.l2jfrozen.gameserver.datatables.sql.SkillTreeTable; import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance; import com.l2jfrozen.gameserver.model.Inventory; import com.l2jfrozen.gameserver.model.L2Skill; import com.l2jfrozen.gameserver.model.L2SkillLearn; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.l2jfrozen.util.database.L2DatabaseFactory; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.logging.Level; import javolution.text.TextBuilder; import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance; import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed; import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected; import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jfrozen.gameserver.network.serverpackets.StatusUpdate; import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation; import com.l2jfrozen.gameserver.templates.L2NpcTemplate; /** * * @author Token * */ public class L2AugmenterInstance extends L2FolkInstance { // MINI CONFIGS private final static int ITEM_ID = 4037; // what you need to learn skill (Donate Coin) private final static int ITEM_COUNT = 30; // how much Donate Coin you need private final static int MAX_SKILLS = 1; // max skills character can learn(used if you are putting skills directly to char not on weapon) private static int[] AUGMENT_SKILLS = {3134,3132,3138,3125,3246,3250}; // IMPORTANT needed if you are putting skills directly to char not on weapon public L2AugmenterInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(L2PcInstance player, String command) { if (player == null || player.getLastFolkNPC() == null || player.getLastFolkNPC().getObjectId() != this.getObjectId()) { return; } else if (command.equals("active")) { showActiveWindow(player, 0); } else if (command.equals("passive")) { showPassiveWindow(player, 0); } else if (command.equals("activeChar")) { showActiveCharWindow(player, 0); } else if (command.equals("passiveChar")) { showPassiveCharWindow(player, 0); } else if (command.equals("back")) { showChatWindow(player, 0); } else if (command.equals("duelMight")) { addAugment(player, 14863, 3134, 10); } else if (command.equals("might")) { addAugment(player, 14960, 3132, 10); } else if (command.equals("healEmpower")) { addAugment(player, 15125, 3138, 10); } else if (command.equals("battleRoar")) { addAugment(player, 15214, 3125, 10); } else if (command.equals("empower")) { addAugment(player, 15389, 3246, 10); } else if (command.equals("wildMagic")) { addAugment(player, 15446, 3250, 10); } else if (command.equals("duelMightChar")) { addAugmentChar(player, 14863, 3134, 10); } else if (command.equals("mightChar")) { addAugmentChar(player, 14960, 3132, 10); } else if (command.equals("healEmpowerChar")) { addAugmentChar(player, 15125, 3138, 10); } else if (command.equals("battleRoarChar")) { addAugmentChar(player, 15214, 3125, 10); } else if (command.equals("empowerChar")) { addAugmentChar(player, 15389, 3246, 10); } else if (command.equals("wildMagicChar")) { addAugmentChar(player, 15446, 3250, 10); } else return; } @Override public void onAction(L2PcInstance player) { if (!this.canTarget(player)) return; player.setLastFolkNPC(this); if(player.getTarget() != this) { player.setTarget(this); getAI(); MyTargetSelected my = new MyTargetSelected(getObjectId(), player.getLevel() - getLevel()); player.sendPacket(my); StatusUpdate su = new StatusUpdate(getObjectId()); su.addAttribute(StatusUpdate.CUR_HP, (int) getCurrentHp()); su.addAttribute(StatusUpdate.MAX_HP, getMaxHp()); player.sendPacket(su); player.sendPacket(new ValidateLocation(this)); } else { if(!isAutoAttackable(player)) showChatWindow(player, 0); else if(!player.isAlikeDead()) player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, this); player.sendPacket(new ValidateLocation(this)); player.sendPacket(ActionFailed.STATIC_PACKET); } } @Override public void showChatWindow(L2PcInstance player, int val) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>Augmenter</title><body><center><br>"); tb.append("<font color=LEVEL>Привествую "+ player.getName()+" </font><br>"); tb.append("Поставить скил в оружие<br>"); tb.append("<button value=\"Active\" action=\"bypass -h npc_%objectId%_active\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Passive\" action=\"bypass -h npc_%objectId%_passive\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("Поставить скил на чаре<br>"); tb.append("<button value=\"Active\" action=\"bypass -h npc_%objectId%_activeChar\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Passive\" action=\"bypass -h npc_%objectId%_passiveChar\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<br><br><br><span color=LEVEL>lol</span>"); NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId()); msg.setHtml(tb.toString()); msg.replace("%objectId%", String.valueOf(this.getObjectId())); player.sendPacket(msg); } public void showActiveWindow(L2PcInstance player, int val) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>Augmenter</title><body><center><br>"); tb.append("<button value=\"DuelMight\" action=\"bypass -h npc_%objectId%_focus\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Heal Emp\" action=\"bypass -h npc_%objectId%_healEmpower\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Might\" action=\"bypass -h npc_%objectId%_might\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<br/><button value=\"Back\" action=\"bypass -h npc_%objectId%_back\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId()); msg.setHtml(tb.toString()); msg.replace("%objectId%", String.valueOf(this.getObjectId())); player.sendPacket(msg); } public void showActiveCharWindow(L2PcInstance player, int val) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>Augmenter Char</title><body><center><br>"); tb.append("<button value=\"DuelMight\" action=\"bypass -h npc_%objectId%_focusChar\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Heal Emp\" action=\"bypass -h npc_%objectId%_healEmpowerChar\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Might\" action=\"bypass -h npc_%objectId%_mightChar\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<br/><button value=\"Back\" action=\"bypass -h npc_%objectId%_back\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId()); msg.setHtml(tb.toString()); msg.replace("%objectId%", String.valueOf(this.getObjectId())); player.sendPacket(msg); } public void showPassiveWindow(L2PcInstance player, int val) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>Augmenter</title><body><center><br>"); tb.append("<button value=\"Battle Road\" action=\"bypass -h npc_%objectId%_magicBarrier\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Empower\" action=\"bypass -h npc_%objectId%_empower\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Wild magic\" action=\"bypass -h npc_%objectId%_wildMagic\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<br/><button value=\"Back\" action=\"bypass -h npc_%objectId%_back\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId()); msg.setHtml(tb.toString()); msg.replace("%objectId%", String.valueOf(this.getObjectId())); player.sendPacket(msg); } public void showPassiveCharWindow(L2PcInstance player, int val) { TextBuilder tb = new TextBuilder(); tb.append("<html><title>Augmenter Char</title><body><center><br>"); tb.append("<button value=\"Battle Road\" action=\"bypass -h npc_%objectId%_magicBarrierChar\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Empower\" action=\"bypass -h npc_%objectId%_empowerChar\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<button value=\"Wild magic\" action=\"bypass -h npc_%objectId%_wildMagicChar\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); tb.append("<br/><button value=\"Back\" action=\"bypass -h npc_%objectId%_back\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"); NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId()); msg.setHtml(tb.toString()); msg.replace("%objectId%", String.valueOf(this.getObjectId())); player.sendPacket(msg); } private static void addAugment(L2PcInstance player, int attribute, int skill, int level) { L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND); if (item == null) { player.sendMessage("You have to equip a weapon."); return; } if (player.getInventory().getInventoryItemCount(ITEM_ID, -1) < ITEM_COUNT) { player.sendMessage("You dont have enough item."); return; } if (item.isAugmented()) { player.sendMessage("Remove augment first."); return; } Connection con = null; try { player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true); con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("REPLACE INTO augmentations VALUES(?,?,?,?)"); statement.setInt(1, item.getObjectId()); statement.setInt(2, attribute*65536+1); statement.setInt(3, skill); statement.setInt(4, level); statement.executeUpdate(); player.sendMessage("Succesfully augmented. You have to relog now."); statement.close(); } catch (Exception e) { _log.log(Level.SEVERE, "Could not augment item: "+item.getObjectId()+" ", e); } finally { L2DatabaseFactory.close(con); } } private static void addAugmentChar(L2PcInstance player, int attribute, int auguSkillId, int level) { final Set<Integer> values = new HashSet<Integer>(); boolean doHave = false; int counter = 0; for(int i : AUGMENT_SKILLS) values.add(i); // loop through all skills of player and check how muck augu skills he have for(L2Skill skills : player.getAllSkills()) { int skillid = skills.getId(); if(skillid == auguSkillId) { doHave = true; } if(values.contains(skillid)) { counter++; } } if(doHave == true) { player.sendMessage("You already have this skill"); return; } if(counter>=MAX_SKILLS) { player.sendMessage("Cant learn anymore skills"); counter = 0; return; } L2Skill skill = null; try { skill = SkillTable.getInstance().getInfo(auguSkillId, level); } catch(Exception e) { if(Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace(); } if(skill != null) { String name = skill.getName(); player.sendMessage("You have got skill " + name + "."); player.addSkill(skill, true); ///activeChar.sendSkillList(); name = null; } else { player.sendMessage("Oops error."); return; } skill = null; player = null; } } Изменено 31 июля, 2012 пользователем SkipOver Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SkipOver 2 Опубликовано 31 июля, 2012 никто не знает? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AlexMan 27 Опубликовано 31 июля, 2012 (изменено) Скрытый текст try { player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true); skill = SkillTable.getInstance().getInfo(auguSkillId, level); } а вот покупка лс в пушку жрет итемскрипт выше это сунь в метод addAugmentChar Скрытый текст try { skill = SkillTable.getInstance().getInfo(auguSkillId, level); } если не поможет пиши в аську Изменено 31 июля, 2012 пользователем AlexMan Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SkipOver 2 Опубликовано 31 июля, 2012 по подробней пожалуйста , я не особо вбрубаюсь если честно что и где пихать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AlexMan 27 Опубликовано 31 июля, 2012 361 строка видем skill = SkillTable.getInstance().getInfo(auguSkillId, level); ставим выше player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true); и получается у нас player.destroyItemByItemId("Consume", ITEM_ID, ITEM_COUNT, player, true); skill = SkillTable.getInstance().getInfo(auguSkillId, level); все ясно так? и не забываем ставить спасибки Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SkipOver 2 Опубликовано 31 июля, 2012 спасибо огромное , выручил) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SkipOver 2 Опубликовано 31 июля, 2012 Тема /close Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
HunTxD 1 Опубликовано 12 октября, 2012 А у меня глупый вопрос... Закинул этот код в ядро, L2AugmenterInstance.java, скомпилировал сборку, а что дальше то? Как прописать байпасс на открытие диалога продажи? Как правильно добавить конфиг ENABLE_ALL_EXCEPTIONS и что он вообще значит? З.ы. Просьба сильно не пинать, в яве полный 0 (пока что)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты