MrSunrise1992 0 Опубликовано 12 июня, 2016 Всем Привет! Добавил систему Вип(премиум) через админку даю прем без проблем.. Проблема в том что когда хочу купить прем через нпс гс кричит ошибку Bad RequestBypassToServer: net.sf.l2j.gameserver.model.actor.instance.L2VipManagerInstance cannot be cast to net.sf.l2j.gameserver.model.actor.instance.L2PcInstance вот VipManager package net.sf.l2j.gameserver.model.actor.instance; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.StringTokenizer; import net.sf.l2j.Config; import net.sf.l2j.gameserver.datatables.SkillTable; import net.sf.l2j.gameserver.model.L2Object; import net.sf.l2j.gameserver.model.L2Skill; import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.engine.VIPEngine; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; import net.sf.l2j.gameserver.model.actor.template.NpcTemplate; import net.sf.l2j.commons.lang.StringUtil; /** * * @author Jackass/Ted/fernandopm * */ public class L2VipManagerInstance extends L2NpcInstance { public L2VipManagerInstance(int objectId, NpcTemplate template) { super(objectId, template); } @Override public String getHtmlPath(int npcId, int val) { return "data/html/vip/vipmanager.htm"; } @Override public void showChatWindow(L2PcInstance player) { if (!Config.ENABLE_VIP_NPC) { showChatWindow(player, "data/html/vip/npcisdisabled.htm"); return; } if (player.isGM()) showChatWindow(player, "data/html/vip/adminmanage.htm"); else showChatWindow(player, "data/html/vip/vipmanager.htm"); } @Override public void onBypassFeedback(L2PcInstance player, String command) { StringTokenizer st = new StringTokenizer(command); String actualCommand = st.nextToken(); if (actualCommand.equalsIgnoreCase("getVip")) { NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); if (!VIPEngine.getInstance().isVip(player)) { if (player.getInventory().hasAtLeastOneItem(Config.VIP_NPC_ITEM)) { addVips(player); player.destroyItem("_vip", Config.VIP_NPC_ITEM, 1, player, true); html.setFile("data/html/vip/vipmanager.htm"); player.sendPacket(html); } else { html.setFile("data/html/vip/noenoughitems.htm"); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } } else { html.setFile("data/html/vip/alreadyvip.htm"); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } } else if (actualCommand.equalsIgnoreCase("checkVipTime")) { NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); if (VIPEngine.getInstance().isVip(player)) { html.setFile("data/html/vip/checktime.htm"); html.replace("%acquireDate%", convertToDate(VIPEngine.getInstance().getVipTime(player))); html.replace("%endDate%", convertToDate(VIPEngine.getInstance().getVipTime(player)) + Config.VIP_LIFE_TIME); } else html.setFile("data/html/vip/noenoughitems.htm"); player.sendPacket(html); } else if (actualCommand.equalsIgnoreCase("cleantask")) { if (player.isGM()) VIPEngine.getInstance().vipCleanUp(); else player.sendMessage("You can't access this function."); } else if (actualCommand.equalsIgnoreCase("checklist")) { showAllVips(player); } else super.onBypassFeedback(player, actualCommand); } private static String convertToDate(long timeInMillis) { Date time = new Date(timeInMillis); SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy HH:mm"); return format.format(time); } /** * Shows the html with a list of vips with or without timers */ private static void showAllVips(L2PcInstance activeChar) { Collection<L2PcInstance> players = L2World.getInstance().getPlayers(); Collection<Integer> allVips = VIPEngine.getInstance().getAllVips(); NpcHtmlMessage html = new NpcHtmlMessage(0); html.setFile("data/html/vip/viplist.htm"); if (allVips.isEmpty()) { html.replace("%users%", "No vip users found"); html.replace("%totalvips%", "0"); activeChar.sendPacket(html); return; } final StringBuilder reply = new StringBuilder(500 + allVips.size() * 200); String name, time, finishTime; for (L2PcInstance vips : players) { long vipTime = VIPEngine.getInstance().getVipTime(vips); if (allVips.contains(vips.getObjectId())) { name = vips.getName(); Date timeDate = new Date(vipTime); Date finishDate = new Date(vipTime + Config.VIP_LIFE_TIME); SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd,yyyy HH:mm"); time = dateFormat.format(timeDate); finishTime = dateFormat.format(finishDate); StringUtil.append(reply, "<tr><td>" + "Username: " +name+" Vip Start time: "+time+ " Finish time: " + finishTime + "</td></tr>"); } } html.replace("%users%", reply.toString()); html.replace("%totalvips%", String.valueOf(allVips.size())); activeChar.sendPacket(html); } private static void addVips(L2PcInstance activeChar) { String text; L2Object object = activeChar.getTarget(); L2PcInstance target = (L2PcInstance) object; if (target == null) activeChar.sendMessage("Usage: //setvip and target someone."); if (VIPEngine.getInstance().isVip(target)) { text = "The user is already a vip player"; return; } VIPEngine.getInstance().addVip(target); if (Config.VIP_NAME_COLOR_CONFIG) { Integer colorName = Integer.decode("0x" + Config.VIPS_NAME_COLOR); Integer colorTitle = Integer.decode("0x" + Config.VIPS_TITLE_COLOR); activeChar.getAppearance().setNameColor(colorName); activeChar.getAppearance().setTitleColor(colorTitle); } if (Config.VIPS_SKILLS_CONFIG) { for (int skillid : Config.VIP_SKILLS.keySet()) { L2Skill skill = SkillTable.getInstance().getInfo(skillid, Config.VIP_SKILLS.get(skillid)); activeChar.addSkill(skill, false); } } if (Config.VIPS_HERO_AURA) activeChar.broadcastUserInfo(); text = "The user " + activeChar.getName() + " has been added to vip list"; activeChar.sendMessage(text); } } нтмл файл <html> <title>Vip Manager</title> <body> <center> <img src="L2UI_CH3.herotower_deco" width=256 height=32> </center> <center> <img src="L2UI_CH3.herotower_deco" width=256 height=32> <button value="Add vip" action="bypass -h npc_%objectId%_getVip" width=94 height=21 fore="L2UI_ch3.BigButton" back="L2UI_ch3.BigButton_down"> <button value="Check my vip status" action="bypass -h npc_%objectId%_checkVipTime" width=94 height=21 fore="L2UI_ch3.BigButton" back="L2UI_ch3.BigButton_down"> <img src="L2UI_CH3.herotower_deco" width=256 height=32> </center> </body> </html> Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 12 июня, 2016 Ругается, потому что в таргете у тебя нпц, а код пытается использовать твой таргет как игрока (L2PcInstance) L2Object object = activeChar.getTarget(); L2PcInstance target = (L2PcInstance) object; Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MrSunrise1992 0 Опубликовано 12 июня, 2016 Ругается, потому что в таргете у тебя нпц, а код пытается использовать твой таргет как игрока (L2PcInstance) L2Object object = activeChar.getTarget(); L2PcInstance target = (L2PcInstance) object; а как сделать правильно? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 12 июня, 2016 (изменено) а как сделать правильно? private static void addVips(L2PcInstance activeChar) { VIPEngine.getInstance().addVip(activeChar); if (Config.VIP_NAME_COLOR_CONFIG) { Integer colorName = Integer.decode("0x" + Config.VIPS_NAME_COLOR); Integer colorTitle = Integer.decode("0x" + Config.VIPS_TITLE_COLOR); activeChar.getAppearance().setNameColor(colorName); activeChar.getAppearance().setTitleColor(colorTitle); } if (Config.VIPS_SKILLS_CONFIG) { for (int skillid : Config.VIP_SKILLS.keySet()) { L2Skill skill = SkillTable.getInstance().getInfo(skillid, Config.VIP_SKILLS.get(skillid)); activeChar.addSkill(skill, false); } } if (Config.VIPS_HERO_AURA) activeChar.broadcastUserInfo(); activeChar.sendMessage("Вы получили VIP-статус!"); } Изменено 12 июня, 2016 пользователем Calyps0 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MrSunrise1992 0 Опубликовано 12 июня, 2016 private static void addVips(L2PcInstance activeChar) { VIPEngine.getInstance().addVip(activeChar); if (Config.VIP_NAME_COLOR_CONFIG) { Integer colorName = Integer.decode("0x" + Config.VIPS_NAME_COLOR); Integer colorTitle = Integer.decode("0x" + Config.VIPS_TITLE_COLOR); activeChar.getAppearance().setNameColor(colorName); activeChar.getAppearance().setTitleColor(colorTitle); } if (Config.VIPS_SKILLS_CONFIG) { for (int skillid : Config.VIP_SKILLS.keySet()) { L2Skill skill = SkillTable.getInstance().getInfo(skillid, Config.VIP_SKILLS.get(skillid)); activeChar.addSkill(skill, false); } } if (Config.VIPS_HERO_AURA) activeChar.broadcastUserInfo(); activeChar.sendMessage("Вы получили VIP-статус!"); } работает, статус получил но не удаляет итем и не добавляет в базу Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MrSunrise1992 0 Опубликовано 12 июня, 2016 работает, статус получил но не удаляет итем и не добавляет в базу все поправил, спасибо все работает! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты