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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

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

 

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)

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

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

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

[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?

v - значение, к - порядковый номер в таблице? Так?

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

Полтергейст

Разве не применимы? Хм. По идее в 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

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

А вот ещё вспомнил:

Давно хотел спросить - что значит next(название таблицы)? Всю голову сломал, никак додуматься не могу

TRAMP14,

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

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

 

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

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

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

 

TRAMP14,

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

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

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

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

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

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

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

Войти

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

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

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