Secondary skills manager for TE, function allows change some SS values |
Здравствуйте, гость ( Вход | Регистрация )
Secondary skills manager for TE, function allows change some SS values |
23 Jun 2007, 23:25
(Сообщение отредактировал Demiurg - 03 Aug 2007, 21:12)
Сообщение
#1
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
качать отсюда
Здесь представлена функция дли установки и получения силы 16 вторичных навыков на уровнях none, basic, advanced, expert. Синтаксис: Код !!FU27512:P<skill_number>/<mastery>/<integer value>/<mode>/<index of float variable>; skill_number: must be from {1, 2, 3, 4, 6, 8, 9, 11, 12, 13, 21, 22, 23, 24, 25 ,26} mastery: none - 0, basic - 1, advanced - 2, expert - 3 integer value: optional parameter, variable or value(if write) mode: 0 - read, 1 - write(0 by default) index of float variable: optional parametr, index of (e-)-variable if need convert (in this case must be less than 0) Сначала проверяется 5ый параметр. Если он меньше нуля, то идет чтение(запись) переменной с плавающей запятой. Иначе идет чтение(запись) 3его параметра. Вот тестовый пример работы функции: Код ;После выполнения этого кода базовая логистика будет увеличивать ходы героя на две трети. !?PI; !!VRe-7:S2:3;//устанавливаем число с плавающей точкой !!FU27512:P2/1//1/-7;//устанавливаем силой базовой логистики значение переменной e-7 !!FU27512:P2/1///-1;//получаем в переменную e-1 силу базовой логистики !!VRy-1:S100*e-1;//домножаем на 100, чтобы получить проценты !!IF:M^basic logistics increase movementpoints by %Y-1%%^;//выводим на экран Еще примеры: Код ;при отсутствии интеллекта герои получают 5 маны за знание !?PI; !!VRe-3:S-1:2; !!FU27512:P24/0//1/-3; Код ;герой с экспертным имуществом приносит в казну 830 золота в день !?PI; !!FU27512:P13/3/830/1; Код ;получаем процент, на который продвинутая стрельба увеличивает урон стрелков !?PI; !!FU27512:P1/2///-3; !!VRy6:S100*e-3; !!IF:M^advanced archery skill increase distant damage by %Y6%%^; Код ;Реализация класса Снайпер(герой с баллистикой и стрельбой получает дополнительные бонусы к стрельбе: +10/+20/+30%) из ТЕ с помощью функции. ;new style of Sniper class !#VRv2085:S1; !?BA52&v2085=1; !!VRv2084:S-1; !!BA:H0/?y-1 H1/?y-2; !!HEy-1:S10/?y-3 S1/?y-4; !!VRv2080&y-3<y-4:Sy-3; !!VRv2080&y-3>=y-4:Sy-4; !!VRv2082:Sy-4; !!FU&y-2<0:E; !!HEy-2:S10/?y-3 S1/?y-4; !!VRv2081&y-3<y-4:Sy-3; !!VRv2081&y-3>=y-4:Sy-4; !!VRv2083:Sy-4; !?MM&v2085=1; !!BG:Q?y-1; !!FU&y-1=v2084:E; !!VRv2084:Sy-1; !!VRy1:S2080+y-1; !!VRy2:S2082+y-1; !!VRy3:Svy2*2-1+vy1; !!VRy3&vy2=0:S0; !!VRe-1:S1:10*y3; !!FU27512:P1/vy2//1/-1; !?BG0&v2085=1;//just in case and AI !!BG:Q?y-1; !!FU&y-1=v2084:E; !!VRv2084:Sy-1; !!VRy1:S2080+y-1; !!VRy2:S2082+y-1; !!VRy3:Svy2*2-1+vy1; !!VRy3&vy2=0:S0; !!VRe-1:S1:10*y3; !!FU27512:P1/vy2//1/-1; Вот и сама функция Код ;real - necromancy, archery, attack, armorer, eagle eye, dimplomacy, resistance, learning, logistics, sorcery, intelligence ;for real needs convert ;integer - luck, leadership, mysticism, scouting, estate ;for integer does not need convert !?FU27512;//set power of some SS ;x1 - secondary skill ;x2 - mastery ;x3 - value for write or read ;x4 - mode: 0 - read 1 - write ;x5 - index of (e-)-variable if need convert (in this case must be less than 0) !!FU|x4<0/x4>1:E;//wrong mode (must be 0..1) !!FU|x1<1/x1=5/x1=7/x1=10/x1>26:E;//skills aren't supported !!FU&x1>13/x1<21:E;//skills aren't supported !!FU|x2<0/x2>3:E;//wrong mastery (must be 0..3) !!VRy1&x1=1:S6547944;//archery !!VRy1&x1=2:S6548072;//logistics !!VRy1&x1=3:S6547928;//scouting !!VRy1&x1=4:S6548024;//dyplomacy !!VRy1&x1=6:S6547880;//leadership !!VRy1&x1=8:S6547912;//mysticism !!VRy1&x1=9:S6547864;//luck !!VRy1&x1=11:S6548008;//eagle eye !!VRy1&x1=12:S6547896;//necromancy !!VRy1&x1=13:S6547992;//estate !!VRy1&x1=21:S6548056;//learning !!VRy1&x1=22:S6547960;//attack !!VRy1&x1=23:S6547976;//armorer !!VRy1&x1=24:S6548104;//intelligence !!VRy1&x1=25:S6548088;//sorcery !!VRy1&x1=26:S6548040;//resistance !!VRx2:*4; !!VRy1:+x2; !!if&x4=0:; !!UN:Cy1/4/?x3; !!UN:C10784536/4/x3;//10784536 - address of e1 !!VRex5&x5<0:Se1; !!el:; !!VRe1&x5<0:Sex5; !!UN&x5<0:C10784536/4/?x3;//10784536 - address of e1 !!UN:Cy1/4/x3; !!en:; Замечания: 1) Нужно учитывать, что часть навыков хранится в типе integer, а часть в float. В integer хранятся следующие навыки: leadership, luck, mysticism, scouting, estates. 2) Для некоторых навыков позволены отрицательные значения. Например для интеллекта в одном из примеров устанавливается -0,5. 3) Не забывайте, что функция работает только под ТЕ по следующей причине: "В WOG 3.58f запрещена запись с помощью !!UN:C в область памяти, отвечающей за вторичные скиллы". 4) Описание работы конвертеров: Конвертер из действительного числа в его машинное целочисленное представление записывает по адресу переменной e1 значение и считывает оттуда с помощью !!UN:C его машинное представление. Конвертер из машинного целочисленного представления в действительное число записывает с помощью !!UN:C по адресу переменной e1 машинное представление и копирует переменную e1 в переменную ex2, где x2(<0) - выделенный пользователем индекс для получения значения. -------------------- |
|
|
Гость_Berserker_* |
24 Jun 2007, 19:30
Сообщение
#2
|
|
Если будет работать, будет здорово. Не помешала бы.
|
|
|
25 Jun 2007, 14:42
Сообщение
#3
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Обновление.
Теперь можно не только устанавливать значения навыков, но и получать их. Смотрите первый пост. -------------------- |
|
|
25 Jun 2007, 16:39
Сообщение
#4
|
|
The Unicode Man Сообщений: 993 Спасибо сказали: 6 раз |
Почему ты думаешь, что запрещена запись через !!UN:C в область вторичных навыков?
-------------------- |
|
|
25 Jun 2007, 17:27
(Сообщение отредактировал Demiurg - 25 Jun 2007, 17:36)
Сообщение
#5
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
У меня не получилось
Я пробовал Код !?TM2;
!!UN:C6548108/4/1061158912; -------------------- |
|
|
25 Jun 2007, 23:21
Сообщение
#6
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Обновил ссылку.
Сделал возможность устанавливать и получать значения для уровня развития навыков None. Добавил примеров в первый пост. -------------------- |
|
|
27 Jun 2007, 10:37
Сообщение
#7
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Обновление. Упростил конвертер из машинного представления в действительное число.
-------------------- |
|
|
27 Jun 2007, 13:03
Сообщение
#8
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
там, где по 4 строчки для каждого навыка расписано по-моему пожно упростить в одну
|
|
|
27 Jun 2007, 13:12
Сообщение
#9
|
|
Immortal Сообщений: 2 472 Спасибо сказали: 21 раз |
там условия разные...
|
|
|
27 Jun 2007, 15:50
Сообщение
#10
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
нет, напр. первую четверку как:
!!UN&x1=9:C6547864+x2*4/4/x3; Добавлено ([mergetime]1182948642[/mergetime]): там закономерность есть |
|
|
27 Jun 2007, 16:31
(Сообщение отредактировал Чёртос-2 (Chortos-2) - 27 Jun 2007, 16:35)
Сообщение
#11
|
|
The Unicode Man Сообщений: 993 Спасибо сказали: 6 раз |
ERM‐интерпретатор не поймет.
Я бы сделал так (хотя, если бы я это писал, я бы, во‑первых, сделал одну и ту же функцию и для чтения, и для записи, во‑вторых, возвращал бы значение в x3, а не vx3): Код !?FU27512; ;x1 - secondary skill ;x2 - mastery ;x3 - value for write !!FU|x1<1/x1=5/x1=7/x1=10/x1>26:E; !!FU&x1>13/x1<21:E; !!VRy1&x1=1:S6547944;//archery !!VRy1&x1=2:S6548072;//logistics !!VRy1&x1=3:S6547928;//scouting !!VRy1&x1=4:S6548024;//dyplomacy !!VRy1&x1=6:S6547880;//leadership !!VRy1&x1=8:S6547912;//mysticism !!VRy1&x1=9:S6547864;//luck !!VRy1&x1=11:S6548008;//eagle eye !!VRy1&x1=12:S6547896;//necromancy !!VRy1&x1=13:S6547992;//estate !!VRy1&x1=21:S6548056;//learning !!VRy1&x1=22:S6547960;//attack !!VRy1&x1=23:S6547976;//armorer !!VRy1&x1=24:S6548104;//intelligence !!VRy1&x1=25:S6548088;//sorcery !!VRy1&x1=26:S6548040;//resistance !!VRx2:*4; !!VRy1:+x2; !!UN:Cy1/4/x3; !?FU27513; ;x1 - secondary skill ;x2 - mastery ;x3 - index of v-variable !!FU|x1<1/x1=5/x1=7/x1=10/x1>26:E; !!FU&x1>13/x1<21:E; !!VRy1&x1=1:S6547944;//archery !!VRy1&x1=2:S6548072;//logistics !!VRy1&x1=3:S6547928;//scouting !!VRy1&x1=4:S6548024;//dyplomacy !!VRy1&x1=6:S6547880;//leadership !!VRy1&x1=8:S6547912;//mysticism !!VRy1&x1=9:S6547864;//luck !!VRy1&x1=11:S6548008;//eagle eye !!VRy1&x1=12:S6547896;//necromancy !!VRy1&x1=13:S6547992;//estate !!VRy1&x1=21:S6548056;//learning !!VRy1&x1=22:S6547960;//attack !!VRy1&x1=23:S6547976;//armorer !!VRy1&x1=24:S6548104;//intelligence !!VRy1&x1=25:S6548088;//sorcery !!VRy1&x1=26:S6548040;//resistance !!VRx2:*4; !!VRy1:+x2; !!UN:Cy1/4/?vx3; Функция умеет работать только с 16‑ю навыками, но это нигде не сказано. Непорядок. -------------------- |
|
|
27 Jun 2007, 18:48
Сообщение
#12
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Цитата(Чёртос-2 (Chortos-2) @ 27 Jun 2007, 17:31) ERM‐интерпретатор не поймет. Я бы сделал так (хотя, если бы я это писал, я бы, во‑первых, сделал одну и ту же функцию и для чтения, и для записи, во‑вторых, возвращал бы значение в x3, а не vx3): 1) Насколько я знаю, считается дурным тоном объединять методы Set и Get в один. 2) Согласен с тем, что нужно возвращать в x3. Исправлю. 3) Посмотрю, насколько большой выигрыш по скорости получается при использовании сокращения. Цитата Функция умеет работать только с 16‑ю навыками, но это нигде не сказано. Непорядок. Сказано в названии темы (change some SS values). Но, согласен, в посте нужно продублировать. -------------------- |
|
|
27 Jun 2007, 19:50
(Сообщение отредактировал Чёртос-2 (Chortos-2) - 27 Jun 2007, 19:51)
Сообщение
#13
|
|
The Unicode Man Сообщений: 993 Спасибо сказали: 6 раз |
Цитата(Demiurg @ 27 Jun 2007, 18:48) Насколько я знаю, считается дурным тоном объединять методы Set и Get в один. Возможно, но, во‑первых, я не согласен — почему нет? Во‑вторых, можно сделать разный синтаксис, как у меня:Код !!FU#:P0/#/#/#; В‑третьих, это разумно, так как сэкономит целую функцию, а сейчас в ERM номера — какие бы то ни было — нарасхват.
!!FU#:P1/#/#/?$; -------------------- |
|
|
Гость_Berserker_* |
27 Jun 2007, 21:16
Сообщение
#14
|
|
Согласен с Чёртосом. Комментарий (ложка дегтя в бочке мёда):
3) Посмотрю, насколько большой выигрыш по скорости получается при использовании сокращения. Не посмотришь Никак. |
|
|
27 Jun 2007, 21:50
Сообщение
#15
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Цитата(Berserker @ 27 Jun 2007, 22:16) 3) Посмотрю, насколько большой выигрыш по скорости получается при использовании сокращения. Не посмотришь Никак. Почему? Запускаешь цикл до 1000000 (10000000 или сколько нужно) и засекаешь время на одной функции, потом на другой. По отношению времени смотришь, какой алгоритм работает быстрее. Я таким методом сравнивал несколько алгоритмов сортировки, которые за Nlog2N. Запускал их на 10000000 чисел. Один работал 70 секунд, другой 140 секунд, третий тоже 140 секунд. (Это было еще на старом компе, поэтому так долго.) Как говорится время хороший свидетель скорости. -------------------- |
|
|
Гость_Berserker_* |
28 Jun 2007, 20:51
Сообщение
#16
|
|
Ну в лоб всё можно. Только комп работает с разной нагрузкой (смотря какие приложения запущены) + если ты запустишь такой цикл, то ЕРМ надолго заснёт. читать (НАДОЛГО). Ну и время ты как, вручную замерять будешь?
З.Ы Жаль, что воговцы свои алгоритмы не оптимизировали и время не проверяли. Заметка по ЕРМ: выгоднее писать макросы (то есть которые будут текстом вставляться в код), чем вызывать функцию. Значительный выигрышь времени. Не надо анализировать, обнулять переменные, резервировать место + (ещё внутренняя кухня) ЕРМ. |
|
|
28 Jun 2007, 21:52
Сообщение
#17
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Время как-нибудь уж померю Была бы проблема.
Насчет макросов. Они страшно глючат. Медленный и безглючный код лучше быстрого и нерабочего. Благо для большинства скриптов есть большой запас по скорости. -------------------- |
|
|
Гость_Berserker_* |
28 Jun 2007, 22:29
Сообщение
#18
|
|
Я про другие макросы, скоро узнаешь
|
|
|
28 Jun 2007, 22:47
Сообщение
#19
|
|
Immortal Сообщений: 670 Спасибо сказали: 14 раз |
Цитата(Berserker @ 28 Jun 2007, 23:29) Я про другие макросы, скоро узнаешь Ждемс. Только мне кажется, что не все так просто. Я думаю, что время работы скрипта зависит еще и от его длины. А использование макросов вместо функций ведет к удлинению скрипта -------------------- |
|
|
Гость_Berserker_* |
29 Jun 2007, 22:24
Сообщение
#20
|
|
Нет, нет, и ещё раз нет Причина: ЕРМ-парсер не преобразует исходник в байт кода каждый раз заного интерпритирует команду. То есть если в функции даже одна команда, а выполняется функция 200 раз, то всё равно выгодне написать эти 200 раз текстом.
|
|
|
Текстовая версия | Сейчас: 25 April 2024 - 11:18 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |