Wake of Gods Forum | Форум Во Имя Богов
Логические/математические операции на ЕРМ - Printable Version

+- Wake of Gods Forum | Форум Во Имя Богов (http://wforum.heroes35.net)
+-- Forum: Герои Меча и Магии 3.5 WoG/ERA (/forumdisplay.php?fid=99)
+--- Forum: Скрипты (/forumdisplay.php?fid=103)
+--- Thread: Логические/математические операции на ЕРМ (/showthread.php?tid=5787)


Логические/математические операции на ЕРМ - igrik - 18.09.2015 00:34

Кстати, подскажите что такое бит на программном уровне?
Например:
Можно ли ли y1=95, где я установил сам y1=1+2+4+8+16+32+64 проверить на бит &32?
Я установил, что в стеке 0 есть монстр который меня интересует, поэтому y1=1;
во втором стеке тоже есть, поэтому y1=Sy1 +2; и т.д.
Могу ли я как-то проверить слот №1 (0...6), через &2, что во втором слоте есть монстр, который меня интересует?


RE: Ваши вопросы по ERM-скриптам - gamecreator - 18.09.2015 01:24

(18.09.2015 00:34)igrik Wrote:  Кстати, подскажите что такое бит на програмном уровне?
Можно сказать, что это элементарное значение составного логического типа (пример - те же флаги существ).
(18.09.2015 00:34)igrik Wrote:  Можно ли ли y1=95, где я установил сам y1=1+2+4+8+16+32+64 проверить на бит &32?
Можно, но 1+2+4+8+16+32+64=127, а 95=1+2+4+8+16+64.
(18.09.2015 00:34)igrik Wrote:  Я установил, что в стеке 0 есть монстр который меня интересует, поэтому y1=1;
во втором стеке тоже есть, поэтому y1=Sy1 +2; и т.д.
Могу ли я как-то проверить слот №1 (0...6), через &2, что во втором слоте есть монстр, который меня интересует?
Получаешь y1&2 и если это не 0 (то есть это 2), то бит 1 установлен. Соответственно, для бита n проверять нужно уже y1&2n.


Логические/математические операции на ЕРМ - igrik - 07.12.2015 01:56

Как правильно вычитать флаги монстров в бою? Нужно отобрать флаг двойного удара (32768)


RE: Ваши вопросы по ERM-скриптам - Algor - 07.12.2015 01:59

|32768 -32768


RE: Ваши вопросы по ERM-скриптам - igrik - 07.12.2015 02:07

я правильно понял?
дать

отобрать



RE: Ваши вопросы по ERM-скриптам - Bes - 07.12.2015 02:33

!!BMy5:F?i;
!!VRi:&-32769;
!!BMy5:Fi;

не?! Unsure я за неимением практики мог ошибиться


RE: Ваши вопросы по ERM-скриптам - gamecreator - 07.12.2015 05:15

(07.12.2015 02:07)igrik Wrote:  отобрать
Если ты уверен, что он есть. Но лучше делать как написал Algor или bugyboy.


RE: Ваши вопросы по ERM-скриптам - igrik - 07.12.2015 16:49

Quote:не?! Unsure я за неимением практики мог ошибиться
Вот и я такой же, да и никогда с ними дела толком не имел. Сделал вот так. Хз. Присмотрюсь на счет багов



RE: Ваши вопросы по ERM-скриптам - Algor - 07.12.2015 23:55

(07.12.2015 02:07)igrik Wrote:  я правильно понял?

Не совсем:

дать

отобрать



RE: Ваши вопросы по ERM-скриптам - fatsawhorse - 10.12.2015 02:10

Здравствуйте... А скажите пожалуйста, а почему таким образом флаг нельзя отобрать?

!!BMy5:F?i;
!!VRi:-32768;
!!BMy5:Fi;

Я всегда считал, что если "+" даёт, то "-" тогда отнимает флаг

Неужели обязательно ставить таким образом

!!BMy5:F?i;
!!VRi:|32768 -32768;
!!BMy5:Fi;


RE: Ваши вопросы по ERM-скриптам - gamecreator - 10.12.2015 02:37

(10.12.2015 02:10)fatsawhorse Wrote:  А скажите пожалуйста, а почему таким образом флаг нельзя отобрать?
Потому что это небезопасно. Как и + для установки флага.


RE: Ваши вопросы по ERM-скриптам - igrik - 10.12.2015 03:32

Граждане математики, как получить квадратный корень от числа на ерм?


RE: Ваши вопросы по ERM-скриптам - feanor - 10.12.2015 15:32

(10.12.2015 02:10)fatsawhorse Wrote:  Здравствуйте... А скажите пожалуйста, а почему таким образом флаг нельзя отобрать?

!!BMy5:F?i;
!!VRi:-32768;
!!BMy5:Fi;

Я всегда считал, что если "+" даёт, то "-" тогда отнимает флаг

Неужели обязательно ставить таким образом

!!BMy5:F?i;
!!VRi:|32768 -32768;
!!BMy5:Fi;
потому что если флага у существа не будет, то + и - превратят остальные флаги в кашу

(10.12.2015 03:32)igrik Wrote:  Граждане математики, как получить квадратный корень от числа на ерм?
у меня есть три варианта, и все отвратительные
один - реализация чего-то из вычмата, например, ряда Тейлора (или Маклорена), приду домой, посмотрю в справочнике
второй - дллка, которая будет экспортить sqrt()
третий - 0x5f3759df, но это если из флоата считать надо

ну и, конечно, табличками


RE: Ваши вопросы по ERM-скриптам - gamecreator - 10.12.2015 17:22

Мне уже однажды не хватало в ЕРМ интерфейса для мат. сопроцессора. Очень неудобно работать с функциями, возвращающими действительное значение.
Кстати, третий, менее отвратительный вариант тоже есть: найти функцию корня в ехе и написать в память код для её вызова, который вызвать через SN:E.


RE: Ваши вопросы по ERM-скриптам - feanor - 10.12.2015 19:10

Кстати да, оно ж там есть, вместе с приличной частью математической и строковой либы. По крайней мере, ида опознает sqrt, хоть и не скажу сейчас адрес.


RE: Ваши вопросы по ERM-скриптам - igrik - 10.12.2015 19:42

млин, чеж я сразу то не догадался в иде глянуть
Code:
v115 = (long double)a3;
v112 = sqrt(v115 * 0.05 + 1.0);
v115 = (long double)v117;
v115 = sqrt(v115 * 0.05 + 1.0) * v112 * a2;

call sqrt = 0x00618154 double (_cdecl *)(double)

Ток вот теперь назрел вопрос. Зам я значение вот так !!SN:E6390100/1/25;
А как правильно то его получить.
Можно же перевести во флоат (SN:Xe1 X?y1), а как перевести из флоат? Да и v1 правильно ли примет значение после !!SN:E6390100/1/25;


RE: Ваши вопросы по ERM-скриптам - feanor - 10.12.2015 19:57

Меня вот интересует, почему я не догадался глянуть в иде (этак за два года!) на strtok, strstr и тому подобные нормальные строковые функции. Массаракш.

Будет свободный вечор, надо будет перегнать их в SNE

Quote:а как перевести из флоат?
если я правильно помню, надо прибавить +4 к второму параметру SN:E и результат вернется в e1


RE: Ваши вопросы по ERM-скриптам - igrik - 10.12.2015 20:09

Quote:если я правильно помню, надо прибавить +4 к второму параметру SN:E и результат вернется в e1
Это как?


RE: Ваши вопросы по ERM-скриптам - gamecreator - 10.12.2015 21:26

(10.12.2015 19:57)feanor Wrote:  если я правильно помню, надо прибавить +4 к второму параметру SN:E и результат вернется в e1
Надо же, я и не знал про такое. Ну тогда и напрямую можно вызвать.


RE: Ваши вопросы по ERM-скриптам - feanor - 11.12.2015 00:50

(10.12.2015 20:09)igrik Wrote:  
Quote:если я правильно помню, надо прибавить +4 к второму параметру SN:E и результат вернется в e1
Это как?
к тому, который calling conventions
не 0..3, а 4..7

но хз, я не гонял


RE: Ваши вопросы по ERM-скриптам - gamecreator - 11.12.2015 01:41

Должно работать, я в исходниках глянул.


RE: Ваши вопросы по ERM-скриптам - igrik - 20.01.2016 22:35

(20.01.2016 21:40)Barin Wrote:  Например, я заменил деф "1-гексового Громовержца" на "моего 2-гексового бехолдера" и на этом всё, не могу изменять абилки этого монстра (№152).

1) не правильно работаешь с флагами. Хотя тут еще нужно видеть, в каком триггере ты используешь этот участок кода (такой код правильно сработает до битвы, но не в битве). Но все же верно устанавливать флаги так (тем более обнулять):



RE: Ваши вопросы по ERM-скриптам - Bes - 21.01.2016 01:35

(20.01.2016 23:04)Barin Wrote:  Неправильно или не компактно? Делаю по примеру из справочника.
У меня так:
и т.д


имхо, некорректно
надо просто приучать себя делать как правильнее.
а вдруг каким-то образом у того твоего монстра уже не будет этого флага полёта? (ты уверен что мод будет без прочих скриптов не твоих?) а ты ещё и отнимешь 2 бита... можно словить неуловимый баг
будешь потом голову ломать откуда ноги растут...


RE: Ваши вопросы по ERM-скриптам - gamecreator - 21.01.2016 02:34

(21.01.2016 01:35)bugyboy Wrote:  а ты ещё и отнимешь 2 бита
1 бит*



RE: Ваши вопросы по ERM-скриптам - Barin - 21.01.2016 03:40

Спасибо за инфу, раньше не видел подобный пример.
(20.01.2016 22:35)igrik Wrote:  

|2 (летать)значит установится если у монстра нету этого флага, а как отбирать флаг чтобы не летал? Не придумал куда минус поставить.


RE: Ваши вопросы по ERM-скриптам - igrik - 21.01.2016 11:28

Вот так


RE: Ваши вопросы по ERM-скриптам - Barin - 21.01.2016 16:07

(21.01.2016 11:28)igrik Wrote:  Вот так
Принял на вооружение, однако есть сомнения что это лучший вариант с точки зрения RPG карты, где не будет сторонних скриптов кроме моих:

Вот что происходит:
1) Если методом по ERM-справочнику:

2-х гексовую Виверну заменил на новый 1-гексовый def "Зубастик"
!!MA:X108/?v724;
!!VRv724:-1; не широкий
!!MA:X108/v724;
!!VRv724:S0;
Итог: зубастик 1-гексовый и летает, как мне и нужно.

2) Если методом |(или):
!!VRy1:S0 |1 -1;
!!MA:X108/y1; не широкий
Итог: зубастик 1-гексовый но уже не летает, как мне и нужно. Почему полёт исчезает, видать что-то затирается.

Приходится дописывать:
!!VRy1:S0 |2; летает
!!MA:X108/y1;

Что же получается, в 1-м случае я получаю сразу то что хотел, не затрагивая другие флаги, а во 2-м случае мне приходится восстанавливать задетые флаги. Разве это безопасный путь?

p.s чебрец полный:



RE: Ваши вопросы по ERM-скриптам - igrik - 21.01.2016 17:36

да ты чё!??? ты же спрашивал про обнуление. Я и написал тебе S0!!!! Конечно он не летает, конечно он не стреляет. А еще он не Кинг 1, а еще у него иммунитета к заклинаниям разума. Ты разберись с основами то сначала.
Quote:Думал так можно сделать этого юнита чистым от всего и появится возможность его править.
Твои же слова. Я и дал тебе то что ты просил. Или тогда правильней формулируй свои вопросы.
То что в данном случае "!!VRy1:S0; полностью удаляет все флаги" - ты просто обязан понимать. Или тогда я даже не представляю что у тебя там в моде творится.
Если тебе нужно просто убрать например полет, то так и спрашивай "мне нужно убрать полет".
Это делается так:

Если тебе нужно убрать полет(2) и стрелбу (4), то вот так делать НЕ надо!

а надо так



RE: Ваши вопросы по ERM-скриптам - gamecreator - 21.01.2016 19:17

(21.01.2016 17:36)igrik Wrote:  Ты разберись с основами то сначала.
Ты чего, у него же нет времени и желания разбираться. Надо кампанию доделывать. 96-copy

(21.01.2016 17:36)igrik Wrote:  Если тебе нужно убрать полет(2) и стрелбу (4), то вот так делать НЕ надо!
Почему это? С небольшой поправкой "где 6=2|4".


RE: Ваши вопросы по ERM-скриптам - Algor - 21.01.2016 23:34

(21.01.2016 19:17)gamecreator Wrote:  
(21.01.2016 17:36)igrik Wrote:  Если тебе нужно убрать полет(2) и стрелбу (4), то вот так делать НЕ надо!
Почему это? С небольшой поправкой "где 6=2|4".

НЕ НАДО так делать даже с поправкой. И пусть с математической точки зрения все верно, это плохой стиль.
6=2|4 довольно просто, а вот 884736 (мертвый, бьющий дважды всех вокруг без ответа) - ни фига не очевидно.


RE: Ваши вопросы по ERM-скриптам - gamecreator - 21.01.2016 23:44

Можно в комментарии написать расшифровку. В таком варианте снятия флагов приходится по два раза всё повторять, команда может выйти довольно длинной.


RE: Ваши вопросы по ERM-скриптам - Berserker - 22.01.2016 16:25

Игрик, супер! Я до такого сам как-то не дошёл )))


RE: Ваши вопросы по ERM-скриптам - igrik - 22.01.2016 16:58

Поправочка: -> Algor. 4


RE: Ваши вопросы по ERM-скриптам - gamecreator - 22.01.2016 17:23

Да это старо как ERM. Я ещё до существования этого форума на DF2 это видел.


RE: Ваши вопросы по ERM-скриптам - Berserker - 22.01.2016 17:58

Как-то массово видно не было, всё *-1 -1 использовалось.


RE: Ваши вопросы по ERM-скриптам - Bes - 22.01.2016 22:19

очевидно, нужно вычленить все эти вопросы работы с примерами по оперированию с переменными в отдельную тему.

сделал Boast


RE: Ваши вопросы по ERM-скриптам - ElfbI - 24.08.2019 03:44

Есть вопрос, у меня проверка флагов горыныча возвращает отрицательное значение (-2147385189), даже если перед проверкой флаги выставить вручную. Никто не сталкивался?


С другими флагами и существами при обработке через подобный код никаких проблем. Может кто-нибудь проверить?


RE: Ваши вопросы по ERM-скриптам - Berserker - 24.08.2019 13:15

ElfbI, 32-битное целое число со знаком может кодировать значения -2147483648..2147483647, что соответствует 0..4294967295 для беззнакового.
Старший (31-й бит, начиная отсчёт с нуля) дополнительно отвечает за знак в знаковом. Любой флаг можно сконвертировать в число если возвести 2 в степень номера флага.
Флаг 0 = 2^0 = 1
Флаг 3 = 2^3 = 8
Флаг 31 = 2^31 = -2147483648 (число становится отрицательным, поскольку это ещё и бит, отвечающий за знак)
https://yadi.sk/i/64cIfyXshYtWaA

В твоём случае флаги: флаг 31 (-2147483648) + флаг 16 (65536) + флаг 15 (32768) + флаг 7 (128) + флаг 4 (16) + флаг 3 (8) + флаг 1 (2) + флаг 0 (1)


RE: Неформальное общение - Bes - 01.04.2020 03:12

пока писал пост с советами, понял что забыл как писать множественные условия, стал писать FU|...|...:P;
забыл как флаги стэкам снимать корректно: -17 или &-17
даж забыл как флаг на истину выставлять: написал поначалу !!IF:V555;

практика - она такая, мелочи без неё теряются в раз Sorry


RE: Неформальное общение - Berserker - 01.04.2020 03:33

FU&.../.../...
& - И
| - ИЛИ

Снимать как -(N + 1), то есть -18 в твоём случае


RE: Неформальное общение - Algor - 01.04.2020 11:13

(01.04.2020 03:33)Berserker Wrote:  Снимать как -(N + 1), то есть -18 в твоём случае

Не надо так делать. Это потенциальное место шибок.
|17; - дать флаг 17
|17 -17; - убрать флаг 17


RE: Неформальное общение - Bes - 01.04.2020 15:05

Так, не ссорьтесь ) я вообще-то именно про 16 флаг говорил, его ж надо забрать так?
Или |16 -17


RE: Неформальное общение - Algor - 01.04.2020 16:25

|16 -16


RE: Неформальное общение - Berserker - 01.04.2020 17:23

Выше речь шла про флаг 16, тьфу ты, Бес, попутал )

Algor, &-17 всегда сработает корректно. Но не напрягать мозг можно и так, вполне себе вариант.

В Эре 3.0



RE: Ваши вопросы по ERM-скриптам - Archer30 - 13.12.2020 18:15

Hi! Is there a way to calculate square root in ERA 2.9.14?


RE: Ваши вопросы по ERM-скриптам - Berserker - 13.12.2020 18:27

Archer30, https://dropmefiles.com/neUkr
math.era plugin !!SN:A, L. E to execute ^sqrt^ function with STDCALL convention, accepting e-variable and returning result in e1.


RE: Ваши вопросы по ERM-скриптам - Archer30 - 13.12.2020 18:31

132 Thanks a lot, Berserker!


RE: Ваши вопросы по ERM-скриптам - Archer30 - 13.12.2020 20:31

Berserker, I'm having trouble dealing with this math.era, could you help, please?


I keep getting e1 = 0.00 Fie


RE: Ваши вопросы по ERM-скриптам - Berserker - 13.12.2020 21:17




RE: Ваши вопросы по ERM-скриптам - Archer30 - 13.12.2020 21:40

Thanks, Berserker. Didn't know there is SN:E#1/5 too...


RE: Ваши вопросы по ERM-скриптам - Berserker - 13.12.2020 21:57

Main issue is that you pass integer x1, not floating point number e. They have different binary representation.


RE: Ваши вопросы по ERM-скриптам - Sashka40 - 28.01.2022 05:15

Добрый день, не очень понятно как сделать в MA из двухклеточного одноклеточного монстра (как наоборот ясно, через хлаги, а тут как-то минусовать надо)


RE: Ваши вопросы по ERM-скриптам - igrik - 28.01.2022 06:20

(28.01.2022 05:15)Sashka40 Wrote:  Добрый день, не очень понятно как сделать в MA из двухклеточного одноклеточного монстра (как наоборот ясно, через хлаги, а тут как-то минусовать надо)
Bes, добавь этот пример в справку. Вопрос по отключеню определённого флага довольно частый (и желательно не использовать i-переменную)


RE: Ваши вопросы по ERM-скриптам - Sashka40 - 28.01.2022 06:44

igrik, Спасибо вам!


RE: Логические/математические операции на ЕРМ - SergOz - 10.07.2023 09:56

Где-то видел, а сейчас не могу найти... Хотя, такому самое место в этой теме.
В общем, мне нужно, на ERM, возводить число в степень n.
На ум приходят только какие-то длинннннющие коды.
Может, кто знает как это сделать красиво?


RE: Логические/математические операции на ЕРМ - Archer30 - 10.07.2023 10:29

SergOz, There is Pow from Era Erm Framework

To use:



RE: Логические/математические операции на ЕРМ - SergOz - 10.07.2023 12:41

Archer30, спасибо Thank_you
А как ты понял слово "длинннннющие"? 96 это типа "lonnnnnng"?


RE: Логические/математические операции на ЕРМ - Berserker - 10.07.2023 23:20

Тот же яндекс переводит как «long». Прогресс.