Merged with released L2J-Unity files.
This commit is contained in:
211
trunk/dist/game/data/scripts/ai/group/ImprovedBabyPets.java
vendored
Normal file
211
trunk/dist/game/data/scripts/ai/group/ImprovedBabyPets.java
vendored
Normal file
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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 ai.group;
|
||||
|
||||
import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Summon;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.events.EventType;
|
||||
import com.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import com.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import com.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.skills.SkillCaster;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Improved Baby Pets AI.
|
||||
* @author St3eT
|
||||
*/
|
||||
public final class ImprovedBabyPets extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int[] BABY_PETS =
|
||||
{
|
||||
16034, // Improved Baby Buffalo
|
||||
16035, // Improved Baby Kookaburra
|
||||
16036, // Improved Baby Cougar
|
||||
};
|
||||
// Skills
|
||||
private static final int PET_CONTROL = 5771;
|
||||
|
||||
private ImprovedBabyPets()
|
||||
{
|
||||
addSummonSpawnId(BABY_PETS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (player != null)
|
||||
{
|
||||
final L2Summon summon = player.getPet();
|
||||
|
||||
if (summon == null)
|
||||
{
|
||||
cancelQuestTimer("HEAL", null, player);
|
||||
cancelQuestTimer("BUFF", null, player);
|
||||
}
|
||||
else if (event.equals("HEAL") && player.isInCombat() && !summon.isHungry())
|
||||
{
|
||||
final double hpPer = (player.getCurrentHp() / player.getMaxHp()) * 100;
|
||||
final double mpPer = (player.getCurrentMp() / player.getMaxMp()) * 100;
|
||||
final int healType = summon.getTemplate().getParameters().getInt("heal_type", 0);
|
||||
final int skillLv = (int) Math.floor((summon.getLevel() / 5) - 11);
|
||||
|
||||
if (healType == 1)
|
||||
{
|
||||
final int stepLv = CommonUtil.constrain(skillLv, 0, 3);
|
||||
|
||||
if ((hpPer >= 30) && (hpPer < 70))
|
||||
{
|
||||
castHeal(summon, stepLv, 1);
|
||||
}
|
||||
else if (hpPer < 30)
|
||||
{
|
||||
castHeal(summon, stepLv, 2);
|
||||
}
|
||||
}
|
||||
else if (healType == 0)
|
||||
{
|
||||
if (hpPer < 30)
|
||||
{
|
||||
castHeal(summon, CommonUtil.constrain(skillLv, 0, 3), 2);
|
||||
}
|
||||
else if (mpPer < 60)
|
||||
{
|
||||
castHeal(summon, CommonUtil.constrain(skillLv, 0, 5), 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (event.equals("BUFF") && !summon.isAffectedBySkill(PET_CONTROL) && !summon.isHungry())
|
||||
{
|
||||
final int buffStep = (int) CommonUtil.constrain(Math.floor((summon.getLevel() / 5) - 11), 0, 3);
|
||||
|
||||
for (int i = 1; i <= (2 * (1 + buffStep)); i++)
|
||||
{
|
||||
if (castBuff(summon, buffStep, i))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSummonSpawn(L2Summon summon)
|
||||
{
|
||||
startQuestTimer("HEAL", 5000, null, summon.getOwner(), true);
|
||||
startQuestTimer("BUFF", 10000, null, summon.getOwner(), true);
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGOUT)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL)
|
||||
public void OnPlayerLogout(OnPlayerLogout event)
|
||||
{
|
||||
cancelQuestTimer("HEAL", null, event.getActiveChar());
|
||||
cancelQuestTimer("BUFF", null, event.getActiveChar());
|
||||
}
|
||||
|
||||
private boolean castBuff(L2Summon summon, int stepNumber, int buffNumber)
|
||||
{
|
||||
final L2PcInstance owner = summon.getOwner();
|
||||
final StatsSet parameters = summon.getTemplate().getParameters();
|
||||
final SkillHolder skill = parameters.getObject("step" + stepNumber + "_buff0" + buffNumber, SkillHolder.class);
|
||||
|
||||
if ((skill != null) && (owner != null))
|
||||
{
|
||||
final boolean previousFollowStatus = summon.getFollowStatus();
|
||||
final SkillHolder mergedSkill = parameters.getObject("step" + stepNumber + "_merged_buff0" + buffNumber, SkillHolder.class);
|
||||
final int targetType = parameters.getInt("step" + stepNumber + "_buff_target0" + buffNumber, 0);
|
||||
|
||||
if (!owner.hasAbnormalType(skill.getSkill().getAbnormalType()) && SkillCaster.checkUseConditions(summon, skill.getSkill()) && !owner.isDead())
|
||||
{
|
||||
if (mergedSkill != null)
|
||||
{
|
||||
if (owner.hasAbnormalType(mergedSkill.getSkill().getAbnormalType()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!previousFollowStatus && !summon.isInsideRadius(owner, skill.getSkill().getCastRange(), true, true))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((targetType >= 0) && (targetType <= 2))
|
||||
{
|
||||
summon.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, skill.getSkill(), (targetType == 1) ? summon : owner);
|
||||
summon.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOUR_PET_USES_S1).addSkillName(skill.getSkill()));
|
||||
|
||||
if (previousFollowStatus != summon.getFollowStatus())
|
||||
{
|
||||
summon.setFollowStatus(previousFollowStatus);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void castHeal(L2Summon summon, int stepNumber, int healNumber)
|
||||
{
|
||||
final boolean previousFollowStatus = summon.getFollowStatus();
|
||||
final L2PcInstance owner = summon.getOwner();
|
||||
final StatsSet parameters = summon.getTemplate().getParameters();
|
||||
final SkillHolder skill = parameters.getObject("step" + stepNumber + "_heal0" + healNumber, SkillHolder.class);
|
||||
final int targetType = parameters.getInt("step" + stepNumber + "_heal_target0" + healNumber, 0);
|
||||
|
||||
if ((skill != null) && (owner != null) && SkillCaster.checkUseConditions(summon, skill.getSkill()) && !owner.isDead())
|
||||
{
|
||||
if (!previousFollowStatus && !summon.isInsideRadius(owner, skill.getSkill().getCastRange(), true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!owner.hasAbnormalType(skill.getSkill().getAbnormalType()))
|
||||
{
|
||||
if ((targetType >= 0) && (targetType <= 2))
|
||||
{
|
||||
summon.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, skill.getSkill(), (targetType == 1) ? summon : owner);
|
||||
summon.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOUR_PET_USES_S1).addSkillName(skill.getSkill()));
|
||||
|
||||
if (previousFollowStatus != summon.getFollowStatus())
|
||||
{
|
||||
summon.setFollowStatus(previousFollowStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ImprovedBabyPets();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user