Подскажи пожалуйста, как правильно ставить таймер... А то я там вообще глобальные переменные использовал, как в учебнике о.О А в инете постоянно слышу, что опытные люди ругаются, добавляя, что глобалки лучше не использовать. И совпадение ли тот факт, что через 2 секунды после включения таймера виснет игра? Иногда виснет, иногда нет. Чаще всего виснет...
А если ставлю вместо надписи $TIMER например 32@, то игра виснет до включения таймера. Вот я и запутался совсем. И ещё, как потом перейти к продолжению скрипта, когда таймер протикает до 0 или лучше останется секунды полторы, а остальное на затемнение пустить?
Сообщение отредактировал Kadeirn - Среда, 22.06.2011, 07:50
Подскажи пожалуйста, как правильно ставить таймер... А то я там вообще глобальные переменные использовал, как в учебнике о.О А в инете постоянно слышу, что опытные люди ругаются, добавляя, что глобалки лучше не использовать. И совпадение ли тот факт, что через 2 секунды после включения таймера виснет игра? Иногда виснет, иногда нет. Чаще всего виснет...
А если ставлю вместо надписи $TIMER например 32@, то игра виснет до включения таймера. Вот я и запутался совсем. И ещё, как потом перейти к продолжению скрипта, когда таймер протикает до 0 или лучше останется секунды полторы, а остальное на затемнение пустить?
у мя тож не получается в скриптах таймер вставить, но скажу одно, что переменная должна быть глобальной(в мейне)
на счет примера выхода когда таймер = 0, то есть простые проверки. Вот например:
Code
:TIMER wait 0 if $TIMER <= 0 then jump @TIMER_2 end jump @TIMER
:TIMER wait 0 014F: stop_timer $TIMER ....
это если счет ведется по спаданию
Сообщение отредактировал wmysterio - Среда, 22.06.2011, 11:05
Дата: Четверг, 23.06.2011, 00:54 | Сообщение # 2706
КОНСУЛЬТАНТ
Группа: Команда CG
Сообщений: 900
Статус: Offline
Quote (Kadeirn)
Да, кстати. Вопрос возник. Как заставить перса звонить по телефону? Code 0812: AS_actor 0@ perform_animation "PHONE_TALK" IFP_file "PED" 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time -1 Ну это наверно полюбому надо, и предварительно загрузить модель: Code Model.Load(#CELLPHONE) А как заставить телефон лечь в руку копа? Тоже наверняка есть опкод какой то. Это ведь не оружие, автоматически не даётся...
загружаешь модель телефона #CELLPHONE, а дальше опкоды:
Code
0729: AS_actor $Actor hold_cellphone 1 // актер поднимает телефон и держит его возле уха 0729: AS_actor $Actor hold_cellphone 0 // актер ложит телефон
Дата: Четверг, 23.06.2011, 01:11 | Сообщение # 2707
Что-то знает.....:)
Группа: Проверенные
Сообщений: 75
Статус: Offline
wmysterio, Вот за это спасибо огромное))) Просто не люблю цеплять предметы к рукам. Видел ещё, когда учился на скрипте про бары, что иногда неадекватно это всё бывает...
Дата: Четверг, 23.06.2011, 21:49 | Сообщение # 2709
Что-то знает.....:)
Группа: Проверенные
Сообщений: 75
Статус: Offline
Quote (Colt_8)
smile
Да, да, именно на этом)) Там просто некоторые бутылки CJ проносил мимо рта. А я исправить так и не смог никак. Не разобрался в опкодах...
Добавлено (23.06.2011, 21:49) --------------------------------------------- У меня вопрос. Что делать, если переменных не хватает? Допустим срочно нужно три переменных добыть, а задействованы и готовы к использованию уже все 33 >< А глобальные вроде как не желательно использовать
Нет, теоретически я мог бы сэкономить и выкроить пару-тройку переменных, но это всё равно что идти в пикино через америку... скрипт же просто огромадный получится >_<
Сообщение отредактировал Kadeirn - Четверг, 23.06.2011, 22:29
Дата: Четверг, 23.06.2011, 22:46 | Сообщение # 2710
КОНСУЛЬТАНТ
Группа: Команда CG
Сообщений: 900
Статус: Offline
Quote (Kadeirn)
глобальные вроде как не желательно использовать
можно, главное что бы они не совпадали с именами в мейне. например переменная $LINKUS_AIR свободно можно использовать. Вот что советую, создай глобальную переменную, и скопируй в буфер (CTRL+C) затем открой оригинальный мейн и нажми поиск (CTRL+F) потом вставь скопированное (CTRL+V). Если нет совпадений, то переменную свободно можно использовать в клео
Дата: Пятница, 24.06.2011, 03:01 | Сообщение # 2711
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
можно так, а можно придумать такое имя, которого точно нет. например: скрипт с названием "птица" - ты берёшь и пишешь переменную $птка - тут первые 2 буквы названия скрипта а вторые твоего ника. главное чтоб ты помнил.
Quote (Kadeirn)
Там просто некоторые бутылки CJ проносил мимо рта. А я исправить так и не смог никак. Не разобрался в опкодах...
в первой части, там такая бутылка, которая так и пьётся, её не исправишь!
Дата: Пятница, 24.06.2011, 11:09 | Сообщение # 2712
Что-то знает.....:)
Группа: Проверенные
Сообщений: 75
Статус: Offline
wmysterio, Colt_8, Спасибо за помощь) Да я ещё немного непрофессионален. Никогда не использовал команду gosub, а с её помощью оказывается можно хоть 10 раз объявить переменные, а потом вернуться к метке и переобъявить. Жестоко) Хотя и насчёт глобалок мне очень пригодится.
Я вот по обливиону скучаю. Там в начале скрипта хоть 100500 переменных объяви и используй, все локальные. Но там нет переходов к меткам. Поэтому всё же преимущество мне кажется за ГТА.
А вот искуственно созданные глобалки можно будет использовать в других скриптах? о.О Или что со значениями будет после перезагрузки игры? Они останутся или занулятся, как скрипт перейдёт снова на первую метку?
Colt_8, А во второй? Там же несколько бутылок и рюмка. Там нельзя угол поворота поменять?
Сообщение отредактировал Kadeirn - Пятница, 24.06.2011, 11:11
Дата: Пятница, 24.06.2011, 11:15 | Сообщение # 2713
Начинающий скриптер
Группа: Команда CG
Сообщений: 937
Статус: Offline
Нельзя в CLEO скриптах использовать глобальные переменные. Цитата из справки:
Когда мы компилируем main.scm вместе со всеми миссиями и скриптами, все глобальные переменные получают свой ID (порядковый номер). Часть из них получает ID всегда один и тот же (например, $PLAYER_CHAR компилируется как $2, $PLAYER_ACTOR - $3 и т.п.). Это справедливо для всех глобальных переменных, которые определены в CustomVariables.ini
Этот порядковый номер означает номер ячейки в памяти игры, где хранится значение переменной. Понятное дело, этот номер должен быть уникальным для каждой переменной. Иными словами, каждая переменная должна быть скомпилирована с уникальным ID.
Все остальные переменные компилируются следующих образом. Если имя переменной не найдено в CustomVariables.ini, то она компилируется с номером, который идет следом за наибольшей использованной переменной в скрипте. Звучит сложновато, поэтому пояcню на примере:
Простой скрипт из 2х строк:
$PLAYER_CHAR = 1 $MYVAR = 1 $PLAYER_CHAR компилируется как $2. Значит, переменная $MYVAR, которая не содержится в CustomVariables.ini и имя которой не числовое, будет скомпилирована как $3. (на самом деле там будет не $3, потому что $3 зарезервировано для $PLAYER_ACTOR, поэтому $MYVAR получит первое свободное имя - $4
Другой пример
$PLAYER_CHAR = 1 $MYVAR = 1 $100 = 1 Наибольшая переменная в скрипте теперь $100, поэтому $MYVAR станет $101.
Такой механизм позволяет присвоить каждой переменной свое уникальное имя.
В main.scm все новые переменные получают имена при компиляции начиная с $10948, т.к. $10947 наибольшая переменная, использованная в оригинальном main.scm.
Теперь вернемся к CLEO-скриптам. Каждый раз, когда мы компилируем новый скрипт, компилятор не знает ничегошеньки про состояние main.scm и сколько переменных в нем использовалось. Он именует переменные с нуля каждый раз. Это значит, что если ты сделаешь два скрипта, в которых будет:
в одном скрипте
$MYVAR = 1 в другом скрипте
$MYVAR1 = 1 то обе переменные будут скомпилированы как:
$4 = 1 несмотря на то, что имена у них разные. И каждый раз компилятор будет в новом клео-скрипте именовать переменные, начиная с $4. Эффект, думаю, ясен. Переменные будут использовать одну и ту же ячейку памяти и менять значения друг друга. Если ты в одном скрипте запишешь актера в $MYVAR, а в другом в $MYVAR1 = 0, то когда первый скрипт обратится к $MYVAR, он прочитает не актера, а 0, т.к. обе переменные используют 4-ю ячейку памяти.
Другая ситуация - это выход за пределы памяти для глобальных переменных. Например, обычный stripped имеет размер памяти для глобальных переменных в 409 ячеек, поскольку наибольшая использованная переменная $ONMISSION это $409. Предположим, мы создали клео-скрипт:
$ONMISSION = 1 $MYVAR = 0 Как будет скомпилирована переменная $MYVAR, если вы поняли, о чем я говорил выше ? Правильный ответ $411. $ONMISSION это $409, поэтому переменная должна бы стать $410, но этот ID уже зарезервирован для $Help_SprayCan_Shown (см. CustomVariables.ini). Поэтому первый свободный номер это $411.
Вернемся теперь к stripped. Размер памяти-то у него так и остался - 409 (если бы $MYVAR = 0 компилировалась в майне, то память была бы увеличена до 411). Поэтому когда клео-скрипт будет работать с переменной $MYVAR, ее значения будут читаться и писаться за пределами дозволенной области памяти. В худшем случае, такие переменные будут менять код самого main.scm (опкоды и параметры), что неминуемо повлечет вылет.
Дата: Пятница, 24.06.2011, 15:05 | Сообщение # 2714
Что-то знает.....:)
Группа: Проверенные
Сообщений: 75
Статус: Offline
Помогите кто нибудь с проверкой х) Я щас мозг сломаю...
Мне нужно следующее: При аресте CJ отправляют в участок. Тут всё ясно. А вот как именно отправляют
1) Если уровень розыска < 4 и при этом перс не находится в сельской местности, тобишь торчит в одном из трёх городов. Тогда перса везут по координатам в городской участок. Если перс всё же в сельской местности, то его довозят как бы до участка и он ограничивается взяткой и профилактической беседой в 1 сообщение.
2) Если уровень розыска => 4 Тогда перса довозят до полицейского участка в Сан Фиерро и там перс ожидает суда. Но если перс в сельской местности, то по прежнему ограничивается профилактической беседой и взяткой уже побольше.
3) Если перс находится в Сан Фиерро и у него меньше 4 звёзд, его отправляют в деревню, где дело спускают опять же на тормозах, ибо занимаются только особоважными делами.
Вот как хотябы ифы построить? Я не могу. Везде выходит нужна проверка на уровень розыска, на не находится ли игрок в деревне, а если находится в сан фиеро, его отправить в деревню Короче кажется слишкомсложное я чего то придумал. Есть способ хоть как то такую проверку собрать?
Сообщение отредактировал Kadeirn - Пятница, 24.06.2011, 15:07
Дата: Пятница, 24.06.2011, 17:09 | Сообщение # 2716
КОНСУЛЬТАНТ
Группа: Команда CG
Сообщений: 900
Статус: Offline
Quote (AndNicen)
в смысле? для проверки нескольких условий, используется if and
боюсь 1-го if AND'а мало так целый поток проверок нужно
Quote (AndNicen)
Нельзя в CLEO скриптах использовать глобальные переменные.
а мне можно правда использую их когда забиты все локальные. Или использую массивы. С ними намного проще Kadeirn, мне нужны коордиаты всех точек, скинь плз, попробую разобраться.
Сообщение отредактировал wmysterio - Пятница, 24.06.2011, 17:25
Остальные координаты долго искать, они у меня по трём предалфоверсиям раскинуты х)) Да и мне не надо с координатами. С командой gosub там хоть 1@, 2@, 3@ можно весь скрипт гонять для разных целей. А вот именно как переход организовать?
Был у меня макетик: :XЗ wait 0 20@ = Player.WantedLevel(...) If 20 < 4 jf @Переходим на "20 > 3" jump @XЗ+1
:XЗ+1 wait 0 If or 0154: not actor $PLAYER_ACTOR in_zone 'LA' 0154: not actor $PLAYER_ACTOR in_zone 'SF' 0154: not actor $PLAYER_ACTOR in_zone 'VE' jf @Переходим на несельскую местность jump @Идём на задание координат для колхоза. Но тут надо будет ещё как то замутить проверку, находится ли перс в зоне "Туманный округ" Ибо если он в колхозе вегаса, автоматически просто не доедет. Надо телепортировать. Пропускаем координаты
:XЗ+n wait 0 If 20 > 3 И тут снова проверка на нахождение в городах, или в деревне, в сан фиеро ли, или в двух других. В общем муторно. И не факт, что сработает. Я просто хотел узнать, можно ли как нибудь сделать покороче
Quote (wmysterio)
а мне можно
А мне можно?
Сообщение отредактировал Kadeirn - Пятница, 24.06.2011, 17:55
Дата: Пятница, 24.06.2011, 19:00 | Сообщение # 2720
Начинающий скриптер
Группа: Команда CG
Сообщений: 937
Статус: Offline
Kadeirn, мне кажется, или ты координаты всегда сначала заносишь в переменные а потом пишешь в опкоде? Общий код для всех вариантов с переменными вместо значений, где в зависимости от произошедшего меняется значение переменных и прыгает на тот код. Это другой способ проверки, я таким не пользуюсь. Или в этом есть тайный смысл которого не понять простым смертным? Возможно, Вас заинтересует: NEW!!!Дополнительные Пешеходы (Save Player Group)Сохранение/загрузка банды игрока Проигрывание анимаций
Сообщение отредактировал AndNicen - Пятница, 24.06.2011, 19:18
Дата: Пятница, 24.06.2011, 19:18 | Сообщение # 2722
Начинающий скриптер
Группа: Команда CG
Сообщений: 937
Статус: Offline
Code
:c1 wait 0 if -условие- jf @c2 -код1- (и прыжок в том числе) :c2 wait 0 if -условие- jf @c1 -код2- (и прыжок в том числе) jump @c1
Код может заключать или прыжок на метку после цикла, или на начало, в зависимости от ситуации. Это бесконечный цикл проверок. Короче, суть в том чтобы проверять несколько условий одновременно, ну тут небыло смысла объяснять, в твоем скрипте было такое. Вообщем, мне удобней писать координаты просто, чем объявлять сначало переменные, значения которых будут разные в тех же "код1" и "код2". Я не говорю о том, когда например нажатие клавиши изменяет значение переменной, где удобней написать "1@ = 0", чем писать десять кодов. P.S. Как засунуть актера внутрь ларька с хот-догами? (#HOTDOG) Возможно, Вас заинтересует: NEW!!!Дополнительные Пешеходы (Save Player Group)Сохранение/загрузка банды игрока Проигрывание анимаций
Сообщение отредактировал AndNicen - Пятница, 24.06.2011, 19:19
Дата: Пятница, 24.06.2011, 19:28 | Сообщение # 2723
Что-то знает.....:)
Группа: Проверенные
Сообщений: 75
Статус: Offline
AndNicen, Внутрь? Это ты про какие ларьки говоришь? Я знаю прилавки такие есть в ласвентурасе. Так они там просто рядом стоят и всё. Не раз сзади подходил и ножом убивал. Вчастности около полицейского участка такой стоит
Дата: Воскресенье, 03.07.2011, 00:54 | Сообщение # 2725
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
Quote (AndNicen)
А как действует опкод "0209: 1@ = random_int_in_ranges 0 10" Включительно, или просто между этими числами. Я имею ввиду, одним из вариантов рандома может быть 0 или 10?
Дата: Воскресенье, 03.07.2011, 10:52 | Сообщение # 2726
Школьник II
Группа: Пользователи
Сообщений: 89
Статус: Offline
привет всем!)я только начал скрипты писать вот первый скрипт помогите раобратся что не так!суть в том что пед стоит в груве и курит ! // This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
Добавлено (03.07.2011, 10:52) --------------------------------------------- уже ненадо все исправил!!!!!!!только почему сигареты и эфекта от дыма не видно?
Что то типо этого надо прописать. Нужно эффект дыма прицепить к сигарете. Сигарета наверно исчезает из-за строчки Model.Destroy(3044)
Да, и ещё одна фигня. Полюбому, использованные глобальные переменные есть в main.scm, не знаю как игра твоя не вылетает. Лучше вместо $ACTOR и $OBJ использовать к примеру 1@ и 2@ соответственно. Ну или любое другое значение вплоть до 30
Сообщение отредактировал Kadeirn - Воскресенье, 03.07.2011, 14:31
Дата: Воскресенье, 03.07.2011, 16:13 | Сообщение # 2728
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
***
Quote (PETKA)
почему сигареты и эфекта от дыма не видно?
Для видимости эффекта нужен опкод. Зайдёшь в справку СБ (F12) в раздел "Анимации для актёров", а там ищи ссылку на "Эффекты и частицы" и вот там, в конце странице есть опкод!
***
Нужно учиться сразу писать всё корректно и группированно. Вот правильный код:
Code
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
Ещё одно: не нужно использовать глобальные переменные: $Actor, $CAR, $и всё в этом духе... Используй локальные переменные: 0@, 1@, 2@ до 33@. Причём начинай в каждом скрипте с начала. первую можно взять 0@, вторую 1@ и т.д.
Дата: Воскресенье, 03.07.2011, 20:54 | Сообщение # 2730
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
Зайди в справку Санни Билдера. Там есть раздел Статьи, а в нём Анимации для актёров. Дальше на странице надо найти синим цветом текст (ссылка) с названием Эфекты и частицы.
И дальше в новой странице листаешь в конец. там есть опкод, почита.
Дата: Воскресенье, 03.07.2011, 22:01 | Сообщение # 2731
Школьник II
Группа: Пользователи
Сообщений: 89
Статус: Offline
да спс понял!только этот опкод же эфект добавляет а мне еще надо сигу ему в руку вставить!
Добавлено (03.07.2011, 22:01) --------------------------------------------- да кстате извените что не в тему можно ли всю карту открыть в 3d max!?а то просто у мя мед не работает вобще там черный экран намертво версия 0.21!а я хочу свой ну типо остров сделать и добавить!
Дата: Понедельник, 04.07.2011, 00:13 | Сообщение # 2735
Школьник II
Группа: Пользователи
Сообщений: 89
Статус: Offline
вот и я так же делаю и все ровно черный экран!!!!!!!!мб приблизить просто надо а я незнаю ак!
Добавлено (04.07.2011, 00:13) --------------------------------------------- стойте а можно же создать город тобиш файл dff txd и col и написать скрипт в нем координаты чтоб где стоял город этот вот только подскажити плииз что вобще деласть в скрипте с фалом col или его вобще ненадо туда помещать?(в скрипт!)
Так, вопрос: я нашел одно место глюченное в игре, но оно находиться глубоко под землей, я хочу сделать её как загрузку (мод АоС) но проблема: когда кидаю тачку в те коры - она не проваливается под землю, как сделать что бы показалась под землей? Верь в свою звезду Э. Че Гевара
Дата: Пятница, 08.07.2011, 00:28 | Сообщение # 2742
Школьник II
Группа: Пользователи
Сообщений: 89
Статус: Offline
как прицепить эфект к экрану!я вот хочу создать скрипт что бы допустим игрок употребляет наркоту и после этого гдето через минут экран трясся или краснел темнел!!помогите плиз
Дата: Вторник, 12.07.2011, 22:14 | Сообщение # 2744
Школьник II
Группа: Пользователи
Сообщений: 89
Статус: Offline
извените что не в тему!!!есть моделеры тут или хотя бы новички ну или хотя бы желающие научится моделировать И КОТОРЫЕ ЖЕЛАЮТ ПОДЗАРАБОТАТЬ НЕМНОГО!просто очень очень надо :( :( срочно плиз отзовитесь :)если надо то научу моделировать плиззз отзовитесь
Сообщение отредактировал PETKA - Вторник, 12.07.2011, 22:15
+ поставь мне create_thread @Test // создаём поток
:Test // начинаем поток wait 2000 // ждём 2 сек model.Load(#FAM1) // объявляем,нужную нам, модель 038B: load_requested_models // загружаем ранее обявленые модели
:Test2 // начинаем второй label этого потока wait 0 // ждём 0 сек, если не напишем, то может вылетить if // одиночное условие model.Available(#FAM1) // проверка (модель нашего актёра уже загружена) jf @Test2 // если проверка не выполнилась, то переходим в начало label'a wait 3000 // ждём 3 сек. actor.Create(50@,4,#fam1,2494.9099, -1682.17, 12.32) // создаём актёра перед домом CJ'я 05D6: clear_scmpath // очищаем путь, если создаёте новый, как сейчас, то писать необходимо 05D7: add_point_to_scmpath 2470.1248 -1661.6222 13.3293 // задаём точку(дом OG) 05D7: add_point_to_scmpath 2494.9099 -1682.17 12.32 // задаём точку (дом CJ'я) 05D7: add_point_to_scmpath 2470.1248 -1661.6222 13.3293 // задаём точку(дом OG) 05D8: AS_assign_scmpath to_actor 50@ flags 4 0 // и вот этой командой заставляем актёра // идти по точкам, которые мы написали. end_thread // заканчиваем поток
Дата: Четверг, 14.07.2011, 00:58 | Сообщение # 2750
Школьник II
Группа: Пользователи
Сообщений: 89
Статус: Offline
ну так вот хочеш участвовать в моем глобальном моде!)если да регся тут!http://pes2011new.ucoz.ru/load/0-2 не считайте за спам плиииз
Добавлено (14.07.2011, 00:58) --------------------------------------------- а там уже спишемся!!да и еще если кто нибудь еще желает помочь или научится чему то пишите