Перейти к контенту

Рекомендуемые сообщения

Народ, как после переделывания нет-пакета непися в онлайн вынести его, а то амк скрипт его в оффлайн вынес? Что-то у меня не выходит. (Если был вопрос, извините)

Изменено пользователем SkyLoader
Ссылка на комментарий

F.O.B.O

Народ, помогите пожалуйста : мне требуется создать скрипт по смене холодного оружия. Ковырял Народную солянку - там ничего подобного не нашёл.

 

Посмотри в моей подписи мод "Ночные прицелы", там в конце шапки есть ссылка на смену оружия в ножевом слоте для ТЧ.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

Подскажите пожалуйста, как сделать, чтобы держа определенное оружие в руках, прибавлялась пси-защита и уменьшалась выносливость (это мне для курения :)).

Мне "Винторез" - единственный друг, надежда, опора и сила.
Уродов сегодня так много вокруг, патронов бы только хватило. (с)

Официальный Discord-сервер по NS OGSR. 
Неофициальный филиал "У Костра", но тоже Discord-сервер.

Ссылка на комментарий

ALEX BOY

Например, можно так:

local active_item = db.actor:item_in_slot(слот_сигареты) 
  if (active_item:section() == "секция_сигареты") then
    db.actor.power = -0.0009 --/Постепенное именьшение выносливости
       db.actor.psy_health = 0.0007 --/Постепенное прибавление пси-защиты
  end

Ссылка на комментарий

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

yjNrc.gif

dSQwF.png

oZ8SF.png

Ссылка на комментарий

Massaraksh, включи логику.Если при подборе item2 превратить его в item1, то при потере item1 нельзя будет выкинуть item2,ибо этот самый item2 уже не будет существовать.

 

ALEX BOY,

local aitem = db.actor:active_item() 
  if (aitem and aitem:section() == "секция_сигареты") then
    db.actor.power = -0.0009 --/Постепенное именьшение выносливости
       db.actor.psy_health = 0.0007 --/Постепенное прибавление пси-защиты
  end

 

Ссылка на комментарий
Charsi, я, наверное, немного запутанно объяснил. Я имел в виду вот что: в рюкзаке, допустим, есть "АК-74"; если его выкинуть, то на земле появляется "Абакан", а при подборе "Абакана" в рюкзаке опять появляется "АК-74". Ну и с торговлей то же самое.

yjNrc.gif

dSQwF.png

oZ8SF.png

Ссылка на комментарий

по идее можно сделать так - в бинд_сталкере на он_итем дроп пишел скрипт на удаление ак74 и на спавн абакана по координатам актора. На он_итем_тэйк пишем скрипт на удаление абакана и на спавн ак74 в рюкзак актору

Freedom

Ссылка на комментарий

Помогите! В ЗП не работает sr_sound в space_restrictor-ах Чем заменить или как восстановить эту функцию?

Хочу сделать так:

active = sr_sound

[sr_sound]
snd = characters_voice\human_02\stalker\alife\defence\request_help_vs_mutant_1_pda

P.S. В LUA нуб!

Изменено пользователем Greh921
Ссылка на комментарий

Здравствуйте! Возник вопрос: как с помощью скриптовых функций узнать какие предметы в данный момент на поясе у ГГ? Извините, если вопрос уже задавался)

Ссылка на комментарий

Вот что написанно у сингапура в журнале по этому поводу:

Исправлено!

Достаточно долго бытовало мнение, что определить предмет на поясе невозможно. Теоретически так оно и есть, так как слот belt нигде не отслеживается. Но благодаря ПЫСам, которые наконец соизволили объяснить, пусть не прямой, а косвеный, но всётаки способ определения нахождения предмета на поясе. Давайте сначала разберём как мы это будем делать, чтобы в дальнейшем не было глупых вопросов.

Итак, мы имеем инвентарь актора. Чтобы определить список всего инвентаря, который имеется у актора в наличии, нужно использовать метод db.actor:inventory_for_each(ScanInventory)

