Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   Праздничный Торт (https://forum.zone-game.info/showthread.php?t=29794)

Tr1v1um 28.06.2013 14:06

Праздничный Торт
 
Привет всем.У меня возникла проблема.Решил по тестить праздничные торты которые дают баф "Эффект Праздничного Торта".Заметил то что торт не спавнится а только кидается баф на чара на 4 минуты.Вопрос:"Может ли кто помочь сделать так чтоб спавнился сам торт,стоял ровно час,давал каждые 2 секунды баф на не большом растоянии?"
Хроники High Five 5

ChipWarl 28.06.2013 14:16

Re: Праздничный Торт
 
посмотри напримере нубо бафера. мимо него пробегаешь он бафает
так же с тортом

Tr1v1um 28.06.2013 14:19

Re: Праздничный Торт
 
Цитата:

Сообщение от ChipWarl (Сообщение 307975)
посмотри напримере нубо бафера. мимо него пробегаешь он бафает
так же с тортом

Хм..На сколько я знаю нубо бафер бафает при нажатии на баф кнопочку.
Забыл указать хроники Т_Т (ХФ5)

Krasavella 28.06.2013 14:19

Re: Праздничный Торт
 
По аналогии Ёлки сделайте =)

Tr1v1um 28.06.2013 14:21

Re: Праздничный Торт
 
Цитата:

Сообщение от Krasavella (Сообщение 307977)
По аналогии Ёлки сделайте =)

Как я понимаю должен быть скрипт той же ёлки.Хотелось бы узнать где он находится:)Если конечно не сложно ответить)

Добавлено через 7 минут
</etcitem>
<etcitem id="5561" name="Special Christmas Tree">
<set name="class" value="CONSUMABLE"/>
<set name="crystal_type" value="NONE"/>
<set name="icon" value="icon.etc_x_mas_tree_i00"/>
<set name="price" value="1"/>
<set name="stackable" value="true"/>
<set name="type" value="POTION"/>
<cond msgId="1508">
<not>
<player olympiad="true"/>
</not>
</cond>
Вот сам код ёлки.
Я так понимаю спавн происходит в самом скилле который привязывается к нему?

Krasavella 28.06.2013 14:30

Re: Праздничный Торт
 
play\data\scripts\events\Christmas\Seed.java

	private static int[] _itemIds = { 5560, // Christmas Tree
		5561 // Special Christmas Tree
	};
 
	private static int[] _npcIds = { 13006, // Christmas Tree
		13007 // Special Christmas Tree
	};
 
	private static final int DESPAWN_TIME = 600000; //10 min
 
	@Override
	public boolean useItem(Playable playable, ItemInstance item, boolean ctrl)
	{
		Player activeChar = (Player) playable;
		NpcTemplate template = null;
 
		int itemId = item.getItemId();
		for(int i = 0; i < _itemIds.length; i++)
			if(_itemIds[i] == itemId)
			{
				template = NpcHolder.getInstance().getTemplate(_npcIds[i]);
				break;
			}
 
		for(NpcInstance npc : World.getAroundNpc(activeChar, 300, 200))
			if(npc.getNpcId() == _npcIds[0] || npc.getNpcId() == _npcIds[1])
			{
				activeChar.sendPacket(new SystemMessage2(SystemMsg.SINCE_S1_ALREADY_EXISTS_NEARBY_YOU_CANNOT_SUMMON_IT_AGAIN).addName(npc));
				return false;
			}
 
		// Запрет на саммон елок слищком близко к другим НПЦ
		if(World.getAroundNpc(activeChar, 100, 200).size() > 0)
		{
			activeChar.sendPacket(Msg.YOU_MAY_NOT_SUMMON_FROM_YOUR_CURRENT_LOCATION);
			return false;
		}
 
		if(template == null)
			return false;
 
		if (!activeChar.getInventory().destroyItem(item, 1L))
			return false;
 
		SimpleSpawner spawn = new SimpleSpawner(template);
		spawn.setLoc(activeChar.getLoc());
		NpcInstance npc = spawn.doSpawn(false);
		npc.setTitle(activeChar.getName()); //FIXME Почему-то не устанавливается
		spawn.respawnNpc(npc);
 
		// АИ вещающее бафф регена устанавливается только для большой елки
		if(itemId == 5561)
			npc.setAI(new ctreeAI(npc));
 
		ThreadPoolManager.getInstance().schedule(new DeSpawnScheduleTimerTask(spawn), (activeChar.isInPeaceZone() ? DESPAWN_TIME / 3 : DESPAWN_TIME));
		return true;
	}
