Changeset 5145


Ignore:
Timestamp:
Jan 23, 2012 9:53:52 PM (4 months ago)
Author:
Zoey76
Message:

BETA: Misc fixes:

  • NPE vulnerability for _partys in L2CommandChannel.
  • In L2Manor if seeds.xml is not valid it shouldn't NPE.
  • NPE vulnerability for clan in Fort.
  • Hero rework.
    1. Performance fixes, using entries instead iterating over keys and getting the values.
    2. Cleanup.
    3. Fixed static variables assigned in instanced methods.
  • Useless cast to float and then round in Siege.
  • In MailSystem? if MailList?.xml is not valid it shouldn't NPE.
  • Reverting [5143], hiding the problem won't fix it.
  • Finalizing L2LoginServer class, uses Thread.start() in constructor if it's sub-classed the superclass thread will start before the sub-classed constructor is initialized.
Location:
branches/unstable/L2J_Server_BETA/java/com/l2jserver
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/L2DatabaseFactory.java

    r5144 r5145  
    2828public class L2DatabaseFactory 
    2929{ 
    30         static Logger _log = Logger.getLogger(L2DatabaseFactory.class.getName()); 
     30        private static final Logger _log = Logger.getLogger(L2DatabaseFactory.class.getName()); 
    3131         
    3232        public static enum ProviderType 
     
    155155        public final String safetyString(String... whatToCheck) 
    156156        { 
    157                 // NOTE: Use brace as a safty precaution just incase name is a reserved word 
     157                // NOTE: Use brace as a safety precaution just in case name is a reserved word 
    158158                final char braceLeft; 
    159159                final char braceRight; 
     
    209209        { 
    210210                Connection con = null; 
    211                  
    212211                while (con == null) 
    213212                { 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2CommandChannel.java

    r4921 r5145  
    3131 
    3232/** 
    33  * 
    3433 * @author  chris_00 
    3534 */ 
     
    117116                                        removeParty(party); 
    118117                        } 
    119                 } 
    120                 _partys.clear(); 
    121         } 
    122          
    123         /** 
    124          * @return overall membercount of the Command Channel 
     118                        _partys.clear(); 
     119                } 
     120        } 
     121         
     122        /** 
     123         * @return overall member count of the Command Channel 
    125124         */ 
    126125        public int getMemberCount() 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Manor.java

    r5083 r5145  
    387387                { 
    388388                        _log.log(Level.WARNING, "Could not parse seeds.xml file: " + e.getMessage(), e); 
     389                        return; 
    389390                } 
    390391                 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Fort.java

    r4994 r5145  
    437437        public boolean setOwner(L2Clan clan, boolean updateClansReputation) 
    438438        { 
    439                 L2Clan oldowner = getOwnerClan(); 
    440                  
    441                 // Remove old owner 
    442                 if (oldowner != null && clan != null && clan != oldowner) 
     439                if (clan == null) 
     440                { 
     441                        _log.warning(getClass().getSimpleName() + ": Updating Fort owner with null clan!!!"); 
     442                        return false; 
     443                } 
     444                final L2Clan oldowner = getOwnerClan(); 
     445                if (oldowner != null && clan != oldowner) 
    443446                { 
    444447                        // Remove points from old owner 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Hero.java

    r5083 r5145  
    3030import java.util.List; 
    3131import java.util.Map; 
     32import java.util.Map.Entry; 
    3233import java.util.logging.Level; 
    3334import java.util.logging.Logger; 
     
    7475        private static final String DELETE_ITEMS = "DELETE FROM items WHERE item_id IN " + "(6842, 6611, 6612, 6613, 6614, 6615, 6616, 6617, 6618, 6619, 6620, 6621, 9388, 9389, 9390) " + "AND owner_id NOT IN (SELECT charId FROM characters WHERE accesslevel > 0)"; 
    7576         
    76         private static Map<Integer, StatsSet> _heroes; 
    77         private static Map<Integer, StatsSet> _completeHeroes; 
    78          
    79         private static Map<Integer, StatsSet> _herocounts; 
    80         private static Map<Integer, List<StatsSet>> _herofights; 
    81         private static List<StatsSet> _fights; 
    82          
    83         private static Map<Integer, List<StatsSet>> _herodiary; 
    84         private static Map<Integer, String> _heroMessage; 
    85         private static List<StatsSet> _diary; 
     77        private static final Map<Integer, StatsSet> _heroes = new FastMap<Integer, StatsSet>(); 
     78        private static final Map<Integer, StatsSet> _completeHeroes = new FastMap<Integer, StatsSet>(); 
     79         
     80        private static final Map<Integer, StatsSet> _herocounts = new FastMap<Integer, StatsSet>(); 
     81        private static final Map<Integer, List<StatsSet>> _herofights = new FastMap<Integer, List<StatsSet>>(); 
     82        private static final List<StatsSet> _fights = new FastList<StatsSet>(); 
     83         
     84        private static final Map<Integer, List<StatsSet>> _herodiary = new FastMap<Integer, List<StatsSet>>(); 
     85        private static final Map<Integer, String> _heroMessage = new FastMap<Integer, String>(); 
     86        private static final List<StatsSet> _diary = new FastList<StatsSet>(); 
    8687         
    8788        public static final String COUNT = "count"; 
     
    108109        private void init() 
    109110        { 
    110                 _heroes = new FastMap<Integer, StatsSet>(); 
    111                 _completeHeroes = new FastMap<Integer, StatsSet>(); 
    112                  
    113                 _herofights = new FastMap<Integer, List<StatsSet>>(); 
    114                 _herocounts = new FastMap<Integer, StatsSet>(); 
    115                 _herodiary = new FastMap<Integer, List<StatsSet>>(); 
    116                 _heroMessage = new FastMap<Integer, String>(); 
     111                _heroes.clear(); 
     112                _completeHeroes.clear(); 
     113                _herocounts.clear(); 
     114                _herofights.clear(); 
     115                _herodiary.clear(); 
     116                _heroMessage.clear(); 
    117117                 
    118118                Connection con = null; 
     
    233233                catch (SQLException e) 
    234234                { 
    235                         _log.warning("Hero System: Couldnt load Heroes"); 
    236                         if (Config.DEBUG) 
    237                         { 
    238                                 _log.log(Level.WARNING, "", e); 
    239                         } 
     235                        _log.log(Level.WARNING, "Hero System: Couldnt load Heroes", e); 
    240236                } 
    241237                finally 
     
    290286        public void loadDiary(int charId) 
    291287        { 
    292                 _diary = new FastList<StatsSet>(); 
    293                  
     288                _diary.clear(); 
    294289                int diaryentries = 0; 
    295290                Connection con = null; 
     
    344339                catch (SQLException e) 
    345340                { 
    346                         _log.warning("Hero System: Couldnt load Hero Diary for CharId: " + charId); 
    347                         if (Config.DEBUG) 
    348                                 _log.log(Level.WARNING, "", e); 
     341                        _log.log(Level.WARNING, "Hero System: Couldnt load Hero Diary for CharId: " + charId, e); 
    349342                } 
    350343                finally 
     
    356349        public void loadFights(int charId) 
    357350        { 
    358                 _fights = new FastList<StatsSet>(); 
    359                  
     351                _fights.clear(); 
    360352                StatsSet _herocountdata = new StatsSet(); 
    361                  
    362353                Calendar _data = Calendar.getInstance(); 
    363354                _data.set(Calendar.DAY_OF_MONTH, 1); 
     
    382373                        ResultSet rset = statement.executeQuery(); 
    383374                         
     375                        int charOneId; 
     376                        int charOneClass; 
     377                        int charTwoId; 
     378                        int charTwoClass; 
     379                        int winner; 
     380                        long start; 
     381                        int time; 
     382                        int classed; 
    384383                        while (rset.next()) 
    385384                        { 
    386                                 int charOneId = rset.getInt("charOneId"); 
    387                                 int charOneClass = rset.getInt("charOneClass"); 
    388                                 int charTwoId = rset.getInt("charTwoId"); 
    389                                 int charTwoClass = rset.getInt("charTwoClass"); 
    390                                 int winner = rset.getInt("winner"); 
    391                                 long start = rset.getLong("start"); 
    392                                 int time = rset.getInt("time"); 
    393                                 int classed = rset.getInt("classed"); 
     385                                charOneId = rset.getInt("charOneId"); 
     386                                charOneClass = rset.getInt("charOneClass"); 
     387                                charTwoId = rset.getInt("charTwoId"); 
     388                                charTwoClass = rset.getInt("charTwoClass"); 
     389                                winner = rset.getInt("winner"); 
     390                                start = rset.getLong("start"); 
     391                                time = rset.getInt("time"); 
     392                                classed = rset.getInt("classed"); 
    394393                                 
    395394                                if (charId == charOneId) 
     
    480479                catch (SQLException e) 
    481480                { 
    482                         _log.warning("Hero System: Couldnt load Hero fights history for CharId: " + charId); 
    483                         if (Config.DEBUG) 
    484                                 _log.log(Level.WARNING, "", e); 
     481                        _log.log(Level.WARNING, "Hero System: Couldnt load Hero fights history for CharId: " + charId, e); 
    485482                } 
    486483                finally 
     
    788785                updateHeroes(false); 
    789786                 
     787                L2PcInstance player; 
    790788                for(Integer charId : _heroes.keySet()) 
    791789                { 
    792                         L2PcInstance player = L2World.getInstance().getPlayer(charId); 
    793                          
     790                        player = L2World.getInstance().getPlayer(charId); 
    794791                        if (player != null) 
    795792                        { 
     
    879876                        else 
    880877                        { 
    881                                 for (Integer heroId : _heroes.keySet()) 
    882                                 { 
    883                                         StatsSet hero = _heroes.get(heroId); 
    884                                          
    885                                         if ((_completeHeroes == null) || !_completeHeroes.containsKey(heroId)) 
     878                                StatsSet hero; 
     879                                int heroId; 
     880                                for (Entry<Integer, StatsSet> entry : _heroes.entrySet()) 
     881                                { 
     882                                        hero = entry.getValue(); 
     883                                        heroId = entry.getKey(); 
     884                                        if (_completeHeroes.isEmpty() || !_completeHeroes.containsKey(heroId)) 
    886885                                        { 
    887886                                                statement = con.prepareStatement(INSERT_HERO); 
     
    947946                catch (SQLException e) 
    948947                { 
    949                         _log.warning("Hero System: Couldnt update Heroes"); 
    950                         if (Config.DEBUG) 
    951                         { 
    952                                 _log.log(Level.WARNING, "", e); 
    953                         } 
     948                        _log.log(Level.WARNING, "Hero System: Couldnt update Heroes", e); 
    954949                } 
    955950                finally 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Siege.java

    r5134 r5145  
    105105                                { 
    106106                                        SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MINUTES_UNTIL_SIEGE_CONCLUSION); 
    107                                         sm.addNumber(Math.round(timeRemaining / 60000)); 
     107                                        sm.addNumber((int) timeRemaining / 60000); 
    108108                                        announceToPlayer(sm, true); 
    109109                                        ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleEndSiegeTask(_castleInst), timeRemaining - 600000); // Prepare task for 10 minute left. 
     
    112112                                { 
    113113                                        SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MINUTES_UNTIL_SIEGE_CONCLUSION); 
    114                                         sm.addNumber(Math.round(timeRemaining / 60000)); 
     114                                        sm.addNumber((int) timeRemaining / 60000); 
    115115                                        announceToPlayer(sm, true); 
    116116                                        ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleEndSiegeTask(_castleInst), timeRemaining - 300000); // Prepare task for 5 minute left. 
     
    119119                                { 
    120120                                        SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MINUTES_UNTIL_SIEGE_CONCLUSION); 
    121                                         sm.addNumber(Math.round(timeRemaining / 60000)); 
     121                                        sm.addNumber((int) timeRemaining / 60000); 
    122122                                        announceToPlayer(sm, true); 
    123123                                        ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleEndSiegeTask(_castleInst), timeRemaining - 10000); // Prepare task for 10 seconds count down 
     
    126126                                { 
    127127                                        SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CASTLE_SIEGE_S1_SECONDS_LEFT); 
    128                                         sm.addNumber(Math.round(timeRemaining / 1000)); 
     128                                        sm.addNumber((int) timeRemaining / 1000); 
    129129                                        announceToPlayer(sm, true); 
    130130                                        ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleEndSiegeTask(_castleInst), timeRemaining); // Prepare task for second count down 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemcontainer/Inventory.java

    r5143 r5145  
    843843         
    844844        /** 
    845          * Returns the item in the paperdoll slot 
    846          * @param slot  
    847          * @return L2ItemInstance 
     845         * @param slot the slot. 
     846         * @return the item in the paperdoll slot 
    848847         */ 
    849848        public L2ItemInstance getPaperdollItem(int slot) 
     
    921920         
    922921        /** 
    923          * Returns the ID of the item in the paperdol slot 
     922         * Returns the ID of the item in the paperdoll slot 
    924923         * @param slot : int designating the slot 
    925924         * @return int designating the ID of the item 
     
    10571056        { 
    10581057                int slot = -1; 
    1059                 int location = item.getLocationSlot(); 
    1060                  
     1058                final int location = item.getLocationSlot(); 
    10611059                switch(location) 
    10621060                { 
    1063                         case PAPERDOLL_UNDER:           slot = L2Item.SLOT_UNDERWEAR; 
    1064                         break; 
    1065                         case PAPERDOLL_LEAR:            slot = L2Item.SLOT_L_EAR; 
    1066                         break; 
    1067                         case PAPERDOLL_REAR:            slot = L2Item.SLOT_R_EAR; 
    1068                         break; 
    1069                         case PAPERDOLL_NECK:            slot = L2Item.SLOT_NECK; 
    1070                         break; 
    1071                         case PAPERDOLL_RFINGER:         slot = L2Item.SLOT_R_FINGER; 
    1072                         break; 
    1073                         case PAPERDOLL_LFINGER:         slot = L2Item.SLOT_L_FINGER; 
    1074                         break; 
    1075                         case PAPERDOLL_HAIR:            slot = L2Item.SLOT_HAIR; 
    1076                         break; 
    1077                         case PAPERDOLL_HAIR2:           slot = L2Item.SLOT_HAIR2; 
    1078                         break; 
    1079                         case PAPERDOLL_HEAD:            slot = L2Item.SLOT_HEAD; 
    1080                         break; 
    1081                         case PAPERDOLL_RHAND:           slot = L2Item.SLOT_R_HAND; 
    1082                         break; 
    1083                         case PAPERDOLL_LHAND:           slot = L2Item.SLOT_L_HAND; 
    1084                         break; 
    1085                         case PAPERDOLL_GLOVES:          slot = L2Item.SLOT_GLOVES; 
    1086                         break; 
    1087                         case PAPERDOLL_CHEST:           slot = item.getItem().getBodyPart(); 
    1088                         break; 
    1089                         case PAPERDOLL_LEGS:            slot = L2Item.SLOT_LEGS; 
    1090                         break; 
    1091                         case PAPERDOLL_CLOAK:           slot = L2Item.SLOT_BACK; 
    1092                         break; 
    1093                         case PAPERDOLL_FEET:            slot = L2Item.SLOT_FEET; 
    1094                         break; 
    1095                         case PAPERDOLL_LBRACELET:        slot = L2Item.SLOT_L_BRACELET; 
    1096                         break; 
    1097                         case PAPERDOLL_RBRACELET:        slot = L2Item.SLOT_R_BRACELET; 
    1098                         break; 
     1061                        case PAPERDOLL_UNDER: 
     1062                                slot = L2Item.SLOT_UNDERWEAR; 
     1063                                break; 
     1064                        case PAPERDOLL_LEAR: 
     1065                                slot = L2Item.SLOT_L_EAR; 
     1066                                break; 
     1067                        case PAPERDOLL_REAR: 
     1068                                slot = L2Item.SLOT_R_EAR; 
     1069                                break; 
     1070                        case PAPERDOLL_NECK: 
     1071                                slot = L2Item.SLOT_NECK; 
     1072                                break; 
     1073                        case PAPERDOLL_RFINGER: 
     1074                                slot = L2Item.SLOT_R_FINGER; 
     1075                                break; 
     1076                        case PAPERDOLL_LFINGER: 
     1077                                slot = L2Item.SLOT_L_FINGER; 
     1078                                break; 
     1079                        case PAPERDOLL_HAIR: 
     1080                                slot = L2Item.SLOT_HAIR; 
     1081                                break; 
     1082                        case PAPERDOLL_HAIR2: 
     1083                                slot = L2Item.SLOT_HAIR2; 
     1084                                break; 
     1085                        case PAPERDOLL_HEAD: 
     1086                                slot = L2Item.SLOT_HEAD; 
     1087                                break; 
     1088                        case PAPERDOLL_RHAND: 
     1089                                slot = L2Item.SLOT_R_HAND; 
     1090                                break; 
     1091                        case PAPERDOLL_LHAND: 
     1092                                slot = L2Item.SLOT_L_HAND; 
     1093                                break; 
     1094                        case PAPERDOLL_GLOVES: 
     1095                                slot = L2Item.SLOT_GLOVES; 
     1096                                break; 
     1097                        case PAPERDOLL_CHEST: 
     1098                                slot = item.getItem().getBodyPart(); 
     1099                                break; 
     1100                        case PAPERDOLL_LEGS: 
     1101                                slot = L2Item.SLOT_LEGS; 
     1102                                break; 
     1103                        case PAPERDOLL_CLOAK: 
     1104                                slot = L2Item.SLOT_BACK; 
     1105                                break; 
     1106                        case PAPERDOLL_FEET: 
     1107                                slot = L2Item.SLOT_FEET; 
     1108                                break; 
     1109                        case PAPERDOLL_LBRACELET: 
     1110                                slot = L2Item.SLOT_L_BRACELET; 
     1111                                break; 
     1112                        case PAPERDOLL_RBRACELET: 
     1113                                slot = L2Item.SLOT_R_BRACELET; 
     1114                                break; 
    10991115                        case PAPERDOLL_DECO1: 
    11001116                        case PAPERDOLL_DECO2: 
     
    11021118                        case PAPERDOLL_DECO4: 
    11031119                        case PAPERDOLL_DECO5: 
    1104                         case PAPERDOLL_DECO6:           slot = L2Item.SLOT_DECO; 
    1105                         break; 
    1106                         case PAPERDOLL_BELT:            slot = L2Item.SLOT_BELT; 
    1107                         break; 
     1120                        case PAPERDOLL_DECO6: 
     1121                                slot = L2Item.SLOT_DECO; 
     1122                                break; 
     1123                        case PAPERDOLL_BELT: 
     1124                                slot = L2Item.SLOT_BELT; 
     1125                                break; 
    11081126                } 
    11091127                return slot; 
     
    15861604                        while (inv.next()) 
    15871605                        { 
    1588                                 // Check if that item already exists in OID map. 
    1589                                 if (L2World.getInstance().findObject(inv.getInt("object_id")) != null) 
    1590                                         continue; 
    1591                                  
    15921606                                item = L2ItemInstance.restoreFromDb(getOwnerId(), inv); 
    1593                                  
    15941607                                if (item == null) 
    15951608                                        continue; 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/gameserver/skills/DocumentBase.java

    r5083 r5145  
    353353                EffectTemplate lt; 
    354354                 
    355                 final boolean isChanceSkillTrigger = (name == "ChanceSkillTrigger"); 
     355                final boolean isChanceSkillTrigger = name.equals("ChanceSkillTrigger"); 
    356356                int trigId = 0; 
    357357                if (attrs.getNamedItem("triggeredId") != null) 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/loginserver/L2LoginServer.java

    r5140 r5145  
    4242 
    4343/** 
    44  * 
    4544 * @author  KenM 
    4645 */ 
    47 public class L2LoginServer 
     46public final class L2LoginServer 
    4847{ 
    4948        private final Logger _log = Logger.getLogger(L2LoginServer.class.getName()); 
  • branches/unstable/L2J_Server_BETA/java/com/l2jserver/loginserver/mail/MailSystem.java

    r4921 r5145  
    3333 
    3434/** 
    35  *  
    3635 * @author mrTJO 
    3736 */ 
     
    4039        private final static Logger _log = Logger.getLogger(MailSystem.class.getName()); 
    4140        private final Map<String, MailContent> _mailData = new FastMap<String, MailContent>(); 
    42                  
     41         
    4342        public static MailSystem getInstance() 
    4443        { 
     
    7372                        { 
    7473                                _log.log(Level.WARNING, "Could not parse MailList.xml file: " + e.getMessage(), e); 
     74                                return; 
    7575                        } 
    7676                         
     
    8686                                        try 
    8787                                        { 
    88                                                 FileInputStream fis = new FileInputStream(new File(Config.DATAPACK_ROOT, "data/mail/"+maFile)); 
     88                                                FileInputStream fis = new FileInputStream(new File(Config.DATAPACK_ROOT, "data/mail/" + maFile)); 
    8989                                                BufferedInputStream bis = new BufferedInputStream(fis); 
    9090                                                int bytes = bis.available(); 
     
    101101                                        catch (IOException e) 
    102102                                        { 
    103                                                 _log.warning("IOException while reading "+maFile); 
     103                                                _log.warning("IOException while reading " + maFile); 
    104104                                        } 
    105105                                } 
     
    108108                } 
    109109                else 
     110                { 
    110111                        _log.warning("Cannot load eMail System - Missing file MailList.xml"); 
     112                } 
    111113        } 
    112114         
    113         class MailContent 
     115        public class MailContent 
    114116        { 
    115117                private final String _subject; 
     
    117119                 
    118120                /** 
    119                  * @param subject  
    120                  * @param text  
     121                 * @param subject 
     122                 * @param text 
    121123                 */ 
    122124                public MailContent(String subject, String text) 
Note: See TracChangeset for help on using the changeset viewer.