» TeamX (Архив Форума)«


Форум TeamX » Тех. поддержка » Скрипты (Все вопросы по скриптингу - сюда)

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] Все собщения

 
Anchorite
Пользователь

Откуда: Не здесь
Регистрация: Янв. 2003

Всего: 283 сообщения

Я посмотрел присланный скрипт. Нашел интересную вещь.

1. После декомпиляции конец процедуры talk_p_proc имеет вид
Код:
 
...
       add_obj_to_inven(self_obj, restock_obj);
   end
   return 0;
   LVar0 := 0;

procedure destroy_p_proc
begin
   if (source_obj == dude_obj) then begin
...



т.е. видно, что у тела функции отсутствует завершающий end.

2. Для выяснения, что и к чему смотрим дамп этой процедуры.

Код:
 
...
0x00004240: 0x80BC            - O_SELF_OBJ
0x00004242: 0xC001 0x00000010 - O_INTOP(0x00000010)   // 16 (16)
0x00004248: 0x8012            - O_FETCH_GLOBAL
0x0000424A: 0x80D8            - O_ADD_OBJ_TO_INVEN

0x0000424C: 0xC001 0x00000000 - O_INTOP(0x00000000)   // 0 (0)
0x00004252: 0x800D            - O_D_TO_A
0x00004254: 0x8019            - O_SWAPA
0x00004256: 0x802A            - O_POP_TO_BASE
0x00004258: 0x8029            - O_POP_BASE
0x0000425A: 0x800C            - O_A_TO_D
0x0000425C: 0x801C            - O_POP_RETURN

0x0000425E: 0xC001 0x00000000 - O_INTOP(0x00000000)   // 0 (0)
0x00004264: 0xC001 0x00000000 - O_INTOP(0x00000000)   // 0 (0)
0x0000426A: 0x8031            - O_STORE

0x0000426C: 0x802A            - O_POP_TO_BASE
0x0000426E: 0x8029            - O_POP_BASE
0x00004270: 0x801C            - O_POP_RETURN



Из дампа видно, что данная процедура имеет "нестандартный завершитель". От "стандартного" от отличается наличием трех опкодов O_INTOP, O_INTOP и O_STORE.
Поэтому декомпилятор и не стал преобразовывать его в завершающий end, а декомпилировал как есть.

Для исправления этой ситуации нужно удалить строки

Код:
 
   return 0;
   LVar0 := 0;



и заменить их на end.
После этого функция примет номальный вид пригодный для компиляции.

От себя замечу, что данный скрипт скомпилирован не "родным" BIS-овым компилятором, а чем-то другим.

А "стандартные" последовательности опкодов можно глянуть в http://www.teamx.ru/docs/decompile.rar. Я его сделел, когда писал декомпилятор.


(Отредактировал(а) Anchorite - 5:23 - 14 Июня, 2005)

Отправлено: 23:11 - 13 Июня, 2005
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Чувствую, сейчас кому-то прибавится работы

По поводу непонятных вещей. Есть у Павла в моде скрипт - ardic.int Уж не знаю чем и как он его жал(Павел, ау....), но все декомпиляторы страшно на него ругаются. Нойдовский вообще ничего не создаёт и пишет, что "procedures are not sorted in ascending adress order", int2ssl создаёт пустой файл и тоже ругается, но уже "Expression required" (и также выдаёт warnings). Кинуть файл?

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 0:02 - 14 Июня, 2005
Aman
Пользователь

Откуда: Киев
Регистрация: Апр. 2005

Всего: 208 сообщений

>> данный скрипт скомпилирован не "родным" BIS-овым компилятором, а чем-то другим

Сто пудово, что это нойдовский. Я попробовал нойдовский декомпайл, всё ОК - вместо return 0; LVar0 := 0; стояло законное end. Скомпилил.


(Добавление от 2:04 - 14 Июня, 2005.)


to Ray

>> По поводу непонятных вещей. Есть у Павла в моде скрипт - ardic.int

Это был ipp.

-----
Ибо логично предположить, что если недостаточно чего-либо для запуска чего-либо, то второе чего-либо, а именно то, для которого не хватает - вообще не должно запускаться. (неизвестный)

Отправлено: 1:18 - 14 Июня, 2005
Anchorite
Пользователь

Откуда: Не здесь
Регистрация: Янв. 2003

Всего: 283 сообщения

У int2ssl есть пара ключей (-a и -b), которые позволяют игнорировать неверное число аргументов для опкодов.
Попробуй с ними, может чего толковое и получится.

Отправлено: 5:22 - 14 Июня, 2005
Volk
Пользователь

Регистрация: Июнь 2005

Всего: 79 сообщений

procedure critter_p_proc begin
<...>
obj_set_light_level(dude_obj, get_critter_stat(dude_obj, 37)*2, 8);
end

Я сделал чтоб чузен когда у него радиация светился, но даже при радиации 50 он светится слабо, да и то когда есть рядом источники света. А в бою у чузена свет потухает совсем.
1. Как сделать чтоб свет был ярче и везде?
2. И как сделать чтоб в свет не потухал?

Отправлено: 7:06 - 14 Июня, 2005
Volk
Пользователь

Регистрация: Июнь 2005

Всего: 79 сообщений

Если у кого еше есть проблемы с компиляцие\декомпиляцией, вэлком сюда: http://volkpk.nm.ru/Bis_compiller.rar

Компилятор
Декомпилятор
Препроцесор
Headers версии 1.02
Все настроено и предельно просто.

Всесит 778 кб.

Отправлено: 18:31 - 16 Июня, 2005
Volk
Пользователь

Регистрация: Июнь 2005

Всего: 79 сообщений

Дано n новых предеметов, как их раскидать по всем торговцам? Чтоб не править и перекомпилировать все скрипты.

Отправлено: 22:54 - 17 Июня, 2005
Aman
Пользователь

Откуда: Киев
Регистрация: Апр. 2005

Всего: 208 сообщений

Два варианта:
- переделать существующие (у торговцев) прошки на твои;
- перекомпилить скрипты ;

Скрипты кстати несложно переделать - пара строчек, посмотри например map_enter_p_proc в DIFLIBOX.ssl (box торговца в Дэне).

-----
Ибо логично предположить, что если недостаточно чего-либо для запуска чего-либо, то второе чего-либо, а именно то, для которого не хватает - вообще не должно запускаться. (неизвестный)

Отправлено: 2:24 - 18 Июня, 2005
Volk
Пользователь

Регистрация: Июнь 2005

Всего: 79 сообщений

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

ЗЫ Ты исходники то даш runmodа

Отправлено: 3:11 - 18 Июня, 2005
Mynah
Модератор

Откуда: Пермь
Регистрация: Окт. 2004

Всего: 469 сообщений

Возникла интересная трабла.

Есть добавленная в игру карта, правильно зарегестрирована везде, чузен на ней прекрасно себя чувствует, но у всех криттеров карты не работают animate_move_to_tile и animate_run_to_tile (во всех варицаиях, т.е. не помогает регистрация списка анимаций и bwor ANIMATE_INTERRUPT), при этом move_to и critter_attempt_placement работают прекрасно.
Мне почему-то кажется, что криттер пытается "убежать" на другой elevation и, раз у него ничего не получается, остаётся на месте.
Может кто сталкивался и знает как лечить?

Проблема №2:
При попытке битового использовани гвар на этой же карте, фаллаут вываливаетс в винду с ошибкой, причём ошибка "Приложение выполнило недопустимую операцию", а не фаллаутовская. На остальных картах всё нормально.

PS: Формат карты вроде бы правильный. И бисовский и димсовый мапперы читают её нормально. Да и все остальные функции на ней работают

-----
Scio me nihil scire

Отправлено: 22:55 - 18 Июня, 2005 Исправлено: Mynah - 19:36 - 19 Июня, 2005
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] Все собщения


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com