Index: 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(); 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.

@@ -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;