IPB

Здравствуйте, гость ( Вход | Регистрация )

> Secondary skills manager for TE, function allows change some SS values
Demiurg
сообщение 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) - выделенный пользователем индекс для получения значения.


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 19)
Гость_Berserker_*
сообщение 24 Jun 2007, 19:30
Сообщение #2







Если будет работать, будет здорово. Не помешала бы.
Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 25 Jun 2007, 14:42
Сообщение #3

Immortal
Сообщений: 670
Спасибо сказали: 14 раз




Обновление.
Теперь можно не только устанавливать значения навыков, но и получать их. Смотрите первый пост.


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
Чёртос-2 (Chorto...
сообщение 25 Jun 2007, 16:39
Сообщение #4

The Unicode Man
Сообщений: 993
Спасибо сказали: 6 раз




Почему ты думаешь, что запрещена запись через !!UN:C в область вторичных навыков?


--------------------
© 2005–2011 Чёртос-2
Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 25 Jun 2007, 17:27 (Сообщение отредактировал Demiurg - 25 Jun 2007, 17:36)
Сообщение #5

Immortal
Сообщений: 670
Спасибо сказали: 14 раз




У меня не получилось
Я пробовал
Код
!?TM2;
!!UN:C6548108/4/1061158912;


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 25 Jun 2007, 23:21
Сообщение #6

Immortal
Сообщений: 670
Спасибо сказали: 14 раз




Обновил ссылку.
Сделал возможность устанавливать и получать значения для уровня развития навыков None.
Добавил примеров в первый пост.


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 27 Jun 2007, 10:37
Сообщение #7

Immortal
Сообщений: 670
Спасибо сказали: 14 раз




Обновление. Упростил конвертер из машинного представления в действительное число.


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 27 Jun 2007, 13:03
Сообщение #8

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




там, где по 4 строчки для каждого навыка расписано по-моему пожно упростить в одну
Go to the top of the pageAdd Nick
 
+Quote Post
Druin
сообщение 27 Jun 2007, 13:12
Сообщение #9

Immortal
Сообщений: 2 472
Спасибо сказали: 21 раз




там условия разные...
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 27 Jun 2007, 15:50
Сообщение #10

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




нет, напр. первую четверку как:
!!UN&x1=9:C6547864+x2*4/4/x3;

Добавлено ([mergetime]1182948642[/mergetime]):
там закономерность есть
Go to the top of the pageAdd Nick
 
+Quote Post
Чёртос-2 (Chorto...
сообщение 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‑ю навыками, но это нигде не сказано. Непорядок.


--------------------
© 2005–2011 Чёртос-2
Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 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). Но, согласен, в посте нужно продублировать.


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
Чёртос-2 (Chorto...
сообщение 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 в один.
Возможно, но, во‑первых, я не согласен crazy.gif — почему нет? Во‑вторых, можно сделать разный синтаксис, как у меня:
Код
!!FU#:P0/#/#/#;
!!FU#:P1/#/#/?$;
В‑третьих, это разумно, так как сэкономит целую функцию, а сейчас в ERM номера — какие бы то ни было — нарасхват.


--------------------
© 2005–2011 Чёртос-2
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 27 Jun 2007, 21:16
Сообщение #14







Согласен с Чёртосом. Комментарий (ложка дегтя в бочке мёда):

3) Посмотрю, насколько большой выигрыш по скорости получается при использовании сокращения.

Не посмотришь smile.gif Никак.
Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 27 Jun 2007, 21:50
Сообщение #15

Immortal
Сообщений: 670
Спасибо сказали: 14 раз




Цитата(Berserker @ 27 Jun 2007, 22:16)
3) Посмотрю, насколько большой выигрыш по скорости получается при использовании сокращения.

Не посмотришь smile.gif Никак.

Почему?
Запускаешь цикл до 1000000 (10000000 или сколько нужно) и засекаешь время на одной функции, потом на другой. По отношению времени смотришь, какой алгоритм работает быстрее. Я таким методом сравнивал несколько алгоритмов сортировки, которые за Nlog2N. Запускал их на 10000000 чисел. Один работал 70 секунд, другой 140 секунд, третий тоже 140 секунд. (Это было еще на старом компе, поэтому так долго.) Как говорится время хороший свидетель скорости.


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 28 Jun 2007, 20:51
Сообщение #16







Ну в лоб всё можно. Только комп работает с разной нагрузкой (смотря какие приложения запущены) + если ты запустишь такой цикл, то ЕРМ надолго заснёт. читать (НАДОЛГО). Ну и время ты как, вручную замерять будешь? smile.gif

З.Ы Жаль, что воговцы свои алгоритмы не оптимизировали и время не проверяли.

Заметка по ЕРМ: выгоднее писать макросы (то есть которые будут текстом вставляться в код), чем вызывать функцию. Значительный выигрышь времени. Не надо анализировать, обнулять переменные, резервировать место + (ещё внутренняя кухня) ЕРМ.
Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 28 Jun 2007, 21:52
Сообщение #17

Immortal
Сообщений: 670
Спасибо сказали: 14 раз




Время как-нибудь уж померюsmile.gif Была бы проблема.
Насчет макросов. Они страшно глючат. Медленный и безглючный код лучше быстрого и нерабочего. Благо для большинства скриптов есть большой запас по скорости.


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 28 Jun 2007, 22:29
Сообщение #18







Я про другие макросы, скоро узнаешь smile.gif
Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 28 Jun 2007, 22:47
Сообщение #19

Immortal
Сообщений: 670
Спасибо сказали: 14 раз




Цитата(Berserker @ 28 Jun 2007, 23:29)
Я про другие макросы, скоро узнаешь smile.gif

Ждемс.
Только мне кажется, что не все так просто. Я думаю, что время работы скрипта зависит еще и от его длины. А использование макросов вместо функций ведет к удлинению скрипта


--------------------
Самый страшный, кого можно встретить на экзамене, – факер Нео

Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 29 Jun 2007, 22:24
Сообщение #20







Нет, нет, и ещё раз нет smile.gif Причина: ЕРМ-парсер не преобразует исходник в байт кода каждый раз заного интерпритирует команду. То есть если в функции даже одна команда, а выполняется функция 200 раз, то всё равно выгодне написать эти 200 раз текстом.
Go to the top of the pageAdd Nick
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 16 April 2024 - 21:50
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика