Index: java/net/sf/l2j/gameserver/clientpackets/RequestExEnchantSkill.java =================================================================== --- java/net/sf/l2j/gameserver/clientpackets/RequestExEnchantSkill.java (revision 1356) +++ java/net/sf/l2j/gameserver/clientpackets/RequestExEnchantSkill.java (working copy) @@ -186,6 +186,7 @@ { _skillLvl = _baseLvl; player.addSkill(SkillTable.getInstance().getInfo(_skillId, _skillLvl), true); + player.sendSkillList(); } SystemMessage sm = new SystemMessage(SystemMessageId.YOU_HAVE_FAILED_TO_ENCHANT_THE_SKILL_S1); sm.addSkillName(_skillId); Index: java/net/sf/l2j/gameserver/clientpackets/RequestSkillList.java =================================================================== --- java/net/sf/l2j/gameserver/clientpackets/RequestSkillList.java (revision 1356) +++ java/net/sf/l2j/gameserver/clientpackets/RequestSkillList.java (working copy) @@ -53,22 +53,7 @@ if (cha == null) return; - SkillList response = new SkillList(); - L2Skill[] skills = cha.getAllSkills(); - - for (int i = 0; i < skills.length; i++) - { - L2Skill s = skills[i]; - - if (s == null) - continue; - if (s.getId() > 9000) - continue; // fake skills to change base stats - - response.addSkill(s.getId(), s.getLevel(), s.isPassive()); - } - - sendPacket(response); + cha.sendSkillList(); } /* (non-Javadoc) Index: java/net/sf/l2j/gameserver/clientpackets/RequestAquireSkill.java =================================================================== --- java/net/sf/l2j/gameserver/clientpackets/RequestAquireSkill.java (revision 1356) +++ java/net/sf/l2j/gameserver/clientpackets/RequestAquireSkill.java (working copy) @@ -37,6 +37,7 @@ import net.sf.l2j.gameserver.network.SystemMessageId; import net.sf.l2j.gameserver.serverpackets.ExStorageMaxCount; import net.sf.l2j.gameserver.serverpackets.PledgeShowInfoUpdate; +import net.sf.l2j.gameserver.serverpackets.PledgeSkillList; import net.sf.l2j.gameserver.serverpackets.ShortCutRegister; import net.sf.l2j.gameserver.serverpackets.StatusUpdate; import net.sf.l2j.gameserver.serverpackets.SystemMessage; @@ -294,8 +295,12 @@ player.sendPacket(sm); sm = null; - player.getClan().broadcastToOnlineMembers(new PledgeShowInfoUpdate(player.getClan())); + player.getClan().broadcastToOnlineMembers(new PledgeSkillList(player.getClan())); + for(L2PcInstance member: player.getClan().getOnlineMembers("")) + { + member.sendSkillList(); + } ((L2VillageMasterInstance)trainer).showPledgeSkillList(player); //Maybe we shoud add a check here... return; Index: /java/net/sf/l2j/gameserver/Olympiad.java =================================================================== --- java/net/sf/l2j/gameserver/Olympiad.java (revision 1356) +++ java/net/sf/l2j/gameserver/Olympiad.java (working copy) @@ -1466,6 +1466,11 @@ for(L2Skill skill: player.getClan().getAllSkills()) player.removeSkill(skill,false); } + //Abort casting if player casting + if (player.isCastingNow()) + { + player.abortCast(); + } //Remove Hero Skills if (player.isHero()) @@ -1545,7 +1550,7 @@ Map activeSoulShots = player.getAutoSoulShot(); for (int itemId : activeSoulShots.values()) player.removeAutoSoulShot(itemId); - + player.sendSkillList(); } catch (Exception e) {} } @@ -1703,6 +1708,7 @@ for(L2Skill skill: HeroSkillTable.GetHeroSkills()) player.addSkill(skill,false); } + player.sendSkillList(); } catch (Exception e) {} } } Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 1356) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -171,6 +171,7 @@ import net.sf.l2j.gameserver.serverpackets.SendTradeDone; import net.sf.l2j.gameserver.serverpackets.SetupGauge; import net.sf.l2j.gameserver.serverpackets.ShortCutInit; +import net.sf.l2j.gameserver.serverpackets.SkillList; import net.sf.l2j.gameserver.serverpackets.Snoop; import net.sf.l2j.gameserver.serverpackets.SocialAction; import net.sf.l2j.gameserver.serverpackets.StatusUpdate; @@ -656,6 +657,7 @@ _reference = reference; _sendMessage = sendMessage; } + @SuppressWarnings("synthetic-access") public void run() { try @@ -2120,7 +2122,7 @@ { giveAvailableSkills(); } - + sendSkillList(); // This function gets called on login, so not such a bad place to check weight refreshOverloaded(); // Update the overloaded status of the L2PcInstance refreshExpertisePenalty(); // Update the expertise status of the L2PcInstance @@ -8116,6 +8118,8 @@ super.removeSkill(s); //Just Remove skills from nonHero characters } _hero = hero; + + sendSkillList(); } public void setIsInOlympiadMode(boolean b) @@ -8233,6 +8237,8 @@ for (L2Skill s : NobleSkillTable.getInstance().GetNobleSkills()) super.removeSkill(s); //Just Remove skills without deleting from Sql _noble = val; + + sendSkillList(); } public void setLvlJoinedAcademy(int lvl) @@ -8300,6 +8306,27 @@ { return (_alliedVarkaKetra > 0); } + public void sendSkillList() + { + sendSkillList(this); + } + + public void sendSkillList(L2PcInstance player) + { + SkillList sl = new SkillList(); + if(player != null) + { + for (L2Skill s : player.getAllSkills()) + { + if (s == null) + continue; + if (s.getId() > 9000) + continue; // Fake skills to change base stats + sl.addSkill(s.getId(), s.getLevel(), s.isPassive()); + } + } + sendPacket(sl); + } /** * 1. Add the specified class ID as a subclass (up to the maximum number of three) @@ -8837,6 +8864,7 @@ _lastRecomUpdate = update.getTimeInMillis(); } + @Override public void doRevive() { @@ -10015,7 +10043,7 @@ public void calculateDeathPenaltyBuffLevel(L2Character killer) { if(Rnd.get(100) <= Config.DEATH_PENALTY_CHANCE - && !(killer instanceof L2PcInstance) + && !(killer instanceof L2PcInstance) && !(this.isGM()) && !(this.getCharmOfLuck() && (killer instanceof L2BossInstance || killer instanceof L2RaidBossInstance))) increaseDeathPenaltyBuffLevel(); Index: java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java (revision 1356) +++ java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java (working copy) @@ -229,7 +229,11 @@ su.addAttribute(StatusUpdate.MAX_HP, getMaxHp()); su.addAttribute(StatusUpdate.MAX_MP, getMaxMp()); getActiveChar().sendPacket(su); - + + // Update the overloaded status of the L2PcInstance + getActiveChar().refreshOverloaded(); + // Update the expertise status of the L2PcInstance + getActiveChar().refreshExpertisePenalty(); // Send a Server->Client packet UserInfo to the L2PcInstance getActiveChar().sendPacket(new UserInfo(getActiveChar())); Index: java/net/sf/l2j/gameserver/model/L2Augmentation.java =================================================================== --- java/net/sf/l2j/gameserver/model/L2Augmentation.java (revision 1356) +++ java/net/sf/l2j/gameserver/model/L2Augmentation.java (working copy) @@ -181,7 +181,11 @@ _boni.applyBoni(player); // add the skill if any - if (_skill != null) player.addSkill(_skill); + if (_skill != null) + { + player.addSkill(_skill); + player.sendSkillList(); + } } /** @@ -193,6 +197,10 @@ _boni.removeBoni(player); // remove the skill if any - if (_skill != null) player.removeSkill(_skill); + if (_skill != null) + { + player.removeSkill(_skill); + player.sendSkillList(); + } } } Index: java/net/sf/l2j/gameserver/model/Inventory.java =================================================================== --- java/net/sf/l2j/gameserver/model/Inventory.java (revision 1356) +++ java/net/sf/l2j/gameserver/model/Inventory.java (working copy) @@ -233,9 +233,15 @@ passiveSkill = ((L2Armor)it).getSkill(); if(passiveSkill != null) + { player.removeSkill(passiveSkill, false); + player.sendSkillList(); + } if(enchant4Skill != null) + { player.removeSkill(enchant4Skill, false); + player.sendSkillList(); + } } public void notifyEquiped(int slot, L2ItemInstance item) { @@ -264,9 +270,15 @@ passiveSkill = ((L2Armor)it).getSkill(); if(passiveSkill != null) + { player.addSkill(passiveSkill, false); + player.sendSkillList(); + } if(enchant4Skill != null) + { player.addSkill(enchant4Skill, false); + player.sendSkillList(); + } } } @@ -296,7 +308,10 @@ { L2Skill skill = SkillTable.getInstance().getInfo(armorSet.getSkillId(),1); if(skill != null) + { player.addSkill(skill, false); + player.sendSkillList(); + } else _log.warning("Inventory.ArmorSetListener: Incorrect skill: "+armorSet.getSkillId()+"."); @@ -304,7 +319,10 @@ { L2Skill skills = SkillTable.getInstance().getInfo(armorSet.getShieldSkillId(),1); if(skills != null) + { player.addSkill(skills, false); + player.sendSkillList(); + } else _log.warning("Inventory.ArmorSetListener: Incorrect skill: "+armorSet.getShieldSkillId()+"."); } @@ -315,7 +333,10 @@ { L2Skill skille = SkillTable.getInstance().getInfo(skillId,1); if(skille != null) + { player.addSkill(skille, false); + player.sendSkillList(); + } else _log.warning("Inventory.ArmorSetListener: Incorrect skill: "+armorSet.getEnchant6skillId()+"."); } @@ -328,7 +349,10 @@ { L2Skill skills = SkillTable.getInstance().getInfo(armorSet.getShieldSkillId(),1); if(skills != null) + { player.addSkill(skills, false); + player.sendSkillList(); + } else _log.warning("Inventory.ArmorSetListener: Incorrect skill: "+armorSet.getShieldSkillId()+"."); } @@ -351,6 +375,7 @@ removeSkillId1 = armorSet.getSkillId(); removeSkillId2 = armorSet.getShieldSkillId(); removeSkillId3 = armorSet.getEnchant6skillId(); + ((L2PcInstance)getOwner()).sendSkillList(); } else @@ -369,11 +394,13 @@ removeSkillId1 = armorSet.getSkillId(); removeSkillId2 = armorSet.getShieldSkillId(); removeSkillId3 = armorSet.getEnchant6skillId(); + ((L2PcInstance)getOwner()).sendSkillList(); } else if(armorSet.containShield(item.getItemId())) // removed shield { remove = true; removeSkillId2 = armorSet.getShieldSkillId(); + ((L2PcInstance)getOwner()).sendSkillList(); } } @@ -383,7 +410,10 @@ { L2Skill skill = SkillTable.getInstance().getInfo(removeSkillId1,1); if(skill != null) + { ((L2PcInstance)getOwner()).removeSkill(skill); + ((L2PcInstance)getOwner()).sendSkillList(); + } else _log.warning("Inventory.ArmorSetListener: Incorrect skill: "+removeSkillId1+"."); } @@ -391,7 +421,10 @@ { L2Skill skill = SkillTable.getInstance().getInfo(removeSkillId2,1); if(skill != null) + { ((L2PcInstance)getOwner()).removeSkill(skill); + ((L2PcInstance)getOwner()).sendSkillList(); + } else _log.warning("Inventory.ArmorSetListener: Incorrect skill: "+removeSkillId2+"."); } @@ -399,7 +432,10 @@ { L2Skill skill = SkillTable.getInstance().getInfo(removeSkillId3,1); if(skill != null) + { ((L2PcInstance)getOwner()).removeSkill(skill); + ((L2PcInstance)getOwner()).sendSkillList(); + } else _log.warning("Inventory.ArmorSetListener: Incorrect skill: "+removeSkillId3+"."); } Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSkill.java =================================================================== --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSkill.java (revision 1356) +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSkill.java (working copy) @@ -33,6 +33,7 @@ import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.network.SystemMessageId; import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage; +import net.sf.l2j.gameserver.serverpackets.PledgeSkillList; import net.sf.l2j.gameserver.serverpackets.SystemMessage; /** @@ -154,6 +155,7 @@ player.removeSkill(skill); activeChar.sendMessage("You removed all skills from " + player.getName()); player.sendMessage("Admin removed all skills from you."); + player.sendSkillList(); } } else if (command.startsWith("admin_add_clan_skill")) @@ -212,6 +214,7 @@ //Notify player and admin player.sendMessage("A GM gave you " + skillCounter + " skills."); activeChar.sendMessage("You gave " + skillCounter + " skills to " + player.getName()); + player.sendSkillList(); } public String[] getAdminCommandList() { @@ -329,6 +332,7 @@ for (int i=0;i