Removed most stream filter uses.
This commit is contained in:
		| @@ -802,7 +802,15 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			final ClassChangeData data = _classChangeData.stream().filter(ccd -> ccd.isInCategory(player)).findFirst().get(); | ||||
| 			ClassChangeData data = null; | ||||
| 			for (ClassChangeData ccd : _classChangeData) | ||||
| 			{ | ||||
| 				if (ccd.isInCategory(player)) | ||||
| 				{ | ||||
| 					data = ccd; | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			if (data != null) | ||||
| 			{ | ||||
| 				// Required items. | ||||
| @@ -1100,11 +1108,35 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader | ||||
| 	 | ||||
| 	private boolean checkIfClassChangeHasOptions(PlayerInstance player) | ||||
| 	{ | ||||
| 		boolean showOptions = _classChangeData.stream().filter(ccd -> !ccd.getItemsRequired().isEmpty()).anyMatch(ccd -> ccd.isInCategory(player)); // Check if there are requirements | ||||
| 		boolean showOptions = false; | ||||
| 		 | ||||
| 		// Check if there are requirements | ||||
| 		for (ClassChangeData ccd : _classChangeData) | ||||
| 		{ | ||||
| 			if (!ccd.getItemsRequired().isEmpty() && ccd.isInCategory(player)) | ||||
| 			{ | ||||
| 				showOptions = true; | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (!showOptions) | ||||
| 		{ | ||||
| 			showOptions = _classChangeData.stream().filter(ccd -> !ccd.getItemsRewarded().isEmpty()).filter(ccd -> ccd.isInCategory(player)).count() > 1; // Check if there is more than 1 reward to chose. | ||||
| 			// Check if there is more than 1 reward to chose. | ||||
| 			int count = 0; | ||||
| 			for (ClassChangeData ccd : _classChangeData) | ||||
| 			{ | ||||
| 				if (!ccd.getItemsRewarded().isEmpty() && ccd.isInCategory(player)) | ||||
| 				{ | ||||
| 					count++; | ||||
| 				} | ||||
| 			} | ||||
| 			if (count > 1) | ||||
| 			{ | ||||
| 				showOptions = true; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return showOptions; | ||||
| 	} | ||||
| 	 | ||||
|   | ||||
| @@ -216,12 +216,15 @@ public class SellBuff implements IVoicedCommandHandler, IBypassHandler | ||||
| 						return false; | ||||
| 					} | ||||
| 					 | ||||
| 					final SellBuffHolder holder = player.getSellingBuffs().stream().filter(h -> (h.getSkillId() == skillToChange.getId())).findFirst().orElse(null); | ||||
| 					if ((holder != null)) | ||||
| 					for (SellBuffHolder holder : player.getSellingBuffs()) | ||||
| 					{ | ||||
| 						player.sendMessage("Price of " + player.getKnownSkill(holder.getSkillId()).getName() + " has been changed to " + price + "!"); | ||||
| 						holder.setPrice(price); | ||||
| 						SellBuffsManager.getInstance().sendBuffEditMenu(player); | ||||
| 						if (holder.getSkillId() == skillToChange.getId()) | ||||
| 						{ | ||||
| 							player.sendMessage("Price of " + player.getKnownSkill(holder.getSkillId()).getName() + " has been changed to " + price + "!"); | ||||
| 							holder.setPrice(price); | ||||
| 							SellBuffsManager.getInstance().sendBuffEditMenu(player); | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| @@ -250,11 +253,14 @@ public class SellBuff implements IVoicedCommandHandler, IBypassHandler | ||||
| 						return false; | ||||
| 					} | ||||
| 					 | ||||
| 					final SellBuffHolder holder = player.getSellingBuffs().stream().filter(h -> (h.getSkillId() == skillToRemove.getId())).findFirst().orElse(null); | ||||
| 					if ((holder != null) && player.getSellingBuffs().remove(holder)) | ||||
| 					for (SellBuffHolder holder : player.getSellingBuffs()) | ||||
| 					{ | ||||
| 						player.sendMessage("Skill " + player.getKnownSkill(holder.getSkillId()).getName() + " has been removed!"); | ||||
| 						SellBuffsManager.getInstance().sendBuffEditMenu(player); | ||||
| 						if ((holder.getSkillId() == skillToRemove.getId()) && player.getSellingBuffs().remove(holder)) | ||||
| 						{ | ||||
| 							player.sendMessage("Skill " + player.getKnownSkill(holder.getSkillId()).getName() + " has been removed!"); | ||||
| 							SellBuffsManager.getInstance().sendBuffEditMenu(player); | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| @@ -399,29 +405,33 @@ public class SellBuff implements IVoicedCommandHandler, IBypassHandler | ||||
| 						return false; | ||||
| 					} | ||||
| 					 | ||||
| 					final SellBuffHolder holder = seller.getSellingBuffs().stream().filter(h -> (h.getSkillId() == skillToBuy.getId())).findFirst().orElse(null); | ||||
| 					if (holder != null) | ||||
| 					for (SellBuffHolder holder : player.getSellingBuffs()) | ||||
| 					{ | ||||
| 						if (AbstractScript.getQuestItemsCount(player, Config.SELLBUFF_PAYMENT_ID) >= holder.getPrice()) | ||||
| 						if (holder.getSkillId() == skillToBuy.getId()) | ||||
| 						{ | ||||
| 							AbstractScript.takeItems(player, Config.SELLBUFF_PAYMENT_ID, holder.getPrice()); | ||||
| 							AbstractScript.giveItems(seller, Config.SELLBUFF_PAYMENT_ID, holder.getPrice()); | ||||
| 							seller.reduceCurrentMp(skillToBuy.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER); | ||||
| 							skillToBuy.activateSkill(seller, player); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							final Item item = ItemTable.getInstance().getTemplate(Config.SELLBUFF_PAYMENT_ID); | ||||
| 							if (item != null) | ||||
| 							if (AbstractScript.getQuestItemsCount(player, Config.SELLBUFF_PAYMENT_ID) >= holder.getPrice()) | ||||
| 							{ | ||||
| 								player.sendMessage("Not enough " + item.getName() + "!"); | ||||
| 								AbstractScript.takeItems(player, Config.SELLBUFF_PAYMENT_ID, holder.getPrice()); | ||||
| 								AbstractScript.giveItems(seller, Config.SELLBUFF_PAYMENT_ID, holder.getPrice()); | ||||
| 								seller.reduceCurrentMp(skillToBuy.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER); | ||||
| 								skillToBuy.activateSkill(seller, player); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								player.sendMessage("Not enough items!"); | ||||
| 								final Item item = ItemTable.getInstance().getTemplate(Config.SELLBUFF_PAYMENT_ID); | ||||
| 								if (item != null) | ||||
| 								{ | ||||
| 									player.sendMessage("Not enough " + item.getName() + "!"); | ||||
| 								} | ||||
| 								else | ||||
| 								{ | ||||
| 									player.sendMessage("Not enough items!"); | ||||
| 								} | ||||
| 							} | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 					 | ||||
| 					SellBuffsManager.getInstance().sendBuffMenu(player, seller, index); | ||||
| 				} | ||||
| 				break; | ||||
|   | ||||
| @@ -297,7 +297,13 @@ public class AdminAdmin implements IAdminCommandHandler | ||||
| 					} | ||||
| 					 | ||||
| 					final CreatureSay cs = new CreatureSay(activeChar, ChatType.WORLD, activeChar.getName(), sb.toString()); | ||||
| 					World.getInstance().getPlayers().stream().filter(activeChar::isNotBlocked).forEach(cs::sendTo); | ||||
| 					for (PlayerInstance player : World.getInstance().getPlayers()) | ||||
| 					{ | ||||
| 						if (player.isNotBlocked(activeChar)) | ||||
| 						{ | ||||
| 							cs.sendTo(player); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case "see": | ||||
|   | ||||
| @@ -98,16 +98,34 @@ public class ChatWorld implements IChatHandler | ||||
| 			{ | ||||
| 				if (activeChar.isGood()) | ||||
| 				{ | ||||
| 					World.getInstance().getAllGoodPlayers().stream().filter(activeChar::isNotBlocked).forEach(cs::sendTo); | ||||
| 					for (PlayerInstance player : World.getInstance().getAllGoodPlayers()) | ||||
| 					{ | ||||
| 						if (player.isNotBlocked(activeChar)) | ||||
| 						{ | ||||
| 							cs.sendTo(player); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				if (activeChar.isEvil()) | ||||
| 				{ | ||||
| 					World.getInstance().getAllEvilPlayers().stream().filter(activeChar::isNotBlocked).forEach(cs::sendTo); | ||||
| 					for (PlayerInstance player : World.getInstance().getAllEvilPlayers()) | ||||
| 					{ | ||||
| 						if (player.isNotBlocked(activeChar)) | ||||
| 						{ | ||||
| 							cs.sendTo(player); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				World.getInstance().getPlayers().stream().filter(activeChar::isNotBlocked).forEach(cs::sendTo); | ||||
| 				for (PlayerInstance player : World.getInstance().getPlayers()) | ||||
| 				{ | ||||
| 					if (player.isNotBlocked(activeChar)) | ||||
| 					{ | ||||
| 						cs.sendTo(player); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			activeChar.setWorldChatUsed(activeChar.getWorldChatUsed() + 1); | ||||
|   | ||||
| @@ -218,16 +218,19 @@ public class HomeBoard implements IParseBoardHandler | ||||
| 					{ | ||||
| 						continue; | ||||
| 					} | ||||
| 					targets.stream().filter(target -> !target.isSummon() || !skill.isSharedWithSummon()).forEach(target -> | ||||
| 					for (Creature target : targets) | ||||
| 					{ | ||||
| 						skill.applyEffects(player, target); | ||||
| 						if (Config.COMMUNITYBOARD_CAST_ANIMATIONS) | ||||
| 						if (skill.isSharedWithSummon() || target.isPlayer()) | ||||
| 						{ | ||||
| 							player.sendPacket(new MagicSkillUse(player, target, skill.getId(), skill.getLevel(), skill.getHitTime(), skill.getReuseDelay())); | ||||
| 							// not recommend broadcast | ||||
| 							// player.broadcastPacket(new MagicSkillUse(player, target, skill.getId(), skill.getLevel(), skill.getHitTime(), skill.getReuseDelay())); | ||||
| 							skill.applyEffects(player, target); | ||||
| 							if (Config.COMMUNITYBOARD_CAST_ANIMATIONS) | ||||
| 							{ | ||||
| 								player.sendPacket(new MagicSkillUse(player, target, skill.getId(), skill.getLevel(), skill.getHitTime(), skill.getReuseDelay())); | ||||
| 								// not recommend broadcast | ||||
| 								// player.broadcastPacket(new MagicSkillUse(player, target, skill.getId(), skill.getLevel(), skill.getHitTime(), skill.getReuseDelay())); | ||||
| 							} | ||||
| 						} | ||||
| 					}); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
|   | ||||
| @@ -88,7 +88,13 @@ public class BossDailyMissionHandler extends AbstractDailyMissionHandler | ||||
| 			{ | ||||
| 				final CommandChannel channel = party.getCommandChannel(); | ||||
| 				final List<PlayerInstance> members = channel != null ? channel.getMembers() : party.getMembers(); | ||||
| 				members.stream().filter(member -> member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE).forEach(this::processPlayerProgress); | ||||
| 				for (PlayerInstance member : members) | ||||
| 				{ | ||||
| 					if (member.calculateDistance3D(monster) <= Config.ALT_PARTY_RANGE) | ||||
| 					{ | ||||
| 						processPlayerProgress(member); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
|   | ||||
| @@ -18,15 +18,14 @@ package handlers.effecthandlers; | ||||
|  | ||||
| import java.util.Collections; | ||||
| import java.util.HashSet; | ||||
| import java.util.Objects; | ||||
| import java.util.Set; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.StatSet; | ||||
| import org.l2jmobius.gameserver.model.WorldObject; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.effects.AbstractEffect; | ||||
| import org.l2jmobius.gameserver.model.items.instance.ItemInstance; | ||||
| import org.l2jmobius.gameserver.model.skills.AbnormalType; | ||||
| import org.l2jmobius.gameserver.model.skills.BuffInfo; | ||||
| import org.l2jmobius.gameserver.model.skills.Skill; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.AbnormalStatusUpdate; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.ExAbnormalStatusUpdateFromTarget; | ||||
| @@ -94,19 +93,25 @@ public class AbnormalTimeChange extends AbstractEffect | ||||
| 			{ | ||||
| 				if (_abnormals.isEmpty()) | ||||
| 				{ | ||||
| 					effected.getEffectList().getEffects().stream().filter(b -> b.getSkill().canBeDispelled()).forEach(b -> | ||||
| 					for (BuffInfo info : effected.getEffectList().getEffects()) | ||||
| 					{ | ||||
| 						b.resetAbnormalTime(b.getTime() + _time); | ||||
| 						asu.addSkill(b); | ||||
| 					}); | ||||
| 						if (info.getSkill().canBeDispelled()) | ||||
| 						{ | ||||
| 							info.resetAbnormalTime(info.getTime() + _time); | ||||
| 							asu.addSkill(info); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					effected.getEffectList().getEffects().stream().filter(b -> b.getSkill().canBeDispelled() && _abnormals.contains(b.getSkill().getAbnormalType())).forEach(b -> | ||||
| 					for (BuffInfo info : effected.getEffectList().getEffects()) | ||||
| 					{ | ||||
| 						b.resetAbnormalTime(b.getTime() + _time); | ||||
| 						asu.addSkill(b); | ||||
| 					}); | ||||
| 						if (info.getSkill().canBeDispelled() && _abnormals.contains(info.getSkill().getAbnormalType())) | ||||
| 						{ | ||||
| 							info.resetAbnormalTime(info.getTime() + _time); | ||||
| 							asu.addSkill(info); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| @@ -114,19 +119,25 @@ public class AbnormalTimeChange extends AbstractEffect | ||||
| 			{ | ||||
| 				if (_abnormals.isEmpty()) | ||||
| 				{ | ||||
| 					effected.getEffectList().getDebuffs().stream().filter(b -> b.getSkill().canBeDispelled()).forEach(b -> | ||||
| 					for (BuffInfo info : effected.getEffectList().getDebuffs()) | ||||
| 					{ | ||||
| 						b.resetAbnormalTime(b.getAbnormalTime()); | ||||
| 						asu.addSkill(b); | ||||
| 					}); | ||||
| 						if (info.getSkill().canBeDispelled()) | ||||
| 						{ | ||||
| 							info.resetAbnormalTime(info.getAbnormalTime()); | ||||
| 							asu.addSkill(info); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					effected.getEffectList().getDebuffs().stream().filter(b -> b.getSkill().canBeDispelled() && _abnormals.contains(b.getSkill().getAbnormalType())).forEach(b -> | ||||
| 					for (BuffInfo info : effected.getEffectList().getDebuffs()) | ||||
| 					{ | ||||
| 						b.resetAbnormalTime(b.getAbnormalTime()); | ||||
| 						asu.addSkill(b); | ||||
| 					}); | ||||
| 						if (info.getSkill().canBeDispelled() && _abnormals.contains(info.getSkill().getAbnormalType())) | ||||
| 						{ | ||||
| 							info.resetAbnormalTime(info.getAbnormalTime()); | ||||
| 							asu.addSkill(info); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| @@ -135,14 +146,13 @@ public class AbnormalTimeChange extends AbstractEffect | ||||
| 		effected.sendPacket(asu); | ||||
| 		 | ||||
| 		final ExAbnormalStatusUpdateFromTarget upd = new ExAbnormalStatusUpdateFromTarget(effected); | ||||
| 		 | ||||
| 		// @formatter:off | ||||
| 		effected.getStatus().getStatusListener().stream() | ||||
| 			.filter(Objects::nonNull) | ||||
| 			.filter(WorldObject::isPlayer) | ||||
| 			.map(Creature::getActingPlayer) | ||||
| 			.forEach(upd::sendTo); | ||||
| 		// @formatter:on | ||||
| 		for (Creature creature : effected.getStatus().getStatusListener()) | ||||
| 		{ | ||||
| 			if ((creature != null) && creature.isPlayer()) | ||||
| 			{ | ||||
| 				upd.sendTo(creature.getActingPlayer()); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (effected.isPlayer() && (effected.getTarget() == effected)) | ||||
| 		{ | ||||
|   | ||||
| @@ -52,7 +52,13 @@ public class CallTargetParty extends AbstractEffect | ||||
| 		final Party party = player.getParty(); | ||||
| 		if (party != null) | ||||
| 		{ | ||||
| 			party.getMembers().stream().filter(p -> (p != player) && CallPc.checkSummonTargetStatus(p, effector)).forEach(p -> p.teleToLocation(player.getLocation(), true)); | ||||
| 			for (PlayerInstance member : party.getMembers()) | ||||
| 			{ | ||||
| 				if ((member != player) && CallPc.checkSummonTargetStatus(member, effector)) | ||||
| 				{ | ||||
| 					member.teleToLocation(player.getLocation(), true); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -173,7 +173,13 @@ public class SummonNpc extends AbstractEffect | ||||
| 				// If only single instance is allowed, delete previous NPCs. | ||||
| 				if (_singleInstance) | ||||
| 				{ | ||||
| 					player.getSummonedNpcs().stream().filter(npc -> npc.getId() == _npcId).forEach(Npc::deleteMe); | ||||
| 					for (Npc npc : player.getSummonedNpcs()) | ||||
| 					{ | ||||
| 						if (npc.getId() == _npcId) | ||||
| 						{ | ||||
| 							npc.deleteMe(); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				final Npc npc = spawn.doSpawn(_isSummonSpawn); | ||||
|   | ||||
| @@ -93,13 +93,19 @@ public class Synergy extends AbstractEffect | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		final int abnormalCount = (int) _optionalSlots.stream().filter(effector::hasAbnormalType).count(); | ||||
| 		int abnormalCount = 0; | ||||
| 		for (AbnormalType abnormalType : _optionalSlots) | ||||
| 		{ | ||||
| 			if (effector.hasAbnormalType(abnormalType)) | ||||
| 			{ | ||||
| 				abnormalCount++; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (abnormalCount >= _minSlot) | ||||
| 		{ | ||||
| 			final SkillHolder partyBuff = new SkillHolder(_partyBuffSkillId, Math.min(abnormalCount - 1, _skillLevelScaleTo)); | ||||
| 			final Skill partyBuffSkill = partyBuff.getSkill(); | ||||
| 			 | ||||
| 			if (partyBuffSkill != null) | ||||
| 			{ | ||||
| 				final WorldObject target = partyBuffSkill.getTarget(effector, effected, false, false, false); | ||||
|   | ||||
| @@ -20,6 +20,8 @@ import org.l2jmobius.gameserver.ai.CtrlIntention; | ||||
| import org.l2jmobius.gameserver.model.Party; | ||||
| import org.l2jmobius.gameserver.model.StatSet; | ||||
| import org.l2jmobius.gameserver.model.actor.Creature; | ||||
| import org.l2jmobius.gameserver.model.actor.Npc; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.model.effects.AbstractEffect; | ||||
| import org.l2jmobius.gameserver.model.effects.EffectType; | ||||
| import org.l2jmobius.gameserver.model.interfaces.ILocational; | ||||
| @@ -59,13 +61,24 @@ public class TeleportToNpc extends AbstractEffect | ||||
| 	@Override | ||||
| 	public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item) | ||||
| 	{ | ||||
| 		final ILocational teleLocation = effector.getSummonedNpcs().stream().filter(npc -> npc.getId() == _npcId).findAny().orElse(null); | ||||
| 		ILocational teleLocation = null; | ||||
| 		for (Npc npc : effector.getSummonedNpcs()) | ||||
| 		{ | ||||
| 			if (npc.getId() == _npcId) | ||||
| 			{ | ||||
| 				teleLocation = npc; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (teleLocation != null) | ||||
| 		{ | ||||
| 			final Party party = effected.getParty(); | ||||
| 			if (_party && (party != null)) | ||||
| 			{ | ||||
| 				party.getMembers().forEach(p -> teleport(p, teleLocation)); | ||||
| 				for (PlayerInstance member : party.getMembers()) | ||||
| 				{ | ||||
| 					teleport(member, teleLocation); | ||||
| 				} | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
|   | ||||
| @@ -16,8 +16,8 @@ | ||||
|  */ | ||||
| package handlers.itemhandlers; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import org.l2jmobius.gameserver.enums.ItemSkillType; | ||||
| import org.l2jmobius.gameserver.enums.ShotType; | ||||
| @@ -60,7 +60,15 @@ public class BeastSoulShot implements IItemHandler | ||||
| 			return false; | ||||
| 		} | ||||
| 		 | ||||
| 		final List<Summon> aliveServitor = playable.getServitors().values().stream().filter(s -> !s.isDead()).collect(Collectors.toList()); | ||||
| 		final List<Summon> aliveServitor = new ArrayList<>(); | ||||
| 		for (Summon s : playable.getServitors().values()) | ||||
| 		{ | ||||
| 			if (!s.isDead()) | ||||
| 			{ | ||||
| 				aliveServitor.add(s); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if ((pet == null) && aliveServitor.isEmpty()) | ||||
| 		{ | ||||
| 			activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET_OR_SERVITOR_SAD_ISN_T_IT); | ||||
|   | ||||
| @@ -16,8 +16,8 @@ | ||||
|  */ | ||||
| package handlers.itemhandlers; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import org.l2jmobius.gameserver.enums.ItemSkillType; | ||||
| import org.l2jmobius.gameserver.enums.ShotType; | ||||
| @@ -60,7 +60,15 @@ public class BeastSpiritShot implements IItemHandler | ||||
| 			return false; | ||||
| 		} | ||||
| 		 | ||||
| 		final List<Summon> aliveServitor = playable.getServitors().values().stream().filter(s -> !s.isDead()).collect(Collectors.toList()); | ||||
| 		final List<Summon> aliveServitor = new ArrayList<>(); | ||||
| 		for (Summon s : playable.getServitors().values()) | ||||
| 		{ | ||||
| 			if (!s.isDead()) | ||||
| 			{ | ||||
| 				aliveServitor.add(s); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if ((pet == null) && aliveServitor.isEmpty()) | ||||
| 		{ | ||||
| 			activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET_OR_SERVITOR_SAD_ISN_T_IT); | ||||
|   | ||||
| @@ -18,6 +18,7 @@ package handlers.playeractions; | ||||
|  | ||||
| import org.l2jmobius.gameserver.handler.IPlayerActionHandler; | ||||
| import org.l2jmobius.gameserver.model.ActionDataHolder; | ||||
| import org.l2jmobius.gameserver.model.actor.Summon; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
|  | ||||
| @@ -32,7 +33,13 @@ public class ServitorAttack implements IPlayerActionHandler | ||||
| 	{ | ||||
| 		if (player.hasServitors()) | ||||
| 		{ | ||||
| 			player.getServitors().values().stream().filter(s -> s.canAttack(player.getTarget(), ctrlPressed)).forEach(s -> s.doAttack(player.getTarget())); | ||||
| 			for (Summon summon : player.getServitors().values()) | ||||
| 			{ | ||||
| 				if (summon.canAttack(player.getTarget(), ctrlPressed)) | ||||
| 				{ | ||||
| 					summon.doAttack(player.getTarget()); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
|   | ||||
| @@ -19,6 +19,7 @@ package handlers.playeractions; | ||||
| import org.l2jmobius.gameserver.ai.CtrlIntention; | ||||
| import org.l2jmobius.gameserver.handler.IPlayerActionHandler; | ||||
| import org.l2jmobius.gameserver.model.ActionDataHolder; | ||||
| import org.l2jmobius.gameserver.model.actor.Summon; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; | ||||
| import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
|  | ||||
| @@ -39,17 +40,20 @@ public class ServitorMove implements IPlayerActionHandler | ||||
| 		 | ||||
| 		if (player.getTarget() != null) | ||||
| 		{ | ||||
| 			player.getServitors().values().stream().filter(s -> (s != player.getTarget()) && !s.isMovementDisabled()).forEach(s -> | ||||
| 			for (Summon summon : player.getServitors().values()) | ||||
| 			{ | ||||
| 				if (s.isBetrayed()) | ||||
| 				if ((summon != player.getTarget()) && !summon.isMovementDisabled()) | ||||
| 				{ | ||||
| 					player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS); | ||||
| 					return; | ||||
| 					if (summon.isBetrayed()) | ||||
| 					{ | ||||
| 						player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS); | ||||
| 						return; | ||||
| 					} | ||||
| 					 | ||||
| 					summon.setFollowStatus(false); | ||||
| 					summon.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, player.getTarget().getLocation()); | ||||
| 				} | ||||
| 				 | ||||
| 				s.setFollowStatus(false); | ||||
| 				s.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, player.getTarget().getLocation()); | ||||
| 			}); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment