Сабж меня сильно интересует, поэтому я решил "вплотную" заняться им. Почитав информацию про систему решил проверить хоть малюсенькую работоспособность оной на сервере. Зашёл в игру, пришёл к Диону, взял зерно(seed), брал с ИД 5016 и 5026, но это не важно. При использовании(даблклик) семян из инвентаря и при включенном Debug Info в окне сервера вылезает:
[C] 14 UseItem <<< ene
no itemhandler registered for itemId:5026
или:
[C] 14 UseItem <<< ene
no itemhandler registered for itemId:5016
АйДэ предметов написаны...
Решил присвоить что-нибудь к действию, писанул:
code text
: use-item-5026 ( L2NpcInstance -- location )
player@
target@
dup L2Attackable.class instance-of? if
"AggroRange" p@ .
else
0 .
then
;
: use-item-5016 "Test2" show ;
Выбрал монстра, юзнул семена - всё ОК. Решил пошерстить исходники на предмет useSeed, нашёл такую вещицу в L2Attackable.java :
code text
public void setSeeded(int id, int seederLvl)
{
_seeded = true;
_seedType = id;
int count = 1;
int diff = (getLevel() - seederLvl - 1);
// hi-lvl mobs bonus
if (diff > 0 && diff < 5)//Config.MANOR_HARVEST_DIFF_BONUS)
count += Rnd.get(diff);
List<L2ItemInstance> harvested = new FastList<L2ItemInstance>();
for (int i = 0; i < count; i++)
harvested.add(ItemTable.getInstance().createItem(L2Manor.getInstance().getCropType(_seedType)));
_harvestItems = harvested.toArray(new L2ItemInstance[harvested.size()]);
}
Обрадовался, решил юзнуть так прямо из игры:
code text
//5016 24 player@ target@ "setSeeded" { int.class int.class } jexec
В окне сервера написало:
code text
Error while jexec <noname>
Unknown word <noname> error
Input:
=== cut ===
... 24 player@ target@ "setSeeded" { int.class int.class } >| jexec |<
=== cut ===
Return stack trace:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at ru.balancer.jbforth.words.Java$jexec.exec(Java.java:263)
at ru.balancer.JBForth.do_word(JBForth.java:338)
at ru.balancer.JBForth.do_code(JBForth.java:203)
at ru.balancer.JBForth.do_code(JBForth.java:180)
at ru.balancer.JBForth.exec(JBForth.java:113)
at ru.balancer.JBForth.execp(JBForth.java:120)
at net.sf.l2j.gameserver.clientpackets.SendBypassBuildCmd.runImpl(SendBy
passBuildCmd.java:98)
at net.sf.l2j.gameserver.clientpackets.ClientBasePacket.run(ClientBasePa
cket.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
access$301(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source
)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
at net.sf.l2j.gameserver.ItemTable.getTemplate(ItemTable.java:607)
at net.sf.l2j.gameserver.model.L2ItemInstance.<init>(L2ItemInstance.java
:148)
at net.sf.l2j.gameserver.ItemTable.createItem(ItemTable.java:622)
at net.sf.l2j.gameserver.model.L2Attackable.setSeeded(L2Attackable.java:
1735)
... 20 more
Вооот...
Кто с таким сталкивался??? Как лечить? Не ругайте меня - я ещё только учусь.
З.Ы.: очень хочется реализовать систему маноров. Мыслей уже кучу передумал. Могу даже полностью переписать всё на Форте, но не знаю, как "отметить" моба на предмет seed'a. Хоть новое поле в БД вставляй. Предлагайте варианты - надо реализовывать систему то...
З.З.Ы.: Ещё интересное:
code text
public boolean isSeeded()
{
return _seeded;
}
@SuppressWarnings("unused") // --- вот эта строка интереснее всего.
private boolean isSeededHigh()
{
return (_seedType < 5650); // low-grade seeds has id's below 5650
}