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