Code: Java

Tr1v1um 28.06.2013 14:34

Re: Праздничный Торт
 
Цитата:

Сообщение от Krasavella (Сообщение 307982)
play\data\scripts\events\Christmas\Seed.java

	private static int[] _itemIds = { 5560, // Christmas Tree
		5561 // Special Christmas Tree
	};
 
	private static int[] _npcIds = { 13006, // Christmas Tree
		13007 // Special Christmas Tree
	};
 
	private static final int DESPAWN_TIME = 600000; //10 min
 
	@Override
	public boolean useItem(Playable playable, ItemInstance item, boolean ctrl)
	{
		Player activeChar = (Player) playable;
		NpcTemplate template = null;
 
		int itemId = item.getItemId();
		for(int i = 0; i < _itemIds.length; i++)
			if(_itemIds[i] == itemId)
			{
				template = NpcHolder.getInstance().getTemplate(_npcIds[i]);
				break;
			}
 
		for(NpcInstance npc : World.getAroundNpc(activeChar, 300, 200))
			if(npc.getNpcId() == _npcIds[0] || npc.getNpcId() == _npcIds[1])
			{
				activeChar.sendPacket(new SystemMessage2(SystemMsg.SINCE_S1_ALREADY_EXISTS_NEARBY_YOU_CANNOT_SUMMON_IT_AGAIN).addName(npc));
				return false;
			}
 
		// Запрет на саммон елок слищком близко к другим НПЦ
		if(World.getAroundNpc(activeChar, 100, 200).size() > 0)
		{
			activeChar.sendPacket(Msg.YOU_MAY_NOT_SUMMON_FROM_YOUR_CURRENT_LOCATION);
			return false;
		}
 
		if(template == null)
			return false;
 
		if (!activeChar.getInventory().destroyItem(item, 1L))
			return false;
 
		SimpleSpawner spawn = new SimpleSpawner(template);
		spawn.setLoc(activeChar.getLoc());
		NpcInstance npc = spawn.doSpawn(false);
		npc.setTitle(activeChar.getName()); //FIXME Почему-то не устанавливается
		spawn.respawnNpc(npc);
 
		// АИ вещающее бафф регена устанавливается только для большой елки
		if(itemId == 5561)
			npc.setAI(new ctreeAI(npc));
 
		ThreadPoolManager.getInstance().schedule(new DeSpawnScheduleTimerTask(spawn), (activeChar.isInPeaceZone() ? DESPAWN_TIME / 3 : DESPAWN_TIME));
		return true;
	}
Code: Java

Благодарю ;)

Добавлено через 3 минуты
Цитата:

Сообщение от Krasavella (Сообщение 307982)
play\data\scripts\events\Christmas\Seed.java

	private static int[] _itemIds = { 5560, // Christmas Tree
		5561 // Special Christmas Tree
	};
 
	private static int[] _npcIds = { 13006, // Christmas Tree
		13007 // Special Christmas Tree
	};
 
	private static final int DESPAWN_TIME = 600000; //10 min
 
	@Override
	public boolean useItem(Playable playable, ItemInstance item, boolean ctrl)
	{
		Player activeChar = (Player) playable;
		NpcTemplate template = null;
 
		int itemId = item.getItemId();
		for(int i = 0; i < _itemIds.length; i++)
			if(_itemIds[i] == itemId)
			{
				template = NpcHolder.getInstance().getTemplate(_npcIds[i]);
				break;
			}
 
		for(NpcInstance npc : World.getAroundNpc(activeChar, 300, 200))
			if(npc.getNpcId() == _npcIds[0] || npc.getNpcId() == _npcIds[1])
			{
				activeChar.sendPacket(new SystemMessage2(SystemMsg.SINCE_S1_ALREADY_EXISTS_NEARBY_YOU_CANNOT_SUMMON_IT_AGAIN).addName(npc));
				return false;
			}
 
		// Запрет на саммон елок слищком близко к другим НПЦ
		if(World.getAroundNpc(activeChar, 100, 200).size() > 0)
		{
			activeChar.sendPacket(Msg.YOU_MAY_NOT_SUMMON_FROM_YOUR_CURRENT_LOCATION);
			return false;
		}
 
		if(template == null)
			return false;
 
		if (!activeChar.getInventory().destroyItem(item, 1L))
			return false;
 
		SimpleSpawner spawn = new SimpleSpawner(template);
		spawn.setLoc(activeChar.getLoc());
		NpcInstance npc = spawn.doSpawn(false);
		npc.setTitle(activeChar.getName()); //FIXME Почему-то не устанавливается
		spawn.respawnNpc(npc);
 
		// АИ вещающее бафф регена устанавливается только для большой елки
		if(itemId == 5561)
			npc.setAI(new ctreeAI(npc));
 
		ThreadPoolManager.getInstance().schedule(new DeSpawnScheduleTimerTask(spawn), (activeChar.isInPeaceZone() ? DESPAWN_TIME / 3 : DESPAWN_TIME));
		return true;
	}
Code: Java

Кстати.По примеру ёлки не получиться.Там даётся эффект бафа 10 минут подрят но после ёлка не исчезает.Так же будет скорее всего с тортом.

Krasavella 28.06.2013 14:38

Re: Праздничный Торт
 
private static final int DESPAWN_TIME = 600000; //10 min

Tr1v1um 28.06.2013 14:46

Re: Праздничный Торт
 
Цитата:

Сообщение от Krasavella (Сообщение 307988)
private static final int DESPAWN_TIME = 600000; //10 min

Да вот в том-то и дело)Я сейчас поставил ёлку.Прошло 20 минут и только слетел эффект бафа,а сама ёлка не удалилась)Кстати.Сейчас ещё нужно будет писать AI для тортика.Так как там записан баф который будут получать люди)

Добавлено через 6 минут
AI нашёл.Теперь нужно привязать эти файлы друг к другу)

Добавлено через 16 минут
Сейчас Тестанём)Всё написал.Поправил немножко и посмотрим отспавнится ли торт через час.

Krasavella 28.06.2013 15:06

Re: Праздничный Торт
 
Цитата:

Сообщение от Tr1v1um (Сообщение 307991)
посмотрим отспавнится ли торт через час.

Лучше через минуту для проверки.

Tr1v1um 28.06.2013 15:14

Re: Праздничный Торт
 
Цитата:

Сообщение от Krasavella (Сообщение 307995)
Лучше через минуту для проверки.

В итоге:Торт спавнится нормально,баф не кидается.

Krasavella 28.06.2013 15:19

Re: Праздничный Торт
 
Цитата:

Сообщение от Tr1v1um (Сообщение 307999)
В итоге:Торт спавнится нормально,баф не кидается.

AI создан? Id Npc и Buff'а верно указали?

 
	@Override
	protected boolean thinkActive()
	{
		NpcInstance actor = getActor();
		if(actor == null)
			return true;
 
		int skillId = 2139;
		for(Player player : World.getAroundPlayers(actor, 200, 200))
			if(player != null && !player.isInZonePeace() && player.getEffectList().getEffectsBySkillId(skillId) == null)
				actor.doCast(SkillTable.getInstance().getInfo(skillId, 1), player, true);
		return false;
	}
 
Code: Java
Так же обратите внимание на условия.

Tr1v1um 28.06.2013 15:24

Re: Праздничный Торт
 
Цитата:

Сообщение от Krasavella (Сообщение 308003)
AI создан? Id Npc и Buff'а верно указали?

 
	@Override
	protected boolean thinkActive()
	{
		NpcInstance actor = getActor();
		if(actor == null)
			return true;
 
		int skillId = 2139;
		for(Player player : World.getAroundPlayers(actor, 200, 200))
			if(player != null && !player.isInZonePeace() && player.getEffectList().getEffectsBySkillId(skillId) == null)
				actor.doCast(SkillTable.getInstance().getInfo(skillId, 1), player, true);
		return false;
	}
 
Code: Java

AI создан.ID нпц указал правильно.Если бы не указал правильный ID то тогда тортик вообще не вылез бы)
ID скилла указал.
Хотя уже выявил проблему скорее всего "getEffectsBySkillId(skillId) == null)"У меня было вместо null , 1.Сейчас сделаю рестарт и посмотрим)

Добавлено через 1 минуту
Ошибся.Было в .getInfo(skillId, 1)
Так и осталось.
Вроде всё правильно указал.

Добавлено через 2 минуты
ackage events.Cake;

import l2p.commons.threading.RunnableImpl;
import l2p.gameserver.ThreadPoolManager;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.data.xml.holder.NpcHolder;
import l2p.gameserver.model.Playable;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.SimpleSpawner;
import l2p.gameserver.model.World;
import l2p.gameserver.model.instances.NpcInstance;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.serverpackets.components.SystemMsg;
import l2p.gameserver.serverpackets.SystemMessage2;
import l2p.gameserver.templates.npc.NpcTemplate;
import handler.items.ScriptItemHandler;

public class cake extends ScriptItemHandler
{
public class DeSpawnScheduleTimerTask extends RunnableImpl
{
SimpleSpawner spawnedTree = null;

public DeSpawnScheduleTimerTask(SimpleSpawner spawn)
{
spawnedTree = spawn;
}

@Override
public void runImpl() throws Exception
{
spawnedTree.deleteAll();
}
}

private static int[] _itemIds = {
20320 // Party Cake
};

private static int[] _npcIds = {
147 // Party Cake
};

private static final int DESPAWN_TIME = 3600000; //60 min

@Override
public boolean useItem(Playable playable, ItemInstance item, boolean ctrl)
{
Player activeChar = (Player) playable;
NpcTemplate template = null;

int itemId = item.getItemId();
for(int i = 0; i < _itemIds.length; i++)
if(_itemIds[i] == itemId)
{
template = NpcHolder.getInstance().getTemplate(_npcIds[i]);
break;
}

for(NpcInstance npc : World.getAroundNpc(activeChar, 300, 200))
if(npc.getNpcId() == _npcIds[0] || npc.getNpcId() == _npcIds[1])
{
activeChar.sendPacket(new SystemMessage2(SystemMsg.SINCE_S1_ALREADY_EXISTS_N EARBY_YOU_CANNOT_SUMMON_IT_AGAIN).addName(npc));
return false;
}

// Запрет на саммон елок слищком близко к другим НПЦ
if(World.getAroundNpc(activeChar, 100, 200).size() > 0)
{
activeChar.sendPacket(Msg.YOU_MAY_NOT_SUMMON_FROM_ YOUR_CURRENT_LOCATION);
return false;
}

if(template == null)
return false;

if (!activeChar.getInventory().destroyItem(item, 1L))
return false;

SimpleSpawner spawn = new SimpleSpawner(template);
spawn.setLoc(activeChar.getLoc());
NpcInstance npc = spawn.doSpawn(false);
npc.setTitle(activeChar.getName()); //FIXME Почему-то не устанавливается
spawn.respawnNpc(npc);

// АИ вещающее бафф регена устанавливается только для большой елки
if(itemId == 20320)
npc.setAI(new cakeAI(npc));

ThreadPoolManager.getInstance().schedule(new DeSpawnScheduleTimerTask(spawn), (activeChar.isInPeaceZone() ? DESPAWN_TIME / 3 : DESPAWN_TIME));
return true;
}

@Override
public int[] getItemIds()
{
return _itemIds;
}
}

Если что-то не правильно то подскажите пожалуйста

Gaikotsu 28.06.2013 18:02

Re: Праздничный Торт
 
после
npc.setAI(new cakeAI(npc));
Code: Java
добавь
npc.getAI().startAITask();
Code: Java
З.Ы. и пользуйся тэгами для показа кода, а то неформатированный код - та еще глазоломка.

Tr1v1um 28.06.2013 18:49

Re: Праздничный Торт
 
Цитата:

Сообщение от Gaikotsu (Сообщение 308049)
после
npc.setAI(new cakeAI(npc));
Code: Java
добавь
npc.getAI().startAITask();
Code: Java
З.Ы. и пользуйся тэгами для показа кода, а то неформатированный код - та еще глазоломка.

Хорошо.
Нет,не помогло.Добавил ниже код который вы написали.Всё так же..

Добавлено через 26 минут
Проблему решил.В скилле вместо TARGET_PARTY изменил на TARGET_NONE


Текущее время: 05:50. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot