Ver Fonte

BETA: Core part for ​[DP9946].
* Reviewed by: Zoey76

Adry_85 há 11 anos atrás
pai
commit
a574ff1cba

+ 70 - 70
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -1408,76 +1408,6 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 				}
 				break;
 			}
-			case RESURRECT:
-			{
-				if (!isParty(sk))
-				{
-					if (caster.isMinion() && (sk.getTargetType() != L2TargetType.SELF))
-					{
-						L2Character leader = caster.getLeader();
-						if ((leader != null) && leader.isDead())
-						{
-							if (!Util.checkIfInRange((sk.getCastRange() + caster.getTemplate().getCollisionRadius() + leader.getTemplate().getCollisionRadius()), caster, leader, false) && !isParty(sk) && !caster.isMovementDisabled())
-							{
-								moveToPawn(leader, sk.getCastRange() + caster.getTemplate().getCollisionRadius() + leader.getTemplate().getCollisionRadius());
-							}
-						}
-						if (GeoData.getInstance().canSeeTarget(caster, leader))
-						{
-							clientStopMoving(null);
-							caster.setTarget(leader);
-							caster.doCast(sk);
-							return true;
-						}
-					}
-					
-					for (L2Character obj : caster.getKnownList().getKnownCharactersInRadius(sk.getCastRange() + caster.getTemplate().getCollisionRadius()))
-					{
-						if (!(obj instanceof L2Attackable) || !obj.isDead())
-						{
-							continue;
-						}
-						
-						L2Attackable targets = ((L2Attackable) obj);
-						if ((caster.getFactionId() != null) && !caster.getFactionId().equals(targets.getFactionId()))
-						{
-							continue;
-						}
-						if (Rnd.get(100) < 10)
-						{
-							if (GeoData.getInstance().canSeeTarget(caster, targets))
-							{
-								clientStopMoving(null);
-								caster.setTarget(obj);
-								caster.doCast(sk);
-								return true;
-							}
-						}
-					}
-				}
-				else if (isParty(sk))
-				{
-					for (L2Character obj : caster.getKnownList().getKnownCharactersInRadius(sk.getAffectRange() + caster.getTemplate().getCollisionRadius()))
-					{
-						if (!(obj instanceof L2Attackable))
-						{
-							continue;
-						}
-						L2Npc targets = ((L2Npc) obj);
-						if ((caster.getFactionId() != null) && caster.getFactionId().equals(targets.getFactionId()))
-						{
-							if ((obj.getCurrentHp() < obj.getMaxHp()) && (Rnd.get(100) <= 20))
-							{
-								clientStopMoving(null);
-								caster.setTarget(caster);
-								caster.doCast(sk);
-								return true;
-							}
-						}
-					}
-				}
-				break;
-			}
 			case DEBUFF:
 			{
 				if (GeoData.getInstance().canSeeTarget(caster, attackTarget) && !canAOE(sk) && !attackTarget.isDead() && (dist2 <= srange))
@@ -1784,6 +1714,76 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					}
 				}
 				
