переписать скилл Body To Mind

11111111

Знаменитый
Участник
Сообщения
84
Розыгрыши
0
Репутация
13
Реакции
17
Баллы
1 260
Хроники
  1. Interlude
Сборка
pw
Сборка pw.
Скилл Body To Mind (1157).
Нужно сделать чтоб он нажатием сливал Нр до 10%.
Готов заплатить.

Код:
<skill id="1157" levels="5" name="Body To Mind">
  <table name="#hpConsume"> 131 209 280 318 366 </table>
  <table name="#power"> 22.0 35.0 47.0 53.0 61.0 </table>
  <table name="#aggro"> 243 379 495 549 611 </table>
  <set name="hpConsume" val="#hpConsume"/>
  <set name="power" val="#power"/>
  <set name="target" val="TARGET_SELF"/>
  <set name="reuseDelay" val="2000"/>
  <set name="hitTime" val="4000"/>
  <set name="skillType" val="MANAHEAL"/>
  <set name="isMagic" val="true"/>
  <set name="operateType" val="OP_ACTIVE"/>
  <set name="castRange" val="-1"/>
  <set name="effectRange" val="-1"/>
  <set name="aggroPoints" val="#aggro"/>
  <for>
  </for>
</skill>
 
В общем пообщались с человеком.
Сливать процентом ему не подойдет, так как чар имеет много буста на статику HP, а процент считает только процент
Из вариантов нормального релиза - остается только делать специальный эффект который будет считать хп глобально и от него уже вычитать как это сделано в хронах гф+. Где есть тот же оверзебоди)
 
Кстати а если стату лимита хп заюзать так же в кратковременном баффе?
Я правда не помню уже, были ли уже скиллы типа Seal of Limit в интерлюде, как раз на время срезающие макс. хп
XML:
    <skill id="1509" levels="9" name="Печать Предела" pts_name="[s_seal_of_limit1]" enchant_levels="20">
        <table name="#val1">0</table>
        <table name="#val2">0</table>
        <stat name="icon" value="icon.skill1509" />
        <stat name="magicType" value="magic" />
        <stat name="magicLevel" value="{81 83 85 90 95 99 101 103 105}" />
        <stat name="activateRate" value="{90}" />
        <stat name="effectPoint" value="679" />
        <stat name="mpConsume1" value="{20 30 50 56 61 66 71 76 81}" />
        <stat name="mpConsume2" value="{70 100 202 222 245 266 287 308 329}" />
        <stat name="hitTime" value="2.11" />
        <stat name="coolTime" value="0.5" />
        <stat name="reuseDelay" value="120" />
        <stat name="castRange" value="900" />
        <stat name="effectiveRange" value="1300" />
        <stat name="affectRange" value="200" />
        <stat name="target" value="AURA" />
        <stat name="skillType" value="DEBUFF" />
        <stat name="operateType" value="ACTIVE" />
        <stat name="abnormalType" value="limit" />
        <stat name="abnormalLevel" value="{1 2 3 4 5 6 5 5 6}" />
        <stat name="abnormalTime" value="30" />
        <stat name="nextAction" value="none" />
        <stat name="debuff" value="1" />
        <enchant route="1" name="Шанс" levels="5+">
            <table name="#activateRate" type="ADD">{enchantLevel}</table>
        </enchant>
        <enchant route="2" name="Сглаз" levels="5+">
            <table name="#val1" type="SUB">{0.6 + enchantLevel * 0.4}</table>
        </enchant>
        <enchant route="3" name="Разум" levels="5+">
            <table name="#val2" type="SUB">{0.6 + enchantLevel * 0.4}</table>
        </enchant>
        <for>
            <pvp_effect name="p_effect">
                <mul order="0x30" stat="hpLimit" value="{80 70 60 50 40 30 40 40 30};per" />
                <mul order="0x30" stat="mpLimit" value="{80 70 60 50 40 30 40 40 30};per" />
                <mul order="0x30" stat="cpLimit" value="{80 70 60 50 40 30 40 40 30};per" />
            </pvp_effect>
            <effect name="p_effect">
                <mul order="0x30" stat="hpGain" value="-25;per" />
                <mul order="0x30" stat="pDef" value="#val1;per" subLevels="2001:2020" />
                <mul order="0x30" stat="mDef" value="#val2;per" subLevels="3001:3020" />
            </effect>
        </for>
    </skill>
 
Нету. Такие эффекты появились в гф только.
 
Добавляем в L2Skill.java
100 - это не берем хп по дефолту. 10 поставить, опустит хп до 10ти%
Java:
    private final int _hpConsumePercent;
    _hpConsumePercent = set.getInteger("hpConsumePercent", 100);


    public final int getHpConsumePercent() {
        return _hpConsumePercent;
    }

это закидываем в L2Character.java / Creature.java
можно там где итемы забирает и идет последний возврат чтобы каст скила был 100%
либо там где дефолтная проверка на хп (пример точ оф дез)
также тут проверка на то чтобы не хилили хп если хп ниже указанного уровня
Java:
        if (skill.getHpConsumePercent() < 100) {
            if (getCurrentHp()<(getMaxHp()*skill.getHpConsumePercent()/100))
                return false;  //or return
            setCurrentHp(getMaxHp()*skill.getHpConsumePercent()/100);
        }
 

а что, исходников у него нету?
если есть, то в чем конкретная проблема? в любом случае в ядре есть рассчет итогового количества хп с бустами. от этого значения и считать процент.
или ваще психануть, и пойти от обратного - зачем ему сливаться до 10%? может проще повысить процент заюза скилов, для которых он это делает? ну это совсем наркомания, но под его концепт может и пойдет
 
Если бы были исходы у него лично, то мы бы не вели разговор о том что нужно как-то изъебнуться в дп для релиза.
У него есть кодер с исходами вроде - он сказал что даст ему уже заказ в будущем.

Быстрый слив ему нужен для кдл.
И на данный момент чел костылями уже сделал, что хотел.
 

ПВ без исходов? это сильно) ну расскажите, каким костылем сделали, может кому в будущем пригодится
 
Судя по неймингу, дефолтное значение у параметра который отнимает хп в процентах должно быть 0, 100 - суицид.
В методе отнимания хп лучше зафиксировать значение которое проверяется в условии и передается в значении setCurrentHp (рейс кондишн может быть)
 
Запрещено публиковать исходный код без BB-кода — CODE
<skill id="1157" levels="5" name="Body To Mind">
<table name="#hpConsume"> 131 209 280 318 366 </table>
<table name="#power"> -90.0 -90.0 -90.0 -90.0 -90.0 </table>
<table name="#aggro"> 243 379 495 549 611 </table>
<set name="power" val="#power"/>
<set name="target" val="TARGET_SELF"/>
<set name="reuseDelay" val="20000"/>
<set name="hitTime" val="4000"/>
<set name="skillType" val="HEAL_PERCENT"/>
<set name="isMagic" val="true"/>
<set name="operateType" val="OP_ACTIVE"/>
<set name="castRange" val="-1"/>
<set name="effectRange" val="-1"/>
<set name="aggroPoints" val="#aggro"/>
<for>
</for>
</skill>

если прописать так то отнимает 90% хп, но это не установка 10% хп

хотя вот даже лучше сделал

<skill id="1157" levels="5" name="Body To Mind">
<table name="#hpConsume"> 131 209 280 318 366 </table>
<table name="#aggro"> 243 379 495 549 611 </table>
<set name="target" val="TARGET_SELF"/>
<set name="reuseDelay" val="20000"/>
<set name="skillType" val="HEAL_PERCENT"/>
<set name="hitTime" val="6000"/>
<set name="isMagic" val="true"/>
<set name="operateType" val="OP_ACTIVE"/>
<set name="castRange" val="-1"/>
<set name="effectRange" val="-1"/>
<set name="aggroPoints" val="#aggro"/>
<for>
<effect count="1" name="Buff" time="1" val="0">
<mul order="0x30" stat="maxHp" val="0.05"/>
</effect>
</for>
</skill>
 
ну собственно как и всегда от этого товарища. куча тумана, ноль конкретики и подтверждения слов кодом или инфой проверяемой.
<table name="#power"> -90.0 -90.0 -90.0 -90.0 -90.0 </table>

это не прокатит. павер тут дает количество манны, а не отнимает ХП
 
ну мы упираемся в оператор - "skillType" который прописан в ядре
поэтому либо то либо то)
 
healpercent будет работать с отрицательным значением? и вообще корректно? так как если на 80% хп он отнимет 90 - то это может быть суицид. или наоборот, не срабатывать, пока не наберется 90%, что бред при ЦДЛ
 
Запрещено публиковать исходный код без BB-кода — CODE
просто пишет значение хп без минуса но оно минусовое

оптимальный вариант это вот
<for>
<effect count="1" name="Buff" time="1" val="0">
<mul order="0x30" stat="maxHp" val="0.05"/>
</effect>
</for>
 
Запрещено публиковать исходный код без BB-кода — CODE
интересная штука с этими ордерами
чем больше ордер тем точнее ставит
например если так то ставит ровно 0.1 от хп
<skill id="1157" levels="5" name="Body To Mind">
<table name="#aggro"> 243 379 495 549 611 </table>
<set name="target" val="TARGET_SELF"/>
<set name="reuseDelay" val="20000"/>
<set name="skillType" val="HEAL_PERCENT"/>
<set name="hitTime" val="6000"/>
<set name="isMagic" val="true"/>
<set name="operateType" val="OP_ACTIVE"/>
<set name="castRange" val="-1"/>
<set name="effectRange" val="-1"/>
<set name="aggroPoints" val="#aggro"/>
<for>
<effect count="1" name="Buff" time="1" val="0">
<mul order="0x80" stat="maxHp" val="0.1"/>
</effect>
</for>
</skill>
 
а что этот ордер задает? может как-то связанно с заданием интервала рандомайзера допуска к значению?
 
ну это скорее всего задаёт какую то точность вычисления или в какую сторону округлять
чат гпт мне пишет что это шеснадцатиричная система

Вы задали вопрос про значения вида order="0x30", order="0x40", и order="0x10". Эти значения обычно встречаются в контексте программирования или настройки, где 0x указывает на шестнадцатеричную систему счисления. Давайте разберемся, что они могут означать в различных контекстах:

  1. Шестнадцатеричная система:
    • 0x30, 0x40, 0x10 представляют собой числа в шестнадцатеричной системе счисления.
    • В шестнадцатеричной системе числа от 0 до 9 обозначаются так же, как в десятичной системе, а числа от A до F представляют значения от 10 до 15.
    • Таким образом, 0x30 соответствует десятичному числу 48, 0x40 соответствует 64, а 0x10 соответствует 16.
 
Ордер - это буквально порядок вычисления базовых математических операций в калькуляторе. Т.е чем ниже ордер, тем больший приоритет имеет операция.
Т.е например в выражении 2 + 2 * 2, у "*" ордер 0x30, а у "+" ордер 0x40. Значения 0x30 и 0x40 ни к чему конкретному не привязаны, так повелось просто.
0x10 - обычно это set(т.е ставим значение на указанное)
0x30 - mul - т.е умножение
0x40 - add - т.е сложение
 
а что тогда ордер значит в коде в цитате выше? и почему у AlhimN1 с mul order="0x80" точнее уменьшает хп?
 
это значит, что связанная с ним операция в калькуляторе выполнится после меньших ордеров. Т.е условно, если ты хочешь отнять % от здоровья(ХП), логично дождаться вычисления всех функций с базовыми ордерами, чтобы получить корректное значение, а потом от него уже получить нужное значение этой операцией с ордером 0x80
Опять же, ничего не помешает тебе поменять ордеры на любые, которые ты захочешь. Важно лишь их отношение к друг другу по величине. Если в ядре нет нигде хардкода на эту тему, ты там можешь написать и 0xAAAA и 0xAAAB, instead 0x30 и 0x40 и от этого ничего не поменяется
 
Реакции: BladeRunner

    BladeRunner

    Баллов: 7
    спасибо! теперь вроде понятно! осталось детали вкурить, как расставлять ордеры, когда сложные формулы с чередующимися сложениями и умножениями
ну вот из явы такие классы там прописаны для ордера

Код:
[/HEADING]
public abstract class Func {
  public final Stats stat;
  
  public final int order;
  
  public final Object funcOwner;
  
  public Condition cond;
  
  public Func(Stats pStat, int pOrder, Object owner) {
    this.stat = pStat;
    this.order = pOrder;
    this.funcOwner = owner;
  }
[HEADING=2][CODE][/HEADING]