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

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

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

Помогите с функцией, пожалуйста!

 

function some_spawn()

local shit = {"wpn_ak74", "wpn_abakan", "kolbasa", "bread", "vodka", "medkit", "bandage"}

alife():create([math.random(table.getn(shit))],  -- здесь я хочу, чтобы актору заспавнилось что-то из "shit"
db.actor:position(), 
db.actor:level_vertex_id(), 
db.actor:game_vertex_id(), 
db.actor:id())

end

 

В общем, поставил пока функцию в диалог с неписем, но в инвентарь абсолютно ничего не спавнится. Какая здесь ошибка?

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

Вот скрипт.

lite_treshold = 0.05    --'насколько должно уменьшиться здоровье с предыдущего обновления, чтобы экран окрасился в красный
crit_treshold = 0.30    --'насколько должно уменьшиться здоровье с предыдущего обновления, чтобы ГГ начало шатать
drop_item_on_crit_prob = 0.20    --'вероятность того, что ГГ выронит оружие
effector_power_coeff = 0.7
prev_health = -1
chk_h_t = 0

function wounded_pp_update()
  if (chk_h_t or 0) < time_global() then
    chk_h_t = time_global()+1000
    if prev_health > (db.actor.health + lite_treshold) then
      level.add_pp_effector("fire_hit.ppe", 2011, false)
      local effector_power = (prev_health - db.actor.health)*100*effector_power_coeff
      level.set_pp_effector_factor(2011, effector_power)
      if prev_health > db.actor.health + crit_treshold then
        level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "")    
        local snd_obj = xr_sound.get_safe_sound_object([[actor\pain_3]])
        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
        if math.random() < drop_item_on_crit_prob then
          local active_item = db.actor:active_item()
          if active_item and active_item:section() ~= "bolt" and active_item:section()~= "wpn_knife" then
            db.actor:drop_item(active_item)
          end
        end
      end
    end
    prev_health = db.actor.health
  end
end

 

 

Ну по такому случаю, тебе можно и не создавать новый скрипт, а подправить и этот, вот только как именно ты представляешь экран в крови, постэфектом или текстурой. Постэфект, если такой и есть делаеться аналогично, я думаю ты уже догадался, но вот есть ли он? Текстурой... грубовато будет, текстура будет резко появляться и так же резко изчезать. А вот про какой конфиг ты говорил - загадка. Куфзук

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

function some_spawn()

local shit = {"wpn_ak74", "wpn_abakan", "kolbasa", "bread", "vodka", "medkit", "bandage"}

alife():create(shit[math.random(7)],  
db.actor:position(), 
db.actor:level_vertex_id(), 
db.actor:game_vertex_id(), 
db.actor:id())
end

А вот так?

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

Такой вопрос, надеюсь, в нужной теме спрашиваю. Если что, пост под снос. Есть АМК 1.4.1 и новые локации. Для спавна динамических аномалий на новых локах вписать их в amk/anoms/anoms.ltx по точкам спавна, это вроде понятно, а вот как указывать вертексы в amk_anoms.script? Заранее спасибо.

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

Вот так :):

function some_spawn(first_speaker, second_speaker)

local shit =
{"wpn_ak74",
"wpn_abakan",
"kolbasa", "bread",
"vodka",
"medkit",
"bandage"}

local item = shit[math.random(table.getn(shit))]

alife():create(item,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
end

Капрал Хикс, в amk/anoms/anoms.ltx прописываются "противоаномальные" зоны - то есть места, где динамические аномалии спониться не будут.

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

Делаю смарт на ЗП для новой локации.Получаю следущее:

Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ...l.k.e.r. - Зов Припяти\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil)

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

у тебя смарт с логикой. Но игра не может или найти прописанный файл с логикой или не может найти в этом файле саму секцию логики, или не прописана актив = логика

Freedom

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

Люди, вот такая у меня проблема, при старте игры на Кордоне такой вылет

[error]Expression : fatal error

[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: ...game$\s.t.a.l.k.e.r\gamedata\scripts\xr_logic.script:126: attempt to index local 'st' (a nil value)

.

Скажите как исправить, если надо могу залить свои скрипты.

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

Подскажите как мне зделать чтоб група НПС перешла из одного смарта в другой(он на другой локации), но чтоб они туда бежали и были группой, а не разбегались?

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

Не подскажете, как заставить вызвать окно диалога между мутантом и ГГ? Хотя бы как в диалоге с О-Сознанием?

Или же сделать сталкера на модели мутанта?

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

Ссылка на комментарий
возможно ли как-то изменить отношение непися к игроку в оффлайне?

Можно сделать, чтобы его отношение изменилось при ближайшем переходе в онлайн - в его биндере сделать строку с условиями и результатами их выполнения (которая condlist). Но смысла нет - из оффлайна он игрока всё равно не подстрелит.

 

В крайнем случае, в оффлайне можно сделать примерно то же самое, только перегрузить функцию community() в se_stalker и подставлять ей принудительные значения. Не знаю правда, как это понравится движку. Можно через net_packet'ы, в amk.script есть соотв. функции.

 

Вообще непонятно, зачем разрабы сделали такие параметры, как health, community и т.п. в виде функций - проще же сделать в виде переменной, и менять её удобнее.

 

xr_logic.script:126: attempt to index local 'st'

Это бывает, когда для какого-то npc не создана таблица db.storage. Бороться с этим бесполезно, надо искать изменения, повлёкшие эти последствия.

Изменено пользователем Полтергейст
Ссылка на комментарий
Полтергейст, кто ищет, тот найдёт :). Для одной локации я уже всё решил и написал. А вот если непись находится на другой - тут по-моему уже ничего не поделать. Дело не в стрельбе, а в изменении отношений по условию, в другом месте. Именно для того, чтобы не париться с нетспоном - переходом в онлайн и обратно. Зачем весь этот геморрой? Вот есть же очень удобные функции для изменения отношений группировок, хоть онлайн, хоть оффлайн - без разницы... А с отдельными неписями, независимо от того, в какой он группировке, вот так мудрить приходится :(...
Ссылка на комментарий

Может глупый вопрос но:

local tbl = {13, 95, 14, 96, 15, 97, 16, 98, 28, 99, 17, 100, 19, 22, 103, 23, 24, 104, 105, 29, 30, 107,  26, 108, 21, 20, 101, 102, 31, 109, 36, 110, 37, 111}

Значения таблицы будут k или v?

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

Полтергейст

Разве не применимы? Хм. По идее в k будет находится порядковый номер, а в v значение. Но можно как ты сказал перебрать такие таблицы так:

for num = startn, endn do
if tbl[num] == clsid.script_stalker then
printf("This is stalker clsid")
end
end

 

Но тогда уж лучше написать так:

for num = startn, #tbl do
if tbl[num] == clsid.script_stalker then
printf("This is stalker clsid")
end
end

верь часто не знаешь сколько значений в таблице

Freedom

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

TRAMP14,

А где можно получить полную таблицу clsid?

Это не таблица, а userdata. Проще говоря, это такой же класс, как и все остальные экспортированные из движка классы, только содержащий одни константы. Нет способа узнать скриптом, сколько там полей. С другой стороны, там только те константы, которые зарегистрированы движком (и их там фиксированное количество) и те, которые добавлены туда скриптом class_registrator.script. Так что можно составить их список вручную.

 

Полтергейст,

Циклы "for k,v in pairs(tbl) do" неприменимы к одномерным таблицам (вместо k и v можно написать всё, что угодно).

Признаться, не понял, что такое "одномерные таблицы". Функция pairs применима к абсолютно любой таблице.

 

TRAMP14,

что значит next(название таблицы)?

это основы Lua. Значит надо смотреть здесь www.lua.ru

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

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

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

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

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

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

Войти

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

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

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...
⚠ ВНИМАНИЕ! НЕ РЕКОМЕНДУЕМ ПРОИЗВОДИТЬ РЕГИСТРАЦИЮ НА ФОРУМЕ.