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?

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.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...