-
Публикаций
244 -
Зарегистрирован
-
Посещение
-
Победитель дней
1 -
Отзывы
0%
Сообщения, опубликованные drakola
-
-
Естественно. Я же скинул код от лыжы, а у Вас ИТ (вроде бы).
Но прикол в том, что язык одинаковый и алгоритм работы программы одинаковый.
Скорей всего там ошибки рода (метод не найден) или (тип данных не совпадает). Всё исправляется простой заменой на свои методы и классы (уже имеющиеся в сборке, а не создание новых), ну и импортов.
Просто уже какой день Вы не можете решить эту элементарную проблему. Заплатите кому-то уже 100р., что бы он за Вас вставил нужный код и всё. (такой сборкой как у Вас мало кто пользуется.... не сложно догадаться почему). У вас просто остается 2 варианта:
1) не страдать фигней и с помощью "поиска в Интернете" иправить баг
2) нанять разработчика, который за "пиво" будет писать Вам код.
Надеюсь, что у Вас всё получиться)
вы мне сможете помочь за 2 вариант ?
-
Ты можешь только ставить "ПАЛЬЧИК ВНИЗ" и больше ничего.
А правда глаза режет?
не пиши тут если нет желания помогать.
-
никакого нового класса делать не надо. ctrl+c ctr+v (то что внутри метода) и всё. Пример есть. Осталось только подставить.
ставлю и у меня прут ошибки
-
Повторяю фикс:
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);}
так по него еще надо дописывать класс
-
Значит в эффект дописывай метод на передвижение (пример я скинул в файле) и всё
/* * 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; } }
Что тут дописывать ?
-
А если игрока в фир кинуть, он побежит?
нет тоже стоит на месте.
-
Да
я вернул. но теперь моб просто стоит на месте и не убегает от персонажа. фир проходит и моб начинает атаковать.
-
Вы удалили в 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(); }
-
Я фикс до этого выше Вам кидал (потом Модерация его удалила). Я так понял он Вам не помог. Поэтому рекомендую выбрать один из следующих вариантов:
1) Попросить разработчика, что бы исправили баг
2) Взять код из сборки, где работает этот эффект
3) Ну если нет разработчика и Вы не умеете копировать код из одного места в другое (т.к. фикс я Вам кидал, а Вы не можете его вставить ), то просить человека, что бы он за Вас поправил баг (платно\бесплатно - как повезет).
вы мне скинули эффект в нем то как раз все хорошо. а вот в L2Character.java косяк какой то.
-
это не метод.... 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; }
вот все что есть
-
На передвижение. Если знаете английский, то без проблем его найдете.
в том то и дело что нет )))
может это ?
// 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
-
ну а так он будет всех бить в фире)
Просто добавь метод, который будет заставлять их бегать и всё.
не подскажешь какой метод надо найти ?
-
после выполнения таких дебильных советов не стоит удивляться самым странным проблемам появившимся после правок.
если это || isAfraid() в строках с public boolean isAllSkillsDisabled() и с public boolean isAttackingDisabled()
вернуть обратно то при фире моб просто стоит и не двигается.
-
Вам виднее. Если такая проблема только с мобами, то править надо L2AttackableAI.java. В остальных случаях в EffectFear.java
public final boolean isAfraid() {return _isAfraid; -
Как фиксить бег я скидывал выше.
За отмену каста отвечает метод abortCast()
За отмену автоатаки - abortAttack()
Пора уже учиться самому править такие не сложные баги.
так дела то тогда в L2Character.java а не в L2AttackableAI.java и EffectFear.java
-
Если во время фира моб подбигает и бьет скилом, то надо
// 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)
-
У вас формула не верно написана в 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; } }
-
у меня в 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; }
-
Привет всем.
дело в том что когда кидаешь фир на моба он бегает как бешеный в перед и назад и при этом может еще и атаковать как мне исправить и где?
мне как то давали совет удалить в файле 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;
} -
а разница какие исходники? язык и алгоритм один и тот же.
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); }
-
что это вобще за математическая порнуха?
Как переписать под твой варинат - думаю разберешся
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); }
-
Ну тогда потом мб гляну, когда решусь скачать 7ю яву)
она и на 8й идет
-
ну перепиши как у меня)
пробовал не катит
-
Это для примера был. Тут должна быть Ваша формула. Можете вынести ее от туда и прописать как отдельный подсчет дамага, т.к. там помимо этой формулы включаются еще формула маг. дамага и т.п.
Вот как у меня реализовано (работает, уже тестировали)
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); }
у тебя совсем по другому
Исправить Fear
в Ядро сервера
Опубликовано
хорошо. я как буду свободен я вам напишу в лк