Проблема с квестом взросление дракончика - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 28.01.2016, 20:11   #1
Пользователь

Автор темы (Топик Стартер) Проблема с квестом взросление дракончика

Здравствуйте проблема с квестом взросление дракончика.
фея Mimyu дает мне 4шт Лист Феи и я иду бить дракончиком деревья.
После некоторого времени дерево должно у меня забрать Лист Феи
но этого не происходит. Били 2 часа дерево и нечего не произошло и не один раз пробовали, и другие деревья но результат тот же.
Помогите разобраться пожалуйста.
Сборка grind-team
вот скрипт. _421_LittleWingAdventures.java
package quests;
 
import java.util.ArrayList;
import java.util.List;
 
import core.commons.dao.JdbcEntityState;
import core.commons.threading.RunnableImpl;
import core.commons.util.Rnd;
import core.gameserver.ThreadPoolManager;
import core.gameserver.ai.CtrlEvent;
import core.gameserver.data.xml.holder.NpcHolder;
import core.gameserver.model.Playable;
import core.gameserver.model.Player;
import core.gameserver.model.Summon;
import core.gameserver.model.World;
import core.gameserver.model.SimpleSpawner;
import core.gameserver.model.instances.NpcInstance;
import core.gameserver.model.items.ItemInstance;
import core.gameserver.model.quest.Quest;
import core.gameserver.model.quest.QuestState;
import core.gameserver.network.l2.s2c.InventoryUpdate;
import core.gameserver.scripts.Functions;
import core.gameserver.scripts.ScriptFile;
import core.gameserver.tables.PetDataTable;
import core.gameserver.tables.PetDataTable.L2Pet;
import core.gameserver.templates.npc.NpcTemplate;
import core.gameserver.utils.Location;
 
 
/*
 * Author DRiN, Last Updated: 2008/04/13
 */
public class _421_LittleWingAdventures extends Quest implements ScriptFile
{
	// NPCs
	private static int Cronos = 30610;
	private static int Mimyu = 30747;
	// Mobs
	private static int Fairy_Tree_of_Wind = 27185;
	private static int Fairy_Tree_of_Star = 27186;
	private static int Fairy_Tree_of_Twilight = 27187;
	private static int Fairy_Tree_of_Abyss = 27188;
	private static int Soul_of_Tree_Guardian = 27189;
	// Items
	private static int Dragonflute_of_Wind = L2Pet.HATCHLING_WIND.getControlItemId();
	private static int Dragonflute_of_Star = L2Pet.HATCHLING_STAR.getControlItemId();
	private static int Dragonflute_of_Twilight = L2Pet.HATCHLING_TWILIGHT.getControlItemId();
	private static int Dragon_Bugle_of_Wind = L2Pet.STRIDER_WIND.getControlItemId();
	private static int Dragon_Bugle_of_Star = L2Pet.STRIDER_STAR.getControlItemId();
	private static int Dragon_Bugle_of_Twilight = L2Pet.STRIDER_TWILIGHT.getControlItemId();
	// Quest Items
	private static int Fairy_Leaf = 4325;
 
	private static int Min_Fairy_Tree_Attaks = 110;
 
	public _421_LittleWingAdventures()
	{
		super(false);
		addStartNpc(Cronos);
		addTalkId(Mimyu);
		addKillId(Fairy_Tree_of_Wind);
		addKillId(Fairy_Tree_of_Star);
		addKillId(Fairy_Tree_of_Twilight);
		addKillId(Fairy_Tree_of_Abyss);
		addAttackId(Fairy_Tree_of_Wind);
		addAttackId(Fairy_Tree_of_Star);
		addAttackId(Fairy_Tree_of_Twilight);
		addAttackId(Fairy_Tree_of_Abyss);
		addQuestItem(Fairy_Leaf);
	}
 
	private static ItemInstance GetDragonflute(QuestState st)
	{
		List<ItemInstance> Dragonflutes = new ArrayList<ItemInstance>();
		for(ItemInstance item : st.getPlayer().getInventory().getItems())
			if(item != null && (item.getItemId() == Dragonflute_of_Wind || item.getItemId() == Dragonflute_of_Star || item.getItemId() == Dragonflute_of_Twilight))
				Dragonflutes.add(item);
 
		if(Dragonflutes.isEmpty())
			return null;
		if(Dragonflutes.size() == 1)
			return Dragonflutes.get(0);
		if(st.getState() == CREATED)
			return null;
 
		int dragonflute_id = st.getInt("dragonflute");
 
		for(ItemInstance item : Dragonflutes)
			if(item.getObjectId() == dragonflute_id)
				return item;
 
		return null;
	}
 
