Перейти к содержанию

drakola

Постоялец
  • Публикаций

    244
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1
  • Отзывы

    0%

Сообщения, опубликованные drakola


  1. Естественно. Я же скинул код от лыжы, а у Вас ИТ (вроде бы).

    Но прикол в том, что язык одинаковый и алгоритм работы программы одинаковый.

    Скорей всего там ошибки рода (метод не найден) или (тип данных не совпадает). Всё исправляется простой заменой на свои методы и классы (уже имеющиеся в сборке, а не создание новых), ну и импортов. 

     

    Просто уже какой день Вы не можете решить эту элементарную проблему. Заплатите кому-то уже 100р., что бы он за Вас вставил нужный код и всё. (такой сборкой как у Вас мало кто пользуется.... не сложно догадаться почему). У вас просто остается 2 варианта:

    1) не страдать фигней и с помощью "поиска в Интернете" иправить баг

    2) нанять разработчика, который за "пиво" будет писать Вам код. 

     

    Надеюсь, что у Вас всё получиться) 

    вы мне сможете помочь за 2 вариант ?


  2. Повторяю фикс:

     

    private void fearAction(BuffInfo info, boolean start)
    {
    double radians = Math.toRadians(start ? Util.calculateAngleFrom(info.getEffector(), info.getEffected()) : Util.convertHeadingToDegree(info.getEffected().getHeading()));
    
    int posX = (int) (info.getEffected().getX() + (FEAR_RANGE * Math.cos(radians)));
    int posY = (int) (info.getEffected().getY() + (FEAR_RANGE * Math.sin(radians)));
    int posZ = info.getEffected().getZ();
    
    if (!info.getEffected().isPet())
    {
    info.getEffected().setRunning();
    }
    
    // If pathfinding enabled the creature will go to the defined destination (retail like).
    // Otherwise it will go to the nearest obstacle.
    final Location destination;
    if (Config.PATHFINDING > 0)
    {
    destination = GeoData.getInstance().moveCheck(info.getEffected().getX(), info.getEffected().getY(), info.getEffected().getZ(), posX, posY, posZ, info.getEffected().getInstanceId());
    }
    else
    {
    destination = new Location(posX, posY, posZ, info.getEffected().getInstanceId());
    }
    info.getEffected().getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, destination);}

     

     

    так по него еще надо дописывать класс  :help:


  3. Значит в эффект дописывай метод на передвижение (пример я скинул в файле) и всё

    /*
     * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
     */
    package ru.catssoftware.gameserver.skills.effects;
    
    import ru.catssoftware.gameserver.ai.CtrlIntention;
    import ru.catssoftware.gameserver.geodata.GeoData;
    import ru.catssoftware.gameserver.model.L2CharPosition;
    import ru.catssoftware.gameserver.model.L2Effect;
    import ru.catssoftware.gameserver.model.actor.instance.L2FolkInstance;
    import ru.catssoftware.gameserver.model.actor.instance.L2FortCommanderInstance;
    import ru.catssoftware.gameserver.model.actor.instance.L2FortSiegeGuardInstance;
    import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
    import ru.catssoftware.gameserver.model.actor.instance.L2PetInstance;
    import ru.catssoftware.gameserver.model.actor.instance.L2SiegeFlagInstance;
    import ru.catssoftware.gameserver.model.actor.instance.L2SiegeGuardInstance;
    import ru.catssoftware.gameserver.model.actor.instance.L2SiegeSummonInstance;
    import ru.catssoftware.gameserver.skills.Env;
    import ru.catssoftware.gameserver.templates.skills.L2EffectType;
    //import java.util.logging.Logger;
    
    import ru.catssoftware.tools.random.Rnd;
    
    /**
     * @[member='Authority'] littlecrow
     *
     * Implementation of the Fear Effect
     */
    public final class EffectFear extends L2Effect {
    
        public static final int FEAR_RANGE = 200;
        //protected static Logger				_log				= Logger.getLogger(EffectFear.class.getName());
        //private static Map<Integer, float[]> _deltas = new FastMap<Integer, float[]>();
    
        public EffectFear(Env env, EffectTemplate template) {
            super(env, template);
        }
    
        @[member='override']
        public L2EffectType getEffectType() {
            return L2EffectType.FEAR;
        }
    
        /** Notify started */
        @[member='override']
        public boolean onStart() {
            // Fear skills cannot be used L2Pcinstance to L2Pcinstance.
            // Heroic Dread, Curse: Fear, Fear, Horror, Sword Symphony, Word of Fear and Mass Curse Fear are the exceptions.
            if (getEffected() instanceof L2PcInstance && getEffector() instanceof L2PcInstance) {
                switch (getSkill().getId()) {
                    case 65:
                    case 98:
                    case 1092:
                    case 1169:
                    case 1272:
                    case 1376:
                    case 1381:
                        // all ok
                        break;
                    default:
                        return false;
                }
            }
    
            if (getEffected() instanceof L2FolkInstance || getEffected() instanceof L2SiegeGuardInstance || getEffected() instanceof L2SiegeFlagInstance
                    || getEffected() instanceof L2SiegeSummonInstance || getEffected() instanceof L2FortSiegeGuardInstance
                    || getEffected() instanceof L2FortCommanderInstance) {
                return false;
            }
    
            if (!getEffected().isAfraid()) {
                /*float _dX = getEffector().getX() - getEffected().getX();
                float _dY = getEffector().getY() - getEffected().getY();
                
                if (_dX == 0) {
                _dX = 0;
                if (_dY > 0) {
                _dY = -1;
                } else {
                _dY = 1;
                }
                } else if (_dY == 0) {
                _dY = 0;
                if (_dX > 0) {
                _dX = -1;
                } else {
                _dX = 1;
                }
                } else if (_dX > 0 && _dY > 0) {
                //_log.warning("Situation A-NW ("+_dX+";"+_dY+")");
                if (_dX > _dY) {
                _dY = -1 * _dY / _dX;
                _dX = -1;
                } else {
                _dX = -1 * _dX / _dY;
                _dY = -1;
                }
                } else if (_dX > 0 && _dY < 0) {
                //_log.warning("Situation B-SW ("+_dX+";"+_dY+")");
                if (_dX > (-1 * _dY)) {
                _dY = -1 * (_dY / _dX);
                _dX = -1;
                } else {
                _dX = _dX / _dY;
                _dY = 1;
                }
                } else if (_dX < 0 && _dY > 0) {
                //_log.warning("Situation C-NE ("+_dX+";"+_dY+")");
                if ((-1 * _dX) > _dY) {
                _dY = _dY / _dX;
                _dX = 1;
                } else {
                _dX = -1 * (_dX / _dY);
                _dY = -1;
                }
                } else if (_dX < 0 && _dY < 0) {
                //_log.warning("Situation D-SE ("+_dX+";"+_dY+")");
                if (_dX > _dY) {
                _dY = _dY / _dX;
                _dX = 1;
                } else {
                _dX = _dX / _dY;
                _dY = 1;
                }
                } else if (_dX == 0 && _dY == 0) {
                //_log.warning("Situation X");
                _dX = -1;
                _dY = -1;
                }
                _deltas.put(getEffected().getObjectId(), new float[]{_dX, _dY});*/
                getEffected().startFear();
                onActionTime();
                return true;
            }
            return false;
        }
    
        /** Notify exited */
        @[member='override']
        public void onExit() {
            getEffected().stopFear(this);
            getEffected().setTarget(null);
            getEffected().getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
            //_deltas.remove(getEffected().getObjectId());
        }
    
        @[member='override']
        public boolean onActionTime() {
            if (getEffected().getFirstEffect(getId()) == null) {
                onExit();
            }
    
            int posX = getEffected().getX();
            int posY = getEffected().getY();
            int posZ = getEffected().getZ();
            //float[] delta = _deltas.get(getEffected().getObjectId());
            /*float _dX = -1;
            float _dY = -1;
            if (delta != null) {
            _dX = delta[0];
            _dY = delta[1];
            }
            //_log.warning("Start Position on Fear. X: " + posX + "  Y: " + posY);
            if (_dX != 0) {
            posX += _dX * FEAR_RANGE;
            }
            if (_dY != 0) {
            posY += _dY * FEAR_RANGE;
            }*/
            //_log.warning("Next Position on Fear. X: " + posX + "  Y: " + posY);
            //Location destiny = GeoData.getInstance().moveCheck(getEffected().getX(), getEffected().getY(), getEffected().getZ(), posX, posY, posZ, getEffected().getInstanceId());
            if (!(getEffected() instanceof L2PetInstance)) {
                getEffected().setRunning();
            }
            switch (Rnd.get(1, 6)) {
                case 1:
                    posX += 40;
                    posY += 180;
                    break;
                case 2:
                    posX += 150;
                    posY += 50;
                    break;
                case 3:
                    posX += 69;
                    posY -= 100;
                    break;
                case 4:
                    posX += 10;
                    posY -= 100;
                    break;
                case 5:
                    posX -= 150;
                    posY -= 20;
                    break;
                case 6:
                    posX -= 100;
                    posY += 60;
                    break;
            }
    
            if (GeoData.getInstance().canSeeTarget(getEffected().getX(), getEffected().getY(), getEffected().getZ(), posX, posY, posZ)/*GeoData.getInstance().canMoveFromToTarget(getEffected().getX(), getEffected().getY(), getEffected().getZ(), posX, posY, posZ, getEffected().getInstanceId())*/) {
                getEffected().getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(posX, posY, posZ, 0));
            }
    
            // Give damage if "val" > 0
            double damage = calc();
            if (damage != 0) {
                getEffected().reduceCurrentHp(damage, getEffector(), true, true, getSkill());
            }
            return true;
        }
    }
    

    Что тут дописывать ? 


  4. Вы удалили в Character проверку на фир эффект... Верните его обратно. 

    || isAfraid это ?

     

    вернул.

       /**
         * Return true if the L2Character can't use its skills (ex : stun,
         * sleep...).
         */
        public boolean isAllSkillsDisabled() {
            return _allSkillsDisabled || isStunned() || isSleeping() || isImmobileUntilAttacked() || isParalyzed() || isPetrified()|| isAfraid() ;
        }
    
        /**
         * Return true if the L2Character can't attack (stun, sleep, attackEndTime,
         * fakeDeath, paralyse).
         */
        public boolean isAttackingDisabled() {
            return isStunned() || isSleeping() || isImmobileUntilAttacked() || isAttackingNow() || isFakeDeath() || isParalyzed()
                    || isPetrified() || isFallsdown() || isPhysicalAttackMuted() || isCoreAIDisabled() || isAfraid();
        }
    

  5. Я фикс до этого выше Вам кидал (потом Модерация его удалила). Я так понял он Вам не помог. Поэтому рекомендую выбрать один из следующих вариантов:

    1) Попросить разработчика, что бы исправили баг

    2) Взять код из сборки, где работает этот эффект

    3) Ну если нет разработчика и Вы не умеете копировать код из одного места в другое (т.к. фикс я Вам кидал, а Вы не можете его вставить :( ), то просить человека, что бы он за Вас поправил баг (платно\бесплатно - как повезет).

    вы мне скинули эффект в нем то как раз все хорошо. а вот в L2Character.java косяк какой то.


  6. это не метод.... moveToLocation или похожие на него. методов на передвижение много. Но обычно пользуются тем, что я выделил, или new Location.

    Тут надо смотреть, не двигается вообще (и мобы и игроки). Если только мобы, то править надо только для них (L2Attackable) или смотреть ограничения в фир эффекте или методе на передвижение. 

            public void moveTo(int x, int y, int z, int offset) {
                moveToLocation(x, y, z, offset);
            }
    
            public boolean moveTo(int x, int y, int z) {
                return moveToLocation(x, y, z, 0);
            }
    
            // the CtrlEvent.EVT_ARRIVED will be sent when the character will actually arrive
            // to destination by GameTimeController
            // Send a Server->Client packet CharMoveToLocation to the actor and all L2PcInstance in its _knownPlayers
            broadcastPacket(new MoveToLocation(this));
    
        protected boolean moveToLocation(int x, int y, int z, int offset) {
    		// Get the Move Speed of the L2Charcater
    		float speed = getStat().getMoveSpeed();
    		if (speed <= 0 || isMovementDisabled()) {
    //			actionFail();
    			return _AIdisabled;
    		}
    

    вот все что есть


  7. На передвижение. Если знаете английский, то без проблем его найдете. 

    в том то и дело что нет )))

     

    может это ? 

            // Caclulate the Nb of ticks between the current position and the destination
            // One tick added for rounding reasons
            int ticksToMove = 1 + (int) ((GameTimeController.TICKS_PER_SECOND * distance) / speed);
            m._xDestination = x;
            m._yDestination = y;
            m._zDestination = z; // this is what was requested from client
    

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

    если это || isAfraid() в строках  с public boolean isAllSkillsDisabled() и с public boolean isAttackingDisabled() 

    вернуть обратно то при фире моб просто стоит и не двигается.


  9. Как фиксить бег я скидывал выше. 

    За отмену каста отвечает метод abortCast()

    За отмену автоатаки - abortAttack()

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

    так дела то тогда в L2Character.java а не в  L2AttackableAI.java  и EffectFear.java


  10. Если во время фира моб подбигает и бьет скилом, то надо

    // Check if the thinking action is already in progress
    

    добавляете:

    if (npc.isAllSkillsDisabled() || npc.isAfraid())
    			npc.abortCast();
    

    P.S. Этот фикс работает на L2JServer. Для других сборок фикс может немного отличаться (обычно смотрят в сам эффект)

    ошибка в гс 

            at ru.catssoftware.gameserver.ai.L2AttackableAI.onEvtThink(L2AttackableAI.java:1633)
            at ru.catssoftware.gameserver.ai.L2CharacterAI.onEvtArrived(L2CharacterAI.java:700)
            at ru.catssoftware.gameserver.ai.L2AttackableAI.onEvtArrived(L2AttackableAI.java:563)
            at ru.catssoftware.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:449)
            at ru.catssoftware.gameserver.ai.AbstractAI.notifyEvent(AbstractAI.java:375)
            at ru.catssoftware.gameserver.GameTimeController$ArrivedCharacterManager.callTask(GameTimeController.java:218)
            at ru.catssoftware.gameserver.GameTimeController$ArrivedCharacterManager.callTask(GameTimeController.java:197)
            at ru.catssoftware.gameserver.taskmanager.AbstractFIFOPeriodicTaskManager.run(AbstractFIFOPeriodicTaskManager.java:62)
            at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
            at java.util.concurrent.FutureTask.runAndReset(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.runWorker(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
            at java.lang.Thread.run(Unknown Source)
    

  11. У вас формула не верно написана в EffectFear.java метод onStart()

    вот формула
     
        public boolean onStart() {
            // Fear skills cannot be used L2Pcinstance to L2Pcinstance.
            // Heroic Dread, Curse: Fear, Fear, Horror, Sword Symphony, Word of Fear and Mass Curse Fear are the exceptions.
            if (getEffected() instanceof L2PcInstance && getEffector() instanceof L2PcInstance) {
                switch (getSkill().getId()) {
                    case 65:
                    case 98:
                    case 1092:
                    case 1169:
                    case 1272:
                    case 1376:
                    case 1381:
                        // all ok
                        break;
                    default:
                        return false;
                }
            }
    

  12. @@zGosu

     

    у меня в L2Character.java  так

        public boolean isOutOfControl() {
            return isConfused() || isAfraid();
        }
    

    а в L2AttackableAI.java я не понял где. есть только 

        public void run() {
            onEvtThink();
        }
    

    и вот это 

        protected void onEvtThink() {
            // Check if the thinking action is already in progress
            if (_thinking || _actor.isCastingNow() || _actor.isAllSkillsDisabled()) {
                return;
            }
    

  13. Привет всем. 

     

    дело в том что когда кидаешь фир на моба он бегает как бешеный в перед и назад и при этом может еще и атаковать как мне исправить и где?

    мне как то давали совет удалить в файле L2Character.java

     

    || isAfraid() в строках  с public boolean isAllSkillsDisabled() и с public boolean isAttackingDisabled()

     

    я удалил фир стал работать но все равно не так как надо.

    /**


    * Return true if the L2Character can't use its skills (ex : stun,
    * sleep...).
    */
    public boolean isAllSkillsDisabled() {
    return _allSkillsDisabled || isStunned() || isSleeping() || isImmobileUntilAttacked() || isParalyzed() || isPetrified();
    }

    /**
    * Return true if the L2Character can't attack (stun, sleep, attackEndTime,
    * fakeDeath, paralyse).
    */
    public boolean isAttackingDisabled() {
    return isStunned() || isSleeping() || isImmobileUntilAttacked() || isAttackingNow() || isFakeDeath() || isParalyzed()
    || isPetrified() || isFallsdown() || isPhysicalAttackMuted() || isCoreAIDisabled();
    }

    public final Calculator[] getCalculators() {
    return _calculators;
    }

    public final boolean isConfused() {
    return _isConfused;
    }

    public final void setIsConfused(boolean value) {
    _isConfused = value;
    }

    public final boolean isDead() {
    return _isDead;
    }

    public final void setIsDead(boolean value) {
    _isDead = value;
    }

     


  14.  

    а разница какие исходники? язык и алгоритм один и тот же. 

    final double part = attacker.getStatus().getCurrentHp() / attacker.getMaxHp();
    power *= 1.8 * (1.0 - part);
    

     

    Ну у меня это из Артеи, но и в ХФ было так же. Не буду утверждать что прямо таки 100% соотвествует оффу, но по крайней мере работает корректно - чем больше % хп имеется, тем меньше урон и наоборот, и урон падает до 0 при максимуме хп.

     

    У тебя же, по этой бредовой формуле, максимально ослабит силу скилла примерно в 3 раза при полном хп, но никак не до 0.

     

    (1.7165 - 1.0) ^ 2 * 0.577 = 0.29621578825

    спасибо вам. исправил правда урон с полным хп не 0 но и не по 2к ) 

     

    сделал вот так 

            // Если скил КДЛ, то применяем форумулу КДЛА
            if (skill.getSkillType() == L2SkillType.DEATHLINK) {
                double part = attacker.getStatus().getCurrentHp() / attacker.getMaxHp();
                power *= 1.8 * (1.0 - part);
            }
    

  15. что это вобще за математическая порнуха?

     

     

    Как переписать под твой варинат - думаю разберешся

    if (skill.isDeathLink())
    	info.damage *= 1.8 * (1.0 - attacker.getCurrentHpRatio());
    

    это с каких исходников ?

     

    у меня вот так 

            // Если скил КДЛ, то применяем форумулу КДЛА
            if (skill.getSkillType() == L2SkillType.DEATHLINK) {
                double part = attacker.getStatus().getCurrentHp() / attacker.getMaxHp();
                power *= (Math.pow(1.7165 - part, 2) * 0.577);
            }
    

  16.  

    Это для примера был. Тут должна быть Ваша формула. Можете вынести ее от туда и прописать как отдельный подсчет дамага, т.к. там помимо этой формулы включаются еще формула маг. дамага и т.п. 

    Вот как у меня реализовано (работает, уже тестировали)

    	public double getPower(final L2Character activeChar,
    			final L2Character target, final boolean isPvP, final boolean isPvE) {
    		if (activeChar == null)
    		    return getPower(isPvP, isPvE);
    
    		if (hasEffectType(L2EffectType.DEATH_LINK))
    		    return getPower(isPvP, isPvE)
    		    		* (-((activeChar.getCurrentHp() * 2) / activeChar
    		    				.getMaxHp()) + 2);
    
    		if (hasEffectType(L2EffectType.PHYSICAL_ATTACK_HP_LINK))
    		    return getPower(isPvP, isPvE)
    		    		* (-((target.getCurrentHp() * 2) / target.getMaxHp()) + 2);
    		return getPower(isPvP, isPvE);
    	}
    

    у тебя совсем по другому  :diablo:

×
×
  • Создать...