Перейти к содержанию

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

 

1491319448148138184.png

Тема посвящена моддингу на платформе Зов Чернобыля.

 

Правила темы:

  • Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть.
  • Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
  • Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
  • Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться.
  • Так же, если вы модифицируете готовый мод, обязательно указывайте какой. Некоторые модификации очень сильно отличаются от Call of Chernobyl. 
  • Лайк 4
  • Хабар 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Можно ли систему/схему/алгоритм/скрипты спавна и конфигов профилей случайных НПС из Anaboly внедрить в ЗЧ 1,5? Что я имею в виду:

Мне очень нравится как выглядят конфиги случайных НПС из Anaboly, там всё максимально просто:

Спойлер

<specific_character id="sim_default_stalker_1_default_0" team_default = "1">
#include "gameplay\profiles\character_desc_stalker_1.xml"
    <icon>ui_inGame2_neutral_2</icon>
    <snd_config>characters_voice\human\stalker_3\</snd_config>
    <visual>actors\stalker_neutral\stalker_neutral_2</visual>
</specific_character>

 

а сам "#include "gameplay\profiles\character_desc_stalker_1.xml" содержит:

Спойлер

<bio>ќпытный сталкер. ƒетальна¤ информаци¤ отсутствует.</bio>
<class>sim_default_stalker_1</class>
<community>stalker</community>
<map_icon x="1" y="0"></map_icon>
<money min="1000" max="3000" infinitive="0"/>
<name>GENERATE_NAME_stalker</name>
<rank min="2000" max="6000" />
<reputation min="-800" max="1000" />
<supplies>
#include "gameplay\loadouts\stalker_base.ltx"
#include "gameplay\loadouts\stalker_tier_2.ltx"
[spawn] \n
#include "gameplay\supplies\character_food.xml"
#include "gameplay\supplies\character_medical.xml"
#include "gameplay\supplies\character_drugs.xml"
</supplies>
#include "gameplay\character_criticals.xml"
#include "gameplay\character_dialogs.xml"
<terrain_sect>stalker_terrain</terrain_sect>

 

В Зове Чернобыля конфиги профилей НПС уже лучше чем в ЗП, но всё ещё мало рандомайза. Что мне в Anaboly понравилось так это что ранг и репутация рандомизированы, а не фиксированное значение которое вводится вручную. Я пробовал сам выставить минимальное и максимальное значения, но не сработало. Возможно я что-то сделал не так. Заранее отвечу на потенциальный вопрос/решение: я хочу играть именно в Зов Чернобыля, а не в симулятор мусоросборщика.


#free_SamArt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Здравствуйте! Я еще только начал изучать Lua. Помогите понять логику скрипта:

function character_community(obj)
    if not (obj) then
        return
    end
    if IsStalker(obj) then
        return obj:character_community()
    end
    return "monster"
end

Это из файла _g.script. К этой функции обращаются разные другие функции в других файлах скриптов, чтобы узнать группировку сталкера. Но я не понимаю, как эта функция работает. Откуда берет название группировки?

Можете объяснить по пунктам, как новичку? Желательно всю цепочку ее работы.

И еще вопрос, который меня мучает: В чем разница между этими двумя функциями и почему они вообще по-разному написаны, если делают, по-сути, одно и то же? И объясните их механизм работы по-подробнее, если не трудно...

function is_actor_from_faction(actor, npc, p)
	local comm = db.actor and character_community(db.actor):sub(7)
	for k,v in pairs (p) do
		--printf("actor community: [%s], needed community: [%s]", comm, v)
		if (v == comm) then
			return true
		end
	end
	return false
end

function actor_community(actor,npc,p)
	if not (db.actor) then
		return false
	end
	for i=1,#p do
		if (character_community(db.actor) == p[i]) then
			return true
		end
	end
	return false
end

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
3 часа назад, manx сказал:

return obj:character_community()

Движок возвращает группировку, это не со скриптов

3 часа назад, manx сказал:

В чем разница между этими двумя функциями и почему они вообще по-разному написаны, если делают, по-сути, одно и то же?

Например, у гг группировка actor_dolg. В функцию передается какое-то значение, с которым надо сравнить группировку гг. Через character_community(db.actor) получаешь actor_dolg, но в первой функции идет "обрезка" полученной группировки character_community(db.actor):sub(7) (получится dolg), во второй функции нет обрезки, проверяется без изменений. Значит, в первую функцию надо передавать dolg, потому что идет обрезка строки с группировкой гг, и если туда передать actor_dolg - функция всегда будет возвращать false (ведь у гг обрежется до dolg)

is_actor_from_faction(dolg)

Во вторую функцию передаешь actor_dolg, там нет обрезки, сравнивается сразу с actor_dolg

actor_community(actor_dolg)

Да, функции делают одно и то же, но лучше использовать вторую

Изменено пользователем N42
  • Лайк 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

N42, спасибо за ответ!

1. То есть можно с уверенностью сказать, что функция character_community(db.actor) возвращает actor_dolg, а не просто dolg? В game_relations.ltx есть и actor_dolg и dolg... В чем разница между этими понятиями? Ведь герой может быть просто dolg...

2. sub(7) получается обрезает возвращенный ответ на 7 символов? Я правильно понял?

3. Каким именно образом character_community(db.actor) получает actor_dolg ? Можно объяснить подробно новичку в программировании?

И еще пару вопросов по Lua, если можно...

Что значит вот это: obj:character_community() ? Что вообще делает двоеточие? (Я не нашел внятного объяснения в руководствах по языку - там это как-то сложно объяснено). Точка в db.actor - это ссылка либо на файл, либо на таблицу? Правильно?

Почему в функции указаны параметры (actor, npc, p), хотя они не все используются? Зачем лишние?

db.actor - это ссылка на файл db.script ? Но там же actor = nil Как так?

И еще такой момент:

return db.actor and string.find(character_community(db.actor),comm) ~= nil

Я правильно понял, что после return идут условия этого return ? Это какая-то недокументированная фича? В руководствах об этом ни слова не сказано. Там сказано, что return всегда идет в конце и после него ничего не должно быть из условий...

Ценю ваши ответы!..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

4 минуты назад, manx сказал:

Что значит вот это: obj:character_community() ? Что вообще делает двоеточие?

У объекта obj получаем группировку, так же можно получить его имя obj:profile_name() если объект нпс или название секции obj:section() если это какой-то айтем, советую сразу почитать про клиентские и серверные объекты в сталкере и их различия, это очень важный пункт без этого тяжело будет. Почти все методы типа character_community и тд. берутся из движка. А так читай http://stalkerin.gameru.net/wiki/index.php?title=Категория:Скрипты там много полезного.

  • Лайк 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
Спойлер


15 часов назад, manx сказал:

1. То есть можно с уверенностью сказать, что функция character_community(db.actor) возвращает actor_dolg, а не просто dolg? В game_relations.ltx есть и actor_dolg и dolg... В чем разница между этими понятиями? Ведь герой может быть просто dolg

Функция вернет группировку гг без изменений, а какую группировку присвоит гг мододел - не суть важно, хоть actor_dolg, хоть dolg, хоть terminator. Но лучше делать отдельные с actor_... чтобы не смешивались с нпс. Да и отношения гг с группировками можно делать отдельные, если нпс этих группировок враждуют, а с гг должны быть нейтральными

15 часов назад, manx сказал:

2. sub(7) получается обрезает возвращенный ответ на 7 символов? Я правильно понял?

Типа того, вернет строку начиная с 7 символа. Почитай про string.sub (да и в целом про string для работы со строками).

15 часов назад, manx сказал:

3. Каким именно образом character_community(db.actor) получает actor_dolg ? Можно объяснить подробно новичку в программировании?

character_community(db.actor) группировку получает из движка через метод obj:character_community(), она не со скриптов получает.

15 часов назад, manx сказал:

Что значит вот это: obj:character_community() ? Что вообще делает двоеточие?

obj - это объект, принадлежащий к какому-нибудь классу (в данном случае класс game_object), после двоеточия указывается его метод. Т.е., это обращение к функции character_community() у объекта класса чтобы эта функция вернула группировку этого объекта. Про основные классы и их методы почитай тут (это по оригиналу, в коке добавили своих методов, но надо сначала изучить основу, а отдельно по коку таких тем не видел) https://www.amk-team.ru/forum/topic/7450-spravochnik-po-funkciyam-i-klassam/#comments

Также там есть про то, как в сталкере вообще объекты работают, про клиенские и серверные, про нетпакеты, в общем, всё там изучай, чтобы стало понятно как всё работает

15 часов назад, manx сказал:

Точка в db.actor - это ссылка либо на файл, либо на таблицу?

15 часов назад, manx сказал:

db.actor - это ссылка на файл db.script ? Но там же actor = nil Как так?

Он там ниже добавляется

15 часов назад, manx сказал:

Почему в функции указаны параметры (actor, npc, p), хотя они не все используются? Зачем лишние?

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

15 часов назад, manx сказал:

return db.actor and string.find(character_community(db.actor),comm) ~= nil

Я правильно понял, что после return идут условия этого return ? Это какая-то недокументированная фича? В руководствах об этом ни слова не сказано. Там сказано, что return всегда идет в конце и после него ничего не должно быть из условий

Это не после него, это вместе с ним. Эти условия должны вернуть true или false, и их уже передает return. Сначала вычисляются эти условия, потом return передает. Так меньше кода получается, удобнее

 


Дополнено 4 минуты спустя
14 часов назад, StrawFlux сказал:

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

В любом случае нужно, чтобы не наплодить кучу корявого кода)

Изменено пользователем N42
  • Лайк 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

StrawFlux, N42 , спасибо за ваши ответы!

Цитата

какую группировку присвоит гг мододел - не суть важно

А как мне узнать, какое название (с actor_ или без) приписал герою движок? Речь о моде Anomaly, на базе CoC, если что.

По поводу return, то есть эти функции (к примеру) равнозначны:

function npc_in_actor_community(actor,npc,p)
	local comm = character_community(npc)
	return db.actor and string.find(character_community(db.actor),comm) ~= nil
end

function npc_in_actor_community(actor,npc,p)
	local comm = character_community(npc)
	if db.actor and string.find(character_community(db.actor),comm) ~= nil then
		return true
    end
  	return false
end

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

И еще вопрос по другому скрипту:

function if_actor_powerful(actor, npc)
	local repu = actor:character_reputation()
	if (repu >= 999) then
    return true
    else
    return false
   end
end

Почему здесь actor:character_reputation() , а не db.actor:character_reputation() ?

Могу ли я использовать эти функции как условие в файлах trade_.ltx ?

Я так понял, что is_actor_from_faction точно можно использовать как условие, нужно только вписать группировку в аргумент... А по поводу вышеуказанных функций не уверен. Подскажите...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
1 минуту назад, manx сказал:

Почему здесь actor:character_reputation() , а не db.actor:character_reputation() ?

Либо в начале скриптового файла задано что actor = db.actor либо в _g.script
Так делают для удобства

  • Лайк 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
11 минут назад, StrawFlux сказал:

Либо в начале скриптового файла задано что actor = db.actor либо в _g.script

Такого нет - я проверил.

Возможно actor здесь - это переменная, которую нужно ввести в аргументе? Но что там писать actor или db.actor ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
Спойлер
9 часов назад, manx сказал:

А как мне узнать, какое название (с actor_ или без) приписал герою движок?

Движок сам ничего не приписывает, группировку задает мододел или в character_desc_general.xml или скриптом. Что мододел присвоит, то присвоит движок, сам он название не меняет.

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

По поводу return, то есть эти функции (к примеру) равнозначны:

Да.

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

Почему здесь actor:character_reputation() , а не db.actor:character_reputation() ?

Потому что actor прописан аргументом у функции

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

function if_actor_powerful(actor, npc)

db.actor используется или если он не объявлен в какой-то переменной или если не передался в функцию. Можно использовать передавшийся actor, можно db.actor, но раз все равно он передался в функцию - используют actor (или другое название, назвать можно как угодно, это просто название для использования в функции)

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

Могу ли я использовать эти функции как условие в файлах trade_.ltx ?

Да. Любую функцию можно использовать как условие, главное, чтобы возвращала true/false

 

Изменено пользователем N42
  • Лайк 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

N42 , спасибо за ответ. Мне стал больше понятен Lua.

Но, все-таки, одну вещь я не понимаю...

Вот две одинаковые функции:

