Joirik 1 Опубликовано 3 февраля, 2015 (изменено) Здравствуйте все.Вот код магазина улучшений. package ru.catssoftware.gameserver.model.actor.instance; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.HashMap; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; import javolution.text.TextBuilder; import ru.catssoftware.L2DatabaseFactory; import ru.catssoftware.gameserver.cache.HtmCache; import ru.catssoftware.gameserver.datatables.ItemTable; import ru.catssoftware.gameserver.datatables.SkillTable; import ru.catssoftware.gameserver.model.L2Augmentation; import ru.catssoftware.gameserver.model.L2ItemInstance; import ru.catssoftware.gameserver.model.itemcontainer.Inventory; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.network.serverpackets.ActionFailed; import ru.catssoftware.gameserver.network.serverpackets.ExShowScreenMessage; import ru.catssoftware.gameserver.network.serverpackets.ExVariationCancelResult; import ru.catssoftware.gameserver.network.serverpackets.InventoryUpdate; import ru.catssoftware.gameserver.network.serverpackets.NpcHtmlMessage; import ru.catssoftware.gameserver.network.serverpackets.StatusUpdate; import ru.catssoftware.gameserver.templates.chars.L2NpcTemplate; public class L2AugmentShopInstance extends L2NpcInstance { protected static final Logger _log = Logger.getLogger(L2AugmentShopInstance.class.getName()); public L2AugmentShopInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } public String getHtmlPath(int npcId, int val) { String pom = "augmentshop"; if (val == 0) { pom = "augmentshop"; } else { pom = "augmentshop-" + val; } return "data/html/custom/" + pom + ".htm"; } private void sendHTML(L2PcInstance activeChar, String headtext, TextBuilder text) { if(headtext == null || headtext.length() == 0) headtext = "Augmentation Shop"; TextBuilder replyMSG = new TextBuilder(); replyMSG.append("<html><body>"); replyMSG.append("<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"); replyMSG.append("<font color=\"LEVEL\">" + headtext + "</font></center><br>"); replyMSG.append(text); replyMSG.append("<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"); replyMSG.append("<center><font color=\"A2A0A2\">Augmentation Shop</font> (c) <font color=\"B09878\">Mentor</font></center><br>"); replyMSG.append("</body></html>"); NpcHtmlMessage html = new NpcHtmlMessage(5); html.setHtml(replyMSG.toString()); activeChar.sendPacket(html); } public void ViewAugStats(L2PcInstance player, String type, String Stype, int page, int augId) { //int AugId = augId; //int EffectId = AugId*65536+1; String AugDesc = "none"; String SkillDesc = "none"; String SkillId = "1"; int SkillLevel = 1; String color = "none"; int PriceId = 1; int PriceCount = 1; String SkillName = "none"; String ItemName = "none"; Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("SELECT * FROM augmentation_skillmap WHERE augId='" + augId + "';"); ResultSet result = statement.executeQuery(); while (result.next()) { AugDesc = result.getString("augDesc"); SkillDesc = result.getString("skillDesc"); SkillId = result.getString("skillId"); SkillLevel = result.getInt("skillLevel"); color = result.getString("color"); PriceId = result.getInt("priceId"); PriceCount = result.getInt("priceCount"); } result.close(); statement.close(); } catch (Exception e) { _log.log(Level.WARNING, "[L2AugmentShopIntance] AddAug() : " + e.getMessage(), e); } finally { L2DatabaseFactory.close(con); } if(color.equalsIgnoreCase("red")) color = "FF0000"; else if(color.equalsIgnoreCase("blue")) color = "0000FF"; else if(color.equalsIgnoreCase("purple")) color = "CC00CC"; if(Integer.parseInt(SkillId)<100) SkillId = "00"+SkillId; if(Integer.parseInt(SkillId)<1000) SkillId = "0"+SkillId; SkillName = SkillTable.getInstance().getInfo(Integer.parseInt(SkillId), SkillLevel).getName(); ItemName = ItemTable.getInstance().getTemplate(PriceId).getName(); TextBuilder replyMSG = new TextBuilder(); replyMSG.append("<center>"); replyMSG.append("<table width=\"270\" border=\"0\">"); replyMSG.append("<tr>"); replyMSG.append(" <td valign=\"top\">"); replyMSG.append(" <font color=\"A2A0A2\">Augmentation информация:</font><br1> <font color=\"B09878\">" + AugDesc + "</font><br1>"); replyMSG.append(" <font color=\"A2A0A2\">Skill информация:</font><br1> <font color=\"" + color + "\">" + SkillDesc + "</font><br1>"); replyMSG.append(" <font color=\"A2A0A2\">Skill Имя:</font><br1> <font color=\"" + color + "\">" + SkillName + "</font><br1>"); replyMSG.append(" <font color=\"A2A0A2\">Skill Уровень:</font> <font color=\"FF0000\">" + SkillLevel + "</font><br1>"); if(PriceCount>1) { replyMSG.append(" <font color=\"A2A0A2\">Цена предмета:</font> <font color=\"LEVEL\">" + ItemName + "</font><br1>"); replyMSG.append(" <font color=\"A2A0A2\">Цена количества:</font> <font color=\"LEVEL\">" + PriceCount + "</font><br1>"); } else { replyMSG.append(" <font color=\"A2A0A2\">Цена:</font> <font color=\"LEVEL\">Бесплатно</font><br1>"); } replyMSG.append(" </td>"); replyMSG.append("</tr>"); replyMSG.append("<tr>"); replyMSG.append(" <td><center>"); replyMSG.append(" <table width=\"170\" border=\"0\">"); replyMSG.append(" <tr>"); replyMSG.append(" <td><button value=\"Отмена\" action=\"bypass -h npc_" + getObjectId() + "_ListByColor " + type + " " + Stype + " " + page + " \" width=80 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"); replyMSG.append(" <td><button value=\"Купить\" action=\"bypass -h npc_" + getObjectId() + "_CreateAug " + type + " " + Stype + " " + page + " " + augId + "\" width=80 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"); replyMSG.append(" <tr>"); replyMSG.append(" </table>"); replyMSG.append(" </center></td>"); replyMSG.append("</tr>"); replyMSG.append("</table>"); replyMSG.append("</center>"); sendHTML(player, "Augmentation Stats", replyMSG); } public void ListAugs(L2PcInstance player, String type, String Stype, int page) { int AugCount = 0; // Default value int AugCountPage = 8; // Default value int PageCount = 0; // Default value int StartCount = 1; // Default value //int FinishCount = AugCountPage; // Default value ArrayList<Integer> augId = new ArrayList<Integer>(); HashMap<Integer, String> augDesc = new HashMap<Integer, String>(); HashMap<Integer, String> PriceName = new HashMap<Integer, String>(); HashMap<Integer, Integer> PriceCount = new HashMap<Integer, Integer>(); Connection con = null; PreparedStatement statement = null; ResultSet result = null; try { con = L2DatabaseFactory.getInstance().getConnection(); /** Augmentek megszamolasa az adott kategoriaban. **/ statement = con.prepareStatement("SELECT COUNT(*) AS rowcount FROM augmentation_skillmap WHERE augType LIKE '%" + Stype + "%' and color LIKE '%" + type + "%' and enable='true';"); result = statement.executeQuery(); result.next(); AugCount = result.getInt("rowcount"); result.close(); /** Augmentek megszamolasa az adott kategoriaban. **/ PageCount = AugCount/AugCountPage; if(AugCount>(AugCountPage*PageCount)) PageCount++; if((PageCount<page) || (page<1)) page = 1; if(page>1) { StartCount = AugCountPage*(page-1); } /** Augmentek betoltese **/ statement = con.prepareStatement("SELECT augId,augDesc,priceId,priceCount FROM augmentation_skillmap WHERE augType LIKE '%" + Stype + "%' and color LIKE '%" + type + "%' and enable='true' ORDER by augId LIMIT " + StartCount + ", " + AugCountPage + ";"); result = statement.executeQuery(); while(result.next()) { augId.add(result.getInt("augId")); augDesc.put(result.getInt("augId"), result.getString("augDesc")); PriceName.put(result.getInt("augId"), ItemTable.getInstance().getTemplate(result.getInt("priceId")).getName()); PriceCount.put(result.getInt("augId"), result.getInt("priceCount")); } result.close(); /** Augmentek betoltese **/ } catch (Exception e) { _log.log(Level.WARNING, "[L2AugmentShopIntance] ListAugs() : " + e.getMessage(), e); } finally { L2DatabaseFactory.close(con); } String TableColor = ""; TextBuilder replyMSG = new TextBuilder(); if(AugCount>=1) { for (Integer AugId : augId) { if(TableColor.equalsIgnoreCase("")) TableColor = " bgcolor=\"452822\""; else TableColor = ""; replyMSG.append("<table width=\"290\" border=\"0\"" + TableColor + ">"); replyMSG.append("<tr>"); replyMSG.append(" <td>"); replyMSG.append(" <font color=\"B09878\">" + augDesc.get(AugId) + "</font><br1>"); if(PriceCount.get(AugId)>1) replyMSG.append(" <font color=\"FFFFFF\">Цена:</font> <font color=\"LEVEL\">" + PriceCount.get(AugId) + " (" + PriceName.get(AugId) + ")</font>"); else replyMSG.append(" <font color=\"FFFFFF\">Цена:</font> <font color=\"LEVEL\">Бесплатно</font>"); replyMSG.append(" "); replyMSG.append(" </td>"); replyMSG.append("</tr>"); replyMSG.append("<tr>"); replyMSG.append(" <td><button value=\"Посмотреть улучшение\" action=\"bypass -h npc_" + getObjectId() + "_ViewAug " + type + " " + Stype + " " + page + " " + AugId + "\" width=130 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"); replyMSG.append("</tr>"); replyMSG.append("</table>"); } replyMSG.append("<br>"); replyMSG.append("<table width=\"290\" border=\"0\"" + TableColor + ">"); replyMSG.append("<tr>"); if(page>1) replyMSG.append(" <td width=\"100\"><button value=\"Предыдущая страница\" action=\"bypass -h npc_" + getObjectId() + "_ListByColor " + type + " " + Stype + " " + (page-1) + "\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"); else replyMSG.append(" <td width=\"100\"><center>-</center></td>"); replyMSG.append(" <td><center>" + page + " / " + PageCount + "</center></td>"); if((PageCount>1) && (page<PageCount)) replyMSG.append(" <td width=\"100\"><button value=\"Следующая страница\" action=\"bypass -h npc_" + getObjectId() + "_ListByColor " + type + " " + Stype + " " + (page+1) + "\" width=100 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"); else replyMSG.append(" <td width=\"100\"><center>-</center></td>"); replyMSG.append("</tr>"); replyMSG.append("</table>"); } else { replyMSG.append("<center>Нет увеличение не может быть куплено в этой категории .</center>"); } sendHTML(player, "Лист улучшений (<font color=\"FF0000\">" + type + "</font>-<font color=\"FF0000\">" + Stype + "</font>)", replyMSG); } public void CreateAugmentation(L2PcInstance player, String type, String Stype, int page, int augId) { int AugId = augId; int EffectId = AugId*65536+1; int SkillId = 1; int SkillLevel = 1; int PriceId = 1; int PriceCount = 1; String list = "red"; if(type.equalsIgnoreCase("_RedList")) list = "FF0000"; else if(type.equalsIgnoreCase("_BlueList")) list = "0000FF"; else if(type.equalsIgnoreCase("_PurpleList")) list = "CC00CC"; Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("SELECT * FROM augmentation_skillmap WHERE augId='" + AugId + "';"); ResultSet result = statement.executeQuery(); while (result.next()) { SkillId = result.getInt("skillId"); SkillLevel = result.getInt("skillLevel"); PriceId = result.getInt("priceId"); PriceCount = result.getInt("priceCount"); } result.close(); statement.close(); } catch (Exception e) { _log.log(Level.WARNING, "[L2AugmentShopIntance] AddAug() : " + e.getMessage(), e); } finally { L2DatabaseFactory.close(con); } if(player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) != null) { if ((player.getInventory().getInventoryItemCount(PriceId, 0)<PriceCount) && (PriceCount>1)) { sendMsg(player, "Не хватает места"); ViewAugStats(player, list, Stype, page, augId); return; } L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND); if(!item.isAugmented()) { if(PriceCount>1) { // Remove price player.destroyItemByItemId("AugmentationShop", PriceId, PriceCount, player, true); player.getInventory().updateDatabase(); } L2Augmentation augmentation = new L2Augmentation(EffectId, SkillTable.getInstance().getInfo(SkillId, SkillLevel)); item.setAugmentation(augmentation); UpdatePlayer(player, item); SkillDebug(player, item); sendMsg(player, "Улучшение добавлено в оружие."); } else { sendMsg(player, "Оружие уже имеет улучшение"); ViewAugStats(player, list, Stype, page, augId); return; } } else { sendMsg(player, "Оружие не найдено!"); ViewAugStats(player, list, Stype, page, augId); return; } } public void SkillDebug(L2PcInstance player, L2ItemInstance item) { player.disarmWeapons(); InventoryUpdate iu = new InventoryUpdate(); player.getInventory().equipItemAndRecord(item); iu.addModifiedItem(item); player.sendPacket(iu); } public void sendMsg(L2PcInstance player, String msg) { player.sendPacket(new ExShowScreenMessage(msg, 3500)); player.sendMessage(msg); } public void RemoveAug(L2PcInstance player) { if(player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) != null) { L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND); if(item.isAugmented()) { player.disarmWeapons(); item.removeAugmentation(); UpdatePlayer(player, item); player.sendPacket(new ExVariationCancelResult(1)); SkillDebug(player, item); showHtmlMenu(player, "data/html/custom/augmentshop.htm"); sendMsg(player, "Улучшения удалены из оружия"); } else { showHtmlMenu(player, "data/html/custom/augmentshop.htm"); sendMsg(player, "В оружие нету улучшения.");; return; } } else { showHtmlMenu(player, "data/html/custom/augmentshop.htm"); sendMsg(player, "Оружие не найдено!"); return; } } public void UpdatePlayer(L2PcInstance player, L2ItemInstance targetItem) { InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(targetItem); player.sendPacket(iu); StatusUpdate su = new StatusUpdate(player); su.addAttribute(StatusUpdate.CUR_LOAD, player.getCurrentLoad()); player.sendPacket(su); } private final void showHtmlMenu(L2PcInstance player, String htm) { player.sendPacket(ActionFailed.STATIC_PACKET); NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile(player.getHtmlPrefix(), htm); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command, " "); String Command = st.nextToken(); int page = 1; if (Command.equalsIgnoreCase("BlueList")) { String SType = st.nextToken(); if(st.hasMoreTokens()) page = Integer.parseInt(st.nextToken()); ListAugs(player, "blue", SType, page); } else if (Command.equalsIgnoreCase("PurpleList")) { String SType = st.nextToken(); if(st.hasMoreTokens()) page = Integer.parseInt(st.nextToken()); ListAugs(player, "purple", SType, page); } else if (Command.equalsIgnoreCase("RedList")) { String SType = st.nextToken(); if(st.hasMoreTokens()) page = Integer.parseInt(st.nextToken()); ListAugs(player, "red", SType, page); } else if (Command.equalsIgnoreCase("ListByColor")) { String type = st.nextToken(); String SType = st.nextToken(); page = Integer.parseInt(st.nextToken()); ListAugs(player, type, SType, page); } else if (Command.equalsIgnoreCase("ViewAug")) { ViewAugStats(player, st.nextToken(), st.nextToken(), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())); } else if (Command.equalsIgnoreCase("CreateAug")) { CreateAugmentation(player, st.nextToken(), st.nextToken(), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())); } else if (Command.equalsIgnoreCase("RemoveAug")) { RemoveAug(player); } } } И вот ошибка: The method getHtmlPrefix() is undefined for the type L2PcInstance Я понимаю ,что она значит ,пытался исправлять ,но мои попытки напрасны ... Кто подскажет ,что делать ?Чем можно заменить getHtmlPrefix ? Изменено 3 февраля, 2015 пользователем BlackDream Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
1ntegrate 46 Опубликовано 3 февраля, 2015 (изменено) разве в setFile не должен быть путь к файлу? ru.catssoftware.gameserver.network.serverpackets.NpcHtmlMessage.setFile(String path) Изменено 3 февраля, 2015 пользователем 1ntegrate Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Joirik 1 Опубликовано 3 февраля, 2015 разве в getFile не должен быть путь к файлу? ru.catssoftware.gameserver.network.serverpackets.NpcHtmlMessage.setFile(String path) В переменной htm путь к файлу Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
1ntegrate 46 Опубликовано 3 февраля, 2015 ну смотри html = new NpcHtmlMessage(getObjectId()); html.setFile(player.getHtmlPrefix(), htm); в сурсах люси2 html.setFile() задает путь к файлу через строку, тоесть html.setFile(String path) а не html.setFile(L2PcInstance, int); и вобще getHtmlPrefix используется на лыже, если не ошибаюсь Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Joirik 1 Опубликовано 3 февраля, 2015 ну смотри html = new NpcHtmlMessage(getObjectId()); html.setFile(player.getHtmlPrefix(), htm); в сурсах люси2 html.setFile() задает путь к файлу через строку, тоесть html.setFile(String path) а не html.setFile(L2PcInstance, int); и вобще getHtmlPrefix используется на лыже, если не ошибаюсь Как мне тогда его заменить getHtmlPrefix ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
1ntegrate 46 Опубликовано 3 февраля, 2015 ну, я не уверен, ты не пробовал HtmCache.getHtm? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Joirik 1 Опубликовано 3 февраля, 2015 ну, я не уверен, ты не пробовал HtmCache.getHtm? Это заменять getHtmlPrefix() или заменять html.setFile ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
1ntegrate 46 Опубликовано 3 февраля, 2015 заменить setFile Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Joirik 1 Опубликовано 3 февраля, 2015 заменить setFile Ошибку выдало ,я сделал так private final void showHtmlMenu(L2PcInstance player, String htm) { player.sendPacket(ActionFailed.STATIC_PACKET); NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); HtmCache.getHtm(htm, player); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } Ошибка : Cannot make a static reference to the not-static method getHtm<String, PcInstance> from the type HtmCache Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Joirik 1 Опубликовано 6 февраля, 2015 Проблема еще не решена! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 6 февраля, 2015 (изменено) Проблема еще не решена!изменить в HtmCache private static void getHtm(String htm, L2PcInstance player) или попробовать вызвать если есть HtmCache.getInstance().getHtm(htm, player); Изменено 6 февраля, 2015 пользователем ncsSpawN Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты