#26 25-11-2009 15:49

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

3Doomer wrote:

так что лучше писать в мейн))

Вот, вероятно, лучшее решение, если не выйдет по средствам глобальных CLEO переменных.

Offline

#27 25-11-2009 15:53

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Массивы и актёры

Глобальные переменные типа $30, $56?

Нет, я использовал адреса, в которых хранятся ИД-номера моделей вагонов 9-го типа поезда. Этот поезд использовался только в одной стандартной миссии и состоял из одного вагона, остальные 14 ячеек пустовали без дела.

Возможно, стоит попробовать.

Во всех участках кода, которые выполняются циклически, должно быть ожидание.

Last edited by Den_spb (25-11-2009 15:54)

Offline

#28 25-11-2009 16:57

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

Нет, ошибка сохранилась, а ожидание, пусть и небольшое, я добавила - тоже самое. Тяжёлый случай grin
Не из-за проигрывания ли музыки дело? Уж больно часто на эти опкоды жалуются. Я уж не знаю, к чему цепляться.

Если удалить строки:

7d7226c7df31d1a0e0f135e6ca5d3afd.png

...никаких вылетов и прочего не будет!

Так что, опкоды виноваты, или мои руки?

P.S: Неужели остаётся только main?

Last edited by Ammy (25-11-2009 20:15)

Offline

#29 25-11-2009 18:58

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Массивы и актёры

по-моему, это ГС!!!

на счёт кода: ошибок нет


GIMS developer

Offline

#30 25-11-2009 19:02

Alien
Registered: 12-10-2008
Posts: 564

Re: Массивы и актёры

у меня духу не хватило прочитать все, что тут написали. Поэтому буду отвечать по картинкам, которые я тут увидел.
Лучше сразу же забыть про глобальные клео-переменные и 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

#31 25-11-2009 20:01

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Массивы и актёры

подчёркиваю, у меня mp3 НИ РАЗУ не скосячило!!


GIMS developer

Offline

#32 25-11-2009 20:16

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Массивы и актёры

@Alien

слушай получается, если миссия, то именно этот адрес используем 0x00A48960
в смысле по смещению 0x3C не записываются что ли данные в миссии?


I know everything and nothing...

Offline

#33 25-11-2009 20:27

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

Alien, лог проверяла, обрыв значится на загрузке *.mp3 (00000065: 0AAC). Метод, предложенный тобою, является для меня слишком сложным в данное время, плюс, я думаю, использоваться будет не одна такая переменная, а их (общее) количество скажется на общем объёме кода, и при моих практически нулевых познаниях в работе с памятью, возникнут, конечно же, трудности. В итоге ни к чему хорошему это привести не должно. Я воспользуюсь оригинальным мэйном, спасибо.

3Doomer wrote:

по-моему, это ГС!!!

Объясните, о чём речь? Если по поводу изображения, то смысла вами явно воспринято не было (извиняюсь за юмор), сразу кинулись в чём-то кого-то обвинять (если я правильно поняла). Если в вашем случае работает, - это значит, что у других должно работать при любых условиях корректно?

3Doomer wrote:

на счёт кода: ошибок нет

3Doomer wrote:

подчёркиваю, у меня mp3 НИ РАЗУ не скосячило!!

Никто и не сомневается, что у вас прямые руки.

Alien wrote:

Виноваты кривые опкоды. Поэтому нужны прямые руки чтобы все воркало.

А вот, собственно, коды. Проверьте, если у вас есть сомнения, и если заработает звук - памятник поставлю!

[---]

// 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

#34 25-11-2009 20:45

Alien
Registered: 12-10-2008
Posts: 564

Re: Массивы и актёры

Ammy wrote:

Никто и не сомневается, что у вас прямые руки.

а я сомневаюсь.:D

слушай получается, если миссия, то именно этот адрес используем 0x00A48960
в смысле по смещению 0x3C не записываются что ли данные в миссии?

Не, для миссий свой буфер. По смещению 0x3C локальные переменные для обычных потоков (32 штуки + 2 таймера). А по 0x00A48960 1024 переменные для миссий.
А вообще, это Seemann'овский код. Я его выдрал из хэлпа.=) А уж кому лучше него знать скриптовый движок.

Offline

#35 25-11-2009 20:48

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

Обновила сообщение предыдущее, выложила злосчастные коды. Остальные условия, связанные с актёрами, удалила, оставив только самое необходимое - генерацию, проверки, и удаление.
Alien, а о что за ГС?

Last edited by Ammy (25-11-2009 20:52)

Offline

#36 25-11-2009 20:52

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Массивы и актёры

Ammy: это очень плохой человек...похоже, я ошибаюсь, извини:)
а у тебя эта мп3шка лежит там где она прописана в скрипте? проигрывателем играется?

Alien: нечего сказать-молчи


GIMS developer

Offline

#37 25-11-2009 21:10

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

И вы извините, если у меня больной юмор выработался. Картинка значила то, что часть моего кода, отвечающая за mp3 - жук. Музыка, перекодированная в 192, длительность около 3 минут. Это амбиент, который должен присутствовать в игре. Скажем так, для атмосферы.

Один поток устанавливает значение, которое другой поток подхватывает, и если значение соответствует заложенному ранее mp3, то, как бы, начинается проигрывание. Мне не удалось справиться с этой задачей, придётся переносить в мэйн (с $CLEO установкой комплировать), и использовать глобальные переменные под эти цели.

P.S: http://smages.com/i/3a/72/3a72283674c90 … 498799.png

[---]

Одного понять не могу: судя по логу данные в переменную var 0 записываютcя, вторым потоком данные считываются, так какого же чёрта всё останавливается на загрузке mp3? Пробовала, кстати, создавать поток внутри основного потока, меняя расширение второго потока на s, и тем самым передать в него параметры, но это, как ни странно, тоже давало сбои, аналогичная картина вырисовывалась. Даже если бы и заработало, то о динамической передаче речи бы в дальнейшем не заходило - не создавать же несколько раз один и тот же поток?? smile

P.S: жаль, что всё это вынуждает отказаться от отдельных CLEO потоков в отдельных файлах.

Вынесла для себя следующее:

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

2. Остальные, не касающиеся актёров вещи, такие, как мертвецкий патруль вынести в *.cs
3. Миссии заложить в *.cm

В основном потоке, который я привела, используются лишь части, отвечающие за генерацию, удаление из памяти, а остальные части находятся в потоках, который создаёт этот основной скрипт. Они не могли повлиять на проигрывание музыки, в этом я уже разобралась.

P.S: скорее бы начать писать миссии, а не заниматься непосильными для себя самой вещами. Считаю эти клео переменные недостатком, как и глобальную область видимости в целом там. Огорчает такое.

Last edited by Ammy (25-11-2009 21:38)

Offline

#38 25-11-2009 21:48

Alien
Registered: 12-10-2008
Posts: 564

Re: Массивы и актёры

ну не знаю. У меня лично все отлично работает. Единственный минус - вылет при выходе из игры. Но это давно известный баг....
Может проблема действительно в 01.mp3? Что если попробовать любой другой файл из папки C:\Music.=) Что-то мне сомнительно, что in-game mp3-плеер перехватывает все кодеки установленные в системе (и что он вообще их использует).

Писать в майне уже давно неактуально. Потребитель сильно подсел на технологию под названием CLEO.

Offline

#39 25-11-2009 22:07

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

Согласна, что актуальность мэйна с каждым днём всё менее-менее smile

Файлы пробовала разные, использовала и короткие секундные 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

#40 25-11-2009 22:51

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

Проблема решилась сменой битрейта в аудиофайле! :wow:
Всех благодарю и одновременно извиняюсь за всё, простите, мозгоёбство. Иного выражения я не нахожу.

[---]

Остался один важный вопрос: каким образом правильно настроить взаимодействие с постоянно изменяющимся массивом актёров в первом основном потоке? Метод var 1 = 8@(7@, 10i) в цикле записывает значения актёров (одного), работает, а как записать всех? Скажем, чтобы переменная (массив) была динамической, и к ней можно было обращаться точно так же, как и в первом потоке.

Вырезка из основного потока:
725f02cf21a69d07bd79efe0b7af30f6.png

Выражение var 1 = 8@, как мне показалось, вообще безрезультатно.

Last edited by Ammy (25-11-2009 23:01)

