Jump to content
  • 0

[HELP]ONE CODE I MADE DOESN'T WORK-JAVA


Question

Posted

I WANT TO HAPPEN EVERY 1 HOUR FOR EXAMPLE, IT DOES NOT WORK :sssss HOW CAN I MAKE IT TO WORK? CAN ANYONE HELP ME :/


### Eclipse Workspace Patch 1.0
#P testGameserver
Index: java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- java/net/sf/l2j/gameserver/GameServer.java	(revision 5117)
+++ java/net/sf/l2j/gameserver/GameServer.java	(working copy)
@@ -217,6 +217,7 @@
import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager;
import net.sf.l2j.gameserver.instancemanager.SiegeManager;
import net.sf.l2j.gameserver.model.AutoChatHandler;
+import net.sf.l2j.gameserver.model.entity.AutoRewardLords;
import net.sf.l2j.gameserver.model.AutoSpawnHandler;
import net.sf.l2j.gameserver.model.L2Manor;
import net.sf.l2j.gameserver.model.L2PetDataTable;
@@ -343,6 +344,7 @@

		RecipeController.getInstance();

+		AutoRewardLords.getInstance();
		SkillTreeTable.getInstance();
		ArmorSetsTable.getInstance();
		FishTable.getInstance();
Index: java/net/sf/l2j/gameserver/model/entity/AutoRewardLords.java
===================================================================
--- java/net/sf/l2j/gameserver/model/entity/AutoRewardLords.java	(revision 0)
+++ java/net/sf/l2j/gameserver/model/entity/AutoRewardLords.java	(revision 0)
@@ -0,0 +1,69 @@
+/* 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 2, 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+package net.sf.l2j.gameserver.model.entity;
+
+import java.util.Collection;
+
+import net.sf.l2j.gameserver.Announcements;
+import net.sf.l2j.gameserver.ThreadPoolManager;
+import net.sf.l2j.gameserver.model.L2World;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+/**
+ *
+ * @author  Cafr
+ */
+public class AutoRewardLords
+{
+	Collection<L2PcInstance> players = L2World.getInstance().getAllPlayers();
+	
+	 class AutoRewardTask implements Runnable
+	{
+		public void run()
+		{
+			for(L2PcInstance player : players)
+			{
+			   if(player != null) if(player.getClan() != null)
+					   if(player.getClan().getHasCastle() > 0 && player.isClanLeader())
+					   {
+						   player.getInventory().addAdena(null, 25000000, player, null);
+						   player.sendMessage("Auto rewarding castle lords activated,look your inventory.");
+					   }	  
+			   }
+			Announcements.getInstance().announceToAll("All online castle lords rewarded.");
+			System.out.println("Auto Castle Lords Reward Activated");
+		 }
+	}
+	
+	private AutoRewardLords()
+		{
+		 ThreadPoolManager.getInstance().scheduleGeneral(new AutoRewardTask(), 60000);
+		}
+   
+	
+	public static AutoRewardLords getInstance()
+		{
+			return SingletonHolder._instance;
+		}
+		
+		private static class SingletonHolder
+		{
+			@SuppressWarnings("synthetic-access")
+			protected static final AutoRewardLords _instance = new AutoRewardLords();
+		}
+}
\ No newline at end of file

Recommended Posts

  • 0
Posted

-  if(player.getClan().getHasCastle() > 0 && player.isClanLeader())

+ if(clan().getHasCastle() > 0 && player.isClanLeader())

 

 

and

 

-player.getInventory().addAdena(null, 25000000, player, null);

to

+player.getInventory().addItem("Adena", 57, 25000000, this, null);

 

i am not sure but try

  • 0
Posted

You need to retrieve the players each time that the class runs:

		public void run()
	{
		Collection<L2PcInstance> players = L2World.getInstance().getAllPlayers();
		for(L2PcInstance player : players)
		{
			...

 

Also change this:

ThreadPoolManager.getInstance().scheduleGeneral(new AutoRewardTask(), 300000);

If you don't want to flood the server.

  • 0
Posted

Zoey76 what are you doing here ? :) This is the underground development forum. Pappa l2j will be mad seeing you among the bad kids of the neighbour :)

 

Anyway change scheduleGeneral to scheduleGeneralAtFixedRate since you are calling the run() only once when the constructor of your class is called through getInstance(). That happens at load time ( check where you added getInstance() ) and doesnt happen again.

 

PS: Is getPlayers() returning a new collection object with references to the objects of players or is it returning the reference to the collection of players ? If its the second, you dont need to update it each time you run the thread.

 

PS2: WickedHares give me your msn. You can write your own code so you got officially accepted to the club of the cool Greeks :)

  • 0
Posted

Zoey76 what are you doing here ? :) This is the underground development forum. Pappa l2j will be mad seeing you among the bad kids of the neighbour :)

 

Anyway change scheduleGeneral to scheduleGeneralAtFixedRate since you are calling the run() only once when the constructor of your class is called through getInstance(). That happens at load time ( check where you added getInstance() ) and doesnt happen again.

 

PS: Is getPlayers() returning a new collection object with references to the objects of players or is it returning the reference to the collection of players ? If its the second, you dont need to update it each time you run the thread.

 

PS2: WickedHares give me your msn. You can write your own code so you got officially accepted to the club of the cool Greeks :)

thanks, i catch you.

Check your pms for my msn and infos.

@Leluche someone has to teach the bad kids how to code.

