в функции своей длл ты подгружаешь нужную длл. в эре ты подгружаешь свою длл. в ерм ты через эру вызываешь подгружающую функцию.
Подскажите, пожалуйста, где ошибка в скрипте. Упорно не хочет работать, а у меня уже башка не варит...
ZVSE
!#VRz799:S^Заблокированный слот^; Изменить название неиспользуемого существа
!#UN:G1/122/0/z799; Установить название неиспользуемого существа
!#UN:G1/122/1/z799; Установить название неиспользуемых существ
!#UN:U34/-1/?y1; Сосчитать количество героев на карте
!#DO79999/1/y1/1&y1>0:P; Запустить цикл для изменения количества существ
!?FU79999;
!!UN:U34/-1/x16/1; Запомнить координаты героя
!!OBv1/v2/v3:U?v1;
!!FU80000:Pv1;
!?FU80000; Функция для изменения навыка "Лидерство"
!!FU80001:Px1/x2; Запустить функцию для вычисления возможного количества слотов
!!DO80002/0/6/1:Px1/x2; Запустить цикл для вычисления текущего количества слотов
!!FU80003:Px1;
!?FU80001; Функция для вычисления возможного количества слотов
!!HEx1:S6/?y1; Запомнить текущий уровень навыка "Лидерство" левого героя
!!VRv8001:S4 +y1; Установить количество доступных слотов для войск
!!HEx2:S6/?y1; Запомнить текущий уровень навыка "Лидерство" правого героя
!!VRv8002:S4 +y1; Установить количество доступных слотов для войск
!?FU80002; Функция для вычисления количества уже занятых слотов
!!HEx1:C0/x16/?y1/?y2; Запомнить тип существ в слоте и их количество у левого героя
!!VRv8003&y1>-1/y2>0:+1; Добавить 1 к числу занятых слотов, если слот занят
!!HEx2:C0/x16/?y1/?y2; Запомнить тип существ в слоте и их количество у правого героя
!!VRv8004&y1>-1/y2>0:+1; Добавить 1 к числу занятых слотов, если слот занят
!?FU80003; Функция для установки переменной наличия свободных слотов и добавления
; Удалить неиспользуемых существ из слотов
!!HEx1&v8001=4:C0/4/122/0; Удалить неиспользуемое существо
!!HEx1&v8001=4:C0/5/122/0; Удалить неиспользуемое существо
!!HEx1&v8001=4:C0/6/122/0; Удалить неиспользуемое существо
!!HEx1&v8001=5:C0/5/122/0; Удалить неиспользуемое существо
!!HEx1&v8001=5:C0/6/122/0; Удалить неиспользуемое существо
!!HEx1&v8001=6:C0/6/122/0; Удалить неиспользуемое существо
; Добавить неиспользуемых существ в слоты
!!HEx1&v8001=4:C0/4/122/1; Добавить неиспользуемое существо
!!HEx1&v8001=4:C0/5/122/1; Добавить неиспользуемое существо
!!HEx1&v8001=4:C0/6/122/1; Добавить неиспользуемое существо
!!HEx1&v8001=5:C0/5/122/1; Добавить неиспользуемое существо
!!HEx1&v8001=5:C0/6/122/1; Добавить неиспользуемое существо
!!HEx1&v8001=6:C0/6/122/1; Добавить неиспользуемое существо
********************************************************************************
; Лидерство - Окно города
********************************************************************************
!?FU90001; Функция для входа на экран города
!!CA-1:H1/?v800; Запомнить номер героя в v800
!!HEv800:B0/?z800; Запомнить имя героя
!!FU80000:Pv800;
!?CM1; Триггер при клике в окне замка
!!CM:S?y1 F?y2 I?y3 P?y4/?y5/?y6 H?y7/?y8; Запомнить подтип клика, флаг для клика, место клика, позицию в x/y/l и номера героев
!!CM&y1=12/y2=0/y3=123:R0; Запретить перемещение героя в гарнизон
; Установить количество доступных слотов
!!IF&y2=512/y3>143/y3<147/v8001=4:Q1/20/21/4^{Герой} {%Z800}
{Лидерство:} навык отсутствует
{Доступно:} четыре отряда
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже базового уровня.^;
!!CM&y3=144/v8001=4:R0; Запретить пятый слот
!!CM&y3=145/v8001=4:R0; Запретить шестой слот
!!CM&y3=146/v8001=4:R0; Запретить седьмой слот
!!CM&y3=144/v8001=4:R1; Разрешить пятый слот
!!CM&y3=145/v8001=4:R1; Разрешить шестой слот
!!CM&y3=146/v8001=4:R1; Разрешить седьмой слот
!!IF&y2=512/y3>144/y3<147/v8001=5:Q1/20/22/4^{Герой} {%Z800}
{Лидерство:} базовый уровень
{Доступно:} пять отрядов
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже продвинутого уровня.^;
!!CM&y3=145/v8001=5:R0; Запретить шестой слот
!!CM&y3=146/v8001=5:R0; Запретить седьмой слот
!!CM&y3=145/v8001=5:R1; Разрешить шестой слот
!!CM&y3=146/v8001=5:R1; Разрешить седьмой слот
!!IF&y1=12/y2=0/y3=146/v8001=6:Q1/20/23/4^{Герой} {%Z800}
{Лидерство:} продвинутый уровень
{Доступно:} пять отрядов
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже экспертного уровня.^;
!!CM&y3=146/v8001=6:R0; Запретить седьмой слот
!!CM&y3=146/v8001=6:R1; Разрешить седьмой слот
********************************************************************************
; Лидерство - Окно героя
********************************************************************************
!?FU77004; Функция для захода в окно героя
!!HE-1:N?v800; Запомнить номер героя
!!FU80000:Pv800; Запустить функцию для изменения навыка "Лидерство"
!!HEv800:B0/?z800; Запомнить имя героя
!?CM2; Триггер при клике в окне героя
!!CM:S?y1 F?y2 I?y3 P?y4/?y5/?y6 H?y7/?y8; Запомнить подтип клика, флаг для клика, место клика, позицию в x/y/l и номера героев
; Установить количество доступных слотов
!!IF&y2=512/y3>71/y3<75/y7=v800/v8001=4:Q1/20/21/4^{Герой} {%Z800}
{Лидерство:} навык отсутствует
{Доступно:} четыре отряда
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже базового уровня.^;
!!CM&y3=72/v8001=4:R0; Запретить пятый слот
!!CM&y3=73/v8001=4:R0; Запретить шестой слот
!!CM&y3=74/v8001=4:R0; Запретить седьмой слот
!!CM&y3=72/v8001=4:R1; Разрешить пятый слот
!!CM&y3=73/v8001=4:R1; Разрешить шестой слот
!!CM&y3=74/v8001=4:R1; Разрешить седьмой слот
!!IF&y2=512/y3>72/y3<75/v8001=5:Q1/20/22/4^{Герой} {%Z800}
{Лидерство:} базовый уровень
{Доступно:} пять отрядов
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже продвинутого уровня.^;
!!CM&y3=73/y7=v800/v8001=5:R0; Запретить шестой слот
!!CM&y3=74/y7=v800/v8001=5:R0; Запретить седьмой слот
!!CM&y3=73/y7=v800/v8001=5:R1; Разрешить шестой слот
!!CM&y3=74/y7=v800/v8001=5:R1; Разрешить седьмой слот
!!IF&y1=12/y7=v800/y2=0/y3=74/v8001=6:Q1/20/23/4^{Герой} {%Z800}
{Лидерство:} продвинутый уровень
{Доступно:} пять отрядов
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже экспертного уровня.^;
!!CM&y3=74/v8001=6:R0; Запретить седьмой слот
!!CM&y3=74/v8001=6:R1; Разрешить седьмой слот
!!CA-1:H1/?v800;
Ба! А с какой кстати будет определён текущий город, если это твой личный триггер? (скорее всего CA-1 будет содержать последний город, в который был выполнен вход с !?TH)
И да, любые проблемы решаются расставлением !!IF:M^^ с выводом значений. Например в том коде, что ты мне слал, я проверил результат загрузки dll и получил v901 = 0 (не загружена). Исправил. Затем так же с адресами функций.
Bers, в другой функции все работает. Точнее, там я произвожу проверку номера города и, если он равен единице, меняю существ для найма во всех городах такого типа. А если отличен от единицы, то восстанавливаю стандартных существ.
Похоже, проблема где-то в функциях 79999-80003. Потому что триггер не работает ни для функции входа в окно героя, ни для !?PI. А вот где ошибка - понять не могу.
Исправил. Все почти замечательно, однако при сражении компа с кем-нибудь игра вылетает (ну, нет же дефов для этого неиспользуемого монстра). Строки, удаляющие перед битвой у героя неиспользуемых, я добавил, и если я нападаю на компа, то у нас обоих всё отлично. Однако комп постоянно дерзит и тоже норовит подраться, неважно, с кем. Игра, как я и сказал, вылетает.
Добавлено:
Как думаете, сильно ли повредит балансу такая вот штука: игроку сделать на ограничение слотов, а компу - нет? Мне кажется, что это усложнит игру (так, у героя без "Лидерства" есть всего 4 слота против 7 комповских), но ведь комп играет так уныло, что в этом может заключаться и спасение...
я вообще около 5 стеков вожу
Вот и замечательно. Я рассудил, что более-менее хорошему игроку хватит. А на форуме вроде как совсем плохих нет. Напротив.
Стоит ли приписывать артефакту возможность давать дополнительный стек, или это имба? Самому крутому из артефактов поднятия боевого духа, конечно.
GhostManSD, вылет после !?BA0&-1000?
Bers, ошибка повторялась назависимо от того, как я меня скрипт. Кроме того, она повторялась не при схватке компа, а при передаче хода. Думал, что проблема в действиях бота, и перепробовал твой вариант. Не прокатило. С самого начала запретил давать боту стеки неиспользуемых существ. Потом - ещё что-то. Проблема не исчезала. В итоге я внимательно посмотрел на адрес ошибки (текст ошибки менялся, а адрес - нет). Там был указан адрес 0x42437D. Ну, я психанул и забил его нулями (точнее, NOP). Ошибки пропали, всё работает отлично.
На всякий пожарный привожу полный текст скрипта.
Code:
!?PI; Пост-инструкция
!!VRz800:S^Заблокированный слот^; Изменить название неиспользуемого существа
!!UN:G1/122/0/z800; Установить название неиспользуемого существа
!!UN:G1/122/1/z800; Установить название неиспользуемых существ
!!DO80000/0/155/1:P; Запустить функцию для добавления заблокированных слотов
!?BA0; Триггер при начале битвы для игрока
!!BA:H0/?y1 H1/?y2; Запомнить номера сражающихся героев
!!FU80001:Py1/y2; Запустить функцию для удаления заблокированных слотов
!?BA1; Триггер в конце битвы для игрока
!!FU80000:P; Запустить функцию для добавления заблокированных слотов
; Необходимые функции
!?FU80000; Функция для пересчитывания количества заблокированных слотов
!!HEx16:S6/?v800; Запомнить текущий уровень навыка "Лидерство"
!!HEx16:C1/122/-1/0; Удалить всех неиспользуемых существ
!!HEx16&v800=0:C0/4/122/1; Добавить неиспользуемое существо
!!HEx16&v800=0:C0/5/122/1; Добавить неиспользуемое существо
!!HEx16&v800=0:C0/6/122/1; Добавить неиспользуемое существо
!!HEx16&v800=1:C0/5/122/1; Добавить неиспользуемое существо
!!HEx16&v800=1:C0/6/122/1; Добавить неиспользуемое существо
!!HEx16&v800=2:C0/6/122/1; Добавить неиспользуемое существо
!?FU80001; Функция для удаления заблокированных слотов на время битвы
!!HEx1:C1/122/-1/0; Удалить всех неиспользуемых существ у левого героя
!!HEx2:C1/122/-1/-; Удалить всех неиспользуемых существ у правого героя
; Лидерство - При повышении уровня
!?FU90002; Функция для повышения уровня
!!DO80000/0/155/1:P; Запустить функцию для добавления заблокированных слотов
; Лидерство - Окно города
!?FU90001; Функция для входа на экран города
!!CA-1:H1/?y1; Запомнить номер героя
!!FU80001:Py1; Запустить функцию для удаления заблокированных слотов
!!DO80000/0/155/1:P; Запустить функцию для добавления заблокированных слотов
!?CM1; Триггер при клике в окне замка
!!CM:S?y1 F?y2 I?y3 P?y4/?y5/?y6 H?y7/?y8; Запомнить подтип клика, флаг для клика, место клика, позицию в x/y/l и номера героев
!!CM&y1=12/y2=0/y3=123:R0; Запретить перемещение героя в гарнизон
!!CA-1:H1/?y7; Запомнить номер героя
!!HEy7:S6/?v801; Запомнить текущий уровень лидерства
!!HEy7:B0/?z801; Запомнить имя героя
; Установить количество доступных слотов
!!IF&y2=512/y3>143/y3<147/v801=0:Q1/20/21/4^{Герой} {%Z801}
{Лидерство:} навык отсутствует
{Доступно:} четыре отряда
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже базового уровня.^;
!!CM&y3=144/v801=0:R0; Запретить пятый слот
!!CM&y3=145/v801=0:R0; Запретить шестой слот
!!CM&y3=146/v801=0:R0; Запретить седьмой слот
!!IF&y2=512/y3>144/y3<147/v801=1:Q1/20/22/4^{Герой} {%Z801}
{Лидерство:} базовый уровень
{Доступно:} пять отрядов
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже продвинутого уровня.^;
!!CM&y3=145/v801=1:R0; Запретить шестой слот
!!CM&y3=146/v801=1:R0; Запретить седьмой слот
!!IF&y2=512/y3=146/v801=2:Q1/20/23/4^{Герой} {%Z801}
{Лидерство:} продвинутый уровень
{Доступно:} пять отрядов
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже экспертного уровня.^;
!!CM&y3=146/v801=2:R0; Запретить седьмой слот
; Лидерство - Окно героя
!?FU77004; Функция для захода в окно героя
!!FU80001:P; Запустить функцию для удаления заблокированных слотов
!!DO80000/0/155/1:P; Запустить функцию для добавления заблокированных слотов
!?CM2; Триггер при клике в окне героя
!!CM:S?y1 F?y2 I?y3 P?y4/?y5/?y6 H?y7/?y8; Запомнить подтип клика, флаг для клика, место клика, позицию в x/y/l и номера героев
!!DO80000/0/155/1:P; Запустить функцию для добавления заблокированных слотов
!!HEy7:S6/?v801; Запомнить текущий уровень лидерства
!!HEy7:B0/?z801; Запомнить имя героя
; Установить количество доступных слотов
!!IF&y2=512/y3>71/y3<75/v801=0:Q1/20/21/4^{Герой} {%Z801}
{Лидерство:} навык отсутствует
{Доступно:} четыре отряда
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже базового уровня.^;
!!CM&y3=72/v801=0:R0; Запретить пятый слот
!!CM&y3=73/v801=0:R0; Запретить шестой слот
!!CM&y3=74/v801=0:R0; Запретить седьмой слот
!!IF&y2=512/y3>72/y3<75/v801=1:Q1/20/22/4^{Герой} {%Z801}
{Лидерство:} базовый уровень
{Доступно:} пять отрядов
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже продвинутого уровня.^;
!!CM&y3=73/v801=1:R0; Запретить шестой слот
!!CM&y3=74/v801=1:R0; Запретить седьмой слот
!!IF&y2=512/y3=74/v801=2:Q1/20/23/4^{Герой} {%Z801}
{Лидерство:} продвинутый уровень
{Доступно:} пять отрядов
Чтобы иметь возможность взять под командование ещё один отряд, необходимо иметь навык "Лидерство" не ниже экспертного уровня.^;
!!CM&y3=74/v801=2:R0; Запретить седьмой слот
А теперь -
вопрос про этот адрес.
может не стоит ограничивать компа? к слову, если в битве не участвует человек, то производится простой расчет без эмуляции битвы.
так что лучше просто закрывай эти слоты только у героев игроков-людей.
Да, я тоже об этом подумал.

Но ошибка от этого не пропадает, уже проверял. :-(
т.е. ты абсолютно никак не трогаешь компа, а ошибка есть?
Да. Вылезает ошибка с самым разным текстом (все сторонние и свои скрипты убрал из карты, кроме этого). Текст ошибки меняется постоянно, неизменным остается адрес - 42437D.
попробуй установить параметры для этих not used'ов. особенно ценность для ИИ и боевую ценность.
А разве можно в принципе ограничить действия компа not used-ами?