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

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

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

Можно ли получить задание после получения инфопорции?

 

Например, в квесте задано:

title = {+info_portion2} step_2, {+info_portion1} step_1

 

Если я получю в игре info_portion1, стартанет ли квест?

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

-

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

@aka_sektor, не "стартанёт" (да и с чего бы?).

 

Квест выдаётся через рестриктор в виде:

on_info = {+инфопоршень} %=give_task(название_квеста)%

Либо через скрипт:

function функция()
	task_manager.get_task_manager():give_task("название_квеста")
end

 

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

@Jurok а только эти 2 способа? Нельзя ли как то выдать при обыске тела NPC?

 

Хотя наверное думаю можно, если прописать в апдейт вызов функции при условии наличия инфопорции. А порцию выдать при обыске.

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

-

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

В xr_conditions.script (ЗП) есть функция:

function dead_body_searching(actor, npc) 
	return actor_menu.dead_body_searching
end

Можешь применить её в том же рестрикторе:

on_info = {-инфопоршень =dead_body_searching} %+инфопоршень =give_task(название_квеста)%

 

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

@Jurok не совсем понял как эта функция работает? Это для всех тел? Или как указывается нужное?

 

Рестриктор мне не надо, шейпы эти.

 

49 минут назад, Jurok сказал:

function функция() task_manager.get_task_manager():give_task("название_квеста") end

Предпочитаю укороченную:

function task_funct_name(first_speaker, second_speaker)
 give_task("task_name")
end

 

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

-

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

Это для всех тел?

 

Для всех. Если тебе нужно, что квест активировался при обыске конкретного трупа, можно сделать рестриктор с определённым радиусом действия, чтобы труп находился в его диапазоне, ну или добавь проверку на его story_id.

 

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

Выдача инфопоршня в кастом дате:

[logic]
active = nil
known_info = known_info

[known_info]
info_portion

 

Как ты мне в скайпе говорил, у тебя труп спавнится из логики рестриктора (spawn_corpse). Так пропиши в секцию непися:

custom_data = scripts\tatata\corpse.ltx

Создавай этот файл и пиши вышепоказанное. При открытии окна обыска получишь свой инфо.

Изменено пользователем BoBaH_671
  • Полезно 1

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

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

Добрый день.
Подскажите, если знаете, STALKER ТЧ, Windows 10,

валидность координат при снятии всегда false, даже в тех местах, где реально точно есть AI.

На координатах, по факту, всё работает, но при снятии выдаётся невалидность. В чём может быть причина?
Функция снятия давно известная и работающая прекрасно на семёрке и хр:
function main_menu:LevelVertexId()
    local hud = get_hud()
 local cs = hud:GetCustomStatic("cs_debug" )
 if cs == nil then
  hud:AddCustomStatic("cs_debug", true)
  cs = hud:GetCustomStatic("cs_debug" )
 end
 local lvid, gvid = db.actor:level_vertex_id(), db.actor:game_vertex_id()
 local pos, dir = db.actor: position(), db.actor:direction()
 local pos2 = level.vertex_position(lvid)
 local valid = pos2:distance_to(pos) <= 0.7
 local msg = string.format("lvid: %d\\n", lvid) ..
    string.format("gvid: %d\\n", gvid) ..
    string.format("pos: %f,%f,%f\\n", pos.x, pos.y, pos.z) ..
    string.format("dir: %f,%f,%f\\n", dir.x, dir.y, dir.z) ..
    string.format("valid: %s", tostring(valid))
 if cs ~= nil then
  cs:wnd():SetText(msg)
 end
end

Ссылка на комментарий
2 часа назад, antreg сказал:

Windows 10

 

2 часа назад, antreg сказал:

на семёрке и хр

Может дело в версии игры? Почему ж тогда одни моды сделанные под 4 патч, не работают на 6 или работают неправильно.

 

p.s. @antreg делаю вывод ещё не покинул моддинг, судя по слухам.

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

-

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

Подскажите пожалуйста, если возможность заменить скриптом тип боеприпаса в оружии? то есть допустим в Макарове  ammo_class = ammo_9x18_fmj, сейчас заряженно. А надо скриптом поменять на ammo_9x18_pmm, с сохраннение количества патронов. Кто знает хэлп???

Ссылка на комментарий
В 06.10.2017 в 11:59, aka_sektor сказал:

Можно ли получить задание после получения инфопорции?

 

Например, в квесте задано:


title = {+info_portion2} step_2, {+info_portion1} step_1

 

Если я получю в игре info_portion1, стартанет ли квест?

В теле поршня пишешь тег с нужным именем:

    <info_portion id="info_portion1">
                <task>имя_твоего_таска</task>
        </info_portion>

 

Сталкер - наше всё!

Ссылка на комментарий
1 час назад, AndrewMor сказал:

В теле поршня пишешь тег

Проблема в том, что в ЗП чтение секции закомментировано.

Эт вариант для ТЧ/ЧН.

-

Ссылка на комментарий
1 час назад, aka_sektor сказал:

Проблема в том, что в ЗП чтение секции закомментировано.

Эт вариант для ТЧ/ЧН.

О как. Сам не знал, с ЗП дела не имел...

Сталкер - наше всё!

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

Просветите кто-нибудь. Вопросы по классам типа ZS_BUZZ и им подобным.

 

1. Классы должны как-нибудь прописаны в движке?

2. В скриптах они прописываются только в class_registrator.script или где-то еще?

3. Что нужно сделать, чтобы зарегистрировать совершенно новый класс? Нужно ли копаться в движке или это все делается скриптами?

4. В lua_help.script есть константы вида

Скрытый текст

    const zone_galantine = 176;
    const zone_mbald_s = 170;
    const zone_mincer = 178;
    const zone_mincer_s = 171;
    const zone_mosquito_bald = 177;
    const zone_radioactive = 180;
    const zone_rusty_hair = 181;
    const zone_buzz_s = 185;
    const zone_zharka_s = 188;
    const zone_electra_s = 189; 
    const zone_ice = 190; 
    const zone_ice_s = 191;

Они как-то поддерживаются/экспортируются движком? Эти константы если что, из Солянки-2016.

 

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

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

Сталкер - наше всё!

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

@AndrewMor ,

1. Есть движковые, которые чисто в движке и есть скриптовые, которые можно создать с помощью class_registrator.

2.  Если имеется в виду название для конфигов (ZS_BUZZ, например), то только там, да.

3. Это делается чисто скриптами. Создаём свой скриптовый серверный класс, наследованный от движкового, и привязываем его к клиентскому в class_registrator.script. Главное, чтобы из движка были экспортированы и серверный, и клиентский классы для нашего объекта. Примеры в игре есть, по ним и сделай.

4. lua_help - это файл чисто для справки, пиши туда что хочешь, а можешь вообще удалить. Константы для новых классов движок расставит сам, и они будут меняться каждый раз при добавлении новых классов. Так что особого смысла их туда писать, даже для справки, нет.

  • Спасибо 1

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

naxac.gif

Ссылка на комментарий
1 час назад, naxac сказал:

Если имеется в виду название для конфигов (ZS_BUZZ, например), то только там, да.

Да, именно для конфигов аномалий.

 

1 час назад, naxac сказал:

3. Это делается чисто скриптами. Создаём свой скриптовый серверный класс, наследованный от движкового, и привязываем его к клиентскому в class_registrator.script. Главное, чтобы из движка были экспортированы и серверный, и клиентский классы для нашего объекта. Примеры в игре есть, по ним и сделай.

Т.е., по аналогии с

    cs_register    (object_factory, "CMincer",            "se_zones.se_zone_anom",    "ZS_MINCE",    "zone_mincer_s")

 

пишем свой класс

    cs_register    (object_factory, "CMincer",            "se_zones.se_zone_anom",    "ZS_PORT",    "zone_port_s")

 

и все? Новая игра нужна?

 

1 час назад, naxac сказал:

Константы для новых классов движок расставит сам, и они будут меняться каждый раз при добавлении новых классов.

А посмотреть их (константы) как-то можно?

Сталкер - наше всё!

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

@AndrewMor, да, всё. CMincer - клиентский класс, se_zones.se_zone_anom - скриптовый серверный, ZS_PORT - параметр для конфигов, zone_port_s - название константы класса в clsid для скриптов. Новая игра не нужна.

Посмотреть - вывести в лог. Например, log("clsid.zone_port_s = "..clsid.zone_port_s).

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

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

naxac.gif

Ссылка на комментарий
2 часа назад, naxac сказал:

CMincer - клиентский класс, se_zones.se_zone_anom - скриптовый серверный, ZS_PORT - параметр для конфигов, zone_port_s - название константы класса в clsid для скриптов. Новая игра не нужна

Вот спасибки. Давно хотел этот момент для себя прояснить, да все недосуг было.

Сталкер - наше всё!

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

Для движения машин используется такая конструкция:

action(CCar, move(move.on + move.fwd, 30), cond(cond.move_end, 3000)) --движение

Мне интересно за что отвечают параметры ф-ций, а именно 2-й параметр ф-ции move, (тот который 30) и для чего нужен cond и что значат пара его параметров? Также 2-ым параметром у cond  была замечана константа time_infinite...

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

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

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

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

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

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

Войти

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

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

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