Вопросы по созданию КЛЕО-скриптов
|
|
ILYALION | Дата: Суббота, 31.12.2011, 21:06 | Сообщение # 1111 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Да, но если будет jump, то там у меня предусматривается return. И в чём же всё-таки причина вылета?
Сообщение отредактировал ILYALION - Суббота, 31.12.2011, 21:13 |
|
| |
Den_spb | Дата: Суббота, 31.12.2011, 21:16 | Сообщение # 1112 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Я отредактировал предыдущее сообщение. Повторюсь: вылет скорей всего из-за превышения лимита количества gosub, выполненных подряд, вызванного этой конструкцией:Code if 16@ == 1 else_jump @START П.С.Одна из причин, по которой код рекомендуется писать конструкциями, а не метками - то, что с метками код становится очень запутанным.
|
|
| |
ILYALION | Дата: Суббота, 31.12.2011, 21:54 | Сообщение # 1113 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Den_spb, но в моём полном коде только 2 вложенных gosub(до этого я прикреплял отрывок), и всё равно вылет из-за return. Прикреплю свой полный запутанный код. Добавлено (31.12.2011, 21:54) --------------------------------------------- Den_spb, большое Вам спасибо за все разъяснения. Заменил последнюю строку на return-вылеты прекратились. И код работает так, как я и хотел. Осталась одна часть-и "подарок" на Новый год будет готов.
Сообщение отредактировал ILYALION - Суббота, 31.12.2011, 21:45 |
|
| |
Den_spb | Дата: Суббота, 31.12.2011, 22:43 | Сообщение # 1114 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Пожалуйста. Советую ещё изучить темы массивов и циклов - с их помощью можно уменьшать объём кода. Пример - данную конструкцию:Code 0@ = -382234 0085: &0(0@,1i) = 1@ // vagon 1 0@ = -382233 0085: &0(0@,1i) = 2@ // vagon 2 0@ = -382232 0085: &0(0@,1i) = 3@ // vagon 3 0@ = -382231 0085: &0(0@,1i) = 4@ // vagon 4 0@ = -382230 0085: &0(0@,1i) = 5@ // vagon 5 0@ = -382229 0085: &0(0@,1i) = 6@ // vagon 6 0@ = -382228 0085: &0(0@,1i) = 7@ // vagon 7 0@ = -382227 0085: &0(0@,1i) = 8@ // vagon 8 0@ = -382226 0085: &0(0@,1i) = 9@ // vagon 9 0@ = -382225 0085: &0(0@,1i) = 10@ // vagon 10 0@ = -382224 0085: &0(0@,1i) = 11@ // vagon 11 0@ = -382223 0085: &0(0@,1i) = 12@ // vagon 12 0@ = -382222 0085: &0(0@,1i) = 13@ // vagon 13 0@ = -382221 0085: &0(0@,1i) = 14@ // vagon 14 0@ = -382220 0085: &0(0@,1i) = 15@ // vagon 15 можно заменить на:Code 0@ = -382234 for 31@ = 0 to 14 0085: &0(0@,1i) = 1@(31@,15i) 0@ += 1 end
|
|
| |
Аксиома | Дата: Воскресенье, 01.01.2012, 00:43 | Сообщение # 1115 |
Группа: Заблокированные
Сообщений: 81
Статус: Offline
| Почему после взрыва объект не удаляется
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--------------- 0001: wait 100 ms
:NONAME_4 0001: wait 100 ms 0866: get_object_in_sphere -671.859 2057.96 58.3469 radius 2.0 handle_as 1@ 0866: get_object_in_sphere -781.859 2057.96 58.3469 radius 2.0 handle_as 2@ 0866: get_object_in_sphere -777.821 2089.92 58.3469 radius 2.0 handle_as 3@ 0866: get_object_in_sphere -654.32 2095.82 58.3469 radius 2.0 handle_as 4@ 0866: get_object_in_sphere -650.256 2136.68 58.3469 radius 2.0 handle_as 5@ 0866: get_object_in_sphere -781.273 2140.52 58.3469 radius 2.0 handle_as 6@ 0002: jump @NONAME_165
:NONAME_165 0001: wait 0 ms 00D6: if 0102: actor $PLAYER_ACTOR in_sphere -841.345 1855.68 58.4219 radius 3.2 3.2 3.0 sphere 1 stopped_on_foot 004D: jump_if_false @NONAME_165 0001: wait 1000 ms 020C: create_explosion_with_radius 6 at -671.859 2057.96 58.3469 0948: create_explosion_at -671.859 2057.96 58.3469 type 10 camera_shake 1 020C: create_explosion_with_radius 6 at -781.859 2057.96 58.3469 0948: create_explosion_at -781.859 2057.96 58.3469 type 10 camera_shake 1 020C: create_explosion_with_radius 6 at -777.821 2089.92 58.3469 0948: create_explosion_at -777.821 2089.92 58.3469 type 10 camera_shake 1 020C: create_explosion_with_radius 6 at -654.32 2095.82 58.3469 0948: create_explosion_at -654.32 2095.82 58.3469 type 10 camera_shake 1 020C: create_explosion_with_radius 6 at -650.256 2136.68 58.3469 0948: create_explosion_at -650.256 2136.68 58.3469 type 10 camera_shake 1 020C: create_explosion_with_radius 6 at -781.273 2140.52 58.3469 0948: create_explosion_at -781.273 2140.52 58.3469 type 10 camera_shake 1 020C: create_explosion_with_radius 6 at -697.498 2037.7 19.5469 0948: create_explosion_at -697.498 2037.7 19.5469 type 10 camera_shake 1 020C: create_explosion_with_radius 6 at -797.498 2017.7 19.5469 0948: create_explosion_at -797.498 2017.7 19.5469 type 10 camera_shake 1 0108: destroy_object 1@ 0108: destroy_object 2@ 0108: destroy_object 3@ 0108: destroy_object 4@ 0108: destroy_object 5@ 0108: destroy_object 6@ 0001: wait 20000 ms 0002: jump @NONAME_4
|
|
| |
Den_spb | Дата: Воскресенье, 01.01.2012, 01:33 | Сообщение # 1116 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| В зоне взрыва были динамические объекты? Дело в том, что скриптом можно "поймать" только динамические объекты - это перемещаемые и ломающиеся объекты, прописанные в object.dat, а также любые объекты, созданные скриптами. Статический объект скриптом "поймать" нельзя. Перед произведением действия над объектом (в данном случае - удаление) надо проверить, существует ли этот объект - иначе игра может вылететь.
|
|
| |
Аксиома | Дата: Воскресенье, 01.01.2012, 17:20 | Сообщение # 1117 |
Группа: Заблокированные
Сообщений: 81
Статус: Offline
| У меня игра не вылетела но просто объект не убрался Добавлено (01.01.2012, 16:50) --------------------------------------------- В чём ошибка?
Code 0001: wait 100 ms
:NONAME_4 00D6: if 0ADC: test_cheat "B" 004D: jump_if_false @NONAME_4 0247: load_model 1636 038B: load_requested_models 00A0: store_actor $PLAYER_ACTOR position_to 1@ 2@ 3@ 0107: 0@ = create_object 1636 at 1@ 2@ 3@ 0392: make_object 0@ moveable 1 01BB: store_object 0@ position_to 4@ 5@ 6@ 0004: $TIME = 5000 014E: set_timer_to $TIME type 1 // global_variable 0002: jump @NONAME_101
:NONAME_101 0001: wait 0 ms 00D6: if 8028: not $TIME >= 1 004D: jump_if_false @NONAME_101 0108: destroy_object 0@ 0001: wait 1000 ms 020C: create_explosion_with_radius 0 at 4@ 5@ 6@ 0948: create_explosion_at 4@ 5@ 6@ type 1 camera_shake 1 0001: wait 900 ms 020C: create_explosion_with_radius 2 at 4@ 5@ 6@ 0948: create_explosion_at 4@ 5@ 6@ type 3 camera_shake 1 0001: wait 900 ms 020C: create_explosion_with_radius 4 at 4@ 5@ 6@ 0948: create_explosion_at 4@ 5@ 6@ type 5 camera_shake 1 0001: wait 900 ms 020C: create_explosion_with_radius 6 at 4@ 5@ 6@ 0948: create_explosion_at 4@ 5@ 6@ type 7 camera_shake 1 0001: wait 900 ms 020C: create_explosion_with_radius 8 at 4@ 5@ 6@ 0948: create_explosion_at 4@ 5@ 6@ type 9 camera_shake 1 0001: wait 900 ms 020C: create_explosion_with_radius 6 at 4@ 5@ 6@ 0948: create_explosion_at 4@ 5@ 6@ type 10 camera_shake 1 0001: wait 4000 ms 0002: jump @NONAME_4 Игра не запускаетсяДобавлено (01.01.2012, 17:20) --------------------------------------------- Хотя не надо уже, нашёл ошибку и всё работает
|
|
| |
DK22Pac | Дата: Воскресенье, 01.01.2012, 23:23 | Сообщение # 1118 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Вот столкнулся с такой проблемой. Допустим, надо повернуть матрицу на сколько-то градусов. Не выставить значение угла, а именно повернуть. Как быть? Вариант "записать углы -> добавить -> перезаписать" в 3D не проходит.
|
|
| |
Den_spb | Дата: Понедельник, 02.01.2012, 00:13 | Сообщение # 1119 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Попробуй воспользоваться пересчётом координат: М результирующая = М углов доворота * М исходная Описанный тобой метод тоже по идее должен работать - возможно что-то неправильно сделал.
|
|
| |
Аксиома | Дата: Понедельник, 02.01.2012, 11:09 | Сообщение # 1120 |
Группа: Заблокированные
Сообщений: 81
Статус: Offline
| Вот есть хорошие звуки из Quake а вот при каком действий в моде их вписать не знаю
А можно ли сделать что если игрок убьёт 10 человек любых то будет звук проигрываться
|
|
| |
444andrei444 | Дата: Понедельник, 02.01.2012, 11:55 | Сообщение # 1121 |
Группа: Проверенные
Сообщений: 15
Статус: Offline
| Можно. Считывай значение убитых людей с адреса памяти(или стата) при старте скрипта(в переменную 1@ например), затем циклом считывай значение адреса памяти в другую переменную(напрмер 2@) и вычитай 3@ = 2@ - 1@(нужно использовать опкод клео3 или клео 4) Затем проверяй равно ли значение 10 3@ == 10 Если нет снова записывай значение в переменную 2@, если да, то воспроизводи музыку.
|
|
| |
Аксиома | Дата: Понедельник, 02.01.2012, 12:43 | Сообщение # 1122 |
Группа: Заблокированные
Сообщений: 81
Статус: Offline
| 444andrei444, Я ещё в адресах памяти слабо понимаю и не понял что ты сказал, по легче скажи
|
|
| |
444andrei444 | Дата: Понедельник, 02.01.2012, 13:46 | Сообщение # 1123 |
Группа: Проверенные
Сообщений: 15
Статус: Offline
| Забыл вот сам адресок, если что вечером готовый код кину 12029956 Code 0A8D: 2@ = read_memory 12029956 size 1 virtual_protect 0 Добавлено (02.01.2012, 13:46) --------------------------------------------- в этом адресе хранится общее число убийств
|
|
| |
Аксиома | Дата: Понедельник, 02.01.2012, 17:10 | Сообщение # 1124 |
Группа: Заблокированные
Сообщений: 81
Статус: Offline
| Мне интересно знать если использовать такой тип проверки оружия
Code 0470: 0@ = actor $PLAYER_ACTOR current_weapon if 0@ = 38
Для этого нужно загружать модель оружия?Добавлено (02.01.2012, 17:10) --------------------------------------------- И ещё вопрос Как узнать координаты частей тела Игрока если надо прицепить эффект
|
|
| |
Den_spb | Дата: Понедельник, 02.01.2012, 17:43 | Сообщение # 1125 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (Аксиома) Для этого нужно загружать модель оружия? Не надо. А проверка должна быть написана с двумя знаками равно: 0@ == 38
|
|
| |