Jump to content

Recommended Posts

Posted

A light donate system , made by me.

It works like all but it's faster and it works with .txt file.

Tested

 

*No SQL Connections

*Less memory usage

*can be easy handled

 

For add/remove donator:

//setdonator or in the text file in a new line add the new character name.

//removedonator or delete the character name from the txt file.

 

Example:

Iracundus
Test
Blabla
Donator32
Lordofpvp

 

### Eclipse Workspace Patch 1.0
#P Chr.6GMS
Index: java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java
===================================================================
--- java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java	(revision 5263)
+++ java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java	(working copy)
@@ -27,6 +27,7 @@
import net.sf.l2j.Config;
import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.Announcements;
+import net.sf.l2j.gameserver.Donate;
import net.sf.l2j.gameserver.GmListTable;
import net.sf.l2j.gameserver.LoginServerThread;
import net.sf.l2j.gameserver.Olympiad;
@@ -251,6 +252,7 @@

         SevenSigns.getInstance().sendCurrentPeriodMsg(activeChar);
         Announcements.getInstance().showAnnouncements(activeChar);
+        Donate.onEnter(activeChar);

		Quest.playerEnter(activeChar);
		activeChar.sendPacket(new QuestList());
Index: java/net/sf/l2j/gameserver/Donate.java
===================================================================
--- java/net/sf/l2j/gameserver/Donate.java	(revision 0)
+++ java/net/sf/l2j/gameserver/Donate.java	(revision 0)
@@ -0,0 +1,134 @@
+package net.sf.l2j.gameserver;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.util.StringTokenizer;
+
+import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import javolution.util.FastList;
+
+
+public class Donate{
+	private static Donate _instance = null;
+	public static FastList<String> donators = new FastList<String>();
+	static File file = new File(Config.DATAPACK_ROOT, "data/donators.txt");
+	
+	public Donate(){
+		loadDonatorsAtStart();
+	}
+	
+	public static Donate getInstance(){
+		if(_instance == null)
+			_instance = new Donate();
+		
+		return _instance;
+	}
+	
+	public static boolean isDonator(L2PcInstance activeChar){
+		if(donators.contains(activeChar.getName()))
+			return true;
+		return false;
+	}
+	
+	public static void onEnter(L2PcInstance activeChar){
+		if(donators.contains(activeChar.getName())){
+		Announcements.getInstance().announceToAll("Donator: "+activeChar.getName()+" is now online");
+		activeChar.getAppearance().setNameColor(0xFFFF);
+		}	
+	}
+		
+	public static void newDonate(L2PcInstance activeChar){
+		 Announcements.getInstance().announceToAll("Player "+activeChar.getName()+" is a server donator now");
+	     activeChar.getAppearance().setNameColor(0xFFFF);
+	     activeChar.broadcastUserInfo();
+	     activeChar.sendMessage("You have become a server donator now , congratulations");
+	}
+	
+	public static void oldDonate(L2PcInstance activeChar){
+		Announcements.getInstance().announceToAll("Player "+activeChar.getName()+" is no more a server donator");
+	     activeChar.sendMessage("You are no longer a server donator");
+	}
+	
+	public static void removeDonator(L2PcInstance activeChar){
+		String name = activeChar.getName();
+		donators.remove(name);
+		
+		FileWriter s = null;
+		try
+		{
+			s = new FileWriter(file);
+			for (int i = 0; i < donators.size(); i++)
+			{
+				s.write(donators.get(i));
+				s.write("\r\n");
+			}
+			s.flush();
+			s.close();
+			s = null;
+		}
+		catch (IOException e)
+		{
+			e.printStackTrace();
+		}
+	}
+	
+	public static void addExtraDonator(L2PcInstance activeChar){
+		String name = activeChar.getName();
+		donators.add(name);
+		
+		FileWriter s = null;
+		try
+		{
+			s = new FileWriter(file);
+			for (int i = 0; i < donators.size(); i++)
+			{
+				s.write(donators.get(i));
+				s.write("\r\n");
+			}
+			s.flush();
+			s.close();
+			s = null;
+		}
+		catch (IOException e)
+		{
+			e.printStackTrace();
+		}
+	}
+	
+	public static void loadDonatorsAtStart(){
+		LineNumberReader l = null;
+		try{
+			String line = null;
+			int counter = 0;
+			l = new LineNumberReader(new FileReader(file));
+			while ( (line = l.readLine()) != null)
+			{
+				StringTokenizer st = new StringTokenizer(line,"\n\r");
+				if (st.hasMoreTokens())
+				{
+					String n = st.nextToken();
+					donators.add(n);
+					counter++;
+				}
+			}
+          System.out.print("Loaded: "+counter+" donator players");
+		}
+		catch(Exception e){
+			e.printStackTrace();
+		}
+		finally
+		{
+			try
+			{
+				l.close();
+			}
+			catch (Exception e)
+			{
+			}
+	}
+  }
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminDonate.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminDonate.java	(revision 0)
+++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminDonate.java	(revision 0)
@@ -0,0 +1,77 @@
+
+package net.sf.l2j.gameserver.handler.admincommandhandlers;
+
+import net.sf.l2j.gameserver.Donate;
+import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
+import net.sf.l2j.gameserver.model.L2Object;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+
+public class AdminDonate implements IAdminCommandHandler
+{
+	
+	private static final String[] commands = {"admin_setdonator","admin_removedonator"};
+
+	public boolean useAdminCommand(String command, L2PcInstance activeChar)
+	{
+		if(command.equalsIgnoreCase("admin_setdonator")){
+			if(activeChar == null)
+				return false;
+			
+			L2Object t = activeChar.getTarget();
+			L2PcInstance target = null;
+			
+			if(t == null)
+				return false;
+			
+			if(!(t instanceof L2PcInstance))
+				return false;
+		     target = (L2PcInstance) t;
+		     
+		     if(target == activeChar)
+		    	 return false;
+		     
+		     if(Donate.isDonator(target)){
+		    	 activeChar.sendMessage("This player is already a donator");
+		    	 return false;
+		     }
+		     
+		     Donate.addExtraDonator(target);
+		     Donate.newDonate(target);	
+		}
+			
+		else if(command.equalsIgnoreCase("admin_removedonator")){
+			if(activeChar == null)
+				return false;
+			
+			L2Object t = activeChar.getTarget();
+			L2PcInstance target = null;
+			
+			if(t == null)
+				return false;
+			
+			if(!(t instanceof L2PcInstance))
+				return false;
+		     target = (L2PcInstance) t;
+		     
+		     if(target == activeChar)
+		    	 return false;
+		     
+		     if(!Donate.isDonator(target)){
+		    	 activeChar.sendMessage("This player is not a donator");
+		    	 return false;
+		     }
+		     
+		     Donate.removeDonator(target);
+		     Donate.oldDonate(target);
+		  }
+			
+			return true;
+	}
+
+	
+	public String[] getAdminCommandList()
+	{
+		return commands;
+	}	
+}
Index: data/donators.txt
===================================================================
Index: java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- java/net/sf/l2j/gameserver/GameServer.java	(revision 5263)
+++ java/net/sf/l2j/gameserver/GameServer.java	(working copy)
@@ -78,6 +78,7 @@
import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminCreateItem;
import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminCursedWeapons;
import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminDelete;
+import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminDonate;
import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminDoorControl;
import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEditChar;
import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEditNpc;
@@ -404,6 +405,7 @@
		Announcements.getInstance();
		MapRegionTable.getInstance();
		EventDroplist.getInstance();
+		Donate.getInstance();

		/** Load Manor data */
		L2Manor.getInstance();
@@ -518,6 +520,7 @@

		_adminCommandHandler = AdminCommandHandler.getInstance();
		_adminCommandHandler.registerAdminCommandHandler(new AdminAdmin());
+		_adminCommandHandler.registerAdminCommandHandler(new AdminDonate());
		_adminCommandHandler.registerAdminCommandHandler(new AdminInvul());
		_adminCommandHandler.registerAdminCommandHandler(new AdminDelete());
		_adminCommandHandler.registerAdminCommandHandler(new AdminKill());

 

And create a new file name donators.txt in data folder.

Posted

Since a getInstance() method exists in Donate.java, you don't need to set the methods to static. You get a new object of the class with the getInstance() method...

Posted

Since a getInstance() method exists in Donate.java, you don't need to set the methods to static. You get a new object of the class with the getInstance() method...

True, i didn't care it.

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

    • TELEGRAM SEO TRAINING (Bot Ranking in Search) I teach a complete system for ranking Telegram bots at the top of search results by keywords and countries. The method works for services, shops, crypto projects, and any type of Telegram bot. You can also direct the traffic to your groups, channels, websites, or sales funnels. ⸻  Countries I work with USA, Israel, Russia, India, Turkey, China, Ukraine, Uzbekistan. If you need another country — message me, we’ll find a solution. ⸻ ️ Results First search results appear in 2–3 days. ⸻  What’s included in the training • how the Telegram search algorithm works and key ranking factors • keyword research for your country and niche • bot optimization: description, settings, greeting text • fixing and maintaining positions • specific promotion nuances for different countries ⸻  What you will receive • a complete system for ranking bots in search • understanding how to work with keywords, traffic, and positions • a skill you can use to promote your own projects or earn from clients ⸻  Who this training is for • beginners with zero experience — I explain everything from scratch • those who don’t have a bot — I provide a ready one for practice • anyone who wants to learn promotion and earn from this service ⸻  Why learn from me • doing Telegram SEO since 2021 • over 1000 successful orders • my own panel SMMTG.PRO and private databases • experience working with markets of Russia, Uzbekistan, Ukraine, Israel, USA, Turkey, China, India, Vietnam, Europe, and more ⸻  For pricing — message me t.me/smmtg_link
    • Hey everyone, I was wondering if anyone knows where the client loads all the .dat files. Is there some kind of manifest or list you can specify which dat files the client loads?
    • 🔥 Welcome to Lineage 2 Haruna x3 – True Classic Interlude Experience 🔥 At Haruna x3, we’re bringing back the true essence of Interlude – slow, meaningful progression where every level matters, every item has value, and PvP is real. We’re not about fast servers, pay-to-win advantages, or fake populations. Our goal is simple: create a fair, stable, and long-term server where players can enjoy real competition, strategic clan warfare, and the thrill of open-world PvP. 💎 What Makes Haruna x3 Special? x3 Rates – Perfect for steady, rewarding progression Classic Interlude Mechanics – Relive the nostalgia of Interlude Stable & Lag-Free Gameplay – Optimized for thousands of players online Fair & Balanced – No pay-to-win, every victory is earned PvP & Clan Warfare Focused – Every battle counts 🌟 Quality of Life Features to Enhance Your Experience We keep the classic feel while adding features that make the game more convenient and enjoyable, including: Shift + Click to view monster droplists Free item mail and buy/sell via Adena Daily login rewards & Stream Rewards ALT+K Skill Panel & Alt+Click buffs removal Offline shop system Captcha for security Donate Coins currency (cannot be traded, dropped, or destroyed) Classic P110 client – no custom interface 🏰 Our Philosophy We believe Lineage 2 is about the journey, not just the destination. Haruna x3 is designed for months and years of growth, not weeks. We provide a community-driven environment where honest gameplay, fair competition, and strategic teamwork are at the forefront. 🌍 Join Our Community Whether you’re a veteran of Interlude or a returning player seeking a true classic experience, Haruna x3 offers a place to fight, trade, and grow alongside dedicated players. Step into the world of Haruna x3 – where every decision matters, every fight counts, and every victory is yours to earn. Discord: https://discord.gg/7DDC9Dsxnh Website : www.l2haruna.com
    • No, the real purpose is cheating and custom  development for games.  I'm building a custom AI moderator specially for checking illegal activity and flag current topica.
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock