Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
СОздание эффекта (скилла)
#1
В ядре не хватает эффекта МПХП хила и я решил его добавить, в общем написал сам метод но как его "прикрутить" не знаю..

Работает 100%, так как проверял заменой метода Heal на мой и скиллы делали все как положено, но как только выношу свой метод в отдельный файл ну скажем HPMPHEAL.java (в тот же пак где и файл Heal.java), датапак игнорирует его(
Ответ
#2
Драсте приехали .... эффект добавляется в ядро а не ДатаПак
СЕО Оптимизация сайтов
Ответ
#3
gorodetskiy Написал:Драсте приехали .... эффект добавляется в ядро а не ДатаПак
А где написано, что файл добавляется в "ДатаПак"? Читайте внимательно тему...
Ответ
#4
DarkGod Написал:А где написано, что файл добавляется в "ДатаПак"? Читайте внимательно тему...

wagan Написал:датапак игнорирует его(

wagan Написал:В ядре не хватает эффекта МПХП хила и я решил его добавить, в общем написал сам метод но как его "прикрутить" не знаю..

Работает 100%, так как проверял заменой метода Heal на мой и скиллы делали все как положено, но как только выношу свой метод в отдельный файл ну скажем HPMPHEAL.java (в тот же пак где и файл Heal.java), датапак игнорирует его(

Ещё раз процитирую, немного поясню ... Если добавляешь какой то эффект, то прописывай в ядре в эффекты, ну и соответственно в импрорты

а вообще скилы можно делать типом BUFF , проще всего
СЕО Оптимизация сайтов
Ответ
#5
С датапаком я имел ввиду, что когда вписываю скиллу свой эффект, он игнорируется. В ядре всё сделано, нужно только заставить "работать" скрипт, то есть засунуть в импорты. Вот только где эти импорты?) Мне на другом форуме подсказали в файле scripts, но ведь там импорты из датапака?

Добавлено через 2 минуты
И, сорри, немного ошибся я именно тип скилла добавляю, а не эффект*

Мне просто нужно для корректной работы некоторых скиллов эффект мгновенного восстановления ХП и МП, а типом BUFF такого не добьешься.

Добавлено через 4 часа 1 минуту
Вот сам код:

Код:
package com.l2emu.gameserver.handler.skillhandlers;
import com.l2emu.gameserver.handler.ISkillHandler;
import com.l2emu.Config;
import com.l2emu.gameserver.handler.SkillHandler;
import com.l2emu.gameserver.model.L2ItemInstance;
import com.l2emu.gameserver.model.L2Object;
import com.l2emu.gameserver.model.L2Skill;
import com.l2emu.gameserver.model.actor.L2Character;
import com.l2emu.gameserver.model.actor.L2Summon;
import com.l2emu.gameserver.model.actor.instance.L2PcInstance;
import com.l2emu.gameserver.network.SystemMessageId;
import com.l2emu.gameserver.network.serverpackets.StatusUpdate;
import com.l2emu.gameserver.network.serverpackets.SystemMessage;
import com.l2emu.gameserver.skills.Stats;
import com.l2emu.gameserver.templates.skills.L2SkillType;
public class HPMPHEAL implements ISkillHandler
{
    private static final L2SkillType[] SKILL_IDS = { L2SkillType.HPMPHEAL_PERCENT };

    public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
    {
        try
        {
            ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(L2SkillType.BUFF);
            if (handler != null)
                handler.useSkill(activeChar, skill, targets);
        }
        catch (Exception e)
        {
        }
        L2ItemInstance weaponInst = activeChar.getActiveWeaponInstance();
        L2PcInstance player = null;
        if (activeChar instanceof L2PcInstance)
            player = (L2PcInstance) activeChar;
        boolean clearSpiritShot = false;
        for (L2Object obj : targets)
        {
            if (!(obj instanceof L2Character))
                continue;
            L2Character target = (L2Character) obj;
            if (target == null || target.isDead())
                continue;    
            if (Config.DISABLE_HEALING_SKILLS && activeChar.isInsideZone(L2Character.ZONE_PEACE) && !target.isInsideZone(L2Character.ZONE_PEACE))
                continue;            
            if (target != activeChar)
            {
                if (target instanceof L2PcInstance && ((L2PcInstance) target).isCursedWeaponEquipped())
                    continue;
                else if (player != null && player.isCursedWeaponEquipped())
                    continue;
            }
            double hp = skill.getPower();    
            
            
            
            double power = skill.getPower();
            double mp = power;
                {if (skill.getSkillType() == L2SkillType.HPMPHEAL_PERCENT)
                {hp = target.getMaxHp() * hp / 100.0;
                mp = target.getMaxMp() * mp / 100.0;}
                    else
                mp = (skill.getSkillType() == L2SkillType.HPMPHEAL_PERCENT) ? target.calcStat(Stats.RECHARGE_MP_RATE, mp, null, null) : mp;
            if (skill.getSkillType() == L2SkillType.HPMPHEAL_PERCENT)
            {
                if (mp > power * 1.7)
                    mp = power * 1.7;
                int skilllvl = skill.getMagicLevel();
                if (skilllvl > 0)
                {
                    int delta = target.getLevel() - skilllvl;
                    if (delta > 15)
                        mp = 0;
                    else if (delta > 5)
                        mp = mp - mp*(delta-5)/10;
                }
                
                if ((target.getCurrentMp() + mp) >= target.getMaxMp())
                    mp = target.getMaxMp() - target.getCurrentMp();
            }
            
            
            if (target.getFirstEffect(1509) != null && mp + target.getCurrentMp() > target.getMaxMp()*0.3)
                mp = target.getMaxMp()*0.3 - target.getCurrentMp();
            if (mp < 0)
                mp = 0;
            target.setCurrentMp(mp + target.getCurrentMp());
            StatusUpdate sump = new StatusUpdate(target.getObjectId());
            sump.addAttribute(StatusUpdate.CUR_MP, (int) target.getCurrentMp());
            target.sendPacket(sump);
            if (activeChar instanceof L2PcInstance && activeChar != target)
            {
                SystemMessage sm = new SystemMessage(SystemMessageId.S2_MP_RESTORED_BY_C1);
                sm.addString(activeChar.getName());
                sm.addNumber((int) mp);
                target.sendPacket(sm);
            }
            else
            {
                SystemMessage sm = new SystemMessage(SystemMessageId.S1_MP_RESTORED);
                sm.addNumber((int) mp);
                target.sendPacket(sm);
            }
        }
                    
            if ((target.getCurrentHp() + hp) >= target.getMaxHp())
                hp = target.getMaxHp() - target.getCurrentHp();
            if (target.getFirstEffect(1509) != null && hp + target.getCurrentHp() > target.getMaxHp()*0.3)
                hp = target.getMaxHp()*0.3 - target.getCurrentHp();
            if (hp < 0)
                hp = 0;
            target.setCurrentHp(hp + target.getCurrentHp());
            StatusUpdate su = new StatusUpdate(target.getObjectId());
            su.addAttribute(StatusUpdate.CUR_HP, (int) target.getCurrentHp());
            target.sendPacket(su);
            if (target instanceof L2PcInstance)
            {
                if (skill.getId() == 4051)
                {
                    SystemMessage sm = new SystemMessage(SystemMessageId.REJUVENATING_HP);
                    target.sendPacket(sm);
                }
                else
                {
                    if (activeChar instanceof L2PcInstance && activeChar != target)
                    {
                        SystemMessage sm = new SystemMessage(SystemMessageId.S2_HP_RESTORED_BY_C1);
                        sm.addString(activeChar.getName());
                        sm.addNumber((int) hp);
                        target.sendPacket(sm);
                    }
                    else
                    {
                        SystemMessage sm = new SystemMessage(SystemMessageId.S1_HP_RESTORED);
                        sm.addNumber((int) hp);
                        target.sendPacket(sm);
                    }
                }
            }
        }
        if (clearSpiritShot)
        {
            if (activeChar instanceof L2Summon)
            {
                L2Summon activeSummon = (L2Summon) activeChar;
                activeSummon.setChargedSpiritShot(L2ItemInstance.CHARGED_NONE);
            }
            else
            {
                if (weaponInst != null)
                    weaponInst.setChargedSpiritshot(L2ItemInstance.CHARGED_NONE);
            }
        }
    }

    public L2SkillType[] getSkillIds()
    {
        return SKILL_IDS;
    }
}

Но если я заменяю им метод Heal, то все скиллы, которые лечат, заливают еще и мп. Может можно как то сделать так что бы остальные лили только ХП, а именно HPMPHEAL_PERCENT лил и мп и хп не создавая отдельный метод для него?
Ответ
#6
Вот такой тип эффекта

Код:
<effect count="1" name="HealPercent" time="0" val="100" />
<effect count="1" name="ManaHealPercent" time="0" val="100" />

Восстанавливает сразу 100% HP и MP, данный эффект на примере работы на сборке феникс.
[Изображение: e0d394556cfe7fc77265f431b11359ca.gif]
Ответ
#7
а сам скил тайп такой в ядре то прописан?акромя просто файлика нужно еще прописать скиллтайп
Ответ
#8
ну а реально где найти эти "импорты" в build.xml чтоли? если же я захочу что нить добавить как и где прописать чтобы сие чюдо скомпилилась?
Ответ
#9
krisadr Написал:ну а реально где найти эти "импорты" в build.xml чтоли? если же я захочу что нить добавить как и где прописать чтобы сие чюдо скомпилилась?
Не надо в блиде ничего искать... надо делать по аналогии с тем что есть.
Есть скиллтайп HEAL идем и ищем все, что с ним связано. и начинаем добавлять свой скиллтайп если он похож на HEAL
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Stack эффекта finfan 4 1,837 02-01-2016, 12:56 AM
Последний пост: Zubastic
  Создание новые скролов телепорта LegioNteam 12 3,251 08-08-2014, 01:22 AM
Последний пост: Donatte
  Создание ПВП зоны (Опены) ZIP 9 2,847 08-02-2014, 10:08 PM
Последний пост: ZIP
  Снятие талисмана и спадание эффекта Rolfer 1 1,149 06-22-2014, 09:10 AM
Последний пост: Gaikotsu
  Проверка на "combat=false" у скилла LastStand 12 2,250 12-09-2013, 04:34 PM
Последний пост: Aristocrat
  Создание своего Рецепта >.< finfan 1 1,701 10-04-2013, 12:33 AM
Последний пост: gorodetskiy
  Создание итема KpoIIIuK 0 1,080 06-25-2013, 01:58 AM
Последний пост: KpoIIIuK
  Создание персонажа Raymon 1 1,634 01-22-2013, 08:04 PM
Последний пост: kolobrodik
  Создание нового Condition finfan 9 2,229 01-03-2013, 02:51 AM
Последний пост: ..Kirito..
  Создание соединения с бд Main 6 1,882 12-20-2012, 11:14 PM
Последний пост: Main

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


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