Вопросы по созданию КЛЕО-скриптов
|
|
DK22Pac | Дата: Понедельник, 21.06.2010, 17:57 | Сообщение # 286 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Как симитировать арест игрока (гта3)? И где взять эту базу Листенера, и есть ли такая для гта3?
|
|
| |
Den_spb | Дата: Понедельник, 21.06.2010, 21:53 | Сообщение # 287 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Как симитировать арест игрока (гта3)? Не знаю. Если подходящих опкодов нет, то через память. Quote (DK22Pac) И где взять эту базу Листенера, и есть ли такая для гта3? Базу gta_sa.exe можно взять здесь: http://public.sannybuilder.com/gtasa_exe_idb/ - качай свежую версию (смотри по дате). Смотреть базу надо с помощью IDA 5.2 (старые версии IDA читать базу не будут). Для ГТА III база тоже есть - смотреть по той же ссылке, что и СА.
|
|
| |
DK22Pac | Дата: Вторник, 06.07.2010, 23:32 | Сообщение # 288 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| И ещё вопрос Вот конструкция миссии :Mission thread "Mission" gosub @Start if wasted_or_busted then gosub @Failed end gosub @Clean end_thread Как-бы проверка "умер-арест" должна выполняться после return из :WIN или :FAILED, но она выполняется на протяжении всей миссии? Туда же можно поставить ещё свои проверки (например - not Player.Money > 1000 (что будет значить если денег станет меньше на протяжении миссии то будет провал) ? Пишу в скрипте 0011: 1@ *= 4.355 после декомпиляции 0011: 1@ *= 4.1235 ???
Сообщение отредактировал DK22Pac - Среда, 07.07.2010, 20:22 |
|
| |
Den_spb | Дата: Среда, 07.07.2010, 22:39 | Сообщение # 289 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (DK22Pac) Как-бы проверка "умер-арест" должна выполняться после return из :WIN или :FAILED, но она выполняется на протяжении всей миссии? Туда же можно поставить ещё свои проверки (например - not Player.Money > 1000 (что будет значить если денег станет меньше на протяжении миссии то будет провал) ? Если написать проверку один раз, то всё время она работать не будет - тут дело в другом: если игрок умер или арестован, то осуществляется return, соответствующий gosub @Start. В этом случае выполнение кода до блока успешного прохождения не доходит (ведь надпись "миссия пройдена" никогда не появляется, если игрок арестован или умер). Осуществляется проверка wasted_or_busted и осуществляется переход на блок провала. Другие проверки (на время, деньги и др.) надо осуществлять в цикле в теле миссии (см. примеры миссий в СБ справке). Quote (DK22Pac) Пишу в скрипте 0011: 1@ *= 4.355 после декомпиляции 0011: 1@ *= 4.1235 Попробовал скомпилировать это выражение у себя - число не изменилось. С чем может быть связан глюк у тебя - не знаю. Есть замечание: для арифметических операций надо употреблять опкоды, которые точно соответствуют данной ситуации. Здесь ты применяешь опкод для глобальных переменных, хотя в опкоде у тебя локальная переменная. Проще и лучше не писать номер опкода (если переменная умножается на постоянную) - компилятор сам подставит нужный опкод. Т.е. попробуй написать 1@ *= 4.355 и скомпилировать код, если глюк останется, то можешь обратиться сюда: http://sannybuilder.com/forums/viewtopic.php?id=17&p=1
|
|
| |
DK22Pac | Дата: Четверг, 08.07.2010, 02:11 | Сообщение # 290 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Может это с настройками СБ связано? Я никогда не пишу код опкода если там не переменная а число. Я уже не первый раз это замечаю, дробные числа уменьшаются, если писать например 4.0 то ничего не изменяется. Может это связано с тем что это гта3?
Сообщение отредактировал DK22Pac - Четверг, 08.07.2010, 02:11 |
|
| |
Den_spb | Дата: Четверг, 08.07.2010, 02:17 | Сообщение # 291 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Попробуй скомпилировать такой вариант: 1@ *= 4355.0E-3
|
|
| |
Alien | Дата: Четверг, 08.07.2010, 09:42 | Сообщение # 292 |
Группа: Проверенные
Сообщений: 1
Статус: Offline
| Компилировать для gta3 надо только в режиме gta3. Если в VC и SA дробное в скриптинге представляется 4-байтовым float'ом, то в gta3 оно представляется 2-байтвым целым , которое надо разделить на 8.0, чтобы получить нужное число.
|
|
| |
DK22Pac | Дата: Четверг, 08.07.2010, 12:55 | Сообщение # 293 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Quote Если написать проверку один раз, то всё время она работать не будет - тут дело в другом: если игрок умер или арестован, то осуществляется return, соответствующий gosub @Start. В этом случае выполнение кода до блока успешного прохождения не доходит (ведь надпись "миссия пройдена" никогда не появляется, если игрок арестован или умер). Осуществляется проверка wasted_or_busted и осуществляется переход на блок провала. Другие проверки (на время, деньги и др.) надо осуществлять в цикле в теле миссии (см. примеры миссий в СБ справке). Спасибо, понял. ----------------------------- Не работает 05ED: 0@ = thread 'MAIN' pointer на гта3 После декомпиляции 05ED: = thread ----------------------------- У меня создалось такое ощущение, что эти опкоды поплутаны. 02F6: 9@ = cosine 7@ 02F7: 8@ = sine 7@ ??? ------------------------------ Обьясни как действует этот опкод 86BD: not no_obstacles_between 0@ 1@ 2@ and 16@ 17@ 18@ solid 1 car 1 actor 1 object 1 particle 0 Он проверяет находится ли ЦЕНТР чего-либо (напр.мне надо обьект) или коллизия? И параметры 1-0, это я так понимаю, 0 - вкл., 1 - выкл.? И что такое solid.
Сообщение отредактировал DK22Pac - Вторник, 13.07.2010, 12:30 |
|
| |
ole-docenko | Дата: Суббота, 24.07.2010, 20:19 | Сообщение # 294 |
Группа: Проверенные
Сообщений: 11
Статус: Offline
| Здравствуйте ! Я хотел спросить : как правильно создавать внешние скрипты ? А то я пишу скрипт (создание припаркованого транспортного средства) компилирую его , помещаю в папку cleo , и в лучшем случае в игре неработает маркер сохранения , в худшем незапускаются ни сохранения ни новая игра ... Скажите , пожалуйста , что я делаю не так ?
|
|
| |
d88 | Дата: Вторник, 27.07.2010, 19:05 | Сообщение # 295 |
Группа: Проверенные
Сообщений: 113
Статус: Offline
| Quote (ole-docenko) что я делаю не так ? Как говорят некоторые пользователи - экстрасенсов здесь нет, не видя кода мы не можем знать что ты делаешь не так.
|
|
| |
Den_spb1257 | Дата: Понедельник, 16.08.2010, 17:44 | Сообщение # 296 |
Группа: Администраторы
Сообщений: 6
Статус: Offline
| @DK22Pac В sascm.ini, поставляемом с SB 3.04, sin и cos перепутаны местами. В sascm.ini, поставляемом с клео4 это исправлено. 06BD проверяет, пересекается ли отрезок между двумя точками с объектом опред. типа. Те объекты, для которых выставлен 0, проверка будет игнорировать. Solid - статические объекты (объекты карты).
|
|
| |
ole-docenko | Дата: Суббота, 21.08.2010, 22:50 | Сообщение # 297 |
Группа: Проверенные
Сообщений: 11
Статус: Offline
| Quote (d88) Как говорят некоторые пользователи - экстрасенсов здесь нет, не видя кода мы не можем знать что ты делаешь не так. Спасибо , я уже с этим разобрался ... Но возникла новая проблема: можете посмотреть что не так в этом скрипте ... Code // This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
{$VERSION 3.1.0027} {$CLEO .cs}
//-------------MAIN--------------- thread -7
:NONAME_4 wait 500 if and $ONMISSION == 0 not Actor.Dead($PLAYER_ACTOR) Actor.DrivingVehicleType($PLAYER_ACTOR, #SECURICA) not Player.WantedLevel($PLAYER_CHAR) > 0 else_jump @NONAME_4 Player.Money($PLAYER_CHAR) += 150000 Player.WantedLevel($PLAYER_CHAR) = 4 0A95: enable_thread_saving ... и имеет ли он вообще право на жизнь ?
|
|
| |
Den_spb1257 | Дата: Пятница, 27.08.2010, 14:20 | Сообщение # 298 |
Группа: Администраторы
Сообщений: 6
Статус: Offline
| 1.В конец кода необходимо добавить команду завершения скрипта 0A93, иначе будет вылетать игра. 2.thread -7 надо убрать. 3.Для большей надежности желательно добавить проверку на существование игрока после wait 500 IF Player.Defined($Player_char) JF @NONAME_4
|
|
| |
d88 | Дата: Среда, 15.09.2010, 17:00 | Сообщение # 299 |
Группа: Проверенные
Сообщений: 113
Статус: Offline
| Den_spb, я понимаю почему в клео нельзя использовать свои глобальные переменные, типа им там присваивается ID и из-за этого может возникнуть путаница при компиляции. Но я не пойму почему тогда их можно использовать в мэйне? Разве здесь не та же ситуация?
|
|
| |
Den_spb | Дата: Среда, 15.09.2010, 21:00 | Сообщение # 300 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| "... В main.scm все новые переменные получают имена при компиляции начиная с $10948, т.к. $10947 наибольшая переменная, использованная в оригинальном main.scm. Теперь вернемся к CLEO-скриптам. Каждый раз, когда мы компилируем новый скрипт, компилятор не знает ничегошеньки про состояние main.scm и сколько переменных в нем использовалось. Он именует переменные с нуля каждый раз. ..."
|
|
| |