+				if (sk.hasEffectType(L2EffectType.RESURRECTION))
+				{
+					if (!isParty(sk))
+					{
+						if (caster.isMinion() && (sk.getTargetType() != L2TargetType.SELF))
+						{
+							L2Character leader = caster.getLeader();
+							if ((leader != null) && leader.isDead())
+							{
+								if (!Util.checkIfInRange((sk.getCastRange() + caster.getTemplate().getCollisionRadius() + leader.getTemplate().getCollisionRadius()), caster, leader, false) && !isParty(sk) && !caster.isMovementDisabled())
+								{
+									moveToPawn(leader, sk.getCastRange() + caster.getTemplate().getCollisionRadius() + leader.getTemplate().getCollisionRadius());
+								}
+							}
+							if (GeoData.getInstance().canSeeTarget(caster, leader))
+							{
+								clientStopMoving(null);
+								caster.setTarget(leader);
+								caster.doCast(sk);
+								return true;
+							}
+						}
+						
+						for (L2Character obj : caster.getKnownList().getKnownCharactersInRadius(sk.getCastRange() + caster.getTemplate().getCollisionRadius()))
+						{
+							if (!(obj instanceof L2Attackable) || !obj.isDead())
+							{
+								continue;
+							}
+							
+							L2Attackable targets = ((L2Attackable) obj);
+							if ((caster.getFactionId() != null) && !caster.getFactionId().equals(targets.getFactionId()))
+							{
+								continue;
+							}
+							if (Rnd.get(100) < 10)
+							{
+								if (GeoData.getInstance().canSeeTarget(caster, targets))
+								{
+									clientStopMoving(null);
+									caster.setTarget(obj);
+									caster.doCast(sk);
+									return true;
+								}
+							}
+						}
+					}
+					else if (isParty(sk))
+					{
+						for (L2Character obj : caster.getKnownList().getKnownCharactersInRadius(sk.getAffectRange() + caster.getTemplate().getCollisionRadius()))
+						{
+							if (!(obj instanceof L2Attackable))
+							{
+								continue;
+							}
+							L2Npc targets = ((L2Npc) obj);
+							if ((caster.getFactionId() != null) && caster.getFactionId().equals(targets.getFactionId()))
+							{
+								if ((obj.getCurrentHp() < obj.getMaxHp()) && (Rnd.get(100) <= 20))
+								{
+									clientStopMoving(null);
+									caster.setTarget(caster);
+									caster.doCast(sk);
+									return true;
+								}
+							}
+						}
+					}
+				}
+				
 				if (!canAura(sk))
 				{
 					

+ 5 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/ai/L2CharacterAI.java

@@ -1290,10 +1290,6 @@ public class L2CharacterAI extends AbstractAI
 					case DEBUFF:
 						debuffSkills.add(sk);
 						break;
-					case RESURRECT:
-						resurrectSkills.add(sk);
-						hasHealOrResurrect = true;
-						break;
 					case NOTDONE:
 					case COREDONE:
 						continue; // won't be considered something for fighting
@@ -1342,6 +1338,11 @@ public class L2CharacterAI extends AbstractAI
 						{
 							muteSkills.add(sk);
 						}
+						else if (sk.hasEffectType(L2EffectType.RESURRECTION))
+						{
+							resurrectSkills.add(sk);
+							hasHealOrResurrect = true;
+						}
 						else
 						{
 							generalSkills.add(sk);

+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -1719,7 +1719,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		}
 		
 		// TODO: Unhardcode using event listeners!
-		if (skill.getSkillType() == L2SkillType.RESURRECT)
+		if (skill.hasEffectType(L2EffectType.RESURRECTION))
 		{
 			if (isResurrectionBlocked() || target.isResurrectionBlocked())
 			{
@@ -2326,18 +2326,18 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		{
 			if (((L2Summon) this).isPhoenixBlessed() && (((L2Summon) this).getOwner() != null))
 			{
-				((L2Summon) this).getOwner().reviveRequest(((L2Summon) this).getOwner(), null, true);
+				((L2Summon) this).getOwner().reviveRequest(((L2Summon) this).getOwner(), null, true, 0);
 			}
 		}
 		if (isPlayer())
 		{
 			if (((L2Playable) this).isPhoenixBlessed())
 			{
-				getActingPlayer().reviveRequest(getActingPlayer(), null, false);
+				getActingPlayer().reviveRequest(getActingPlayer(), null, false, 100);
 			}
 			else if (isAffected(EffectFlag.CHARM_OF_COURAGE) && getActingPlayer().isInSiege())
 			{
-				getActingPlayer().reviveRequest(getActingPlayer(), null, false);
+				getActingPlayer().reviveRequest(getActingPlayer(), null, false, 0);
 			}
 		}
 		try

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Summon.java

@@ -370,7 +370,7 @@ public abstract class L2Summon extends L2Playable
 		
 		if (isPhoenixBlessed() && (getOwner() != null))
 		{
-			getOwner().reviveRequest(getOwner(), null, true);
+			getOwner().reviveRequest(getOwner(), null, true, 100);
 		}
 		
 		DecayTaskManager.getInstance().addDecayTask(this);

+ 6 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -1679,9 +1679,7 @@ public final class L2PcInstance extends L2Playable
 		if (qs != null)
 		{
 			/*
-			 * Allow quest events if there was a quest talk event before.<br>
-			 * Since this method is only called for quest bypasses from html,<br>
-			 * getLastHtmlActionOriginId() should be equals getLastQuestNpcObject().
+			 * Allow quest events if there was a quest talk event before.<br> Since this method is only called for quest bypasses from html,<br> getLastHtmlActionOriginId() should be equals getLastQuestNpcObject().
 			 */
 			if ((getLastQuestNpcObject() > 0) && (getLastQuestNpcObject() == getLastHtmlActionOriginId()))
 			{
@@ -4404,7 +4402,7 @@ public final class L2PcInstance extends L2Playable
 		
 		// TODO: Should possibly be checked only in L2PcInstance's useMagic
 		// Can't use Hero and resurrect skills during Olympiad
-		if (isInOlympiadMode() && (skill.isHeroSkill() || (skill.getSkillType() == L2SkillType.RESURRECT)))
+		if (isInOlympiadMode() && (skill.isHeroSkill() || (skill.hasEffectType(L2EffectType.RESURRECTION))))
 		{
 			sendPacket(SystemMessageId.THIS_SKILL_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT);
 			return false;
@@ -5636,7 +5634,7 @@ public final class L2PcInstance extends L2Playable
 		
 		if (isPhoenixBlessed() || (isAffected(EffectFlag.CHARM_OF_COURAGE) && isInSiege()))
 		{
-			reviveRequest(this, null, false);
+			reviveRequest(this, null, false, 0);
 		}
 		return true;
 	}
@@ -10912,7 +10910,7 @@ public final class L2PcInstance extends L2Playable
 		doRevive();
 	}
 	
-	public void reviveRequest(L2PcInstance reviver, L2Skill skill, boolean Pet)
+	public void reviveRequest(L2PcInstance reviver, L2Skill skill, boolean Pet, int power)
 	{
 		if (isResurrectionBlocked())
 		{
@@ -10952,7 +10950,7 @@ public final class L2PcInstance extends L2Playable
 			}
 			else
 			{
-				_revivePower = Formulas.calculateSkillResurrectRestorePercent(skill.getPower(), reviver);
+				_revivePower = Formulas.calculateSkillResurrectRestorePercent(power, reviver);
 			}
 			
 			restoreExp = (int) Math.round(((getExpBeforeDeath() - getExp()) * _revivePower) / 100);
@@ -10966,7 +10964,7 @@ public final class L2PcInstance extends L2Playable
 				sendPacket(dlg);
 				return;
 			}
-			ConfirmDlg dlg = new ConfirmDlg(SystemMessageId.RESSURECTION_REQUEST_BY_C1_FOR_S2_XP.getId());
+			ConfirmDlg dlg = new ConfirmDlg(SystemMessageId.RESURRECTION_REQUEST_BY_C1_FOR_S2_XP.getId());
 			dlg.addPcName(reviver);
 			dlg.addString(Integer.toString(restoreExp));
 			sendPacket(dlg);

+ 4 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/templates/L2NpcTemplate.java

@@ -345,9 +345,6 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
 					case BUFF:
 						addBuffSkill(skill);
 						break;
-					case RESURRECT:
-						addResSkill(skill);
-						break;
 					case DEBUFF:
 						addDebuffSkill(skill);
 						addCOTSkill(skill);
@@ -392,6 +389,10 @@ public final class L2NpcTemplate extends L2CharTemplate implements IIdentifiable
 						{
 							addRangeSkill(skill);
 						}
+						else if (skill.hasEffectType(L2EffectType.RESURRECTION))
+						{
+							addResSkill(skill);
+						}
 						else
 						{
 							addUniversalSkill(skill);

+ 1 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/effects/L2EffectType.java

@@ -77,6 +77,7 @@ public enum L2EffectType
 	REBALANCE_HP,
 	REFUEL_AIRSHIP,
 	RELAXING,
+	RESURRECTION,
 	ROOT,
 	SIGNET_EFFECT,
 	SIGNET_GROUND,

+ 0 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2SkillType.java

@@ -67,7 +67,6 @@ public enum L2SkillType
 	CONT,
 	FUSION,
 	
-	RESURRECT,
 	DETECT_TRAP,
 	REMOVE_TRAP,
 	

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/SystemMessageId.java

@@ -8842,7 +8842,7 @@ public final class SystemMessageId
 	 * ID: 1510<br>
 	 * Message: $c1 is making an attempt at resurrection with $s2 experience points. Do you want to be resurrected?
 	 */
-	public static final SystemMessageId RESSURECTION_REQUEST_BY_C1_FOR_S2_XP;
+	public static final SystemMessageId RESURRECTION_REQUEST_BY_C1_FOR_S2_XP;
 	
 	/**
 	 * ID: 1511<br>
@@ -16493,7 +16493,7 @@ public final class SystemMessageId
 		THIS_ITEM_CANT_BE_EQUIPPED_FOR_THE_OLYMPIAD_EVENT = new SystemMessageId(1507);
 		THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT = new SystemMessageId(1508);
 		THIS_SKILL_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT = new SystemMessageId(1509);
-		RESSURECTION_REQUEST_BY_C1_FOR_S2_XP = new SystemMessageId(1510);
+		RESURRECTION_REQUEST_BY_C1_FOR_S2_XP = new SystemMessageId(1510);
 		MASTER_CANNOT_RES = new SystemMessageId(1511);
 		CANNOT_RES_PET = new SystemMessageId(1512);
 		RES_HAS_ALREADY_BEEN_PROPOSED = new SystemMessageId(1513);

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/DlgAnswer.java

@@ -89,7 +89,7 @@ public final class DlgAnswer extends L2GameClientPacket
 				}
 			}
 		}
-		else if ((_messageId == SystemMessageId.RESSURECTION_REQUEST_BY_C1_FOR_S2_XP.getId()) || (_messageId == SystemMessageId.RESURRECT_USING_CHARM_OF_COURAGE.getId()))
+		else if ((_messageId == SystemMessageId.RESURRECTION_REQUEST_BY_C1_FOR_S2_XP.getId()) || (_messageId == SystemMessageId.RESURRECT_USING_CHARM_OF_COURAGE.getId()))
 		{
 			activeChar.reviveAnswer(_answer);
 		}