Browse Source

If registered players die in Castle siege zone then they get Battlefield Death Syndrome.
Lineage2.com:
"The castle siege, which used to proceed on Saturday/Sunday, has been changed to Sunday between 16:00 ~18:00 and 20:00 ~ 22:00 due to the addition of the Territory War"

Gigiikun 16 năm trước cách đây
mục cha
commit
feaf31c30d

+ 4 - 4
L2_GameServer/java/config/Feature.properties

@@ -9,12 +9,12 @@
 # ---------------------------------------------------------------------------
 # Siege Time rules
 # Which values can change Castle Lords
-# Default: day,hour,minute
-CLSetSiegeTimeList = day,hour,minute
+# Default: hour,minute
+CLSetSiegeTimeList = hour,minute
 
 # Which hours can change Castle Lords
-# Default: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
-SiegeHourList = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
+# Default: 16,17,18,19,20,21,22
+SiegeHourList = 16,17,18,19,20,21,22
 
 # Teleport Function price
 # Price = 7 days

+ 2 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2CastleChamberlainInstance.java

@@ -1318,6 +1318,8 @@ public class L2CastleChamberlainInstance extends L2MerchantInstance
 				{
 					if (Config.CL_SET_SIEGE_TIME_LIST.contains("day"))
 						getCastle().getSiegeDate().set(Calendar.DAY_OF_WEEK, _preDay);
+					else
+						getCastle().getSiegeDate().set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
 					if (Config.CL_SET_SIEGE_TIME_LIST.contains("hour"))
 						getCastle().getSiegeDate().set(Calendar.HOUR_OF_DAY, _preHour);
 					if (Config.CL_SET_SIEGE_TIME_LIST.contains("minute"))

+ 5 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/entity/Siege.java

@@ -25,6 +25,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javolution.util.FastList;
+import net.sf.l2j.Config;
 import net.sf.l2j.L2DatabaseFactory;
 import net.sf.l2j.gameserver.Announcements;
 import net.sf.l2j.gameserver.SevenSigns;
@@ -1267,6 +1268,10 @@ public class Siege
 		{
 			if (getCastle().getSiegeDate().get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && getCastle().getSiegeDate().get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY)
 				getCastle().getSiegeDate().set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
+			// from CT2.3 Castle sieges are on Sunday, but if server admins allow to set day of the siege
+			// than sieges can occur on Saturdays as well
+			if (getCastle().getSiegeDate().get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY && !Config.CL_SET_SIEGE_TIME_LIST.contains("day"))
+				getCastle().getSiegeDate().set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
 			// set the next siege day to the next weekend
 			getCastle().getSiegeDate().add(Calendar.DAY_OF_MONTH, 7);
 		}

+ 29 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2CastleZone.java

@@ -17,7 +17,10 @@ package net.sf.l2j.gameserver.model.zone.type;
 import javolution.util.FastList;
 import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.datatables.MapRegionTable;
+import net.sf.l2j.gameserver.datatables.SkillTable;
 import net.sf.l2j.gameserver.instancemanager.CastleManager;
+import net.sf.l2j.gameserver.model.L2Effect;
+import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.model.actor.L2Character;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2SiegeSummonInstance;
@@ -121,6 +124,32 @@ public class L2CastleZone extends L2ZoneType
 	@Override
 	public void onDieInside(L2Character character)
 	{
+		if (getCastle() != null && getCastle().getSiege().getIsInProgress())
+		{
+			// debuff participants only if they die inside siege zone
+			if (character instanceof L2PcInstance && ((L2PcInstance) character).getClan() != null)
+			{
+				int lvl = 1;
+				for (L2Effect effect: character.getAllEffects())
+				{
+					if (effect != null && effect.getSkill().getId() == 5660)
+					{
+						lvl = lvl+effect.getLevel();
+						if (lvl > 5)
+							lvl = 5;
+						break;
+					}
+				}
+				L2Skill skill;
+				if (getCastle().getSiege().getAttackerClans().contains(((L2PcInstance) character).getClan())
+						|| getCastle().getSiege().getDefenderClans().contains(((L2PcInstance) character).getClan()))
+				{
+					skill = SkillTable.getInstance().getInfo(5660, lvl);
+					if (skill != null)
+						skill.getEffects(character, character);
+				}
+			}
+		}
 	}
 	
 	@Override