You are not logged in.
Чуть-чуть ошиблись, а правильнее будет у Вас вот так:
Ведь проверка тоже требует перебора, а без него (перебора) никуда бы они (актёры) не выгрузились, соответственно и не появились бы новые
Спасибо Вам огромное!
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.
Да, моя ошибка. Дело в том, что в других языках привыкла не использовать нулевой ключ.
потому что ты $count просто вычел 1 = 9
:wow:
Надеюсь объяснил.
Да, поняла свои ошибки. Всё никак синтаксис написания не уложится, и путаюсь постоянно..
Сразу, конечно, использовать я ничего не буду, а постараюсь вникнуть как можно лучше в то, что вы (mfisto, Alien) мне написали. Чуть позже, если возникнут вопросы, я оставлю сообщение..
Спасибо вам!
Возникли проблемы с проверкой и удалением мёртвых актёров из памяти. Кто-нибудь поможет проанализировать код? В ряду своего малого опыта работы в 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: Глаза уже сломала, запутавшись в собственном коде. Прошу помощи.
Важные (мелкие) детали, многое проясняют! На деле всё корректно и работоспособно, уже проверила. Тему обязательно прочитаю, много полезной информации содержит.. Большое Вам спасибо!
Благодарю Вас! И ещё один вопрос для более полного понимания: где можно посмотреть полный список имеющихся типов (кроме общедоступных) под разные, скажем так, задачи? Честно, не знала, и даже представить не могла, что есть тип, именуемый как actor.. Спасибо ещё раз!
Здравствуйте! Скажите, пожалуйста, можно ли создать актёра, и хранить его данные в массиве под определённым ключём, по которому можно в дальнейшем обращаться, например, для проверки чего-либо?
Допустим, вот так:
...объявление переменной для ведения подсчёта 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: Пример выше неработоспособен, и приведён в качестве примера, чтобы как можно лучше выразить мысли.