Сообщений: 59
Тем: 15
Зарегистрирован: Jan 2013
Репутация:
-4
High Five
first team
Помогите пожалуйста, ну уже сил нет... не понимаю что нужно убрать, чтобы просто по двойному клику спавнился НПЦ и мог шевелиться, бегать и всё остальное, а то он стоит как ёлка:
Код
Код: package events.Christmas;
import l2ft.commons.threading.RunnableImpl;
import l2ft.gameserver.ThreadPoolManager;
import l2ft.gameserver.data.xml.holder.NpcHolder;
import l2ft.gameserver.handler.items.IItemHandler;
import l2ft.gameserver.handler.items.ItemHandler;
import l2ft.gameserver.model.Playable;
import l2ft.gameserver.model.Player;
import l2ft.gameserver.model.SimpleSpawner;
import l2ft.gameserver.model.Zone.ZoneType;
import l2ft.gameserver.model.instances.NpcInstance;
import l2ft.gameserver.model.items.ItemInstance;
import l2ft.gameserver.templates.npc.NpcTemplate;
import l2ft.gameserver.utils.Location;
import l2ft.gameserver.scripts.ScriptFile;
import handler.items.ScriptItemHandler;
import npc.model.SquashInstance;
public class BOTT extends ScriptItemHandler implements ScriptFile
{
public class DeSpawnScheduleTimerTask extends RunnableImpl
{
SimpleSpawner spawnedPlant = null;
public DeSpawnScheduleTimerTask(SimpleSpawner spawn)
{
spawnedPlant = spawn;
}
@Override
public void runImpl() throws Exception
{
spawnedPlant.deleteAll();
}
}
private static int[] _itemIds = { 60002
};
private static int[] _npcIds = { 60031
};
@Override
public boolean useItem(Playable playable, ItemInstance item, boolean ctrl)
{
Player activeChar = (Player) playable;
if(activeChar.isInZone(ZoneType.RESIDENCE))
{
return false;
}
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;
}
if(template == null)
return true;
if (!activeChar.getInventory().destroyItem(item, 1L))
return true;
SimpleSpawner spawn = new SimpleSpawner(template);
spawn.setLoc(activeChar.getLoc());
NpcInstance npc = spawn.doSpawn(true);
spawn.respawnNpc(npc);
ThreadPoolManager.getInstance().schedule(new DeSpawnScheduleTimerTask(spawn), 180000);
return true;
}
@Override
public void onReload()
{
}
@Override
public void onShutdown()
{
}
@Override
public int[] getItemIds()
{
return _itemIds;
}
}
Сообщений: 199
Тем: 0
Зарегистрирован: Jul 2013
Репутация:
348
Jessy Написал:High Five
first team
Помогите пожалуйста, ну уже сил нет... не понимаю что нужно убрать, чтобы просто по двойному клику спавнился НПЦ и мог шевелиться, бегать и всё остальное, а то он стоит как ёлка:
Код
Код: package events.Christmas;
import l2ft.commons.threading.RunnableImpl;
import l2ft.gameserver.ThreadPoolManager;
import l2ft.gameserver.data.xml.holder.NpcHolder;
import l2ft.gameserver.handler.items.IItemHandler;
import l2ft.gameserver.handler.items.ItemHandler;
import l2ft.gameserver.model.Playable;
import l2ft.gameserver.model.Player;
import l2ft.gameserver.model.SimpleSpawner;
import l2ft.gameserver.model.Zone.ZoneType;
import l2ft.gameserver.model.instances.NpcInstance;
import l2ft.gameserver.model.items.ItemInstance;
import l2ft.gameserver.templates.npc.NpcTemplate;
import l2ft.gameserver.utils.Location;
import l2ft.gameserver.scripts.ScriptFile;
import handler.items.ScriptItemHandler;
import npc.model.SquashInstance;
public class BOTT extends ScriptItemHandler implements ScriptFile
{
public class DeSpawnScheduleTimerTask extends RunnableImpl
{
SimpleSpawner spawnedPlant = null;
public DeSpawnScheduleTimerTask(SimpleSpawner spawn)
{
spawnedPlant = spawn;
}
@Override
public void runImpl() throws Exception
{
spawnedPlant.deleteAll();
}
}
private static int[] _itemIds = { 60002
};
private static int[] _npcIds = { 60031
};
@Override
public boolean useItem(Playable playable, ItemInstance item, boolean ctrl)
{
Player activeChar = (Player) playable;
if(activeChar.isInZone(ZoneType.RESIDENCE))
{
return false;
}
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;
}
if(template == null)
return true;
if (!activeChar.getInventory().destroyItem(item, 1L))
return true;
SimpleSpawner spawn = new SimpleSpawner(template);
spawn.setLoc(activeChar.getLoc());
NpcInstance npc = spawn.doSpawn(true);
spawn.respawnNpc(npc);
ThreadPoolManager.getInstance().schedule(new DeSpawnScheduleTimerTask(spawn), 180000);
return true;
}
@Override
public void onReload()
{
}
@Override
public void onShutdown()
{
}
@Override
public int[] getItemIds()
{
return _itemIds;
}
}
У вызываемого монстра Аи какое стоит?
Сообщений: 889
Тем: 21
Зарегистрирован: May 2010
Репутация:
12,856
Написать для данного нпса аи. А там уж чего душа пожелает "хоть польку будет танцевать".
Сообщений: 59
Тем: 15
Зарегистрирован: Jan 2013
Репутация:
-4
06-03-2014, 03:34 PM
(Сообщение последний раз редактировалось: 06-03-2014, 03:36 PM Jessy.)
Melcor Написал:У вызываемого монстра Аи какое стоит?
"KartiaGuard" Аи влияет чтоли? Я просто взял из евента нового года спавн, вот и думаю что там убрать, а то он спавнится , но его в таргет нельзя взять и он не шевелится, на месте стоит....
Добавлено через 1 минуту
Mangol Написал:Написать для данного нпса аи. А там уж чего душа пожелает "хоть польку будет танцевать".
К сожалению не по моему уму Аи писать, могу только по подобию чего-либо сделать... Поэтому и спрашиваю тут.
Сообщений: 100
Тем: 5
Зарегистрирован: May 2011
Репутация:
208
Jessy Написал:High Five
first team
Помогите пожалуйста, ну уже сил нет... не понимаю что нужно убрать, чтобы просто по двойному клику спавнился НПЦ и мог шевелиться, бегать и всё остальное, а то он стоит как ёлка
Делал аналогичную вещь на интерлюде (нужны исходники)
находится это здесь
com\l2jfrozen\gameserver\handler\itemhandlers
файл ChristmasTree.java
Спойлер
/*
* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.handler.itemhandlers;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
import com.l2jfrozen.gameserver.handler.IItemHandler;
import com.l2jfrozen.gameserver.idfactory.IdFactory;
import com.l2jfrozen.gameserver.model.L2Object;
import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PlayableInstance;
import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
public class ChristmasTree implements IItemHandler
{
private static final int[] ITEM_IDS =
{
5560, /* x-mas tree */
5561, /* x-mas tree2 */
80001, /* custom mob */
80002, /* custom mob */
80003, /* custom mob */
80004, /* custom mob */
80005, /* custom mob */
80006, /* custom mob */
80007, /* custom mob */
80008, /* custom mob */
80009, /* custom mob */
80010, /* custom mob */
80011, /* custom mob */
80012, /* custom mob */
80013, /* custom mob */
80014, /* custom mob */
80015, /* custom mob */
80016, /* custom mob */
80017, /* custom mob */
80018, /* custom mob */
80019, /* custom mob */
80020, /* custom mob */
80021, /* custom mob */
80022, /* custom mob */
80023, /* custom mob */
80024, /* custom mob */
80025, /* custom mob */
80026, /* custom mob */
80027, /* custom mob */
80028, /* custom mob */
80029, /* custom mob */
80030, /* custom mob */
80031, /* custom mob */
80032, /* custom mob */
80033, /* custom mob */
80034, /* custom mob */
80035, /* custom mob */
80036, /* custom mob */
80037, /* custom mob */
80038, /* custom mob */
80039, /* custom mob */
80040, /* custom mob */
80041, /* custom mob */
80042, /* custom mob */
80043, /* custom mob */
80044, /* custom mob */
80045, /* custom mob */
80046, /* custom mob */
80047, /* custom mob */
80048, /* custom mob */
80049, /* custom mob */
80050
};
private static final int[] NPC_IDS =
{
13006, /* Christmas tree w. flashing lights and snow */
13007, /* Christmas tree w. flashing lights and snow */
80001, /* custom mob */
80002, /* custom mob */
80003, /* custom mob */
80004, /* custom mob */
80005, /* custom mob */
80006, /* custom mob */
80007, /* custom mob */
80008, /* custom mob */
80009, /* custom mob */
80010, /* custom mob */
80011, /* custom mob */
80012, /* custom mob */
80013, /* custom mob */
80014, /* custom mob */
80015, /* custom mob */
80016, /* custom mob */
80017, /* custom mob */
80018, /* custom mob */
80019, /* custom mob */
80020, /* custom mob */
80021, /* custom mob */
80022, /* custom mob */
80023, /* custom mob */
80024, /* custom mob */
80025, /* custom mob */
80026, /* custom mob */
80027, /* custom mob */
80028, /* custom mob */
80029, /* custom mob */
80030, /* custom mob */
80031, /* custom mob */
80032, /* custom mob */
80033, /* custom mob */
80034, /* custom mob */
80035, /* custom mob */
80036, /* custom mob */
80037, /* custom mob */
80038, /* custom mob */
80039, /* custom mob */
80040, /* custom mob */
80041, /* custom mob */
80042, /* custom mob */
80043, /* custom mob */
80044, /* custom mob */
80045, /* custom mob */
80046, /* custom mob */
80047, /* custom mob */
80048, /* custom mob */
80049, /* custom mob */
80050
};
@Override
public void useItem(L2PlayableInstance playable, L2ItemInstance item)
{
L2PcInstance activeChar = (L2PcInstance) playable;
L2NpcTemplate template1 = null;
int itemId = item.getItemId();
for(int i = 0; i < ITEM_IDS.length; i++)
{
if(ITEM_IDS[i] == itemId)
{
template1 = NpcTable.getInstance().getTemplate(NPC_IDS[i]);
break;
}
}
if(template1 == null)
return;
L2Object target = activeChar.getTarget();
if(target == null)
{
target = activeChar;
}
try
{
L2Spawn spawn = new L2Spawn(template1);
spawn.setId(IdFactory.getInstance().getNextId());
spawn.setLocx(target.getX());
spawn.setLocy(target.getY());
spawn.setLocz(target.getZ());
L2NpcInstance result = spawn.spawnOne();
activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
SystemMessage sm = new SystemMessage(SystemMessageId.S1_S2);
activeChar.sendPacket(sm);
ThreadPoolManager.getInstance().scheduleGeneral(new DeSpawn(result), 60000);
sm = null;
spawn = null;
}
catch(Exception e)
{
if(Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();
SystemMessage sm = new SystemMessage(SystemMessageId.S1_S2);
sm.addString("Target is not ingame.");
activeChar.sendPacket(sm);
sm = null;
}
activeChar = null;
template1 = null;
target = null;
}
public class DeSpawn implements Runnable
{
L2NpcInstance _npc = null;
public DeSpawn(L2NpcInstance npc)
{
_npc = npc;
}
@Override
public void run()
{
_npc.onDecay();
}
}
@Override
public int[] getItemIds()
{
return ITEM_IDS;
}
}
ITEM_IDS и NPC_IDS начиная с 80001 кастомные, от оригинального файла отличается разве что наличием строчек начиная от 80001 и до 80050 и временем до деспавна моба 60 сек (DeSpawn(result), 60000);
Поищите в своей сборке подобный файл и думаю все получится. А также не забудьте добавить в базу и в клиент этих мобов.
Таким принципом можно спавнить абсолютно всех нпц и мобов и они будут адекватно реагировать на атаку, а если агры то нападать сами первыми.
Сообщений: 59
Тем: 15
Зарегистрирован: Jan 2013
Репутация:
-4
06-03-2014, 10:13 PM
(Сообщение последний раз редактировалось: 06-03-2014, 11:25 PM Jessy.)
Tassadar999 Написал:Делал аналогичную вещь на интерлюде (нужны исходники)
находится это здесь
com\l2jfrozen\gameserver\handler\itemhandlers
файл ChristmasTree.java
Спойлер
/*
* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.handler.itemhandlers;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
import com.l2jfrozen.gameserver.handler.IItemHandler;
import com.l2jfrozen.gameserver.idfactory.IdFactory;
import com.l2jfrozen.gameserver.model.L2Object;
import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PlayableInstance;
import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
public class ChristmasTree implements IItemHandler
{
private static final int[] ITEM_IDS =
{
5560, /* x-mas tree */
5561, /* x-mas tree2 */
80001, /* custom mob */
80002, /* custom mob */
80003, /* custom mob */
80004, /* custom mob */
80005, /* custom mob */
80006, /* custom mob */
80007, /* custom mob */
80008, /* custom mob */
80009, /* custom mob */
80010, /* custom mob */
80011, /* custom mob */
80012, /* custom mob */
80013, /* custom mob */
80014, /* custom mob */
80015, /* custom mob */
80016, /* custom mob */
80017, /* custom mob */
80018, /* custom mob */
80019, /* custom mob */
80020, /* custom mob */
80021, /* custom mob */
80022, /* custom mob */
80023, /* custom mob */
80024, /* custom mob */
80025, /* custom mob */
80026, /* custom mob */
80027, /* custom mob */
80028, /* custom mob */
80029, /* custom mob */
80030, /* custom mob */
80031, /* custom mob */
80032, /* custom mob */
80033, /* custom mob */
80034, /* custom mob */
80035, /* custom mob */
80036, /* custom mob */
80037, /* custom mob */
80038, /* custom mob */
80039, /* custom mob */
80040, /* custom mob */
80041, /* custom mob */
80042, /* custom mob */
80043, /* custom mob */
80044, /* custom mob */
80045, /* custom mob */
80046, /* custom mob */
80047, /* custom mob */
80048, /* custom mob */
80049, /* custom mob */
80050
};
private static final int[] NPC_IDS =
{
13006, /* Christmas tree w. flashing lights and snow */
13007, /* Christmas tree w. flashing lights and snow */
80001, /* custom mob */
80002, /* custom mob */
80003, /* custom mob */
80004, /* custom mob */
80005, /* custom mob */
80006, /* custom mob */
80007, /* custom mob */
80008, /* custom mob */
80009, /* custom mob */
80010, /* custom mob */
80011, /* custom mob */
80012, /* custom mob */
80013, /* custom mob */
80014, /* custom mob */
80015, /* custom mob */
80016, /* custom mob */
80017, /* custom mob */
80018, /* custom mob */
80019, /* custom mob */
80020, /* custom mob */
80021, /* custom mob */
80022, /* custom mob */
80023, /* custom mob */
80024, /* custom mob */
80025, /* custom mob */
80026, /* custom mob */
80027, /* custom mob */
80028, /* custom mob */
80029, /* custom mob */
80030, /* custom mob */
80031, /* custom mob */
80032, /* custom mob */
80033, /* custom mob */
80034, /* custom mob */
80035, /* custom mob */
80036, /* custom mob */
80037, /* custom mob */
80038, /* custom mob */
80039, /* custom mob */
80040, /* custom mob */
80041, /* custom mob */
80042, /* custom mob */
80043, /* custom mob */
80044, /* custom mob */
80045, /* custom mob */
80046, /* custom mob */
80047, /* custom mob */
80048, /* custom mob */
80049, /* custom mob */
80050
};
@Override
public void useItem(L2PlayableInstance playable, L2ItemInstance item)
{
L2PcInstance activeChar = (L2PcInstance) playable;
L2NpcTemplate template1 = null;
int itemId = item.getItemId();
for(int i = 0; i < ITEM_IDS.length; i++)
{
if(ITEM_IDS[i] == itemId)
{
template1 = NpcTable.getInstance().getTemplate(NPC_IDS[i]);
break;
}
}
if(template1 == null)
return;
L2Object target = activeChar.getTarget();
if(target == null)
{
target = activeChar;
}
try
{
L2Spawn spawn = new L2Spawn(template1);
spawn.setId(IdFactory.getInstance().getNextId());
spawn.setLocx(target.getX());
spawn.setLocy(target.getY());
spawn.setLocz(target.getZ());
L2NpcInstance result = spawn.spawnOne();
activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false);
SystemMessage sm = new SystemMessage(SystemMessageId.S1_S2);
activeChar.sendPacket(sm);
ThreadPoolManager.getInstance().scheduleGeneral(new DeSpawn(result), 60000);
sm = null;
spawn = null;
}
catch(Exception e)
{
if(Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();
SystemMessage sm = new SystemMessage(SystemMessageId.S1_S2);
sm.addString("Target is not ingame.");
activeChar.sendPacket(sm);
sm = null;
}
activeChar = null;
template1 = null;
target = null;
}
public class DeSpawn implements Runnable
{
L2NpcInstance _npc = null;
public DeSpawn(L2NpcInstance npc)
{
_npc = npc;
}
@Override
public void run()
{
_npc.onDecay();
}
}
@Override
public int[] getItemIds()
{
return ITEM_IDS;
}
}
ITEM_IDS и NPC_IDS начиная с 80001 кастомные, от оригинального файла отличается разве что наличием строчек начиная от 80001 и до 80050 и временем до деспавна моба 60 сек (DeSpawn(result), 60000);
Поищите в своей сборке подобный файл и думаю все получится. А также не забудьте добавить в базу и в клиент этих мобов.
Таким принципом можно спавнить абсолютно всех нпц и мобов и они будут адекватно реагировать на атаку, а если агры то нападать сами первыми. К сожалению как бы я не юзал поиск не могу найти не в исходниках, не в датапаке((((
Сообщений: 100
Тем: 5
Зарегистрирован: May 2011
Репутация:
208
Порылся в исходах за 2013 год first team
кажется аналогичный файл находится в gameserver\data\scripts\events\Christmas\Seed.java
Попробуйте в нем сделать изменения, может все таки получится заспавнить других нпц.
Сообщений: 59
Тем: 15
Зарегистрирован: Jan 2013
Репутация:
-4
Tassadar999 Написал:Порылся в исходах за 2013 год first team
кажется аналогичный файл находится в gameserver\data\scripts\events\Christmas\Seed.java
Попробуйте в нем сделать изменения, может все таки получится заспавнить других нпц.
Дак вот первый мой пост там и есть код из "Christmas\Seed.java", Монстр спавнится, но не двигается и нельзя в таргет его взять...
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
Проставьте для NPC инстанс навроде: L2Npc
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 59
Тем: 15
Зарегистрирован: Jan 2013
Репутация:
-4
06-04-2014, 02:05 AM
(Сообщение последний раз редактировалось: 06-10-2014, 01:03 PM Jessy.)
Pointer*Rage Написал:Проставьте для NPC инстанс навроде: L2Npc
Если вы про исходники то у меня там нет L2NPC, есть NpcInstance
|