| 
		
	
	
	
		
	Сообщений: 44 
	Тем: 2 
	Зарегистрирован: May 2010
	
 Репутация: 
3,822 
	
	
		Для тех кто не понял как, включается она в конфиге. Я думаю в каком сами найдёте!надо поставить цифру 2 тоесть Full камунити боард! И не пишите в личку вопросы по камунити сервису он вам вообще не нужен!Только логин сервер и гейм!
	 
	
	
	
		
	Сообщений: 290 
	Тем: 23 
	Зарегистрирован: Aug 2009
	
 Репутация: 
116 
	
	
		alerion, Поделитесь плз l2top менеджером под лыжу    
	
	
	
		
	Сообщений: 44 
	Тем: 2 
	Зарегистрирован: May 2010
	
 Репутация: 
3,822 
	
	
		честно сказать дифки нет!Так как когда делал себе работал без свн!
 Как время будет посматрю, мож выдеру с кода. Щас я просто интом занят))Делаю свой сервер.
 
 Кстати подскажите кто в курсе, где прописана одежда и оружие петомцев.
 Добавил нового пета в датапак в ядро как положено итем вызова и пищу. Всё как положено пет питается качается. Но вот минус в том что не могу на него нечего одеть так как не прописал, не пойму где это))
 
	
	
	
		
	Сообщений: 225 
	Тем: 15 
	Зарегистрирован: Nov 2010
	
 Репутация: 
201 
	
	
		alerion Написал:такие вещи обычно не выкладывают умные люди)) так как это уникальность, которая даёт какое не какое а отличие сервера от других! У меня давно это всё реализованно и даже более!И смс сервис и енчантер и статистика пвп и пк и хранилище клановое и личное! Но я не считаю нужным выкладывать! тому нужно и сами сообразят как зделать в нете кусочков куча! А остальным, ну смысл от сервера если многие даже незнают как админа зделать или сервер поставить))Да и благодарности не когда не дождёшся!Проверенно! Раньше клиент часть выкладывал!И что щас по всем сайтам под разными никами уже валяется! Смысл такого! Вот уже и не выкладываю давным давно нечего! А делюсь только с определённым кругом людей! Которые хотя бы что то пытаются делать))
 Вместо восклицательных знаков можно использовать точки.
	 
	
	
	
		
	Сообщений: 44 
	Тем: 2 
	Зарегистрирован: May 2010
	
 Репутация: 
3,822 
	
		
		
		03-09-2011, 05:12 PM 
(Сообщение последний раз редактировалось: 03-09-2011, 07:12 PM   alerion.)
		
	 
		SunnyX Написал:Вместо восклицательных знаков можно использовать точки. 
А вместо поучения можно зделать что то полезное!Умник!
 
Кста мож пригодится, смс сервис от феникса адаптированный под 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
	 
	
	
	
		
	Сообщений: 290 
	Тем: 23 
	Зарегистрирован: Aug 2009
	
 Репутация: 
116 
	
	
		мнебы код из 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"));
 
 
 
 }
 
	
	
	
		
	Сообщений: 44 
	Тем: 2 
	Зарегистрирован: May 2010
	
 Репутация: 
3,822 
	
	
		APKO Написал:мнебы код из com/l2jserver/gameserver/taskmanager/L2TopRuManager.java 
Вот лови))
 
			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;
 }
 }
 }
 
	
	
	
		
	Сообщений: 290 
	Тем: 23 
	Зарегистрирован: Aug 2009
	
 Репутация: 
116 
	
	
		и еще один маленький вопрос, сылочки из админки беруться или промо с статистики топа ?)
	 
	
	
	
		
	Сообщений: 44 
	Тем: 2 
	Зарегистрирован: May 2010
	
 Репутация: 
3,822 
	
	
		Уточни какие именно сылочки!Немного недопонял тебя!
	 
	
	
	
		
	Сообщений: 290 
	Тем: 23 
	Зарегистрирован: Aug 2009
	
 Репутация: 
116 
	
		
		
		03-10-2011, 09:25 AM 
(Сообщение последний раз редактировалось: 03-10-2011, 05:10 PM   APKO.)
		
	 
		http://l2top.ru/info/id/votes/ваш_id
Добавлено через 7 часов 39 минут
хмм взял я сылочку из админки, но при выдачи награды, не кидает в базу инфу про голосование и ошибка 
 не потдержуетса для даной талицы...
 Код: java.sql.SQLException: DELAYED option not supported for table 'l2topru_votes'
 |