Начальные сведения о скриптах — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Начальные сведения о скриптах — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Добавил в статью новые материалы.Меченый(Стрелок))
Строка 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

ПРЕДИСЛОВИЕ

Lamp.gif Для чего нужны срипты и сведения и их использовании - 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() и при каждой загрузке будут спавнится мобы в рандомной точке

Другие места
LANGUAGE