: 54.161.128.52

 
Сб 10.12.16 17:35:40
Хамов со стажем в 10 наказаний, казнят. 
 
 
 
Оставлять сообщения могут только зарегистрированные пользователи


 
Реклама на Chernobyl-Soul.com

Главная » Статьи » Разное



Скриптование Сталкера №1 урок


Папка со скриптами: scripts
Формат скриптов: *.script
Открыват: любым текстовым редактором(даже блокнотом)

Вот что я сейчас помню из своего опыта:
------------------------------

IF THEN ELSE
Обыкновенное условие:
if db.actor then
end

Запомните:
Сколько условий столько должно быть и end . Переизбыток или не достаток приведёт к вылетам.

Обыкновенное отрицательное условия
if not db.actor then
end

Условия с использованием else

if db.actor then
-- Действие
else --Иначе или противодействие
-- Действие
end

if db.actor then
-- Действие
elseif условие then -- Иначе если
-- Действие
end -- в данном случае нужен только один end т.к. это считается одним условием

Есть ли у гг объект и другой объект
if db.actor:object(obj) and db.actor:object(obj1) then
end

Если ли у гг объект или другой объект
if db.actor:object(obj) or db.actor:object(obj1) then
end

Если у гг один объект и другой или третий
if db.actor:object(obj) and db.actor:object(obj1) or db.actor:object(obj2) then
end
, но тут уже надо опиратся на логику, чтобы не ошибится в условии

--------------------------------------
Комментирование
Чтобы отключить\закомментировать строку используют два символа -
Также есть и блок коменнтариев
Начинается с
--[[
заканчивается
]]

---------------------------------------
Return
Я часто видел в модах проверки на наличие предметов у гг вида
if db.actor:object(obj) ~= nil then
return true
else
return false
end

Но можно воспользоватся и такой вещью как return и это будет выглядить так:
return db.actor:object(obj)

Значительно меньше не правда-ли? return может служить и заменой if
следовательно в нём возможны и такие виды:
return not
return условие and условие
return условие or условие
без end !

Недостаток:
в функци return может вызыватся лишь один раз в отличии от банальных if then

-----------------------------------------------
Объявление переменных

Все кто знаком со скриптами сталкера знает такую вещь как db.actor
Как много букв, а можно ли это как-то укаратить? Ответ: утвердительный!
До
db.actor:character_community()
После
gg:character_community()
db.actor и gg , где же меньше букв? Но какая разница где больше букв?!
А разница в том, что чем больше символом тем больше вес скрипта и чтобы хоть как-то укоротить скрипт применяют вот такие выходки.
Что такое gg ясно, но где содержится значение переменно?
Ответ: в local
local - это такая хрень которая объявляет переменные.
выходит так
local gg = db.actor

gg:character_community()

Запомните:
никогда не делайте переменные такого вида:
db.actor = gg
Т.к. следуя логике выходит что такая глобальная вещь как db.actor будет равна gg . Казалось-бы что такого? А в том что я незнаю))) Но когда я так сделал появился вылет.

Объявленные переменные можно и изменять, но уже не через local :
gg = db.storage

Можно из также и уничтожать благодоря функции nil
Запомните:
Чтобы уничтожить функцию можно применять и nil
Никогда nil функции и ещё использующиеся переменные.
nil - это просто как бы сказать....ну как бы как чёрная дыра...уничтожает без выделения информации что эффективнее обнуления, т.к. 0 - это хоть какая-то информация, а nil - это полное её отсутствие.

----------------------------
Функции
Виды функций:
Пример простой функции
function test()
-- скрипт
end

Пример функции с параметрами:
function tst( i, o)
-- скрипт
end
После функции должен быть end
Значение функций:
В них содержатся условия, скрипты, переменные и всё остальное...переменные можно также и вне функции распалогать.
------------------------------------------
Вызов функций
Если вы хотите вызвать функцию из другого скрипта:
kuperday.call_func()
Если вы хотите вызвать функцию из этого же скрипта где и функция вызова
call_func()

Интересный факт:
Если в скрипте нет нужной функции, то движок будет его искать в _g.script
Если он там есть, то всё ок, если нет - вылет.
----------------------------------------------------
Всё... если чего-то не написал или не дописал извиняйте.
Если что не понятно, в личку или асю.

Автор: kuperday

Вы уже голосовали.
Категория: Разное | Добавил: Go-Nikel (11.11.10) | Просмотров: 2103

Всего комментариев: 1
20.05.15
FraidZZ
0
Так-так. Сначала учим языку (в данном случае - Lua), только потом показываем спецификацию конкретной платформы.

Такой же список к слову "Урок" имеет мало отношения и вряд ли поможет сделать хоть что-то.

Цитата
Значительно меньше не правда-ли? return может служить и заменой if

Это вообще выкинуло. if - оператор ветвления, return - возврата из функции... return не может служить заменой if, а то, что показано в том случае лишь следствие нестрогой типизации и каста возвращённого объекта к булевому типу при последующей его подстановке в логическое выражение.

Цитата
никогда не делайте переменные такого вида:
db.actor = gg
Т.к. следуя логике выходит что такая глобальная вещь как db.actor будет равна gg . Казалось-бы что такого? А в том что я незнаю)))

Идёт присвоение ссылки на gg в переменную db.actor. То есть мы перезаписываем глобальный объект ссылкой на, возможно, даже не объявленую хрень (если не объявлена, то поле вместо ссылки становится обычным undefined, но от этого не легче)

Цитата
nil - это просто как бы сказать....ну как бы как чёрная дыра...уничтожает без выделения информации что эффективнее обнуления, т.к. 0 - это хоть какая-то информация, а nil - это полное её отсутствие.

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

Цитата
Я часто видел в модах проверки на наличие предметов у гг вида
Код
if db.actor:object(obj) ~= nil then
return true
else
eturn false
end


Но можно воспользоватся и такой вещью как return и это будет выглядить так:
Код
return db.actor:object(obj)

Распространённая ошибка, в результате на выходе функции получите не булевую переменную, а ссылку на объект, который кастуется к ней только потом. Это может привести к ошибкам в будущем.
Правильнее использовать своеобразную реализацию тернарного оператора:

Код
return db.actor:object(obj) and true or false


Ну и в целом, урок вряд ли будет полезен (новичку он просто ничего не даст, а любой программист и так знает, как относиться к вышенаписанным вещам)
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

 


Сталкер 2
X-Ray SDK

Все баннеры
Условия баннерообмена
Каталог сайтов

: 26
Заглянувших: 24
Сталкеров: 2

Никотин, Litka

подробно...


Главная страница | Форум | Моды и файлы | Галерея | Статьи | FAQ | Мобильная версия | Найти | RSS

Internet Map www.webmoney.ru

Авторское право на игру и использованные в ней материалы принадлежат GSC Game World.
Любое использование материалов сайта возможно только с разрешения его администрации.
Copyright Chernobyl-Soul.com (ex Stalker-cs) team © 2008-2016. Design by Argus, Хостинг от uCoz.