	private static boolean HatchlingSummoned(QuestState st, boolean CheckObjID)
	{
		Summon _pet = st.getPlayer().getPet();
		if(_pet == null)
			return false;
		if(CheckObjID)
		{
			int dragonflute_id = st.getInt("dragonflute");
			if(dragonflute_id == 0)
				return false;
			if(_pet.getControlItemObjId() != dragonflute_id)
				return false;
		}
		ItemInstance dragonflute = GetDragonflute(st);
		if(dragonflute == null)
			return false;
		if(PetDataTable.getControlItemId(_pet.getNpcId()) != dragonflute.getItemId())
			return false;
		return true;
	}
 
	private static boolean CheckTree(QuestState st, int Fairy_Tree_id)
	{
		return st.getInt(String.valueOf(Fairy_Tree_id)) == 1000000;
	}
 
	@Override
	public String onEvent(String event, QuestState st, NpcInstance npc)
	{
		int _state = st.getState();
		ItemInstance dragonflute = GetDragonflute(st);
		int dragonflute_id = st.getInt("dragonflute");
		int cond = st.getCond();
 
		if(event.equalsIgnoreCase("30610_05.htm") && _state == CREATED)
		{
			st.setState(STARTED);
			st.setCond(1);
			st.playSound(SOUND_ACCEPT);
		}
		else if((event.equalsIgnoreCase("30747_03.htm") || event.equalsIgnoreCase("30747_04.htm")) && _state == STARTED && cond == 1)
		{
			if(dragonflute == null)
				return "noquest";
			if(dragonflute.getObjectId() != dragonflute_id)
			{
				if(Rnd.chance(10))
				{
					st.takeItems(dragonflute.getItemId(), 1);
					st.playSound(SOUND_FINISH);
					st.exitCurrentQuest(true);
				}
				return "30747_00.htm";
			}
			if(!HatchlingSummoned(st, false))
				return event.equalsIgnoreCase("30747_04.htm") ? "30747_04a.htm" : "30747_02.htm";
			if(event.equalsIgnoreCase("30747_04.htm"))
			{
				st.setCond(2);
				st.takeItems(Fairy_Leaf, -1);
				st.giveItems(Fairy_Leaf, 4);
				st.playSound(SOUND_MIDDLE);
			}
		}
 
		return event;
	}
 
	@Override
	public String onTalk(NpcInstance npc, QuestState st)
	{
		int _state = st.getState();
		int npcId = npc.getNpcId();
		int cond = st.getCond();
		ItemInstance dragonflute = GetDragonflute(st);
		int dragonflute_id = st.getInt("dragonflute");
 
		if(_state == CREATED)
		{
			if(npcId != Cronos)
				return "noquest";
			if(st.getPlayer().getLevel() < 45)
			{
				st.exitCurrentQuest(true);
				return "30610_01.htm";
			}
			if(dragonflute == null)
			{
				st.exitCurrentQuest(true);
				return "30610_02.htm";
			}
			if(dragonflute.getEnchantLevel() < 55)
			{
				st.exitCurrentQuest(true);
				return "30610_03.htm";
			}
			st.setCond(0);
			st.set("dragonflute", String.valueOf(dragonflute.getObjectId()));
			return "30610_04.htm";
		}
 
		if(_state != STARTED)
			return "noquest";
 
		if(npcId == Cronos)
		{
			if(dragonflute == null)
				return "30610_02.htm";
			return dragonflute.getObjectId() == dragonflute_id ? "30610_07.htm" : "30610_06.htm";
		}
 
		if(npcId == Mimyu)
		{
			if(st.getQuestItemsCount(Dragon_Bugle_of_Wind) + st.getQuestItemsCount(Dragon_Bugle_of_Star) + st.getQuestItemsCount(Dragon_Bugle_of_Twilight) > 0)
				return "30747_00b.htm";
			if(dragonflute == null)
				return "noquest";
			if(cond == 1)
				return "30747_01.htm";
			if(cond == 2)
			{
				if(!HatchlingSummoned(st, false))
					return "30747_09.htm";
				if(st.getQuestItemsCount(Fairy_Leaf) == 0)
				{
					st.playSound(SOUND_FINISH);
					st.exitCurrentQuest(true);
					return "30747_11.htm";
				}
				return "30747_10.htm";
			}
			if(cond == 3)
			{
				if(dragonflute.getObjectId() != dragonflute_id)
					return "30747_00a.htm";
				if(st.getQuestItemsCount(Fairy_Leaf) > 0)
				{
					st.playSound(SOUND_FINISH);
					st.exitCurrentQuest(true);
					return "30747_11.htm";
				}
				if(!(CheckTree(st, Fairy_Tree_of_Wind) && CheckTree(st, Fairy_Tree_of_Star) && CheckTree(st, Fairy_Tree_of_Twilight) && CheckTree(st, Fairy_Tree_of_Abyss)))
				{
					st.playSound(SOUND_FINISH);
					st.exitCurrentQuest(true);
					return "30747_11.htm";
				}
				if(st.getInt("welldone") == 0)
				{
					if(!HatchlingSummoned(st, false))
						return "30747_09.htm";
					st.set("welldone", "1");
					return "30747_12.htm";
				}
				if(HatchlingSummoned(st, false) || st.getPlayer().getPet() != null)
					return "30747_13a.htm";
 
				dragonflute.setItemId(Dragon_Bugle_of_Wind + dragonflute.getItemId() - Dragonflute_of_Wind);
				dragonflute.setJdbcState(JdbcEntityState.UPDATED);
				dragonflute.update();
				st.getPlayer().sendPacket(new InventoryUpdate().addModifiedItem(dragonflute));
 
				st.playSound(SOUND_FINISH);
				st.exitCurrentQuest(true);
				return "30747_13.htm";
			}
		}
 
		return "noquest";
	}
 
	/*
	 * благодаря ai.Quest421FairyTree вызовется только при атаке от L2PetInstance
	 */
	@Override
	public String onAttack(NpcInstance npc, QuestState st)
	{
		if(st.getState() != STARTED || st.getCond() != 2 || !HatchlingSummoned(st, true) || st.getQuestItemsCount(Fairy_Leaf) == 0)
			return null;
 
		String npcID = String.valueOf(npc.getNpcId());
		Integer attaked_times = st.getInt(npcID);
		if(CheckTree(st, npc.getNpcId()))
			return null;
		if(attaked_times > Min_Fairy_Tree_Attaks)
		{
			st.set(npcID, "1000000");
			Functions.npcSay(npc, "Give me the leaf!");
			st.takeItems(Fairy_Leaf, 1);
			if(CheckTree(st, Fairy_Tree_of_Wind) && CheckTree(st, Fairy_Tree_of_Star) && CheckTree(st, Fairy_Tree_of_Twilight) && CheckTree(st, Fairy_Tree_of_Abyss))
			{
				st.setCond(3);
				st.playSound(SOUND_MIDDLE);
			}
			else
				st.playSound(SOUND_ITEMGET);
		}
		else
			st.set(npcID, String.valueOf(attaked_times + 1));
		return null;
	}
 
	@Override
	public String onKill(NpcInstance npc, QuestState st)
	{
		ThreadPoolManager.getInstance().schedule(new GuardiansSpawner(npc, st, Rnd.get(15, 20)), 1000);
		return null;
	}
 
	@Override
	public void onLoad()
	{
	}
 
	@Override
	public void onReload()
	{
	}
 
	@Override
	public void onShutdown()
	{
	}
 
	public class GuardiansSpawner extends RunnableImpl
	{
		private SimpleSpawner _spawn = null;
		private String agressor;
		private String agressors_pet = null;
		private List<String> agressors_party = null;
		private int tiks = 0;
 
