System explain: Every day, at certain time range, for example from 19PM to 22PM, players, who are online for 1hour and are not afk for more than (lets say in this code 10mins) will get certain reward.
Can you tell me what to improve or what part could be done differently or even in more simply way?
It's based on IP/HWID protection and I want to figure out if the daily cleanup is done correctly.
/*
* 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 services;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ScheduledFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import l2ro.gameserver.Config;
import l2ro.gameserver.ThreadPoolManager;
import l2ro.gameserver.database.mysql;
import l2ro.gameserver.model.GameObjectsStorage;
import l2ro.gameserver.model.Player;
import l2ro.gameserver.scripts.ScriptFile;
/**
*
* @author L
*/
public class AutoReward implements ScriptFile, Runnable
{
private static final Logger _log = LoggerFactory.getLogger(Player.class);
private static final int REWARD_DELAY = 3600000; // 1h.
private static final int REQUIRED_ONLINE = Config.DAILY_REWARD_REQUIRED_ONLINE * 3600000; // 1h.
private static final int NOT_REWARD_AFK_DELAY = Config.DAILY_REWARD_AFK_TIME * 60000; // 10 mins.(Config 10)
private static final DateFormat TIME_FORMAT = new SimpleDateFormat("HH");
private boolean CLEANED = false;
private ScheduledFuture<?> _task =null;@Overridepublicvoid run(){if(CLEANED && time()>=Config.DAILY_REWARD_END_HOUR || time()<Config.DAILY_REWARD_START_HOUR)
CLEANED =false;if(time()>=Config.DAILY_REWARD_START_HOUR && time()<=Config.DAILY_REWARD_END_HOUR){for(Player player :GameObjectsStorage.getAllPlayersForIterate()){if(player.isOnline()&& player.getUptime()>= REQUIRED_ONLINE
&&(System.currentTimeMillis()- player.getLastNotAfkTime())> NOT_REWARD_AFK_DELAY){if(!isRewardedDB(player)){
player.sendMessage("You will get your reward");
setRewardDB(player);}}}}if(CLEANED ==false&& time()<=Config.DAILY_REWARD_START_HOUR){
CLEANED =true;
wipeRewardDB();}}publicstaticint time(){returnInteger.parseInt(TIME_FORMAT.format(newDate(System.currentTimeMillis())));}publicstaticboolean isRewardedDB(Player player){String value =Config.DAILY_REWARD_PROTECTION.equals("HWID")? player.getHWID(): player.getIP();if(player.getVar("daily_reward")!=null)returntrue;if(mysql.get("SELECT value FROM character_variables WHERE name='daily_reward' AND value='"+value+"'")!=null)returntrue;returnfalse;}publicstaticvoid setRewardDB(Player player){String value =Config.DAILY_REWARD_PROTECTION.equals("HWID")? player.getHWID(): player.getIP();
mysql.set("INSERT INTO character_variables (obj_id, type, name, value, expire_time) VALUES (?,?,?,?,?)", player.getObjectId(),"user-var","daily_reward", value,-1);}publicstaticvoid wipeRewardDB(){
mysql.set("DELETE FROM `character_variables` WHERE `type`='user-var' and `name`='daily_reward'");}@Overridepublicvoid onLoad(){
_log.info("Loaded Service: AutoReward");if(_task ==null)
_task =ThreadPoolManager.getInstance().scheduleAtFixedDelay(this, REWARD_DELAY, REWARD_DELAY);}@Overridepublicvoid onReload(){if(_task !=null){
_task.cancel(true);
_task =null;}
_task =ThreadPoolManager.getInstance().scheduleAtFixedDelay(this, REWARD_DELAY, REWARD_DELAY);}@Overridepublicvoid onShutdown(){//}}
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
Okay, I understand. First, to get started by contributing to open projects and learning along the way. Then, when you mention starting my own project privately, do you mean taking a free datapack like L2jMobius and trying to make it functional for an online server? Great, thank you very much — all this information is really helpful. I’ve been reaching out to several server admins here in Argentina, but it seems like none of them have the time or interest to take on an intern or assistant. xd
P.S.: Are you the creator of Hopzone? Brings back memories of when I was a kid, downloading servers at the cyber café. For two dollars, I could spend the whole day playing and eating candy like crazy.
Another question: between L2jMobius, L2jServer, and aCis, which one has ALL of its code free?
As you probably noticed, I'm using ChatGPT to help me translate things, lol, and it suggested the following:
Project
Status
Open Source
Accepts Juniors?
Difficulty
L2JMobius
Very active
Semi-closed
Partially (with patches)
Medium-High
L2JServer
Active
Fully open
Yes (directly on GitHub)
Medium
aCis
Semi-active
Unofficial
Not very clear
Low
That's exactly how it’s designed — everything important is handled on the API server side, for example, processing requests to the game server. Each website has its own token/key for authentication; without it, there will be no interaction with the game server.
Some data can be stored both on my side and on the server side to avoid making frequent requests to the server, which is logical.
Yes, there’s a lot of old, unused code that just needs to be cleaned up. It was used before, but after major rewrites it was left lying around. It doesn’t interfere with anything — it’s just there and doesn’t affect the system's operation.
Beaver meme kurwa is my favorite.
Unfortunately, you don't know Russian — otherwise, you would’ve spotted even more Easter eggs. 😂
I said it’s been installed over 250 times on different domains. You can join my Telegram, there are almost 200 people there — and those are just the ones who entered the chat — and we’ll have a good laugh together at your doubts! 😂😂😂
Question
ruut
It's based on shared L2Ava files, let's say.
System explain: Every day, at certain time range, for example from 19PM to 22PM, players, who are online for 1hour and are not afk for more than (lets say in this code 10mins) will get certain reward.
Can you tell me what to improve or what part could be done differently or even in more simply way?
It's based on IP/HWID protection and I want to figure out if the daily cleanup is done correctly.
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.