Jump to content

[Share]Clan community board of off servers for java


Recommended Posts

And that isnt mine I find it  in l2jserver .... I havent tested  .... as i see it is working 99% on l2jserver gameserver version 2819 ... As vago says it is working

 

On official servers, the clan community board has this feature, and my players were missing it, so i developed it Wink

It's not 100% retail-like but it works really well, and doesn't seem to have any bugs on it...

This is the patch created by  _DS_ The share was created by cybersick ...

Index: java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java	(revision 2819)
+++ java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java	(working copy)
@@ -513,6 +513,15 @@
             clan.broadcastToOtherOnlineMembers(msg, activeChar);
             msg = null;
             clan.broadcastToOtherOnlineMembers(new PledgeShowMemberListUpdate(activeChar), activeChar);
+            if (clan.isNoticeEnabled())
+            {
+            	sendPacket(new NpcHtmlMessage(1, "<html><title>Clan Announcements</title><body><br><center><font color=\"CCAA00\">" +
+            			activeChar.getClan().getName() +
+            			"</font> <font color=\"6655FF\">Clan Alert Message</font></center><br>" +
+            			"<img src=\"L2UI.SquareWhite\" width=270 height=1><br>" +
+            			activeChar.getClan().getNotice().replaceAll("\r\n", "<br>") + 
+            			"</body></html>"));
+            }
         }
     }

Index: java/net/sf/l2j/gameserver/model/L2Clan.java
===================================================================
--- java/net/sf/l2j/gameserver/model/L2Clan.java	(revision 2819)
+++ java/net/sf/l2j/gameserver/model/L2Clan.java	(working copy)
@@ -156,6 +156,9 @@

     private int _reputationScore = 0;
     private int _rank = 0;
