|
Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.
Описание темы:Buffer Teleport Shop |
Ссылки сообщества |
Изображения и альбомы |
Пользователи |
К странице... |
Опции темы |
08.03.2011, 22:16 | #21 |
Герой
|
Re: [Core]Community Board
Для тех кто не понял как, включается она в конфиге. Я думаю в каком сами найдёте!надо поставить цифру 2 тоесть Full камунити боард! И не пишите в личку вопросы по камунити сервису он вам вообще не нужен!Только логин сервер и гейм!
|
08.03.2011, 23:49 | #22 |
Постоялец
|
Re: [Core]Community Board
alerion, Поделитесь плз l2top менеджером под лыжу
|
09.03.2011, 16:22 | #23 |
Герой
|
Re: [Core]Community Board
честно сказать дифки нет!Так как когда делал себе работал без свн!
Как время будет посматрю, мож выдеру с кода. Щас я просто интом занят))Делаю свой сервер. Кстати подскажите кто в курсе, где прописана одежда и оружие петомцев. Добавил нового пета в датапак в ядро как положено итем вызова и пищу. Всё как положено пет питается качается. Но вот минус в том что не могу на него нечего одеть так как не прописал, не пойму где это)) |
09.03.2011, 16:47 | #24 | |
Пользователь
|
Re: [Core]Community Board
Цитата:
|
|
09.03.2011, 17:12 | #25 |
Герой
|
Re: [Core]Community Board
А вместо поучения можно зделать что то полезное!Умник!
Кста мож пригодится, смс сервис от феникса адаптированный под l2jserver java/com/l2jserver/gameserver/communitybbs/Manager/SmsBBSManager.java 1:Свернуть ↑
Свернуть ↑Развернуть ↓
Код:
package com.l2jserver.gameserver.communitybbs.Manager; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; import java.util.Arrays; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; import javolution.text.TextBuilder; import com.l2jserver.gameserver.cache.HtmCache; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jserver.gameserver.util.Util; import com.l2jserver.util.Rnd; public class SmsBBSManager extends BaseBBSManager { public static SmsBBSManager getInstance() { return SingletonHolder._instance; } private SmsBBSManager() {} public void parsecmd(String command, L2PcInstance activeChar) { String content = HtmCache.getInstance().getHtmForce(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/303.htm"); content = content.replace("%name%", activeChar.getName()); separateAndSend(content, activeChar); } public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar) { } @SuppressWarnings("synthetic-access") private static class SingletonHolder { protected static final SmsBBSManager _instance = new SmsBBSManager(); } } Вот код из CommunityBoard.java 1:Свернуть ↑
Свернуть ↑Развернуть ↓
Код:
else if(command.startsWith("_bbssms;")) { SmsBBSManager.getInstance().parsecmd(command, activeChar); } html в сборке моей есть 303.html Последний раз редактировалось alerion; 09.03.2011 в 19:12. |
09.03.2011, 19:43 | #26 |
Постоялец
|
Re: [Core]Community Board
мнебы код из com/l2jserver/gameserver/taskmanager/L2TopRuManager.java
тут декомпил:Свернуть ↑
Свернуть ↑Развернуть ↓
Код:
package com.l2jserver.gameserver.taskmanager; import com.l2jserver.ExternalConfig; import com.l2jserver.L2DatabaseFactory; import com.l2jserver.gameserver.ThreadPoolManager; import com.l2jserver.gameserver.datatables.ItemTable; import com.l2jserver.gameserver.idfactory.IdFactory; import com.l2jserver.gameserver.model.L2ItemInstance; import com.l2jserver.gameserver.model.L2World; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.itemcontainer.PcInventory; import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate; import com.l2jserver.gameserver.network.serverpackets.SystemMessage; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.sql.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; import javolution.util.*; public class L2TopRuManager { private final class L2TopRuVoteComparator extends FastComparator { public int hashCodeOf(L2TopRuVote o) { return o.hashCode(); } public boolean areEqual(L2TopRuVote o, L2TopRuVote o1) { return o.char_obj_id == o1.char_obj_id && o.datetime == o1.datetime; } public int compare(L2TopRuVote o, L2TopRuVote o1) { if(o.datetime == o1.datetime) return 0; if(o.datetime < o1.datetime) return 0x80000000; return o.datetime <= o1.datetime ? -1 : 0x7fffffff; } public volatile int compare(Object x0, Object x1) { return compare((L2TopRuVote)x0, (L2TopRuVote)x1); } public volatile boolean areEqual(Object x0, Object x1) { return areEqual((L2TopRuVote)x0, (L2TopRuVote)x1); } public volatile int hashCodeOf(Object x0) { return hashCodeOf((L2TopRuVote)x0); } final L2TopRuManager this$0; private L2TopRuVoteComparator() { this$0 = L2TopRuManager.this; super(); } } private class L2TopRuVote { public String toString() { return (new StringBuilder()).append(charname).append("-").append(count).append("[").append(char_obj_id).append("(").append(datetime).append("|").append(type.name()).append(")]").toString(); } public long datetime; public String charname; public int count; public int char_obj_id; public L2TopRuVoteType type; final L2TopRuManager this$0; public L2TopRuVote(String date, String charName, String itemCount) throws Exception { this$0 = L2TopRuManager.this; super(); char_obj_id = -1; datetime = L2TopRuManager.DATE_FORMAT.parse(date).getTime() / 1000L; count = Byte.parseByte(itemCount); charname = charName.toLowerCase(); type = L2TopRuVoteType.SMS; } public L2TopRuVote(String date, String charName) throws Exception { this$0 = L2TopRuManager.this; super(); char_obj_id = -1; datetime = L2TopRuManager.DATE_FORMAT.parse(date).getTime() / 1000L; charname = charName.toLowerCase(); count = 1; type = L2TopRuVoteType.WEB; } } private static final class L2TopRuVoteType extends Enum { public static L2TopRuVoteType[] values() { return (L2TopRuVoteType[])$VALUES.clone(); } public static L2TopRuVoteType valueOf(String name) { return (L2TopRuVoteType)Enum.valueOf(com/l2jserver/gameserver/taskmanager/L2TopRuManager$L2TopRuVoteType, name); } public static final L2TopRuVoteType WEB; public static final L2TopRuVoteType SMS; private static final L2TopRuVoteType $VALUES[]; static { WEB = new L2TopRuVoteType("WEB", 0); SMS = new L2TopRuVoteType("SMS", 1); $VALUES = (new L2TopRuVoteType[] { WEB, SMS }); } private L2TopRuVoteType(String s, int i) { super(s, i); } } private class L2TopRuTask implements Runnable { public void run() { L2TopRuManager.getInstance().tick(); } final L2TopRuManager this$0; private L2TopRuTask() { this$0 = L2TopRuManager.this; super(); } } public static L2TopRuManager getInstance() { if(_instance == null) _instance = new L2TopRuManager(); return _instance; } private L2TopRuManager() { if(ExternalConfig.L2TOPRU_DELAY < 1L) { return; } else { _log.info("L2TopRuManager: Initializing."); _webPattern = Pattern.compile((new StringBuilder()).append("^([\\d-]+\\s[\\d:]+)\\s+(?:").append(ExternalConfig.L2TOPRU_PREFIX).append("-)*([a-zA-Z0-9-]+)$").toString(), 8); _smsPattern = Pattern.compile((new StringBuilder()).append("^([\\d-]+\\s[\\d:]+)\\s+(?:").append(ExternalConfig.L2TOPRU_PREFIX).append("-)*([a-zA-Z0-9-]+)\\s+x(\\d{1,2})$").toString(), 8); ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new L2TopRuTask(), ExternalConfig.L2TOPRU_DELAY, ExternalConfig.L2TOPRU_DELAY); return; } } private FastTable filterVotes(FastTable votes) { FastTable result; FastMap chars; Connection con; result = new FastTable(); chars = new FastMap(); con = null; Statement stmt = null; ResultSet rset = null; con = L2DatabaseFactory.getInstance().getConnection(); Statement stmt = con.createStatement(); ResultSet rset; for(rset = stmt.executeQuery("SELECT `charId`,`char_name` FROM `characters`"); rset.next(); chars.put(rset.getString("char_name").toLowerCase(), Integer.valueOf(rset.getInt("charId")))); stmt.close(); rset.close(); L2DatabaseFactory.close(con); break MISSING_BLOCK_LABEL_142; Exception ex; ex; ex.printStackTrace(); L2DatabaseFactory.close(con); break MISSING_BLOCK_LABEL_142; Exception exception; exception; L2DatabaseFactory.close(con); throw exception; int charObjId = 0; Iterator i$ = votes.iterator(); do { if(!i$.hasNext()) break; L2TopRuVote vote = (L2TopRuVote)i$.next(); if(chars.containsKey(vote.charname)) { charObjId = ((Integer)chars.get(vote.charname)).intValue(); if(isRewardReq(charObjId, vote.datetime)) { vote.char_obj_id = charObjId; result.add(vote); } } } while(true); return result; } private boolean isRewardReq(int charObjId, long date) { long lastDate; Connection con; PreparedStatement pstmt; ResultSet rset; Exception ex; lastDate = 0L; con = null; pstmt = null; rset = null; if(_voteDateCache.containsKey(Integer.valueOf(charObjId))) { lastDate = ((Long)_voteDateCache.get(Integer.valueOf(charObjId))).longValue(); if(date > lastDate) { _voteDateCache.put(Integer.valueOf(charObjId), Long.valueOf(date)); try { con = L2DatabaseFactory.getInstance().getConnection(); pstmt = con.prepareStatement("REPLACE DELAYED INTO `l2topru_votes`(`obj_Id`,`last_vote`) VALUES (?,?)"); pstmt.setInt(1, charObjId); pstmt.setLong(2, date); pstmt.executeUpdate(); pstmt.close(); L2DatabaseFactory.close(con); } // Misplaced declaration of an exception variable catch(Exception ex) { ex.printStackTrace(); } return true; } break MISSING_BLOCK_LABEL_449; } boolean flag; con = L2DatabaseFactory.getInstance().getConnection(); pstmt = con.prepareStatement("SELECT `obj_Id`,`last_vote` FROM `l2topru_votes` WHERE `obj_Id` = ?"); pstmt.setInt(1, charObjId); rset = pstmt.executeQuery(); if(!rset.next()) break MISSING_BLOCK_LABEL_317; lastDate = rset.getLong("last_vote"); pstmt.close(); rset.close(); if(date <= lastDate) break MISSING_BLOCK_LABEL_298; _voteDateCache.put(Integer.valueOf(charObjId), Long.valueOf(date)); try { pstmt = con.prepareStatement("REPLACE DELAYED INTO `l2topru_votes`(`obj_Id`,`last_vote`) VALUES (?,?)"); pstmt.setInt(1, charObjId); pstmt.setLong(2, date); pstmt.executeUpdate(); pstmt.close(); L2DatabaseFactory.close(con); } // Misplaced declaration of an exception variable catch(Exception ex) { ex.printStackTrace(); } flag = true; L2DatabaseFactory.close(con); return flag; _voteDateCache.put(Integer.valueOf(charObjId), Long.valueOf(lastDate)); break MISSING_BLOCK_LABEL_416; pstmt.close(); rset.close(); _voteDateCache.put(Integer.valueOf(charObjId), Long.valueOf(date)); try { pstmt = con.prepareStatement("REPLACE DELAYED INTO `l2topru_votes`(`obj_Id`,`last_vote`) VALUES (?,?)"); pstmt.setInt(1, charObjId); pstmt.setLong(2, date); pstmt.executeUpdate(); pstmt.close(); L2DatabaseFactory.close(con); } // Misplaced declaration of an exception variable catch(boolean flag) { flag.printStackTrace(); } flag = true; L2DatabaseFactory.close(con); return flag; L2DatabaseFactory.close(con); break MISSING_BLOCK_LABEL_449; flag; flag.printStackTrace(); L2DatabaseFactory.close(con); break MISSING_BLOCK_LABEL_449; Exception exception; exception; L2DatabaseFactory.close(con); throw exception; return false; } private void rewardVotes(FastTable votes) { Iterator i$ = votes.iterator(); do { if(!i$.hasNext()) break; L2TopRuVote vote = (L2TopRuVote)i$.next(); static class _cls1 { static final int $SwitchMap$com$l2jserver$gameserver$taskmanager$L2TopRuManager$L2TopRuVoteType[]; static { $SwitchMap$com$l2jserver$gameserver$taskmanager$L2TopRuManager$L2TopRuVoteType = new int[L2TopRuVoteType.values().length]; try { $SwitchMap$com$l2jserver$gameserver$taskmanager$L2TopRuManager$L2TopRuVoteType[L2TopRuVoteType.WEB.ordinal()] = 1; } catch(NoSuchFieldError ex) { } try { $SwitchMap$com$l2jserver$gameserver$taskmanager$L2TopRuManager$L2TopRuVoteType[L2TopRuVoteType.SMS.ordinal()] = 2; } catch(NoSuchFieldError ex) { } } } switch(_cls1..SwitchMap.com.l2jserver.gameserver.taskmanager.L2TopRuManager.L2TopRuVoteType[vote.type.ordinal()]) { case 1: // '\001' _log.info((new StringBuilder()).append("L2TopRuManager: Rewarding ").append(vote.toString()).toString()); giveItem(vote.char_obj_id, ExternalConfig.L2TOPRU_WEB_REWARD_ITEMID, ExternalConfig.L2TOPRU_WEB_REWARD_ITEMCOUNT); break; case 2: // '\002' _log.info((new StringBuilder()).append("L2TopRuManager: Rewarding ").append(vote.toString()).toString()); giveItem(vote.char_obj_id, ExternalConfig.L2TOPRU_SMS_REWARD_ITEMID, ExternalConfig.L2TOPRU_SMS_REWARD_VOTE_MULTI ? ExternalConfig.L2TOPRU_SMS_REWARD_ITEMCOUNT * vote.count : ExternalConfig.L2TOPRU_SMS_REWARD_ITEMCOUNT); break; } } while(true); } private void giveItem(int charObjId, int itemId, int itemCount) { if(charObjId < 1) return; L2PcInstance player = (L2PcInstance)L2World.getInstance().findObject(charObjId); if(player != null) { L2ItemInstance item = player.getInventory().addItem("L2TopVoting", itemId, itemCount, null, null); InventoryUpdate iu = new InventoryUpdate(); iu.addItem(item); player.sendPacket(iu); SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_PICKED_UP_S1_S2); sm.addItemName(item); sm.addNumber(itemCount); player.sendPacket(sm); } else { L2ItemInstance newItem = new L2ItemInstance(IdFactory.getInstance().getNextId(), ItemTable.getInstance().getTemplate(itemId)); newItem.setCount(itemCount); newItem.setOwnerId(charObjId); newItem.setLocation(com.l2jserver.gameserver.model.L2ItemInstance.ItemLocation.INVENTORY); newItem.updateDatabase(true); } } private FastTable getAllVotes() { FastTable result = new FastTable(); try { L2TopRuVote vote; for(Matcher m = _webPattern.matcher(getPage(ExternalConfig.L2TOPRU_WEB_VOTE_URL)); m.find(); result.add(vote)) vote = new L2TopRuVote(m.group(1), m.group(2)); L2TopRuVote vote; for(Matcher m = _smsPattern.matcher(getPage(ExternalConfig.L2TOPRU_SMS_VOTE_URL)); m.find(); result.add(vote)) vote = new L2TopRuVote(m.group(1), m.group(2), m.group(3)); result.setValueComparator(new L2TopRuVoteComparator(null)); } catch(Exception ex) { ex.printStackTrace(); } return result.sort(); } private void tick() { _log.info("L2TopRuManager: Rewarding votes."); rewardVotes(filterVotes(getAllVotes())); } private String getPage(String uri) throws Exception { URL url = new URL(uri); URLConnection conn = url.openConnection(); conn.addRequestProperty("Host", url.getHost()); conn.addRequestProperty("Accept", "*/*"); conn.addRequestProperty("Connection", "close"); conn.addRequestProperty("User-Agent", USERAGENT); conn.setConnectTimeout(30000); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "cp1251")); StringBuilder builder = new StringBuilder(); for(String line = null; (line = in.readLine()) != null;) builder.append(line).append("\n"); return builder.toString(); } protected static final Logger _log = Logger.getLogger(com/l2jserver/gameserver/taskmanager/L2TopRuManager.getName()); private Pattern _webPattern; private Pattern _smsPattern; private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static L2TopRuManager _instance = null; private static FastMap _voteDateCache = (new FastMap()).shared(); private static String USERAGENT = "Mozilla/5.0 (%Platform%; %Version%; %Architecture%; U) %JVM%/%JVMVer%".replace("%Platform%", System.getProperty("os.name")).replace("%Version%", System.getProperty("os.version")).replace("%Architecture%", System.getProperty("os.arch")).replace("%JVM%", System.getProperty("java.vm.name")).replace("%JVMVer%", System.getProperty("java.vm.version")); } |
09.03.2011, 20:15 | #27 |
Герой
|
Re: [Core]Community Board
Вот лови))
1:Свернуть ↑
Свернуть ↑Развернуть ↓
Код:
/* * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ package com.l2jserver.gameserver.taskmanager; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; import javolution.util.FastComparator; import javolution.util.FastMap; import javolution.util.FastTable; import com.l2jserver.ExternalConfig; import com.l2jserver.L2DatabaseFactory; import com.l2jserver.gameserver.ThreadPoolManager; import com.l2jserver.gameserver.datatables.ItemTable; import com.l2jserver.gameserver.idfactory.IdFactory; import com.l2jserver.gameserver.model.L2ItemInstance; import com.l2jserver.gameserver.model.L2World; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.network.SystemMessageId; import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate; import com.l2jserver.gameserver.network.serverpackets.SystemMessage; public class L2TopRuManager { protected static final Logger _log = Logger.getLogger(L2TopRuManager.class.getName()); private Pattern _webPattern; private Pattern _smsPattern; private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static L2TopRuManager _instance = null; private static FastMap<Integer, Long> _voteDateCache = new FastMap<Integer, Long>().shared(); // Кеш: charObjId=>lastVoteDate private static String USERAGENT = "Mozilla/5.0 (%Platform%; %Version%; %Architecture%; U) %JVM%/%JVMVer%" .replace("%Platform%", System.getProperty("os.name")).replace("%Version%", System.getProperty("os.version")).replace("%Architecture%", System.getProperty("os.arch")) .replace("%JVM%", System.getProperty("java.vm.name")).replace("%JVMVer%", System.getProperty("java.vm.version")); public static L2TopRuManager getInstance() { if (_instance == null) _instance = new L2TopRuManager(); return _instance; } private L2TopRuManager() { if (ExternalConfig.L2TOPRU_DELAY < 1) return; _log.info("L2TopRuManager: Initializing."); _webPattern = Pattern.compile("^([\\d-]+\\s[\\d:]+)\\s+(?:"+ExternalConfig.L2TOPRU_PREFIX+"-)*([a-zA-Z0-9-]+)$", Pattern.MULTILINE); _smsPattern = Pattern.compile("^([\\d-]+\\s[\\d:]+)\\s+(?:"+ExternalConfig.L2TOPRU_PREFIX+"-)*([a-zA-Z0-9-]+)\\s+x(\\d{1,2})$", Pattern.MULTILINE); ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new L2TopRuTask(), ExternalConfig.L2TOPRU_DELAY, ExternalConfig.L2TOPRU_DELAY); } private class L2TopRuTask implements Runnable { @Override public void run() { L2TopRuManager.getInstance().tick(); } } private FastTable<L2TopRuVote> filterVotes(FastTable<L2TopRuVote> votes) { FastTable<L2TopRuVote> result = new FastTable<L2TopRuVote>(); FastMap<String, Integer> chars = new FastMap<String, Integer>(); // Все персонажи сервера. Connection con = null; Statement stmt = null; ResultSet rset = null; try { con = L2DatabaseFactory.getInstance().getConnection(); stmt = con.createStatement(); rset = stmt.executeQuery("SELECT `charId`,`char_name` FROM `characters`"); while(rset.next()) chars.put(rset.getString("char_name").toLowerCase(), rset.getInt("charId")); stmt.close(); rset.close(); } catch (Exception ex) { ex.printStackTrace(); } finally { L2DatabaseFactory.close(con); } int charObjId = 0; for (L2TopRuVote vote : votes) { if(chars.containsKey(vote.charname)) // Существует ли персонаж? { charObjId = chars.get(vote.charname); // Да, берем его objId if(isRewardReq(charObjId, vote.datetime)) // Нужно-ли награда за этот голос? { vote.char_obj_id = charObjId; result.add(vote); } } } return result; } private boolean isRewardReq(int charObjId, long date) { long lastDate = 0; Connection con = null; PreparedStatement pstmt = null; ResultSet rset = null; if(_voteDateCache.containsKey(charObjId)) // Закеширована ли дата голоса? { lastDate = _voteDateCache.get(charObjId); // Да, последяя дата голосования в кеше if(date > lastDate) // текущая позже даты в кеше? { _voteDateCache.put(charObjId, date); // Да, обновим дату в кеше, try { con = L2DatabaseFactory.getInstance().getConnection(); pstmt = con.prepareStatement("REPLACE DELAYED INTO `l2topru_votes`(`obj_Id`,`last_vote`) VALUES (?,?)"); // и , заодно, в бд, pstmt.setInt(1, charObjId); pstmt.setLong(2, date); pstmt.executeUpdate(); pstmt.close(); L2DatabaseFactory.close(con); } catch (Exception ex) { ex.printStackTrace(); } return true; // и выдадим награду. } } else // промах, ишем в БД { try { con = L2DatabaseFactory.getInstance().getConnection(); pstmt = con.prepareStatement("SELECT `obj_Id`,`last_vote` FROM `l2topru_votes` WHERE `obj_Id` = ?");// в бд есть запись об этом чаре? pstmt.setInt(1, charObjId); rset = pstmt.executeQuery(); if(rset.next()) // да, есть { lastDate = rset.getLong("last_vote"); pstmt.close(); rset.close(); if (date > lastDate) // текущая позже даты в бд? { _voteDateCache.put(charObjId, date); // Да, поместим в кеш самую новую дату (текущую) try { pstmt = con.prepareStatement("REPLACE DELAYED INTO `l2topru_votes`(`obj_Id`,`last_vote`) VALUES (?,?)"); // и обновим в бд pstmt.setInt(1, charObjId); pstmt.setLong(2, date); pstmt.executeUpdate(); pstmt.close(); L2DatabaseFactory.close(con); } catch (Exception ex) { ex.printStackTrace(); } return true; // бд обновили, даем награду. } else // нет _voteDateCache.put(charObjId, lastDate); // поместим в кеш самую новую дату (из бд) } else // хм, записи нет, голосуем 1й раз, { pstmt.close(); rset.close(); _voteDateCache.put(charObjId, date); // добавим в кеш, try { pstmt = con.prepareStatement("REPLACE DELAYED INTO `l2topru_votes`(`obj_Id`,`last_vote`) VALUES (?,?)"); // сохраним pstmt.setInt(1, charObjId); pstmt.setLong(2, date); pstmt.executeUpdate(); pstmt.close(); L2DatabaseFactory.close(con); } catch (Exception ex) { ex.printStackTrace(); } return true; // и разрешим давать награду. } } catch (Exception ex) { ex.printStackTrace(); } finally { L2DatabaseFactory.close(con); } } return false; } private void rewardVotes(FastTable<L2TopRuVote> votes) { for (L2TopRuVote vote : votes) { switch (vote.type) { case WEB: _log.info("L2TopRuManager: Rewarding "+vote.toString()); giveItem(vote.char_obj_id, ExternalConfig.L2TOPRU_WEB_REWARD_ITEMID, ExternalConfig.L2TOPRU_WEB_REWARD_ITEMCOUNT); break; case SMS: _log.info("L2TopRuManager: Rewarding "+vote.toString()); giveItem(vote.char_obj_id, ExternalConfig.L2TOPRU_SMS_REWARD_ITEMID, (ExternalConfig.L2TOPRU_SMS_REWARD_VOTE_MULTI ? ExternalConfig.L2TOPRU_SMS_REWARD_ITEMCOUNT * vote.count : ExternalConfig.L2TOPRU_SMS_REWARD_ITEMCOUNT)); break; } } } private void giveItem(int charObjId, int itemId, int itemCount) { if (charObjId < 1) return; L2PcInstance player = (L2PcInstance)L2World.getInstance().findObject(charObjId); if (player != null) { L2ItemInstance item = player.getInventory().addItem("L2TopVoting", itemId, itemCount, null, null); InventoryUpdate iu = new InventoryUpdate(); iu.addItem(item); player.sendPacket(iu); //final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_PICKED_UP_S1_S2); SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_PICKED_UP_S1_S2); sm.addItemName(item); sm.addNumber(itemCount); player.sendPacket(sm); } else { L2ItemInstance newItem = new L2ItemInstance(IdFactory.getInstance().getNextId(), ItemTable.getInstance().getTemplate(itemId)); newItem.setCount(itemCount); newItem.setOwnerId(charObjId); newItem.setLocation(L2ItemInstance.ItemLocation.INVENTORY); newItem.updateDatabase(true); } } private FastTable<L2TopRuVote> getAllVotes() { FastTable<L2TopRuVote> result = new FastTable<L2TopRuVote>(); try { L2TopRuVote vote; Matcher m = _webPattern.matcher(getPage(ExternalConfig.L2TOPRU_WEB_VOTE_URL)); while(m.find()) { vote = new L2TopRuVote(m.group(1), m.group(2)); result.add(vote); } m = _smsPattern.matcher(getPage(ExternalConfig.L2TOPRU_SMS_VOTE_URL)); while(m.find()) { vote = new L2TopRuVote(m.group(1), m.group(2), m.group(3)); result.add(vote); } result.setValueComparator(new L2TopRuVoteComparator()); } catch (Exception ex) { ex.printStackTrace(); } return result.sort(); } private void tick() { _log.info("L2TopRuManager: Rewarding votes."); rewardVotes(filterVotes(getAllVotes())); } private String getPage(String uri) throws Exception { URL url = new URL(uri); URLConnection conn = url.openConnection(); conn.addRequestProperty("Host", url.getHost()); conn.addRequestProperty("Accept", "*/*"); conn.addRequestProperty("Connection", "close"); conn.addRequestProperty("User-Agent", USERAGENT); conn.setConnectTimeout(30000); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "cp1251")); // cp1251 ((( StringBuilder builder = new StringBuilder(); String line = null; while((line = in.readLine()) != null) { builder.append(line).append("\n"); } return builder.toString(); } private enum L2TopRuVoteType { WEB, SMS } private class L2TopRuVote { public long datetime; public String charname; public int count; public int char_obj_id = -1; public L2TopRuVoteType type; public L2TopRuVote(String date, String charName, String itemCount) throws Exception { datetime = DATE_FORMAT.parse(date).getTime() / 1000; count = Byte.parseByte(itemCount); charname = charName.toLowerCase(); type = L2TopRuVoteType.SMS; } public L2TopRuVote(String date, String charName) throws Exception { datetime = DATE_FORMAT.parse(date).getTime() / 1000; charname = charName.toLowerCase(); count = 1; type = L2TopRuVoteType.WEB; } @Override public String toString() { return charname + "-" + count + "[" + char_obj_id + "(" + datetime + "|" + type.name() + ")]"; } } private final class L2TopRuVoteComparator<T> extends FastComparator<L2TopRuVote> { @Override public int hashCodeOf(L2TopRuVote o) { return o.hashCode(); } @Override public boolean areEqual(L2TopRuVote o, L2TopRuVote o1) { return o.char_obj_id == o1.char_obj_id && o.datetime == o1.datetime; } @Override public int compare(L2TopRuVote o, L2TopRuVote o1) { if (o.datetime == o1.datetime) return 0; if (o.datetime < o1.datetime) return Integer.MIN_VALUE; if (o.datetime > o1.datetime) return Integer.MAX_VALUE; return -1; } } } |
09.03.2011, 20:41 | #28 |
Постоялец
|
Re: [Core]Community Board
и еще один маленький вопрос, сылочки из админки беруться или промо с статистики топа ?)
|
10.03.2011, 00:13 | #29 |
Герой
|
Re: [Core]Community Board
Уточни какие именно сылочки!Немного недопонял тебя!
|
10.03.2011, 09:25 | #30 |
Постоялец
|
Re: [Core]Community Board
http://l2top.ru/info/id/votes/ваш_id
Добавлено через 7 часов 39 минут хмм взял я сылочку из админки, но при выдачи награды, не кидает в базу инфу про голосование и ошибка Код:
REPLACE DELAYED INTO Код:
java.sql.SQLException: DELAYED option not supported for table 'l2topru_votes' Последний раз редактировалось APKO; 10.03.2011 в 17:10. Причина: Добавлено сообщение |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Community Board | kingzor | Lineage II | 2 | 25.12.2010 22:01 |
[help]community board | DarkFall | Lineage II | 4 | 28.11.2010 15:24 |
Community Board | NooboAdm | Lineage II | 3 | 11.08.2010 13:38 |
Community board | ВОРОН | Lineage II | 5 | 27.07.2010 18:46 |
Community Board | battle | Lineage II | 1 | 11.03.2009 18:41 |