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
Good evening, I have a problem with the items+ when I enchant, for example, the armors,
the weapons, all the stats are normal. When I put them on my inventory, the +4+5 etc.
that I have done do not appear.
The project is h5 with the salvation protocol. Can any expert help me fix it? Thanks in advance.
some screens... this items is +12
https://prnt.sc/fh2i0pjCHDY_
https://prnt.sc/qc1kLl-S4hn6
https://prnt.sc/CTFw3HOdZDPz
Grand Opening On 08/10/2025
Server Rates:
Exp: x3
Sp: x3
Adena: x3
Items: x3
Spoil: x4
Quests Drop: x3
Rate in some quests: x2-x6
ENCHANT Weapons / Armor / Jewelry:
Safe +3
Max +21/+20/+20
Rates of Enchant:
Normal 70% Bless 80%, from +15 Normal 55% Bless 65%
Server Commands:
.menu
.vote
.npcinfo
Augmentation:
NGS : 5%
Mid : 8%
High: 10%
Top: 15%
Other:
According to the concept of a Olympiad NCSoft.
No Donate things affect the game balance.
Bonuses for voting on TOP sites.
/ unstuck 2 minutes.
Free Tp until lvl 40.
According to the concept of a castle siege NCSoft.
The maximum number of windows from one PC is 4
Buffs
Number of slots: 25
Number of debuff slots: 6
Duration of the buffs: Retail
RAID/GRAND BOSSES
Retail like.
Rate Raid Drop Items = x2
Seven Signs:
According to the concept of NCSoft.
GM Donate Shop
All items you need are there
One shop all items
B-A-S grade for Donation Coins
Finery / Misc / Recipes / Quest and much more.
Offline Shops
Just exit your client when you have shop.
Offline Max Days: 7
Offline Place: Only in Peace Zone
Custom Vip / Hero for: 3, 10, 30 Days
Vip Benefits
Exp: x8
Sp: x8
Adena: x8
Items: x8
Spoil: x10
Quests: x8
Raid Drop Items: x3
Rate in some quests: x2-x6
And more in Vip Manager
Join us and discover many more features in our server!
https://l2doll.com/
Results don’t come instantly
Sometimes it feels like nothing is moving. You take small steps, and the results barely show.
But it’s exactly these steps that build your tomorrow. Every day, every effort is an investment in yourself and your success.
Patience isn’t about sitting and waiting for miracles—it’s about moving forward with confidence.
Real victories take time, effort, and your constant determination.
Don’t rush the process-the journey itself is valuable, and it’s what shapes results that last.
…The right energy always comes back. 💫 VibeSMS
Website: https://vibe-sms.net/
Telegram channel: https://t.me/vibe_sms
Question
Stewie
It check l2jgs/accounts... for IP
It need to check L2jls for IP....
I make L2jls database to be in L2jgs... all table's are now in L2JGS.... and it's working BUT:
I guess problem is not big, but if i wanna apply another Event wich check IP, and if it check in L2jls it will be problem
7 answers to this question
Recommended Posts