From fdb76699b4c2afeedea0fdc13955b94420bdacf9 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 18 Jun 2016 10:05:07 +0000 Subject: [PATCH] Simple AI for Bloody Succubus. Contributed by gigilo1968. --- .../ai/areas/ImperialTomb/BloodySuccubus.java | 276 ++++++++++++++++++ 1 file changed, 276 insertions(+) create mode 100644 trunk/dist/game/data/scripts/ai/areas/ImperialTomb/BloodySuccubus.java diff --git a/trunk/dist/game/data/scripts/ai/areas/ImperialTomb/BloodySuccubus.java b/trunk/dist/game/data/scripts/ai/areas/ImperialTomb/BloodySuccubus.java new file mode 100644 index 0000000000..7663305906 --- /dev/null +++ b/trunk/dist/game/data/scripts/ai/areas/ImperialTomb/BloodySuccubus.java @@ -0,0 +1,276 @@ +/* + * 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 . + */ +package ai.areas.ImperialTomb; + +import com.l2jmobius.gameserver.enums.ChatType; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.network.NpcStringId; + +import ai.AbstractNpcAI; + +/** + * Simple AI for Bloody Succubus. + * @author Gigi + */ +final class BloodySuccubus extends AbstractNpcAI +{ + // NPCs + private static final int BLOODY_SUCCUBUS = 23185; + private static final int SUCCUBUS_OF_DEATH = 23191; + private static final int SUCCUBUS_OF_DARKNESS = 23192; + private static final int SUCCUBUS_OF_LUNACY = 23197; + private static final int SUCCUBUS_OF_SILENCE = 23198; + // Attack messages + private static final NpcStringId[] ON_ATTACK_MSG_BLOODY_SUCCUBUS = + { + NpcStringId.HEY_THAT_HURT_YOU_JUST_WAIT_HERE_AND_I_LL_BE_BACK_AS_A_STRONGER_DRAGON, + NpcStringId.HAHAHA_YOU_DARE_TO_DISRUPT_ME_I_WILL_BE_YOUR_NIGHTMARE_FROM_WHICH_YOU_CAN_NEVER_AWAKEN, + NpcStringId.I_CANNOT_LET_YOU_STOP_THE_WRAITH_OF_SHILEN, + NpcStringId.YOU_DARE_ATTACK_ME_I_WILL_FILL_YOUR_NIGHTMARES_WITH_BLOOD, + NpcStringId.HALT_YOUR_NIGHTMARES_WILL_FILL_YOU_WITH_DREAD + }; + private static final NpcStringId[] ON_ATTACK_MSG_SUCCUBUS_OF_DEATH = + { + NpcStringId.HOW_FOOLISH_THE_PRICE_OF_ATTACKING_ME_IS_DEATH, + NpcStringId.PREPARE_I_SHALL_GRANT_YOU_DEATH, + NpcStringId.MY_SWORD_WILL_TAKE_YOUR_LIFE, + NpcStringId.OH_SHILEN_GIVE_ME_STRENGTH, + NpcStringId.YAAAH + }; + private static final NpcStringId[] ON_ATTACK_MSG_SUCCUBUS_OF_DARKNESS = + { + NpcStringId.HYAAAAAAH, + NpcStringId.ARE_YOU_THE_ONE_TO_SHATTER_THE_PEACE, + NpcStringId.OUR_MISSION_IS_TO_RESURRECT_THE_GODDESS_DO_NOT_INTERFERE, + NpcStringId.FEEL_THE_TRUE_TERROR_OF_DARKNESS + }; + private static final NpcStringId[] ON_ATTACK_MSG_SUCCUBUS_OF_LUNACY = + { + NpcStringId.HEHEHE_I_M_GLAD_YOU_CAME_I_WAS_HUNGRY, + NpcStringId.SMALL_FRY_I_WILL_SHOW_YOU_TRUE_MADNESS_HAHAHA, + NpcStringId.HEHEHE_PREPARE_MY_MADNESS_WILL_SWALLOW_YOU_UP, + NpcStringId.HEHEHE_SHALL_WE_PLAY, + NpcStringId.HEHEHE_PREPARE_MY_MADNESS_WILL_SWALLOW_YOU_UP + }; + private static final NpcStringId[] ON_ATTACK_MSG_SUCCUBUS_OF_SILENCE = + { + NpcStringId.FOR_THE_GODDESS, + NpcStringId.YOU_WILL_DIE, + NpcStringId.DIE2, + NpcStringId.YOU_WILL_BE_DESTROYED, + NpcStringId.OOOOH, + NpcStringId.DO_NOT_INTERFERE + }; + // Death messages + private static final NpcStringId[] ON_FAILED_MSG_BLOODY_SUCCUBUS = + { + NpcStringId.AH, + NpcStringId.SHILEN_I_HAVE_FAILED, + NpcStringId.HOW_ALL_THAT_POWER_REMOVED, + NpcStringId.TO_THINK_THAT_I_COULD_FAIL_IMPOSSIBLE + }; + private static final NpcStringId[] ON_FAILED_MSG_SUCCUBUS_OF_DEATH = + { + NpcStringId.NO_I_LOST_ALL_THE_GATHERED_POWER_OF_LIGHT_TO_THIS_THIS, + NpcStringId.I_WOULD_DEFEATED, + NpcStringId.DON_T_THINK_THIS_IS_THE_END + }; + private static final NpcStringId[] ON_FAILED_MSG_SUCCUBUS_OF_DARKNESS = + { + NpcStringId.I_WILL_ALWAYS_WATCH_YOU_FROM_THE_DARKNESS, + NpcStringId.NO_N_NO_NO, + NpcStringId.I_MUSTN_T_LOSE_THE_STRENGTH, + NpcStringId.OH_CREATURES_OF_THE_GODDESS_LEND_ME_YOUR_STRENGTH + }; + private static final NpcStringId[] ON_FAILED_MSG_SUCCUBUS_OF_LUNACY = + { + NpcStringId.ACK_NO_MY_BODY_IT_S_DISAPPEARING, + NpcStringId.KYAAAH, + NpcStringId.HUHUHU_HUHUHU_HUHAHAHA, + NpcStringId.HUH_WHAT_HAPPENED_I_I_LOST + }; + private static final NpcStringId[] ON_FAILED_MSG_SUCCUBUS_OF_SILENCE = + { + NpcStringId.IS_THIS_THE_END2, + NpcStringId.OH_GODDESS, + NpcStringId.NO_I_DIDN_T_STAY_SILENT_ALL_THIS_TIME_JUST_TO_DISAPPEAR_NOW_LIKE_THIS + }; + + private BloodySuccubus() + { + addAttackId(BLOODY_SUCCUBUS, SUCCUBUS_OF_DEATH, SUCCUBUS_OF_DARKNESS, SUCCUBUS_OF_LUNACY, SUCCUBUS_OF_SILENCE); + addKillId(BLOODY_SUCCUBUS, SUCCUBUS_OF_DEATH, SUCCUBUS_OF_DARKNESS, SUCCUBUS_OF_LUNACY, SUCCUBUS_OF_SILENCE); + } + + @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; + } + npc.broadcastSay(ChatType.NPC_GENERAL, ON_ATTACK_MSG_BLOODY_SUCCUBUS[getRandom(ON_ATTACK_MSG_BLOODY_SUCCUBUS.length)]); + break; + } + case "say1": + { + if (npc.isDead() || !npc.isScriptValue(1)) + { + cancelQuestTimer("say1", npc, null); + return null; + } + npc.broadcastSay(ChatType.NPC_GENERAL, ON_ATTACK_MSG_SUCCUBUS_OF_DEATH[getRandom(ON_ATTACK_MSG_SUCCUBUS_OF_DEATH.length)]); + break; + } + case "say2": + { + if (npc.isDead() || !npc.isScriptValue(1)) + { + cancelQuestTimer("say2", npc, null); + return null; + } + npc.broadcastSay(ChatType.NPC_GENERAL, ON_ATTACK_MSG_SUCCUBUS_OF_DARKNESS[getRandom(ON_ATTACK_MSG_SUCCUBUS_OF_DARKNESS.length)]); + break; + } + case "say3": + { + if (npc.isDead() || !npc.isScriptValue(1)) + { + cancelQuestTimer("say3", npc, null); + return null; + } + npc.broadcastSay(ChatType.NPC_GENERAL, ON_ATTACK_MSG_SUCCUBUS_OF_LUNACY[getRandom(ON_ATTACK_MSG_SUCCUBUS_OF_LUNACY.length)]); + break; + } + case "say4": + { + if (npc.isDead() || !npc.isScriptValue(1)) + { + cancelQuestTimer("say4", npc, null); + return null; + } + npc.broadcastSay(ChatType.NPC_GENERAL, ON_ATTACK_MSG_SUCCUBUS_OF_SILENCE[getRandom(ON_ATTACK_MSG_SUCCUBUS_OF_SILENCE.length)]); + break; + } + } + return null; + } + + @Override + public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon) + { + switch (npc.getId()) + { + case BLOODY_SUCCUBUS: + { + if (npc.isScriptValue(0)) + { + npc.setScriptValue(1); + startQuestTimer("say", (getRandom(5) + 3) * 1000, npc, null, true); + } + break; + } + case SUCCUBUS_OF_DEATH: + { + if (npc.isScriptValue(0)) + { + npc.setScriptValue(1); + startQuestTimer("say1", (getRandom(5) + 3) * 1000, npc, null, true); + } + break; + } + case SUCCUBUS_OF_DARKNESS: + { + if (npc.isScriptValue(0)) + { + npc.setScriptValue(1); + startQuestTimer("say2", (getRandom(5) + 3) * 1000, npc, null, true); + } + break; + } + case SUCCUBUS_OF_LUNACY: + { + if (npc.isScriptValue(0)) + { + npc.setScriptValue(1); + startQuestTimer("say3", (getRandom(5) + 3) * 1000, npc, null, true); + } + break; + } + case SUCCUBUS_OF_SILENCE: + { + if (npc.isScriptValue(0)) + { + npc.setScriptValue(1); + startQuestTimer("say4", (getRandom(5) + 3) * 1000, npc, null, true); + } + break; + } + } + return super.onAttack(npc, attacker, damage, isSummon); + } + + @Override + public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon) + { + switch (npc.getId()) + { + case BLOODY_SUCCUBUS: + { + cancelQuestTimer("say", npc, player); + npc.broadcastSay(ChatType.NPC_GENERAL, ON_FAILED_MSG_BLOODY_SUCCUBUS[getRandom(ON_FAILED_MSG_BLOODY_SUCCUBUS.length)]); + break; + } + case SUCCUBUS_OF_DEATH: + { + cancelQuestTimer("say1", npc, player); + npc.broadcastSay(ChatType.NPC_GENERAL, ON_FAILED_MSG_SUCCUBUS_OF_DEATH[getRandom(ON_FAILED_MSG_SUCCUBUS_OF_DEATH.length)]); + break; + } + case SUCCUBUS_OF_DARKNESS: + { + cancelQuestTimer("say2", npc, player); + npc.broadcastSay(ChatType.NPC_GENERAL, ON_FAILED_MSG_SUCCUBUS_OF_DARKNESS[getRandom(ON_FAILED_MSG_SUCCUBUS_OF_DARKNESS.length)]); + break; + } + case SUCCUBUS_OF_LUNACY: + { + cancelQuestTimer("say3", npc, player); + npc.broadcastSay(ChatType.NPC_GENERAL, ON_FAILED_MSG_SUCCUBUS_OF_LUNACY[getRandom(ON_FAILED_MSG_SUCCUBUS_OF_LUNACY.length)]); + break; + } + case SUCCUBUS_OF_SILENCE: + { + cancelQuestTimer("say4", npc, player); + npc.broadcastSay(ChatType.NPC_GENERAL, ON_FAILED_MSG_SUCCUBUS_OF_SILENCE[getRandom(ON_FAILED_MSG_SUCCUBUS_OF_SILENCE.length)]); + break; + } + } + return super.onKill(npc, player, isSummon); + } + + public static void main(String[] args) + { + new BloodySuccubus(); + } +} \ No newline at end of file