Browse Source

Some updates from Gnat:
Check inventory size on ClassMaster class change.
Config for Gm skills on login.

JIV 15 years ago
parent
commit
de957ed03b

+ 2 - 0
L2_GameServer/java/com/l2jserver/Config.java

@@ -375,6 +375,7 @@ public final class Config
 	public static boolean GM_TRADE_RESTRICTED_ITEMS;
 	public static boolean GM_RESTART_FIGHTING;
 	public static boolean GM_ANNOUNCER_NAME;
+	public static boolean GM_GIVE_SPECIAL_SKILLS;
 	public static boolean BYPASS_VALIDATION;
 	public static boolean GAMEGUARD_ENFORCE;
 	public static boolean GAMEGUARD_PROHIBITACTION;
@@ -1570,6 +1571,7 @@ public final class Config
 					GM_TRADE_RESTRICTED_ITEMS = Boolean.parseBoolean(General.getProperty("GMTradeRestrictedItems", "False"));
 					GM_RESTART_FIGHTING = Boolean.parseBoolean(General.getProperty("GMRestartFighting", "True"));
 					GM_ANNOUNCER_NAME = Boolean.parseBoolean(General.getProperty("GMShowAnnouncerName", "False"));
+					GM_GIVE_SPECIAL_SKILLS = Boolean.parseBoolean(General.getProperty("GMGiveSpecialSkills", "False"));
 					BYPASS_VALIDATION = Boolean.parseBoolean(General.getProperty("BypassValidation", "True"));
 					GAMEGUARD_ENFORCE = Boolean.parseBoolean(General.getProperty("GameGuardEnforce", "False"));
 					GAMEGUARD_PROHIBITACTION = Boolean.parseBoolean(General.getProperty("GameGuardProhibitAction", "False"));

+ 2 - 0
L2_GameServer/java/com/l2jserver/gameserver/GameServer.java

@@ -48,6 +48,7 @@ import com.l2jserver.gameserver.datatables.EventDroplist;
 import com.l2jserver.gameserver.datatables.ExtractableItemsData;
 import com.l2jserver.gameserver.datatables.ExtractableSkillsData;
 import com.l2jserver.gameserver.datatables.FishTable;
+import com.l2jserver.gameserver.datatables.GMSkillTable;
 import com.l2jserver.gameserver.datatables.HelperBuffTable;
 import com.l2jserver.gameserver.datatables.HennaTable;
 import com.l2jserver.gameserver.datatables.HennaTreeTable;
@@ -235,6 +236,7 @@ public class GameServer
 		SkillSpellbookTable.getInstance();
 		CharTemplateTable.getInstance();
 		NobleSkillTable.getInstance();
+		GMSkillTable.getInstance();
 		HeroSkillTable.getInstance();
 		ResidentialSkillTable.getInstance();
 		

+ 73 - 0
L2_GameServer/java/com/l2jserver/gameserver/datatables/GMSkillTable.java

@@ -0,0 +1,73 @@
+/*
+ * 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 com.l2jserver.gameserver.datatables;
+
+import com.l2jserver.gameserver.model.L2Skill;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+
+/**
+ *
+ * @author Gnacik
+ */
+public class GMSkillTable
+{
+	private static final L2Skill[] _gmSkills = new L2Skill[24];
+	private static final int[] _gmSkillsId = { 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064 };
+	
+	private GMSkillTable()
+	{
+		for (int i = 0; i < _gmSkillsId.length; i++)
+		{
+			_gmSkills[i] = SkillTable.getInstance().getInfo(_gmSkillsId[i], 1);
+		}
+	}
+	
+	public static GMSkillTable getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+	
+	public static L2Skill[] getGMSkills()
+	{
+		return _gmSkills;
+	}
+	
+	public static boolean isGMSkill(int skillid)
+	{
+		for (int id : _gmSkillsId)
+		{
+			if (id == skillid)
+			{
+				return true;
+			}
+		}
+		
+		return false;
+	}
+	
+	public void addSkills(L2PcInstance gmchar)
+	{
+		for (L2Skill s : getGMSkills())
+		{
+			gmchar.addSkill(s, false); // Don't Save GM skills to database
+		}
+	}
+	
+	@SuppressWarnings("synthetic-access")
+	private static class SingletonHolder
+	{
+		protected static final GMSkillTable _instance = new GMSkillTable();
+	}
+}

+ 12 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2ClassMasterInstance.java

@@ -23,6 +23,7 @@ import com.l2jserver.gameserver.model.base.ClassId;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.network.serverpackets.TutorialCloseHtml;
 import com.l2jserver.gameserver.network.serverpackets.TutorialShowHtml;
 import com.l2jserver.gameserver.network.serverpackets.TutorialShowQuestionMark;
@@ -279,6 +280,17 @@ public final class L2ClassMasterInstance extends L2NpcInstance
 			return false;
 		
 		int newJobLevel = currentClassId.level() + 1;
+
+		// Weight/Inventory check
+		if(!Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).isEmpty())
+		{
+			if (player.getWeightPenalty() >= 3 || (player.getInventoryLimit() * 0.8 <= player.getInventory().getSize()))
+			{
+				player.sendPacket(new SystemMessage(SystemMessageId.INVENTORY_LESS_THAN_80_PERCENT));
+				return false;
+			}
+		}
+
 		// check if player have all required items for class transfer
 		for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keys())
 		{

+ 4 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java

@@ -27,6 +27,7 @@ import com.l2jserver.gameserver.TaskPriority;
 import com.l2jserver.gameserver.cache.HtmCache;
 import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;
 import com.l2jserver.gameserver.datatables.AdminCommandAccessRights;
+import com.l2jserver.gameserver.datatables.GMSkillTable;
 import com.l2jserver.gameserver.datatables.MapRegionTable;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.instancemanager.CastleManager;
@@ -179,6 +180,9 @@ public class EnterWorld extends L2GameClientPacket
 				GmListTable.getInstance().addGm(activeChar, false);
 			else
 				GmListTable.getInstance().addGm(activeChar, true);
+
+			if (Config.GM_GIVE_SPECIAL_SKILLS)
+				GMSkillTable.getInstance().addSkills(activeChar);
 		}
 
 		// Set dead status if applies

+ 5 - 0
L2_GameServer/java/config/General.properties

@@ -79,6 +79,11 @@ GMRestartFighting = True
 # example: "Announce: hi [HanWik]"
 GMShowAnnouncerName = False
 
+# Give special skills for every GM
+# 7041-7064 (Master's Blessing)
+# Default: False
+GMGiveSpecialSkills = False
+
 # ---------------------------------------------------------------------------
 # Server Security
 # ---------------------------------------------------------------------------