Jump to content
  • 0

Online Time reward


Question

Posted

I want to give 1 GCM per hour to online players.

I am editing the java code I found for this, but it does not give an hourly reward.

 

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 l2f.gameserver.Config;
import l2f.gameserver.ThreadPoolManager;
import l2f.gameserver.database.mysql;
import l2f.gameserver.model.GameObjectsStorage;
import l2f.gameserver.model.Player;
import l2f.gameserver.scripts.ScriptFile;
/**
 *
 * @author Special
 */
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;

    @Override
    public void 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 have been rewarded for online time!");
                            setRewardDB(player);
                        }
                    }
            }
        }
        
        if(CLEANED == false && time() <= Config.DAILY_REWARD_START_HOUR) {
            CLEANED = true;
            wipeRewardDB();
        }
    }
    
    public static int time()
    {
        return Integer.parseInt(TIME_FORMAT.format(new Date(System.currentTimeMillis())));
    }
    
    public static boolean isRewardedDB(Player player) {
        String value = Config.DAILY_REWARD_PROTECTION.equals("HWID") ? player.getHWID() : player.getIP();
    
        if(player.getVar("daily_reward") != null)
            return true;
        
        if(mysql.get("SELECT value FROM character_variables WHERE name='daily_reward' AND value='"+value+"'") != null)
            return true;
        
        return false;
    }
    
    public static void 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);
    }
    
    public static void wipeRewardDB() {

        mysql.set("DELETE FROM `character_variables` WHERE `type`='user-var' and `name`='daily_reward'");
    }

    @Override
    public void onLoad()
    {
        _log.info("Loaded Service: AutoReward");
        if(_task == null)
            _task = ThreadPoolManager.getInstance().scheduleAtFixedDelay(this, REWARD_DELAY, REWARD_DELAY);
    }

    @Override
    public void onReload()
    {
        if(_task != null)
        {
            _task.cancel(true);
            _task = null;
        }
        _task = ThreadPoolManager.getInstance().scheduleAtFixedDelay(this, REWARD_DELAY, REWARD_DELAY);
    }

    @Override
    public void onShutdown()
    {
        //
    }
}

1 answer to this question

Recommended Posts

  • 0
Posted

I don't even think this is compilable to honest.

 

Do you want the reward to be every hour on the 24 hour clock, or every hour from the moment the server starts? I mean should it be exactly at 12:00, 13:00, 14:00 or if server starts at 12:21 rewards at 13:21, 14:21, 15:21?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock