IPB

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

2 страниц V  < 1 2  
Reply to this topicStart new topic
> Secondary skills manager for TE, function allows change some SS values
Demiurg
сообщение 30 Jun 2007, 01:21
Сообщение #21

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




Berserker очень прав.
Время вызова функции ~ 0,5ms
Время выполнения одного сравнения < 0,001ms
Однако, время загрузки в память на старте карты 1ой строчки скрипта ~ 0,2ms
Вывод1:
У Чертоса функция работает быстрее. В ней меньше сравнений и она занимает меньше места, т. е. быстрее грузится на старте.
Вывод2:
Лучше использовать функции по минимуму.
Вывод3:
Можно предположить ситуацию, когда стоит использовать функции, чтобы сократить время загрузки карты на старте.

Ждем макросов!!!


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

Go to the top of the pageAdd Nick
 
+Quote Post
Demiurg
сообщение 30 Jun 2007, 15:19
Сообщение #22

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




Обновил функцию. Встроил конвертеры. Добавил проверку входных параметров на валидность.
Спасибо Chortos-2 за замечания и предложенияgood.gif


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

Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 30 Jun 2007, 21:10
Сообщение #23







Макросы - первая задача после евмы. Завтра выложу прогу с хэлпом для откладки в Wog3.58 и для ехешника ТЕ (всё в одной, выбор будет //З.Ы Также и Реквизит, знать бы версию экзешника)

Я знаю, насколько глупы бывают ошибки ЕРМ и насколько рутинна откладка. Приходится пихать везде !!IF:M^%V600 %V601 %V602^;....
Расталвять их по всем местам, заного менять, проверять другие... и каждый раз с перезапуском карты. Труд программера не ценится. Это ещё что, хуже когда присылают сейв с багом, который повторить больше не может (происходит раз в пол года), или который только в данном сейве. Тут нет возможности перезагрузки. Я было начал писать функцию для получения и изменения переменных ЕРМ прямо через ЕРМ (н помню как называется, в скриптах выкладывал), но это не то. Что даёт ERM VARS MEMORY EDITOR (EVMA):

1) Удобный и красочный диалог с программой через консоль.
2) Максимально простой интерфейс, одна клавиша определяет команду, остаётся только ввести значения.
3) Встроенная сводка команд
4) Масимальная защита от "уничтожения" игры. Вы можете вводить кривые числа, не те индексы, выходить за рамки ЕРМ переменных, оставлять пустые места, пихать во флаги цифры, отличные от 0 и 1 (в особом режиме), в общем издеваться как хотите. Прога укажет на каждую ошибку и выполнит операцию ТОЛЬКО при идеальном синтаксисе.
5) Поддерживаемые переменные: V, F (флаги), Z (строки), W (переменные героев, герой выбирается особой командой). Разумеется только глобальные поддерживаются, можно было и локальные, но это более рутинно, а я не могу тратить на прогу больше 2-3 дней.

6) Консоль на 1000 строк. Поддерживаемые команды:
//Очистить консоль, показать список команд, выход.

P.S Всё на русском языке.

//Получить значение переменной ЕРМ или нескольких. Если кол-во не указано, то по умоччанию одной, в противном случае до максимума. То есть v1 1000 после команды выведет все v переменные.

//Выбор героя (это понятно, так как w-переменные привязаны к определённому герою)

//Установить значение переменной. Поддерживаются массовые установки:
v1 1 2 3 4 5 6 7 8 9 10
установит переменные v1..v10 данными значениями. Если одно из значений некорректно, установка прервётся и покажется ошибка (которая не мешает, вы такие будете видеть часто).

Строки устанавливаются по одной и автоматом ковертятся в ansi-кодировку (как оказалось, в консоле кодировка доса и ваш ввод был бы непонятен ЕРМ и ЕРМ-строки отображались бы криво).

//Заполнить серию переменных указанным значением.
Так, где так армия защитника, ага, к примеру в v9000..v9015

v9000 16 0
Всё, нет армии (заполнили нулями).

Строки тоже массово устанавливаются и вся рутина (строки в ерм 0-конечные, а в паскале юзаю string) пользователю не видна и не нужна. Если нужно забить что-то пустыми строка, то используется '#0'

//Чтение и запись данных по адресу.
Нашли адрес с переменными? 16-ричный редактор неудобен, не поимает формата переменных, тогда идём сюда указываем адрес, тип (типы сллегка другие) и кол-во просматриваемых. Ой-ля-ля. Всё в родном виде. Также можно и писать в память в родном иде, числа, байты, строки...Если вы укажите кривой адрес - ничего не прозойдёт, а прога известит о неверном адресе (или защищённой от чтения/записи) области.

//Установка одной ЕРМ переменной значения другой. Сюда же входит совместимость w и v переменных. Так что все присваивания (опять таки, можно массовые) вам доступны. Например скопировать w55.w64 в v1..v10 можно за две секунды. Хорошо, но вам нужно скопировать большой объём данных, а там почти везде воговские переменные, не хочется и портить! Тогда...

