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

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   СОздание эффекта (скилла) (https://forum.zone-game.info/showthread.php?t=10544)

wagan 12.10.2010 22:58

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

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

gorodetskiy 13.10.2010 07:50

Re: СОздание эффекта (скилла)
 
Драсте приехали .... эффект добавляется в ядро а не ДатаПак

DarkGod 13.10.2010 08:12

Re: СОздание эффекта (скилла)
 
Цитата:

Сообщение от gorodetskiy (Сообщение 91506)
Драсте приехали .... эффект добавляется в ядро а не ДатаПак

А где написано, что файл добавляется в "ДатаПак"? Читайте внимательно тему...

gorodetskiy 13.10.2010 08:43

Re: СОздание эффекта (скилла)
 
Цитата:

Сообщение от DarkGod (Сообщение 91508)
А где написано, что файл добавляется в "ДатаПак"? Читайте внимательно тему...

Цитата:

Сообщение от wagan (Сообщение 91486)
датапак игнорирует его(

Цитата:

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

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

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

а вообще скилы можно делать типом BUFF , проще всего

wagan 13.10.2010 18:36

Re: СОздание эффекта (скилла)
 
С датапаком я имел ввиду, что когда вписываю скиллу свой эффект, он игнорируется. В ядре всё сделано, нужно только заставить "работать" скрипт, то есть засунуть в импорты. Вот только где эти импорты?) Мне на другом форуме подсказали в файле 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 лил и мп и хп не создавая отдельный метод для него?

Magister 22.10.2010 10:17

Re: СОздание эффекта (скилла)
 
Вот такой тип эффекта

Код:

<effect count="1" name="HealPercent" time="0" val="100" />
<effect count="1" name="ManaHealPercent" time="0" val="100" />

Восстанавливает сразу 100% HP и MP, данный эффект на примере работы на сборке феникс.

incognito 01.11.2010 01:15

Re: СОздание эффекта (скилла)
 
а сам скил тайп такой в ядре то прописан?акромя просто файлика нужно еще прописать скиллтайп

krisadr 09.11.2010 01:23

Re: СОздание эффекта (скилла)
 
ну а реально где найти эти "импорты" в build.xml чтоли? если же я захочу что нить добавить как и где прописать чтобы сие чюдо скомпилилась?

incognito 10.11.2010 13:29

Re: СОздание эффекта (скилла)
 
Цитата:

Сообщение от krisadr (Сообщение 95460)
ну а реально где найти эти "импорты" в build.xml чтоли? если же я захочу что нить добавить как и где прописать чтобы сие чюдо скомпилилась?

Не надо в блиде ничего искать... надо делать по аналогии с тем что есть.
Есть скиллтайп HEAL идем и ищем все, что с ним связано. и начинаем добавлять свой скиллтайп если он похож на HEAL


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

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