Browse Source

BETA: Added several new AI, also added scriptValue to L2Npc
* Cat's Eye Bandit
* Frightened Ragna Orc
* Patch by: Gladicek
* Updated Tar Beetle AI

malyelfik 12 years ago
parent
commit
47791be8ef

+ 2 - 0
L2J_DataPack_BETA/dist/game/data/scripts.cfg

@@ -84,6 +84,7 @@ ai/individual/Amaskari.java
 ai/individual/Antharas.java
 ai/individual/Baium.java
 ai/individual/Beleth.java
+ai/individual/CatsEyeBandit.java
 ai/individual/Core.java
 ai/individual/DarkWaterDragon.java
 ai/individual/DemonPrince.java
@@ -94,6 +95,7 @@ ai/individual/DrChaos.java
 ai/individual/DustDragon.java
 ai/individual/Epidos.java
 ai/individual/FleeNpc.java
+ai/individual/FrightenedRagnaOrc.java
 ai/individual/GeneralDilios.java
 ai/individual/Gordon.java
 ai/individual/HellboundCore.java

+ 75 - 0
L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/CatsEyeBandit.java

@@ -0,0 +1,75 @@
+/*
+ * 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.individual;
+
+import ai.npc.AbstractNpcAI;
+
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.itemcontainer.Inventory;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.network.NpcStringId;
+import com.l2jserver.gameserver.network.clientpackets.Say2;
+
+/**
+ * Cat's Eye Bandit (Quest Monster) AI
+ * @author Gladicek
+ */
+
+public class CatsEyeBandit extends AbstractNpcAI
+{
+	// NPC ID
+	private static final int MOB_ID = 27038;
+	
+	// Weapons
+	private static final int BOW = 1181;
+	private static final int DAGGER = 1182;
+	
+	@Override
+	public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
+	{
+		final QuestState qs = attacker.getQuestState("403_PathToRogue");
+		if (npc.isScriptValue(0) && qs != null && (qs.getItemEquipped(Inventory.PAPERDOLL_RHAND) == BOW || qs.getItemEquipped(Inventory.PAPERDOLL_RHAND) == DAGGER))
+		{
+			broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.YOU_CHILDISH_FOOL_DO_YOU_THINK_YOU_CAN_CATCH_ME);
+			npc.setScriptValue(1);
+		}
+		return super.onAttack(npc, attacker, damage, isPet);
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
+	{
+		final QuestState qs = killer.getQuestState("403_PathToRogue");
+		if (qs != null)
+		{
+			broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.I_MUST_DO_SOMETHING_ABOUT_THIS_SHAMEFUL_INCIDENT);
+			npc.setScriptValue(0);
+		}
+		return super.onKill(npc, killer, isPet);
+	}
+	
+	public CatsEyeBandit(String name, String descr)
+	{
+		super(name, descr);
+		addAttackId(MOB_ID);
+		addKillId(MOB_ID);
+	}
+	
+	public static void main(String[] args)
+	{
+		new CatsEyeBandit(CatsEyeBandit.class.getSimpleName(), "ai");
+	}
+}

+ 148 - 0
L2J_DataPack_BETA/dist/game/data/scripts/ai/individual/FrightenedRagnaOrc.java

@@ -0,0 +1,148 @@
+/*
+ * 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.individual;
+
+import ai.npc.AbstractNpcAI;
+
+import com.l2jserver.gameserver.ai.CtrlIntention;
+import com.l2jserver.gameserver.model.L2CharPosition;
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
+import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
+import com.l2jserver.gameserver.network.NpcStringId;
+import com.l2jserver.gameserver.network.clientpackets.Say2;
+import com.l2jserver.util.Rnd;
+
+/**
+ * Frightened Ragna Orc AI
+ * @author Gladicek, malyelfik
+ */
+
+public class FrightenedRagnaOrc extends AbstractNpcAI
+{
+	// NPC ID
+	private static final int MOB_ID = 18807;
+	
+	// Amount of Health
+	private static final int HP = 4500;
+	
+	// Chances
+	private static final int ADENA = 10000;
+	private static final int CHANCE = 1000;
+	private static final int ADENA2 = 1000000;
+	private static final int CHANCE2 = 10;
+	
+	// Skill
+	private static final SkillHolder SKILL = new SkillHolder(6234, 1);
+	
+	public FrightenedRagnaOrc(String name, String descr)
+	{
+		super(name, descr);
+		addAttackId(MOB_ID);
+		addKillId(MOB_ID);
+	}
+	
+	@Override
+	public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
+	{
+		if (npc.isScriptValue(0))
+		{
+			npc.setScriptValue(1);
+			startQuestTimer("say", (getRandom(5) + 3) * 1000, npc, null, true);
+		}
+		else if ((npc.getCurrentHp() <= HP) && npc.isScriptValue(1))
+		{
+			startQuestTimer("reward", 10000, npc, attacker);
+			broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.WAIT_WAIT_STOP_SAVE_ME_AND_ILL_GIVE_YOU_10000000_ADENA);
+			npc.setScriptValue(2);
+		}
+		return super.onAttack(npc, attacker, damage, isPet);
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
+	{
+		final NpcStringId msg = (Rnd.nextBoolean()) ? NpcStringId.UGH_A_CURSE_UPON_YOU : NpcStringId.I_REALLY_DIDNT_WANT_TO_FIGHT;
+		broadcastNpcSay(npc, Say2.NPC_ALL, msg);
+		cancelQuestTimer("say", npc, null);
+		cancelQuestTimer("reward", npc, player);
+		npc.setScriptValue(0);
+		return super.onKill(npc, player, isPet);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		switch (event)
+		{
+			case "say":
+				if (npc.isDead() || !npc.isScriptValue(1))
+				{
+					cancelQuestTimer("say", npc, null);
+					return null;
+				}
+				final NpcStringId msg = (Rnd.nextBoolean()) ? NpcStringId.I_DONT_WANT_TO_FIGHT : NpcStringId.IS_THIS_REALLY_NECESSARY;
+				broadcastNpcSay(npc, Say2.NPC_ALL, msg);
+				break;
+			case "reward":
+				if (!npc.isDead() && npc.isScriptValue(2))
+				{
+					if (getRandom(100000) < CHANCE2)
+					{
+						final NpcStringId msg1 = (Rnd.nextBoolean()) ? NpcStringId.TH_THANKS_I_COULD_HAVE_BECOME_GOOD_FRIENDS_WITH_YOU : NpcStringId.ILL_GIVE_YOU_10000000_ADENA_LIKE_I_PROMISED_I_MIGHT_BE_AN_ORC_WHO_KEEPS_MY_PROMISES;
+						broadcastNpcSay(npc, Say2.NPC_ALL, msg1);
+						npc.setScriptValue(3);
+						npc.doCast(SKILL.getSkill());
+						for (int i = 0; i < 10; i++)
+						{
+							((L2Attackable) npc).dropItem(player, PcInventory.ADENA_ID, ADENA2);
+						}
+					}
+					else if (getRandom(100000) < CHANCE)
+					{
+						final NpcStringId msg1 = (Rnd.nextBoolean()) ? NpcStringId.TH_THANKS_I_COULD_HAVE_BECOME_GOOD_FRIENDS_WITH_YOU : NpcStringId.SORRY_BUT_THIS_IS_ALL_I_HAVE_GIVE_ME_A_BREAK;
+						broadcastNpcSay(npc, Say2.NPC_ALL, msg1);
+						npc.setScriptValue(3);
+						npc.doCast(SKILL.getSkill());
+						for (int i = 0; i < 10; i++)
+						{
+							((L2Attackable) npc).dropItem(player, PcInventory.ADENA_ID, ADENA);
+						}
+					}
+					else
+					{
+						final NpcStringId msg1 = (Rnd.nextBoolean()) ? NpcStringId.THANKS_BUT_THAT_THING_ABOUT_10000000_ADENA_WAS_A_LIE_SEE_YA : NpcStringId.YOURE_PRETTY_DUMB_TO_BELIEVE_ME;
+						broadcastNpcSay(npc, Say2.NPC_ALL, msg1);
+					}
+					startQuestTimer("despawn", 1000, npc, null);
+				}
+				break;
+			case "despawn":
+				npc.setRunning();
+				npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition((npc.getX() + getRandom(-800, 800)), (npc.getY() + getRandom(-800, 800)), npc.getZ(), npc.getHeading()));
+				npc.deleteMe();
+				npc.setScriptValue(0);
+				break;
+		}
+		return null;
+	}
+	
+	public static void main(String[] args)
+	{
+		new FrightenedRagnaOrc(FrightenedRagnaOrc.class.getSimpleName(), "ai");
+	}
+}

+ 3 - 3
L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/ForgeOfTheGods/TarBeetle.java

@@ -45,7 +45,7 @@ public class TarBeetle extends AbstractNpcAI
 	@Override
 	public String onAggroRangeEnter(L2Npc npc, L2PcInstance player, boolean isPet)
 	{
-		if ((spawn.getBeetle(npc).getNumShotValue() > 0) && canCastSkill(npc))
+		if ((spawn.getBeetle(npc).getScriptValue() > 0) && canCastSkill(npc))
 		{
 			int level = 0;
 			final L2Effect effect = player.getFirstEffect(SKILL_ID);
@@ -68,14 +68,14 @@ public class TarBeetle extends AbstractNpcAI
 	{
 		if ((skill != null) && (skill.getId() == SKILL_ID))
 		{
-			int val = spawn.getBeetle(npc).getNumShotValue() - 1;
+			int val = spawn.getBeetle(npc).getScriptValue() - 1;
 			if ((val <= 0) || (SKILLS[0].getSkill().getMpConsume() > npc.getCurrentMp()))
 			{
 				spawn.removeBeetle(npc);
 			}
 			else
 			{
-				spawn.getBeetle(npc).setNumShotValue(val);
+				spawn.getBeetle(npc).isScriptValue(val);
 			}
 		}
 		return super.onSpellFinished(npc, player, skill);

+ 11 - 36
L2J_DataPack_BETA/dist/game/data/scripts/ai/npc/ForgeOfTheGods/TarBeetleSpawn.java

@@ -42,7 +42,7 @@ import com.l2jserver.util.Rnd;
 public class TarBeetleSpawn extends DocumentParser
 {
 	private static final Map<Integer, SpawnZone> _spawnZoneList = new HashMap<>();
-	private static final Map<Integer, Beetle> _spawnList = new FastMap<>();
+	private static final Map<Integer, L2Npc> _spawnList = new FastMap<>();
 	
 	public static List<Integer> lowerZones = new ArrayList<>();
 	public static List<Integer> upperZones = new ArrayList<>();
@@ -152,8 +152,9 @@ public class TarBeetleSpawn extends DocumentParser
 			npc.setIsImmobilized(true);
 			npc.setIsInvul(true);
 			npc.disableCoreAI(true);
+			npc.setScriptValue(5);
 			
-			_spawnList.put(npc.getObjectId(), new Beetle(npc));
+			_spawnList.put(npc.getObjectId(), npc);
 		}
 		catch (Exception e)
 		{
@@ -172,42 +173,16 @@ public class TarBeetleSpawn extends DocumentParser
 		return _spawnZoneList.get(id);
 	}
 	
-	public Beetle getBeetle(L2Npc npc)
+	public L2Npc getBeetle(L2Npc npc)
 	{
 		return _spawnList.get(npc.getObjectId());
 	}
 	
-	public static Map<Integer, Beetle> getSpawnList()
+	public static Map<Integer, L2Npc> getSpawnList()
 	{
 		return _spawnList;
 	}
 	
-	public class Beetle
-	{
-		private int _numShotValue = 5;
-		private final L2Npc _npc;
-		
-		public Beetle(L2Npc npc)
-		{
-			_npc = npc;
-		}
-		
-		public L2Npc getNpc()
-		{
-			return _npc;
-		}
-		
-		public void setNumShotValue(int numShotValue)
-		{
-			_numShotValue = numShotValue;
-		}
-		
-		public int getNumShotValue()
-		{
-			return _numShotValue;
-		}
-	}
-	
 	private class SpawnZone extends L2Territory
 	{
 		private int[] _bZones;
@@ -269,16 +244,16 @@ public class TarBeetleSpawn extends DocumentParser
 		@Override
 		public void run()
 		{
-			Iterator<Beetle> iterator = getSpawnList().values().iterator();
+			Iterator<L2Npc> iterator = getSpawnList().values().iterator();
 			while (iterator.hasNext())
 			{
-				Beetle b = iterator.next();
-				int val = b.getNumShotValue();
+				L2Npc npc = iterator.next();
+				int val = npc.getScriptValue();
 				if (val == 5)
 				{
-					b.getNpc().deleteMe();
+					npc.deleteMe();
 					iterator.remove();
-					if (b.getNpc().getSpawn().getLocz() < -5000)
+					if (npc.getSpawn().getLocz() < -5000)
 					{
 						lowerNpcCount--;
 					}
@@ -289,7 +264,7 @@ public class TarBeetleSpawn extends DocumentParser
 				}
 				else
 				{
-					b.setNumShotValue(val + 1);
+					npc.setScriptValue(val + 1);
 				}
 			}
 		}

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/stats/skills/06200-06299.xml

@@ -303,8 +303,8 @@
 	</skill>
 	<skill id="6234" levels="1" name="Presentation - Adena Firework">
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
-		<set name="target" val="TARGET_NONE" />
-		<set name="skillType" val="NOTDONE" />
+		<set name="target" val="TARGET_SELF" />
+		<set name="magicLvl" val="80" />
 		<set name="operateType" val="A1" />
 	</skill>
 	<skill id="6235" levels="1" name="Blessed Focus">