Где ScanInventory --имя функции которая вызывается для каждого объекта инвентаря.

Спросите, и как же мы определим какие предметы из них на поясе, а какие нет?! Вот это я щас и попытаюсь описать. Массив инвентаря актора состоит из нескольких субмассивов, которые запрашиваются в фиксированном порядке. А порядок здесь такой:

1. Массив рюкзака.

2. Массив пояса.

3. Первый слот.

4. Второй слот.

и т. д.

 

Чтобы при итерации всего списка инвентаря выудить именно массив пояса, нужно определить последний элемент в массиве рюкзака и ближайший элемент в одном из слотов. Предметы находящиеся между ними и будут являться предметами навешанными на пояс belt.

Если с предметами находяшимися в слотах проблем нет, их определение свободно производится через проверку нахождения онных в слотах по их нумерации. То с последним предметом в рюкзаке немного сложнее, тут нету никаких особенных данных различающих их от предметов на поясе. Но...

В связи с тем, что подбираемые или заспавненные предметы в инвентарь, добавляются именно в конец массива рюкзака, можно определять путём спавна/удаления предмета разделителя, по которому мы и будем узнавать конец массива рюкзака.

Тоесть порядок действий такой:

1. Спавним предмет-разделитель в инвентарь актора.

2. Производим итерацию предметов инвентаря.

3. Как только итератор дойдёт до предмета-разделителя включаем ключ добавления инвентаря во внешнюю таблицу.

4. После включения ключа, следующие предметы после разделителя будут добавляться в таблицу.

5. По мере добавления, производим проверку на нахождение онных в одном из слотов. И как только один из них окажется предметом находящемся в слоте, завершаем пополнение таблицы.

После всех этих действий, внешняя таблица будет содержать только список предметов находящихся на поясе.

 

Вот собственно и весь принцип.

 

Итак создаём в скриптах новый файл с именем bind_belt.script, и вставляем в него код:

 

Код:

belt = {} --//внешняя таблица пояса

 

local separator = nil --//переменная для сохранения userdata разделителя

local del_separator = false --//ключь удаления разделителя

local start_add_belt = false --//ключь начала заполнения таблицы db.belt

local open_inventory = false --//ключь открытия/закрытия инвентаря

local stop_update = false

local start_function = true

 

--основная функция итерации инвентаря

--(привязана к функции update() в файле bind_stalker.script)

function IterateInventory()

if stop_update then return end

 

--//удаление всех случайно-сохранённых разделителей

if start_function then

db.actor:inventory_for_each(function(item)

if item:section() == "separator" then

alife():release(item, true)

end

end)

separator = nil

del_separator = false

start_function = false

end

 

--//удаление разделителя (третий цикл)

if del_separator and separator then

this.DeleteSeparator()

stop_update = true

return

end

 

--//итерация инвентаря (второй цикл)

if separator then

db.belt = {}

db.actor:inventory_for_each(ScanInventory)

del_separator = true

start_add_belt = false

else

 

--//спавн разделителя (первый цикл)

separator = alife():create("separator", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())

end

end

 

--функция удаления разделителя

function DeleteSeparator()

alife():release(separator, true)

separator = nil

del_separator = false

end

 

--функция сканирования инвентаря

function ScanInventory(item)

local section = item:section()

 

if start_add_belt and not DetermineSlot(item:id()) then

if not db.belt[section] then

db.belt[section] = 1

else

db.belt[section] = db.belt[section] + 1

end

end

 

if item:section() == "separator" then

start_add_belt = true

end

end

 

--функция определения привязки объекта к одному из слотов

function DetermineSlot(item_id)

for i=0, 12 do

local obj = db.actor:item_in_slot( i )

if obj and obj:id() == item_id then

return true

end

end

return false

end

 

--функция запуска обновления таблицы при закрытии инвентаря

--(привязана к колбэку info_callback() в файле bind_stalker.script)

function InventoryInfo(info)

if info == "ui_inventory" or info == "ui_car_body" or info == "ui_trade" then

open_inventory = true

if separator then

this.DeleteSeparator()

