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

ns ogsr NS OGSR: Правки и модификации


D1mon

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

Подскажите пожалуйста как удалить новые кусты и деревья? Ставлю правку без кустов и крон деревьев, но удаляется не вся растительность, авторы явно напихали новых, но вот как это убрать понять не могу, пробовал распаковать архив, удалять деревья но при упаковке вываливает ошибки, может кто поможет пожалуйста 🙏

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

Оно конечно..., но не мои это шахматы.:az1000106:

9 часов назад, ctajlkepkrot сказал:

От ссылок на правки нет толку, в последней солянке нет попки gamedata, может пора в другом виде делать, с setup например.

*папки

FX-8120, Gigabyte GA-970A-UD3P, 16Gb RAM, MSI GTX970 4Gb

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

Мне кажется, кто-то выкладывал правку на добавление телепортов в БАРе. Дескать чтобы не бегать от прехода на Свалку, у перехода один телепорт, а на пригорке у "запорожца" - второй. Или я путаю с другим модом? 

Generaator.gif

i9-13900HX 2.2GHz \ RAM 32GB \ RTX4070 Laptop GPU \ Windows 11(Home)x64 \ (SSD 1 TB)

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

Выкладываю свою первую и единственную правку. Строго не судите.

Скрытый текст

 

УРТ теперь работает от "Черной Энергии" и "Лунного Света". Возможность использования "Батарейки" для телепортации была убрана.

В угоду баланса значительно увеличил стоимость ЧЭ у Сахарова и Плотника.
Возможен конфликт с модами что изменяют цены у торговцев.

Работает с патчем 16.01.23

 

Ссылки для скачивания:

Гугл диск

Яндекс диск

 

 

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

Подскажите пожалуйста - правил treasure_manager - пытался встроить отображение содержимого тайников на метке карты как в ОП 2.2.  в частности правил так 

--' Выдача тайника
function CTreasure:give_treasure(k, npc, friend)
    local v = self.treasure_info[k]
    local sim = alife()
    local sobj = sim:story_object(v.target)
    if sobj then
        news_manager.send_treasure(v.name)

                local txt_items = "%c[255,238,155,23] "
                
                if has_level.map_add_object_spot_ser(sobj.id, "treasure") then
                for i = 1, 65534 do
                local item = alife():object(i)
                if item and item.parent_id == sobj.id then
                txt_items = txt_items.."\\n • "..translate(system_ini():r_string(item:section_name(), "inv_name"))
                end


                                     
        --' Пометить на карте
        local text = "%c[255,238,155,23]" .. game.translate_string(v.name) .. "\\n" .. "%c[default]" .. game.translate_string(v.description)
        level.map_add_object_spot_ser(sobj.id, "treasure", text.."\\n"..txt_items)

не работат, что я накорявил нетак?

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

@MAD_LEX ,

Скрытый текст

 

1. Не работает - вылетает? Не работает - не показывает?

2. Это именно весь участок кода или просто избранные места по мотивам?

 

Как минимум, синтаксически не хватает пары end-ов

local txt_items = "%c[255,238,155,23] "
if has_level.map_add_object_spot_ser(sobj.id, "treasure") then --* проверили наличие метки на тайнике
    for i = 1, 65534 do --* начали перебирать объекты на предмет наличия в нашем тайнике
    local item = alife():object(i)
        if item and item.parent_id == sobj.id then
            txt_items = txt_items.."\\n • "..translate(system_ini():r_string(item:section_name(), "inv_name"))
        end
    end --* забыли закрыть цикл перебора объектов
end --* забыли закрыть проверку

 

@mole venomous,

ну... оно, вообще, если честно - диво дивное. Перебирать все игровые объекты вместо получения инвентарного имени конкретного предмета при заполнени тайника - замечательное занятие. Но, в принципе, должно работать - вот и ладушки, вот и хорошо.

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

Ну не знаю. Ну выводил бы в лог просто... Всего несколько строк

Скрытый текст

            -- Вывести в лог содержимое
            local vv_section = system_ini():r_string(vv.section,"inv_name")
            vv_section = game.translate_string(tostring(vv_section))
            vv_section = vv_section:gsub('[%p%c]', '')
            log3(vv_section)

 

25 минут назад, Купер сказал:

Перебирать все игровые объекты

Скрытый текст

К чёрту. Для тестов же.

 

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

Здесь могла быть ваша реклама.

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

@Купер , спасибо это сдвинуло с места - сумел нормально загрузиться и даже играть до выдачи тайника, при выдаче вылет. Насколько понимаю по логу ругается на это

