Сообщения без ответовАктивные темы

Скрипты

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

Модераторы: Macbeth, Volh, Корвелл

Скрипты

Сообщение Volh » 24 май 2014, 12:18

Приветствую всех, господа!

Здесь я буду плакаться о сложностях в постижении скриптов Arcanum. Если найдётся спец, который меня просветит по спорным пунктам в скриптах, то я с радостью приму его помощь.

И так, начнём:

1. Скрипт 01355InnerEncampmentGuardHB
а) Оригинальный скрипт
0. loop for Everyone in Vicinity

1. object type of Current Looped Object: store in Local 0

2. IF Local 0 == 15
THEN do nothing
ELSE goto line 8

3. distance between Attachee and Current Looped Object: get in Local 5

4. IF Local 5 <= 3
THEN do nothing
ELSE goto line 8

5. Local 2 = 1

6. Triggerer = Current Looped Object

7. loop break

8. loop end

9. IF Local 2 == 1
THEN goto line 11
ELSE goto line 10

10. return and RUN default

11. loop for Every Follower (single player)

12. IF Current Looped Object is named 6410
THEN goto line 28

13. IF Current Looped Object is named 6571
THEN do nothing
ELSE goto line 28

14. IF Current Looped Object is invisible
THEN goto line 28

15. IF Triggerer is invisible
THEN do nothing
ELSE goto line 19

16. float line 1 above Attachee

17. combat: Attachee attacks Current Looped Object

18. return and RUN default

19. IF Global Variable 1016 == 1
THEN goto line 21
ELSE goto line 24

20. return and RUN default

21. IF Triggerer is in dialog
THEN goto line 23

22. call script 1356 at line 3 with triggerer Triggerer and attachee Attachee

23. return and RUN default

24. IF Triggerer is in dialog
THEN goto line 27

25. IF Global Variable 1016 == 2
THEN goto line 30

26. call script 1356 at line 1 with triggerer Triggerer and attachee Attachee

27. return and RUN default

28. loop end

29. return and RUN default

30. combat: Attachee attacks Triggerer

31. return and RUN default

32. remove this script

33. return and RUN default

б) Скрипт из патча
0. loop for Everyone in Vicinity

1. object type of Current Looped Object: store in Local 0

2. IF Local 0 == 15
THEN do nothing
ELSE goto line 8

3. distance between Attachee and Current Looped Object: get in Local 5

4. IF Local 5 <= 3
THEN do nothing
ELSE goto line 8

5. Local 2 = 1

6. Triggerer = Current Looped Object

7. loop break

8. loop end

9. IF Local 2 == 1
THEN goto line 11
ELSE goto line 10

10. return and RUN default

11. loop for Every Follower (single player)

12. IF Current Looped Object is named 6410
THEN goto line 13
ELSE goto line 15

13. Local 6 = 1

14. loop break

15. loop end

16. goto line 18

17. return and RUN default

18. IF Local 6 == 0
THEN goto line 20

19. return and RUN default

20. loop for Every Follower (single player)

21. IF Current Looped Object is named 6571
THEN do nothing
ELSE goto line 36

22. IF Current Looped Object is invisible
THEN goto line 36

23. IF Triggerer is invisible
THEN do nothing
ELSE goto line 27

24. float line 1 above Attachee

25. combat: Attachee attacks Current Looped Object

26. return and RUN default

27. IF Global Variable 1016 == 1
THEN goto line 29
ELSE goto line 32

28. return and RUN default

29. IF Triggerer is in dialog
THEN goto line 31

30. call script 1356 at line 3 with triggerer Triggerer and attachee Attachee

31. return and RUN default

32. IF Triggerer is in dialog
THEN goto line 35

33. IF Global Variable 1016 == 2
THEN goto line 38

34. call script 1356 at line 1 with triggerer Triggerer and attachee Attachee

35. return and RUN default

36. loop end

37. return and RUN default

38. combat: Attachee attacks Triggerer

39. return and RUN default

40. remove this script

41. return and RUN default

Как нетрудно догадаться, меня беспокоит добавление вот этого кода в скрипте:
13. Local 6 = 1

14. loop break

15. loop end

16. goto line 18

17. return and RUN default

18. IF Local 6 == 0
THEN goto line 20

19. return and RUN default

20. loop for Every Follower (single player)


2. Скрипт 01356InnerEncampmentGuard
а) Оригинальный скрипт
0. return and RUN default

1. dialog 1

2. return and SKIP default

3. dialog 15

4. return and SKIP default

5. loop for Everyone in Vicinity

6. IF Current Looped Object is named 6571
THEN Attachee = Current Looped Object
ELSE goto line 8

7. call script 1352 at line 20 with triggerer Triggerer and attachee Attachee

8. loop end

9. return and SKIP default

10. call script attached to Attachee at point 19 at line 32 with triggerer Triggerer

11. return and SKIP default

б) Скрипт из патча
0. return and RUN default

1. dialog 1

2. return and SKIP default

3. dialog 15

4. return and SKIP default

5. loop for Everyone in Vicinity

6. IF Current Looped Object is named 6571
THEN Attachee = Current Looped Object
ELSE goto line 8

7. call script 1352 at line 20 with triggerer Triggerer and attachee Attachee

8. loop end

9. return and SKIP default

10. call script attached to Attachee at point 19 at line 40 with triggerer Triggerer

11. return and SKIP default

Меня беспокоит изменение вот этой строки:
10. call script attached to Attachee at point 19 at line 40 with triggerer Triggerer


3. Скрипт 01387Bedokaan_Pit_TILES
а) Оригинальный скрипт
0. Attachee = Triggerer

1. IF Triggerer is named 6580
THEN do nothing
ELSE goto line 9

2. loop for Everyone in Vicinity

3. object type of Current Looped Object: store in Local 0

4. IF Local 0 == 15
THEN do nothing
ELSE goto line 7

5. set PC Current Looped Object quest 1079 to state 4

6. loop end

7. IF Global Flag 2146 == 1
THEN return and SKIP default

8. Global Flag 2155 = 1

9. return and SKIP default

б) Скрипт из патча
0. Attachee = Triggerer

1. IF Triggerer is named 6580
THEN do nothing
ELSE goto line 9

2. loop for Everyone in Vicinity

3. object type of Current Looped Object: store in Local 0

4. IF Local 0 == 15
THEN do nothing
ELSE goto line 8

5. IF Global Flag 2155 == 1
THEN goto line 6
ELSE goto line 7

6. set PC Current Looped Object quest 1079 to state 4

7. loop break

8. loop end

9. return and SKIP default

Меня беспокоит изменение вот этой части:
5. IF Global Flag 2155 == 1
THEN goto line 6
ELSE goto line 7

6. set PC Current Looped Object quest 1079 to state 4

7. loop break

8. loop end

9. return and SKIP default

Особенно странно, что выкинули Global Flag 2146, который означает "Kan Kerai has freed the elven prisoners". Для справки, Global Flag 2155 - "The PC has freed the elven prisoner without the consent of the Melokaan"

4. 02179Murgo_Sector
а) Оригинальный скрипт
0. area of Triggerer: store in Local 1

1. IF Local 1 == 0
THEN return and RUN default

2. IF Local 1 == 26
THEN return and RUN default

3. IF Local 1 == 28
THEN call script attached to Attachee at point 9 at line 20 with triggerer Player
ELSE goto line 7

4. return and RUN default

5. call script attached to Attachee at point 9 at line 11 with triggerer Triggerer

6. return and RUN default

7. Counter 1 = Counter 1 + 1

8. IF Counter 1 <= 5
THEN goto line 13

9. have critter Attachee stop following his leader

10. float line 2 above Attachee

11. Global Flag 2707 = 1

12. return and RUN default

13. float line 1 above Attachee

14. return and SKIP default

б) Скрипт из патча 1
0. area of Triggerer: store in Local 1

1. IF Local 1 == 0
THEN return and RUN default

2. IF Local 1 == 26
THEN return and RUN default

3. IF Local 1 == 28
THEN return and RUN default

