Skip to content
Snippets Groups Projects
Commit 9deca147 authored by Maneco2's avatar Maneco2
Browse files

Add Bloody Karik AI

parent fc7f68dd
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,9 @@ import com.l2jserver.gameserver.model.actor.L2Npc; ...@@ -26,6 +26,9 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
*/ */
public final class NonLethalableNpcs extends AbstractNpcAI { public final class NonLethalableNpcs extends AbstractNpcAI {
private static final int[] NPCS = { private static final int[] NPCS = {
22854, // Bloody Karik
22855, // Bloody Berserker
22856, // Bloody Karinness
22857, // Knoriks 22857, // Knoriks
35062, // Headquarters 35062, // Headquarters
}; };
......
/*
* Copyright (C) 2004-2020 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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 DataPack 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 com.l2jserver.datapack.ai.individual;
import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
import com.l2jserver.gameserver.GeoData;
import com.l2jserver.gameserver.datatables.SpawnTable;
import com.l2jserver.gameserver.model.L2Spawn;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.actor.L2Attackable;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/**
* Bloody Karik AI.
* @author Maneco2
* @version 2.6.2.0
*/
public class BloodyKarik extends AbstractNpcAI
{
// NPCs
private static final int BLOODY_KARIK = 22854;
private static final int[] BLOODY_FAMILY =
{
22854, // Bloody Karik
22855, // Bloody Berserker
22856, // Bloody Karinness
};
public BloodyKarik()
{
super(BloodyKarik.class.getSimpleName(), "ai/individual");
addKillId(BLOODY_KARIK);
addAttackId(BLOODY_KARIK);
addTeleportId(BLOODY_KARIK);
addMoveFinishedId(BLOODY_KARIK);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
switch (event)
{
case "CORE_AI":
{
if (npc != null)
{
((L2Attackable) npc).clearAggroList();
npc.disableCoreAI(false);
startQuestTimer("RETURN_SPAWN", 300000, npc, null);
}
break;
}
case "RETURN_SPAWN":
{
if (npc != null)
{
((L2Attackable) npc).setCanReturnToSpawnPoint(true);
}
break;
}
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
{
switch (npc.getId())
{
case BLOODY_KARIK:
{
final double DistSpawn = npc.calculateDistance(npc.getSpawn().getLocation(), false, false);
if (DistSpawn > 3000)
{
npc.disableCoreAI(true);
npc.teleToLocation(npc.getSpawn().getLocation());
}
else
{
if ((DistSpawn > 500) && (getRandom(100) < 1) && (npc.isInCombat()) && (!npc.isCastingNow()))
{
for (int object : BLOODY_FAMILY)
{
for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(object))
{
final L2Npc obj = spawn.getLastSpawn();
if ((obj != null) && !obj.isDead() && (Math.abs(npc.getZ() - obj.getZ()) < 150))
{
if (npc.calculateDistance(obj, false, false) > obj.getTemplate().getClanHelpRange())
{
if ((npc.calculateDistance(obj, false, false) < 3000) && GeoData.getInstance().canSeeTarget(npc, obj))
{
npc.disableCoreAI(true);
((L2Attackable) npc).setCanReturnToSpawnPoint(false);
addMoveToDesire(npc, new Location(obj.getX() + getRandom(-100, 100), obj.getY() + getRandom(-100, 100), obj.getZ() + 20, 0), 0);
}
}
}
}
}
}
}
break;
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
switch (npc.getId())
{
case BLOODY_KARIK:
{
if (getRandom(100) < 5)
{
final int newZ = npc.getZ() + 20;
addAttackDesire(addSpawn(npc.getId(), npc.getX(), npc.getY(), newZ, npc.getHeading(), false, 0), killer);
addAttackDesire(addSpawn(npc.getId(), npc.getX(), npc.getY() - 10, newZ, npc.getHeading(), false, 0), killer);
addAttackDesire(addSpawn(npc.getId(), npc.getX(), npc.getY() - 20, newZ, npc.getHeading(), false, 0), killer);
addAttackDesire(addSpawn(npc.getId(), npc.getX(), npc.getY() + 10, newZ, npc.getHeading(), false, 0), killer);
addAttackDesire(addSpawn(npc.getId(), npc.getX(), npc.getY() + 20, newZ, npc.getHeading(), false, 0), killer);
}
break;
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
protected void onTeleport(L2Npc npc)
{
startQuestTimer("CORE_AI", 100, npc, null);
}
@Override
public void onMoveFinished(L2Npc npc)
{
startQuestTimer("CORE_AI", 100, npc, null);
}
public static void main(String[] args)
{
new BloodyKarik();
}
}
\ No newline at end of file
...@@ -150,6 +150,7 @@ com/l2jserver/datapack/ai/individual/Beleth.java ...@@ -150,6 +150,7 @@ com/l2jserver/datapack/ai/individual/Beleth.java
com/l2jserver/datapack/ai/individual/BlackdaggerWing.java com/l2jserver/datapack/ai/individual/BlackdaggerWing.java
com/l2jserver/datapack/ai/individual/BleedingFly.java com/l2jserver/datapack/ai/individual/BleedingFly.java
com/l2jserver/datapack/ai/individual/BloodyBerserker.java com/l2jserver/datapack/ai/individual/BloodyBerserker.java
com/l2jserver/datapack/ai/individual/BloodyKarik.java
com/l2jserver/datapack/ai/individual/BloodyKarinness.java com/l2jserver/datapack/ai/individual/BloodyKarinness.java
com/l2jserver/datapack/ai/individual/CrimsonHatuOtis.java com/l2jserver/datapack/ai/individual/CrimsonHatuOtis.java
com/l2jserver/datapack/ai/individual/Core.java com/l2jserver/datapack/ai/individual/Core.java
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment