с чем может быть связана проблема некорректной от рисовки объектов на поле битвы? Неправильные цвета, проходимость, на две части разваливаются...
ZVSE
!?BF;
!!BF:O16/56;
!!BF:O38/139;
Совершенно не соответствует ожидаемому!
Даже если учесть впереди BF:C....
Фух, блин. Наконец-то я решил эту хрень. Cлава ЭРЕ и Берсеркеру!
Перепробовав кучу комбинаций из !?BG, !?BG1 и !?FU77007 (всё никак не удавалось корректно получить ходящую сторону) довёл код до следующего безобразия:
*Особые свойства Назгула - наращивает ХП каждый раз, как противник струсит.
!?BA52&999; битва в присутствии человека
!!VRz2:S@ERT[15]@; секция Battle Log
!!VRz1:S^0^;
!!UN:N5/1/1/2; очистить счётчик лога
!?FU@Battle: Before Action@;
!!IF:V2/0; сбросить флаг 2
!!VRz2:S@ERT[15]@; секция ини
!!UN:N6/1/1/2; прочесть
!!VRy1:Vz1;
!!FU@Функция[18]@:P2/?v1; получить кол-во строк
!!FU|v1=y1/v1=0:E; если не изменилось
!!VRz1:M3/v1;
!!UN:N5/1/1/2; записать кол-во строк для последующих действий
!!VRv1:-1; отнять 1 для корректности
!!VRz2:S@ERT[16]@; получить хозяина стека из ини
!!UN:N6/1/1/2;
!!VRv3:Vz1;
!!FU@Функция[18]@:P0/v1/10; получить последнюю строку в логе
!!VRz10:U@ERT[409]@; есть ли в строке слово "панике"
!!IF&1:V2/1; если есть - установить флаг 2
!!VRz10:U@ERT[410]@; есть ли слово "страхе"
!!if&-1/-2:E; выход, если ни того, ни другого
!!VRz10:U@ERT[407]@; есть ли в строке слово "следующего"
!!FU&-1:E;
!!VRv1:-1;
!!FU@Функция[18]@:P0/v1/10; получить предпоследнюю строку в логе
!!VRz10:U@ERT[409]@; есть ли в строке слово "панике"
!!IF&1:V2/1; если есть - установить флаг 2
!!VRz10:U@ERT[410]@; есть ли слово "страхе"
!!FU&-1/-2:E;
!!en;
!!VRv1&v3=1:C0/21; запустить цикл по стекам стороны, противоположной струсившему стеку: v1 - начало, v2 - конечное значение
!!VRv1&v3=0:C21/42;
!!BMv1:T?y1 N>0; получить тип и кол-во существ в стеке
!!if&y1=128/1; если Назгул и стек не мёртв
!!SN:P@ERT[411]@; проиграем звук
!!BMv1:V50 Hd1; прибавим очко жизни, проиграем анимацию
!!VRz-1:S@ERT[408]@;
!!BU:Mz-1; добавить сообщение в лог битвы
!!en; 17
!!VRv1:+1; следующий стек
!!SN&v1<v2:G28; если конечное значение цикла не достигнуто - прыжок на строку 12
!?FU@Battle: Before Action@; этот триггер должен идти обязательно ПОСЛЕ первого Before Action
!!SN:X?y1/?y2;
!!BMy1:I?y2;
!!VRz2:S@ERT[16]@;
!!VRz1:M3/y2;
!!UN:N5/1/1/2; записать ходящую сторону в ИНИ
*Функция ShadowTheAge для чтения строк из лога битвы
*Использование:
*x1 - действие: 0 - чтение, 1 - запись, 2 - подсчитать количество строк лога, 3 - очистить лог
*х2 - номер строки в логе от 0.
*x3 - номер z переменной куда/откуда читать.
!?FU@Функция[18]@;
!!UN:C5613845/4/?y1;
!!VRy1:+672;
!!UN:Cy1/4/?y2;
!!VRy2:+88;
!!VRy3:Sy2+4;
!!UN:Cy2/4/?y4 Cy3/4/?y5;
!!UN&x1=3:Cy3/4/y4;
!!VRx2&x1=2:Sy5-y4:4;
!!FU&x1>1:E;
!!VRy6:Sx2*4+y4;
!!FU&y6>=y5:E;
!!UN:Cy6/4/?y7;
!!VRy7:+4;
!!UN:Cy7/4/?y8;
!!VRy9:Sx3*512+9597416;
!!DO@Функция[19]@/0/511/1:Py8/y9/x1;
!?FU@Функция[19]@;
!!VRy1&x3=0:Sx1+x16;
!!VRy2&x3=0:Sx2+x16;
!!VRy1&x3=1:Sx2+x16;
!!VRy2&x3=1:Sx1+x16;
!!UN:Cy1/1/?y3;
!!UN:Cy2/1/y3;
!!VRx16&y3=0:S600;
Оттестировал сотни раз - вроде не глючит. При попытках использования разновидностей BG были такие траблы, как наращивание ХП твоим Назгулом при панике твоего же отряда. Или одноразовое наращивание при панике "по цепочке".
Если видны какие-то недочёты или есть предложения по оптимизации - пожалуйста, сообщите.

Ребят, тут товарищ по имени
RaiderHmoM решил замутить сервер для игры в Героев. Чтобы народ мог рубиться друг с другом, не покладая рук

. Вот, он хочет, чтобы на карте присутствовал игрок-админ, следящий за нарушением беспорядков, и ему для этого нужен скрипт, который бы автоматически пропускал ход админа. Если есть возможность сделать эту функцию активируемой-деактивируемой, то будет очень хорошо, если нет - пусть просто тупо пропускает. Сам проект можно заценить
здесь. Вобщем, помогите, кто чем может

, а я уж ему передам.
MOP, умеешь ты добиться своего ) Не получилось через дверь, выбил окно, и там засада - через дымоход )
Quote:!!SN:X?y1/?y2/0; номер стека
Вроде бы два параметра нужно было.
// 30013
Убьёшь игру )
Code:
//////////////////////////////
// 0-30000 functions
// 30000-30100 timers
// 30100-30300 heroes
// 30300 to battle
// 30301 from battle
// 30302 next battle turn
// 30303 monster's action
// 30304 monster's after action
// 30305 WM reach dest
// 30306 WM killed
// 30307 MR Magic Resistance in Battle (pre-trigger)
// 30308 MR Magic Resistance in Battle (post-trigger)
// 30309 MR Dwarf Magic Resistance
// 30310 mouse click на карте (правый) !?CM0
// 30311 mouse click в Городе !?CM1
// 30312 mouse click in hero screen !?CM2
// 30313 mouse click it two heroes screen !?CM3
// 30314 mouse click in battlefield !?CM4
// 30315 игрок снял артифакт
// 30316 игрок одел артифакт
// 30317 mouse move over battlefield
// 30318 mouse move over townscreen
// 30319 mouse click на карте (левый) !?CM5
// 30320 MP3 music
// 30321 WAV and M82 Sound 3.58
// 30322 Magic cast (adv. map) (pre-trigger)
// 30323 Magic cast (adv. map) (post-trigger)
// 30324 Go to Town Hall Screen 3.58 !?TH0
// 30325 Leave Town Hall Screen 3.58 !?TH1
// 30330 MP before sending data before battle
// 30331 MP after receiving data before battle
// 30332 MP before sending data after battle
// 30333 MP after receiving data after battle
// 30334 MP received data during a battle
// 30340 CO Перед открытием диалога Командира
// 30341 CO После закрытия диалога Командира
// 30342 CO После покупки Командира в городе
// 30343 CO После воскрешения Командира в городе
// 30350 to battle
// 30351 from battle
// 30352 universal to battle
// 30353 universal from battle
// 30360 Load Game
// 30361 Save Game
// 30370 Post Instruction call (только при старте новой карты, но не загрузки)
// 30371 Dlg CallBack
// 30400-30600 hero every movement
// 30600-30800 hero gain level
// 30800 setup battle field
// 30801 MFCall(1); !?MF1; - Block ability
// 30900-30904 ; TL - timer #-seconds to call
// 31000-31099 - 100 local functions
// ...
// 0x04000000 ... макс используемый тип - уровень
// 0x10000000+ OB position enter
// 0x20000000+ LE position
// 0x40000000+ OB type/subtype enter
// 0x08000000+ OB leave
// + 0x10000000+ OB position leave
// + 0x40000000+ OB type/subtype leave
Qwertyus, проголосовал за "бредовая идея, я против". Аффтар жжёт.
1)Не знаю. Основывался на справке:
Quote:Parameters (3): Stack number / Pointer to TBattleMonster / Block regeneration? (1 - yes, 0 - no)
2)Мир разбился вдребезги... Как я понял твой пост, все триггеры по идее имеют номера функций? Использование функции 30013 - это использование таймера 13? 0_о
А почему тогда в справке по ЭРЕ так опрометчиво написано - "Use any you like which are greater than 30000"?
Хотя с SCVS поменять номера сложности не составит...
Quote:1)Не знаю. Основывался на справке:
Я уже забываю )
Quote:2)Мир разбился вдребезги... Как я понял твой пост, все триггеры по идее имеют номера функций?
На самом деле это не номера, а ID (идентификаторы) триггеров. Я разрешил юзать любые, но советовал начинать с 40000. Дело в том, что данная врезка с кода ZVS, а он очень неодобрил это дело, когда я выложил описание структуры TBattleMonster (_CombatMon).
А почему ты привязываешь имя идентификатора к индексу?
@Функция[30013]@, почему не @Запись строк@, @Поиск испуганных@ и т.д.?
А вот именно потому, что мне может понадобится (как теперь) перевести все номера функций в другой отрезок. Не буду же я везде в скрипте изменять эти номера? Лучше изменить сразу точку отсчёта массива - и всё. Вот как сегодня:
~Функция[10000000]=v0 -> ~Функция[10000000]=v-19999
В общем, перешёл на обычные воговские функции. List Of The Claimed не страшен - всё равно все нужные мне вог-скрипты почти с нуля переписываю.
А давать имена функциям, которые используешь раз или два - это, имхо, ненужное дело. Тут нет разницы - "!?FU@Запись строк@" или "!?FU23456; - это запись строк". Вот если функция или переменная повторяется действительно много раз - тогда я её озаглавливаю.
Quote:Я разрешил юзать любые, но советовал начинать с 40000.
Вот ведь... А я-то думал, чё это у меня баги лезут в последнее время. На фиксах аж вылет при передаче хода (видимо, дело было как раз в таймере). Странно, что это не наблюдалось на рандомах.
Кстати, ещё одну поправку сделал к скрипту Назгула - нужно проверять (BM:N, к примеру), есть ли вообще с стеке кто-нибудь, а то тип монстра и жмурик выдаёт. )
Quote:А вот именно потому, что мне может понадобится (как теперь) перевести все номера функций в другой отрезок.
А, так ты отрезком...Я прописывал каждый номер )
За дезинформацию в хэлпе извиняюсь.
Quote:А давать имена функциям, которые используешь раз или два - это, имхо, ненужное дело.
Если с любительской позиции, то да.
Добавлено:
Да, раз уж остался один активный мододел, может действительно стоит SCVS 2 сделать? Без привязки к индексам с автовыделением оных.
Hero: INT; выделить v-переменную
HeroName: STR; выделить z-переменную
Пока что не совсем понял, о чём ты, но если это будет удобно тебе - значит, удобно и мне.)
Ввели бы, ей-богу, тип объекта, поддерживающий флаг, но совершенно пустой, без бонусов, чтобы его подтипы можно было закодить по-своему. А то даже теряешься, не зная, что можно для этого приспособить. Герой, город, двеллинг - отбрасываем сразу. Шахта? У подтипов >7 вообще не работает пост-триггер, некорректно работает MN. Гарнизон? Он предлагает оставить войска. Маяк? Приносит бонус мореплаванию. Что ещё можно предложить?
Тяжело найти реальное работающее решение. А какие функции нового объекта?
Функция совершенно простая - аналог Сокровищницы Гномов из Оплота на карте.
Обхожусь пока так: объект - 53/8, отключение сообщения о захвате, настраивание подсказки при захвате - в !?OB (!$OB, как уже говорил, не работает), основываясь на PO-номере в точке входа. Работа объекта также за счёт PO-номера.
А можно ли как-либо (UN:C, например) определить на старте игры, фиксированная карта или рандомка, чтобы в соответствии с этим выполнять/не выполнять определённые действия?
Рандомка - это и есть фиксированная карта, сохранённая на диск в папку random_maps. Может где-то в памяти и остаётся мусор с путями...
В описание миссии при генерации РМГ записывается служебная информация (текст). Только вот наверняка эта память нестатична.