Начальные сведения о скриптах — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Loxotron (обсуждение | вклад) м («Начальнеые сведения о скриптах» переименована в «Начальные сведения о скриптах») |
(Добавил в статью новые материалы.Меченый(Стрелок)) |
||
Строка 63: | Строка 63: | ||
ПОКА ВСЁ, МОЖЕТ НАПИШУ ЕЩЁ ЧЁ НИТЬ ПОЛЕЗНОЕ | ПОКА ВСЁ, МОЖЕТ НАПИШУ ЕЩЁ ЧЁ НИТЬ ПОЛЕЗНОЕ | ||
+ | Ну и я напишу.'''Меченый(Стрелок)''' | ||
+ | |||
+ | Мой монолог построен так: В - Вопрос,О - Ответ | ||
+ | |||
+ | Начнём: | ||
+ | '''В''' - Что такое ЦИКЛ? И как он выглядит? | ||
+ | ''О'' - Цикл это повторение одного и того же действие n-ое кол-во раз | ||
+ | выглядит так | ||
+ | <pre>for i=1,n do | ||
+ | |||
+ | end</pre> | ||
+ | За место i может быть любая переменная ,за место n - число которое больше первоначального значения(i) | ||
+ | '''В''' - А для чего можно использовать цикл? | ||
+ | ''О'' - много для чего можно.см. ниже | ||
+ | Пример 1.Перебор по id/Узнаем монстор ли объект,если да ,то функция возвращает истину(true) | ||
+ | <pre>for id=1,65535 do | ||
+ | local obj = level.object_by_id(id) | ||
+ | if obj~= nil then | ||
+ | if IsMonster(obj) then | ||
+ | return true | ||
+ | else | ||
+ | return false | ||
+ | end | ||
+ | end | ||
+ | end</pre> | ||
+ | Пример 2.Спавн/ | ||
+ | <pre>for i=1,5 do --функция повторится 5 раз,следовательно будет заспавнено 5 АК | ||
+ | local a = vector() | ||
+ | a.x = -220.21 | ||
+ | a.y = -19.93 | ||
+ | a.z = -158.98 | ||
+ | alife():create("wpn_ak47",a,33447,47,65535) | ||
+ | end</pre> | ||
+ | и т.п. | ||
+ | существует ещё цикл с предусловием (while a,n do),но об этом позже | ||
+ | '''В''' - Какие параметры ГГ можно корректировать скриптами? | ||
+ | ''О'' - Таких не много, запись будет такой :<pre>db.actor.параметр</pre> | ||
+ | Параметры: | ||
+ | <pre>radiation | ||
+ | health | ||
+ | psy_health | ||
+ | power</pre> | ||
+ | '''В''' - а можно ли спавнить в рандомной точке предмет,если да,то как? | ||
+ | ''О'' - можно | ||
+ | Для этого нам понадобится таблица максимальных значений level_vertex_id и game_vertex_id | ||
+ | выглядит она так: | ||
+ | |||
+ | <pre>local level_vertexes={ | ||
+ | l01_escape = {lvid=595580, gvid=44}, | ||
+ | l02_garbage = {lvid=384039, gvid=265}, | ||
+ | l03_agroprom = {lvid=438379, gvid=693}, | ||
+ | l04_darkvalley = {lvid=392517, gvid=813}, | ||
+ | l06_rostok = {lvid=69283, gvid=1311}, | ||
+ | l07_military = {lvid=915663, gvid=1546}, | ||
+ | l10_radar = {lvid=796328, gvid=1868}, | ||
+ | l11_pripyat = {lvid=295965, gvid=2269} | ||
+ | }</pre> | ||
+ | |||
+ | ЗЫ:Извините ,что не для всех уровней,исправлюсь | ||
+ | Так,таблица у нас есть ,теперь нам нужно написать функцию спавна.Давайте покажу на Монстрах | ||
+ | создадим таблицу с секциями спавна монстров: | ||
+ | (Я буду использовать свои наработки ,поэтому таких секции у вас не будет ,эта таблица -пример) | ||
+ | |||
+ | <pre>local mutants = { | ||
+ | "zombie_ghost_hell", | ||
+ | "zombie_normal_hell", | ||
+ | "zombie_immortal_hell", | ||
+ | "bloodsucker_weak_hell", | ||
+ | "tushkano_normal_hell", | ||
+ | "snork_weak_hell", | ||
+ | "burer_weak_hell", | ||
+ | "cat_weak_hell", | ||
+ | "chimera_weak_hell", | ||
+ | "gigant_strong_hell" | ||
+ | }</pre> | ||
+ | |||
+ | Таблицу записали ,наконец приступим к оформлению главной функции | ||
+ | <pre>function random_spawn() | ||
+ | local count = math.random(5,20) --выбираем кол-во заспавненых мобов | ||
+ | local section = mutants[math.random(table.getn(mutants))] -- выбираем секцию моба | ||
+ | local lv = math.random(level_vertexes[level.name()]["lvid"]) --выбираем левел вертекс | ||
+ | local gv = level_vertexes[level.name()]["gvid"] --выбираем гэйм вертекс | ||
+ | for ind = 1, count do | ||
+ | alife():create(section, level.vertex_position(lv), lv, gv)--\\level.vertex_position(lv) - позиция левел вертекса | ||
+ | end | ||
+ | end</pre> | ||
+ | |||
+ | Далее помещаем вызов функции в bind_stalker.script в net_spawn() и при каждой загрузке будут спавнится мобы в рандомной точке | ||
[[Категория:Скрипты]] | [[Категория:Скрипты]] |
Версия 17:55, 19 марта 2009
ПРЕДИСЛОВИЕ
Для чего нужны срипты и сведения и их использовании - Rez@niy В скриптах содержаться данные для выполнения по условиям. |
Итак начнём. Рассмотрим простой скрипт спавна предмета: --********************************************* --**TESTING** --********************************************* -- -- Создает в заданном месте ящик с динамитом function bandit_create() local a = vector() -- db.actor:position() a.x = -220.21 a.y = -19.93 a.z = -158.98 alife():create("wpn_ak47",a,33447,47,65535) end
ИМЯ ФУНКЦИИ
function - всегда обязательное поле, это что то вроде id, в языке LUA. После поля function отступаем и пишем текст произвольный.
Дальше идёт функциия о позиции, она обязательна для спавна скриптом.
Ниже кординаты. Для снятия кординат используем в консоли rs_stats on.
После кординат идёт сама функция спавна. alife():create("СИСТЕМНОЕ ИМЯ ОБЬЕКТА",a,33447,47,65535)
Цифры пусть остануться такие же. Для обьекта спавна возмём wpn_ak47. Кординаты какие то левые, лучше снимите кординаты сами. И ещё кое что важное. В папке scripts, создаём файл bugaga.script и пишем туда готовый текст, только со своими кординатами.
--********************************************* --**TESTING** --********************************************* -- -- Создает в заданном месте ящик с динамитом function bandit_create() local a = vector() -- db.actor:position() a.x = -220.21 a.y = -19.93 a.z = -158.98 alife():create("wpn_ak47",a,33447,47,65535) end
Написали? Отлично!. Теперь осталось только подключить это к игре. Идём в файл dialogs_escape.xml и выбираем какое нить диалог. Там после поля text в диалоге приписываем <action>main.bandit_create</action> ТОЛЬКО ДИАЛОГ ВЫБИРАЕМ ИСПОЛЬЗУЮЩИЙСЯ. С волком например. Всё сохраняем и тестим. В итоге, когда вы в игре нажмёте на фразу после которой находится action, заспауниться калаш на указанных кординатах.
{{Message_box|
id =pseudoscience1|
align = left|
backgroundcolor = #f9f9f9|
image =Lamp.gif|
heading = Углублённое изучение - Rez@niy|
message = Далее идём в более углублённое изучение. Изучаем построение
Прописываем функцию. Задаём условие: if = Для закрытия тэга end
ПОКА ВСЁ, МОЖЕТ НАПИШУ ЕЩЁ ЧЁ НИТЬ ПОЛЕЗНОЕ
Ну и я напишу.Меченый(Стрелок)
Мой монолог построен так: В - Вопрос,О - Ответ
Начнём: В - Что такое ЦИКЛ? И как он выглядит? О - Цикл это повторение одного и того же действие n-ое кол-во раз выглядит так
for i=1,n do end
За место i может быть любая переменная ,за место n - число которое больше первоначального значения(i) В - А для чего можно использовать цикл? О - много для чего можно.см. ниже Пример 1.Перебор по id/Узнаем монстор ли объект,если да ,то функция возвращает истину(true)
for id=1,65535 do local obj = level.object_by_id(id) if obj~= nil then if IsMonster(obj) then return true else return false end end end
Пример 2.Спавн/
for i=1,5 do --функция повторится 5 раз,следовательно будет заспавнено 5 АК local a = vector() a.x = -220.21 a.y = -19.93 a.z = -158.98 alife():create("wpn_ak47",a,33447,47,65535) end
и т.п. существует ещё цикл с предусловием (while a,n do),но об этом позже В - Какие параметры ГГ можно корректировать скриптами?
О - Таких не много, запись будет такой :db.actor.параметр
Параметры:
radiation health psy_health power
В - а можно ли спавнить в рандомной точке предмет,если да,то как? О - можно Для этого нам понадобится таблица максимальных значений level_vertex_id и game_vertex_id выглядит она так:
local level_vertexes={ l01_escape = {lvid=595580, gvid=44}, l02_garbage = {lvid=384039, gvid=265}, l03_agroprom = {lvid=438379, gvid=693}, l04_darkvalley = {lvid=392517, gvid=813}, l06_rostok = {lvid=69283, gvid=1311}, l07_military = {lvid=915663, gvid=1546}, l10_radar = {lvid=796328, gvid=1868}, l11_pripyat = {lvid=295965, gvid=2269} }
ЗЫ:Извините ,что не для всех уровней,исправлюсь Так,таблица у нас есть ,теперь нам нужно написать функцию спавна.Давайте покажу на Монстрах создадим таблицу с секциями спавна монстров: (Я буду использовать свои наработки ,поэтому таких секции у вас не будет ,эта таблица -пример)
local mutants = { "zombie_ghost_hell", "zombie_normal_hell", "zombie_immortal_hell", "bloodsucker_weak_hell", "tushkano_normal_hell", "snork_weak_hell", "burer_weak_hell", "cat_weak_hell", "chimera_weak_hell", "gigant_strong_hell" }
Таблицу записали ,наконец приступим к оформлению главной функции
function random_spawn() local count = math.random(5,20) --выбираем кол-во заспавненых мобов local section = mutants[math.random(table.getn(mutants))] -- выбираем секцию моба local lv = math.random(level_vertexes[level.name()]["lvid"]) --выбираем левел вертекс local gv = level_vertexes[level.name()]["gvid"] --выбираем гэйм вертекс for ind = 1, count do alife():create(section, level.vertex_position(lv), lv, gv)--\\level.vertex_position(lv) - позиция левел вертекса end end
Далее помещаем вызов функции в bind_stalker.script в net_spawn() и при каждой загрузке будут спавнится мобы в рандомной точке