You are not logged in.
Глобальные переменные типа $30, $56?
Нет, я использовал адреса, в которых хранятся ИД-номера моделей вагонов 9-го типа поезда. Этот поезд использовался только в одной стандартной миссии и состоял из одного вагона, остальные 14 ячеек пустовали без дела.
Возможно, стоит попробовать.
Во всех участках кода, которые выполняются циклически, должно быть ожидание.
Last edited by Den_spb (25-11-2009 15:54)
Offline
Нет, ошибка сохранилась, а ожидание, пусть и небольшое, я добавила - тоже самое. Тяжёлый случай
Не из-за проигрывания ли музыки дело? Уж больно часто на эти опкоды жалуются. Я уж не знаю, к чему цепляться.
Если удалить строки:
...никаких вылетов и прочего не будет!
Так что, опкоды виноваты, или мои руки?
P.S: Неужели остаётся только main?
Last edited by Ammy (25-11-2009 20:15)
Offline
у меня духу не хватило прочитать все, что тут написали. Поэтому буду отвечать по картинкам, которые я тут увидел.
Лучше сразу же забыть про глобальные клео-переменные и mp3. Они глючат.
Взаимодействие между скриптами:
Второй скрипт пишет значение в локальную переменную первого скрипта (без второго скрипта первый никогда не завершится).
Скрипт1:
{$CLEO} 03A4: name_thread 'script1' while 0@ == 0 wait 250 end 03E5: show_text_box 'HELP101' // Respect can be earned be passing certain missions, killing rival gangs members, gaining territory and tagging. 0a93:
Скрипт2:
{$CLEO} //получиь адрес переменной 0@ скрипта с именнем 'script1' wait 250 0@ = 0 //var number 0AAA: 1@ = thread 'script1' pointer 0A8E: 2@ = 1@ + 0xDC // mission Flag 0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0 if 2@ == 1 then 1@ = 0x00A48960 // mission locals else 1@ += 0x3C end 0@ *= 4 005A: 1@ += 0@ // address of the local variable //записать по полученому адресу число 0A8C: write_memory 1@ size 4 value 1 virtual_protect 0 0a93:
Перед компиляцией проверьте SASCM.ini на предмет правильности опкода 0AAA. У меня он неправильно был проинициализирован. Должно быть так:
0AAA=2,%2d% = thread %1s% pointer
После изменения перезапустите СБ.
Если не хватает локальных cleo переменных, буферизируйте их где-нибудь.
0AB1: call_scm_func @__LabelToOffset 1 @buffer 0@ //в 0@ указатель на буфер в 128 байт ... :__LabelToOffset if 0@ == 0 then 0AB2: ret 1 0 end 0A9F: 1@ = current_thread_pointer 1@ += 0x10 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 // baseIP 0062: 1@ -= 0@ // label address 0AB2: ret 1 1@ :buffer hex 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 end
Совет:
Юзайте плагин scmlog.cleo. В файле scmlog.log вся инфа о том, на каком опкоде произошел вылет.
Так что, опкоды виноваты, или мои руки? P.S: Неужели остаётся только main?
Виноваты кривые опкоды. Поэтому нужны прямые руки чтобы все воркало.
Offline
Alien, лог проверяла, обрыв значится на загрузке *.mp3 (00000065: 0AAC). Метод, предложенный тобою, является для меня слишком сложным в данное время, плюс, я думаю, использоваться будет не одна такая переменная, а их (общее) количество скажется на общем объёме кода, и при моих практически нулевых познаниях в работе с памятью, возникнут, конечно же, трудности. В итоге ни к чему хорошему это привести не должно. Я воспользуюсь оригинальным мэйном, спасибо.
по-моему, это ГС!!!
Объясните, о чём речь? Если по поводу изображения, то смысла вами явно воспринято не было (извиняюсь за юмор), сразу кинулись в чём-то кого-то обвинять (если я правильно поняла). Если в вашем случае работает, - это значит, что у других должно работать при любых условиях корректно?
на счёт кода: ошибок нет
подчёркиваю, у меня mp3 НИ РАЗУ не скосячило!!
Никто и не сомневается, что у вас прямые руки.
Виноваты кривые опкоды. Поэтому нужны прямые руки чтобы все воркало.
А вот, собственно, коды. Проверьте, если у вас есть сомнения, и если заработает звук - памятник поставлю!
[---]
// 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 'ZOMBIES' wait 30 09BA: show_entered_zone_name 0 09B9: show_entered_car_name 0 01F0: set_max_wanted_level_to 0 0111: set_wasted_busted_check 0 03DE: set_pedestrians_density_multiplier_to 0.0 01EB: set_traffic_density_multiplier_to 0.0 00C0: set_current_time_hours_to 0 minutes_to 0 06D0: enable_emergency_traffic 0 06D7: enable_train_traffic 0 0923: enable_air_traffic 0 096A: enable_flying_helis 0 099E: enable_police_patrols 0 06C8: enable_riot 1 0924: enable_screen_darkness 1 with_value -1 0826: enable_hud 0 01B6: set_weather 8 01B7: release_weather 01B5: force_weather 8 0AB3: var 0 = 1 gosub @LOAD wait 50 ms var 7@ : int = 0 8@ : array 10 of actor end while true wait 250 for 7@ = 0 to 9 if 8@(7@,10i) == 0 then 0208: 0@ = random_float_in_ranges -15.0 15.0 04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0@ 60.0 0.0 02CE: 3@ = ground_z_at 1@ 2@ 50.0 009A: 8@[7@] = create_actor_pedtype 7 model #WMYBU at 1@ 2@ 3@ 0223: set_actor 8@(7@,10i) health_to 1000 02AB: set_actor 8@(7@,10i) immunities BP 0 FP 1 EP 0 CP 0 MP 0 0446: set_actor 8@(7@,10i) immune_to_headshots 1 060B: set_actor 8@(7@,10i) decision_maker_to 32 0332: set_actor 8@(7@,10i) bleeding 1 0489: set_actor 8@(7@,10i) muted 1 04D8: set_actor 8@(7@,10i) drowns_in_water 0 0946: set_actor 8@(7@,10i) actions_uninterupted_by_weapon_fire 1 03FE: set_actor 8@(7@,10i) money 0 0245: set_actor 8@(7@,10i) walk_style_to "DRUNKMAN" wait 10 ms if 056D: actor 8@(7@,10i) defined then 04C4: store_coords_to 4@ 5@ 6@ from_actor $PLAYER_ACTOR with_offset 0.0 0.9 0.0 05D3: AS_actor 8@(7@,10i) goto_point 4@ 5@ 6@ mode 4 99999 ms end end if actor.Dead(8@(7@,10i)) then actor.DestroyWithFade(8@(7@,10i)) 8@(7@,10i) = 0 end if 056D: actor 8@(7@,10i) defined then if 80F2: not actor $PLAYER_ACTOR near_actor 8@(7@,10i) radius 60.0 80.0 0 then actor.DestroyInstantly(8@(7@,10i)) 8@(7@,10i) = 0 end end if 056D: actor 8@(7@,10i) defined then if 00F2: actor $PLAYER_ACTOR near_actor 8@(7@,10i) radius 10.0 10.0 0 then 05E2: AS_actor 8@(7@,10i) kill_actor $PLAYER_ACTOR end end end end :LOAD wait 30 ms model.Load(#WMYBU) 038B: load_requested_models if model.Available(#WMYBU) jf @LOAD return 0A93: end_custom_thread
Второй:
{$VERSION 3.1.0027} {$CLEO .cs} //------------- MAIN --------------- thread 'SOUNDS' wait 300 ms :SOUNDS wait 0 :SOUNDS2 wait 0 0AB4: 0@ = var 0 if player.Defined($PLAYER_CHAR) then if 0@ == 1 then 0AAC: 0@ = load_mp3 "CLEO\AUDIO\01.mp3" 0AAD: set_mp3 0@ perform_action 1 wait 100000 ms 0AAD: set_mp3 0@ perform_action 0 0AAE: release_mp3 0@ end end jump @SOUNDS2 0A93: end_custom_thread
Last edited by Ammy (25-11-2009 20:47)
Offline
Никто и не сомневается, что у вас прямые руки.
а я сомневаюсь.:D
слушай получается, если миссия, то именно этот адрес используем 0x00A48960
в смысле по смещению 0x3C не записываются что ли данные в миссии?
Не, для миссий свой буфер. По смещению 0x3C локальные переменные для обычных потоков (32 штуки + 2 таймера). А по 0x00A48960 1024 переменные для миссий.
А вообще, это Seemann'овский код. Я его выдрал из хэлпа.=) А уж кому лучше него знать скриптовый движок.
Offline
Обновила сообщение предыдущее, выложила злосчастные коды. Остальные условия, связанные с актёрами, удалила, оставив только самое необходимое - генерацию, проверки, и удаление.
Alien, а о что за ГС?
Last edited by Ammy (25-11-2009 20:52)
Offline
И вы извините, если у меня больной юмор выработался. Картинка значила то, что часть моего кода, отвечающая за mp3 - жук. Музыка, перекодированная в 192, длительность около 3 минут. Это амбиент, который должен присутствовать в игре. Скажем так, для атмосферы.
Один поток устанавливает значение, которое другой поток подхватывает, и если значение соответствует заложенному ранее mp3, то, как бы, начинается проигрывание. Мне не удалось справиться с этой задачей, придётся переносить в мэйн (с $CLEO установкой комплировать), и использовать глобальные переменные под эти цели.
P.S: http://smages.com/i/3a/72/3a72283674c90 … 498799.png
[---]
Одного понять не могу: судя по логу данные в переменную var 0 записываютcя, вторым потоком данные считываются, так какого же чёрта всё останавливается на загрузке mp3? Пробовала, кстати, создавать поток внутри основного потока, меняя расширение второго потока на s, и тем самым передать в него параметры, но это, как ни странно, тоже давало сбои, аналогичная картина вырисовывалась. Даже если бы и заработало, то о динамической передаче речи бы в дальнейшем не заходило - не создавать же несколько раз один и тот же поток??
P.S: жаль, что всё это вынуждает отказаться от отдельных CLEO потоков в отдельных файлах.
Вынесла для себя следующее:
1. Всё то, что касается актёров (зомби) и взаимодействия с ними - положить в мэйне, включая посох с бензопилами, анимации (взаимодействующие скрипты) отрывания руками головы, заталкивание дистанционной бомбы им в горло, и прочее.
2. Остальные, не касающиеся актёров вещи, такие, как мертвецкий патруль вынести в *.cs
3. Миссии заложить в *.cm
В основном потоке, который я привела, используются лишь части, отвечающие за генерацию, удаление из памяти, а остальные части находятся в потоках, который создаёт этот основной скрипт. Они не могли повлиять на проигрывание музыки, в этом я уже разобралась.
P.S: скорее бы начать писать миссии, а не заниматься непосильными для себя самой вещами. Считаю эти клео переменные недостатком, как и глобальную область видимости в целом там. Огорчает такое.
Last edited by Ammy (25-11-2009 21:38)
Offline
ну не знаю. У меня лично все отлично работает. Единственный минус - вылет при выходе из игры. Но это давно известный баг....
Может проблема действительно в 01.mp3? Что если попробовать любой другой файл из папки C:\Music.=) Что-то мне сомнительно, что in-game mp3-плеер перехватывает все кодеки установленные в системе (и что он вообще их использует).
Писать в майне уже давно неактуально. Потребитель сильно подсел на технологию под названием CLEO.
Offline
Согласна, что актуальность мэйна с каждым днём всё менее-менее
Файлы пробовала разные, использовала и короткие секундные sfx's, рекодировала самостоятельно - нет положительной отдачи. Версия SA: 1.0, качала в лицензии с торрентов, целостность файлов 100%, про системные кодеки ничего сказать не могу, музыка в плеерах проигрывается нормально.
P.S: у вас здесь на форуме хак блогов самописный? Сделала себе один: http://sannybuilder.com/forums/blogs.php?bid=1332
Last edited by Ammy (25-11-2009 22:14)
Offline
Проблема решилась сменой битрейта в аудиофайле! :wow:
Всех благодарю и одновременно извиняюсь за всё, простите, мозгоёбство. Иного выражения я не нахожу.
[---]
Остался один важный вопрос: каким образом правильно настроить взаимодействие с постоянно изменяющимся массивом актёров в первом основном потоке? Метод var 1 = 8@(7@, 10i) в цикле записывает значения актёров (одного), работает, а как записать всех? Скажем, чтобы переменная (массив) была динамической, и к ней можно было обращаться точно так же, как и в первом потоке.
Вырезка из основного потока:
Выражение var 1 = 8@, как мне показалось, вообще безрезультатно.
Last edited by Ammy (25-11-2009 23:01)
Offline
смысла выносить 2 реализации с одинаковым интерфейсом в разные потоки нет. Подумай, может можно объединить все в один поток? Если мало 32 переменных, можно оформить в виде custom mission. Будет 1024.
у вас здесь на форуме хак блогов самописный?
Я про него даже не знал.:wow: А для чего он?
Offline
Alien, посмотрел твои скрипты взаимодействия. Почему ты очень часто в конце своих скриптов пишешь 0a93: ?
Offline
посмотрел твои скрипты взаимодействия. Почему ты очень часто в конце своих скриптов пишешь 0a93: ?
Какие скрипты? Я тут ничего не выкладывала, кроме базы. На компе моём успел пошарить?
Опкод на всякий случай, к месту стоит, а сам скрипт зациклен.
смысла выносить 2 реализации с одинаковым интерфейсом в разные потоки нет. Подумай, может можно объединить все в один поток? Если мало 32 переменных, можно оформить в виде custom mission. Будет 1024.
Именно в кол-ве переменных и их глобальности стояли проблемы.
А чем CM лучше S? Оба потоками являются, в один параметры передавать можно. Или нет? Во втором случае кол-во локальных переменных до тыщи возрастёт?
Я про него даже не знал. А для чего он?
Аааа, вынос мозга, ты издеваешься!:wow: Это што бы песать, а читали патом
Last edited by Ammy (27-11-2009 01:36)
Offline
А чем CM лучше S? Оба потоками являются, в один параметры передавать можно. Или нет? Во втором случае кол-во локальных переменных до тыщи возрастёт?
Нет, cs - это поток, а cm - это миссия. Потоков в текущий момент времени может быть запущено несколько, а миссия только одна.
Offline
Т.е. Alien писал, что нужно всё объединить в *.cm, которую нужно вызвать из отдельного *.cs потока командой start_mission 'same', и в этом случае будет 1024 локальных переменных в "потоке" миссии? Значит, миссия - это 1024@, а поток - 36@? Заранее извиняюсь за эти вопросы, в официальной справке было написано, что можно ограничения обойти, а вот как их обойти - написано не написано.
Last edited by Ammy (27-11-2009 09:05)
Offline
0A94: start_custom_mission "missions\CustomMission1"
В потоке 32 переменные (0@ - 31@) + 2 таймера: 32@, 33@. Насколько знаю, без переделки клео, обойти ограничение переменных нельзя.
Last edited by Den_spb (27-11-2009 09:56)
Offline
Привет всем! У меня вопрос такой, не относящийся к скриптингу: есть модели актёров, один Mesh, текстуры, но без скилета. Есть скилет SA. Открываю модель SA, удаляю Mesh, подгоняю свою модель под стандартный скелет, сохраняю, но не могу экспортировать. Получается, что нужно скилет к мешу приделывать? Проще никак нельзя? :wow:
Offline
@Ammy - Если ты хочешь конвертировать персов из других игр, то можешь попробывать способ описанный здесь. Ну а если ты собственноручно создаешь персов, то придется ручками пилеплять к скелету.
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline