HastemaN 0 Опубликовано 3 июня, 2012 P.S. забыл, сори за срач в ГСе, для себя делал и забыл убрать В нормальной версии уберу. Вроде в ГСе чистенько пока что А время выдачи призов какое? И когда начинается заново набор очков? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
†DeMoN†™ 156 Опубликовано 3 июня, 2012 Вроде в ГСе чистенько пока что А время выдачи призов какое? И когда начинается заново набор очков? 00 выдается приз. 01 начинается новый набор. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
HastemaN 0 Опубликовано 3 июня, 2012 Перевел часы на машине, запустил сервер но что то не захотел выдавать геройство и обнулять, сейчас попробую тупо дождаться 5 часов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
†DeMoN†™ 156 Опубликовано 3 июня, 2012 Перевел часы на машине, запустил сервер но что то не захотел выдавать геройство и обнулять, сейчас попробую тупо дождаться 5 часов. В ГСе должно выводить время поминутно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
HastemaN 0 Опубликовано 3 июня, 2012 (изменено) Прямо каждую минуту? Хм, не выводит почему то. Тьфу ты, я дуралей, не добавил в геймсервер. Сейчас добавлю потестю и отпишусь. Изменено 3 июня, 2012 пользователем HastemaN Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
†DeMoN†™ 156 Опубликовано 3 июня, 2012 Прямо каждую минуту? Хм, не выводит почему то.Тьфу ты, я дуралей, не добавил в геймсервер. Сейчас добавлю потестю и отпишусь. в gameserver.java добавить: Код L2PursuitInstance.StartEventOfBonusItem(); ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
HastemaN 0 Опубликовано 3 июня, 2012 Да да, я вот сейчас только про него вспомнил и добавил, сейчас посмотрю как будет себя вести и скажу. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
HastemaN 0 Опубликовано 3 июня, 2012 Все работает, вот только хиро выдает персонажам которые онлайн. Но это уже косяк моей функции выдачи хиро, а так же нужно будет отнимать хиро. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KFan 7 Опубликовано 3 июня, 2012 (изменено) мой вариант, делал сам полностью Скрытый текст работает по принципу банка - Набирается определенное количество, как только набралось лидеру выдает хиро Изменено 3 июня, 2012 пользователем KFan Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
†DeMoN†™ 156 Опубликовано 3 июня, 2012 Все работает, вот только хиро выдает персонажам которые онлайн. Но это уже косяк моей функции выдачи хиро, а так же нужно будет отнимать хиро. Про хиро знаю, скорее всего всё таки сделаю отдельную таблицу. В неё будут записываться герои и также удаляться. Только со временем удаления надо что-то решить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lin2gold 0 Опубликовано 3 июня, 2012 Пожалуйста реализуй такую фричу, под фрозенов Нужно сделать камни, которые можно было бы бить определенным оружием(кирка или что то типа этого) При ударе камень ломается(респаун 6-8мин) и с шансом 50-70% дроп айтема Нужно 5 структур(Руда, золото, титан, слюна ядовитого паука, кожа Етти) Это похоже на л2ворлд(ит) там тоже были камни которые нужно было бить выставленным оружием Если сделаешь благодарность безграничная будет. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
†DeMoN†™ 156 Опубликовано 3 июня, 2012 (изменено) Пожалуйста реализуй такую фричу, под фрозенов Нужно сделать камни, которые можно было бы бить определенным оружием(кирка или что то типа этого) При ударе камень ломается(респаун 6-8мин) и с шансом 50-70% дроп айтема Нужно 5 структур(Руда, золото, титан, слюна ядовитого паука, кожа Етти) Это похоже на л2ворлд(ит) там тоже были камни которые нужно было бить выставленным оружием Если сделаешь благодарность безграничная будет. Уже выкладывал, но тема вроде была удалена. Поищу ещё. http://forummaxi.ru/index.php?showtopic=6513&hl= К сожалению ссылка уже битая. Мб KFan поделится Изменено 3 июня, 2012 пользователем †DeMoN†™ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gy6aH 0 Опубликовано 3 июня, 2012 А можно описание что за эвент Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
†DeMoN†™ 156 Опубликовано 3 июня, 2012 А можно описание что за эвент Какой именно? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gy6aH 0 Опубликовано 3 июня, 2012 Какой именно? ну который ты последний сделал Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
4IPS 181 Опубликовано 3 июня, 2012 мой вариант, делал сам полностью Скрытый текст работает по принципу банка - Набирается определенное количество, как только набралось лидеру выдает хиро это совсем не то ,если я правельно конечно понял) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KFan 7 Опубликовано 3 июня, 2012 (изменено) это совсем не то ,если я правельно конечно понял) Что совсем не то? Это тот же "Сборщик" Тут даже оффлайн игроки уже реализованы) Изменено 3 июня, 2012 пользователем KFan Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lin2gold 0 Опубликовано 3 июня, 2012 Уже выкладывал, но тема вроде была удалена.Поищу ещё. http://forummaxi.ru/index.php?showtopic=6513&hl= К сожалению ссылка уже битая. Мб KFan поделится Пожалуйста если найдете, скиньте эту реализацию \Буду очень при очень благодарен Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KFan 7 Опубликовано 3 июня, 2012 Пожалуйста если найдете, скиньте эту реализацию \Буду очень при очень благодарен ссылка вот, я делал, но по моему это не под интерлюд... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gy6aH 0 Опубликовано 3 июня, 2012 Так что это за ивент который последний скинули )? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lin2gold 0 Опубликовано 3 июня, 2012 ссылка вот, я делал, но по моему это не под интерлюд... Скорее всего не под ит, не как вбить не могу Блин где же достать эту крафт систему( Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KFan 7 Опубликовано 3 июня, 2012 Скорее всего не под ит, не как вбить не могуБлин где же достать эту крафт систему( Перепешите, там спокойно под ил подойдет Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
†DeMoN†™ 156 Опубликовано 3 июня, 2012 (изменено) Так что это за ивент который последний скинули )? Тот же, что и у меня, только вместо времени установлен банк. (при опр. сумме игрокам, вложившим больше всего, выдается приз) Изменено 3 июня, 2012 пользователем †DeMoN†™ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
†DeMoN†™ 156 Опубликовано 3 июня, 2012 (изменено) 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 июня, 2012 пользователем †DeMoN†™ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gy6aH 0 Опубликовано 3 июня, 2012 Демон , мог бы попробовать реализовать , заточка у нпс ?) Что бы заточка выводилась как бы через базу , например вписал туда айди нпс и там мин заточка и макс заточка ) . Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты