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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

HellStalkerDog, ну ты же сама задаешь ему в логике быть снайпером и задаешь путь/точку куда ему идти и где быть ...

Хочешь чтобы не сразу уходил - добавляй секций в логику, типа уходить после того-то и того-то ... или спавни сразу на точку где должен быть.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

ЧН. На ряде локаций имеются m точек. При старте новой игры необходимо рэндомно выбрать из них n точек и заспавнить там аномалии(одну и ту же). (Цифры пока взял с потолка).

---создаем список точек на каждой локе---
local position_table = {}
position_table["march"] = {
    {246.804992675781,15.5329999923706,494.454986572266},
    {247.100006103516,13.7950000762939,439.272003173828},
    {339.779998779297,-6.9539999961853,368.662994384766}
}
position_table["escape"] = {
    {246.804992675781,15.5329999923706,494.454986572266},
    {247.100006103516,13.7950000762939,439.272003173828},
    {339.779998779297,-6.9539999961853,368.662994384766}
}

Дальше необходимо выбрать из этих точек (на каждой локе) n количество. Как будет выглядеть фунция рэндомного выбора?
math.random

Самый некомпетентный на форуме.

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

Всех с наступающим рождеством!

У меня вопрос: Как вызвать в функции сообщения, чтобы вместо дефолтной иконки, отображалась иконка из ui/ui_iconstotal.dds

 

К примеру функция смс

 

function yan_sm_zone_sms()
news_manager.send_tip(db.actor, "%c[255,160,160,160]".."ШРАМ:".."\\n".."%c[255,255,128,128]Готово! Охранника зачистил! Профессор, давай быстрей телепортируйся, и отключай защиту мать твою! .......".."".."\n", nil, nil, 40000)
end

 

В news_manager.script - Иконка Шрама, пусть по местонахождению наз. shram

 

tips_icons = {
    killer   = { 0, 658},
              shram = { 83, 375}
}

 

Т.е. отобразить с сообщением имя (Шрам) и так же его иконку. :ny_rolleyes:

 

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

Старлей

Можно конечно и зациклить, но суть не в этом, тогда и спавн повторяться будет, можно конечно и его обойти, но звук при этом только из одного файла воспроизводиться будет, вот в чем проблема, а надо что бы все поочередно или рандомно без разницы с задержкой 1-3 сек. одна от другой!!!

characters_voice\scenario\rnd_fallscream, characters_voice\scenario\rnd_moan, characters_voice\scenario\rnd_the_horror3, characters_voice\scenario\rnd_scr3, characters_voice\scenario\rnd_ratchant

Artos

Хочешь рандомно и весь список - тут как раз своя функция сгодится, выбирая из списка и отсеживая его окончание ...

Именно так и хочу, однако штатных функций не обнаружил.

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

Жизнь следует измерять поступками, а не временем...

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

Igor88.89, Я через функцию хочу вызвать не только имя, но так же иконку.

 

losiara Не пробовал по методу рупоров, т.е. схему, корая заложена в них? Звуки проигрываются поочерёдно. Через sound_theme.script Пример: snd = radio_music, далее схему отыграть в своём рестрикторе?

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

Igor88.89

сорри, не помню точно, но помойму при спавне через скрипт, что бы заспавнить на определенный локе - обязательно надо указывать lvlid и gvid
position_table = {
      [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой},
      [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой},
      [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой}
-- и так далее
     }
local aNums = {}

function spawn_anoms()
local rCount  = math.random(1,#position_table)
     for i = 1,rCount do
          local rNum  = math.random(1,#position_table)
          if aNums[rNum] then
              rNum = rNum+1 --что бы не спавнить в одно и тоже место
          end
          local tT = position_table[rNum]
          alife():create("секция твоей аномалии", vector():set(tT[1],tT[2],tT[3]), tT[4], tT[5] )
          aNums[rNum] = {} --примено так, сорри если что, точно не помню
     end
end

 

 

в прочем как-то так)), но стоит доработать, так как всеравно может заспавниться аномалия по одним и тем же координатам

Ссылка на комментарий
Igor88.89 #position_table - Операция получения длины массива/таблицы, а math.random(1,#position_table) берет рандомное число из промежутка от 1, до числа, которое вернет #position_table Изменено пользователем Viнt@rь
Ссылка на комментарий

Т.е. у меня один массив с координатами должен быть, ведь lvlid, gvid точно указывают на место на любой локации?

Доработать нужно в любом случае. И массивов придётся делать на каждую локу. Необходимо на каждой локе из m точек рэндомно выбрать n-нное количество и родить там аномалии.

Изменено пользователем Igor88.89

Самый некомпетентный на форуме.

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

да...

 

только обязательно учти

стоит доработать, так как всеравно может заспавниться аномалия по одним и тем же координатам
Изменено пользователем Viнt@rь
Ссылка на комментарий
Igor88.89, вообще можно без координат обойтись. Для спавна через alife():create() координаты можно получить из левел вертекса так: level.vertex_position(lvid). Длина стороны аи-ноды составляет 0,7 метров, так что, думаю, такой точности для спавна аномалий хватит.
Ссылка на комментарий

Igor88.89, тогда примерно так

local lTbl = {"marsh","escape"}
local position_table= { 
["marsh"]  = {
      [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой},
      [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой},
      [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой}
-- и так далее
},
["escape"] = {
      [ 1] = {246.804992675781, 15.5329999923706, 494.454986572266,lvlid-твой,gvid-твой},
      [ 2] = {247.100006103516, 13.7950000762939, 439.272003173828,lvlid-твой,gvid-твой},
      [ 3] = {339.779998779297, -6.9539999961853, 368.662994384766,lvlid-твой,gvid-твой}
-- и так далее
}
-- и так далее
}

function spawn_anoms()
for k,v in pairs(lTbl) do
local aNums = {}
local rCount  = math.random(1,#position_table[v])
     for i = 1,rCount do
          local rNum  = math.random(1,#position_table[v])
          if aNums[rNum] then
              rNum = rNum+1 --что бы не спавнить в одно и тоже место
          end
          local tT = position_table[rNum]
          alife():create("секция твоей аномалии", vector():set(tT[1],tT[2],tT[3]), tT[4], tT[5] )
          aNums[rNum] = {} --примено так, сорри если что, точно не помню
     end
end
end

 

 

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

Запутался...

 

Вручаем неписю в руки что-нибудь. Скажем, item:enable_attachable_item( true ). Вручилось. Непись замечательно проигрывает с этим предметом анимации - ест/пьет/на гормошке играет. Вдруг, внезапно, непись умирает. Что будет идеологически правильно:

сделать enable_attachable_item( false ), ничего не трогать вообще, удалить итем нафиг, что-то еще(что именно) ?

 

Код, который смотрю, делает первое. Причем, похоже, после того, как по on_death удалил сам предмет. Что странно. Ну, то есть,

function action_foo:finalize()
item = npc:object( "figovina" )
if item then enable_attachable_item( false ) end
end

удаление вызывается в on_death() из мотиватора раньше, чем вызовется action_foo:finalize().

 

P.S. На всякий случай переформулирую: я правильно понял, что в :finalize() схемы предмет можно дисейблить, только если выполнение схемы прервано нештатным образом, но непись при этом жив ?

И, кстати, объект, наверное, стоит не получать прямо здесь по секции, а где-то хранить, на случай, если их c такой секцией окажется несколько ?

А удалять у мертвого непися можно в любой момент, при условии, что он (предмет, да и непись тоже) ни кем и ни чем больше не трогается ?

 

P.P.S. Аналогичный вопрос для случая с on_net_destroy(): с предметами в руках у неписей в этот момент, наверное, ничего делать не стоит ?

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

Всем доброго времени суток, с прошедшими праздниками и наступившим Рождеством. Возник такой вопрос: что отвечает за непереход некоторых NPC в offline? Объясняю: в SoC на кордоне новички с Волком переходят в offline, а солдатня на блокпосте - нет. Сравнил их секции в All.spawn и заметил разницу в флагах. Причина только в этом?

Лучше спросить глупость, чем её совершить.

Ссылка на комментарий
лнкс, хотя в данном случае дело в этом, но в общем случае не обязательно. Флагами flSwitchOffline/flSwitchOnline можно управлять методами can_switch_offline()/can_switch_online() соответствующих серверных объектов. Доступ к этим методам можно получить через регистрацию сетов с помощью object_factory. Смотри se_stalker.script, например.
Ссылка на комментарий

Попробую. Ещё вопрос: заспавнил рюкзак

[10279]
; cse_abstract properties
section_name = physic_object
name = predbannik_physic_object_0108
position = -425.600646972656,12.9063091278076,-149.377365112305
direction = 0,-1.92239999771118,0

; cse_alife_object properties
game_vertex_id = 3908
distance = 0
level_vertex_id = 290047
object_flags = 0xffffff3a

; cse_visual properties
visual_name = equipments\item_rukzak

; cse_ph_skeleton properties

; cse_alife_object_physic properties
physic_type = 0x3
mass = 1000
fixed_bones = link

, сделал из него тайник

[10280]
; cse_abstract properties
section_name = inventory_box
name = predbannik_inventory_box_0008
position = -425.600646972656,12.9063091278076,-149.377365112305
direction = 0,-1.92239999771118,0

; cse_alife_object properties
game_vertex_id = 3908
distance = 35
level_vertex_id = 290047
object_flags = 0xffffff3b
custom_data = <<END
[spawn]
mag_30_7.62x39_fmj = 10
END

; cse_visual properties
visual_name = equipments\item_rukzak

, забираю всё из тайника и вижу как один из рюкзачков плавно поднимается примерно на метр. Как это можно исправить?

Лучше спросить глупость, чем её совершить.

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

лнкс, а зачем ты спавнишь два рюкзачка на одно и тоже место? Тебе, по сути, достаточно второй секции в качестве тайника.

У тебя поднимается второй рюкзак с именем predbannik_inventory_box_0008, поставь ему также fixed_bones = link и он подниматься перестанет.

 

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

Сообщение от модератора ColR_iT
HellStalkerDog и strelok200, задавайте, пожалуйста, вопросы в соответствующие темы.

Посты Ваши переместил, в следующий раз просто удалю.

Спасибо за понимание.

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

Igor88.89

вот сдесь я допустил ошибку

 

надо не

local tT = position_table[rNum]

 

а

local tT = position_table[v][rNum]

 

вот только не помню передастся ли v из первого цикла во второй, если нет то после первого цикла добавь такое

 

local level_name = v

и тогда это будет так

local tT = position_table[level_name][rNum]

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

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

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

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

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

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

Войти

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

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

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