Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Парс итемов
#1
Помогите пожалуйста столкнулся со следующей проблемой. Хотел сделать что бы скилы к итемам были привязаны как у GodWorld
PHP код:
<?php 
<set name="item_skill" value="13062-2"/>

Добавил код в ItemTemplate:
PHP код:
<?php 
String skills
= set.getString("item_skill", null);
if(
skills != null)
{
String arr[] = skills.split(";");
len = arr.length;

for(
int i = 0; i < len; i++)
{
String aSkillsSplit = arr[i];

int id;
int level;

String ngt[] = aSkillsSplit.split("-");
if (
ngt.length == 2)
{

id = Integer.parseInt(ngt[0]);
level = Integer.parseInt(ngt[1]);

Skill skill = SkillTable.getInstance().getInfo(id, level);

_skills = ArrayUtils.add(_skills, skill);
}
}
}

Если прописан один скилл как показано выше все нормально. Но если прописать два скила

PHP код:
<?php 
<set name="item_skill" value="13062-2;3566-9"/>

При запуске сервера выдает ошибку но грузит сервак полностью.

PHP код:
<?php 
ERROR scripts
.Scripts: Scripts: Failed running handler.items.ItemSkills.onLoad()
java.lang.NullPointerException
at handler
.items.ItemSkills.<init>(ItemSkills.java:30)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.mmocore.gameserver.scripts.Scripts.init(Scripts.java:95)
at org.mmocore.gameserver.GameServer.<init>(GameServer.java:153)
at org.mmocore.gameserver.GameServer.main(GameServer.java:307)

При попытке одеть итем с двумя прописанными скилами гс выдает ошибку

PHP код:
<?php 
ERROR clientpackets
.L2GameClientPacket: Client: IN_GAME IP: 127.0.0.1 Account: admin Player : Sigel[268487687] - Failed running: [C] UseItem - Server Version: ${build.revision}
java.lang.NullPointerException
at org
.mmocore.gameserver.model.items.listeners.ItemSkillsListener.onEquip(ItemSkillsListener.java:86)
at org.mmocore.gameserver.model.items.Inventory$InventoryListenerList.onEquip(Inventory.java:65)
at org.mmocore.gameserver.model.items.Inventory.onEquip(Inventory.java:175)
at org.mmocore.gameserver.model.items.PcInventory.onEquip(PcInventory.java:360)
at org.mmocore.gameserver.model.items.Inventory.setPaperdollItem(Inventory.java:296)
at org.mmocore.gameserver.model.items.Inventory.equipItem(Inventory.java:459)
at handler.items.EquipableItem.useItem(EquipableItem.java:101)
at org.mmocore.gameserver.network.clientpackets.UseItem.runImpl(UseItem.java:95)
at org.mmocore.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:49)
at org.mmocore.commons.net.nio.impl.MMOExecutableQueue.run(MMOExecutableQueue.java:39)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

А в игре персонаж как бы одел этот итем но внешне он показывается но иконки в инвертаре нету. За основу брал исходы Rebellion Tauti.
Помог не забудь "Спасибо" Smile
Ответ
#2
Ну смотрите что у вас тут: at handler.items.ItemSkills.<init>(ItemSkills.java:30)
[Изображение: l2nextgen.gif]
Ответ
#3
PHP код:
<?php 
package handler
.items;

import gnu.trove.set.hash.TIntHashSet;

import org.mmocore.gameserver.data.xml.holder.ItemHolder;
import org.mmocore.gameserver.model.Creature;
import org.mmocore.gameserver.model.Playable;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.Skill;
import org.mmocore.gameserver.model.items.ItemInstance;
import org.mmocore.gameserver.templates.item.ItemTemplate;

/**
* @author VISTALL
* @date 7:34/17.03.2011
*/
public class ItemSkills extends ScriptItemHandler
{
private
int[] _itemIds;

public
ItemSkills()
{
TIntHashSet set = new TIntHashSet();
for(
ItemTemplate template : ItemHolder.getInstance().getAllTemplates())
{
if(
template == null)
continue;

for(
Skill skill : template.getAttachedSkills())
if(
skill.isHandler())
set.add(template.getItemId());
}
_itemIds = set.toArray();
}

@
Override
public boolean useItem(Playable playable, ItemInstance item, boolean ctrl)
{
Player player;
if(
playable.isPlayer())
player = (Player) playable;
else if(
playable.isPet())
player = playable.getPlayer();
else
return
false;

Skill[] skills = item.getTemplate().getAttachedSkills();

for(
int i = 0; i < skills.length; i++)
{
Skill skill = skills[i];
Creature aimingTarget = skill.getAimingTarget(player, player.getTarget());
if(
skill.checkCondition(player, aimingTarget, ctrl, false, true))
player.getAI().Cast(skill, aimingTarget, ctrl, false);
else if(
i == 0) //FIXME [VISTALL] всегда первый скил идет вместо конда?
return false;
}
return
true;
}

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

PHP код:
<?php 
if(skill.isHandler())
Помог не забудь "Спасибо" Smile
Ответ
#4
Если ошибка в строке с
Код:
if(skill.isHandler())
то проблема в том, что на оружие вы указали несуществующий скилл
Ответ
#5
Спасибо за помощь работает Smile
Помог не забудь "Спасибо" Smile
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  одтормаживания во время дропа или продажи итемов iSeeYourBalls 1 1,369 02-21-2017, 01:48 PM
Последний пост: iSeeYourBalls
  Диалоги юзабельных итемов(action_show_html) KilRoy 1 1,305 12-10-2014, 10:20 AM
Последний пост: KilRoy
  Кристализация итемов VenomRaider 11 2,502 09-05-2013, 03:39 PM
Последний пост: VenomRaider
  Как можно посмотреть все изображения итемов и узнать их названия? untunable 4 1,554 07-15-2011, 02:02 PM
Последний пост: Deazer
  Дроп всех итемов из дроплиста zippel 4 1,902 02-07-2011, 08:40 AM
Последний пост: zippel
  Редактирование итемов KOPEIII 1 1,824 07-27-2010, 07:51 PM
Последний пост: [STIGMATED]
  Отображение итемов fnatiklex 4 3,104 07-11-2009, 03:31 AM
Последний пост: Hybuk

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)