//Сброс дампа и загрузка переменных из дампа!!!
Сброс дампа: Имя файла: мой_дамп.XXX
Параметры: v1 10000
Всё, все v-переменные благополучно перекочевали в файл, можете юзать память. Также просто и загрузить! Более того, можете снять дамп строк, а загрузить в v-переменные, не знаю, что это вам правда даст smile.gif

Вывод: таким образом, кинув нужное место банальное !!IF:M^^; вы сможите качественно проанализировать работу скрипта и в каких переменных неверные значения, сможете эксперементировать прямо на ходу, наблюдая реакцию игры и быть в курсе внутренной кухни ЕРМ...
Go to the top of the pageAdd Nick
 
+Quote Post
Чёртос-2 (Chorto...
сообщение 03 Jul 2007, 11:03
Сообщение #24

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




В первом примере используется переменная v1, значение которой нигде не задается.


--------------------
© 2005–2011 Чёртос-2
Go to the top of the pageAdd Nick
 
+Quote Post
ZVS
сообщение 10 Jul 2007, 19:20
Сообщение #25

Member
Сообщений: 54
Спасибо сказали: 1 раз




ERM интерпретатор "разбирает" все триггеры и каждую строку с приемниками. Текст самой строки приемника (не триггера) не разбирается, а интерпретируется каждый раз.
Отсюда следствия:
1. Можно по ходу выполнения править текст приемников (для этого и делалось).
2. Повторной интерпретации триггера не производится, но при вызове триггера (например функции), происходит поиск в списке. Больше триггеров - дольше поиск.
3. Приемники интерпретируются при каждом выполнении. Два приемника в одной строке - меньше памяти (внутренней) используется, скорость не должна зависить. Т.к. поиска приемников нет, то и количество их (вернее строк в скрипте ERM) не влияет на скорость выполнения скриптов.
И последнее 4. При разработке ERM не ставилась задача оптимизации скорости работы скриптов. Ориентация была на разово выполняющиеся скрипты, а не циклы. И количество скриптов, конечно, ушло ДАЛЕКО вперед по сравнению с тем, что предполагалось. :-) Да и сами попробуйте прикрутить скриптовую систему, да еще и оптимизированную к чужому готовому экзешнику...
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 10 Jul 2007, 19:33
Сообщение #26







ZVS, всё это верно smile.gif Ваш труд поистенне велик, но ИМХО байт-код сразу был бы более оптимальным решением. А теперь о другом. ЕРМ-скрипты уже есть, может просто переписать движок? Хотя работы много, это понятно, но диалоги и так есть, адреса переменных и встроенных функций имеются. Правда это лиш мечты. Была и другая идея: вызывать из произвольного кода библиотек Ваши ресиверы. Это возмоно? Проблема в том, что невозможно совместить быстрый код и вызов какой-небудь внутриигровой функции, которая в ЕРМ занимает пару символов. Та же: !!IF:M^^;
Go to the top of the pageAdd Nick
 
+Quote Post
ZVS
сообщение 10 Jul 2007, 19:51
Сообщение #27

Member
Сообщений: 54
Спасибо сказали: 1 раз




Это возможно. Опять - интерфейсные соглашения и внешняя DLL. Так работает, например генаратор случ. карт для Г4. Утилита грузит DLL Генератора, передает указатель на интерфейс, DLL "просит" разместить объекты и утилита размещает.
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 10 Jul 2007, 20:01
Сообщение #28







Можно даже проще.
Допустим Вы напишите универсальную функцию ЕРМ, которая выполняет один ресивер и возвращает управление. Тогда внешней DLL понадобится только адрес данной функции ну и параметр типа pchar. Функция возвращает булевкий аргумент.

Добавлено ([mergetime]1184086885[/mergetime]):
И ещё, команда по вызову DLL ещё как нужна. Пока мне приходится вообще рутинным процессом всё это делать (только при загрузке, правда). Дело в том, что если я вызываю
VreateRemoteThread с адресом LoadLibrary (сперва зарезервировав место под имя библиотеки), то библиотека загружается и всё вроде ОК, только адреса сдвинуты, а эти адреса и так с боем у Detective Story ищутся. Хуже всего то, что раз на раз не приходится.
Go to the top of the pageAdd Nick
 
+Quote Post
ZVS
сообщение 10 Jul 2007, 20:04
Сообщение #29

Member
Сообщений: 54
Спасибо сказали: 1 раз




Это хорошо. Но некоторые ресиверы подразумевают callback триггеры (тот же таймер, например). Думаю, что в минимальном варианте можно и такой функцией обойтись, но если уж делать, так делать. Предлагаю и это по почте обсудить.
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 10 Jul 2007, 20:08
Сообщение #30







В таком случае завтра придёт письмо. Рад, что не погибло желание продолжить работу над Героями. Честно говоря, я считал уже, что ВоГ 3.59 мало что светит.
Go to the top of the pageAdd Nick
 
+Quote Post

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

 



Текстовая версия Сейчас: 26 November 2025 - 11:51
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика