Перейти к содержанию

†DeMoN†™

Постоялец
  • Публикаций

    509
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4
  • Отзывы

    0%

Весь контент †DeMoN†™

  1. Кто?) (не понял ничего) P.S. перейти на фрозенов или линков? а то надоело всё объяснять и переправлять
  2. Update. Выдача и запоминание хиро статуса для победителей (+ оффлайн). Хиро удаляется за 1 минуту, до конца события. Т.е. старым победителям удаляют и новым дают. Не тестировал. L2PursuitInstance.java Скрытый текст package net.sf.l2j.gameserver.model.actor.instance; import java.sql.ResultSet; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.StringTokenizer; import javolution.text.TextBuilder; import net.sf.l2j.database.DatabaseUtils; import net.sf.l2j.database.FiltredPreparedStatement; import net.sf.l2j.database.L2DatabaseFactory; import net.sf.l2j.database.ThreadConnection; import net.sf.l2j.gameserver.Announcements; import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; import net.sf.l2j.gameserver.templates.L2NpcTemplate; public class L2PursuitInstance extends L2FolkInstance { /** Config begin */ private static final int ITEM_ID = 4037; // ID предмета, который нужно сдавать NPC private static final String ITEM_NAME = "Coin of Luck"; //Название предмета, для вывода сообщений private static final int topCount = 10; // Количество игроков в топе private static final int winnerCount = 3; // Количество игроков, которые получат приз private static final String annons1 = "Хотите получить интерессный приз? Учавствуйте в евенте \"Сборщик\"!"; // Аннонс о прохождении евента private static final String annons2 = "До конца евента \"Сборщик\" осталось 5 минут"; // Аннонс об окончании евента private static final String annons3 = " выйграл евент \"Сборщик\" и получает статус героя!"; // Аннонс о выйгрые, вид: (имя_игрока, выйграл евент и т.д.) /** Config end */ static Thread thr; public L2PursuitInstance (int objectId, L2NpcTemplate template) { super(objectId, template); } @ Override public void onAction(L2PcInstance player) { player.setLastFolkNPC(this); super.onAction(player); } @ Override public void onBypassFeedback(L2PcInstance player, String command) { if (command.startsWith("put")) { StringTokenizer st = new StringTokenizer(command.substring(3).trim()); if (st.countTokens() != 1) return; String token = st.nextToken(); int putCount = 0; if (token.matches("[0-9]*")) putCount = Integer.parseInt(token); else { player.sendMessage("Неправильный ввод"); return; } if (putCount <= 0 || player.getInventory().getInventoryItemCount(ITEM_ID, 0) < putCount) { player.sendMessage("У вас не хватает предметов"); return; } InventoryUpdate ui = new InventoryUpdate(); if (player.getInventory().destroyItemByItemId("Pursuit", ITEM_ID, putCount, player, player) != null) { player.sendMessage("Вы вложили " + putCount + " " + ITEM_NAME); updateBonusItem(player, charInBonusBD(player) + putCount); ui.addModifiedItem(player.getInventory().getItemByItemId(ITEM_ID)); player.sendPacket(ui); } ui = null; } else if (command.startsWith("getInfo")) { int i = 1; NpcHtmlMessage html = new NpcHtmlMessage(1); TextBuilder tb = new TextBuilder("<html><title>Сборщик</title><body>"); tb.append("<table align=\"center\" border=\"1\"><tr><td width=\"20\">#</td><td width=\"150\">Имя персонажа</td><td width=\"150\">Количество</td></tr>"); ThreadConnection con = null; FiltredPreparedStatement st = null; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("SELECT obj_Id, count FROM pursuit order by count desc limit " + topCount); ResultSet result = st.executeQuery(); while (result.next()) { int obj_Id = result.getInt("obj_Id"); int count = result.getInt("count"); tb.append("<tr><td width=\"10\">" + i + "</td><td width=\"200\">" + getNameForObjectId(obj_Id) + "</td><td width=\"200\">" + count + "</td></tr>"); i++; } tb.append("</body></html>"); html.setHtml(tb.toString()); player.sendPacket(html); result.close(); } catch (Exception e) { _log.warning("" + e); } finally { DatabaseUtils.closeDatabaseCS(con, st); } } else super.onBypassFeedback(player, command); } private static String getNameForObjectId(int objId) { ThreadConnection con = null; FiltredPreparedStatement st = null; String name = "error"; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("SELECT char_name FROM characters WHERE obj_Id=" + objId); ResultSet rs = st.executeQuery(); while (rs.next()) name = rs.getString("char_name"); rs.close(); } catch (Exception e) { _log.warning("" + e); } finally { DatabaseUtils.closeDatabaseCS(con, st); } return name; } private static int charInBonusBD(L2PcInstance player) { ThreadConnection con = null; FiltredPreparedStatement st = null; int count = 0; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("SELECT count from pursuit WHERE obj_Id=?"); st.setInt(1, player.getObjectId()); ResultSet rs = st.executeQuery(); while (rs.next()) count = Integer.parseInt(rs.getString("count")); rs.close(); } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } return count; } private static void updateBonusItem(L2PcInstance player, int count) { ThreadConnection con = null; FiltredPreparedStatement st = null; if (player == null) return; if (charInBonusBD(player) != 0) { try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("UPDATE pursuit SET count=" + count + " WHERE obj_Id=" + player.getObjectId()); st.executeUpdate(); } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } } else { try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("INSERT INTO pursuit (obj_Id, count) VALUES(?,?)"); st.setInt(1, player.getObjectId()); st.setInt(2, count); st.execute(); } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } } } private static void toReward() { _log.info("toReward"); ThreadConnection con = null; FiltredPreparedStatement st = null; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("SELECT obj_Id FROM pursuit order by count desc limit " + winnerCount); ResultSet result = st.executeQuery(); while (result.next()) { L2PcInstance player = L2World.getInstance().getPlayer(result.getInt("obj_Id")); if (player == null) setEnterHero(getNameForObjectId(result.getInt("obj_Id"))); else { setEnterHero(getNameForObjectId(result.getInt("obj_Id"))); player.setHero(true); } Announcements.getInstance().announceToAll(player.getName() + annons3); player = null; } refreshEvent(); } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } } private static void refreshEvent() { _log.info("refreshEvent"); ThreadConnection con = null; FiltredPreparedStatement st = null; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("DELETE FROM pursuit"); st.execute(); } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } } private static void deleteEnterHero(String name) { _log.info("deleteEnterHero"); if (!isEnterHero(name)) return; L2PcInstance player = L2World.getInstance().getPlayer(name); if (player != null) player.setHero(false); ThreadConnection con = null; FiltredPreparedStatement st = null; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("DELETE FROM enterhero WHERE char_name=?"); st.setString(1, name); st.execute(); } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } } private static void setEnterHero(String name) { _log.info("setEnterHero"); if (isEnterHero(name)) return; ThreadConnection con = null; FiltredPreparedStatement st = null; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("INSERT INTO enterhero (char_name) values(?)"); st.setString(1, name); st.execute(); } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } } public static boolean isEnterHero(String name) { _log.info("isEnterHero"); ThreadConnection con = null; FiltredPreparedStatement st = null; int cnt = 0; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("SELECT COUNT(*) FROM enterhero WHERE char_name=?"); st.setString(1, name); ResultSet rs = st.executeQuery(); if (rs.next()) cnt = 1; } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } if (cnt == 0) return false; else return true; } public static void StartEventOfBonusItem() { thr = new Thread() { @ Override public void run() { while (true) { int minutes = Integer.parseInt(new SimpleDateFormat("mm").format(Calendar.getInstance().getTime())); if (minutes == 5 || minutes == 15 || minutes == 25 || minutes == 35 || minutes == 45) { _log.info("5,15,25,35,45 min"); Announcements.getInstance().announceToAll(annons1); } else if (minutes == 55) { _log.info("55 min"); Announcements.getInstance().announceToAll(annons2); } else if (minutes == 59) { ThreadConnection con = null; FiltredPreparedStatement st = null; try { con = L2DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("SELECT * FROM enterhero"); ResultSet rs = st.executeQuery(); while (rs.next()) { String name = rs.getString("char_name"); L2PcInstance player = L2World.getInstance().getPlayer(name); if (player != null) player.setHero(false); deleteEnterHero(name); Announcements.getInstance().announceToAll("Геройство с победителя евента \"Сборкищ\": + " + name + " снято!"); } rs.close(); } catch (Exception ex) { _log.warning("" + ex); } finally { DatabaseUtils.closeDatabaseCS(con, st); } } else if (minutes == 0) { _log.info("reward"); toReward(); } try { _log.info("sleep " + minutes); Thread.sleep(60000); } catch (Exception ex) { _log.warning("" + ex); } } } }; thr.start(); } } В EnterWorld добавить: Скрытый текст if (L2PursuitInstance.isEnterHero(activeChar.getName())) activeChar.setHero(true); Сделать запрос в БД: Скрытый текст CREATE TABLE enterhero ( char_name varchar(35) NOT NULL, PRIMARY KEY (char_name) );
  3. †DeMoN†™

    Hero Npc

    Одна старая знакомая делала хиро свечение на рб. Значит как то можно.
  4. †DeMoN†™

    Java Ошибка.

    Если автор просит закрыть тему, значит он скорее всего решил проблему? Или не?
  5. Тот же, что и у меня, только вместо времени установлен банк. (при опр. сумме игрокам, вложившим больше всего, выдается приз)
  6. Уже выкладывал, но тема вроде была удалена. Поищу ещё. http://forummaxi.ru/index.php?showtopic=6513&hl= К сожалению ссылка уже битая. Мб KFan поделится
  7. Про хиро знаю, скорее всего всё таки сделаю отдельную таблицу. В неё будут записываться герои и также удаляться. Только со временем удаления надо что-то решить.
  8. в gameserver.java добавить: Код L2PursuitInstance.StartEventOfBonusItem(); ?
  9. В ГСе должно выводить время поминутно.
  10. 00 выдается приз. 01 начинается новый набор.
  11. P.S. забыл, сори за срач в ГСе, для себя делал и забыл убрать В нормальной версии уберу.
  12. Заносим в таблицу npc нпс. Делаем ему тип L2Pursuit. Далее в дефолт кидаем хтмл. имя хтмл = ид вашего нпс.
  13. Извини, забыл Скрытый текст <html><title>Сборщик</title><body> <center> <img src="L2Font.mini_logo-k" width=250 height=90><br> <img src="L2UI_CH3.herotower_deco" width=256 height=32><br> <br> ДеМоНу лень придумывать текст,<br> так что пусть будет так, как есть <br> <br><br><br> <table> <tr><td width=50 height=12><font color="732cde">Кол-во:</font></td><td><edit var="cnt" width=75 height=10></td></tr> </table> <br><br><br><br> <table> <tr> <td><button value="Сдать" action="bypass -h npc_%objectId%_put $cnt" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> <td><button value="Статистика" action="bypass -h npc_%objectId%_getInfo" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td> </tr> </table> <br> <img src="L2UI_CH3.herotower_deco" width=256 height=32> </center> </body> </html>
  14. Как вариант добавьте public static void close(PreparedStatement st) { if(st != null) try { st.close(); st=null; } catch(Throwable e) { e.printStackTrace(); _log.severe(e.getMessage()); } }
  15. в методе close только 1 параметр. попробуйте так... CloseUutil.close(con); CloseUutil.close(st); Нет возможности посмотреть.
  16. CloseUtil Методы .close(...) точнее не помню.
  17. ИТ, с другими хрониками пока не работаю. Под РТ. Внимание обратить на FiltredPreparedStatement, возможно в других сборках его нет. Заменяем на PreparedStatement.
  18. http://rghost.ru/38446418 в gameserver.java добавить: L2PursuitInstance.StartEventOfBonusItem();
  19. Впринципе сделать не долго, но при условии, что это не 1 человеку надо будет, а хотя бы трём. P.S. ещё скрин: Скрытый текст Кому кинуть тест версию? Если буду сам тестировать, затянется до вечера, ибо планирую отойти.
  20. Можно, но не интерессно) Хочу косяк найти.
  21. Поидее, как я думаю, прогрессбар в клиенте должен сам высчитывать значения. Так что даже без понятия. P.S. евент на стадии доработки Скрытый текст Конфиги на ID итема, название итема, количество игроков в статистике, количество призовых мест, текст аннонсов. Сделана статистика, ввод количества итемов для сдачи. В минутах вроде всё работает как надо. Как только поправлю у себя байпасс, буду переделывать на часы. Хотя думаю мб стоит выложить тест версию в минутах? Может хоть ошибки/недочеты найдете.
  22. RT, не фрозены Ладно, будем дебажить.
×
×
  • Создать...