S.T.A.L.K.E.R|Модостроение

Объявление

Здесь может быть ваш баннер. Закажи рекламу. Заработай на сайте
Добавь в закладки
Заработай на сайте
Здесь может быть ваш баннер. Закажи рекламу.
БАННЕР САЙТА
Новички и бывалые найдут здесь себе пристанище


Все писатели могут выложить свой рассказ в этой теме: Проза Хорошее чувство юмора? Прошу, докажите это: Юмор FM

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » S.T.A.L.K.E.R|Модостроение » Уроки по модостроению [ЗП] » По мелочам [Скрипты [Scripts]]


По мелочам [Скрипты [Scripts]]

Сообщений 21 страница 30 из 57

21

Запуск эффекта 

float add_cam_effector(
string <имя анимации>, -- имя файла *.anm, адресуемого от папки anims
int <идентификатор>, -- произвольное целое число, которое можно использовать для удаления
boolean <зациклить>, -- проигрывать бесконечно
string <коллбек на окончание>) -- имя функции, которая выполнится по окончании
-- действия эффекта. Функция не принимает аргументов и не возвращает значений.
-- Не вызывается при принудительном завершении эффектора функцией remove_cam_effector.
-- Функция возвращает некое число, для каждого файла анимации своё. Зачем нужно - не знаю.
float add_cam_effector2(string, number, boolean, string) -- в целом тоже самое,
-- что и предыдущая функция. Видимая разница в том, что предыдущая смещала позицию камеры
-- от текущего положения актора, а эта сначала перемещает камеру актора в некую стартовую позицию.
void remove_cam_effector(number <идентификатор>) -- убрать эффектор с ранее заданным номером

----

void add_pp_effector(
string <имя постэффекта>, -- имя файла *.ppe, адресуемого от папки anims
int <произвольный идентификатор>, -- для дальнейшего удаления
boolean <зациклить>) -- проигрывать бесконечно
void set_pp_effector_factor(
int <идентификатор>, -- число, ранее заданное при установке эффекта
float <интенсивность>) -- (0, 1) -- интенсивность эффекта
void set_pp_effector_factor(
int <идентификатор>,
float <интенсивность>,
number <скорость изменения>) -- не до конца ясно, но вроде как скорость перехода

-- от текущего состояния к заданному. По какому принципу считается время перехода - непонятно
void remove_pp_effector(int <идентификатор>) -- убрать эффект

----

-- следующие две функции практически не используются. Задействованы незначительно только в ЗП
void add_complex_effector(
string <секция>, -- имя секции в system.ltx, с описанием эффекта
int <идентификатор>)
void remove_complex_effector(int <идентификатор>) -- отмена эффектора

0

22

Постоянный эффект на локации

if level.name() == <имя уровня> then
   level.add_pp_effector(<имя постэффекта>, <какой-либо номер>, true)
end

Имя постэффекта указывать относительно папки anims

0

23

Телепортируем ГГ

function new_teleport(actor, npc, p)
db.actor:set_actor_position(vector():set(X,Y,Z),GameVertex,LevelVertex) -- Позиция "Куда переместить ГГ"
level.add_pp_effector ("teleport.ppe", 333, false) -- Прокручиваемый эффект из папки anims
end

0

24

Спавн монстра

function mutant_sim_attack()
alife():create("chimera_normal",vector():set(116.86434936523,-3.9353849887848,176.99018859863),1167207,138)
end

0

25

Спавн через скрипт единожды

function spawn_one ()
if not db.actor:has_info("spawn_one")
then
alife():create("NPC",vector():set(-118.155,12.919,-138.009),116155,934)
db.actor:give_info_portion("spawn_one")
end

Тут мы перед спавном проверяем: если у ГГ отсутвует поршень Spawn_one, то мы заспавним NPC и выдадим ему этот самый инфопоршень. А если у нас уже есть инфопоршень - то спавн не произойдет

0

26

Передаем предмет ГГ

dialogs.relocate_item_section(second_speaker, "Предмет", "in")

0

27

На разных локациях - разная погода

Создать погодные настройки, привязать их к локации в game_maps_single.ltx
Через скрипт:

if level:name()=="что-то" then
if level:get_weather()~="что-то" then
  level:set_weather("что-то")
end
end

0

28

При получении инфопоршня запускаем квест

if has_alife_info("требуемая для выдачи квеста инфа") and not has_alife_info("инфа на выдачу квеста") then
db.actor:give_info_portion("инфа на выдачу квеста")
task_manager.get_task_manager():give_task("секция квеста")
end

0

29

Тушим костер

Подойти к костру вплотную и выполнить вот такой код:

for i=1,65535 do
   local s = sim:object(i)
   if s then
       local o = level.object_by_id(s.id)
       if o  then
           local cf = o:get_campfire()
           if cf and o:position():distance_to(cact:position()) < 5 then
               cf:turn_off() -- turn_on
           end
       end
   end
end

Гаснет не мгновенно и не полностью, просто меняет партиклы на "тление угольков с лёгким дымком"

0

30

Рандомный спавн объектов

function respawn()
local level_vertexes={
zaton = 1844793,
jupiter = 1422445,
pripyat = 477061
}

local game_vertexes={
zaton = {0,316},
jupiter = {317,665},
pripyat = {666,856}
}

local lname= "jupiter"
local gvn,gvx,lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname]
for i=1,1000 do
new_lv = math.random(1,lvx)
local pos = level.vertex_position(new_lv)
local new_gv = 0
local min_dist = 100000
for a = gvn, gvx do
g1 = game_graph():vertex(a):game_point()
if g1:distance_to(pos)<min_dist then
min_dist = g1:distance_to(pos)
new_gv = a
end
end
alife():create("wpn_ak74",pos,new_lv,new_gv)
pos = level.vertex_position(new_lv)
create_anomaly("zone_mine_electric",1,new_lv,new_gv,pos)
end
end

0


Вы здесь » S.T.A.L.K.E.R|Модостроение » Уроки по модостроению [ЗП] » По мелочам [Скрипты [Scripts]]


Создать форум © iboard.ws