diff --git a/trunk/dist/game/data/scripts.cfg b/trunk/dist/game/data/scripts.cfg index 97bf25af1e..666751979e 100644 --- a/trunk/dist/game/data/scripts.cfg +++ b/trunk/dist/game/data/scripts.cfg @@ -173,6 +173,7 @@ ai/individual/Handermonkey.java ai/individual/Heymond.java ai/individual/Holly.java ai/individual/Karonf.java +ai/individual/LeopardDragonHachling.java ai/individual/Luderic.java ai/individual/Lumi.java ai/individual/Mahram.java diff --git a/trunk/dist/game/data/scripts/ai/individual/LeopardDragonHachling.java b/trunk/dist/game/data/scripts/ai/individual/LeopardDragonHachling.java new file mode 100644 index 0000000000..dbd6bc35e1 --- /dev/null +++ b/trunk/dist/game/data/scripts/ai/individual/LeopardDragonHachling.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2004-2015 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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. + * + * L2J Server 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 . + */ +package ai.individual; + +import java.util.ArrayList; +import java.util.List; + +import ai.npc.AbstractNpcAI; + +import com.l2jserver.gameserver.ai.CtrlIntention; +import com.l2jserver.gameserver.enums.ChatType; +import com.l2jserver.gameserver.model.Location; +import com.l2jserver.gameserver.model.actor.L2Npc; +import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance; +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.skills.Skill; +import com.l2jserver.gameserver.network.NpcStringId; +import com.l2jserver.gameserver.network.serverpackets.NpcSay; +import com.l2jserver.util.Rnd; + +/** + * Leopard Dragon Hachling AI. + * @author Mobius + */ +public class LeopardDragonHachling extends AbstractNpcAI +{ + // NPCs + private static final int DRAGON_HACHLING = 23434; + private static final int LEOPARD_DRAGON = 23435; + // Locations + private static final List TRANSFORM_LOCATIONS = new ArrayList<>(); + { + TRANSFORM_LOCATIONS.add(new Location(84199, 120022, -2944)); + TRANSFORM_LOCATIONS.add(new Location(92138, 113735, -3076)); + TRANSFORM_LOCATIONS.add(new Location(103925, 122422, -3776)); + TRANSFORM_LOCATIONS.add(new Location(122040, 115493, -3648)); + } + + private LeopardDragonHachling() + { + super(LeopardDragonHachling.class.getSimpleName(), "ai/individual"); + addAttackId(DRAGON_HACHLING); + } + + @Override + public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) + { + if ((npc != null) && event.equals("MOVE_TO_TRANSFORM")) + { + if (npc.calculateDistance(nearestLocation(npc), false, false) < 100) + { + final int random = Rnd.get(1, 4); + for (int counter = 1; counter < random; counter++) + { + final L2Npc leopard = addSpawn(LEOPARD_DRAGON, npc.getLocation(), true, 300000); // 5 minute despawn time + leopard.broadcastPacket(new NpcSay(leopard.getObjectId(), ChatType.NPC_GENERAL, LEOPARD_DRAGON, NpcStringId.I_M_GOING_TO_TRANSFORM_WITH_THE_POWER_OF_THE_VORTEX_YOU_JUST_WATCH)); + ((L2MonsterInstance) leopard).addDamage(player, 1, null); + } + cancelQuestTimer("MOVE_TO_TRANSFORM", npc, player); + npc.deleteMe(); + } + else + { + npc.abortAttack(); + npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, nearestLocation(npc)); + } + } + return super.onAdvEvent(event, npc, player); + } + + @Override + public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill) + { + if (npc.getScriptValue() == 0) + { + npc.setScriptValue(1); + npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, DRAGON_HACHLING, NpcStringId.HEY_THAT_HURT_YOU_JUST_WAIT_HERE_AND_I_LL_BE_BACK_AS_A_STRONGER_DRAGON)); + startQuestTimer("MOVE_TO_TRANSFORM", 1000, npc, attacker, true); + } + npc.abortAttack(); + npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, nearestLocation(npc)); + return null; + } + + private Location nearestLocation(L2Npc npc) + { + Location gotoLoc = TRANSFORM_LOCATIONS.get(0); + for (Location loc : TRANSFORM_LOCATIONS) + { + if (npc.calculateDistance(loc, false, false) < npc.calculateDistance(gotoLoc, false, false)) + { + gotoLoc = loc; + } + } + return gotoLoc; + } + + public static void main(String[] args) + { + new LeopardDragonHachling(); + } +}