end

elseif info == "ui_inventory_hide" or info == "ui_car_body_hide" or info == "ui_trade_hide" then

open_inventory = false

stop_update = false

end

end

 

--функция запуска обновления таблицы при взятии/выбрасывании предметов.

--(привязана к колбэкам on_item_take() и on_item_drop () в файле bind_stalker.script)

function TakeAndDrop(item)

if item:section() == "separator" then return end

 

if not open_inventory then

if separator then

this.DeleteSeparator()

end

stop_update = false

end

end

 

 

Создаём объект в конфигах (файл config/misc/items.ltx) с именем секции [separator]:

 

Код:

[separator]:identity_immunities

GroupControlSection = spawn_group

discovery_dependency =

$spawn = ""

$prefetch = 32

class = II_BANDG

cform = skeleton

visual = equipments\item_bandage.ogf

description =

inv_name =

inv_name_short =

inv_weight = 0

inv_grid_width = 0

inv_grid_height = 0

inv_grid_x = 0

inv_grid_y = 0

eat_health = 0

eat_satiety = 0

eat_power = 0

eat_radiation = 0

wounds_heal_perc = 0

eat_portions_num = 1

cost = 0

animation_slot = 4

 

 

Затем в файле bind_stalker.script производим пропись всех нужных привязок функций:

 

1. Функция actor_binder:info_callback(npc, info_id):

вписываем в конец тела функции: bind_belt.InventoryInfo(info_id)

 

2. Функция actor_binder:on_item_take (obj):

вписываем в конец тела функции: bind_belt.TakeAndDrop(obj)

 

3. Функция actor_binder:on_item_drop (obj)

вписываем в конец тела функции: bind_belt.TakeAndDrop(obj)

 

4. Функция actor_binder:update(delta)

вписываем в конец тела функции: bind_belt.IterateInventory()

 

Вот собственно и всё.

 

Freedom

Ссылка на комментарий

Ещё один вопрос: в all.spawn есть такое понятие, как physic_object, то есть физический объект, при спавне которого указывается модель, а не секция. Существует ли скрипт для спавна physic_object с указанием визуала, причём с параметром ignore_static?

yjNrc.gif

dSQwF.png

oZ8SF.png

Ссылка на комментарий

_Призрак_, и ещё нужно parent_id потерянного объекта проверять.Если 65535 или nil,то значит выкинули и новый предмет нужно спавнить под ноги ГГ.Иначе переложили и спавнить нужно в туда,куда переложили.

 

На получение Абакана нужно подвешивать спавн в инвентарь АК74.А на получение АК74 - удаление из инвентаря Абакана.Иначе биндер не успеет отработать и зависнет.

Изменено пользователем Charsi
Ссылка на комментарий

Massaraksh, да. Просто такой объект придётся спаунить с заносом в spawn_sections.ltx тобишь:

[korobka_s_othodami]:physic_object
$spawn                = "respawn\korobka_s_othodami"
visual = objects\dynamics\box\box_1c

А physic_object это секция в system.ltx, так же там есть physic_destroyable_object (вроде так), к такому объекту можно ещё и написать логику с секцией [spawn], тобишь:

[spawn]
bandage
antirad
wpn_pb

А модельку нужно прописать, например от ящика деревянного обыкновенного (разрушаемого) или железного ящика. ^_^

 

Добавлено через 13 мин.:

Вопрос - как скриптово нанести хит нпс'у?

Ссылка на комментарий

Читал тутор по спауне вертолётов через скрипт. Не могу понять как ето сделать??? Как вызывать функцию скрипта. Вот монстров знаю как , там функцию прописываеш в диалог. А с вертолётами не получается. Кто сможет обясните пожалуста. Может в есть пример функции рад буду посмотреть.

 

Добавлено через 4 мин.:

Svoboда, попробуй в смарт террейн написать

 

 

[smart_terrains]

 

none = true

по идеи он не должен попадать под смарт террейн

 

Добавлено через 7 мин.:

Svoboда,

 

p0:links = p1(1)

p1:links = p2(1)

p1:links = p0(1)

 

Ети линкы предназначены поочерёдности тоисть с 0 ты можеш перейти сразу на 2 или на 3 схему а в конце можеш закольцовать ними свою схему. Судя по твоей схеме

 

[esc_patrul_1_walk]

points = p0,p1,p2

p0:name = name00---тут name 0

p0:position = -226.22203063965,-20.156566619873,-146.0369720459

p0:game_vertex_id = 47

p0:level_vertex_id = 28501

p0:links = p1(1)

 

p1:name = name02|p=90|t=10000---- а вот тут 2 почему должен же быть один

p1:position = -204.38716125488,-20.550384521484,-145.06907653809

p1:game_vertex_id = 57

p1:level_vertex_id = 48482

p1:links = p2(1)

 

p2:name = name03---тоже самое

p2:position = -169.30325317383,-20.079622268677,-144.25030517578

p2:game_vertex_id = 55

p2:level_vertex_id = 80666

p2:links = p0(1)

 

 

У тебя сдесь закольцовано.

Изменено пользователем djslavikoz
Ссылка на комментарий

_Призрак_, спасибо огромное!)

Строгое предупреждение от модератора n6260
Изучите пункт 2.1.2 правил форума.
Ссылка на комментарий

Здравствуйте Все!

Появилась идея создать спавн объектов(нпс и т.д.) по одному методу:

Имеется файл ("basb.ltx") с текстом:

[options]
num_i=1

[wpn_pm1] --//(1=индекс)
x=234.2365340 
y=3.547351333
z=0.34643600
v=0
g=3252

--//xyz координаты, vg вертексы.

При старте игры делаем следующее:

Парсим этот файл ini:

[секция]~отрубаем секцию объекта(сис. имя),

индекс заносим в таблицу запретных(то есть больше этот объект не заспавнится).

читаем координаты ==>> спавним, следующая секция... и т.д..

Если это получится реализовать, то скажу как делать дальше, что бы расставлять быстрее раз в 10-20.

Вобщем парсим типа так:

for i=1, ini_file("basb.ltx"):r_s32("options", "num_i") do

проверили, нет ли в игноре...

прочли координаты, заспавнили, занесли в игнор лист...

end

Данный метод эффективен тем, что не нужно замерять координаты спавна в игре... прям спавним, и всё запоминается в базу))

Не проверял, но должно получиться.

Изменено пользователем TREWKO
Ссылка на комментарий

НПС'у прописал точку, где он должен остановиться, проиграть анимку, и что-то прборматать:

p2:name = name03|a=stoya_boltaet|s=bar_arena_public|t=18000
p2:flags = 0x4
p2:position = -443.18,-5.74,-141.41
p2:game_vertex_id = 3906
p2:level_vertex_id = 264079

Все работает, но звука от НПС не слышно, нету его.Подскажите, что я не правильно сделал?

Ссылка на комментарий

Здраствуйте товарищи. :russian_ru:

У меня такой вопрос: как правильно уводить NPC в офлайн в Зове Припяти.

И никто не пробовал востановить секцию [spawner] в логике npc в Зове Припяти? А то как ни пробовал она там работать отказалась.

P.S. В скриптах соображаю оочень мало. :wacko2:

Помогите разобратся пожайлуста. :russian_ru:

Зарание спасибо.

Методами теней черныбыля не получается.

Работа_в_offline_и_online со сталкер вики не катит. [spawner] не пашет в зове припяти как ни крути.

Изменено пользователем Gektor

Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу.

 

Ссылка на комментарий
как правильно уводить NPC в офлайн в Зове Припяти.
http://stalkerin.gameru.net/wiki/index.php...e_%D0%B8_online

Vito$, так же как всех остальных:

function spawn_bloodsucker()
alife():create("bloodsucker_strong",vector():set(4.5661993026733,4.5522308349609,36.743591308594),953834,19) 
end

И смотрим тут http://stalkerin.gameru.net/wiki/index.php...%B0%D1%82%D1%8B

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...