function if_hip_veteran(actor, npc)
	local rank = ranks.get_obj_rank_name(npc)
	return (rank == "veteran" or rank == "expert" or rank == "master" or rank == "legend")
end

function request_to_hip_task(actor)
	local rank = ranks.get_obj_rank_name(actor)
	return (rank == "veteran" or rank == "expert" or rank == "master" or rank == "legend")
end

Разница только в actor или npc. Когда я ставлю в файле trade_mercenary.ltx условие buy_supplies = {=if_hip_veteran(actor)} , то результата нет. Не работает. А, когда ставлю {=request_to_hip_task(actor)} - работает. Я думал, по своей логике, что actor/npc - это просто условная переменная, которую можно заменить на любое слово, которое и подставится в ranks.get_obj_rank_name(). То есть в аргументе функции я выбираю, кого будет функция проверять на ранг. Соответственно, я ставлю actor , чтобы система проверила мой ранг в игре и продавала мне вещи или не продавала по скрипту. И я думал, что, то, что я пишу в аргументе (), оно же и дублируется в тело функции ranks.get_obj_rank_name() ... Но, получается, что нет. В чем тут дело?

Тоже самое с функцией:

function npc_rank(actor, npc, p)
	if p[1] == nil then
		printf("Wrong number of params in npc_rank")
	end

	if ranks.get_obj_rank_name(npc) == p[1] then
		return true
	end
	return false
end

В аргумент тут, по идее, нужно вписать название ранга (veteran, master и т.д.). Но кого он будет проверять на соответствие? npc ? Какого npc ? И как сделать, чтобы он проверял на ранг игрока, то есть actor ? Что вписывать в аргумент при вызове функции?

(Это все при условии, что я не хочу менять саму функцию, а просто использовать ее для условий в trade_.ltx)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
Спойлер

 

manx функция, указанная в логике, не напрямую работает, сначала эту строчку спарсивает основной скрипт логики/торговли/или еще чего, подготавливает и выполняет в нужный момент. Он добавляет еще actor и npc в аргументы (npc - это объект, которому прописана использующаяся логика). На выходе получается if_hip_veteran(actor, npc, p) - тут actor и npc -  объекты, передающиеся всегда и независимо от записи в конфиге , p - это таблица как раз с тем, что написано в скобках у =if_hip_veteran(actor). В итоге  получится вот так:

function if_hip_veteran(actor, npc, {"actor"})

Т.е., (actor) передается третьим аргументом как строка в таблице, а с ней никаких действий в самой функции нет. В первой функции действия выполняются для npc-торговца, который идет вторым аргументом, а во второй функции выполняется для actor, поэтому только вторая функция работала. А переданный в скобках "actor" вообще не задействован.

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

4 часа назад, manx сказал:

В аргумент тут, по идее, нужно вписать название ранга (veteran, master и т.д.). Но кого он будет проверять на соответствие? npc ? Какого npc ? И как сделать, чтобы он проверял на ранг игрока, то есть actor ? Что вписывать в аргумент при вызове функции?

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

4 часа назад, manx сказал:

Это все при условии, что я не хочу менять саму функцию, а просто использовать ее для условий в trade_.ltx

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

Чтобы в скобках передавать того, кого надо проверять - это надо писать новую функцию, которая будет по переданному в нее сиду или секции сначала получать объект, а потом проверять его на ранг, но это нужно только если надо проверять не гг и не торговца, а других. Для проверки гг достаточно сделать копию функции с другим названием и поменять там на if ranks.get_obj_rank_name(actor) == p[1] then , заморочки с написанием новой функции лишние, если нет какой-то большой системы зависимости торговли от других нпс, не от одного торговца и гг

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

У меня тут косвенный вопрос по теме

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

Ну чисто технически как это происходит? Что их триггерит, если на первый взгляд не произошло ничего, что могло бы испортить отношения игрока и конкретных ботов? Квесты не были провалены, урон этим ботам игрок не наносил, отношения с группировкой плюсовые. Причём заагриться может не весь отряд, а кто то один из отряда. Зачастую это происходит, если я стреляю в общего противника, находясь близко к нпс, позже меня атакующим. Но при этом на линии огня союзников нет, мимо них вообще ни одна моя пуля не пролетает. Например, сидят на смарте два эколога, на них налетает стая собак, те по собакам стреляют, но погибают. Перезагрузка. Атакую собак первым, не давая им добежать до смарта. Сзади боевой походкой подбегает эколог, смотрит на трупы собак, целится в меня, резко краснеет и тут же атакует. Как это так может происходить? Они что, с собаками союзники? Дак нет же, они друг друга спокойно атакуют

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

