Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

[Comando] Clan Notice System

Iniciado por Swarlog, Ago 05, 2022, 01:27 AM

Tema anterior - Siguiente tema

Swarlog





### 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/VoicedCommandHandler.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java    (revision 0)
+++ java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java    (working copy)
@@ -0,0 +1,98 @@
 
import net.sf.l2j.gameserver.handler.voicedcommandhandlers.Online;
+import net.sf.l2j.gameserver.handler.voicedcommandhandlers.clanannounce;
 
        registerHandler(new Online());
+        registerHandler(new clanannounce());

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;
+    }
+   
+}