The "underground" needs some good coders from time to time.

That's true,especially when the "bad kids" have time and they really want to learn smth.

  • 0
Posted

PS: Is getPlayers() returning a new collection object with references to the objects of players or is it returning the reference to the collection of players ? If its the second, you dont need to update it each time you run the thread.

 

You need to update it, it's a copy of current state of the map, not a reference, LOL, imagine the damage that could cause...

  • 0
Posted

For example the latest implementation of L2World class uses Trove4J and RentranLock, if you access the map directly deadlocks are the first problem you'll face.

 

And of course reading from not thread safe require null checks if is not synchronized.

  • 0
Posted

Ok, i get it now :)

 

Edit: wait a minute, aint that memory leak prone ? Since removing the player when he logs out from the l2world is not enough to let GC collect it because it may exist in a copy collection of mine.

 

Edit2: Never mind, same thing if its a reference to the same collection too.

  • 0
Posted

What you get is a list (or map) referencing the L2PcI objects, when client logs out, the server make it available to be cleaned by GC, that's why you need NPE checks.

  • 0
Posted

Actually if i'm not confused, if your collection references the l2pcinstance it wont get Garbage collected. For example

 

MySingletonClass

{

  Collection<L2PcInstance> temporarPlayers;

}

 

If i store a collection there that references each L2PcInstance then , when the player logs out he is removed from the L2World but the object still exists. When the GC runs, he still can access L2PcInstance player x from my class singleton thus it wont get GC'ed right ?

 

I'm missing something probably, but i dont think you will get NPE if you have an old collection. You may end up in memory leak, but not NPE since your copy wont get affected by any changes done to L2World collection of players.

  • 0
Posted

your second collection is a reference to your "main" colection, u have not used new so there is no another instance of colection, if you delete something from the collection, no mater what reference you use(l2worlds or yourNewClass), there is only one collection

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

    • Expanding the dominion, the magical Scroll of Escape   The months passed and Orcis dominance over Aden was absolute. Everyone respected his leadership and authority. Now many of his highly ranked soldiers have learned the boat dance of invulnerability but the army had trouble mastering it.    The orc ordered his most loyal engineer, that stranger who his name we still query, to find a way to teach the dance to the solders to turn them into super-soldiers. The stranger searched and search ed and searched, but he could not make the dance easier. For a soldier, with his heavy armor and slow movement was confined to the limits that this shell provided.   But sometimes, the truth hides in simpler things. One day, after testing the dance on the boat many times, the stranger decided to call it a day. But he was too tired to walk back to the city from the Giran Harbor. So he opened his back and used a scroll of escape while still on the boat.  He visited the weapons store, then the church and later decided to go to the west gate of Giran, to do some light sparring with the random villagers.    To his surprise, he could not fight the villagers. Whenever they tried to swing on him, their sword bounced away. And so it came to the strnager, that its not the dance that makes Einhasad bless him with immortality. It's not gods themselves, but an inherent flaw of the mortal world.    And so ... he went to the king, with a bright idea, and a bunch of Scrolls of Escape in hand.   Master I know of a way. And I know of a thousand other ways to trick the gods and gain immortality without dancing infront of them. For it is not the blessing of Einhasad that gives us the gift.    The gods have erred, the world is flawed and only a redesign of the nature's principles can now stop us ...
    • I just found it funny that you reversed the reverse engineer champions. They won't like this for sure.    Anyway, the project vision is very good it is aligned with what the players need and want something that both e-global and l2reborn has failed to provide. These are stable projects, they are not good "games". And players play "games" they don't play "projects".  When no good "games" exist, they flock towards good "projects". Lineage 2 private scene has produced decent projects the last years, but no decent "game". I hope you are the first ones to do so.   Generally there are two axis that Lineage 2 needs to evolve on. Modern gaming concepts and the need to respect the aging player's time. So far, most projects treat these aspects as taboo, they seem so afraid to deviate from what they call "true" Lineage 2. But the reality is that times change, you can't stay static forever, you have to evolve. NCSoft failed,they are not paving the way no more. It is us now, the collective community that have to pave our own pathways. WoW has went the same way, private projects took initiative because the company (while not failed) could not steer the game towards what players want and need in 2026.    For that reason I believe your project is going towards the right direction. The four keystones listed in the vision is what I believe is the community really needs but clearly doesn't understand it wants, because noone so far has give them a glimspe of what is beyond their retail-like garden.    I personally don't respect projects like reborn and e-global. As "games", they are simply trash, regardless of their high professionalism as endeavors. They lack innovation, they lack creativity, they are simply good software products,     
    • Giving up has never been part of my mindset. I respect projects like Reborn and E-Global they've earned their reputation. But every successful project started with people saying it would fail. If everyone gave up because there was competition, nothing new would ever exist. Skepticism is completely fair, and I'm not asking anyone to blindly believe in promises. Judge us by what we release, not by assumptions. That's exactly why we're taking our time instead of rushing something unfinished. At the end of the day, time will tell. I'd rather try to build something different and fail than never try at all.
    • Good luck beating projects like reborn eglobal and other crap l can bet you will give up after 1 year or first grand opening after online drops😁  l am very sceptical if honestly, at least run test server first or make something to show 🙂
    • Dunno, I have a friend who's really good at reverse engineering, so I don't really see a reason for anyone to be mad about it. At the end of the day, if someone has the skills and knowledge to do something, that's just part of the scene. 
  • 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..