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

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

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

 

 

А что там?

В SciTE-е справку видел? Так вот попытка "разжевать" каждую функцию, варианты и способы.

Для тебя, скорее всего, может показаться и мало интересно.

 

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

Но я рассуждаю так, как написано. По буквам. Эти буквы говорят ровно столько, сколько процитировано.

А именно говорилось о пробелах и соответствии им шаблона %w+. Только и всего.

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

Надеюсь сюда пишу... Товарищи и господа, как сделать зависимость одной графической опции от другой? Например как в ЧН, там есть 2 опции, одна "вкл/выкл солнечные лучи", а вторая "качество лучей низко/средне/высоко". Дак вот вторая из них недоступна пока не включена первая. Как это сделать?  :D Если что, скрипт... ui_mm_opt_video_adv

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

Ребята, возникла проблема с проигрывание худ анимации при использовании итема. 
Помогите со скриптом , если не трудно. 

svarog2741.gif

 

НС - шлак, солянки - шлак.

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

Интересно, а можно ли скриптом добавить к игровым объектам новый метод (например: db.actor:my_method())? По идее, достаточно иметь ссылку на CScriptGameObject, но вот я что-то не припомню, есть ли такое в оригинале...

Изменено пользователем Shadows
Ссылка на комментарий
Интересно, а можно ли скриптом добавить к игровым объектам новый метод

Можно.

Примерно так :

local act_mt = getmetatable(db.actor)                  -- для ГГ своя метатаблица
local npc_mt = getmetatable(alife():story_object(100)) -- неважно кто, для всех NPC одна метатаблица

local new_npc_methods = {
    new_1 = function(self, arg_1, ... , arg_N) -- собственно новый метод 1. self передается автоматом - это сам объект
        -- action
    end,

    new_2 = function(self, arg_1, ... , arg_N) -- новый метод 2 и т.д.
        -- action
    end,
}

-- не забыть оригинальные метаметоды
local act_index = act_mt.__index
local npc_index = npc_mt.__index

-- переназначение метаметодов
function act_mt.__index(t,k)
    return new_npc_methods[k] or act_index(t,k)
end

function npc_mt.__index(t,k)
    return new_npc_methods[k] or npc_index(t,k)
end


a = db.actor:new_1(arg_1, ... , arg_N)
b = alife():story_object(100):new_1(arg_1, ... , arg_N)
c = alife():story_object(004):new_1(arg_1, ... , arg_N)
Изменено пользователем Nazgool
  • Полезно 2
Ссылка на комментарий

Примерно так

Спасибо, немного переделал таким образом:

local game_object = {}
local game_object_mt = getmetatable(db.actor)
local game_object_idx = game_object_mt.__index
function game_object_mt.__index(t, k)
	return game_object[k] or game_object_idx(t, k)
end

-- методы
function game_object.get_id(self)
	if self:is_game_object() then
		return self:id()
	end
	return -1
end

-- вызовы
log1("id = "..db.actor:get_id())
log1("id = "..db.actor:active_item():get_id())
Всё пашет, только онлайновый актор нужен)) Изменено пользователем Shadows
  • Полезно 1
Ссылка на комментарий

, а можешь сказать на практике зачем это нужно? Я никак не пойму где подобное может понадобится. Вместо method(obj) писать obj:method()? Явно же не для подобного.

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

,

Пожалуйста.

Да, я сделал только набросок. Оформлять можно как душе угодно).

Я вижу, что ты сделал только для actor-а.

Для остальных npc необходимо тоже получать метатаблицу.

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

Вместо method(obj) писать obj:method()? Явно же не для подобного.

Например для совместимости кода от разных платформ.

 

Я вижу, что ты сделал только для actor-а.

Для оружия, коробок, неписей и т.д. этот код также работает. Я же там не спроста вывожу айди для активного предмета в руках. Изменено пользователем Shadows
Ссылка на комментарий

У меня почему-то показало, что это разные метатаблицы...

Ну да Бог с ним. Сталкер мне уже не первый раз разные фортеля выкидывает.

Главное что получилось ))

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

@Charsi,

[error]Expression    : fatal error

[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>

[error]Arguments     : LUA error: ...зработка\gamedata\scripts\ui_mm_opt_video_adv.script:86: attempt to call method 'GetCheckButton' (a nil value)

 

 

Вот так вот у меня получается.

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

[error]Expression : fatal error


[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description :
[error]Arguments : LUA error: ...зработка\gamedata\scripts\ui_mm_opt_video_adv.script:87: attempt to index global 'ctrl' (a nil value)

 

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

@Anonim,

Если поискать по "m_preconditions", то использование этой таблицы найдется только в одном месте.
В файле ui_mm_opt_main.script.
    for i,j in pairs(self.m_preconditions) do
        j(i, _current_id)
    end

Т.е. вызывается твоя функция :

handler.m_preconditions[ctl] = function()
	local opt1 = self:GetCheckButton("option1")
	ctrl:Enable( opt1:GetCheck() )
end
В которую передается аргумент "i". Т.е. контрол "ctl"
ctl = xml:InitTrackBar ("video_adv:track_option2", _st)
А у тебя хоть что-то передается в эту функцию? Нет.
Передай и всё.
handler.m_preconditions[ctl] = function(ctrl)
    ...
    ctrl:Enable(opt1:GetCheck()) -- тогда вот тут "ctrl" и будет определен
Изменено пользователем Nazgool
  • Нравится 1
Ссылка на комментарий

@Nazgool, Теперь в опции просто не заходит.

 

UPD: Отбой, заработало, я тупанул. Спасибо большое вам.

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

Как подключить/зарегистрировать новый скрипт ?

В gamedata\script\ положил, а игра его не видит (нет в пространстве имён).

 

Извиняюсь за "сложность" вопроса, но более подходящего места не обнаружил.

Заранее спасибо за помощь!

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

А расширение правильное поставил? Обычно все новые script-файлы нормально читаются игрой, не надо их нигде регистрировать.

 

Вопрос. Можно ли, а если можно, то как, сделать телепорт точно такой же, как в Оазисе в Зове Припяти? Чтобы точно так же незаметно и быстро телепортировал.

Заранее спасибо.

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

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...