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

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


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

Monnoroch, Garrett

 

Спавн ВСЕМ неписям в инвентарь (затрагивает и тех, кто присутствует изначально!)

 

Нужен файл se_stalker.script. Ищем функцию se_stalker:on_spawn()

 

Самый простой вариант - безусловный спавн. У меня это выглядит так - добавляется перед end одна строка (для каждого предмета, само собой):

 

spawn.inv("wpn_pkm", tonumber(self.id) or tonumber(self:id()))

 

И сама функция спавна в инвентарь из моего файла spawn.script:

 

function inv(item,npc_id)

if npc_id == nil then

npc_id = db.actor:id()

end

local obj = alife():create(item,vector():set(0,0,0),1,1,npc_id)

return obj

end

 

Почему такие значения координат: Проверял, в случае спавна в инвентарь координаты не имеют значения. Во всяком случае, при значении геймвертекса 1000 (не выяснял, какая это локация, но точно не кордон) весь народ на кордоне (дальше не ходил) все равно получает ПКМ-ы.

 

Далее, условия спавна.

 

- спавнить не постоянно, а с некоторой вероятностью

 

условие будет таким:

 

if math.random() < N then -- N вероятность спавна от 0 до 1. 1 и выше - 100% спавн, 0 и меньше - никогда не заспавнится.

сам спавн

end

 

- отлично было бы, если спавнить эти предметы зависимо от ранга неписи (например, новичку в рюкзак - "медузу", ветерану - "бабкины бусы")

 

local npc_rank = ranks.get_obj_rank_name(npc) -- ранг НПС

if npc_rank == "novice" then

спавн для новичка

elseif npc_rank == "veteran" then

спавн для ветерана

elseif... аналогично с остальными рангами.

end

 

Теперь разберемся с параметром npc. Если написать так в se_stalker.script, то скорее всего пошлет. В se_stalker.script НПС обозначен как self, т.е. тот объект, для которого вызвана функция, т.е. self и надо писать. Если же выносить спавн в функцию из отдельного файла, то вызов в se_stalker:on_spawn() будет

 

myscript.myfunction(self),

 

а в файлe myscript будет уже

 

function myfunction(npc)

...

end

 

- чтобы непись мог распоряжаться при жизни этим предметом (стрелять, торговать, и. т. д.)

 

Это самое простое. Стрелять, заряжать (если патроны есть) и т.п. НПС будет в любом случае. Единственный неоднозначный момент - торговля. Надо ее настроить в файле config\misc\trade_generic.ltx. Разреши сталкерам торговать всем подряд - и все.

 

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Kirag, спасибо за помощь! Как только получу плюсомёт - отблагодарю обязательно. Толбко хотелось бы уточнить один момент.

Например, нужно новичку заспавнить оружие:

- wpn_pm - с вероятностью 30%

- wpn_pb - с вероятностью 25%

- wpn_mp5 - с вероятностью 20%

- wpn_ak74u - с вероятностью 15%

- wpn_ak74 - с вероятностью 10%

 

 

при этом, чтобы один из этих предметов спавнился обязательно, но ни в коем случае не присутствовали вместе 2 и более предмета. Можно ли организовать такое?

З.Ы. Прошу простить меня за назойливость.

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

Сталкеры, в теме:Уроки по модостроению, есть статья: "Как вывести сообщение на экран без использования функций АМК",

не подскажете как изменить цвет выдаваемого текста?

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

TREWKO,

вставляешь в текст %c[255,238,155,23] для изменения цвета с текущего момента. Цвет в формате RGB. Четвёртый параметр не знаю зачем, возможно прозрачность.

Чтобы вернуть цвет по умолчанию вставляешь %c[default]

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Garrett,

 

Можно, конечно. Делается это примерно так:

Сумма вероятностей: 30 + 25 + 20 + 15 + 10 = 100. В данном случае получилось 100, но в принципе это не так важно. Получившееся число пойдет в скобки у math.random

 

Пишем примерно следующее:

 

-- Выбор оружия

local wpn

if math.random(100) < 30 then -- 30 - вероятность ПМ-а

wpn = "wpn_pm"

elseif math.random(100) < 55 then -- 55 = 30 (ПМ, но его уже проверяли раньше, его не заспавнит) + 25 - вероятность ПБ

wpn = "wpn_pb"

elseif math.random(100) < 75 then -- 75 = 50 (ПМ или ПБ) + 20 - вероятность МР-5

wpn = "wpn_mp5"

elseif math.random(100) < 90 then -- 90 = 75 + 15 - АКС74У

