rendered paste bodyIndex: F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/Config.java===================================================================--- F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/Config.java (revision 272)+++ F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/Config.java (working copy)@@ -533,6 +533,10 @@ /** Store skills cooltime on char exit/relogin */ public static boolean STORE_SKILL_COOLTIME;+ + /** Store skills cooldown time on char exit/relogin */+ public static boolean STORE_SKILL_COOLDOWN;+ /** Show licence or not just after login (if false, will directly go to the Server List */ public static boolean SHOW_LICENCE; /** Force GameGuard authorization in loginserver */ @@ -588,7 +592,9 @@ public static boolean GAMEGUARD_PROHIBITACTION; public static int DWARF_RECIPE_LIMIT; - public static int COMMON_RECIPE_LIMIT; + public static int COMMON_RECIPE_LIMIT;+ + public static boolean GEODATA_ENABLED; public static void load() {@@ -765,7 +771,9 @@ GMAUDIT = Boolean.valueOf(serverSettings.getProperty("GMAudit", "False")); GAMEGUARD_ENFORCE = Boolean.valueOf(serverSettings.getProperty("GameGuardEnforce", "False")); - GAMEGUARD_PROHIBITACTION = Boolean.valueOf(serverSettings.getProperty("GameGuardProhibitAction", "False"));+ GAMEGUARD_PROHIBITACTION = Boolean.valueOf(serverSettings.getProperty("GameGuardProhibitAction", "False"));+ + GEODATA_ENABLED = Boolean.valueOf(serverSettings.getProperty("GeodataEnabled", "False")); } catch (Exception e)@@ -894,6 +902,7 @@ MAX_PVTSTORE_SLOTS_OTHER = Integer.parseInt(otherSettings.getProperty("MaxPvtStoreSlotsOther", "4")); STORE_SKILL_COOLTIME = Boolean.parseBoolean(otherSettings.getProperty("StoreSkillCooltime", "true"));+ STORE_SKILL_COOLDOWN = Boolean.parseBoolean(otherSettings.getProperty("StoreSkillCooldown", "true")); PET_RENT_NPC = otherSettings.getProperty("ListPetRentNpc", "7827"); LIST_PET_RENT_NPC = new FastList<Integer>();Index: F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java===================================================================--- F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 272)+++ F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)@@ -26,9 +26,9 @@ import java.sql.ResultSet; import java.util.Calendar; import java.util.Collections;+import java.util.Iterator; import java.util.LinkedList; import java.util.List;-import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.WeakHashMap;@@ -44,17 +44,16 @@ import javolution.util.FastSet; import net.sf.l2j.Config; import net.sf.l2j.L2DatabaseFactory;-import net.sf.l2j.gameserver.ai.CtrlEvent; import net.sf.l2j.gameserver.CharTemplateTable; import net.sf.l2j.gameserver.ClanTable; import net.sf.l2j.gameserver.ClientScheduler; import net.sf.l2j.gameserver.Connection;-import net.sf.l2j.gameserver.model.L2Fishing; import net.sf.l2j.gameserver.GameTimeController; import net.sf.l2j.gameserver.GmListTable; import net.sf.l2j.gameserver.HennaTable; import net.sf.l2j.gameserver.ItemTable; import net.sf.l2j.gameserver.LoginServerThread;+import net.sf.l2j.gameserver.MapRegionTable; import net.sf.l2j.gameserver.RecipeController; import net.sf.l2j.gameserver.SevenSigns; import net.sf.l2j.gameserver.SevenSignsFestival;@@ -62,25 +61,26 @@ import net.sf.l2j.gameserver.SkillTreeTable; import net.sf.l2j.gameserver.ThreadPoolManager; import net.sf.l2j.gameserver.Universe;+import net.sf.l2j.gameserver.ai.CtrlEvent; import net.sf.l2j.gameserver.ai.CtrlIntention; import net.sf.l2j.gameserver.ai.L2CharacterAI; import net.sf.l2j.gameserver.ai.L2PlayerAI; import net.sf.l2j.gameserver.cache.HtmCache;-import net.sf.l2j.gameserver.communitybbs.BB.Forum; -import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager; -import net.sf.l2j.gameserver.model.TradeList;+import net.sf.l2j.gameserver.communitybbs.BB.Forum;+import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager; import net.sf.l2j.gameserver.handler.IItemHandler; import net.sf.l2j.gameserver.handler.ItemHandler; import net.sf.l2j.gameserver.handler.skillhandlers.SiegeFlag; import net.sf.l2j.gameserver.handler.skillhandlers.TakeCastle; import net.sf.l2j.gameserver.instancemanager.ArenaManager;+import net.sf.l2j.gameserver.instancemanager.CastleManager; import net.sf.l2j.gameserver.instancemanager.QuestManager; import net.sf.l2j.gameserver.instancemanager.SiegeManager; import net.sf.l2j.gameserver.instancemanager.ZoneManager;-import net.sf.l2j.gameserver.instancemanager.CastleManager; import net.sf.l2j.gameserver.lib.Rnd; import net.sf.l2j.gameserver.model.BlockList; import net.sf.l2j.gameserver.model.Inventory;+import net.sf.l2j.gameserver.model.ItemContainer; import net.sf.l2j.gameserver.model.L2Attackable; import net.sf.l2j.gameserver.model.L2CharPosition; import net.sf.l2j.gameserver.model.L2Character;@@ -88,8 +88,7 @@ import net.sf.l2j.gameserver.model.L2ClanMember; import net.sf.l2j.gameserver.model.L2DropData; import net.sf.l2j.gameserver.model.L2Effect;-import net.sf.l2j.gameserver.model.entity.L2Event;-import net.sf.l2j.gameserver.model.ItemContainer;+import net.sf.l2j.gameserver.model.L2Fishing; import net.sf.l2j.gameserver.model.L2HennaInstance; import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.L2Macro;@@ -109,6 +108,7 @@ import net.sf.l2j.gameserver.model.PcWarehouse; import net.sf.l2j.gameserver.model.PetInventory; import net.sf.l2j.gameserver.model.ShortCuts;+import net.sf.l2j.gameserver.model.TradeList; import net.sf.l2j.gameserver.model.L2Skill.SkillTargetType; import net.sf.l2j.gameserver.model.L2Skill.SkillType; import net.sf.l2j.gameserver.model.actor.knownlist.PcKnownList;@@ -118,6 +118,7 @@ import net.sf.l2j.gameserver.model.base.Race; import net.sf.l2j.gameserver.model.base.SubClass; import net.sf.l2j.gameserver.model.entity.Castle;+import net.sf.l2j.gameserver.model.entity.L2Event; import net.sf.l2j.gameserver.model.entity.Siege; import net.sf.l2j.gameserver.model.entity.Zone; import net.sf.l2j.gameserver.model.entity.ZoneType;@@ -127,7 +128,6 @@ import net.sf.l2j.gameserver.serverpackets.ActionFailed; import net.sf.l2j.gameserver.serverpackets.ChangeWaitType; import net.sf.l2j.gameserver.serverpackets.CharInfo;-import net.sf.l2j.gameserver.serverpackets.CreatureSay; import net.sf.l2j.gameserver.serverpackets.ExFishingEnd; import net.sf.l2j.gameserver.serverpackets.ExFishingStart; import net.sf.l2j.gameserver.serverpackets.HennaInfo;@@ -154,7 +154,6 @@ import net.sf.l2j.gameserver.serverpackets.StatusUpdate; import net.sf.l2j.gameserver.serverpackets.StopMove; import net.sf.l2j.gameserver.serverpackets.SystemMessage;-import net.sf.l2j.gameserver.serverpackets.TargetSelected; import net.sf.l2j.gameserver.serverpackets.TradeStart; import net.sf.l2j.gameserver.serverpackets.UserInfo; import net.sf.l2j.gameserver.skills.Stats;@@ -168,7 +167,6 @@ import net.sf.l2j.gameserver.templates.L2WeaponType; import net.sf.l2j.gameserver.util.Broadcast; import net.sf.l2j.gameserver.util.Util;-import net.sf.l2j.gameserver.MapRegionTable; import net.sf.l2j.util.Point3D; @@ -180,7 +178,8 @@ */ public final class L2PcInstance extends L2PlayableInstance {- private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE char_obj_id=? AND class_index=?";+ private static final String STORE_SKILL_COOLDOWN = "INSERT INTO character_skills(reuse_delay) VALUES(?) WHERE skill_id = ? AND char_obj_id=? AND class_index=?";+ private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level,reuse_delay FROM character_skills WHERE char_obj_id=? AND class_index=?"; private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (char_obj_id,skill_id,skill_level,skill_name,class_index) VALUES (?,?,?,?,?)"; private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND char_obj_id=? AND class_index=?"; private static final String DELETE_SKILL_FROM_CHAR = "DELETE FROM character_skills WHERE skill_id=? AND char_obj_id=? AND class_index=?";@@ -730,6 +729,30 @@ return _ai; } + public synchronized void saveSkillCooldown(int skillId, int cooltime)+ {+ java.sql.Connection con = null;+ + try+ {+ con = L2DatabaseFactory.getInstance().getConnection();+ PreparedStatement statement;++ statement = con.prepareStatement(STORE_SKILL_COOLDOWN);+ statement.setInt(1, cooltime);+ statement.setInt(2, skillId);+ statement.setInt(3, getObjectId());+ statement.setInt(4, getClassIndex());+ statement.execute();+ statement.close();+ con.close();+ }+ catch(Exception e)+ {+ _log.warning("error while saving skill cooldown time: "+e);+ e.printStackTrace();+ }+ } /** * Calculate a destination to explore the area and set the AI Intension to AI_INTENTION_MOVE_TO.<BR><BR>@@ -5113,6 +5136,7 @@ { int id = rset.getInt("skill_id"); int level = rset.getInt("skill_level");+ int cooldown = rset.getInt("reuse_delay"); if (id > 9000) continue; // fake skills for base stats@@ -5122,6 +5146,12 @@ // Add the L2Skill object to the L2Character _skills and its Func objects to the calculator set of the L2Character super.addSkill(skill);+ + if(cooldown > 0 && Config.STORE_SKILL_COOLDOWN)+ {+ disableSkill(id);+ ClientScheduler.getInstance().scheduleMed(new EnableSkill(id), cooldown);+ } } rset.close();Index: F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/L2Character.java===================================================================--- F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/L2Character.java (revision 272)+++ F:/eclipse-31m7/workspace/L2_GameServer_c4/java/net/sf/l2j/gameserver/model/L2Character.java (working copy)@@ -1072,6 +1072,9 @@ { disableSkill(skill.getId()); ClientScheduler.getInstance().scheduleMed(new EnableSkill(skill.getId()), reuseDelay);+ + if(this instanceof L2PcInstance && Config.STORE_SKILL_COOLDOWN)+ ((L2PcInstance)this).saveSkillCooldown(skill.getId(),reuseDelay); } // launch the magic in skillTime milliseconds@@ -1503,7 +1506,7 @@ } /** Task lauching the function enableSkill() */- class EnableSkill implements Runnable+ protected class EnableSkill implements Runnable { int _skillId;