Rizlaaa Posted May 14, 2012 Posted May 14, 2012 Γεια σε ολους , ζητηθηκε. Ο clan leader μπορει να γραψει .clanannounce_add για να προσθεσει μια ανακοινωση η οποια θα σταλθει σε ολα τα clan members , αλλα και οσοι ειναι offline θα την δουν μολις μπουν. Π.χ θελει να ανακοινωσει : simera oli 5 i ora siege aden , αλλα θελει να βεβαιωθει οτι δε θα το ξεχασει κανεις. Επισης και να ηταν Online οταν εγινε η ανακοινωση , παλι οταν ο παιχτης μπει θα του σταλθει.Επισης μπορει να γραψει .clanannounce_remove για να αφαιρεσει την ανακοινωση για να βαλει καινουρια. PS:το αρχειο ExShowScreenMessage θα το εχετε μη το βαλετε, εκτος αν εχετε clean L2J ### Eclipse Workspace Patch 1.0 #P Chr.6DTP Index: sql/characters.sql =================================================================== --- sql/characters.sql (revision 8778) +++ sql/characters.sql (working copy) @@ -79,6 +79,7 @@ clan_join_expiry_time DECIMAL(20,0) NOT NULL DEFAULT 0, clan_create_expiry_time DECIMAL(20,0) NOT NULL DEFAULT 0, death_penalty_level int(2) NOT NULL DEFAULT 0, + announce varchar(100) NOT NULL default '' PRIMARY KEY (obj_Id), KEY `clanid` (`clanid`) ) ; ### 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) @@ -55,8 +55,10 @@ import net.sf.l2j.gameserver.model.entity.TvTEvent; import net.sf.l2j.gameserver.model.quest.Quest; import net.sf.l2j.gameserver.network.SystemMessageId; +import net.sf.l2j.gameserver.serverpackets.CreatureSay; import net.sf.l2j.gameserver.serverpackets.Die; import net.sf.l2j.gameserver.serverpackets.EtcStatusUpdate; +import net.sf.l2j.gameserver.serverpackets.ExShowScreenMessage; import net.sf.l2j.gameserver.serverpackets.ExStorageMaxCount; import net.sf.l2j.gameserver.serverpackets.FriendList; import net.sf.l2j.gameserver.serverpackets.HennaInfo; @@ -71,6 +73,7 @@ import net.sf.l2j.gameserver.serverpackets.SignsSky; import net.sf.l2j.gameserver.serverpackets.SystemMessage; import net.sf.l2j.gameserver.serverpackets.UserInfo; +import net.sf.l2j.gameserver.serverpackets.ExShowScreenMessage.SMPOS; import net.sf.l2j.gameserver.util.FloodProtector; /** @@ -251,6 +254,8 @@ SevenSigns.getInstance().sendCurrentPeriodMsg(activeChar); Announcements.getInstance().showAnnouncements(activeChar); + + loadAnnounceClan(activeChar); Quest.playerEnter(activeChar); activeChar.sendPacket(new QuestList()); @@ -350,6 +355,18 @@ TvTEvent.onLogin(activeChar); } + private void loadAnnounceClan(L2PcInstance pc){ + if(pc.hasNewAnnounce()){ + CreatureSay msg1 = new CreatureSay(1,Say2.CLAN,"Clan Announcement",pc.getAnnounce()); + + ExShowScreenMessage msg2 = new ExShowScreenMessage(pc.getAnnounce(), 15000, SMPOS.TOP_CENTER, true); + + pc.sendPacket(msg1); + pc.sendPacket(msg2); + + } + } + /** * @param activeChar */ Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 5263) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -214,8 +214,8 @@ private static final String RESTORE_SKILL_SAVE = "SELECT skill_id,skill_level,effect_count,effect_cur_time, reuse_delay FROM character_skills_save WHERE char_obj_id=? AND class_index=? AND restore_type=? ORDER BY buff_index ASC"; private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?"; - private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,in_jail=?,jail_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=? WHERE obj_id=?"; - private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, in_jail, jail_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level FROM characters WHERE obj_id=?"; + private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,in_jail=?,jail_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,announce=? WHERE obj_id=?"; + private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, in_jail, jail_timer, newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,announce FROM characters WHERE obj_id=?"; private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC"; private static final String ADD_CHAR_SUBCLASS = "INSERT INTO character_subclasses (char_obj_id,class_id,exp,sp,level,class_index) VALUES (?,?,?,?,?,?)"; private static final String UPDATE_CHAR_SUBCLASS = "UPDATE character_subclasses SET exp=?,sp=?,level=?,class_id=? WHERE char_obj_id=? AND class_index =?"; @@ -451,6 +451,8 @@ private boolean _noble = false; private boolean _hero = false; + + private String announce = null; /** The L2FolkInstance corresponding to the last Folk wich one the player talked. */ private L2FolkInstance _lastFolkNpc = null; @@ -4671,6 +4673,13 @@ { return _partyMatchingMemo; } + + public boolean hasNewAnnounce(){ + if(getAnnounce() != "" && getAnnounce() != null) + return true; + + return false; + } public boolean isPartyMatchingShowClass() { @@ -5595,6 +5604,7 @@ player.setOnlineTime(rset.getLong("onlinetime")); player.setNewbie(rset.getInt("newbie")==1); player.setNoble(rset.getInt("nobless")==1); + player.setAnnounce(rset.getString("announce")); player.setClanJoinExpiryTime(rset.getLong("clan_join_expiry_time")); if (player.getClanJoinExpiryTime() < System.currentTimeMillis()) @@ -6059,7 +6069,8 @@ statement.setLong(54, getClanCreateExpiryTime()); statement.setString(55, getName()); statement.setLong(56, getDeathPenaltyBuffLevel()); - statement.setInt(57, getObjectId()); + statement.setString(57, getAnnounce()); + statement.setInt(58, getObjectId()); statement.execute(); statement.close(); @@ -8215,6 +8226,15 @@ return true; } + public String getAnnounce() + { + return announce; + } + + public void setAnnounce(String newAnnounce){ + announce = newAnnounce; + } + public boolean isNoble() { return _noble; Index: java/net/sf/l2j/gameserver/serverpackets/ExShowScreenMessage.java =================================================================== --- java/net/sf/l2j/gameserver/serverpackets/ExShowScreenMessage.java (revision 0) +++ java/net/sf/l2j/gameserver/serverpackets/ExShowScreenMessage.java (revision 0) @@ -0,0 +1,125 @@ +/* + * 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.serverpackets; + +public class ExShowScreenMessage extends L2GameServerPacket +{ + public static enum SMPOS + { + DUMMY, TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_CENTER, BOTTOM_RIGHT, + } + + private final int _type; + private final int _sysMessageId; + private final int _hide; + private final int _unk2; + private final int _unk3; + private final int _unk4; + private final int _size; + private final int _position; + private final boolean _effect; + private final String _text; + private final int _time; + + public ExShowScreenMessage(String text, int time) + { + _type = 1; + _sysMessageId = -1; + _hide = 0; + _unk2 = 0; + _unk3 = 0; + _unk4 = 0; + _position = 0x02; + _text = text; + _time = time; + _size = 0; + _effect = false; + } + + public ExShowScreenMessage(String text, int time, SMPOS pos, boolean effect) + { + this(text, time, pos.ordinal(), effect); + } + + public ExShowScreenMessage(String text, int time, int pos, boolean effect) + { + _type = 1; + _sysMessageId = -1; + _hide = 0; + _unk2 = 0; + _unk3 = 0; + _unk4 = 0; + _position = pos; + _text = text; + _time = time; + _size = 0; + _effect = effect; + } + + public ExShowScreenMessage(int type, int messageId, int position, int unk1, int size, int unk2, int unk3, boolean showEffect, int time, int unk4, String text) + { + _type = type; + _sysMessageId = messageId; + _hide = unk1; + _unk2 = unk2; + _unk3 = unk3; + _unk4 = unk4; + _position = position; + _text = text; + _time = time; + _size = size; + _effect = showEffect; + } + + // Close packet + public ExShowScreenMessage() + { + _type = 1; + _sysMessageId = -1; + _hide = 1; // hide it + _unk2 = 0; + _unk3 = 0; + _unk4 = 0; + _position = 0x02; + _text = ""; + _time = 0; + _size = 0; + _effect = false; + } + + @Override + public String getType() + { + return "[s]FE:39 ExShowScreenMessage"; + } + + @Override + protected void writeImpl() + { + writeC(0xfe); + writeH(0x38); + writeD(_type); // 0 - system messages, 1 - your defined text + writeD(_sysMessageId); // system message id (_type must be 0 otherwise no effect) + writeD(_position); // message position + writeD(_hide); // hide + writeD(_size); // font size 0 - normal, 1 - small + writeD(_unk2); // ? + writeD(_unk3); // ? + writeD(_effect == true ? 1 : 0); // upper effect (0 - disabled, 1 enabled) - _position must be 2 (center) otherwise no effect + writeD(_time); // time + writeD(_unk4); // ? + writeS(_text); // your text (_type must be 1, otherwise no effect) + } +} Index: java/net/sf/l2j/gameserver/clientpackets/RequestBypassToServer.java =================================================================== --- java/net/sf/l2j/gameserver/clientpackets/RequestBypassToServer.java (revision 5263) +++ java/net/sf/l2j/gameserver/clientpackets/RequestBypassToServer.java (working copy) @@ -18,22 +18,29 @@ */ package net.sf.l2j.gameserver.clientpackets; +import java.sql.Connection; +import java.sql.PreparedStatement; import java.util.logging.Level; import java.util.logging.Logger; import net.sf.l2j.Config; +import net.sf.l2j.L2DatabaseFactory; import net.sf.l2j.gameserver.ai.CtrlIntention; import net.sf.l2j.gameserver.communitybbs.CommunityBoard; import net.sf.l2j.gameserver.handler.AdminCommandHandler; import net.sf.l2j.gameserver.handler.IAdminCommandHandler; import net.sf.l2j.gameserver.model.L2CharPosition; +import net.sf.l2j.gameserver.model.L2ClanMember; import net.sf.l2j.gameserver.model.L2Object; import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.entity.L2Event; import net.sf.l2j.gameserver.serverpackets.ActionFailed; +import net.sf.l2j.gameserver.serverpackets.CreatureSay; +import net.sf.l2j.gameserver.serverpackets.ExShowScreenMessage; import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage; +import net.sf.l2j.gameserver.serverpackets.ExShowScreenMessage.SMPOS; /** * This class ... @@ -85,6 +92,60 @@ { comeHere(activeChar); } + else if (_command.startsWith("clan_ann")){ + String announce = _command.substring(9); + + if(announce == null || announce == ""){ + activeChar.sendMessage("nothing happened"); + return; + } + + else if(announce.length() >= 100){ + activeChar.sendMessage("Max Length: 100"); + return; + } + + else if(activeChar.hasNewAnnounce()){ + activeChar.sendMessage("There is already a clan announcement, delete it first."); + return; + } + + else { + CreatureSay msg1 = new CreatureSay(1,Say2.CLAN,"Clan Announcement",announce); + ExShowScreenMessage msg2 = new ExShowScreenMessage(announce, 15000, SMPOS.TOP_CENTER, true); + for(L2ClanMember member : activeChar.getClan().getMembers()){ + L2PcInstance real = member.getPlayerInstance(); + if(real == null) + continue; + if(real.isOnline() == 1){ + real.setAnnounce(announce); + real.sendPacket(msg1); + real.sendPacket(msg2); + } + } + + Connection con = null; + PreparedStatement state = null; + + try{ + con = L2DatabaseFactory.getInstance().getConnection(); + state = con.prepareStatement("UPDATE characters SET announce=? WHERE clanid=?"); + state.setString(1, announce); + state.setInt(2, activeChar.getClan().getClanId()); + state.execute(); + + state.close(); + } + + catch(Exception ie){ + ie.printStackTrace(); + } + finally{ + con.close(); + } + + } + } else if (_command.startsWith("player_help ")) { playerHelp(activeChar, _command.substring(12)); Index: java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/clanannounce.java =================================================================== --- java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/clanannounce.java (revision 0) +++ java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/clanannounce.java (revision 0) @@ -0,0 +1,108 @@ + +package net.sf.l2j.gameserver.handler.voicedcommandhandlers; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +import javolution.text.TextBuilder; +import net.sf.l2j.L2DatabaseFactory; +import net.sf.l2j.gameserver.handler.IVoicedCommandHandler; +import net.sf.l2j.gameserver.model.L2ClanMember; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.serverpackets.ExShowScreenMessage; +import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage; + +/** + * + * @author irat + */ +public class clanannounce implements IVoicedCommandHandler +{ + + ExShowScreenMessage screenMessage = new ExShowScreenMessage("Using clan notice system services.",2); + private final String[] commands = {"clanannounce_add","clanannounce_remove"}; + + public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target) + { + if(activeChar == null) + return false; + + if(!activeChar.isClanLeader()) + return false; + + else if(activeChar.getClan() == null ) + return false; + + else if(activeChar.getClan().getMembersCount() == 0){ + activeChar.sendMessage("You don't have any members"); + return false; + } + + if(command.equals("clanannounce_add")){ + activeChar.sendPacket(screenMessage); + showChat(activeChar); + } + else if(command.equals("clanannounce_remove")){ + for(L2ClanMember member : activeChar.getClan().getMembers()){ + L2PcInstance real = member.getPlayerInstance(); + + + if(real == null) + continue; + + if(real.isOnline() == 1){ + real.setAnnounce(""); + } + } + Connection con = null; + PreparedStatement state = null; + + try{ + con = L2DatabaseFactory.getInstance().getConnection(); + state = con.prepareStatement("UPDATE characters SET announce=? WHERE clanid=?"); + state.setString(1,""); + state.setInt(2,activeChar.getClan().getClanId()); + + state.execute(); + state.close(); + } + catch(Exception ie){ + ie.printStackTrace(); + } + finally{ + try + { + con.close(); + } + catch (SQLException e2) + { + // + } + } + } + return true; + } + + private void showChat(L2PcInstance playable){ + NpcHtmlMessage html = new NpcHtmlMessage(1); + TextBuilder tb = new TextBuilder(); + + tb.append("<html><head>"); + tb.append("<title>Clan Notice</title></head><body>"); + tb.append("<center><font color=\"FFFF00\">Hey! Welcome </font>"+"<font color=\"FF11FF\">"+playable.getName()+"</font></center>"); + tb.append("<font color=\"FFAA23\">Here you can handle the clan notice system.<br>Create a new announce to broadcast in all your clan members.<br>Offline members will be informed when they log in.</font>"); + tb.append("<br><br><center><font color=\"55FF55\">Creating New Announce:</font><br>"); + tb.append("<multiedit var=\"clan_announce\" width=240 height=30>"); + tb.append("<br><button value=\"Broadcast Announce\" action=\"bypass -h clan_ann $clan_announce\" width=60 height=15 length=\"3000\" back=\"sek.cbui94\" fore=\"sek.cbui92\"><br>"); + tb.append("</center></body></html>"); + html.setHtml(tb.toString()); + playable.sendPacket(html); + } + + public String[] getVoicedCommandList() + { + return commands; + } + +} 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.