[17.06.23 09:28:22.119] [print_output([CScriptEngine::lua_pcall_failed])] SCRIPT RUNTIME ERROR:
...l.k.e.r.ns.ogsr\gamedata\scripts\treasure_manager.script:519: attempt to index global 'has_level' (a nil value)
stack traceback:
	[C]: in function '__index'
	...l.k.e.r.ns.ogsr\gamedata\scripts\treasure_manager.script:519: in function 'give_treasure'

А так, это часть кода из правок к файлу treasure из мода ОП 2.2., котороая позволяет смотреть содержимое тайника на карте - пытаюсь адаптировать под NS OGSR 2023

Compare выдает различия между оригинальным кодом treasure.script из мода ОП 2.2. и поправленным для отображения содержимого тайников на карте в 12 строчек:

Оригинал:

--' Выдача тайника
function CTreasure:give(treasure_id,npc)
	if treasure_id==nil then
		abort("! ERROR invalid treasure_id from queue!!!")
	end
	local treasure_info = self.treasure_info[treasure_id]
	local obj = story_object(treasure_info.target)
	if obj ~= nil then
		if obj:clsid() ~= clsid.inventory_box then
			abort("Story object [%s] is not an inventory box", treasure_info.target)
		end

		news_manager.send_treasure(treasure_info.name, object_level_name(obj))

		--' Пометить на карте
		local text = "%c[255,238,155,23]"..translate(treasure_info.name).."\\n".."%c[default]"..translate(utils.cfg_get_string(self.ini, treasure_id, "description", nil, true, ""))
		map_spot(obj.id, "treasure", text)

		-- если тайник не именной, то заменим содержимое
		if treasure_info.named == false then
		   treasure_info.items = self:give_item_list(npc)
		else
			if not self.treasure_info[treasure_id].active then
				treasure_info.items = parse_spawns(utils.cfg_get_string(self.ini, treasure_id, "items", nil, true, ""))
			else
				treasure_info.items={}
			end
		end

		--' Сгенерить вещи
		for __,item_info in pairs(treasure_info.items) do
			for i=1,item_info.prob do
				create(item_info.section, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)
			end
		end

 

Поправленная версия:

--' Выдача тайника
function CTreasure:give(treasure_id,npc)
	if treasure_id==nil then
		abort("! ERROR invalid treasure_id from queue!!!")
	end
	local treasure_info = self.treasure_info[treasure_id]
	local obj = story_object(treasure_info.target)
	if obj ~= nil then
		if obj:clsid() ~= clsid.inventory_box then
			abort("Story object [%s] is not an inventory box", treasure_info.target)
		end

		news_manager.send_treasure(treasure_info.name, object_level_name(obj))

		-- если тайник не именной, то заменим содержимое
		if treasure_info.named == false then
		   treasure_info.items = self:give_item_list(npc)
		else
			if not self.treasure_info[treasure_id].active then
				treasure_info.items = parse_spawns(utils.cfg_get_string(self.ini, treasure_id, "items", nil, true, ""))
			else
				treasure_info.items={}
			end
		end

		local txt_items = "%c[255,238,155,23] "
		
		if has_map_spot(obj.id, "treasure") then
			for i = 1, 65534 do 
				local item = alife():object(i)
					if item and item.parent_id == obj.id then
						txt_items = txt_items.."\\n • "..translate(system_ini():r_string(item:section_name(), "inv_name"))
					end
			end
		end
		
		--' Сгенерить вещи
		for __,item_info in pairs(treasure_info.items) do
			for i=1,item_info.prob do
				create(item_info.section, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)
				txt_items = txt_items.."\\n • "..translate(system_ini():r_string(item_info.section, "inv_name"))
			end
		end
		
		--' Пометить на карте
		local text = "%c[255,238,155,23]"..translate(treasure_info.name).."\\n".."%c[default]"..translate(utils.cfg_get_string(self.ini, treasure_id, "description", nil, true, ""))
		map_spot(obj.id, "treasure", text.."\\n"..txt_items)

 

вот как можно перенести эту фишку с отображением содержимого тайников на карте в NS OGSR? я попробовал но мне явно не хватает опыта - мой опыт скриптера  ограничен OFP, да и то чисто шаблонными вещами - помогите кто может

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

@MAD_LEX , так... а это точно оригинал НС? Потому что, из того, что имеется на руках, несильно похоже.

Из того, что в наличии:

has_map_spot
translate
map_spot

Очередная, всеми любимая ООП-щина. Попробуй поменять:

has_map_spot -> level.map_has_object_spot

translate -> game.translate_string

