#26 Re: Вопросы по скриптингу » Массивы и актёры » 17-11-2009 15:40

Чуть-чуть ошиблись, а правильнее будет у Вас вот так:

b2f58018d41a80e8266527c111bc066d.png


Ведь проверка тоже требует перебора, а без него (перебора) никуда бы они (актёры) не выгрузились, соответственно и не появились бы новые smile

Спасибо Вам огромное! wink

#27 Re: Вопросы по скриптингу » Массивы и актёры » 17-11-2009 14:45

Alien, несколько вопросов:

1. Почему цикл FOR в Вашем примере не имеет заключения (END)?
2. Пробовала пример в действии, и заметила, что если перед циклом не поставить произвольной метки, на которую уже после цикла установить прыжок, то зомби исчезать не будут. Я имею ввиду:

thread 'ZOMBIES'
wait 30 ms

:ZOMBIES

while true

....
.........
....

end

jump @ZOMBIES

end_thread

3. Помимо проверки 'смерти' и высвобождения памяти, можно ли корректно в этом же цикле использовать другие проверки, но уже перед/после имеющейся?

//если актер умер, удалить его и обнулить переменную

        if
            actor.Dead($DEAD($count,10i))
        then
            actor.DestroyWithFade($DEAD($count,10i))
            $DEAD($count,10i) = 0
        end

        // если зомби вне радиуса, уничтожить его (пример)
       
        if
            80F2: not actor $PLAYER_ACTOR near_actor $DEAD($count,10i) radius 40.0 80.0 0
        then
            actor.DestroyWithFade($DEAD($count,10i))
            $DEAD($count,10i) = 0
        end

----------

И не забывай, что индексация массива всегда начинается с 0, а не с 1.

Да, моя ошибка. Дело в том, что в других языках привыкла не использовать нулевой ключ. blush

mfisto wrote:

потому что ты $count просто вычел 1 = 9

:wow:

mfisto wrote:

Надеюсь объяснил.

Да, поняла свои ошибки. Всё никак синтаксис написания не уложится, и путаюсь постоянно..

#28 Re: Вопросы по скриптингу » Массивы и актёры » 17-11-2009 12:49

Сразу, конечно, использовать я ничего не буду, а постараюсь вникнуть как можно лучше в то, что вы (mfisto, Alien) мне написали. Чуть позже, если возникнут вопросы, я оставлю сообщение.. smile

Спасибо вам! smile

#29 Re: Вопросы по скриптингу » Массивы и актёры » 17-11-2009 10:38

Возникли проблемы с проверкой и удалением мёртвых актёров из памяти. Кто-нибудь поможет проанализировать код? В ряду своего малого опыта работы в SCM скриптинге, мне пришлось отказаться от CLEO, и разделить один поток на два, а затем перенести в main.scm. Очень жаль..

Вот скрипт сам скрипт (два потока):

:ZOMBIES 
thread 'ZOMBIES'
0001: wait 30 ms 

var 
$main  : int = 0
$cnt   : int = 0
$count : int = 0
$DEAD  : array 30 of actor 
end

:ZOMBIES_START
wait 50 ms
while $count < 10
$count += 1
0208: $RAND = random_float_in_ranges -5.0 5.0 
04C4: store_coords_to $X $Y $Z from_actor $PLAYER_ACTOR with_offset $RAND 60.0 0.0 
02CE: $Z = ground_z_at $X $Y 50.0 
009A: $DEAD[$count] = create_actor_pedtype 7 model #WMYBU at $X $Y $Z 
0223: set_actor $DEAD[$count] health_to 1000000 
02AB: set_actor $DEAD[$count] immunities BP 0 FP 1 EP 0 CP 0 MP 0 
0446: set_actor $DEAD[$count] immune_to_headshots 1 
07DD: set_actor $DEAD[$count] temper_to 100 // see pedstats.dat 
0332: set_actor $DEAD[$count] bleeding 1
0489: set_actor $DEAD[$count] muted 1  
0245: set_actor $DEAD[$count] walk_style_to "DRUNKMAN" 
04D8: set_actor $DEAD[$count] drowns_in_water 0 
0946: set_actor $DEAD[$count] actions_uninterupted_by_weapon_fire 1 
0619: enable_actor $DEAD[$count] collision_detection 1 
02E0:   actor $DEAD[$count] aggressive
05E2: AS_actor $DEAD[$count] kill_actor $PLAYER_ACTOR
wait 1000 ms
end

$main = 1

:ZOMBIES_END
wait 250 ms

if $count < 10
then
jump @ZOMBIES_START
end

jump @ZOMBIES_END
end_thread

// --------------

:CONDITION 
thread 'CONDITION'
wait 30 ms

if $main == 1
then
    jump @CONDITION_2
end

jump @CONDITION


:CONDITION_2
wait 50 ms

if $cnt == 10
then
$cnt = 0
end

$cnt += 1 

if
0118: actor $DEAD[$cnt] dead 
then
wait 200 ms
034F: destroy_actor_with_fade $DEAD[$cnt]
$count -= 1
end

jump @CONDITION_2

end_thread

Проблема: создаются актёры, переваливающие за установленную плотность в 10 человек. Они должны появляться, они должны умирать, и удаляться из памяти, когда актёр их уничтожает. Сейчас же, если использовать в данном слое :ZOMBIES_END проверку и прыжок на слой, в котором создаются зомби, они (актёры / зомби) начинают беспорядочно сыпаться. Если же эту проверку с переходом убрать, то всё будет нормально, зомби будут исчезать, когда ГГ их убивает, однако новые на замену старым появляться не будут.

Вопросы:
1. Можно ли упростить код :CONDITION части, или вовсе вывести всё в единый поток, чтобы в дальнейшем использовать один *.cs файл?
2. Опкодов для работы с массивами (на замену высокоуровневым функциям), полагаю, совcем нету?

P.S: Глаза уже сломала, запутавшись в собственном коде. Прошу помощи.

#30 Re: Вопросы по скриптингу » Массивы и актёры » 16-11-2009 14:12

Важные (мелкие) детали, многое проясняют! На деле всё корректно и работоспособно, уже проверила. Тему обязательно прочитаю, много полезной информации содержит.. Большое Вам спасибо!

#31 Re: Вопросы по скриптингу » Массивы и актёры » 16-11-2009 13:55

Благодарю Вас! И ещё один вопрос для более полного понимания: где можно посмотреть полный список имеющихся типов (кроме общедоступных) под разные, скажем так, задачи? Честно, не знала, и даже представить не могла, что есть тип, именуемый как actor.. Спасибо ещё раз!  smile

#32 Вопросы по скриптингу » Массивы и актёры » 16-11-2009 13:43

Ammy
Replies: 63

Здравствуйте! Скажите, пожалуйста, можно ли создать актёра, и хранить его данные в массиве под определённым ключём, по которому можно в дальнейшем обращаться, например, для проверки чего-либо?

Допустим, вот так:

...объявление переменной для ведения подсчёта var $count : float end
...объявление переменной как массива var $actor : array 10 of string end

...тело цикла while $count < 10

$count += 1
009A: $actor[$count] = create_actor_pedtype 7 model #WMYBU at $X $Y $Z

...end

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

---
Дело в том, что я хочу сократить более длинную имеющуюся у меня в коде запись генерации актёров.

P.S: Пример выше неработоспособен, и приведён в качестве примера, чтобы как можно лучше выразить мысли.

Board footer

Powered by FluxBB