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

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

Изменения, внесённые подменой, учитываются в процессе игры, но только от загрузки, во время которой произошла подмена, до следующей загрузки из сохранения (когда, в свою очередь, может произойти очередная подмена).

Для кого-то это может быть существенной разницей, если полезно для осуществления тех или иных сюжетных/игровых решений.
Аналогичного результата можно добиться (не)сохраняемыми флагами, условиями и т. п., но это уж кому что удобней и привычней.

Изменено пользователем Kirgudu
  • Полезно 1
Ссылка на комментарий

Всем привет. Хочу обратиться с вопросом: как осуществляется(ЗП) скриптовая проверка на предмет наличия на оружии /брони  апгрейдов техника? 

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

1. Предустановленные апгрейды в конфиге оружия: installed_upgrades.

2. Новые апгрейды в нетпакете: STATE-часть, список сразу после значения condition: заголовок типа s32, значения тип stringZ.

 

Примеры нужны?

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

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Вариант для оружия. Аналогично с броней, только слот (7).

Если подключен модуль [m_netpk.script], список новых апгрейдов можно получить из таблицы data.upgrades вместо чтения нетпакета вручную.

Spoiler
-- пример чтения значений типа chunk: список апгрейдов (ЧН)
local wpn = db.actor:item_in_slot(2)
if not wpn then return end		-- выйти, если слот пуст
local up_list = {}

-- предустановленные апгрейды (конфиг)
if not system_ini():line_exist(wpn:section(), "installed_upgrades") then
	return end		-- выйти, если апгрейд невозможен (РПГ, РГ-6)