		public GuardiansSpawner(NpcInstance npc, QuestState st, int _count)
		{
			NpcTemplate template = NpcHolder.getInstance().getTemplate(Soul_of_Tree_Guardian);
			if(template == null)
				return;
			try
			{
				_spawn = new SimpleSpawner(template);
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
			for(int i = 0; i < _count; i++)
			{
				_spawn.setLoc(Location.findPointToStay(npc, 50, 200));
				_spawn.setHeading(Rnd.get(0, 0xFFFF));
				_spawn.setAmount(1);
				_spawn.doSpawn(true);
 
				agressor = st.getPlayer().getName();
				if(st.getPlayer().getPet() != null)
					agressors_pet = st.getPlayer().getPet().getName();
				if(st.getPlayer().getParty() != null)
				{
					agressors_party = new ArrayList<String>();
					for(Player _member : st.getPlayer().getParty().getPartyMembers())
						if(!_member.equals(st.getPlayer()))
							agressors_party.add(_member.getName());
				}
			}
			_spawn.stopRespawn();
			updateAgression();
		}
 
		private void AddAgression(Playable player, int aggro)
		{
			if(player == null)
				return;
			for(NpcInstance mob : _spawn.getAllSpawned())
			{
				mob.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, player, aggro);
			}
		}
 
		private void updateAgression()
		{
			Player _player = World.getPlayer(agressor);
			if(_player != null)
			{
				if(agressors_pet != null && _player.getPet() != null && _player.getPet().getName().equalsIgnoreCase(agressors_pet))
					AddAgression(_player.getPet(), 10);
				AddAgression(_player, 2);
			}
			if(agressors_party != null)
				for(String _agressor : agressors_party)
					AddAgression(World.getPlayer(_agressor), 1);
		}
 
		@Override
		public void runImpl() throws Exception
		{
			if(_spawn == null)
				return;
			tiks++;
			if(tiks < 600)
			{
				updateAgression();
				ThreadPoolManager.getInstance().schedule(this, 1000);
				return;
			}
			_spawn.deleteAll();
		}
	}
}
Code: Java
nemoruss вне форума Ответить с цитированием
Непрочитано 28.01.2016, 20:33   #2
Аватар для Deazer

По умолчанию Re: Проблема с квестом взросление дракончика

Смотрите AI дерева, а не квест, дерево делитит из инвентаря итем.
Deazer вне форума Ответить с цитированием
Непрочитано 28.01.2016, 20:49   #3
Пользователь

Автор темы (Топик Стартер) Re: Проблема с квестом взросление дракончика

А что здесь смотреть? Подскажите пожалуйста.
файл Quest421FairyTree.java
package ai;
 
import core.gameserver.ai.Fighter;
import core.gameserver.model.Creature;
import core.gameserver.model.Skill;
import core.gameserver.model.instances.NpcInstance;
import core.gameserver.tables.SkillTable;
 
public class Quest421FairyTree extends Fighter
{
	public Quest421FairyTree(NpcInstance actor)
	{
		super(actor);
		actor.startImmobilized();
	}
 
	@Override
	protected void onEvtAttacked(Creature attacker, int damage)
	{
		NpcInstance actor = getActor();
		if(attacker != null && attacker.isPlayer())
		{
			Skill skill = SkillTable.getInstance().getInfo(5423, 12);
			skill.getEffects(actor, attacker, false, false);
			return;
		}
		if(attacker.isPet())
		{
			super.onEvtAttacked(attacker, damage);
			return;
		}
	}
 
	@Override
	protected void onEvtAggression(Creature attacker, int aggro)
	{
		NpcInstance actor = getActor();
		if(attacker != null && attacker.isPlayer())
		{
			Skill skill = SkillTable.getInstance().getInfo(5423, 12);
			skill.getEffects(actor, attacker, false, false);
			return;
		}
	}
 
	@Override
	protected boolean randomWalk()
	{
		return false;
	}
}
Code: Java
nemoruss вне форума Ответить с цитированием
Непрочитано 29.01.2016, 01:35   #4
Пользователь

Автор темы (Топик Стартер) Re: Проблема с квестом взросление дракончика

Цитата:
Сообщение от Deazer Посмотреть сообщение
Смотрите AI дерева, а не квест, дерево делитит из инвентаря итем.
Кажется нету в ai дерева удаления итема.
nemoruss вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с квестом [Shoot] Lineage II 10 23.04.2015 08:05
Проблема с квестом DeLone Lineage II 12 26.07.2013 14:26
Проблема с квестом Infinity Серверная часть 0 04.02.2011 02:35


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 23:15. Часовой пояс GMT +3.

Вверх