Jelajahi Sumber

Quest 309 For A Good Cause update & rewrite to java thanks to nonom, Belgarion and Zoey76

Rumen Nikiforov 13 tahun lalu
induk
melakukan
9d1789046d
26 mengubah file dengan 445 tambahan dan 190 penghapusan
  1. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts.cfg
  2. 8 0
      L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Disablers.java
  3. 0 9
      L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-10.htm
  4. 0 9
      L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-11.htm
  5. 0 150
      L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/__init__.py
  6. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-00.htm
  7. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-01.htm
  8. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-02.htm
  9. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-03.htm
  10. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-04.htm
  11. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-05.htm
  12. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-06.htm
  13. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-07.htm
  14. 2 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-08.htm
  15. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-09.htm
  16. 31 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-10.htm
  17. 31 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-11.htm
  18. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-12.htm
  19. 2 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-13.htm
  20. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-14.htm
  21. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-15.htm
  22. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-16.htm
  23. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-17.htm
  24. 313 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/Q309_ForAGoodCause.java
  25. 3 1
      L2J_DataPack_BETA/dist/game/data/stats/items/09800-09899.xml
  26. 54 18
      L2J_DataPack_BETA/dist/game/data/stats/items/13500-13599.xml

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts.cfg

@@ -479,7 +479,7 @@ quests/303_CollectArrowheads/__init__.py
 quests/306_CrystalOfFireice/__init__.py
 quests/Q307_ControlDeviceOfTheGiants/Q307_ControlDeviceOfTheGiants.java
 quests/308_ReedFieldMaintenance/__init__.py
-quests/309_ForAGoodCause/__init__.py
+quests/Q309_ForAGoodCause/Q309_ForAGoodCause.java
 quests/310_OnlyWhatRemains/__init__.py
 quests/311_ExpulsionOfEvilSpirits/__init__.py
 quests/312_TakeAdvantageOfTheCrisis/__init__.py

+ 8 - 0
L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Disablers.java

@@ -75,6 +75,7 @@ public class Disablers implements ISkillHandler
 	 * 
 	 * @see com.l2jserver.gameserver.handler.ISkillHandler#useSkill(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.L2Skill, com.l2jserver.gameserver.model.L2Object[])
 	 */
+	@Override
 	public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
 	{
 		L2SkillType type = skill.getSkillType();
@@ -167,6 +168,12 @@ public class Disablers implements ISkillHandler
 				}
 				case ROOT:
 				case DISARM:
