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

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

 

1491319448148138184.png

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

 

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

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

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


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

N42 с моими скудными познаниями даже ваши инструкции не сильно решают)
Я сделал настолько, насколько понял. При первом пуске игра крашнулась после загрузки НИ, после правок она не крашнулась, но и ролика не было. Вот, можете посмотреть, что я сделал:

Спойлер

function actor_on_first_update(binder,delta)
    SendScriptCallback("actor_on_first_update",binder,delta)
    if not db.actor:has_info("run_tutorial") then
        game.start_tutorial("intro_game")
    end
end

Спойлер

    <intro_game>
        <global_wnd width="1920" height="1080">
        <auto_static width="1920" height="1080" stretch="1">
        <texture>intro\intro_back</texture>
        <texture></texture>
        </auto_static>
        <function_on_stop>run_tutorial</function_on_stop>
        </global_wnd>
        <play_each_item>1</play_each_item>
        <item type="video">
        <sound>intro\intro_game</sound>
        <delay>1</delay>
        <pause_state>on</pause_state>
        <video_wnd x="0" y="0" width="1920" height="1080" stretch="1" alignment="c">
            <texture x="0" y="0" width="1920" height="1080">intro\intro_game</texture>
        </video_wnd>
        </item>
    </intro_game>

Функция, запускающая заставку в х-16: run_tutorial(yantar_dream) =disable_ui%
Туториал, насколько я понимаю, intro_game. Секция с ним взята из Стасона, и строчки <function_on_stop> в ней не было

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

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


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

<function_on_stop>run_tutorial</function_on_stop>

имя_скрипта.имя_функции. Например

<function_on_stop>xr_effects.end_x18_dream</function_on_stop>


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

baraholschik возьми в пример x18_dream или yantar_dream

  • Мастер! 1

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


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

N42 ну работу над ошибками сделал, но вновь безрезультатно
 

Спойлер

function actor_on_first_update(binder,delta)
    SendScriptCallback("actor_on_first_update",binder,delta)
    if not db.actor:has_info("dar_x18_dream") then
        game.start_tutorial("intro_game")
    end
end

Спойлер

    <intro_game>
        <global_wnd width="1920" height="1080">
        <auto_static width="1920" height="1080" stretch="1">
        <texture>intro\intro_back</texture>
        <texture></texture>
        </auto_static>
        <function_on_stop>xr_effects.end_x18_dream</function_on_stop>
        </global_wnd>
        <play_each_item>1</play_each_item>
        <item type="video">
        <sound>intro\intro_game</sound>
        <delay>1</delay>
        <pause_state>on</pause_state>
        <video_wnd x="0" y="0" width="1920" height="1080" stretch="1" alignment="c">
            <texture x="0" y="0" width="1920" height="1080">intro\intro_game</texture>
        </video_wnd>
        </item>
    </intro_game>

Спейс-рестрикторы через СДК расставляются? Могли ли от оригинальной игры остаться на кордоне рестрикторы, если они там вообще были? Да и если даже они там остались, нужны имена этих рестрикторов, правильно?
Может в логике какого то смарта можно прописать условие вызова функции, запускающей ролик, той же end_x18_dream? Например, стартовое задание "поговорить с сидоровичем": открыл диалог с сидоровичем > условие выполнено>функция заставки. В этом деле я тоже не силён, но может по аналогии смог бы сделать это условие.

Кстати, я же перенёс папку bin из стасона к себе и СОМ по крайней мере первое время нормально работает. Но интро при этом нет, хотя оно вызывается движком, а в стасоне интро есть. Движок у меня теперь стасоновский, значит по идее, имея нужные медиафайлы и туториал, интро должно запускаться. Значит, все таки есть еще какие то файлы, от которых запуск интро зависит

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

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


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

baraholschik попробовал на чистом 1.4.22, просто скопипастил yantar_dream и поменял там вызываемую функцию - всё работает у меня https://wdfiles.ru/1rTit

  • Хабар 1

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


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

N42 моë почтение, вы мне фактически проект спасли! 

Но не мудрено, что у меня ничего не работало - вы то новую функцию создали (по крайней мере у меня в xr_effect еë просто не было) и в bind_stalker_ext  у вас несколько иначе всë написано. А чë, так можно было что ли?😄

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


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

Очередная проблема нарисовалась

Я когда то давно на COM накатил STCOM, в этой оружейке есть система распределения оружия и обвесов среди НПС разных группировок и рангов. Сделано это ltx файлами по адресу: configs/Ai tweaks/loadout. Спустя пару лет только заметил, что во многих сталкерских отрядах любых группировок есть боты, не имеющие оружия вообще. Ранг этих ботов установить точно не удалось, но скорее всего эти сталкеры могут быть любых рангов, судя по их костюмам. Я толком не понимаю, как работает это распределение оружия, кто его автор и есть ли к нему инструкция где то. Знаю, что нпс в игре используются пяти рангов, а в этих ltx   файлах рангов больше и названия некоторых рангов отсутствуют в самой игре, следовательно, секции с этими рангами не используются. Может кто знает, как эта система работает? В  TAZWP  для Dead air такая же система используется

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


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

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

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


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

baraholschik я сам тесты не проводил, но видел много спорной инфы про эти db-архивы, кто-то говорит, что они быстрее грузятся, кто-то - что медленее. Здравый смысл мне подсказывает, что ресурсы будут грузиться чуть-чуть медленее из-за того, что игре нужно будет получать доступ к архивированным данным. Но это возможное замедление будет настолько незначительно, что никто вообще не заметит разницы, то есть это особо ни на что не влияет на самом деле, я думаю.

  • Хабар 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), игроку бандиты также злейшие враги. Квестов у экологов я не проваливал, поэтому и с ними отношения не могут быть даже условно враждебными. Я думаю, произошла какая то багуля, и еë причина мне очень интересна

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


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

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

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

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

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

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

Войти

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

Войти

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

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