Emrys Posted March 9, 2009 Posted March 9, 2009 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; Quote
Emrys Posted March 9, 2009 Author Posted March 9, 2009 its working. I got it on live server. Thx vago ! I will add this on the first post. Quote
ninja123321 Posted March 11, 2009 Posted March 11, 2009 It looks like this is already added to l2jfree long time ago, or am I wrong? Only did a quick peek. Quote
MaestroLuke Posted May 26, 2009 Posted May 26, 2009 ROFL i only have seen that on e-global very good share good job Quote
KaL Posted July 2, 2009 Posted July 2, 2009 Is this already implemented in L2jFree Gracia? It would be usefull for my server! Quote
Versus Posted December 18, 2009 Posted December 18, 2009 Actually that's just a feature of the clan community board. Not the whole.. Quote
bauwbas Posted December 19, 2009 Posted December 19, 2009 Can some1 explain me... If I turn off my community board, this clan super duper fuction work? Or I need turn on community board? Quote
Recommended Posts
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.