+				{
+					if (target.getActiveWeaponItem() != null && target.getActiveWeaponItem().isForceEquip())
+					{
+						return;
+					}
+				}
 				case STUN:
 				{
 					if (Formulas.calcSkillReflect(target, skill) == Formulas.SKILL_REFLECT_SUCCEED)
@@ -723,6 +730,7 @@ public class Disablers implements ISkillHandler
 	 * 
 	 * @see com.l2jserver.gameserver.handler.ISkillHandler#getSkillIds()
 	 */
+	@Override
 	public L2SkillType[] getSkillIds()
 	{
 		return SKILL_IDS;

+ 0 - 9
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-10.htm

@@ -1,9 +0,0 @@
-<html><body>Apprentice Atra:<br>
-You must be in a hurry. Anyway, the reward items are as follows: You can choose an item of your choice if you have enough Mucrokian Hide or Contaminated Mucrokian Hide.<br>
-Contaminated Mucrokian Hide will be double the price of the other hides. Except, Contaminated Mucrokian Hide will be settled first during the settlement.<br>
-What would you like?<br>
-<a action="bypass -h Quest 309_ForAGoodCause 346">Recipe - Sealed Dynasty Earring(70%)(Requires 346 Mucrokian Hides)</a><br>
-<a action="bypass -h Quest 309_ForAGoodCause 462">Recipe - Sealed Dynasty Necklace(70%)(Requires 462 Mucrokian Hides)</a><br>
-<a action="bypass -h Quest 309_ForAGoodCause 232">Recipe - Sealed Dynasty Ring(70%)(Requires 232 Mucrokian Hides)</a><br>
-<a action="bypass -h Quest 309_ForAGoodCause 372">Recipe - Sealed Dynasty Sigil(60%)(Requires 372 Mucrokian Hides)</a>
-</body></html>

+ 0 - 9
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-11.htm

@@ -1,9 +0,0 @@
-<html><body>Apprentice Atra:<br>
-You can choose an item of your choice if you have enough Mucrokian Hides or Contaminated Mucrokian Hides.<br>
-Contaminated Mucrokian Hide are worth more and count as much as double of a normal Mucrokian Hide. In fact, we tend to favor those more and they will be deducted first those first before accepting normal Mucrokian Hides.<br>
-What would you like?<br>
-<a action="bypass -h Quest 309_ForAGoodCause 288">Recipe - Sealed Dynasty Earring(70%)(Requires 288 Mucrokian Hides)</a><br>
-<a action="bypass -h Quest 309_ForAGoodCause 384">Recipe - Sealed Dynasty Necklace(70%)(Requires 384 Mucrokian Hides)</a><br>
-<a action="bypass -h Quest 309_ForAGoodCause 192">Recipe - Sealed Dynasty Ring(70%)(Requires 192 Mucrokian Hides)</a><br>
-<a action="bypass -h Quest 309_ForAGoodCause 310">Recipe - Sealed Dynasty Sigil(60%)(Requires 310 Mucrokian Hides)</a>
-</body></html>

+ 0 - 150
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/__init__.py

@@ -1,150 +0,0 @@
-#Created by Bloodshed
-import sys
-from com.l2jserver.gameserver.model.quest			import State
-from com.l2jserver.gameserver.model.quest			import QuestState
-from com.l2jserver.gameserver.model.quest.jython	import QuestJython as JQuest
-
-qn = "309_ForAGoodCause"
-
-ATRA	= 32647
-
-MUCROKIANS				= [22650, 22651, 22652, 22653]
-MUCROKIAN_FANATIC		= 22650
-MUCROKIAN_ASCETIC		= 22651
-MUCROKIAN_SAVIOR		= 22652
-MUCROKIAN_PREACHER		= 22653
-CONTAMINATED_MUCROKIAN	= 22654
-CHANGED_MUCROKIAN		= 22655
-
-MUCROKIAN_HIDE			= 14873
-FALLEN_MUCROKIAN_HIDE	= 14874
-
-MUCROKIAN_HIDE_CHANCE	= 50
-FALLEN_HIDE_CHANCE		= 50
-
-REC_DYNASTY_EARRINGS_70	= 9985
-REC_DYNASTY_NECKLACE_70	= 9986
-REC_DYNASTY_RING_70		= 9987
-REC_DYNASTY_SIGIL_60	= 10115
-
-class Quest (JQuest) :
-
-	def __init__(self,id,name,descr):
-		JQuest.__init__(self,id,name,descr)
-		self.questItemIds = [MUCROKIAN_HIDE, FALLEN_MUCROKIAN_HIDE]
-
-	def onRecipeExchangeRequest (self,event,st,recipe) :
-		h1 = st.getQuestItemsCount(MUCROKIAN_HIDE)
-		h2 = st.getQuestItemsCount(FALLEN_MUCROKIAN_HIDE)
-		if h2 >= 1:
-			if h2 >= (int(event)/2) :
-				st.giveItems(recipe,1)
-				st.takeItems(FALLEN_MUCROKIAN_HIDE,(int(event)/2))
-				st.playSound("ItemSound.quest_finish")
-				return "32647-16.htm"
-			else :
-				h1a = int(event) - (h2*2)
-				if h1 >= h1a :
-					st.giveItems(recipe,1)
-					st.takeItems(FALLEN_MUCROKIAN_HIDE,h2)
-					st.takeItems(MUCROKIAN_HIDE,h1a)
-					st.playSound("ItemSound.quest_finish")
-					return "32647-16.htm"
-				else :
-					return "32647-15.htm"
-		elif h1 >= int(event) :
-			st.giveItems(recipe,1)
-			st.takeItems(MUCROKIAN_HIDE,int(event))
-			st.playSound("ItemSound.quest_finish")
-			return "32647-16.htm"
-		else :
-			return "32647-15.htm"
-
-	def onAdvEvent (self,event,npc,player) :
-		htmltext = event
-		st = player.getQuestState(qn)
-		qs = player.getQuestState("239_WontYouJoinUs")
-		if not st : return
-		if event == "32647-05.htm" :
-			self.questItemIds = [MUCROKIAN_HIDE, FALLEN_MUCROKIAN_HIDE]
-			st.set("cond","1")
-			st.setState(State.STARTED)
-			st.playSound("ItemSound.quest_accept")
-		elif event == "claimreward" :
-			if qs :
-				if qs.getState() == State.COMPLETED :
-					htmltext = "32647-11.htm"
-				else :
-					htmltext = "32647-10.htm"
-			else :
-				htmltext = "32647-09.htm"
-		elif event.isdigit() :
-			if int(event) == 288 or int(event) == 346 :
-				htmltext = self.onRecipeExchangeRequest(event,st,REC_DYNASTY_EARRINGS_70)
-			elif int(event) == 384 or int(event) == 462 :
-				htmltext = self.onRecipeExchangeRequest(event,st,REC_DYNASTY_NECKLACE_70)
-			elif int(event) == 192 or int(event) == 232 :
-				htmltext = self.onRecipeExchangeRequest(event,st,REC_DYNASTY_RING_70)
-			elif int(event) == 310 or int(event) == 372 :
-				htmltext = self.onRecipeExchangeRequest(event,st,REC_DYNASTY_SIGIL_60)
-		elif event == "32647-14.htm" or event == "32647-07.htm" :
-			self.questItemIds = [] #NPC Quest Cancel does not remove the collected Quest Items.
-			st.exitQuest(1)
-			st.playSound("ItemSound.quest_finish")
-		return htmltext
-
-	def onTalk (self,npc,player) :
-		htmltext = Quest.getNoQuestMsg(player)
-		st = player.getQuestState(qn)
-		if not st : return htmltext
-
-		npcId = npc.getNpcId()
-		cond = st.getInt("cond")
-		qs2 = player.getQuestState("308_ReedFieldMaintenance")
-		if npcId == ATRA :
-			if qs2 and qs2.getState() == State.STARTED :
-				htmltext = "32647-17.htm"
-			elif cond == 0 :
-				if player.getLevel() >= 82 :
-					htmltext = "32647-01.htm"
-				else :
-					htmltext = "32647-00.htm"
-					st.exitQuest(1)
-			elif st.getState() == State.STARTED :
-				if st.getQuestItemsCount(MUCROKIAN_HIDE) >= 1 or st.getQuestItemsCount(FALLEN_MUCROKIAN_HIDE) >= 1:
-					htmltext = "32647-08.htm"
-				else :
-					htmltext = "32647-06.htm"
-		return htmltext
-
-	def onKill(self,npc,player,isPet) :
-		st = player.getQuestState(qn)
-		if not st : return
-		if st.getState() != State.STARTED : return
-		npcId = npc.getNpcId()
-		cond = st.getInt("cond")
-		if cond == 1 and npcId in MUCROKIANS :
-			if st.getRandom(100) < MUCROKIAN_HIDE_CHANCE :
-				st.giveItems(MUCROKIAN_HIDE,1)
-				st.playSound("ItemSound.quest_itemget")
-		elif cond == 1 and npcId == CHANGED_MUCROKIAN :
-			if st.getRandom(100) < FALLEN_HIDE_CHANCE :
-				st.giveItems(FALLEN_MUCROKIAN_HIDE,1)
-				st.playSound("ItemSound.quest_itemget")
-		elif cond == 1 and npcId == CONTAMINATED_MUCROKIAN :
-			if st.getRandom(100) < 10 :
-				st.giveItems(MUCROKIAN_HIDE,1)
-				st.playSound("ItemSound.quest_itemget")
-		return
-
-QUEST		= Quest(309,qn,"For A Good Cause")
-
-QUEST.addStartNpc(ATRA)
-QUEST.addTalkId(ATRA)
-
-QUEST.addKillId(MUCROKIAN_FANATIC)
-QUEST.addKillId(MUCROKIAN_ASCETIC)
-QUEST.addKillId(MUCROKIAN_SAVIOR)
-QUEST.addKillId(MUCROKIAN_PREACHER)
-QUEST.addKillId(CONTAMINATED_MUCROKIAN)
-QUEST.addKillId(CHANGED_MUCROKIAN)

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-00.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-00.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-01.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-01.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-02.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-02.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-03.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-03.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-04.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-04.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-05.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-05.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-06.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-06.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-07.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-07.htm


+ 2 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-08.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-08.htm

@@ -1,6 +1,7 @@
 <html><body>Apprentice Atra:<br>
 Ah, you've finally returned! What would you like to do next?<br>
-<a action="bypass -h Quest 309_ForAGoodCause claimreward">Receive rewards.</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause claimreward">Check reward list.</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause receivepieces">Receive Moirai Robe Set ingredient item (requires 100 Mucrokian skins).</a><br>
 <a action="bypass -h Quest 309_ForAGoodCause 32647-12.htm">Continue with the task.</a><br>
 <a action="bypass -h Quest 309_ForAGoodCause 32647-13.htm">Stop the quest.</a>
 </body></html>

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-09.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-09.htm


+ 31 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-10.htm

@@ -0,0 +1,31 @@
+<html><body>Apprentice Atra:<br>
+You must be in a hurry. Anyway, the reward items are as follows: You can choose an item of your choice if you have enough Mucrokian Hide or Contaminated Mucrokian Hide.<br>
+Contaminated Mucrokian Hide will be double the price of the other hides. Except, Contaminated Mucrokian Hide will be settled first during the settlement.<br>
+What would you like?<br>
+<a action="bypass -h Quest 309_ForAGoodCause 96">Recipe - Sealed Dynasty Earring(70%)(Requires 96 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 192">Recipe - Sealed Dynasty Earring(70%)(Requires 192 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause necklace_128">Recipe - Sealed Dynasty Necklace(70%)(Requires 128 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 256">Recipe - Sealed Dynasty Necklace(70%)(Requires 256 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 64">Recipe - Sealed Dynasty Ring(70%)(Requires 64 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause ring_128">Recipe - Sealed Dynasty Ring(70%)(Requires 128 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 103">Recipe - Sealed Dynasty Sigil(60%)(Requires 103 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 206">Recipe - Sealed Dynasty Sigil(60%)(Requires 206 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause circlet_90">Recipe - Sealed Moirai Circlet (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause circlet_180">Recipe - Sealed Moirai Circlet (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause tunic_90">Recipe - Sealed Moirai Tunic (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause tunic_180">Recipe - Sealed Moirai Tunic (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause stockings_90">Recipe - Sealed Moirai Stockings (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause stockings_180">Recipe - Sealed Moirai Stockings (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause gloves_90">Recipe - Sealed Moirai Gloves (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause gloves_180">Recipe - Sealed Moirai Gloves (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause shoes_90">Recipe - Sealed Moirai Shoes (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause shoes_180">Recipe - Sealed Moirai Shoes (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause sigil_90">Recipe - Sealed Moirai Sigil (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause sigil_180">Recipe - Sealed Moirai Sigil (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause ring_90">Recipe - Sealed Moirai Ring (70%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause ring_180">Recipe - Sealed Moirai Ring (70%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause earring_90">Recipe - Sealed Moirai Earring (70%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause earring_180">Recipe - Sealed Moirai Earring (70%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause necklace_90">Recipe - Sealed Moirai Necklace (70%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause necklace_180">Recipe - Sealed Moirai Necklace (70%)(Requires 180 Mucrokian Hides)</a>
+</body></html>

+ 31 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-11.htm

@@ -0,0 +1,31 @@
+<html><body>Apprentice Atra:<br>
+You can choose an item of your choice if you have enough Mucrokian Hides or Contaminated Mucrokian Hides.<br>
+Contaminated Mucrokian Hide are worth more and count as much as double of a normal Mucrokian Hide. In fact, we tend to favor those more and they will be deducted first those first before accepting normal Mucrokian Hides.<br>
+What would you like?<br>
+<a action="bypass -h Quest 309_ForAGoodCause 96">Recipe - Sealed Dynasty Earring(70%)(Requires 96 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 192">Recipe - Sealed Dynasty Earring(70%)(Requires 192 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause necklace_128">Recipe - Sealed Dynasty Necklace(70%)(Requires 128 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 256">Recipe - Sealed Dynasty Necklace(70%)(Requires 256 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 64">Recipe - Sealed Dynasty Ring(70%)(Requires 64 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause ring_128">Recipe - Sealed Dynasty Ring(70%)(Requires 128 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 103">Recipe - Sealed Dynasty Sigil(60%)(Requires 103 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause 206">Recipe - Sealed Dynasty Sigil(60%)(Requires 206 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause circlet_90">Recipe - Sealed Moirai Circlet (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause circlet_180">Recipe - Sealed Moirai Circlet (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause tunic_90">Recipe - Sealed Moirai Tunic (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause tunic_180">Recipe - Sealed Moirai Tunic (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause stockings_90">Recipe - Sealed Moirai Stockings (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause stockings_180">Recipe - Sealed Moirai Stockings (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause gloves_90">Recipe - Sealed Moirai Gloves (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause gloves_180">Recipe - Sealed Moirai Gloves (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause shoes_90">Recipe - Sealed Moirai Shoes (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause shoes_180">Recipe - Sealed Moirai Shoes (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause sigil_90">Recipe - Sealed Moirai Sigil (60%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause sigil_180">Recipe - Sealed Moirai Sigil (60%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause ring_90">Recipe - Sealed Moirai Ring (70%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause ring_180">Recipe - Sealed Moirai Ring (70%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause earring_90">Recipe - Sealed Moirai Earring (70%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause earring_180">Recipe - Sealed Moirai Earring (70%)(Requires 180 Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause necklace_90">Recipe - Sealed Moirai Necklace (70%)(Requires 90 Fallen Mucrokian Hides)</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause necklace_180">Recipe - Sealed Moirai Necklace (70%)(Requires 180 Mucrokian Hides)</a>
+</body></html>

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-12.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-12.htm


+ 2 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-13.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-13.htm

@@ -1,5 +1,6 @@
 <html><body>Apprentice Atra:<br>
 How about receiving the reward before you quit? I'm just letting you know since there is an evidence of hunting.<br>
-<a action="bypass -h Quest 309_ForAGoodCause claimreward">Submit proofs.</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause claimreward">Check reward list.</a><br>
+<a action="bypass -h Quest 309_ForAGoodCause receivepiece">Receive Moirai Robe Set ingredient item (requires 100 Mucrokian skins).</a><br>
 <a action="bypass -h Quest 309_ForAGoodCause 32647-14.htm">Just quit the task.</a>
 </body></html>

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-14.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-14.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-15.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-15.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-16.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-16.htm


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/309_ForAGoodCause/32647-17.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/32647-17.htm


+ 313 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q309_ForAGoodCause/Q309_ForAGoodCause.java

@@ -0,0 +1,313 @@
+/*
+ * 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 quests.Q309_ForAGoodCause;
+
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+import com.l2jserver.gameserver.network.serverpackets.RadarControl;
+import com.l2jserver.gameserver.util.Util;
+import com.l2jserver.util.Rnd;
+
+/**
+ * For A Good Cause (309)
+ * 2011/09/30 Based on official server Naia
+ * Thanks to Belgarion
+ * 
+ * @author nonom, Zoey76
+ */
+public class Q309_ForAGoodCause extends Quest
+{
+	private static final String qn = "309_ForAGoodCause";
+	
+	// NPC's
+	private static final int ATRA	= 32647;
+	
+	// Mobs
+	private static final int 	CONTAMINATED_MUCROKIAN	= 22654;
+	private static final int 	CHANGED_MUCROKIAN		= 22655;
+	private static final int[] 	MUCROKIANS	= {	22650, 22651, 22652, 22653 };
+	
+	// Quest Items
+	private static final int 	MUCROKIAN_HIDE			= 14873;
+	private static final int 	FALLEN_MUCROKIAN_HIDE	= 14874;
+
+	private static final int 	MUCROKIAN_HIDE_CHANCE	= 50; 
+	private static final int 	FALLEN_HIDE_CHANCE		= 50; 
+	
+	// Rewards	
+	private static final int 	REC_DYNASTY_EARRINGS_70	= 9985;
+	private static final int	REC_DYNASTY_NECKLACE_70	= 9986;
+	private static final int 	REC_DYNASTY_RING_70		= 9987;
+	private static final int 	REC_DYNASTY_SIGIL_60	= 10115;
+	
+	private static final int	REC_MOIRAI_CIRCLET_60	= 15777;
+	private static final int	REC_MOIRAI_TUNIC_60		= 15780;
+	private static final int	REC_MOIRAI_STOCKINGS_60	= 15783;
+	private static final int	REC_MOIRAI_GLOVES_60	= 15786;
+	private static final int	REC_MOIRAI_SHOES_60		= 15789;
+	private static final int	REC_MOIRAI_SIGIL_60		= 15790;
+	private static final int 	REC_MOIRAI_EARRING_70	= 15814;
+	private static final int 	REC_MOIRAI_NECKLACE_70	= 15813;
+	private static final int 	REC_MOIRAI_RING_70		= 15812;
+	
+	private static final int[]	MOIRAI_PIECES = {
+		15647,15650,15653,15656,15659,15692,15772,15773,15774
+	};
+	
+
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = event;
+		QuestState st = player.getQuestState(qn);
+		QuestState qs = player.getQuestState("239_WontYouJoinUs");
+		
+		if (st == null)
+			return htmltext;
+	
+		if (event.equalsIgnoreCase("32647-05.htm"))
+		{
+			st.setState(State.STARTED);
+			st.set("cond", "1");
+			st.playSound("ItemSound.quest_accept");
+			player.sendPacket(new RadarControl(0, 2, 77325, 205773, -3432));
+		}
+		else if (event.equalsIgnoreCase("claimreward"))
+		{
+			if (qs != null)
+				if (qs.isCompleted())
+					htmltext = "32647-11.htm";
+				else
+					htmltext = "32647-10.htm";
+			
+			htmltext = "32647-09.htm";
+		}
+		else if (event.equalsIgnoreCase("receivepieces"))
+		{
+			htmltext = onPiecesExchangeRequest(st, MOIRAI_PIECES[Rnd.get(MOIRAI_PIECES.length-1)], 100);
+		}
+		else if(Util.isDigit(event))
+		{
+			int val = Integer.parseInt(event);
+			switch (val)
+			{
+				case 96:
+					htmltext = onRecipeExchangeRequest(st, REC_DYNASTY_EARRINGS_70, FALLEN_MUCROKIAN_HIDE, Integer.parseInt(event));
+					break;
+				case 192:
+					htmltext = onRecipeExchangeRequest(st, REC_DYNASTY_EARRINGS_70, MUCROKIAN_HIDE, Integer.parseInt(event));
+					break;
+				case 256:
+					htmltext = onRecipeExchangeRequest(st, REC_DYNASTY_NECKLACE_70, MUCROKIAN_HIDE, Integer.parseInt(event));
+					break;
+				case 64:
+					htmltext = onRecipeExchangeRequest(st, REC_DYNASTY_RING_70, FALLEN_MUCROKIAN_HIDE, Integer.parseInt(event));
+					break;	
+				case 103:
+					htmltext = onRecipeExchangeRequest(st, REC_DYNASTY_SIGIL_60, FALLEN_MUCROKIAN_HIDE, Integer.parseInt(event));
+					break;
+				case 206:
+					htmltext = onRecipeExchangeRequest(st, REC_DYNASTY_SIGIL_60, MUCROKIAN_HIDE, Integer.parseInt(event));
+					break;
+			}
+		}
+		else if(event.startsWith("circlet"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_CIRCLET_60, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_CIRCLET_60, MUCROKIAN_HIDE, 180);
+		}
+		else if(event.startsWith("stockings"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_STOCKINGS_60, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_STOCKINGS_60, MUCROKIAN_HIDE, 180);
+		}
+		else if(event.startsWith("tunic"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_TUNIC_60, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_TUNIC_60, FALLEN_MUCROKIAN_HIDE, 180);
+		}
+		else if(event.startsWith("gloves"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_GLOVES_60, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_GLOVES_60, MUCROKIAN_HIDE, 180);
+		}
+		else if(event.startsWith("shoes"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_SHOES_60, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_SHOES_60, MUCROKIAN_HIDE, 180);
+		}
+		else if(event.startsWith("sigil"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_SIGIL_60, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_SIGIL_60, MUCROKIAN_HIDE, 180);
+		}
+		else if(event.startsWith("earring"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_EARRING_70, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_EARRING_70, MUCROKIAN_HIDE, 180);
+		}
+		else if(event.startsWith("necklace"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_NECKLACE_70, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_NECKLACE_70, MUCROKIAN_HIDE, 180);
+			else if (event.endsWith("128"))
+				htmltext = onRecipeExchangeRequest(st, REC_DYNASTY_NECKLACE_70, MUCROKIAN_HIDE, 128);
+		}
+		else if(event.startsWith("ring"))
+		{
+			if (event.endsWith("90"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_RING_70, FALLEN_MUCROKIAN_HIDE, 90);
+			else if (event.endsWith("180"))
+				htmltext = onRecipeExchangeRequest(st, REC_MOIRAI_RING_70, MUCROKIAN_HIDE, 180);
+			else if (event.endsWith("128"))
+				htmltext = onRecipeExchangeRequest(st, REC_DYNASTY_RING_70, MUCROKIAN_HIDE, 128);
+		}
+		else if (event.equalsIgnoreCase("32647-14.htm") || event.equalsIgnoreCase("32647-07.htm"))
+		{
+			st.exitQuest(true);
+			st.playSound("ItemSound.quest_finish");
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = getNoQuestMsg(player);
+		QuestState st = player.getQuestState(qn);
+		QuestState _prev = player.getQuestState("308_ReedFieldMaintenance");
+		
+		if (st == null)
+			return htmltext;
+		
+		if (npc.getNpcId() == ATRA)
+		{
+			if ((_prev!=null) && _prev.isStarted()){
+				htmltext = "32647-17.htm";
+			}else if (st.isStarted()){
+				if(st.getQuestItemsCount(MUCROKIAN_HIDE) >= 1 || st.getQuestItemsCount(FALLEN_MUCROKIAN_HIDE) >= 1)
+					htmltext = "32647-08.htm";
+				else
+					htmltext = "32647-06.htm";
+			}else{
+				if(player.getLevel() >= 82){
+					htmltext = "32647-01.htm";
+				}else{
+					htmltext = "32647-00.htm";
+					st.exitQuest(true);
+				}
+			}
+		}
+		return htmltext;
+	}
+	
+	public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
+	{
+		QuestState st = player.getQuestState(qn);
+		if (st == null)
+			return null;
+		
+		if(st.getInt("cond") == 1)
+		{
+			if (Util.contains(MUCROKIANS,npc.getNpcId()))
+				if (st.getRandom(100) < MUCROKIAN_HIDE_CHANCE)
+				{
+					st.giveItems(MUCROKIAN_HIDE,1);
+					st.playSound("ItemSound.quest_itemget");
+				}
+			else if (npc.getNpcId()==CHANGED_MUCROKIAN)
+				if (st.getRandom(100) < FALLEN_HIDE_CHANCE)
+				{
+					st.giveItems(FALLEN_MUCROKIAN_HIDE,1);
+					st.playSound("ItemSound.quest_itemget");
+				}
+			else if (npc.getNpcId()==CONTAMINATED_MUCROKIAN)
+				if (st.getRandom(100) < 10)
+				{
+					st.giveItems(MUCROKIAN_HIDE,1);
+					st.playSound("ItemSound.quest_itemget");
+				}
+		}
+		return super.onKill(npc, player, isPet);
+	}
+	
+	private String onPiecesExchangeRequest(QuestState st, int pieces,int event)
+	{
+		long h1 = st.getQuestItemsCount(MUCROKIAN_HIDE);
+		if (h1 >= event)
+		{
+			st.giveItems(pieces,Rnd.get(1,4));
+			st.takeItems(MUCROKIAN_HIDE,event);
+			st.playSound("ItemSound.quest_finish");
+			return "32647-16.htm";
+		}
+		else
+		{
+			return "32647-15.htm";
+		}
+	}
+	
+	private String onRecipeExchangeRequest(QuestState st, int recipe, int takeid, int quanty)
+	{
+		long h1 = st.getQuestItemsCount(takeid);
+		if (h1 >= quanty)
+		{
+			st.giveItems(recipe, 1);
+			st.takeItems(takeid, quanty);
+			st.playSound("ItemSound.quest_finish");
+			return "32647-16.htm";
+		}
+		else
+		{
+			return "32647-15.htm";
+		}
+	}
+	
+	public Q309_ForAGoodCause(int id, String name, String descr)
+	{
+		super(id, name, descr);
+		
+		addStartNpc(ATRA);
+		addTalkId(ATRA);
+		
+		for(int _mob : MUCROKIANS)
+			addKillId(_mob);
+		
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q309_ForAGoodCause(309, "309_ForAGoodCause", "For A Good Cause");
+	}
+}

+ 3 - 1
L2J_DataPack_BETA/dist/game/data/stats/items/09800-09899.xml

@@ -208,7 +208,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="3318-1;3358-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>

+ 54 - 18
L2J_DataPack_BETA/dist/game/data/stats/items/13500-13599.xml

@@ -370,7 +370,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -391,7 +393,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -412,7 +416,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -433,7 +439,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -454,7 +462,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -475,7 +485,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -496,7 +508,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -517,7 +531,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -538,7 +554,9 @@
 		<set name="is_dropable" val="false" />
 		<set name="is_destroyable" val="false" />
 		<set name="is_sellable" val="false" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -874,7 +892,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -897,7 +917,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -920,7 +942,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -943,7 +967,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -966,7 +992,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -989,7 +1017,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -1012,7 +1042,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -1035,7 +1067,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>
@@ -1058,7 +1092,9 @@
 		<set name="is_sellable" val="false" />
 		<set name="is_depositable" val="false" />
 		<set name="item_skill" val="847-1;846-1" />
-		<set name="item_equip_option" val="{no_attack;only_use_weapon_skill;force_equip}" />
+		<set name="isForceEquip" val="true" />
+		<set name="isAttackWeapon" val="false" />
+		<set name="useWeaponSkillsOnly" val="true" />
 		<for>
 			<set order="0x08" stat="pAtkSpd" val="325" />
 		</for>