Jump to content
  • 0

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


KOZANE

Question

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

Link to comment
Share on other sites

Recommended Posts

  • 0

-  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

Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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 :)

Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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...

Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

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.



  • Posts

    • I can use this folder system for High Five offline server?   The folder does not have a l2.exe file.   Thank you very much if anyone can help me.   https://drive.google.com/file/d/13kU-g_4JJ-sP-kg2F7pqkUOVKmQdubFm/view
    • I know, but...every time I have problem with IP address setup 😞
    • ENGLISH As you know, we have always profiled in the development of Java emulators, we continue to do our favorite thing, and now we have the opportunity to provide you with services in the field of private development of L2 assemblies Essence, Classic and High Five, which we have been doing in recent years, we have not been working on basic builds for a long time and work only on contracts for the world's best projects. These are the best builds we can offer, we have test servers and we can show them to you on the test, and if you are very good at gameplay, you will see a big difference in the quality and detail of the official content compared to the basic builds. These are the best top solutions in the world, which are currently used to implement the largest projects in the world. We guarantee 100% implementation of all official content. If you have any questions about testing, discussions, etc., please contact our studio and we will discuss everything. At the moment, you can get acquainted with the preliminary information and prices for Private L2 contracts here: Private Server packs L2 Essence 464, 447, 388, 362, 286 protocols Private server packs L2Classic Private server pack High Five РУССКИЙ --------------------------------------------- Как вы знаете мы всегда профилировались на разработке в сфере Java эмуляторов, мы продолжаем заниматься своим любимым делом, и сейчас у нас появилась возможность предоставлять вам услуги в сфере приватных разработок L2 сборок Essence, Classic и High Five, которыми мы занимаемся последние годы, мы уже давно не работаем над базовыми сборками и работаем только на контрактах для лучших мировых проектов. Это лучшие сборки, которые мы можем предложить, у нас есть тестовые сервера, и мы можем показать их вам на тесте, и если вы очень хорошо разбираетесь в игровом процессе, вы увидите большую разницу в качестве и детализации официального контента по сравнению с базовыми сборками. Это лучшие топовые решения в мире, которые на данный момент используются для реализации крупнейших проектов в мире. Мы даем гарантии - 100% реализации всего официального контента. По вопросам тестирования, обсуждений и тд - пишите по контактам нашей студии и мы все обсудим. На данный момент вы можете ознакомиться с предварительной информацией и ценами на Приватные контракты L2 тут: Приватные Сборки L2 Essence 464, 447, 388, 362, 286 protocols Приватные Сборки L2Classic Приватная Сборка High Five -------------------------------------------------------------- Contacts: Telegram: https://t.me/L2scripts Whatsapp, Viber: +1 (916) 226 1910 С уважением, Администрация !
    • I can sell it. If you are interested just pm.
  • Topics

×
×
  • Create New...