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

[SoC] Ковыряемся в файлах


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

@AndreySol, вот функция спавна такого рюкзака:

function use_rukzak(pid)


local obj
local pos = db.actor:position()
obj = alife():create("m_inventory_box", pos, db.actor:level_vertex_id(), db.actor:game_vertex_id())
   if (obj) then
     local t = amk.get_invbox_data(obj)
     t.custom = "[logic]\ncfg = scripts\\treasure_inventory_box.ltx"
     amk.set_invbox_data(t, obj)
     level.map_add_object_spot_ser(obj.id, "my_treasure", "Мой тайник")
  end
end

 

 

А как его подобрать/уничтожить при наведении курсора? Там же выводится "Обыскать тайник"? А если мне нужно именно обыскать, а не убрать его совсем?


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

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

@AndrewMor,

в scripts\\treasure_inventory_box.ltx меняешь tips на нужный текст

@AndrewMor,

в scripts\\treasure_inventory_box.ltx меняешь tips на нужный текст

Это и ежу понятно. Я ж говорил, чтобы для разных тайников свою подсказку выдавать. Для пней - свою, для сейфов - свою. Ну и так далее. А если tips сменить - у всех тайников она опять же одинаковая будет.

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

Всем добрый вечер.
 
Как отключить получение автоквеста при заходе на локацию? (По типу "Убить крововсоса на территории Тёмной Долины" и "Уничтожить лагерь разбойников на Дикой Территории") И можно ли это сделать без начала новой игры?
 
config\misc\task_manager.ltx:
; init_condition =

 

dc

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

"Хорошая болезнь - склероз: абсолютно ничего не болит и каждый день новости!"
"А я всё жду и жду твоих аргументов. Всё что я пока вижу - это классическое "Я Д'Артаньян..." (Carnby)
"Рожа обычная, её не выбирают!" (Дьяк)

Теперь рюкзак-схрон имеет метку, по которой его легко найти. Но идея состоит в следующем: если он мне в этом месте больше не нужен, как его обратно подобрать

В bind_stalker.script


--// после строки
function actor_binder:take_item_from_box(box, item)
--// добавить
if box:is_inv_box_empty() and box:section()=="m_inventory_box" then
	level.start_stop_menu(level.main_input_receiver(), true)
	alife():create("treasure_item",box:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)
	alife():release(alife():object(box:id()))
end
Вылетать будет. Как те "рюкзаки Кости". И вообще-то вопрос для более соседней темы, по тому как очень много букв, которые еще написать надо. На самом деле - "сбрасываемый рюкзак", только правильного я не видел еще. dc

 

В ОП-2 не вылетает. Все подбирается спокойно.

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

10.png

@AndreySol, Здрасте. Я предполагал, что у них единая система в одном файле (именно скрипт, выдающий квест при заходе на локу). Я о заданиях по убийству кровососа в ТД, уничтожении лагеря бандитов на ДТ и так далее. 

"Хорошая болезнь - склероз: абсолютно ничего не болит и каждый день новости!"
"А я всё жду и жду твоих аргументов. Всё что я пока вижу - это классическое "Я Д'Артаньян..." (Carnby)
"Рожа обычная, её не выбирают!" (Дьяк)

Это и ежу понятно. Я ж говорил, чтобы для разных тайников свою подсказку выдавать. Для пней - свою, для сейфов - свою. Ну и так далее. А если tips сменить - у всех тайников она опять же одинаковая будет.

При создании тайника указывай Файлы с разными подсказками.

А теперь скажите мне, кто-нибудь: tips - это в данном случае вообще что ? И где ?

tips это параметр здесь:

[logic]

active = ph_idle@enable

[ph_idle@enable]

nonscript_usable = true

tips = st_search_treasure

А в игре, как уже сказали, подсказка при наведении прицела на объект. Изменено пользователем abramcumner

Подскажите, как проверить переменную из другого скрипта

 

Имеется биндер, в нём переменная initialized изначально false

function mobile_binder:__init( obj ) super( obj )
        self.object      = obj
	self.initialized = false

Далее переменная становится true

function mobile_binder:update( delta )
	object_binder.update( self, delta )

	-- инициализация
	if (self.initialized) then
		_fp_manager.update()
		self:CreateSpawnProperties()
	else
	    self:DelChangerTeleport()
	    self.initialized = true
	end
	

Как проверить её во внешнем скрипте

	if (mobile_binder.initialized) = true then
		news_manager.send_tip(db.actor, "Существует!", nil, "nano", 5000)
--		_bind_mobile.mobile_binder:MmOpenMenu()                        -- вызов метода того-же скрипта, в котором переменная
	else
		news_manager.send_tip(db.actor, "Не существует!!!", nil, "nano", 5000)
	end

Вылет, причина: внешний скрипт - nil

 

 

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

Есть хабар - пойдёт базар :az1000106:

 

 

Вылет, причина: внешний скрипт - nil

 

 

 

if (mobile_binder.initialized) = true then

 

Может всё-таки ?

 

if (mobile_binder.initialized) == true then

  • Согласен 1

Кроме того, проверкой во внешнем скрипте

if (mobile_binder.initialized) == true then 

ищется переменная initialized в модуле mobile_binder.script (может не быть модуля, либо переменной в нём - отсюда и ссылка на nil), в то время как здесь

function mobile_binder:__init( obj ) super( obj )
        self.object      = obj
	self.initialized = false 

значение присваивается свойству экземпляра класса mobile_binder, а не переменной скриптового модуля.

Для правильной проверки надо во внешнем скрипте сначала получить доступ к этому экземпляру класса, а затем уже читать его свойства.

  • Спасибо 1

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

во внешнем скрипте сначала получить доступ к этому экземпляру класса

По русски - это выглядит так:

 

 В биндере пишите

 

local mobile = nil

function get_mobile_binder()
if mobile == nil then
mobile = mobile_binder()
end
return mobile
end
 
Во внешнем скрипте пишите
 
local mobile = mobile_binder.get_mobile_binder() -- mobile_binder - это имя файла, где находится класс                                                                                --mobile_binder
 
И только после получения доступа пишите
 
if (mobile.initialized) == true then 
Изменено пользователем makdm
  • Спасибо 1

@makdm, не всё так однозначно.

Этот пример годится только в том случае, если биндер один и инициализируется один раз. А если много и если один экземпляр может быть в данный момент времени инициализирован, а другой - нет? Яркий пример - биндеры любых множественных объектов в игре, таких как НПС, монстры, аномалии и т. д.

Файлов ТЧ под рукой нет, но подозреваю, что mobile_binder относится как раз к такому типу. В таком случае надо начинать плясать от конкретного объекта.

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

 

 

В таком случае надо начинать плясать от конкретного объекта.

Я вообще-то в своих скриптах  "пляшу" всегда от обратного.

Т.е. я не беру переменную из биндера, а наоборот биндер передаёт нужную мне переменную в мой скрипт.

А уже скрипт обрабатывает её и выполняет те или иные действия.

@stalk9r, я бы наверное сделал как-то так (это для единичной проверки переменной класса):

check = module and module.class() and module.class().variable
if check then
--...
end
А так в общем получи вначале доступ и работай с классом сколько угодно.

 

Это и ежу понятно. Я ж говорил, чтобы для разных тайников свою подсказку выдавать. Для пней - свою, для сейфов - свою. Ну и так далее. А если tips сменить - у всех тайников она опять же одинаковая будет.

В биндере тайников при спавне можешь им в зависимости от визуалов/условий назначать нужную подсказку, и так же по условиям ее можно сменить.

@Struck, 

Тут вроде уже всё выяснили, а ты снова предлагаешь некое решение. "Никакое".
makdm уже сказал как решать подобную проблему.
 
Интересно, чем разумное согласие Kirgudu, вызвало негодование layMod в его оценке сообщения?
 
stalk9r,
Объектов mobile_binder действительно может быть великое множество.
Чтобы проверить переменную, тебе нужно получить конкретный объект mobile_binder.
Способов хватает, так что найдёшь. Напр level.object_by_id(id), alife():object(sect or id)...
В общем дерзай.
 
Ну или в конце концов можно поступить железобетонно (если объект один).
Вот тут добавить :
function mobile_binder:__init( obj ) super( obj )
    _G.my_mobile_binder = self
И теперь в любом месте можешь узнать состояние переменной initialized :
local what = _G.my_mobile_binder.initialized 

_G для наглядности. Чтобы было видно откуда ноги растут.

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

Народ, добрый день! Подскажите плиз, как выдирают локации из других модов? Мне из мода "ФОТОГРАФ" нужна локация "Червоне Дышло" ну короче объясните плиз как это делается!

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

 

 

Имеется биндер, в нём переменная initialized

Так из биндера её и надо читать, а не из внешнего скрипта.

local my_mob_binder = obj:binded_object()
if my_mob_binder.initialized then

(где obj - объект, с биндера которого надо прочитать переменную)

  • Согласен 1

С Новым годом, с Новым счастьем всех-всех-всех!

Не могу сделать никаких нужных мне изменений в играх Секрет Дианы и Операция Омега, обе SoC, дошёл до распаковки db-файлов, изменений LTX-файлов в них и запаковки db-файлов обратно, изменений нет и никакой реакции игр на эти изменения.

Может быть, кто-то знает, как сделать эти изменения, дать ссылки или это вообще невозможно.

Работу с All spawn я только изучаю, у меня Вин-ХР.

 

Распаковка ЛЮБОГО мода, как и всей трилогии, осуществляется конвертером Бардака.

Качай последнюю версию и читай ридми. Там всё подробно описано.

Оллспавн, распаковывается утилитой ACDC. По данному вопросу есть целая тема.

BFG

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

Для BFG.

С Новым годом, с новым счастьем, коллега.

Боюсь, что я некорректно высказал мысли, я написал, что я «…дошёл до распаковки db-файлов ….».

Да, я всё сделал как обычно: распаковал 1 файл db0 (там почти всё есть), сделал изменения в нужных мне LTX-файлах, и запаковал этот распакованный файл обратно, пакером от highlandera.

Открыл игру и увидел, что моих изменений нет.

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

До этого я менял нужные мне LTX-файлы  в файле gamedata, результат отрицательный.

Неужели пакер от highlandera не годится?

Может быть, действительно скачать конвертер от Бардака, попробую.

Но я распаковывал изменённый мной db0, и все изменения там на месте.

Вот суть вопроса, и что я неправильно делал или там какая-то блокировка изменений, ну, например, как в старом АМК 1.4.1. там меняешь файлы в gamedata, а игра пишет, нельзя, бо-бо и не запускается, но мне удалось обойти это?

 

Для  Dennis_Chikin.

С Новым годом, с новым счастьем, коллега.

Я думал, что «стук по батарее» это такое компьютерное иносказание, ну как «залить в шапку» и посмотрел в свою ЛС и понял, что это ваш новогодний розыгрыш, спасибо, или такой сленг.

Я не очень хорошо понимаю эти сленги.

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

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

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

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

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

Войти

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

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

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