local up_mod = system_ini():r_string(wpn:section(), "installed_upgrades")
if up_mod then							-- строка не пуста
	for up_sect in string.gfind(up_mod, "[%w_]+") do	-- тексты вида "буквы, цифры, _"
		up_list[#up_list +1] = up_sect
	end
end

-- новые апгрейды (нетпакет)
local sobj = alife():object( wpn:id() )
local pk = net_packet()
pk:w_begin(0)				-- обязательный сброс позиции
sobj:STATE_Write(pk)
pk:r_seek(18)
pk:r_stringZ()		-- custom data
pk:r_advance(8)
pk:r_stringZ()		-- visual name
pk:r_advance(5)

local n = pk:r_s32() 			-- размер списка апгрейдов
if n > 0 then
	for i = 1, n do
		up_list[#up_list +1] = pk:r_stringZ()
	end
end

-- вывод списка в строку (по желанию)
if #up_list > 0 then
	news_manager.send_tip( table.concat(up_list, ", ") )
end

-- результат
up_b_lr300, up_e_lr300, up_i_lr300, up_g_lr300, up_eg_lr300, up_c_lr300

 

 

  • Спасибо 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Доброго времени суток. Новичок в создании скриптов, поредачить еще могу, а вот самому написать уже сложно. Хочу сделать артефакт, который повышает урон от оружия на условные 10%, как проверить наличие артефакта на поясе я еще представляю, а вот как сделать скрипт на повышение урона нет. По идеи, в функции :on_hit надо ввести проверку надет ли арт, если да, то увеличить урон. Вот только не знаю как мне реализовать этот :on_hit и само повышение урона. Буду благодарен любой подсказке. 

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

Здрасьте.

 

[ТЧ 1.0006]

 

В [scripts\task_manager.script] есть проверка CRandomTask:task_fail(p1, p2), которая каждый апдейт читает состояние активных циклических заданий.

 

Откуда эта проверка вызывается и куда возвращает true/false? В других скриптах и движке следов не обнаружено.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Homtaro ищите в моде "золотой шар". Там повышался урон из определённой винтовки по некоторым мутантам.

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий
55 минут назад, Norman Eisenherz сказал:

Откуда эта проверка вызывается и куда возвращает true/false?

См. элементы function_fail в game_tasks_by_vendor.xml
Вызывается движком.

Ссылка на комментарий
34 минуты назад, imcrazyhoudini сказал:

@Homtaro ищите в моде "золотой шар"

И "Возвращение в Зону". Там тоже есть.

 

Desktop: i7-11700k/Gigabyte Z590 D/64 Гб DDR4-3600 (2х32Гб)/GTX 1070Ti 8Гб/30" WQXGA+24" WUXGA (portrait)/ADATA Legend 960 4 Тб + 4HDD (17 Тб)/Thermaltake smart BM2 - 650Вт/Win10+QtTab

\\\ Дополнения к ОГСЕ 0693 /// \\\ OGSRmod ///\\\АМК-дискорд///\\\Балкон///

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

@Kirgudu Точнее, пожалуйста. Единственное совпадение по части названия – фильтры для списка заданий в [xrGame\ui\UITaskItem.cpp].

 

Нашел в конфигах: [config\gameplay\game_tasks_by_vendor.xml].

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Здрасьте.

 

Метод alife():spawn_id(story_id) должен вернуть значение spawn_id из секции объекта в [all.spawn]: например, для Сидоровича в ТЧ при story_id = 3 должно вернуть spawn_id = 2263.

На деле метод не возвращает ничего и вешает обработку других функций, работающих через тот же колбэк.

 

Рабочий и с виду такой же код есть в OGSR – спавн дополнительных переходов.

В чем может быть проблема?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
20.11.2022 в 00:47, Norman Eisenherz сказал:

В чем может быть проблема?

В невнимательности.

Аргумент, передаваемый в метод alife():spawn_id(), должен прописываться в all.spawn как spawn_story_id = xxx.

А story_id может использоваться в методе alife():story_object() для получения объекта, но не его spawn_id.

  • Нравится 1
Ссылка на комментарий

О невнимательности можно говорить, когда в игре есть хоть какая-то подсказка по формату значения. В [lua_help.script] в обоих методах аргумент number, в распакованном [all.spawn] нет ни одной записи spawn_story_id – только spawn_id, разные названия метода spawn_id() и таблицы spawn_story_id тоже не помогают. Только в движке аргумент указан как spawn_story_id.

 

Еще вопрос: в ТЧ можно отспавнить объект из [all.spawn] через alife():create(spawn_id), в ЧН на такую же запись никакой реакции. Почему?

https://www.amk-team.ru/forum/topic/6138-cs-kovyryaemsya-v-faylah/page/64/#comment-1443024

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Внимательно стоит читать не только документацию по игре в случае её наличия, но и посты, на которые сам же ссылаешься, например, тут: https://www.amk-team.ru/forum/topic/6138-cs-kovyryaemsya-v-faylah/?do=findComment&comment=1443031
Всё в ЧН работает, проверено личным опытом модостроя, а Malandrinus в своём посте разжевал вопрос так, что дальше некуда.

Не нужно путать spawn_id, задаваемый отдельным параметром в секции объекта в all.spawn и тот виртуальный spawn_id, который является порядковым номером этой секции объекта и который при распаковке, например, средствами acdc (с SDK не работал, но, возможно, там тоже) можно увидеть в квадратных скобках в начале секции. Поскольку при перепаковке all.spawn этот номер может измениться, единственно правильным способом получить его при исполнении будет вызов метода alife():spawn_id(spawn_story_id), где spawn_story_id, в свою очередь, также прописан отдельным параметром в секции объекта в all.spawn. Никакие spawn_id, прописанные там же отдельным параметром, не должны использоваться в данном механизме ни в ТЧ, ни в ЧН, ни в ЗП, а story_id можно использовать только для поиска уже заспавненного объенкта перед его удалением, но не для повторного спавна.

Ссылка на комментарий
8 hours ago, Kirgudu said:

Не нужно путать spawn_id, задаваемый отдельным параметром в секции объекта в all.spawn и тот виртуальный spawn_id, который является порядковым номером этой секции объекта

Из чего следует, что я их путаю? Номер в квадратных скобках я даже не упоминал.

 

Насчет оригинального поста Malandrinus – действительно, не дочитал.

 

8 hours ago, Kirgudu said:

Никакие spawn_id, прописанные там же отдельным параметром, не должны использоваться

Тем не менее, такие записи зачем-то есть; можно было бы считать обозначения аргументов простой путаницей в названиях, если бы спавн через spawn_id не работал вообще, но он работает в ТЧ. Видимо, "неучтенка" из ранних билдов…

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий
On 11/14/2013 at 9:32 AM, Malandrinus said:

local spawn_id = alife():spawn_id(spawn_story_ids.some_level_changer)
alife():create(spawn_id)

Если метод spawn_id() принимает только аргумент spawn_story_id, то как работает следующий код из OGSR и почему такой код, в отличие от ТЧ/ЧН, не вешает скрипты?

Spoiler
[ogse_lc_mngr.script]
function lc_create(sid, spot, hint)
	local sim = alife()
	if not sim:story_object(sid) then				-- ссылка на story_id
		local spawn_id = sim:spawn_id(sid)			-- снова ссылка на story_id
		local lc       = sim:create  (spawn_id)
		if lc then
			
		end
	end
end

 

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Ну, если уж ссылаться на OGSR, то там же можно, если не путаю, спаунить и по имени, без всяких story и spawn id.

А нет, я таки путаю. Не нахожу этого в OGSR. Это я только у себя добавлял получения spawn_id по имени:

https://github.com/dsh2dsh/OGSR-Engine/commit/be0d672ca18c80289cfa0c8bd7e6552b513f4587

Quote

Добавил alife():spawn_id( имя )

которая возвращает spawn_id из all.spawn по имени объекта.

 

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

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

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

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

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

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

Войти

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

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

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