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

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

Назвал новый скрипт последней буквой алфавита – вызова новых функций все равно нет. Опять же, пробовал добавлять _G. перед старыми именами и указывать аргументы при замене. Каким должен быть правильный формат записи?

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

Шпаргалка

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

Правильный формат описан в тех постах.

Используй вызов prefetch("модуль_с_подменяемой_функцией") в _g.start_game_callback() для принудительной заблаговременной загрузки.

И вообще убедись путём логирования в консоль, что выполнение происходит в нужном тебе порядке.

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

В тех постах указано два разных формата: script.fx = function() без аргументов и _G.script.fx = function(аргументы) с какой-то промежуточной подменой (если я правильно понял, это сохранение старой функции и вызов ее как есть перед новыми действиями).

Сработал в итоге вариант script.fx = function(аргументы), но только через prefetch нового скрипта.

 

Теперь главный вопрос: какие дополнительные возможности дает подмена на ходу по сравнению с прямым редактированием исходных скриптов?

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

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

Шпаргалка

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

какие дополнительные возможности дает подмена на ходу по сравнению с прямым редактированием исходных скриптов?

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

Нужно это или нет в конкретном моде, можно решить самостоятельно.

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

Другими словами, кроме сохранения исходных файлов разницы нет, так как изменения в скриптах учитываются только при перезагрузке, но не в процессе игры?

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

Шпаргалка

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

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

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

Изменено пользователем 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Гб)/RTX 3060 12Гб/HP Z24n G3 - WUXGA/Kingston HyperX Predator (m2) 240Гб + Kingston A2000 1Тб + 4HDD (11Тб)/Thermaltake smart BM2 - 650Вт/Win10+QtTab

Notebook: Dell Precision 7710/i7-6820HQ/32Гб DDR4 (2х16Гб)/FHD 17,3"/Quadro M4000M 4Гб/ ADATA Legend 960 4Тб + Crucial P3 4Тб/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

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

Шпаргалка

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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