I just remembered that feature for l2j,and since i was practising with xml-java i started doing it.I havent test it,but i guess works.Feedback plz
Tested:Yes
Working:Yes
Credits Me
Tested:Yes
Working:Yes
Code:
Index: data/xml/autoannounce.xml
===================================================================
--- data/xml/autoannounce.xml (revision 0)
+++ data/xml/autoannounce.xml (revision 0)
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='utf-8'?>
+<list>
+ <message text="By Ventic!"/>
+ <message text="Kisses!"/>
+</list>
Index: java/net/sf/l2j/gameserver/datatables/xml/AutoAnnounce.java
===================================================================
--- java/net/sf/l2j/gameserver/datatables/xml/AutoAnnounce.java (revision 0)
+++ java/net/sf/l2j/gameserver/datatables/xml/AutoAnnounce.java (revision 0)
@@ -0,0 +1,107 @@
+/*
+ * 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.datatables.xml;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import javolution.util.FastList;
+import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.Announcements;
+import net.sf.l2j.gameserver.ThreadPoolManager;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
+/**
+ * @author Ventic
+ */
+
+public class AutoAnnounce
+{
+ private static final Logger log = Logger.getLogger(AutoAnnounce.class.getName());
+ private FastList<String> messages = new FastList<String>();
+
+ private class AutoAnnounceTask implements Runnable
+ {
+ @SuppressWarnings("synthetic-access")
+ public void run()
+ {
+ loadData();
+ }
+ }
+
+ private void loadData()
+ {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setValidating(false);
+ factory.setIgnoringComments(true);
+ File f = new File(Config.DATAPACK_ROOT + "/data/xml/autoannounce.xml");
+
+ if (!f.exists())
+ {
+ log.warning("autoannounce.xml could not be loaded: file not found");
+ return;
+ }
+ try
+ {
+ InputSource in = new InputSource(new InputStreamReader(new FileInputStream(f), "UTF-8"));
+ in.setEncoding("UTF-8");
+ Document doc = factory.newDocumentBuilder().parse(f);
+ for (Node na = doc.getFirstChild(); na != null; na = na.getNextSibling())
+ {
+ if(na.getNodeName().equalsIgnoreCase("list"))
+ {
+ for (Node n = na.getFirstChild(); n != null; n = n.getNextSibling())
+ {
+ if (n.getNodeName().equals("message"))
+ {
+ NamedNodeMap ndm = n.getAttributes();
+ String message = ndm.getNamedItem("text").getNodeValue();
+ if (!messages.contains(message))
+ {
+ messages.add(message);
+ }
+ Announcements.getInstance().announceToAll(message);
+ }
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {}
+ }
+
+ public static AutoAnnounce getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ private static class SingletonHolder
+ {
+ @SuppressWarnings("synthetic-access")
+ protected static final AutoAnnounce _instance = new AutoAnnounce();
+ }
+
+ @SuppressWarnings("synthetic-access")
+ private AutoAnnounce()
+ {
+ ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoAnnounceTask(), 120000, 120000);
+ }
+}
Index: java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- java/net/sf/l2j/gameserver/GameServer.java (revision 73)
+++ java/net/sf/l2j/gameserver/GameServer.java (working copy)
@@ -51,6 +51,7 @@
import net.sf.l2j.gameserver.datatables.sql.SpawnTable;
import net.sf.l2j.gameserver.datatables.xml.ArmorSetsTable;
import net.sf.l2j.gameserver.datatables.xml.AugmentationData;
+import net.sf.l2j.gameserver.datatables.xml.AutoAnnounce;
import net.sf.l2j.gameserver.datatables.xml.CharTemplateTable;
import net.sf.l2j.gameserver.datatables.xml.FishTable;
import net.sf.l2j.gameserver.datatables.xml.HelperBuffTable;
@@ -247,6 +248,7 @@
AdminCommandAccessRights.getInstance();
L2World.getInstance();
ZoneManager.getInstance();
+ AutoAnnounce.getInstance();
SpawnTable.getInstance();
RaidBossSpawnManager.getInstance();
_log.config("GrandBossManager: Loaded " + GrandBossManager.getInstance().size() + " GrandBosses instances.");