Сообщений: 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'
|