Тут вы ставляйте советы скриптерам , любой секрет , любую мелочь пишите сюда Вот мой совет : если вы делаете какой нибудь скрипт в котором вас могут прикончить , но весь настрой портит то ,что кто нибудь просто введёт пароль и жить вечно. Я решил это проблему просто : Просто после начала нового лейбла ,после слова wait 0 пишите вот такую интрестную строчку:
Code
actor.SetImmunities($PLAYER_ACTOR, 0,0,0,0,0)
Это отрубит чит на время выполнения условий проверки например :actor.dead... Хотя я точно не уверен как работает стандартный чит BAGUVIX , надо будет проверить , может actor.SetImmunities($PLAYER_ACTOR, 0,0,0,0,0) можно ввести просто один раз
1)После каждой метки пишите время задержки,даже если задержка будет равна нулевой. 2)Не путайте вот такие опкоды: Player.Defined() и Actor.InCar().Попонятнее:Например: Player.Defined($PLAYER_ACTOR) и Actor.Dead($PLAYER_CHAR)
Когда класс начинается с Player, кроме $PLAYER_CHAR там в принципе ничего не может быть. А когда с Actor, тут может быть либо $PLAYER_ACTOR, либо любой другой. Мой совет: если решили занятся скриптингом, открывайте справку и начинайте читать ее не с середины, а с самой первой главы. return
Не путайте вот такие опкоды: Player.Defined() и Actor.InCar().
А что, кто-то их путает?
Мой совет – когда создаёте скрипт, старайтесь предусмотреть из-за чего он может не работать и делайте больше проверок. Например, если вы работаете с актёром, то делайте такие проверки как not Actor.Dead и Actor..Defined
А вот у меня вопрос! Может ли вылетать скрипт из-за того что например ест 10 скриптов у которых одновременно используется одна и та же переменная (например 1@) ????
Не используйте в CLEO-скрипте собственные глобальные переменные ($car, $blahblah и т.д.), иначе скрипт будет работать неправильно. Вы можете использовать только некоторые глобальные переменные (см. ниже).
Стоп,а не наоборот ли? Quote Не используйте в CLEO-скрипте собственные глобальные переменные ($car, $blahblah и т.д.), иначе скрипт будет работать неправильно. Вы можете использовать только некоторые глобальные переменные (см. ниже).
Так я про это и говорю.
Quote (Gans|64|)
Кстати а как быть если лок.пер не хватает?
Ну можно одну и ту же переменную несколько раз использовать. А так конечно это большой недостаток Клео.
Кстати, в формате .cm можно использовать в сотни раз больше локальных переменных.
Вот ещё совет: скриптеры,не просите помощи от других,если можно разобраться самому) Например:вам надо узнать опкод,заставляющий игрока исполнить две анимации,а потом почапать проч,поищите сами в опкоднике по некоторым словам: go,actor...
Дата: Воскресенье, 13.12.2009, 10:29 | Сообщение # 21
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Quote (d88)
А что, кто-то их путает?
Иногда новички не понимают - когда использовать $player_actor, а когда $player_char? Разобраться не сложно - если в опкоде слово actor, то используется первая переменная, если player, то вторая.
Quote (d88)
Мой совет – когда создаёте скрипт, старайтесь предусмотреть из-за чего он может не работать и делайте больше проверок. Например, если вы работаете с актёром, то делайте такие проверки как not Actor.Dead и Actor..Defined
Хороший совет. Я уже говорил, что попытка сделать что-либо с несуществующим актером, машиной и т.п. - верная причина вылета. Поэтому перед тем, чтобы делать что-то с каким-то игровым объектом, желательно проверять, существует он или нет.
Quote (Colt_8)
Может ли вылетать скрипт из-за того что например ест 10 скриптов у которых одновременно используется одна и та же переменная (например 1@) ????
Хочу внести ясность в этот вопрос, поскольку видимо не все об этом знают. Для каждого скрипта (их ещё называют потоками) выделяется память под 32 локальные переменные (+ 2 таймера). Локальная переменная называется так потому, что она действительна только для того скрипта, в котором приведена (локальный значит местный). То есть если в одном скрипте будет написано 1@ = 1, а в другом 1@ = 2, то никаких конфликтов не будет и не может быть, поскольку эти значения содержатся в разных областях памяти. Отсюда ещё один вывод - лучше объединять по несколько мелких скриптов в один, благодаря этому удастся сэкономить ресурсы игры, поскольку область памяти в 32+2 переменные выделяется под каждый скрипт всегда, а неиспользованные переменные только зря расходуют память (в неиспользованных переменных записаны нули). Теперь о миссиях. В отличие от потоков (скриптов), которых одновременно может быть запущено чуть ли не несколько десятков, миссия (клео-миссия или миссия мейна) в данный момент времени может быть запущена только одна. Для миссии выделяется блок памяти в 1024 локальные переменные.
Quote (d88)
Ну можно одну и ту же переменную несколько раз использовать. А так конечно это большой недостаток Клео.
Да, одну и ту же переменную можно и нужно использовать по нескольку раз. Это значит, что как только значение какой-то величины, записанное в переменную, вам больше не нужно, вы можете записать в эту переменную значение другой величины. Если вам не хватает локальных переменных, то вы можете воспользоваться глобальными клео-переменными (не путать с обычными глобальными переменными).
Quote (Colt_8)
1. В КЛЕО папке будет ли работать?
cm - это клео-миссия. Она является отдельным файлом и помещается в папку клео. В мейне есть потоки и миссии, для клео точно так же - есть потоки (cs) и миссии (cm).
Quote (FIRE_DRAGON)
Не используйте локальные переменные часто,на них стоят настройки игры реестра.Например: 10@ = точный двойник Карла.
А это что за новости? Где вы это вычитали? Локальные переменные в каждом потоке (скрипте) свои, пользоваться ими можно как угодно и сколь угодно.
Сообщение отредактировал Den_spb - Воскресенье, 13.12.2009, 10:31
Дата: Воскресенье, 13.12.2009, 13:15 | Сообщение # 26
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
Quote (Den_spb)
Хочу внести ясность в этот вопрос, поскольку видимо не все об этом знают. Для каждого скрипта (их ещё называют потоками) выделяется память под 32 локальные переменные (+ 2 таймера). Локальная переменная называется так потому, что она действительна только для того скрипта, в котором приведена (локальный значит местный). То есть если в одном скрипте будет написано 1@ = 1, а в другом 1@ = 2, то никаких конфликтов не будет и не может быть, поскольку эти значения содержатся в разных областях памяти. Отсюда ещё один вывод - лучше объединять по несколько мелких скриптов в один, благодаря этому удастся сэкономить ресурсы игры, поскольку область памяти в 32+2 переменные выделяется под каждый скрипт всегда, а неиспользованные переменные только зря расходуют память (в неиспользованных переменных записаны нули). Теперь о миссиях. В отличие от потоков (скриптов), которых одновременно может быть запущено чуть ли не несколько десятков, миссия (клео-миссия или миссия мейна) в данный момент времени может быть запущена только одна. Для миссии выделяется блок памяти в 1024 локальные переменные.
А как начать клео миссию?
Quote (Den_spb)
Да, одну и ту же переменную можно и нужно использовать по нескольку раз. Это значит, что как только значение какой-то величины, записанное в переменную, вам больше не нужно, вы можете записать в эту переменную значение другой величины. Если вам не хватает локальных переменных, то вы можете воспользоваться глобальными клео-переменными (не путать с обычными глобальными переменными).
Дааа, ты реально умный в этом! Ты наверно и С++ знаешь?
Quote (Den_spb)
m - это клео-миссия. Она является отдельным файлом и помещается в папку клео. В мейне есть потоки и миссии, для клео точно так же - есть потоки (cs) и миссии (cm).
А формат *.scm?
Quote (Den_spb)
А это что за новости? Где вы это вычитали? Локальные переменные в каждом потоке (скрипте) свои, пользоваться ими можно как угодно и сколь угодно.
Дата: Воскресенье, 13.12.2009, 16:16 | Сообщение # 28
Профессор
Группа: Проверенные
Сообщений: 459
Статус: Offline
.cs - обычный клео-поток на 32+2 локальных переменных .cm - клео-миссия на 1024 лп, создавать ее также как и обычную миссию. Вместе с клео идут скрипты-примеры, в папке клео/ найди файл CustomMission.txt , удали в нем gosub @MissionPassed и впиши вместо этого свою миссию. .scm - либо мэйн, либо внешний скрипт, чтобы его сделать, не надо писать вначале директиву клео. return
Сообщение отредактировал Gans[64] - Воскресенье, 13.12.2009, 16:17
Дата: Воскресенье, 13.12.2009, 21:47 | Сообщение # 35
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Quote (Colt_8)
А не локальные? $Act раскажи плих о них!
Глобальные переменные (со знаком $), в отличие от локальных, доступны для вызова из любого скрипта или миссии. То есть глобальные переменные - общие для всех скриптов, а локальные переменные у каждого скрипта свои. Например, переменные $PLAYER_ACTOR и $PLAYER_CHAR в любом скрипте означают одно и то же - игрока (CJ). В КЛЕО глобальные переменные применять нельзя, за исключением некоторых общепринятых: $PLAYER_ACTOR, $PLAYER_CHAR, $ONMISSION и др.
Quote (d88)
Да не, не в защите дело. На самом деле эти скрипты редактируются через мэйн.
Верно, код из скрипт.имг добавляется к коду мейна при его декомпиляции, составляя 1/4 часть от него.
Дата: Воскресенье, 13.12.2009, 22:05 | Сообщение # 36
I LOVE GTA
Группа: Проверенные
Сообщений: 5216
Статус: Offline
Quote (Den_spb)
Глобальные переменные (со знаком $), в отличие от локальных, доступны для вызова из любого скрипта или миссии. То есть глобальные переменные - общие для всех скриптов, а локальные переменные у каждого скрипта свои. Например, переменные $PLAYER_ACTOR и $PLAYER_CHAR в любом скрипте означают одно и то же - игрока (CJ). В КЛЕО глобальные переменные применять нельзя, за исключением некоторых общепринятых: $PLAYER_ACTOR, $PLAYER_CHAR, $ONMISSION и др.
Круто! а ТАК получается нельзя использовать просто таr такую переменную $Prosto?
Дата: Понедельник, 21.06.2010, 21:46 | Сообщение # 40
Школьник I
Группа: Пользователи
Сообщений: 11
Статус: Offline
Люди нужна помощь!Делаю Авианосец в СА!Возле дамбы!Там уже стоит транспорт и есть сейв! Напишыте скрипт лифта(CARRIER_LIFT1_SFSE ,ID 3115) Координаты верхней точки остановки: X................... -726.038 Y................... 1981.49 Z................... 17.0453 Z Угол............ 90.0 Нижней: X................... -726.038 Y................... 1981.49 Z................... 9.94531
НЕ ПУТАТЬ СО СКРИПТОМ AIRCRAFT CARRIER (AVIAONSEC_new01.cs) Z Угол............ 90.0
Вот вижу пустеет тема уже давно, вот и решил поделиться с новичками и опытными(мож они ещё не знают). Речь идет о константах. Вроде какое то непонятное слово и никакого назначения оно не имеет. Но с другой стороны они оч помогают при скриптинге в плане быстроты написания.
Итак, начнем с главного. Как обьявить константкы? очень легко: const .... end
в место .... мы ставим наши константы - значения, которые будут заменятся при компиляции. Например Зачем долго и нудно печатать $PLAYER_ACTOR, если можно написать просто букву А. Как вам ???
Знаю, что это ничего пока вам не говорит. Но вот с примером должно стать более яснее.
Давайте рассмотрим пример, что бы при нажатии клавиши Е игроку добавится 1000. для этого нам нужно узнать номер клавиши, эт 69. можно заменить $PLAYER_CHAR на С
и так, заменяем: const C = $PLAYER_CHAR E = 69 end
далее как обычно. Скрипт примерно должен выглядить так:
0000:
:MONEY thread 'MONEY' wait 0 const C = $PLAYER_CHAR E = 69 end
:MONEY_2 wait 0 if 0AB0: key_pressed E jf @MONEY_2 player.Money( С ) += 1000 0A93: end_custom_thread
Всё равно слишком долго, давайте сократим key_pressed на просто К
player.Money( С ) += 1000 это все равно что 0109: player $PLAYER_CHAR money += 1000 а это все равно что 0109: (unknown) $PLAYER_CHAR 1000 давайте заменим (unknown) на символ _ 1000 тож не смотрится, давайте заменим её буквой М ну и вконце слишком длинно end_custom_thread )) заменим и это на букву, пусть будет Т
сделам все замены, мы получим скрипт:
0000:
:MONEY thread 'MONEY' wait 0 const C = $PLAYER_CHAR E = 69 K = key_pressed _ = (unknown) M = 1000 T = end_custom_thread end
:MONEY_2 wait 0 if 0AB0: K E jf @MONEY_2 0109: _ C M 0A93: T
Ясно, что для коротких скриптов это лишнее, но если делать скрипт на 1000 и более сток, то это помогает секономить время. Лично мне эт очень помогло при написании скрипта Варлок. Если будут вопросы, задавайте в соответствующий теме.
Кстате, можно даже метки "переименовать", например: Z = @LABEL
Если вы закрыли клео-скрипт, а затем его снова откроете, то вы увидите, что скрипт выглядит как обычно
одно плохо - нельзя заменять имена опкодов(например 0000:) а они должны так оставаться.
если для вас была полезная инфа - поставте + в репутацию
Новость, конечно) Ещё мог бы написать про $include и scm-функции, это тоже сильно коротит время и усилия. Опкоды можно переписать в классов-методовый формат, для этого надо прописать их в classes.idb. Grand Theft Auto III HD Development Team 0AA5: call 0x52D0B0 num_params 0 pop 0
52 53 43 05 01 00 00 00 10 20 00 C0 78 DA EC BC 0B 38 94 CD FF 3F 7E 2F 8B 75 5E 67 49 5A 87 24 B1 07 21 DD BB EC
Хорошо, что ты сказал "опытным". Сказал бы "профи" - я бы тебе лекцию вычитал бы) Вообще, думаю, рановато тебе такое писать) Но для новичков сойдёт. ПС classes.idb открывай блокнотом, посмотри как там всё устроено. Если не поймёшь - могу разьяснить в подробностях. Grand Theft Auto III HD Development Team 0AA5: call 0x52D0B0 num_params 0 pop 0
52 53 43 05 01 00 00 00 10 20 00 C0 78 DA EC BC 0B 38 94 CD FF 3F 7E 2F 8B 75 5E 67 49 5A 87 24 B1 07 21 DD BB EC
Дата: Воскресенье, 15.05.2011, 02:27 | Сообщение # 49
Мажор сайта
Группа: Проверенные
Сообщений: 396
Статус: Offline
Лучше называть константы не просто буквами, а давать им осмысленные имена - например, TIMER, STATUS и т.д. Это сделает исходный код гораздо более наглядным, что важно в случае дальнейшей доработки скрипта или публикации кода на форумах. Объявив константу, в дальнейшем печатать каждый раз её имя не нужно - достаточно выбрать его из списка констант, появляющегося при нажатии Ctrl+Space. Заменять описательные части опкодов константами не имеет смысла, т.к. во-первых, описательные части не читаются компилятором, поэтому их можно вообще не писать (т.е. можно написать 0509: 12@ 4@ 9@ 5@ 6@ вместо 0509: 12@ = distance_between_XY 4@ 9@ and_XY 5@ 6@), а во-вторых, при написании скрипта опкоды обычно копируются из Поиска опкодов, а не набираются вручную.
Quote (wmysterio)
и ещё функции - как передать функции несколько параметров, там, например, координаты и модель а на выходе должен быть актер 1@ ??
Прочитай внимательно описание к опкодам 0AB1 и 0AB2 в SB справке (раздел КЛЕО3) - там всё подробно разъяснено.
Quote (wmysterio)
как правильно их переписать?
Открой файл Program Files\Sanny Builder 3\data\sa\classes.db с помощью Блокнота и посмотри, как прописываются опкоды - ничего сложного там нет.