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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий

способ отследить продажу

В биндере актера каллбэк trade_sell_buy_item (функция on_trade).

item: предмет,

sell_bye: true - продали, false - купили,

money: деньги.

  • Спасибо 2

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

 

 

который в поиске гугл по сталкеру и не попадается "bad argument #2 to 'find' (string expected, got table)"

А перевести не пробовали? оно хочет строку, а вы ему пихаете таблицу.

 

local ignore = {"wpn_beretta","wpn_colt1911","wpn_desert_eagle","wpn_fort","wpn_hpsa"}
local function transfer_object_item(item)
   local f = true
   local s = item:section()
   for k, v in pairs(ignore) do
      if s == v then
         f = false
         break
      end
   end
   if f then
      db.actor:transfer_item(item, inv_box_1)
   end
end

 

 

  • Спасибо 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Добрый вечер. Такой вопрос - имеем таблицу с предметами

 

 

  local item_list = { "medkit",

"bread",

"vodka" } 

 

Как рандомно выбрать 3 предмета из этой таблицы, и, допустим, заспавнить их ГГ? Знаю что через math.random работать надо, но как - не знаю.

Не соответствует правилам.

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

 

 

Как рандомно выбрать 3 предмета из этой таблицы, и, допустим, заспавнить их ГГ?
local item_list =
{"medkit",
"bread",
"vodka"}

function spawn_random_item()
local a = item_list[math.random(table.getn(item_list))]
alife():create(a, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end
  • Спасибо 1

Ранее был известен под ником BoBaH_671.

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

Дополню:

function spawn_random_item()
    local item_list = {"medkit","bread","vodka"}
    for i = 1, 3 do
        local a = item_list[math.random(table.getn(item_list))]
        alife():create(a, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
    end
end
  • Спасибо 1
  • Согласен 1
  • Полезно 2
Ссылка на комментарий

Как отформатировать строку таким образом, чтобы число с плавающей запятой состояло из 5 чисел: (0.0001, 0.0010 и т.п), но без точки? (Т.е. 00001, 00010 и т.п.)?

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

Сама функция работает, но наемники нейтралами не становяться.

Где может быть проблема?

P.S Смс-ка выдаеться

 

 

function rel_hack()

relation_registry.change_community_goodwill ("killer", db.actor:id(), (5000))
news_manager.send_tip(db.actor, "relation 0", nil, nil, 20000) 
end

Не соответствует правилам.

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

Добрый вечер!

Подскажите где в папке gamedata можно найти сие если можно конечно и какие еще бывают партиклы?

 

[sr_particle]
name = anomaly2\teleport_out_00 - вот это???
path = gar_osoznanie_path
mode = 2
looped = false
 
Спасибо!!!

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

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

@losiara, particles.xr. Посмотреть какие есть партиклы и как они выглядят можно в СДК.

 

@Kondr48, str:gsub("%.", "")

Изменено пользователем naxac
  • Спасибо 2
  • Нравится 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@Kondr48, так как точка в строке одна, то для gsub можно указать количество замен - str:gsub("%.", "", 1).

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

Украл из ЗП две функции (xr_effects.scripts)

function teleport_npc(actor, npc, p)
local patrol_point = p[1]
local patrol_point_index = p[2] or 0
if patrol_point == nil then
abort("Wrong parameters in 'teleport_npc' function!!!")
end
local position = patrol(patrol_point):point(patrol_point_index)
reset_animation(npc)

npc:set_npc_position(position)
end

function teleport_npc_by_story_id(actor, npc, p)
local story_id = p[1]
local patrol_point = p[2]
local patrol_point_index = p[3] or 0
if story_id == nil or patrol_point == nil then
abort("Wrong parameters in 'teleport_npc_by_story_id' function!!!")
end
local position = patrol(tostring(patrol_point)):point(patrol_point_index)
local npc_id = get_story_object_id(story_id)
if npc_id == nil then
abort("There is no story object with id [%s]", story_id)
end
local cl_object = level.object_by_id(npc_id)
if cl_object then
reset_animation(cl_object)
cl_object:set_npc_position(position)
else
alife():object(npc_id).position = position
end
end

 

Вставил в аналогичный файл ТЧ и пробую через логику на секции on_hit - их применить, но вот ничего не происходит, почему так??? Предполагается что НПС телепортируется на место указанное в путях way..., но он остается на месте.

Делал примерно так:

[hit]
on_info = %=teleport_npc(esc_prov)% ;профильное имя НПС.
и по другому:
[hit]
on_info = %=teleport_npc_by_story_id(5494:stalker_propusk_esc_walk1)% ;sid:название путей в way...
Может что то не так вставил в параметры???
Изменено пользователем losiara

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

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

Подскажите, с чем может быть связан вылет?

 

 

 

[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...adow of chernobyl\gamedata\scripts\se_respawn.script:449: attempt to compare nil with userdata

Не соответствует правилам.

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

Приветствую. А есть ли возможность подменить один объект (не живой) на другой, по старым координатам? То есть спавнится 1 предмет, он имеет определенные координаты, затем он тут же удаляется, а на его место (Учитывая не только xyz, но и наклон) спавнится другой. Объясню зачем это нужно. Для объектов на классе SCRPTOBJ не учитывается коллизия, и объект спавнится в прямой плоскости, не учитывая неровности террейна. Хотелось бы сперва спавнить "осязаемый" клон на любом классе, например II_ANTIR, а затем на его место подменивать уже объект с логикой.

Хотя может можно как-то намного проще, напрямую с объектом работать, сделать его "осязаемым", реально ли..? :unsure: А к объекту на том же II_ANTIR я не смог прикрутить логику, объект можно только подобрать, логика не считывается, может его можно принудительно после спавна заставить читать логику?

 

UPD: нашел одно из решений. Спавню предмет на классе II_ANTIR, и в эту же точку спавню невидимый бокс размером чуть больше на классе SCRPTOBJ. Итого и объект ложится учитывая террейн, и сквозь него нельзя пройти, в тоже время можно его использовать. В общем такой вот костыль..

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

Добрый день!!!

Полазил по форумам и нарыл несколько вариантов функций удаления объектов из игры, не перевода в оффлайн, а именно удаления по типу:

 

function del_tele_dva()
for a=10,65634,1 do
local obj=alife():object(a)
if obj and string.find(obj:name(),"fan_tel") then ---имя секции обьекта
alife():release(obj,true)
end
end
end

или такая:

function remove_freaks()
remove_obj("object")
end

 

Якобы должны работать из логики объекта, но нет не работают не в какой секции. При активации например через диалог тоже не работает. Почему так может быть??? Код кривой или причина в другом???

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

 

Надо было удалить секцию в игре "zone_teleport", созданную через скрипт. Это такой визуальный эффект типа телепорта как воронка.

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

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

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

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

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

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

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

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

Войти

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

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

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