From 49b1e2174529d506afea623bb04a3c8b7f314a52 Mon Sep 17 00:00:00 2001
From: St3eT <St3eT@users.noreply.github.com>
Date: Tue, 21 Jan 2014 20:54:02 +0000
Subject: [PATCH] BETA: Updated '''Monastery of Silence''' AI. * Reviewed by:
 malyelfil, Zoey76, Adry_85, xban1x, !UnAfraid

---
 L2J_DataPack_BETA/dist/game/data/scripts.cfg  |   2 +-
 .../scripts/ai/group_template/Monastery.java  | 239 --------------
 .../ai/group_template/MonasteryOfSilence.java | 297 ++++++++++++++++++
 L2J_DataPack_BETA/dist/sql/game/npcaidata.sql |  14 +-
 4 files changed, 305 insertions(+), 247 deletions(-)
 delete mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Monastery.java
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts.cfg b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
index e5d003f16c..b686b9da77 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts.cfg
+++ b/L2J_DataPack_BETA/dist/game/data/scripts.cfg
@@ -98,7 +98,7 @@ ai/group_template/GiantsCave.java
 ai/group_template/IsleOfPrayer.java
 ai/group_template/LairOfAntharas.java
 ai/group_template/MithrilMines.java
-ai/group_template/Monastery.java
+ai/group_template/MonasteryOfSilence.java
 ai/group_template/NonLethalableNpcs.java
 ai/group_template/PavelArchaic.java
 ai/group_template/PlainsOfDion.java
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Monastery.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Monastery.java
deleted file mode 100644
index 2454c6567c..0000000000
--- a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/Monastery.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (C) 2004-2013 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 ai.group_template;
-
-import ai.npc.AbstractNpcAI;
-
-import com.l2jserver.gameserver.GeoData;
-import com.l2jserver.gameserver.ai.CtrlIntention;
-import com.l2jserver.gameserver.datatables.SpawnTable;
-import com.l2jserver.gameserver.model.L2Object;
-import com.l2jserver.gameserver.model.L2Spawn;
-import com.l2jserver.gameserver.model.actor.L2Attackable;
-import com.l2jserver.gameserver.model.actor.L2Character;
-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.effects.L2EffectType;
-import com.l2jserver.gameserver.model.holders.SkillHolder;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.network.NpcStringId;
-import com.l2jserver.gameserver.network.clientpackets.Say2;
-import com.l2jserver.gameserver.network.serverpackets.NpcSay;
-
-/**
- * Monastery AI.
- * @author Kerberos, nonom
- */
-public class Monastery extends AbstractNpcAI
-{
-	private static final int CAPTAIN = 18910;
-	private static final int KNIGHT = 18909;
-	private static final int SCARECROW = 18912;
-	
-	private static final int[] SOLINA_CLAN =
-	{
-		22789, // Guide Solina
-		22790, // Seeker Solina
-		22791, // Savior Solina
-		22793, // Ascetic Solina
-	};
-	
-	private static final int[] DIVINITY_CLAN =
-	{
-		22794, // Divinity Judge
-		22795, // Divinity Manager
-	};
-	
-	private static final NpcStringId[] SOLINA_KNIGHTS_MSG =
-	{
-		NpcStringId.PUNISH_ALL_THOSE_WHO_TREAD_FOOTSTEPS_IN_THIS_PLACE,
-		NpcStringId.WE_ARE_THE_SWORD_OF_TRUTH_THE_SWORD_OF_SOLINA,
-		NpcStringId.WE_RAISE_OUR_BLADES_FOR_THE_GLORY_OF_SOLINA
-	};
-	
-	private static final NpcStringId[] DIVINITY_MSG =
-	{
-		NpcStringId.S1_WHY_WOULD_YOU_CHOOSE_THE_PATH_OF_DARKNESS,
-		NpcStringId.S1_HOW_DARE_YOU_DEFY_THE_WILL_OF_EINHASAD
-	};
-	
-	private static final SkillHolder DECREASE_SPEED = new SkillHolder(4589, 8);
-	
-	private Monastery()
-	{
-		super(Monastery.class.getSimpleName(), "ai/group_template");
-		addSeeCreatureId(SOLINA_CLAN);
-		addSeeCreatureId(CAPTAIN, KNIGHT);
-		addSkillSeeId(DIVINITY_CLAN);
-		addAttackId(KNIGHT, CAPTAIN);
-		addSpawnId(KNIGHT);
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(KNIGHT))
-		{
-			startQuestTimer("training", 5000, spawn.getLastSpawn(), null, true);
-		}
-		
-		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(SCARECROW))
-		{
-			spawn.getLastSpawn().setIsInvul(true);
-			spawn.getLastSpawn().disableCoreAI(true);
-		}
-	}
-	
-	@Override
-	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
-	{
-		if (event.equals("training") && !npc.isInCombat() && (getRandom(100) < 25))
-		{
-			for (L2Character character : npc.getKnownList().getKnownCharactersInRadius(300))
-			{
-				if (character.isNpc() && (character.getId() == SCARECROW))
-				{
-					for (L2Skill skill : npc.getAllSkills())
-					{
-						if (skill.isActive())
-						{
-							npc.disableSkill(skill, 0);
-						}
-					}
-					npc.setRunning();
-					((L2Attackable) npc).addDamageHate(character, 0, 100);
-					npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, character, null);
-					break;
-				}
-			}
-		}
-		else if (event.equals("checking"))
-		{
-			if (!npc.getKnownList().getKnownCharacters().contains(player))
-			{
-				cancelQuestTimer("checking", npc, player);
-				return super.onAdvEvent(event, npc, player);
-			}
-			
-			if (player.getAppearance().getInvisible() || player.isSilentMoving())
-			{
-				npc.setTarget(null);
-				npc.getAI().stopFollow();
-				((L2Attackable) npc).getAggroList().remove(player);
-				npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, player, null);
-				
-				for (L2Character character : player.getKnownList().getKnownCharactersInRadius(500))
-				{
-					if ((character instanceof L2MonsterInstance) && (character.getTarget() == player))
-					{
-						character.setTarget(null);
-						character.getAI().stopFollow();
-						((L2Attackable) character).getAggroList().remove(player);
-						character.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, player, null);
-					}
-				}
-				return super.onAdvEvent(event, npc, player);
-			}
-			
-			final double distance = npc.calculateDistance(player, false, false);
-			if (((distance < 500) && !player.isDead() && GeoData.getInstance().canSeeTarget(npc, player)))
-			{
-				switch (npc.getId())
-				{
-					case CAPTAIN:
-					case KNIGHT:
-					{
-						npc.setRunning();
-						npc.setTarget(player);
-						((L2Attackable) npc).addDamageHate(player, 0, 999);
-						npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player, null);
-						break;
-					}
-					default:
-					{
-						if (player.getActiveWeaponInstance() != null)
-						{
-							npc.setRunning();
-							npc.setTarget(player);
-							if (getRandom(10) < 2)
-							{
-								broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.YOU_CANNOT_CARRY_A_WEAPON_WITHOUT_AUTHORIZATION);
-							}
-							npc.doCast(DECREASE_SPEED.getSkill());
-							((L2Attackable) npc).addDamageHate(player, 0, 999);
-							npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player, null);
-						}
-					}
-				}
-			}
-			
-		}
-		return super.onAdvEvent(event, npc, player);
-	}
-	
-	@Override
-	public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isSummon)
-	{
-		if (getRandom(10) < 1)
-		{
-			broadcastNpcSay(npc, Say2.NPC_ALL, SOLINA_KNIGHTS_MSG[getRandom(2)]);
-		}
-		return super.onAttack(npc, player, damage, isSummon);
-	}
-	
-	@Override
-	public String onSeeCreature(L2Npc npc, L2Character creature, boolean isSummon)
-	{
-		if (creature.isPlayer())
-		{
-			startQuestTimer("checking", 2000, npc, (L2PcInstance) creature, true);
-		}
-		return super.onSeeCreature(npc, creature, isSummon);
-	}
-	
-	@Override
-	public String onSkillSee(L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isSummon)
-	{
-		if (skill.hasEffectType(L2EffectType.AGGRESSION) && (targets.length != 0))
-		{
-			for (L2Object obj : targets)
-			{
-				if (obj.equals(npc))
-				{
-					NpcSay packet = new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), DIVINITY_MSG[getRandom(1)]);
-					packet.addStringParameter(caster.getName());
-					npc.broadcastPacket(packet);
-					((L2Attackable) npc).addDamageHate(caster, 0, 999);
-					npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, caster);
-					break;
-				}
-			}
-		}
-		return super.onSkillSee(npc, caster, skill, targets, isSummon);
-	}
-	
-	@Override
-	public String onSpawn(L2Npc npc)
-	{
-		broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.FOR_THE_GLORY_OF_SOLINA);
-		return super.onSpawn(npc);
-	}
-	
-	public static void main(String[] args)
-	{
-		new Monastery();
-	}
-}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java
new file mode 100644
index 0000000000..a336acd28c
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/ai/group_template/MonasteryOfSilence.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright (C) 2004-2013 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 ai.group_template;
+
+import ai.npc.AbstractNpcAI;
+
+import com.l2jserver.gameserver.ai.CtrlIntention;
+import com.l2jserver.gameserver.datatables.SpawnTable;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.L2Spawn;
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.L2Playable;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.holders.SkillHolder;
+import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.network.NpcStringId;
+import com.l2jserver.gameserver.network.clientpackets.Say2;
+
+/**
+ * Monastery of Silence AI.
+ * @author Kerberos, nonom
+ */
+public final class MonasteryOfSilence extends AbstractNpcAI
+{
+	// NPCs
+	private static final int CAPTAIN = 18910; // Solina Knight Captain
+	private static final int KNIGHT = 18909; // Solina Knights
+	private static final int SCARECROW = 18912; // Scarecrow
+	private static final int GUIDE = 22789; // Guide Solina
+	private static final int SEEKER = 22790; // Seeker Solina
+	private static final int SAVIOR = 22791; // Savior Solina
+	private static final int ASCETIC = 22793; // Ascetic Solina
+	private static final int[] DIVINITY_CLAN =
+	{
+		22794, // Divinity Judge
+		22795, // Divinity Manager
+	};
+	// Skills
+	private static final SkillHolder ORDEAL_STRIKE = new SkillHolder(6303, 1); // Trial of the Coup
+	private static final SkillHolder LEADER_STRIKE = new SkillHolder(6304, 1); // Shock
+	private static final SkillHolder SAVER_STRIKE = new SkillHolder(6305, 1); // Sacred Gnosis
+	private static final SkillHolder SAVER_BLEED = new SkillHolder(6306, 1); // Solina Strike
+	private static final SkillHolder LEARNING_MAGIC = new SkillHolder(6308, 1); // Opus of the Wave
+	private static final SkillHolder STUDENT_CANCEL = new SkillHolder(6310, 1); // Loss of Quest
+	private static final SkillHolder WARRIOR_THRUSTING = new SkillHolder(6311, 1); // Solina Thrust
+	private static final SkillHolder KNIGHT_BLESS = new SkillHolder(6313, 1); // Solina Bless
+	// Misc
+	private static final NpcStringId[] DIVINITY_MSG =
+	{
+		NpcStringId.S1_WHY_WOULD_YOU_CHOOSE_THE_PATH_OF_DARKNESS,
+		NpcStringId.S1_HOW_DARE_YOU_DEFY_THE_WILL_OF_EINHASAD
+	};
+	private static final NpcStringId[] SOLINA_KNIGHTS_MSG =
+	{
+		NpcStringId.PUNISH_ALL_THOSE_WHO_TREAD_FOOTSTEPS_IN_THIS_PLACE,
+		NpcStringId.WE_ARE_THE_SWORD_OF_TRUTH_THE_SWORD_OF_SOLINA,
+		NpcStringId.WE_RAISE_OUR_BLADES_FOR_THE_GLORY_OF_SOLINA
+	};
+	
+	private MonasteryOfSilence()
+	{
+		super(MonasteryOfSilence.class.getSimpleName(), "ai/group_template");
+		addSkillSeeId(DIVINITY_CLAN);
+		addAttackId(KNIGHT, CAPTAIN, GUIDE, SEEKER, ASCETIC);
+		addNpcHateId(GUIDE, SEEKER, SAVIOR, ASCETIC);
+		addAggroRangeEnterId(GUIDE, SEEKER, SAVIOR, ASCETIC);
+		
+		for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(SCARECROW))
+		{
+			spawn.getLastSpawn().setIsInvul(true);
+			spawn.getLastSpawn().disableCoreAI(true);
+			startQuestTimer("TRAINING", 30000, spawn.getLastSpawn(), null, true);
+		}
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		switch (event)
+		{
+			case "TRAINING":
+			{
+				for (L2Character character : npc.getKnownList().getKnownCharactersInRadius(400))
+				{
+					if ((getRandom(100) < 30) && character.isNpc() && !character.isDead() && !character.isInCombat())
+					{
+						if ((character.getId() == CAPTAIN) && (getRandom(100) < 10) && npc.isScriptValue(0))
+						{
+							final L2Npc captain = (L2Npc) character;
+							broadcastNpcSay(captain, Say2.NPC_ALL, SOLINA_KNIGHTS_MSG[getRandom(SOLINA_KNIGHTS_MSG.length)]);
+							captain.setScriptValue(1);
+							startQuestTimer("TIMER", 10000, captain, null);
+						}
+						else if (character.getId() == KNIGHT)
+						{
+							character.setRunning();
+							((L2Attackable) character).addDamageHate(npc, 0, 100);
+							character.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, npc, null);
+						}
+					}
+				}
+				break;
+			}
+			case "DO_CAST":
+			{
+				if ((npc != null) && (player != null) && (getRandom(100) < 3))
+				{
+					if (npc.checkDoCastConditions(STUDENT_CANCEL.getSkill()))
+					{
+						npc.setTarget(player);
+						npc.doCast(STUDENT_CANCEL.getSkill());
+					}
+					npc.setScriptValue(0);
+				}
+				break;
+			}
+			case "TIMER":
+			{
+				if (npc != null)
+				{
+					npc.setScriptValue(0);
+				}
+				break;
+			}
+		}
+		return super.onAdvEvent(event, npc, player);
+	}
+	
+	@Override
+	public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isSummon)
+	{
+		final L2Attackable mob = (L2Attackable) npc;
+		
+		switch (npc.getId())
+		{
+			case KNIGHT:
+			{
+				if ((getRandom(100) < 10) && (mob.getMostHated() == player) && mob.checkDoCastConditions(WARRIOR_THRUSTING.getSkill()))
+				{
+					npc.setTarget(player);
+					npc.doCast(WARRIOR_THRUSTING.getSkill());
+				}
+				break;
+			}
+			case CAPTAIN:
+			{
+				if ((getRandom(100) < 20) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.5)) && npc.isScriptValue(0))
+				{
+					if (npc.checkDoCastConditions(KNIGHT_BLESS.getSkill()))
+					{
+						npc.setTarget(npc);
+						npc.doCast(KNIGHT_BLESS.getSkill());
+					}
+					npc.setScriptValue(1);
+					broadcastNpcSay(npc, Say2.ALL, NpcStringId.FOR_THE_GLORY_OF_SOLINA);
+					final L2Attackable knight = (L2Attackable) addSpawn(KNIGHT, npc);
+					attackPlayer(knight, player);
+				}
+				break;
+			}
+			case GUIDE:
+			{
+				if ((getRandom(100) < 3) && (mob.getMostHated() == player) && npc.checkDoCastConditions(ORDEAL_STRIKE.getSkill()))
+				{
+					npc.setTarget(player);
+					npc.doCast(ORDEAL_STRIKE.getSkill());
+				}
+				break;
+			}
+			case SEEKER:
+			{
+				if ((getRandom(100) < 33) && (mob.getMostHated() == player) && npc.checkDoCastConditions(SAVER_STRIKE.getSkill()))
+				{
+					npc.setTarget(npc);
+					npc.doCast(SAVER_STRIKE.getSkill());
+				}
+				break;
+			}
+			case ASCETIC:
+			{
+				if ((mob.getMostHated() == player) && npc.isScriptValue(0))
+				{
+					npc.setScriptValue(1);
+					startQuestTimer("DO_CAST", 20000, npc, player);
+				}
+				break;
+			}
+		}
+		return super.onAttack(npc, player, damage, isSummon);
+	}
+	
+	@Override
+	public boolean onNpcHate(L2Attackable mob, L2Playable playable)
+	{
+		return playable.getActiveWeaponInstance() != null;
+	}
+	
+	@Override
+	public String onAggroRangeEnter(L2Npc npc, L2PcInstance player, boolean isSummon)
+	{
+		if (player.getActiveWeaponInstance() != null)
+		{
+			SkillHolder skill = null;
+			switch (npc.getId())
+			{
+				case GUIDE:
+				{
+					if (getRandom(100) < 3)
+					{
+						skill = LEADER_STRIKE;
+					}
+					break;
+				}
+				case SEEKER:
+				{
+					skill = SAVER_BLEED;
+					break;
+				}
+				case SAVIOR:
+				{
+					skill = LEARNING_MAGIC;
+					break;
+				}
+				case ASCETIC:
+				{
+					if (getRandom(100) < 3)
+					{
+						skill = STUDENT_CANCEL;
+					}
+					
+					if (npc.isScriptValue(0))
+					{
+						npc.setScriptValue(1);
+						startQuestTimer("DO_CAST", 20000, npc, player);
+					}
+					break;
+				}
+			}
+			
+			if ((skill != null) && npc.checkDoCastConditions(skill.getSkill()))
+			{
+				npc.setTarget(player);
+				npc.doCast(skill.getSkill());
+			}
+			
+			if (!npc.isInCombat())
+			{
+				broadcastNpcSay(npc, Say2.NPC_ALL, NpcStringId.YOU_CANNOT_CARRY_A_WEAPON_WITHOUT_AUTHORIZATION);
+			}
+			
+			attackPlayer((L2Attackable) npc, player);
+		}
+		return super.onAggroRangeEnter(npc, player, isSummon);
+	}
+	
+	@Override
+	public String onSkillSee(L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isSummon)
+	{
+		if (skill.hasEffectType(L2EffectType.AGGRESSION) && (targets.length != 0))
+		{
+			for (L2Object obj : targets)
+			{
+				if (obj.equals(npc))
+				{
+					broadcastNpcSay(npc, Say2.NPC_ALL, DIVINITY_MSG[getRandom(DIVINITY_MSG.length)], caster.getName());
+					attackPlayer((L2Attackable) npc, caster);
+					break;
+				}
+			}
+		}
+		return super.onSkillSee(npc, caster, skill, targets, isSummon);
+	}
+	
+	public static void main(String[] args)
+	{
+		new MonasteryOfSilence();
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/sql/game/npcaidata.sql b/L2J_DataPack_BETA/dist/sql/game/npcaidata.sql
index caf1bc40f4..55c2584d15 100644
--- a/L2J_DataPack_BETA/dist/sql/game/npcaidata.sql
+++ b/L2J_DataPack_BETA/dist/sql/game/npcaidata.sql
@@ -2409,8 +2409,8 @@ INSERT INTO `npcaidata` VALUES
 (18906, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, "null", 300, "null", 0, 0, "fighter"), -- Farm Bandit
 (18907, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, "null", 300, "null", 0, 0, "fighter"), -- Beast Devourer
 (18908, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "null", 300, "null", 0, 0, "fighter"), -- Sel Mahum Chef
-(18909, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "n_solina_clan", 300, "monastery_scarecrow", 400, 0, "fighter"), -- Solina Knights
-(18910, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "n_solina_clan", 300, "null", 0, 0, "fighter"), -- Solina Knight Captain
+(18909, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, "n_solina_clan", 300, "monastery_scarecrow", 400, 0, "fighter"), -- Solina Knights
+(18910, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, "n_solina_clan", 300, "null", 0, 0, "fighter"), -- Solina Knight Captain
 (18911, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "null", 300, "null", 0, 0, "fighter"), -- Abbey Treasure Chest
 (18912, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, "null", 300, "dummy_clan", 400, 0, "corpse"), -- Scarecrow
 (18913, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "null", 300, "null", 0, 0, "fighter"), -- Furnace
@@ -4874,11 +4874,11 @@ INSERT INTO `npcaidata` VALUES
 (22786, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "xel_private_clan", 400, "null", 0, 0, "fighter"), -- Sel Mahum Squad Leader
 (22787, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "xel_private_clan", 400, "null", 0, 0, "fighter"), -- Sel Mahum Squad Leader
 (22788, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "xel_private_clan", 400, "null", 0, 0, "fighter"), -- Sel Mahum Squad Leader
-(22789, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Guide Solina
-(22790, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Seeker Solina
-(22791, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Savior Solina
-(22792, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Disciple Solina
-(22793, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Ascetic Solina
+(22789, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Guide Solina
+(22790, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Seeker Solina
+(22791, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Savior Solina
+(22792, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Disciple Solina
+(22793, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, "solina_n_clan", 300, "null", 0, 0, "balanced"), -- Ascetic Solina
 (22794, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, "divine_n_clan", 300, "null", 0, 0, "balanced"), -- Divinity Judge
 (22795, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, "divine_n_clan", 300, "null", 0, 0, "balanced"), -- Divinity Manager
 (22796, 7, 15, 0, 300, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 600, 0, "divine_n_clan", 300, "null", 0, 0, "balanced"), -- Divinity Supervisor
-- 
GitLab