Jump to content
  • 0

Task Giving Items


Question

Posted

Hello how are you?. Has anyone seen or knows where I can get some sample code to take as a basis for some task that, at a certain time that the user is connected within the game, gives you items from a list of objects?

5 answers to this question

Recommended Posts

  • 0
Posted (edited)

There's different ways you can do that. How I would do it:

 

First of all, you need to save login time for each player on EnterWorld. Just make a private long _loginTime; in Player.java then on EnterWorld player.setLoginTime(System.currentTimeMillis());.

 

Then, run a task (can be a ScheduledQuest, or check gameserver.taskmanager package classes) every 1 minute to loop through all players that are online (World.getInstance().getPlayers()) and check if the correct time has passed, then reward the player.

For example, if you want players to receive a reward 30 minutes after they login, the check should be:

if ((System.currentTimeMillis() - player.getLoginTime()) / 1000 / 60 >= 30)

 

This calculation can be changed if there are other factors affecting the time for the reward. For example you want premium players to be 15 minutes instead of 30:

if ((System.currentTimeMillis() - player.getLoginTime()) / 1000 / 60 >= (player.isPremium() ? 15 : 30))

 

If the reward is static (for example, 1 per day) you can take it a step further. You can only schedule the task to run 1 time when a player logs in that hasn't received the reward yet. Then, when the task fires check if there is another player logged in that hasn't received the reward and run it again (you can even calculated the least time to run it for the next player that is to be rewarded).

 

-

 

The method mentioned above is pretty accurate, but the player can have up to 1 minute delay for the reward (which should be fine generally, unless it's something you need done on the clock).

If you want precise time, then you could either reduce the time for the above task or you could run a task for each player on EnterWorld:

 

ThreadPool.scheduleGeneral(() -> player.getInventory().addItemByItemId("reward", id, count, null, true), 30 * 1000 * 60);

Edited by An4rchy
  • 0
Posted
10 hours ago, An4rchy said:

There's different ways you can do that. How I would do it:

 

First of all, you need to save login time for each player on EnterWorld. Just make a private long _loginTime; in Player.java then on EnterWorld player.setLoginTime(System.currentTimeMillis());.

 

Then, run a task (can be a ScheduledQuest, or check gameserver.taskmanager package classes) every 1 minute to loop through all players that are online (World.getInstance().getPlayers()) and check if the correct time has passed, then reward the player.

For example, if you want players to receive a reward 30 minutes after they login, the check should be:

if ((System.currentTimeMillis() - player.getLoginTime()) / 1000 / 60 >= 30)

 

This calculation can be changed if there are other factors affecting the time for the reward. For example you want premium players to be 15 minutes instead of 30:

if ((System.currentTimeMillis() - player.getLoginTime()) / 1000 / 60 >= (player.isPremium() ? 15 : 30))

 

If the reward is static (for example, 1 per day) you can take it a step further. You can only schedule the task to run 1 time when a player logs in that hasn't received the reward yet. That way you will avoid running the task every one minute.

 

-

 

The method mentioned above is pretty accurate, but the player can have up to 1 minute delay for the reward (which should be fine generally, unless it's something you need done on the clock).

If you want precise time, then you could either reduce the time for the above task (which I do not recommend since it loops through all online players) or you could run a task for each player on EnterWorld:

 

ThreadPool.scheduleGeneral(() -> player.getInventory().addItemByItemId("reward", id, count, null, true), 30 * 1000 * 60);

 

 

 

Thanks bro! great idea.

  • 0
Posted (edited)

 

okay. I have been able to solve that problem and I have received the item after some time.
I am using Sunrise, is it possible that I can create an array of ints with the ID number of the item so that depending on the time it is connected, it will go through the array and give away the items?
I speak type of the variable CONFIGS of the ini.

Edited by barao45
  • 0
Posted (edited)

did you made setter / getter ?

 

if you dont use a hwid protection for this kind of rewards it will be very easy to exploit.

 

Date dt = new Date(_loginTime);
 final SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

activeChar.sendMessage("You are logged in since -> " + df.format(dt) + ". Enjoy the Game.");
                    

Edited by arm4729

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


  • Posts

    • Bought the interface source for the 557 protocol from him. Everything works as described, no issues so far. Smooth deal, would recommend.
    • Add try version of protocol 563 https://drive.google.com/file/d/1l1QnyFGXxX_c98FNUgXHFmDsIzZCrVc6/view?usp=drive_link
    • WTS Adena Stock 2.6kkk Titan 78 Sub Sagitarius 76 nobless Hirophant 78 Sub Cardinal 78 nobless   discord : nhr0711
    • We are not another "open-close" project. LOE is a long-term Essence server that has been live for over a year — NewAge x2 is our brand-new world, and it will never be wiped. 🗺 STAGED WORLD PROGRESSION Here is what kills most servers: no-lifers hit the cap in three days, everyone else logs in to a finished race. On LOE the world unlocks stage by stage, every ~2 weeks — new locations, new bosses, new gear ceiling. The server grows as one. Start on day one or day ten — you are still in the race. ✨ WHAT MAKES US DIFFERENT Subclass system on Essence — a full dedicated questline, unique for this platform. Your build, your rules. Talent system — three branches: tank, damage, farm. Two players, same class, different characters. Hero skills and deep character customization. Fair progression — power comes from playing, not from a credit card. x2 rates — the classic Essence pace without the grind wall. 📚 WE DOCUMENTED EVERYTHING 25,000+ items, every class with full skill tables, monsters, drop rates, quests, locations. Check the server before you even download it: loe.promo/wiki — no other project gives you this. 📋 SERVER INFO Platform: Lineage 2 Essence · Rates: x2 Open Beta: July 24 — test the stages and the subclass questline before launch Grand Opening: July 31, 20:00 GMT+3 Site & wiki in English — international players welcome 🔒 YOUR NICKNAME IS BEING TAKEN RIGHT NOW Reservation is already open. On the 31st the crowd arrives — the name you have carried through every server for years may simply be gone. Lock it in 30 seconds: Equal start for everyone. See you in Elcardia — July 31, 20:00 GMT+3. Questions? Drop them below — the team reads this thread daily.
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..