+    
+    private String _notice;
+    private boolean _noticeEnabled = false;

     /**
      * Called if a clan is referenced only by id.
@@ -870,6 +873,7 @@
             restoreSubPledges();
             restoreRankPrivs();
             restoreSkills();
+            restoreNotice();
         }
         catch (Exception e)
         {
@@ -881,6 +885,110 @@
         }
     }

+    private void restoreNotice()
+    {
+    	java.sql.Connection con = null;
+    	try
+    	{
+    		con = L2DatabaseFactory.getInstance().getConnection();
+    		PreparedStatement statement = con.prepareStatement("SELECT enabled,notice FROM clan_notices WHERE clan_id=?");
+    		statement.setInt(1, getClanId());
+    		ResultSet noticeData = statement.executeQuery();
+    		
+    		while (noticeData.next())
+    		{
+    			_noticeEnabled = noticeData.getBoolean("enabled");
+    			_notice = noticeData.getString("notice");
+    		}
+    		
+    		noticeData.close();
+    		statement.close();
+    		con.close();
+    	}
+    	catch (Exception e)
+    	{
+    		_log.log(Level.SEVERE, "Error restoring clan notice.", e);
+    	}
+    	finally
+    	{
+    		try { con.close(); } catch (Exception e) {}
+    	}
+    }
+
+    private void storeNotice(String notice, boolean enabled)
+    {
+    	if (notice == null)
+    		notice = "";
+    	
+    	java.sql.Connection con = null;
+
+    	try
+    	{
+    		con = L2DatabaseFactory.getInstance().getConnection();
+
+    		if (notice.length() > 8192)
+    			notice = notice.substring(0, 8191);
+    		
+    		if (_notice != null)
+    		{
+    			PreparedStatement statement = con.prepareStatement("UPDATE clan_notices SET enabled=?,notice=? WHERE clan_id=?");
+        		if (enabled)
+            		statement.setString(1, "true");
+        		else
+            		statement.setString(1, "false");
+        		statement.setString(2, notice);
+        		statement.setInt(3, getClanId());
+                statement.execute();
+                statement.close();
+    		}
+    		else
+    		{
+        		PreparedStatement statement = con.prepareStatement("INSERT INTO clan_notices (clan_id, enabled, notice) values (?,?,?)");
+        		statement.setInt(1, getClanId());
+        		if (enabled)
+            		statement.setString(2, "true");
+        		else
+            		statement.setString(2, "false");
+        		statement.setString(3, notice);
+                statement.execute();
+                statement.close();
+    		}
+    	}
+        catch (Exception e)
+        {
+            _log.warning("Error could not store clan notice: " + e);
+        }
+        finally
+        {
+            try { con.close(); } catch (Exception e) {}
+        }
+
+    	_notice = notice;
+    	_noticeEnabled = enabled;
+    }
+
+    public void setNoticeEnabled(boolean noticeEnabled)
+    {
+    	storeNotice(_notice, noticeEnabled);
+    }
+    
+    public void setNotice(String notice)
+    {
+    	storeNotice(notice, _noticeEnabled);
+    }
+
+    public boolean isNoticeEnabled()
+    {
+    	return _noticeEnabled;
+    }
+    
+    public String getNotice()
+    {
+    	if (_notice == null)
+    		return "";
+    	return _notice;
+    }
+    
     private void restoreSkills()
     {
         java.sql.Connection con = null;
Index: java/net/sf/l2j/gameserver/communitybbs/Manager/ClanBBSManager.java
===================================================================
--- java/net/sf/l2j/gameserver/communitybbs/Manager/ClanBBSManager.java	(revision 2819)
+++ java/net/sf/l2j/gameserver/communitybbs/Manager/ClanBBSManager.java	(working copy)
@@ -88,13 +88,127 @@
				clanhome(activeChar, index);
			}
		}
+		else if(command.startsWith("_bbsclan_clannotice_edit;"))
+		{
+			clanNotice(activeChar, activeChar.getClan().getClanId());
+		}
+		else if(command.startsWith("_bbsclan_clannotice_enable"))
+		{
+			activeChar.getClan().setNoticeEnabled(true);
+			clanNotice(activeChar, activeChar.getClan().getClanId());
+		}
+		else if(command.startsWith("_bbsclan_clannotice_disable"))
+		{
+			activeChar.getClan().setNoticeEnabled(false);
+			clanNotice(activeChar, activeChar.getClan().getClanId());
+		}
		else
		{
-			separateAndSend("<html><body><br><br><center>Commande : " + command + " pas encore implante</center><br><br></body></html>", activeChar);
+			separateAndSend("<html><body><br><br><center>Command : " + command + " needs core development</center><br><br></body></html>", activeChar);

		}
	}

+	private void clanNotice(L2PcInstance activeChar, int clanId)
+	{
+		L2Clan cl = ClanTable.getInstance().getClan(clanId);
+		if (cl != null)
+		{
+			if (cl.getLevel() < 2)
+			{
+				activeChar.sendPacket(new SystemMessage(SystemMessageId.NO_CB_IN_MY_CLAN));
+				parsecmd("_bbsclan_clanlist", activeChar);
+			}
+			else
+			{
+				final StringBuilder html = StringUtil.startAppend(2000,
+						"<html><body><br><br>" +
+						"<table border=0 width=610><tr><td width=10></td><td width=600 align=left>" +
+						"<a action=\"bypass _bbshome\">HOME</a> > " +
+						"<a action=\"bypass _bbsclan_clanlist\"> CLAN COMMUNITY </a>  > " +
+						"<a action=\"bypass _bbsclan_clanhome;",
+						String.valueOf(clanId),
+						"\"> &$802; </a>" +
+						"</td></tr>" +
+						"</table>"
+						);
+				if(activeChar.isClanLeader())
+				{
+					StringUtil.append(html,
+							"<br><br><center>" +
+							"<table width=610 border=0 cellspacing=0 cellpadding=0>" +
+							"<tr><td fixwidth=610><font color=\"AAAAAA\">The Clan Notice function allows the clan leader to send messages through a pop-up window to clan members at login.</font> </td></tr>" +
+							"<tr><td height=20></td></tr>"
+							);
+					
+					if(activeChar.getClan().isNoticeEnabled())
+						StringUtil.append(html, "<tr><td fixwidth=610> Clan Notice Function:   on   /   <a action=\"bypass _bbsclan_clannotice_disable\">off</a>");
+					else
+						StringUtil.append(html, "<tr><td fixwidth=610> Clan Notice Function:   <a action=\"bypass _bbsclan_clannotice_enable\">on</a>   /   off");
+					
+					StringUtil.append(html,
+							"</td></tr>" +
+							"</table>" +
+							"<img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">" +
+							"<br> <br>" +
+							"<table width=610 border=0 cellspacing=2 cellpadding=0>" +
+							"<tr><td>Edit Notice: </td></tr>" +
+							"<tr><td height=5></td></tr>" +
+							"<tr><td>" +
+							"<MultiEdit var =\"Content\" width=610 height=100>" +
+							"</td></tr>" +
+							"</table>" +
+							"<br>" +
+							"<table width=610 border=0 cellspacing=0 cellpadding=0>" +
+							"<tr><td height=5></td></tr>" +
+							"<tr>" +
+							"<td align=center FIXWIDTH=65><button value=\"&$140;\" action=\"Write Notice Set _ Content Content Content\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td>" +
+							"<td align=center FIXWIDTH=45></td>" +
+							"<td align=center FIXWIDTH=500></td>" +
+							"</tr>" +
+							"</table>" +
+							"</center>" +
+							"</body>" +
+							"</html>"
+							);
+					send1001(html.toString(), activeChar);
+					send1002(activeChar,activeChar.getClan().getNotice()," ","0");
+				}
+				else
+				{
+					StringUtil.append(html,
+							"<img src=\"L2UI.squareblank\" width=\"1\" height=\"10\">" +
+							"<center>" +
+							"<table border=0 cellspacing=0 cellpadding=0><tr>" +
+							"<td>You are not your clan's leader, and therefore cannot change the clan notice</td>" +
+							"</tr></table>"
+							);
+					if (activeChar.getClan().isNoticeEnabled())
+					{
+						StringUtil.append(html, 
+								"<table border=0 cellspacing=0 cellpadding=0>" +
+								"<tr>" +
+								"<td>The current clan notice:</td>" +
+								"</tr>" +
+								"<tr><td fixwidth=5></td>" +
+								"<td FIXWIDTH=600 align=left>" +
+								activeChar.getClan().getNotice() +
+								"</td>" +
+								"<td fixqqwidth=5></td>" +
+								"</tr>" +
+								"</table>"
+								);
+					}
+					StringUtil.append(html,
+							"</center>" +
+							"</body>" +
+							"</html>"
+							);
+					separateAndSend(html.toString(), activeChar);
+				}
+			}
+		}
+	}
	/**
	 * @param activeChar
	 */
