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

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

 

 

А что там?

В 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
Ссылка на комментарий

Потому что вместо self:GetCheckButton должно было быть handler:GetCheckButton.

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

[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, А можно просто рабочий пример сделать? Хожу вокруг, да около. Просто я в скриптах вообще фигово шарю.

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

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

 

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

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

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

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

 

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

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

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

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

 

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

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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...