4. Counter 1 = Counter 1 + 1

5. IF Counter 1 <= 5
THEN goto line 10

6. have critter Attachee stop following his leader

7. float line 2 above Attachee

8. Global Flag 2707 = 1

9. return and RUN default

10. float line 1 above Attachee

11. return and SKIP default

в) Скрипт из патча 2
0. area of Triggerer: store in Local 1

1. IF Local 1 == 26
THEN return and RUN default

2. IF Local 1 == 0
THEN return and RUN default

3. Counter 1 = Counter 1 + 1

4. goto line 9

5. have critter Attachee stop following his leader

6. call script 2179 at line 13 with triggerer Player and attachee Attachee in 2 seconds

7. Global Flag 2707 = 1

8. return and RUN default

9. call script 2179 at line 11 with triggerer Player and attachee Attachee in 2 seconds

10. return and SKIP default

11. float line 1 above Attachee

12. return and RUN default

13. float line 2 above Attachee

14. return and RUN default

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

5. Скрипт 30026Caladon_Crusading_Chain_WIELD_ON - решено, принята правка скрипта из патча
а) Оригинальный скрипт
0. magic/tech: adjust Counter 1 by item Attachee used by Triggerer: store in Counter 0

1. Local 0 = Counter 0

2. IF Local 0 == 0
THEN return and RUN default

3. give Triggerer the effect Counter 2 with cause 5

4. Local 0 = Local 0 - 1

5. goto line 2

6. Local 0 = Counter 0

7. IF Local 0 == 0
THEN return and RUN default

8. remove from Triggerer the effect Counter 2

9. Local 0 = Local 0 - 1

10. goto line 7

б) Скрипт из патча
0. magic/tech: adjust Counter 1 by item Attachee used by Triggerer: store in Counter 0

1. Local 0 = Counter 0

2. give Triggerer the effect 308 with cause 5

3. IF Local 0 == 0
THEN return and RUN default

4. give Triggerer the effect Counter 2 with cause 5

5. Local 0 = Local 0 - 1

6. goto line 3

7. Local 0 = Counter 0

8. remove from Triggerer the effect 308

9. IF Local 0 == 0
THEN return and RUN default

10. remove from Triggerer the effect Counter 2

11. Local 0 = Local 0 - 1

12. goto line 9

Меня интересует, что это за эффект такой "effect 308"?

6. Скрипт 30027Caladon_Crusading_Chain_WIELD_OFF - решено, принята правка скрипта из патча
1. Оригинальный скрипт
0. call script attached to Attachee at point 24 at line 6 with triggerer Triggerer

1. return and RUN default

2. Скрипт из патча
0. call script attached to Attachee at point 24 at line 7 with triggerer Triggerer

1. return and RUN default

Интересует что это за line 6/line 7?

7. 30067Black_Stone_Blade_WIELD_OFF
1. Оригинальный скрипт
0. call script attached to Attachee at point 24 at line 1 with triggerer Triggerer

1. return and RUN default

2. Скрипт из патча
0. remove from Triggerer the effect 222

1. IF Global Flag 2931 == 0
THEN Global Flag 2931 = 1

2. call script attached to Attachee at point 24 at line 1 with triggerer Triggerer

3. return and RUN default

Интересует, зачем добавили Glibal Flag, которого даже нет в доках с флагами? Нужна ли команда remove при снятии, если что-то подобное было в скрипте на одевание:
0. goto line 2

1. goto line 29

2. Local 6 = 4

3. Local 7 = 0

4. Local 8 = 0

5. Local 9 = 0

6. IF items are being rewielded
THEN goto line 8

7. IF Attachee is identified
THEN script eye candy: play 30 on Triggerer

8. magic/tech: adjust Local 6 by item Attachee used by Triggerer: store in Counter 0

9. magic/tech: adjust Local 7 by item Attachee used by Triggerer: store in Counter 1

10. magic/tech: adjust Local 8 by item Attachee used by Triggerer: store in Counter 2

11. magic/tech: adjust Local 9 by item Attachee used by Triggerer: store in Counter 3

12. Local 0 = Counter 0

13. IF Local 0 == 0
THEN goto line 17

14. give Triggerer the effect 222 with cause 5

15. Local 0 = Local 0 - 1

16. goto line 13

17. Local 0 = Counter 1

18. IF Local 0 == 0
THEN goto line 21

19. Local 0 = Local 0 - 1

20. goto line 18

21. Local 0 = Counter 2

22. IF Local 0 == 0
THEN goto line 25

23. Local 0 = Local 0 - 1

24. goto line 22

25. Local 0 = Counter 3

26. IF Local 0 == 0
THEN return and RUN default

27. Local 0 = Local 0 - 1

28. goto line 26

29. Local 0 = Counter 0

30. IF Local 0 == 0
THEN goto line 34

31. remove from Triggerer the effect 222

32. Local 0 = Local 0 - 1

33. goto line 30

34. Local 0 = Counter 1

35. IF Local 0 == 0
THEN goto line 38

36. Local 0 = Local 0 - 1

37. goto line 35

38. Local 0 = Counter 2

39. IF Local 0 == 0
THEN goto line 42

40. Local 0 = Local 0 - 1

41. goto line 39

42. Local 0 = Counter 3

43. IF Local 0 == 0
THEN return and RUN default

44. Local 0 = Local 0 - 1

45. goto line 43
Volh [?]

Аватара пользователя
 
 Не в сети
Сообщения: 160
Зарегистрирован: 31 янв 2012, 05:55

Вернуться к началу



Re: Скрипты

Сообщение menyalin » 25 май 2014, 00:22

Volh писал(а):5. Скрипт 30026Caladon_Crusading_Chain_WIELD_ON
Меня интересует, что это за эффект такой "effect 308".

Вероятно, это {308}{maxfollowers +1} из rules\effect.mes
Правка, наверное, связана с этим багом:
"Fixed description for Caladon’s Crusading Chain (it had Amulet of Leadership’s description attached by mistake)." ((Зарегистрируйтесь, чтобы увидеть ссылку))

Volh писал(а):6. Скрипт 30027Caladon_Crusading_Chain_WIELD_OFF
Интересует что это за line 6/line 7.

Насколько я понял, это напрямую связано с изменением в предыдущем скрипте (30026Caladon_Crusading_Chain_WIELD_ON): код снятия эффектов предмета оказался сдвинут на одну строку.
menyalin [?]
 
 Не в сети
Сообщения: 110
Зарегистрирован: 02 фев 2011, 19:28

Вернуться к началу

Re: Скрипты

Сообщение menyalin » 25 май 2014, 01:37

Volh писал(а):1. Скрипт 01355InnerEncampmentGuardHB

Тут, вроде бы, меняется логика нападения на 6571 (предположительно, {6571}{6571 Синтия Боггс} из oemes\oname.mes). В оригинале логика, по факту, такая: атака инициируется (combat: Attachee attacks Current Looped Object), если в отряде есть 6571, и она видима, при чём нападение при выполнении этих условий произойдёт вне зависимости от присутствия 6410 ({6410}{6410 Торвальд Два Камня}). В скрипте из патча логика изменена таким образом, что сначала проверяется присутствие 6410, и при его наличии дальнейшие проверки на инициацию атаки уже не проводятся, а выполнение скрипта прерывается, то есть он даёт гарантию ненападения на 6571 и что-то там ещё отменяет на тему диалогов и вызовов дополнительных скриптов.
Я понятно объяснил, или подробнее надо?
Насколько правильно это изменение, судить не могу, так как не знаю игровой контекст - я явно ещё до этого места не дошёл.

Volh писал(а):2. Скрипт 01356InnerEncampmentGuard

Тут, как и в 30027Caladon_Crusading_Chain_WIELD_OFF просто поправка на добавленные строки. В оригинале ссылка идёт на строку 32 из 01355InnerEncampmentGuardHB, а в патченном скрипте эта строка сдвинулась из-за добавления новых строк.
menyalin [?]
 
 Не в сети