Offline

#41 26-11-2009 12:48

Alien
Registered: 12-10-2008
Posts: 564

Re: Массивы и актёры

смысла выносить 2 реализации с одинаковым интерфейсом в разные потоки нет. Подумай, может можно объединить все в один поток? Если мало 32 переменных, можно оформить в виде custom mission. Будет 1024.

у вас здесь на форуме хак блогов самописный?

Я про него даже не знал.:wow: А для чего он?

Offline

#42 26-11-2009 13:38

GTASA
Registered: 13-09-2008
Posts: 476

Re: Массивы и актёры

Alien, посмотрел твои скрипты взаимодействия. Почему ты очень часто в конце своих скриптов пишешь 0a93: ?

Offline

#43 26-11-2009 16:49

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Массивы и актёры

Это опкод завершения скрипта

0A93: end_custom_thread

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

Offline

#44 27-11-2009 01:33

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

GTASA wrote:

посмотрел твои скрипты взаимодействия. Почему ты очень часто в конце своих скриптов пишешь 0a93: ?

Какие скрипты? Я тут ничего не выкладывала, кроме базы. На компе моём успел пошарить? smile
Опкод на всякий случай, к месту стоит, а сам скрипт зациклен.

Alien wrote:

смысла выносить 2 реализации с одинаковым интерфейсом в разные потоки нет. Подумай, может можно объединить все в один поток? Если мало 32 переменных, можно оформить в виде custom mission. Будет 1024.

Именно в кол-ве переменных и их глобальности стояли проблемы.
А чем CM лучше S? Оба потоками являются, в один параметры передавать можно. Или нет? Во втором случае кол-во локальных переменных до тыщи возрастёт?

Alien wrote:

Я про него даже не знал. А для чего он?

Аааа, вынос мозга, ты издеваешься!:wow: Это што бы песать, а читали патом grincrazy

Last edited by Ammy (27-11-2009 01:36)

Offline

#45 27-11-2009 07:03

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Массивы и актёры

Ammy wrote:

А чем CM лучше S? Оба потоками являются, в один параметры передавать можно. Или нет? Во втором случае кол-во локальных переменных до тыщи возрастёт?

Нет, cs - это поток, а cm - это миссия. Потоков в текущий момент времени может быть запущено несколько, а миссия только одна.

Offline

#46 27-11-2009 09:04

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

Т.е. Alien писал, что нужно всё объединить в *.cm, которую нужно вызвать из отдельного *.cs потока командой start_mission 'same', и в этом случае будет 1024 локальных переменных в "потоке" миссии? Значит, миссия - это 1024@, а поток - 36@? Заранее извиняюсь за эти вопросы, в официальной справке было написано, что можно ограничения обойти, а вот как их обойти - написано не написано. grin

Last edited by Ammy (27-11-2009 09:05)

Offline

#47 27-11-2009 09:54

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Массивы и актёры

0A94: start_custom_mission "missions\CustomMission1"

В потоке 32 переменные (0@ - 31@) + 2 таймера: 32@, 33@. Насколько знаю, без переделки клео, обойти ограничение переменных нельзя.

Last edited by Den_spb (27-11-2009 09:56)

Offline

#48 08-12-2009 12:19

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

Привет всем! У меня вопрос такой, не относящийся к скриптингу: есть модели актёров, один Mesh, текстуры, но без скилета. Есть скилет SA. Открываю модель SA, удаляю Mesh, подгоняю свою модель под стандартный скелет, сохраняю, но не могу экспортировать. Получается, что нужно скилет к мешу приделывать? Проще никак нельзя? :wow:

Offline

#49 08-12-2009 14:46

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Массивы и актёры

@Ammy - Если ты хочешь конвертировать персов из других игр, то можешь попробывать способ описанный здесь. Ну а если ты собственноручно создаешь персов, то придется ручками пилеплять к скелету.


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#50 10-12-2009 03:56

Ammy
Registered: 16-11-2009
Posts: 32
Website

Re: Массивы и актёры

Скажем, что так идеально, как в этой справке, выполнить слияние не выходит. Обязательно остаётся какой-то непоправимый косяк, лишняя выпуклость модели.

Offline

Board footer

Powered by FluxBB