Hello :D i have adapted GoldenBoy™ Vote Reward System from Interlude to High Five and i have made few changes ... ( votes are saved in db now and more .. )
### Eclipse Workspace Patch 1.0
#P L2J_Server_H5
Index: java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardHandler.java
===================================================================
--- java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardHandler.java (revision 0)
+++ java/com/l2jserver/gameserver/instancemanager/AutoVoteRewardHandler.java (revision 0)
@@ -0,0 +1,235 @@
+package com.l2jserver.gameserver.instancemanager;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.l2jserver.gameserver.model.item.instance.L2ItemInstance;
+import com.l2jserver.Config;
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.clientpackets.Say2;
+import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
+import com.l2jserver.gameserver.util.Broadcast;
+
+public class AutoVoteRewardHandler
+{
+ private static Logger _log = Logger.getLogger(AutoVoteRewardHandler.class.getName());
+
+ private static final int initialCheck = 1 * 1000;
+ private static final int delayForCheck = Config.DELAY_FOR_NEXT_REWARD * 1000;
+
+ private static int lastVoteCount = 0;
+
+ private AutoVoteRewardHandler()
+ {
+ _log.info("Vote Reward System: Vote reward system initiated.");
+ if (Config.VOTE_REWARD_ENABLE)
+ load();
+ ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), initialCheck, delayForCheck);
+ }
+
+ private class AutoReward implements Runnable
+ {
+ @Override
+ public void run()
+ {
+ int votes = getVotes(Config.VOTE_HTML_PATCH);
+ System.out.println("Server Votes: " + votes);
+ if (votes != 0 && getLastVoteCount() != 0 && votes >= getLastVoteCount() + Config.VOTES_FOR_REWARD)
+ {
+ Connection con = null;
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("SELECT c.charId, c.char_name FROM characters AS c LEFT JOIN accounts AS a ON c.account_name = a.login WHERE c.online > 0 GROUP BY a.lastIP ORDER BY c.level DESC");
+ ResultSet rset = statement.executeQuery();
+ L2PcInstance player = null;
+ L2ItemInstance item = null;
+ L2ItemInstance item2 = null;
+ while (rset.next())
+ {
+ player = L2World.getInstance().getPlayer(rset.getInt("charId"));
+ if (player != null && !player.getClient().isDetached())
+ {
+ item = player.getInventory().getItemByItemId(Config.VOTE_REWARD1_ID);
+ if (item == null || item.getCount() < Config.MAX_REWARD_COUNT_FOR_STACK_ITEM1)
+ player.addItem("reward", Config.VOTE_REWARD1_ID, Config.VOTE_REWARD1_COUNT, player, true);
+ item2 = player.getInventory().getItemByItemId(Config.VOTE_REWARD1_ID);
+
+ if (item2 == null || item2.getCount() < Config.MAX_REWARD_COUNT_FOR_STACK_ITEM1)
+ player.addItem("reward", Config.VOTE_REWARD2_ID, Config.VOTE_REWARD2_COUNT, player, true);
+ }
+ }
+ setLastVoteCount(getLastVoteCount() + Config.VOTES_FOR_REWARD);
+ statement.close();
+ _log.info("Vote Reward System: Reward for votes now!");
+ Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.CRITICAL_ANNOUNCE, "", "Vote Manager: Reward for players! Thanks for Vote."));
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ L2DatabaseFactory.close(con);
+ }
+
+ setLastVoteCount(getLastVoteCount() + Config.VOTES_FOR_REWARD);
+ }
+ Broadcast.toAllOnlinePlayers(new CreatureSay(1, Say2.CRITICAL_ANNOUNCE, "", "Vote Manager: Server votes: " + votes + " | Next Reward on " + (getLastVoteCount() + Config.VOTES_FOR_REWARD) + " Votes."));
+ if (getLastVoteCount() == 0)
+ setLastVoteCount(votes);
+ }
+ }
+
+ private int getVotes(String urlString)
+ {
+ URL url = null;
+ InputStreamReader isr = null;
+ BufferedReader in = null;
+ try
+ {
+ url = new URL(urlString);
+ isr = new InputStreamReader(url.openStream());
+ in = new BufferedReader(isr);
+ String inputLine;
+ while ((inputLine = in.readLine()) != null)
+ {
+ if (Config.VOTE_REWARD_TOPZONE_ENABLE)
+ {
+ // for TopZone
+ if (inputLine.contains("<tr><td><div align=\"center\"><b><font style=\"font-size:14px;color:#018BC1;\""))
+ {
+ return Integer.valueOf(inputLine.split(">")[5].replace("</font", ""));
+ }
+ }
+ if (Config.VOTE_REWARD_HOPZONE_ENABLE)
+ {
+ // for HopZone
+ if (inputLine.contains("rank anonymous tooltip"))
+ {
+ @SuppressWarnings("unused")
+ int Sub = 12;
+ switch (inputLine.length())
+ {
+ case 116:
+ Sub = 13;
+ break;
+ case 117:
+ Sub = 14;
+ break;
+ case 118:
+ Sub = 15;
+ break;
+ case 119:
+ Sub = 16;
+ break;
+ }
+ return Integer.valueOf(inputLine.split(">")[2].replace("</span", ""));
+ }
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ _log.warning("Vote Reward System: "+e);
+ }
+ finally
+ {
+ try
+ {
+ in.close();
+ }
+ catch (IOException e)
+ {}
+ try
+ {
+ isr.close();
+ }
+ catch (IOException e)
+ {}
+ }
+ return 0;
+ }
+
+ private void setLastVoteCount(int voteCount)
+ {
+ lastVoteCount = voteCount;
+ }
+
+ private int getLastVoteCount()
+ {
+ return lastVoteCount;
+ }
+
+ private void load()
+ {
+ int votes = 0;
+ Connection con = null;
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("SELECT vote FROM votes LIMIT 1");
+ ResultSet rset = statement.executeQuery();
+
+ while (rset.next())
+ {
+ votes = rset.getInt("vote");
+ }
+ rset.close();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ _log.log(Level.WARNING, "data error on vote: ", e);
+ }
+ finally
+ {
+ L2DatabaseFactory.close(con);
+ }
+
+ setLastVoteCount(votes);
+ }
+
+ public void save()
+ {
+ Connection con = null;
+ try
+ {
+ con = L2DatabaseFactory.getInstance().getConnection();
+ PreparedStatement statement = con.prepareStatement("UPDATE votes SET vote = ? WHERE id=1");
+ statement.setInt(1, getLastVoteCount());
+ statement.execute();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ _log.log(Level.WARNING, "data error on vote: ", e);
+ }
+ finally
+ {
+ L2DatabaseFactory.close(con);
+ }
+ }
+
+ public static AutoVoteRewardHandler getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ @SuppressWarnings("synthetic-access")
+ private static class SingletonHolder
+ {
+ protected static final AutoVoteRewardHandler _instance = new AutoVoteRewardHandler();
+ }
+}
\ No newline at end of file
### Eclipse Workspace Patch 1.0
#P L2J_Server_H5
Index: java/com/l2jserver/gameserver/Shutdown.java
===================================================================
--- java/com/l2jserver/gameserver/Shutdown.java (revision 5219)
+++ java/com/l2jserver/gameserver/Shutdown.java (working copy)
@@ -33,6 +33,7 @@
import com.l2jserver.gameserver.instancemanager.ItemsOnGroundManager;
import com.l2jserver.gameserver.instancemanager.QuestManager;
import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
+import com.l2jserver.gameserver.instancemanager.AutoVoteRewardHandler;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.entity.Hero;
@@ -562,6 +564,10 @@
ClanTable.getInstance().storeClanScore();
_log.info("Clan System: Data saved("+tc.getEstimatedTimeAndRestartCounter()+"ms).");
+ if (Config.VOTE_REWARD_ENABLE)
+ AutoVoteRewardHandler.getInstance().save();
+ _log.info("Vote Reward Manager: Data saved("+tc.getEstimatedTimeAndRestartCounter()+"ms).");
+
// Save Cursed Weapons data before closing.
CursedWeaponsManager.getInstance().saveData();
_log.info("Cursed Weapons Manager: Data saved("+tc.getEstimatedTimeAndRestartCounter()+"ms).");
________________
### Eclipse Workspace Patch 1.0
#P L2J_Server_H5
Index: java/com/l2jserver/Config.java
===================================================================
--- java/com/l2jserver/Config.java (revision 5219)
+++ java/com/l2jserver/Config.java (working copy)
@@ -765,7 +781,41 @@
public static int L2JMOD_DUALBOX_CHECK_MAX_OLYMPIAD_PARTICIPANTS_PER_IP;
public static int L2JMOD_DUALBOX_CHECK_MAX_L2EVENT_PARTICIPANTS_PER_IP;
public static TIntIntHashMap L2JMOD_DUALBOX_CHECK_WHITELIST;
+ public static String VOTE_HTML_PATCH;
+ public static int VOTE_REWARD1_ID;
+ public static int VOTE_REWARD2_ID;
+ public static int VOTE_REWARD1_COUNT;
+ public static int VOTE_REWARD2_COUNT;
+ public static int VOTES_FOR_REWARD;
+ public static boolean VOTE_REWARD_ENABLE;
+ public static String SERVER_NAME_FOR_VOTES;
+ public static int MAX_REWARD_COUNT_FOR_STACK_ITEM1;
+ public static int MAX_REWARD_COUNT_FOR_STACK_ITEM2;
+ public static int DELAY_FOR_NEXT_REWARD;
+ public static boolean VOTE_REWARD_HOPZONE_ENABLE;
+ public static boolean VOTE_REWARD_TOPZONE_ENABLE;
public static boolean L2JMOD_ALLOW_CHANGE_PASSWORD;
//--------------------------------------------------
// NPC Settings
@@ -2646,6 +2717,47 @@
}
}
L2JMOD_ALLOW_CHANGE_PASSWORD = Boolean.parseBoolean(L2JModSettings.getProperty("AllowChangePassword", "False"));
+ VOTE_HTML_PATCH = L2JModSettings.getProperty("VoteHtmlPatch", "Null");
+ VOTE_REWARD1_COUNT = Integer.parseInt(L2JModSettings.getProperty("VoteReward1Count", "1000"));
+ VOTE_REWARD2_COUNT = Integer.parseInt(L2JModSettings.getProperty("VoteReward2Count", "1000"));
+ VOTE_REWARD1_ID = Integer.parseInt(L2JModSettings.getProperty("VoteReward1Id", "57"));
+ VOTE_REWARD2_ID = Integer.parseInt(L2JModSettings.getProperty("VoteReward2Id", "57"));
+ VOTES_FOR_REWARD = Integer.parseInt(L2JModSettings.getProperty("VotesForReward", "5"));
+ VOTE_REWARD_ENABLE = Boolean.parseBoolean(L2JModSettings.getProperty("EnableVoteReward", "False"));
+ SERVER_NAME_FOR_VOTES = L2JModSettings.getProperty("ServerNameForVotes", "L2ServerName");
+ MAX_REWARD_COUNT_FOR_STACK_ITEM1 = Integer.parseInt(L2JModSettings.getProperty("MaxRewardCountForStackItem1", "2000000000"));
+ MAX_REWARD_COUNT_FOR_STACK_ITEM2 = Integer.parseInt(L2JModSettings.getProperty("MaxRewardCountForStackItem2", "2000000000"));
+ DELAY_FOR_NEXT_REWARD = Integer.parseInt(L2JModSettings.getProperty("DelayForNextReward", "600"));
+ VOTE_REWARD_HOPZONE_ENABLE = Boolean.parseBoolean(L2JModSettings.getProperty("EnableHopzoneReward", "False"));
+ VOTE_REWARD_TOPZONE_ENABLE = Boolean.parseBoolean(L2JModSettings.getProperty("EnableTopzoneReward", "False"));
}
catch (Exception e)
{
______________
Add this after "AllowChangePassword = True" in l2jmods.prop
# ---------------------------------------------------------------------------
# Vote Reward System
# ---------------------------------------------------------------------------
# Set it "True" if you want to Enable Vote Reward System.
EnableVoteReward = False
# If you enable Vote Reward System you must fill your Html Patch.
# e.g. VoteHtmlPatch = http://l2.hopzone.net / http://l2topzone.net
# Html Patch for Your Vote Site
# Works with TopZone & HopZone
ServerNameForVotes = ServerName
VoteHtmlPatch = http://l2.hopzone.net
VoteReward1Count = 5
VoteReward2Count = 2
VoteReward1Id = 9627
VoteReward2Id = 3470
VotesForReward = 10
# Max a-beep-t of reward items that you want to stop reward
# the player that have more than "MaxRewardCountForStack".
MaxRewardCountForStackItem1 = 500
MaxRewardCountForStackItem2 = 500
# DelayForNextReward in seconds
DelayForNextReward = 300
# Enable TopZone Vote Reward
# Default = False
EnableTopzoneReward = False
# Enable HopZone Vote Reward
# Default = False
EnableHopzoneReward = True
Hello. You may encounter the Push item fail error when trying to pick up an item dropped on the ground by a mob.
or
You can throw something out of your inventory and pick it up again, several times.
Probably this is a quantum dependency) I don't understand at what point this happens, sometimes two items one after another experience push item errors, and sometimes I don't have enough thousands of attempts to repeat this trick)
In any case, this is just a visual error and after the relog, the item appears in the inventory. I think first i need to disconnect the extender and check it on a bare server. I still need time to check this, maybe it's not even about the autoloot function.
https://youtu.be/6mcfmdImofE
-----------
In general, I would like to thank our wonderful Emca Eressea for her deep knowledge in programming and reverse engineering. And for the fact that her work is open to everyone, this is very amazing, and incredibly valuable.
Question
Stewie
The problem is that check's L2jgs not l2jls for account's!
PLEASE HELP!
12 answers to this question
Recommended Posts