Сообщения: 110
Зарегистрирован: 02 фев 2011, 19:28

Вернуться к началу

Re: Скрипты

Сообщение menyalin » 25 май 2014, 11:56

Патченный скрипт 01355InnerEncampmentGuardHB из какого конкретно патча? Какой-то немного странный он, особенно вот эти две строки:

16. goto line 18

17. return and RUN default

Из-за безусловного перехода в строке 16 и отсутствия переходов в других частях скрипта строка 17 не выполняется вообще никогда, и никаких переходов на неё в скрипте нет. Не понятно, зачем эти две строки вообще были вставлены? То ли это огрызок какой-то старой правки, то ли сделано для того, чтобы нумерацию строк подогнать...
menyalin [?]
 
 Не в сети
Сообщения: 110
Зарегистрирован: 02 фев 2011, 19:28

Вернуться к началу

Re: Скрипты

Сообщение menyalin » 25 май 2014, 17:54

Volh писал(а):3. Скрипт 01387Bedokaan_Pit_TILES

Не могу понять смысл правки, нужно знать контекст. Не нашёл подходящего по контексту изменения ни в описании GF, ни в UAP - откуда изменённый скрипт?
menyalin [?]
 
 Не в сети
Сообщения: 110
Зарегистрирован: 02 фев 2011, 19:28

Вернуться к началу

Re: Скрипты

Сообщение menyalin » 25 май 2014, 18:25

Volh писал(а):4. 02179Murgo_Sector

Понятно, что правка связана с "[F] Murgo now leaves you if you take too long."
Я вижу два основных различия между патчами:
1) во втором патче область 28 (({28}{90818, 70319, 0, 0/Каменоломня Торина/Древняя дворфийская каменоломня.}//90825, 70292)) учитывается в количестве посещённых, а в оригинале и первом патче эта область не считается (IF Local 1 == 28 THEN return and RUN default)
2) во втором патче сделано так, чтобы всплывающие строки (float line 1 above Attachee) появлялась с двухсекундной задержкой (call script 2179 at line 11 with triggerer Player and attachee Attachee in 2 seconds)
menyalin [?]
 
 Не в сети
Сообщения: 110
Зарегистрирован: 02 фев 2011, 19:28

Вернуться к началу

Re: Скрипты

Сообщение menyalin » 25 май 2014, 18:41

Volh писал(а):7. 30067Black_Stone_Blade_WIELD_OFF
Интересует, зачем добавили Glibal Flag, которого даже нет в доках с флагами?

Похоже, это правка бага: "[F] Fixed Black Stone Blade. Its effects are no longer permanent."
Зачем нужен глобальный флаг, мне не ясно: надо искать по диалогам и скриптам, где он проверяется.
Само по себе его добавление при отсутствии в globalflags.mes вроде бы нормально, т.к.:
Globalflags.mes is used simply to keep track of the global flags you have used in the game. The game does not reference this file at all. ((Зарегистрируйтесь, чтобы увидеть ссылку))

Volh писал(а):Нужна ли команда remove при снятии

Затрудняюсь сказать. С этой командой вызываемый надеванием меча эффект уменьшение ловкости ({222}{dx -1}) будет убираться при снятии предмета в любом случае, а в скрипте надевания это просисходит только если условие 30. IF Local 0 == 0 не выполнится. В чём смысл этого условия, я не понял.
menyalin [?]
 
 Не в сети
Сообщения: 110
Зарегистрирован: 02 фев 2011, 19:28

Вернуться к началу

Re: Скрипты

Сообщение menyalin » 12 авг 2014, 20:39

Volh, разобрался ли со скриптами в конечном итоге? Нашёл знатока?
menyalin [?]
 
 Не в сети
Сообщения: 110
Зарегистрирован: 02 фев 2011, 19:28

Вернуться к началу

Re: Скрипты

Сообщение Volh » 14 авг 2014, 07:08

menyalin писал(а):Volh, разобрался ли со скриптами в конечном итоге? Нашёл знатока?

К сожалению, нет, menyalin. Все спецы (коих и так было немного) либо разбежались, либо не хотят помогать. Есть один человек, но он только взглянет, но ничего не обещал (давно уже этим не занимался, а заново погружаться в эту тему ему нет смысла). Так что я обновлю пост (по определённым причинам я на время выпал из этой темы) и обращусь к тебе в личку с просьбой взглянуть. Ну, а после подведу итоги и забью на всё остальное. Пусть следующее поколение игроков парит себе мозг скриптами. :)
Volh [?]

Аватара пользователя
 
 Не в сети
Сообщения: 160
Зарегистрирован: 31 янв 2012, 05:55

Вернуться к началу

Re: Скрипты

Сообщение Alex » 29 авг 2014, 19:57

Volh писал(а):1. Скрипт 01355InnerEncampmentGuardHB
2. Скрипт 01356InnerEncampmentGuard
3. Скрипт 01387Bedokaan_Pit_TILES
4. 02179Murgo_Sector
5. Скрипт 30026Caladon_Crusading_Chain_WIELD_ON - решено, принята правка скрипта из патча
6. Скрипт 30027Caladon_Crusading_Chain_WIELD_OFF - решено, принята правка скрипта из патча
7. 30067Black_Stone_Blade_WIELD_OFF


У меня совершенно нет времени, но быстро попытаюсь помочь, может на следующей неделе ещё зайду. Судя по некоторым скриптам, вижу ты посмотрел не такой распространённый, как остальные, патч, который я тебе советовал. :) Очень cпешу, так что за слог и оформление сильно не пинать. :)

1 и 2:

по оригинальному скрипту охранники не должны были агриться на Синтию при наличии Торвальда

оно так не работало

конструкция была исправлена (изначально это была правка одного скрипта), но выяснилось, что при этом Торвальд стал учитываться только при определённом порядке неписей в партии (по портретам слева порядок в партии виден)

фикс был переделан со следующим комментарием автора:

Набросал новый фикс в обед:

(Зарегистрируйтесь, чтобы увидеть ссылку)

Теперь порядок в партии пофиг.

Только фикс уже не точечный и соответственно скрипт немного вырос и соответственно пришлось и обращение к данному скрипту из уже другого скрипта исправить... Теперь это 2 скрипта которые надо бросить в папку data\scr.


в итоге фикс полностью рабочий и к слову в никаких других патчах его больше нет (я не зря хвалил тот патч за некоторую эксклюзивность при небольшом количестве правок)

3:

эту правку нельзя рассматривать в отрыве от второго скрипта и правки диалога соответствующего второму скрипту, флаг в тайловом сркипте ломал логику и будь спок, он учитывается в другом скрипте

баг оригинала выглядит так - при мирном решении соответствующего квеста есть ошибочная (проистекающая из насильственного решения квеста) возможность досрочно завершить квест, что влечёт невозможность сдать квест в Кинтаре и получить награду (как это и должно работать)

после фикса мирное решение к такому больше не приводит (опять же эксклюзивный фикс того патча и никто это больше не правил)

4: взято из какого-то другого патча так что посмотрю на следующей неделе если скажешь откуда это

5 и 6:

зря принял, ибо это неправильное решение

правильной правкой является исправление моба кольчуги - привязка родного описания (по соответствующему номеру), а эффекты она вешает изначально правильно

а эти скрипты модифицирует игру и добавляют (снимают при снятии) левый эффект от определённого амулета которого нет в игре

7:

тоже скажи откуда взял, ибо единственная правка, в которой нуждается этот меч, это правка (правильная привзяка скрипта на снятие и всё) через map.patch следующего вида:

G_C2A4A37D_5E2B_461D_B8DF_8EDE5300AB58: script 25 30067

(как во всех правильных патчах на просторах инета и сделано), а скрипт не нужен - это уже либо моды, либо ошибка
The angels keep falling...
Alex [?]

Аватара пользователя
 
 Не в сети
Сообщения: 10
Зарегистрирован: 12 окт 2011, 11:54

Вернуться к началу





Вернуться в Arcanum: Of Steamworks and Magick Obscura

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1