map_spot -> level.map_add_object_spot_ser

Зачем вот это:

if has_map_spot(obj.id, "treasure") then 
  for i = 1, 65534 do 
    local item = alife():object(i) 
    if item and item.parent_id == obj.id then
      txt_items = txt_items.."\\n • "..translate(system_ini():r_string(item:section_name(), "inv_name")) 
    end 
  end 
end

Интересно на самом деле. Откуда первоисточник? Потому что, опять же, в оригинале Оп-2.2 такого нет.

Изменено пользователем Купер
  • Нравится 1
Ссылка на комментарий
15 часов назад, MAD_LEX сказал:

не работат, что я накорявил нетак?

В оп 2.2 и солянке функции разные

солянка

level.map_add_object_spot_ser(obj.id, "treasure", "Тайник")
        news_manager.send_tip(db.actor, "Получена наводка на Тайник", nil, nil, 10000)

оп  2.2

 map_spot(obj.id, "treasure", "Тайник")
sms("%c[255,255,128,128]".."Получена наводка на Тайник", nil, nil, 20000)

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

@Купер это не оригинал NS, это оригинал ОП 2.2. вот отсюда по заголовку "Содержимое тайника в метке на карте" . В оригинале ОП такого нет, но это было абсолютно работоспособно и удобно (по крайней мере мне) поскольку NS сейчас топ -было бы очень удобно иметь такую правку именно на NS а не на ОП. Спасибо попроюуб сегодня, отпишусь что как

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

@Shurup, ага!

И в _g.script - на предварительную компиляцию, потому что ООП (в смысле - не Оружейный Пак):

-- метки на карте
has_map_spot = level.map_has_object_spot
...
-- Короткие имена для частых функций
translate = game.translate_string
...

Чтобы запутать противника!

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

 

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

Приветствую всех! 

 Столкнулся с проблемой (для меня)... Стволы с устанавливаемыми коллиматорныеми прицелами,  при быстром перемещении вправо-влево, 
имеют как бы инерцию... Т.е. вы вроде как точно должны были попасть в цель, но прицельная точка "живёт своей жизнью" , её попросту заносит...
В результате теряются драгоценные 1-2 секунды...  На стволах (старых) с предустановленным коллиматором, такого эффекта нет!
Из-за этого эффекта , все хорошие стволы теряют смысл (для меня). Возможно кто то этим занимался, прошу помочь! Спасибо!

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

Здравствуйте, существует какая-то правка на изменение переносимого веса? Если да, попрошу поделиться ссылкой

Добавлено  Опричник,

Всё что есть, находится в шапке темы.

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

Здраствуйте, есть ли правка на отключение "Вороства" ?

Украинскими ученными было установлено что ничто так отрицательно не влияет на здоровье печени как неправильно отфильтрованный базар.

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

@taimag , такой правки нет, если говорить о всём, до чего могут дотянуться НПС. Но посмотри на первой странице правки от Опричника и tihik, есть похожее.

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

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

Здесь могла быть ваша реклама.

Ссылка на комментарий
5 часов назад, VORON4 сказал:

рвущиеся рюкзаки

Здесь рюкзаки не рвутся. Но это можно исправить :biggrin:

Скрытый текст

Повесил на коллбек on_item_take возможность разрыва рюкзака. Немного подредактировал готовый код. Теперь максимально возможный вес, при превышении которого возможен разрыв рюкзака, напрямую зависит от ранга ГГ, а точнее, от его числового значения. У новичка, только начавшего игру, рюкзак может порваться уже при перегрузе 100+ кг. У ГГ-мастера рюкзак может рваться от 200 кг. Чем больше опыт, тем крепче рюкзак, независимо от того, какой костюм надет (речь не о возможности двигаться с перегрузом, если кто не понял...).

Кол-во выпавших из рюкзака вещей и вероятность того, что рюкзак порвётся от попытки запихать в него очередной хлам, зависят от уровня сложности. Правда, в игре разница не особо заметна. Когда рюкзак лопается, вещи не разлетаются на километр, а вываливаются рядом. Добавлен соответствующий звук :biggrin:.

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

https://disk.yandex.ru/d/U4By-ghuXkZX1g

 

Изменено пользователем mole venomous
Добавлено  ALEXMANLEO,

Т.к. оффтоп скрыл, примечание для тех, кто будет ставить данную правку (ну вдруг) - рюкзаки рвутся, но другим методом. Но и данный способ тоже имеет место быть.

  • Полезно 2

Здесь могла быть ваша реклама.

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

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

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

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

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

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

Войти

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

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

  • Куратор(ы) темы:

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