@@ -281,7 +395,7 @@
                                     "<a action=\"bypass _bbsclan_clanhome;",
                                     String.valueOf(clanId),
                                     ";cmail\">[CLAN MAIL]</a>  " +
-                                    "<a action=\"bypass _bbsclan_clanhome;",
+                                    "<a action=\"bypass _bbsclan_clannotice_edit;",
                                     String.valueOf(clanId),
                                     ";cnotice\">[CLAN NOTICE]</a>  " +
                                     "</td>" +
@@ -367,7 +481,11 @@
	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)
	{
		// TODO Auto-generated method stub
-		
+		if (ar1.equals("Set"))
+		{
+			activeChar.getClan().setNotice(ar4);
+			parsecmd("_bbsclan_clanhome;" + activeChar.getClan().getClanId(),activeChar);
+		}
	}

}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java
===================================================================
--- java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java	(revision 2819)
+++ java/net/sf/l2j/gameserver/communitybbs/CommunityBoard.java	(working copy)
@@ -129,6 +129,10 @@
				{
					RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
				}
+				else if (url.equals("Notice"))
+				{
+					ClanBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar);
+				}
				else
				{
					ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + url + " is not implemented yet</center><br><br></body></html>", "101");

That is the patch ..

Sql file :

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for clan_notices
-- ----------------------------
CREATE TABLE `clan_notices` (
  `clanID` int(32) NOT NULL,
  `notice` varchar(512) NOT NULL,
  `enabled` varchar(5) NOT NULL,
  PRIMARY KEY  (`clanID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Link to comment
Share on other sites

  • 2 months later...
  • 4 weeks later...
  • 5 months later...

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
Reply to this topic...

×   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

    • Thank you for your reply. I have removed it from the L2Server.exe file, but the L2Server still crashes. It doesn't crash if I don't start l2npc, otherwise it will crash within a few days at the latest.
    • Welcome to my store :  https://topestore.mysellix.io/fr/ 2015-2022 Aged Discord Account 2015 Discord Account : 50.99 $ 2016 Discord Account : 10$ 2017 Discord Account :3.99 $ 2018 Discord Account : 3.50$ 2019 Discord Account : 2.70 $ 2020 Discord Account :1.50$ 2021 Discord Account :0.99$ 2022 Discord Account :0.70$ Warranty :Lifetime Payment Methods : Crypto/ PayPal Contact Me On Discord Or Telegram Discord : @ultrasstore11 Telegram : https://t.me/ultrastore1 Welcome to my store :  https://topestore.mysellix.io/fr/ 2015-2022 Aged Discord Account 2015 Discord Account : 50.99 $ 2016 Discord Account : 10$ 2017 Discord Account :3.99 $ 2018 Discord Account : 3.50$ 2019 Discord Account : 2.70 $ 2020 Discord Account :1.50$ 2021 Discord Account :0.99$ 2022 Discord Account :0.70$ Warranty :Lifetime Payment Methods : Crypto/ PayPal Contact Me On Discord Or Telegram Discord : @ultrasstore11
    • L2 ArenaWar: Low Rate PvP Server with Free Buffs & Autofarm [PVP]⚔️ [Free]🆓 Classic Interlude with  3x XP rates! Free starter pack(no grade) to kickstart your adventure! Autofarm for convenient grinding! Free buffs to keep you fighting fit! (2 job buffs) No experience loss on death! (Except with Karma) Clear Karma system to keep things fair! ⚖️ Active community of 800-1k players! Join our Discord to learn more! >> Discord <<     Server website: https://l2arenawar.com/en/    
    • This is dedication! 2 years working on a problem. Congratulations!
    • You indeed have to save player position over Enterworld to properly clean it up later (if you don't, even trying to delete packet content would eventually keep it up), that's what we do with debug packet (which is a reusable Map of ExServerPrimitive packets) on aCis.   It doesn't solve the FPS stuttering - more you draw/delete lines, more your client becomes laggy. It's like if client wasn't deleting drawn points/lines properly, but instead simply hide them and redrawn content above.   If you got a solution, I would happy to integrate it.   You should check aCis#Player _debug packet integration, it allows very big amount of lines/points to be drawn, it is also reusable.   https://gitlab.com/Tryskell/acis_public/-/blob/master/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java?ref_type=heads https://gitlab.com/Tryskell/acis_public/-/blob/master/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java?ref_type=heads  
  • Topics

×
×
  • Create New...