baraholschik если речь про Дед эир, то, насколько я помню, там специально скриптом делают врагами любых рядом находящихся нпс даже если убиваешь врага

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

N42N42ну конкретно я в своей сборке сейчас это увидел, что удручило((

В дэд эир такая фигня происходит, как я понял, когда ты убиваешь своих врагов на глазах у своих союзников, которые являются союзниками твоим врагам, как то так. Например, учёные тебе изначально нейтралы, а вояки враги, но друг другу они союзники. 

У меня в сборке таких фишек нет, динамических отношений тоже нет. Хотя я вот сейчас заметил, что некоторые отряды бандитов стали нейтральными, что вообще из разряда фантастики, учитывая скольких бандитов я убил. Бандиты и экологи друг другу злейшие враги (-2000), игроку бандиты также злейшие враги. Квестов у экологов я не проваливал, поэтому и с ними отношения не могут быть даже условно враждебными. Я думаю, произошла какая то багуля, и еë причина мне очень интересна

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Итак, вопрос следующий

Есть ли у Anomaly отличия от COC в структуре файлов и папок? Есть ли также отличия в наполнении самих файлов? Конфиги оружия BaS видал, и чисто визуально они устроены несколько иначе, нежели конфиги  STCOP. 

И главный вопрос: если освоил "сборочку на COC", насколько трудно будет шурудить Anomaly? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Подскажите пожалуйста где можно скачать сборку dltx, moded exes и fdda или подскажите как это все обьединить

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

N42 Понял, спасибо 👍

Аномалия конечно удивила своей модульностью. То, как на неë по 300 модов накатывают и она при этом умудряется работать, просто восхищает. Я пока 50 модов накатил и ни один ручками не правил - большинство друг с другом не конфликтуют, что вообще нонсенс, а у остальных обязательно в комплекте идут адаптации друг к другу. Но интересно конечно будет в этом всëм поковыряться


Дополнено 4 минуты спустя

CYBERWARIOR дак на mod db всë лежит. Если лень искать постранично, то инструкция к этому делу со ссылками гуглится очень быстро. Я бы прикрепил, да не знаю, разрешено ли это правилами

P. S. В личку черканул

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Приветствую.

Решил я на днях выставить NPC ванильного в 1.4.22 на path_walk локаций ТЧ, и обнаружил интересную деталь:
NPC CoC смотрят в точки path_look не так, как к примеру они смотрели на них же в ТЧ. Они смотрят просто в направлении этих точек, а не в саму точку. Отчётливо это видно, если поставить НПС на какую-либо возвышенность, а точку(и) куда он будет смотреть поставить ниже возвышенности. НПС Будет смотреть строго прямо, в направлении точек, а по идее должен смотреть строго в точку, то бишь прямо и вниз, в примере возвышенности.

Я экспериментировал вот с этим path_look "pri_monolith_patrol_3_look" ("pri_monolith_roof_patrol3_look", он же в ТЧ). Можно легко увидеть разницу положения тела НПС, когда он в точку смотрит (если надо, я могу скриншоты приложить различий)

В общем где-то как обычно разработчики ванильного CoC как обычно убрали то, что было в оригинальных файлах скриптов. Пытаюсь найти, где это может находиться. Вот файлы, которые я смотрел: xr_camper.script (схема нпс использующего path_look), state_mgr.script, state_mgr_direction.script, move_mgr.script. Если кто знает, где это находиться может, буду признателен любой помощи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Товарищи мододелы, кто имел дело с Anomaly Antology? Мне в ней больше всего интересна кампания CoP. Пытался кое что под себя пошерудить, но споткнулся в самом начале: второй день не могу найти файл, отвечающий за стартовый инвентарь гг в именно кампании CoP. Уже в глазах двоится от просмотра скриптов и "луашек", ей богу) Кто может помочь добрым советом, - где этот неуловимый конфиг закопан?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Добрый день! хочу убрать спавн патронов в оружии мертвых неписей. 
Не очень понимаю как в функции это прописать. Тут стоит выпадение с вероятность 5-10 патронов. Если ставить 0 то при каком-то шансе все равно выпадет 5-10 патронов.

Спойлер

 

function set_weapon_drop_condition(npc,itm)

    local rank = ranks.get_obj_rank_name(npc)
    local condition = 10
    if npc:character_community() ~= "zombied" then
        condition = math.random( weapon_drop_condition[rank][1] , weapon_drop_condition[rank][2] )
    else
        condition = math.random( weapon_drop_condition["novice"][1] , weapon_drop_condition["novice"][2] )
    end
    
    condition = clamp(condition,5,100)
    condition = condition / 100

    itm:set_condition(condition)
    
    -- avoid creating ammo on reload
    local death_dropped = se_load_var(npc:id(), npc:name(), "death_dropped")
    if (death_dropped) then
        return
    end
    
    if (IsWeapon(nil,itm:clsid()) and not npc:marked_dropped(itm)) then
        --
        local sec,number
        local ammo_class = parse_list(ini_sys,itm:section(),"ammo_class")
        
        -- randomly spawn only 1 ammo type per found weapon
        if (#ammo_class > 0) then
            sec = ammo_class[math.random(1,#ammo_class)]
            if (sec and item_count[sec]) then 
                number = math.random(item_count[sec][1], item_count[sec][2])
                if (number > 0 and ini_sys:section_exist(sec)) then
                    alife_create_item(sec, npc, {ammo = number})
                end
            end
        end
        -- spawn grenade ammo if there is launcher attached
        if (ini_sys:r_float_ex(itm:section(),"grenade_launcher_status") > 0) then
            ammo_class = parse_list(ini_sys,itm:section(),"grenade_class")
            for i=1,#ammo_class do
                sec = ammo_class
                if (sec and item_count[sec]) then 
                    number = math.random(item_count[sec][1], item_count[sec][2])
                    if (number > 0 and ini_sys:section_exist(sec)) then 
                        alife_create_item(sec, npc, {ammo = number})
                    end
                end
            end
        end
        --
        
        local ammo = itm:get_ammo_in_magazine()
        
        --printf("--Weapon: "..itm:section())
        
        --printf("--Ammo before edit: "..itm:get_ammo_in_magazine())
        
        if (ammo > 10) then
        
            local chance = math.random(0,100)
            if chance > 15 then
                itm:set_ammo_elapsed(math.random(5,10))
            end
        end
        
        --printf("--Ammo after edit: "..itm:get_ammo_in_magazine())
        
    end
end

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Вопрос по оружейке
Call of misery, STCOM
Проблема такая: у меня появилась инвентарная опция "снять прицел" для оружия, на котором прицелов нет. Ща объясню
Решил добавить карабины на базе существующих автоматов, добавляя секции в конфигах оружия. В STCOM у многих стволов есть секции для ржавых и изношенных вариантов. Делал по образу и подобию этих секций, вписывая в новую секцию только изменённые параметры. По итогу в игре эти карабины есть, они работают, но вот беда -  есть инвентарная опция "снять прицел", хотя прицелы на них не установлены. И когда нажимаешь на эту опцию, карабины превращаются в исходные автоматы, что недопустимо
Для исходных автоматов модели с установленным прицелом прописаны отельными секциями. Я сделал точно также для карабинов, все секции вроде имеют правильные названия и  ссылки на базовую секцию, но безрезультатно
Читал где то, что нельзя использовать одну 3-д модель оружия для разных стволов в игре. И действительно, ржавые и изношенные варианты используют свои модели. Сделал дубликаты моделей, переименовал как надо, прописал в секцию с карабином - игре норм, но проблема не ушла. Тут я уж не понимаю, что делаю не так. Всё сделано также, как и у стандартного STCOM-овского оружия, даже модели продублированы, а без толку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Народ, адаптирую Customization Pack на 1.5 версию. В режиме дебага пытаюсь заспанить сквад (рядом/вокруг игрока), но он появляется на момент и исчезает. Почему так происходит?


#free_SamArt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу