Jump to content
  • 0

Problem With Announcements!


Question

Posted
Hello all! i have a problem! when the announcements of this event appears all players can see them but is repetable! If 5 players are online 5 annoucments in each player appears...

Thanks in advance!

 

 

 

/*

* 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 net.sf.l2j.gameserver.model.entity;

 

import java.util.Collection;

 

import net.sf.l2j.Config;

import net.sf.l2j.gameserver.ThreadPoolManager;

import net.sf.l2j.gameserver.Announcements;

import net.sf.l2j.gameserver.model.L2World;

import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;

 

 

/**

 * @creado KingBorracho69

 *

 */

public class AutoRewarder

{      

 

       public static void getInstance()

       {

               ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable()

               {

                       public void run()

                       {

                               AutoReward();

                       }

                      

               }, 0,Config.AUTO_REWARD_DELAY * 1000);

       }

       public static void AutoReward()

       {

               Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();

               for (L2PcInstance p: pls)

               {

                  

                  Announcements.announceToAll("Online Time Reward!");

                       Announcements.announceToAll("Congratulations to all players!");

                       Announcements.announceToAll("Next reward in 30 minutes!");

                       p.addItem("Auto Reward Online", Config.AUTO_REWARD_ID, Config.AUTO_REWARD_COUNT, p, true);

               }

       }

 

}

8 answers to this question

Recommended Posts

  • 0
Posted (edited)

Looks terribly wrong, both writting style and idea. You want to reward any online players, even shops ? Secondly, the reward section should be a subsection of a bigger engine ; by itself it runs independently from the moment you getInstance() it, and you can't even stop it to run.

ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable()
{
     public void run()
     {
          Announcements.announceToAll("Online Time Reward!");
          Announcements.announceToAll("Congratulations to all players!");
          Announcements.announceToAll("Next reward in 30 minutes!");

          for (L2PcInstance p: L2World.getInstance().getAllPlayers().values())
               p.addItem("Auto Reward Online", Config.AUTO_REWARD_ID, Config.AUTO_REWARD_COUNT, p, true);

     }
}, 0,Config.AUTO_REWARD_DELAY * 1000);
Edited by Tryskell
  • 0
Posted

i am just niwbie in java language.... i just wanna reward the online players... all of them! Everything working good but when the Announcments appears as many players are online they will see the same ammount of Announcments... 5 players online... 5 same announcments!

  • 0
Posted (edited)

Because you wrote the announce under the for loop. Use code Tk provided.

Edited by SweeTs
  • 0
Posted (edited)
 public static void AutoReward()

       {

               Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();

               for (L2PcInstance p: pls)

               {

                  

                  Announcements.announceToAll("Online Time Reward!");

                       Announcements.announceToAll("Congratulations to all players!");

                       Announcements.announceToAll("Next reward in 30 minutes!");

                       p.addItem("Auto Reward Online", Config.AUTO_REWARD_ID, Config.AUTO_REWARD_COUNT, p, true);

               }

       }

Translation of your code.

When there is a player online announce to all bla bla bla.

Announcements should happen 1 time so they dont need to be inside any loop for players. Announcements is global function, you dont need to cast it for each player. The loop should just be for the individual global reward.

 

The bad way of writing shouldnt really worry you right now because you are newbie but, try to check how other global methods are handled in your pack or even check others codes doing global stuff so your writing will get more and more optimized.

Edited by TheAllKnowing
Guest
This topic is now closed to further replies.


×
×
  • Create New...