wpn = "wpn_ak74u"

else -- остается от 90 до 100 на АК74

wpn = "wpn_ak74"

end

-- Спавн выбранного оружия

spawn.inv(wpn, tonumber(self.id) or tonumber(self:id()))

-- Не забываем про патроны

local ammo_string = system_ini():r_string(weap_sect, "ammo_class") -- Читаем патроны из конфига

local ammo = "grenade_f1" -- если патроны почему-то не определятся, выбираем гранату

if string.find(ammo_string, ",") == nil then -- если запятая не найдена - единственный тип боеприпаса

ammo = ammo_string -- его и выбираем

else

ammo = string.sub(ammo_string,1,l-1) -- иначе выбираем первый боеприпас в списке

end

-- Спавним выбранный боеприпас

spawn.inv(ammo, tonumber(self.id) or tonumber(self:id()))

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Kirag, благодарствую! :good: Даже не представляю, как тяжело было бы мне до этого дойти самому - я ведь пока лишь новичок.

TREWKO, извини, хотел ответить, немного не успел... malandrinus дал верный совет. Но всё же позволю себе добавить. цвета можешь подбирать любые, это не сложно, но вот несколько уже подобранных:

[064,224,096,224] Лиловый

[250,244,032,016] Красный

[250,250,144,044] Оранжевый сигнальный

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

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

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

RvP, он вроде там не светится, а от него просто молнии отходят как от ЭХ. Поэтому и реализовать такого непися можно также как и АМК Электро Химеру.

 

-----------------------------

 

А теперь собственно вопрос.

У меня есть переменная с присвоеным значением (это значение присвоелось после выполнения функции), после перезапуска игры это переменная обнуляется. А как сделать чтобы она не обнулялась?

 

З.Ы. Я реализовал это с помощью amk.save_variable и amk.load_variable, мне просто интересно, существуют ли другие способы?

Изменено пользователем Министр
Ссылка на комментарий
З.Ы. Я реализовал это с помощью amk.save_variable и amk.load_variable, мне просто интересно, существуют ли другие способы?
Нет других способов. Или точнее, нет способов, основанных на ином принципе. Если проследить, что там происходит, то мы увидим сохранение переменной нетпакетом в объекте актора. Делается это через объект-биндер. В принципе, ничто не мешает сохранять не в акторе, а в любом другом объекте. Иногда так и делается: для этого надстраивается биндер соответствующего объекта и при загрузке и сохранении там добавляется в нетпакет дополнительная информация. Но это имеет локальное применение - для дополнительных свойств конкретных объектов. А объект актора доступен всегда, поэтому в нём и удобно сохранять переменные общего характера.
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

 

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

malandrinus, Kirag, неписи не тратят патроны - им достаточно 1 пачки. (можно и в стволе).

 

Люди,может кто поможет - я ковыряюсь в оффлайн алайф,на эту тему есть несколько модов - так вот,надо совмещать...(довольно сложно и запутано) а у меня чтото не очень получается одна вещь6

НПС должны шмонать тайники в оффлайне,а не шмонают,гады.

 

Вот скрипт оффлай алайф,не подскажете,кде я скривил: http://webfile.ru/3742675 ?

З.Ы. проблема точно не в других скриптах.

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

Здраствуйте сталкеры! Подскажите пожалуйста как создать нового персонажа и заспавнить его на Кордон(к примеру)

Разработка Andrew's Pack Mod V0.5..

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

Monnoroch, не скажу, что достаточно пачки. Я уже давно, когда учился создавать неписей, писал им только ствол. Патроны спавнились вместе со стволом. После того, как непись выстреливает обойму получаем:

"Всё, всё, я без волыны", "Мужик, не стреляй!"

 

Министр, в ЧН можно писать данные в файл. В ТЧ только пакетом.

 

RvP, как вариант, создать источник света (по-моему, через all.spawn это можно сделать) и перемещать его (изменять координаты) при апдейте за неписью или другим клиентским объектом. Вот только не знаю, будет ли работать. :(

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

По поводу патронов.

В файле character_desk_название уровня.xml в профиле нового непися прописываем так:

 

<supplies>

[spawn] \n

wpn_groza \n

ammo_9x39_ap \n

 

И патроны будут бесконечны.

 

Искал-искал... нашёл только \gamedata\config\gameplay\character_desc_....xml

Конечно xml, опечатка произошла просто.

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

Кто весел - тот смеется, кто хочет - тот добьется, кто ищет - тот всегда найдет!

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

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

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

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

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

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

Войти

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

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

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