Модостроение (Скриптописание, конфигурации и т.п)

Эта тема продолжение прошлой темы созданной Rekongstor'ом! ( Модостроение (Скриптописание, конфигурации и т.п.)
Ввиду того, что он больше не появится там, он просил удалить старую, загрязнённую сообщениями тему!
И вот я создал новую, в которой все могут свободно задавать свои вопросы (по созданию модов) друг другу!

Комментарии: 651
Тема закрыта. Публикация новых комментариев отключена.

Хочу добавить в игру большинство вырезаных группировок и возможность всупать в них, делал по учебникам ничего ни получилось; люди добрые помогите кто чем может!

2

Попробую ещё раз: кто знает как отключить урон от огня(костра) для НПС??? Мелочь, но очень нужная...

1

насчёт группировок тоже бы хотелось уточнить!!??помогите плиз!!!

1

Ил Hartmann урон от огня можно отключить путем редактирования бронежелетов, допустим взять и поставить защиту от огня 1 то урона не будет сам проверял, вот как эта строчка будет выглядеть:
fire_wound_protection = 1
Леня Баньши и virysniak32 на счет уроков по созданию группировок они действительно с ошибками(проверял). Могу предложить другой способ, он основан на уроках с исправленными ошибками. Сейчас я закончу статью на эту тему и дам ссылку.

1

Byurrer, это я знаю. Мне нужен сам файл огня. Где его искать?

1

Итак, вы хотите создать новую группировку но не знаете как, тогда эта статья для вас.
1. Определитесь как вы хотите назвать свою группировку ну к примеру Анархисты.
2. В файле game_relations.ltx необходимо добавить свою группировку:
А) В таблицу отношений:

[communities_relations]
;|actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader|arena_enemy| anarhist |
;=====
actor = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
actor_dolg = 0, 0, 0, 0, -5000, -500, -5000, 5000, 600, -5000, -5000, -5000, 0, 0, -5000
actor_freedom = 0, 0, 0, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, -5000, 0

stalker = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
monolith = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, 5000, 5000, -5000, 0, -5000, 0
military = -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000, -5000, -5000, 0, 0, -5000, 0
killer = -5000, -5000, 0, -5000, -5000, -5000, 5000, -5000, -5000, -5000, 0, -5000, -5000, 0, -5000, 0
ecolog = 0, 600, -5000, 0, -5000, 1000, -5000, 5000, 500, -5000, -500, -5000, 0, 0, 0, 0
dolg = 0, 600, -5000, 0, -5000, -500, -5000, 5000, 5000, -5000, -5000, -5000, 0, 0, 0, 0
freedom = 0, -5000, 600, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, 0, 0
bandit = -5000, -5000, 0, -5000, -5000, -500, 0, -5000, -5000, 0, 0, -5000, -5000, 0, -5000, 0
zombied = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, 0
stranger = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -500, -5000, 0, 0, 0, 0
trader = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
arena_enemy = -5000, -5000, -5000, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, 0, 0, 0

anarhist = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0
б) ниже в communities:
;названия группировок
communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5, monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10,
freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, anarhist, 18,
в) В разделе communities_sympathy добавить:
[communities_sympathy]
actor = 0.0
actor_dolg = 0.0
actor_freedom = 0.0
stalker = 0.0
monolith = 0.0
military = 0.0
killer = 0.0
ecolog = 0.0
dolg = 0.1
freedom = 0.1
bandit = 0.0
zombied = 0.0
trader = 0.0
stranger = 0.0
arena_enemy = 0.0
anarhist = 0.0
3) В death_manager.script ищем строку local community_list и добавляем свою группировкув скобки:
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith",
"arena_enemy", "actor_dolg", " anarhist " }
4) В файле death_items_by_communities.ltx пишем:
af_dummy_spring = 0
af_fuzz_kolobok = 0

;Еда
vodka = 0

[arena_enemy]
[actor_dolg]

[anarhist]: stalker
bread = 0
kolbasa = 0
vodka = 0
energy_drink = 0.3
5) Для респавна бойцов группировки в se_respawn.script пишем local simMaxCount = {после зомби:
anarhist_novice = 20, anarhist_regular = 20, anarhist_veteran = 20, anarhist_master = 6,
6) Чтобы при убийстве НПС новой группировки игра не вылетала в xr_statistic.script после строчек с зомби:
zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,
пишем:
anarhist _stalker_novice = 1, anarhist _stalker_experienced = 2, anarhist _stalker_veteran = 3, anarhist _stalker_master = 4,
6) Теперь в character_desk_x.xml выбираем любого НПС и в разделе:
stalker
Пишем:
anarhist
7) Чтобы группировка отображалась как Анархист зарегистрируем ее в в файле string_table_general.xml:
< string_table>
< string id="anarhist">
< text>Анархисты< /text>
< /string>
8) Ну и конечно же вступление в нашу новую группировку, для этого нужен скрипт dialogs.script, в нем пишем:
-----------------------------------------------------------------------------------
-- Community
-----------------------------------------------------------------------------------

[...]

function actor_set_anarhist (actor, npc)
printf ("ACTOR NOW IN [anarhist] COMMUNITY")
if db.actor then
db.actor:set_character_community ("actor_anarhist", 0, 0)
end
return true
end
Ну и вставить эту функцию в диалог.Все.

1

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

1

Ну и вставить эту функцию в диалог.Все.

Создать для НПС диалог.
В диалоге прописать:
< action >dialogs.actor_set_anarhist< /action >

1

помогите плз
я в тч добавил арсенал и all_armor_djekman_mod поверх арсенала. Теперь иконки нового оружия и патронов в инвентаре исчезли и
изменился выбор у торговцев
Собственно вопросы:
1)как нормально поставить иконки?
2)как изменить выбор барыг?

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

1

stalker_ak я понял про че ты говоришь, полностью согласен. Но времени блин не было. А что будет не понятно напишут, тогда и разяьсню.

1

Zhenyapetrenko изменить выбор у торговцев в файлах
trade_trader.ltx Сидорович
trade_generic.ltx обычные сталкеры
trade_freedom.ltx Свободовский торгаш
trade_ecolog.ltx Сахаров
trade_dolg.ltx Долговский барыга
trade_barman.ltx Бармен

1

Zhenyapetrenko
Посмотрев на ответы на твой вопрос, я прикинул и решил, что отвечу тоже
Byurrer был немного не прав. Если он вернёт эти файлы, то пропадут другие оружия. Поэтому я советую иметь файлы перечисленные Byurrer'ом от каждого мода (Arsenal и All Armor). Потом посмотри в файле арсенал мода и попробуй найти похожие строки:
;Arsenal Mod
;Новый арсенал
Их может и не быть.

Эти все строчки, находящиеся под этим разделом кидай в соответствующий файл в соответствующую секцию (секция это то, что указано в []) Armor Mod'a.

Как поставить иконки? Простой вопрос: Найди файл gamedata\texuteres\ui\ui_icon_equipment.dds
Выбери с самым высоким разрешением или, если не знаешь, как, то просто самый большой по размеру в мегабайтах.
Потом самый большой открываешь и качаешь удобную прогу по совмещению этих файлов. ссылка
Если одна иконка, в конечном варианте, будет "налазить" на другую, то перекидывай на любое свободное место переносимую иконку и в соответствующем для неё файле оружия (gamedata\config\weapons\w_*) пропиши ей другую координату (они также показываются в этой программе)

1

Rekongstor я не имел ввиду что нужно вернуть оригинальные файлы торгашей, а изменить их! Или я я чето путаю?

1

Изменить из нужных модов под свой лад!

1

У меня вопрос: как можно через xrSpawner заспавнить НПС, которого я создал для новой группировки?

1

Я спавном ещё не занимался, но знаю, что надо не только заспавнить его, но ещё указать вещи в его инвентаре, сделать аватарку в трупе ну и т.п. ( точно не знаю, что именно )!

1

Группировку новую сделал, повесил на волка нормально. Создаю нового непися приписываю, ему новую группировку-вылет пишет
Expression : fatal error
Function : CInifile::r_section
File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
Line : 342
Description :
Arguments : Can't open section 'esc_unik_npc'
мол типа не может открыть секцию непися ? Подскажите, что сделать?

1

stalker_ak я тожа пробовал спавнить нового НПС через скрипт, написал свой ну очень примитивный, активирую после разговора с Сидоровичем, не знаю как поставить его после появления Меченого в игре! Подскажите кто знает!

1

Леня Баньши как именно создаешь нового НПС, может быть есть ошибки в написании кода? А каким способом ты его спавниш?

1

Я таки как-раз через скрипт и делал и прописывал в info_portions.xml
всавил после


storyline_eliminate_gunslinger
это
esc_unik_npc.esc_unik_npc

esc_unik_npc-мой непись. После старта сразу появляется!

1

esc_unik_npc.esc_unik_npc забыл символами отделить < >

1

Леня Баньши по подпробнее про этот способ можешь написать?

1

Создаём файл в папке gamedata/scripts файл, скажем esc_unik_npc.script. В нём создаём функцию.
Код:
function esc_unik_npc ()
alife():create("esc_unik_npc",vector():set(-218.20,-20.2,-145.63),35362,47)
end

Теперь мы в файле npc_profile.xml (в папке gameplay) добавляем нашего НПС.
Код:


Trader
escape_trader



esc_unik_npc
esc_unik_npc


Копируем или создаём по образцу только нижний блок :) Второго торговца нам ненадо.
Теперь моздадим секцию нашего персоонажа. В файле spawn_section.ltx (gamedata/config/creatures)
в блоке:
;--------Escape--------------
;--------neutrals------------
Создаём секцию.
Код:
[esc_unik_npc]:stalker
$spawn = "respawn\esc_unik_npc"
character_profile = esc_unik_npc
spec_rank = regular
community = dolg

В строке community можете вместо долга вписать другую группировку.
Однако если мы хотим, чтоба наш персоонаж не гулял по Зоне, пока не наткнётся на первуюю аномалию, то пропишем чтобы он стоял на месте. Для этого под community вставляем:
custom_data = scripts\esc_unik_npc.ltx Далее создаём в gamedata/config папку scripts в в папке создаём файл esc_unik_npc.ltx В наш созданый файл вставляем:
Код:
[logic]
active = remark1
danger = danger_ignore

[danger_ignore]
ignore_distance = 5

[remark1]
no_move = true

Всё наш НПС будет стоять на месте своего спауна.
Едем дальше. Нам надо активировать нашего персоонажа. для этого мы должны вставить строку:
esc_unik_npc.esc_unik_npc
Либо в диалог, либо в какой-нибудь квест. Давайте вставим строку в файл info_portions.xml (gamedata/gameplay) под
Код:


storyline_eliminate_gunslinger

Выклядеть это будет так:

Код:


storyline_eliminate_gunslinger
esc_unik_npc.esc_unik_npc


Однако мы не прописали самого НПС, как личность :) В файле character_desc_escape.xml (gamedata/gameplay) добавляем:
Код:


GENERATE_NAME_bandit
ui_npc_u_stalker_bandit_3
esc_wolf_bio

esc_otbrosi_1
dolg stalker_terrain

367
-60


characters_voice\human_01\monolith\
-1

actors\bandit\stalker_bandit_3

[spawn] \n
wpn_groza \n
ammo_9x39_pab9 \n
#include "gameplay\character_items.xml" \n
#include "gameplay\character_food.xml"


#include "gameplay\character_criticals_3.xml"

#include "gameplay\character_dialogs.xml"

Правда тут получится у нас долговец в одежде бандита и говорящего голосом монолитовца xD
Всё сохраняем. НПС готов.

Но так же можно добавить нашему НПС диалог) Как добавлять диалоги написано в нашем факе)
Если хотяте сделать нашему НПС своё имя то в файле stable_bio_name.xml (gamedata/config/text/rus)
добавляем:
Код:

Факер-мазафакер

Брал с Infa R.Z.T. V.0.2

1

Блин сайт много чего скрыл, но ты метод наверное понял?

1

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

1

Да я понял в общем смысл но хотелось бы с тегами.

1

Я через спавнер тоже пробовал, ваще ни чего ни понятно!

1

Byurrer На счет спавна через скрипт я уже писал, там в info_portions.xml
вставляешь указания на запуск скрипта с созданием непися;
у меня это выглядит так:
game_information_portions>
< info_portion id =" storyline_actor_start" >
< task > storyline_eliminate_gunslinger< /task >
< action > esc_unik_npc.esc_unik_npc< /action >
< /info_portion >

< action > esc_unik_npc.esc_unik_npc< /action > -вот указания скрипта создания непися

1

Леня Баньши спасибо попробую, но тут НПС спавнится после активации скрипта т. е. к примеру после диалога, так или нет?
< info_portion id =" storyline_actor_start" > или вот эта строчка указывает на спавн НПС со стартом игры? Просто спавнить НПС через скрипт путем активации его в диалогах получается но не получается спавнить со стартом игры, вот что мне надо!

1

Если чесно то там я особо не лазил! НО как я понял в info_portions.xml прописывается информация о старте игрока,
ну а вставив < action > esc_unik_npc.esc_unik_npc< /action > после < info_portion id =" storyline_actor_start" > мы получим что,
как только поступает инфа о старте игрока следует запуск скрипта на создание непися

1

Byrrer я тут поразмыслил, если делать непися для новой группировки то мой метод скорее всего не подойдет; т.к.
когда команда обращается к файлу непися (я думаю, что она обращается раньше поступления инфы о старте игрока ну и
соответственно создания непися) то не найдя файла тупо выбрасывает из игры и пишет что не может открыть секцию непися,
как было у меня!

1

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

Byurrer, Пробовал через acdc дак там ваще распаковать не получается и эктивперл скачал установил и несколько этих acdc ничего не идет батник вроде правильный а не распаковывает. Помогите кто знает!
- Вот-вот! У меня тоже самое! На прошлом форуме долго жаловался, пока не выпросил вот эти файлы (распакованный алл.спавн):
http://rghost.ru/1269481

1

А не дано через скрипт заспавнить? Никто не пробовал? У меня-то всё получалось!

1

stalker_ak залей на файлообменник а то там файл уже удален. Пожалуйста!

1

ЭЙ! А вы как распаковывали? Через bat файл? Что там у вас написано?

1

Rekongstor напиши подробнее что ты делал.

1

1) Создай bat файл в папке с all.spawn ( в ней же лежит файл acdc.pl )
2) В батнике написал:
acdc.pl -d all.spawn
pause

3) Для компиляции используем:
acdc.pl -c all.ltx
pause

1

Ну у меня написано:
acdc -d all.spawn [-o outdir]
пробовал менял на
acdc.pl -d all.spawn [-o outdir] (b без этого пробовал)
всяко пробовал и не получилось!

1

Rekongstor именно так и пробовал и ни чего не получилось, скачал acdc.exe и с этим тожа не вышло!

1

У тебя какой версии Active Perl? У меня 5.10.0.1004

1

Что у тебя пишет при распаковке в батнике? Там должно быть немного строк.

1

Rekongstor не получилось, выдает ошибку!

1

И ещё кое-что - удали знаки "=" в уроке (а то страница растягивается)

1

http://intreface.narod.ru/spawns_9326vnh7328y327.rar
Не уверен, что это поможет. Потому что у вас вряд ли получится запаковать.

1

ActivePerl-5.10.1.1006 вот такой у меня эктивперл. Rekongstor спасибо за заливку! А вот про = немного не понял.

1

;|actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader|arena_enemy| anarhist |
;=========================================================================================

1

Побробуй без понтов скачать http://www.playground.ru/files/13357 . Там найдёшь пёрл. Попробуй им распаковать.

1

Rekongstor спасибо ща попробую качну!

1

Rekongstor мне нужно для тени чернобыля, или разницы нет?!

1

уже наверное надоел
Распоковал all.spawn, а как непися там прописывать?

1

Rekongstor а эта фигня есть где-нибудь еще а то у мя спутниковый нет, и IP адрес один на тысячи скачать не дает!

1

Два дня мучений не прошли даром наконец-то сделал!!!
Спасибо люди добрые!!!

1

Леня Баньши а что именно получилось сделать? У меня две недели ушло на спавн НПС почти даром, научился примитивно после диалогов спавнить а нормально не получается т е через all.spawn!!!

1

Вот только-что сделал непися через all.spawn, приписал ему новую группировку(а то когда через скрипт делал вылетало), сделал ему новый визуал!!!

1

Леня Баньши молодец! Теперь мне бы тожа через all.spawn сделать да распаковать никак!

1

Не знаю я взял старенький ACDC MENU 2.2 (с первого форума)
для v.1004, у меня не жаловался!

1

У меня все таки получилось сделать спавн нового НПС через скрипт со стартом игры!!!!!!!!!!!

1

Byurrer, щас я залью распакованный алл.спавн( может поможет )( кстати там в.1.004 )

1

stalker_ak спасибо, но у меня уже есть, а ты не мог бы залить http://www.playground.ru/files/13357 , а то с deposita мне никак не скачать у мя спутниковый нет!

1

ты, кстати, забыл убрать лишние знаки =

1

http://narod.ru/disk/20447592000/ActivePerl-5.10.0.1004-MSWin32-x86-287188.rar.html

1

Byrrer наверно тебе уже не понадобиться, но вот ссылка
http://www.playground.ru/redirect/www.stalkerin.gameru.net/downloads/stutils/acdcmenu2.2.rar
Поделись ,на будующее, как через скрипт со стартом игры сделал

1

Rekongstor и Леня Баньши спасибо вам большое, вы настоящие друзья не оставите в случае чего, спасибо вам большое ща буду качать!!!!
Леня Баньши да по той инструкции которую ты мне написал выше по этой я и сделал и спавнится со стартом игры!

1

Rekongstor теперь убрал = так нормально?

1

Леня Баньши спасибо за прогу получилось распаковать!

1

Вот - так-то лучше, а то страница широкая сильно была!

1

У меня вот такой теоретический вопрос: анимация НПС это худ ремарк или я чето путаю?

1

Решил заняться диалогами, для начала подскажите с тем же вступлением в группировку
уже наверное часа 3 сижу, уроки на несколько раз прочитал - ничерта: напишите пожалуйста
как можно проще и подробнее. (первый раз работаю с диалогами)

1

Леня Баньши тожа долго сдиалогами сидел но потом все же освоил. Значит так смотри че надо делать:
К примеры ты хочешь написать диалог Сидоровичу, заходишь в character_desc_escape.xml и со строчки:
< specific_character id="escape_trader" no_random = "1">
и до
< /specific_character>
это описание самого Сидоровича, диалоги которые можно с ним вести написаны так:
< start_dialog>escape_trader_start_dialog< /start_dialog>
< actor_dialog>escape_trader_talk_info< /actor_dialog>
< actor_dialog>escape_trader_jobs< /actor_dialog>
< actor_dialog>tm_trader_dialog< /actor_dialog>
< actor_dialog>tm_trader_reward< /actor_dialog>
добавляешь свою строчку ну к примеру < actor_dialog>escape_trader_para_voprosov< /actor_dialog> выглядеть это будет так:
< start_dialog>escape_trader_start_dialog< /start_dialog>
< actor_dialog>escape_trader_talk_info< /actor_dialog>
< actor_dialog>escape_trader_jobs< /actor_dialog>
< actor_dialog>tm_trader_dialog< /actor_dialog>
< actor_dialog>tm_trader_reward< /actor_dialog>
< actor_dialog>escape_trader_para_voprosov< /actor_dialog>
то что подчеркнуто можно назвать по другому. Далее ты наверное определился какой у тя будет диалог, ну дак вот составляем диалог идешь в config\text\rus\stable_dialogs_escape.xml и начинаешь писать (у меня вот такой диалог):
< string id="escape_trader_para_voprosov_0"> --это начало диалога должно быть 0
< text >Сидорович, у меня к тебе несколько вопросов. Мог ты мне на них ответить?.< /text > --сам текст
< /string>
< string id="escape_trader_para_voprosov_1">
< text >Ну задавай, че знаю то скажу.< /text >
< /string>
< string id="escape_trader_para_voprosov_2">
< text >Кто такой Стрелок.< /text >
< /string>
< string id="escape_trader_para_voprosov_3">
< text >Не могу вспомнить кто я, ты меня раньше видал?< /text >
< /string>
< string id="escape_trader_para_voprosov_4">
< text >А что дальше за воееным блок-постом?< /text >
< /string>

< text >Что дальше за мостом?< /text >
< /string>

< text >Что здесь вообще нужно делать?< /text >
< /string>
< string id="escape_trader_para_voprosov_7">
< text >Как ты сюда попал?< /text >
< /string>
< string id="escape_trader_para_voprosov_8">
< text >Стрелок это очень крутой Сталкер. Говорят, что онсмог пробраться к центру зоны, и вернуться обратно живым. Больше этого кроме него и его команды никто не смог сделать.< /text >
< /string>

< text >Ты мне кого то напоминаешь, вот только не могу всомнить, заходид ко мне похожий на тебя, но така я не могу вспомнить.< /text >
< /string>
< string id="escape_trader_para_voprosov_10">
< text >А что поможет тебе вспомнить?< /text >
< /string>

< text >Ого! Серьезный ты человек, Меченый. Да ладно. Серьезно говорю что вспомнить не могу, сам понимаешь возраст.< /text >
< /string>

< text >За военным блокпостом там совершенно другой мир, там гражданские со своими правами, ну в общем это там совсем не то что зона!< /text >
< /string>
< string id="escape_trader_para_voprosov_13">
< text >Ну дальше за мостом продолжается кордон метров так 400, а там уже идет свалка - не очень хорошее место ...< /text >
< /string>
< string id="escape_trader_para_voprosov_14">
< text >Что здесь нужно делать? Странный вопрос. Здесь нужно выживать, стрелять, бегать и может останешься жив.< /text >
< /string>
< string id="escape_trader_para_voprosov_15">
< text >Эх меченый, попал я сюда давно еще, когда был молодым еще зеленым сталкером. На свободе мне не было места, да и проблемы с законом. Потом освоился. А ведь на воле я тоже торговлей занимался. Тоже продавал незаконно и много вот и посадили, а потом выдался случай мне. Сидели мы не далеко от зоны ну километра так 4. И вот в одну ночь ну так как я был торгашем я всеже договорился с подполковников, не помню как его зовут, что я смогу на 2 часа в конвое сьездить домой повидать родственников, за это он сменя требовал 2000 долларов! Ну что делать я согласился и мы поехали. Приехав домой никаких родственников у меня уже не было, даже не заю куда они пропали, отдал деньги майору который меня сопровождал и тут возле раковины увидал я нож, когда в дверь кто то потучал майор оглянуля, два солдата, сопровождающих меня, подошли к двери, открыли а там никого. Я в это время вспомнил что у меня под раковиной пистолет, тихо нашарив пистолет я выскочил и в это время они стояли ве у двери и высрелил.< /text >
< /string>
< string id="escape_trader_para_voprosov_16">
< text >И что дальше?< /text >
< /string>

< text >Быстро обыскав солдат, нашел там вего 1000 рублей забрал свои 2000 долларов, 2 АК, и 2 Пм рванул к машине завел и сам не понимая как и куда приехал сюда. Остановился в деревне новичков. Они меня сразу приняли за сталкера. Ну вот так я и стал Сидоровичем!< /text >
< /string>
Ну вот вроде бы и написали теперь идем в config\gameplay\dialogs_escape.xml и там пишем такое:
--идентификатор нашего диалога, ну к какому диалогу в stable_dialogs_escape.xml будет обращаться
< dialog id="escape_trader_para_voprosov"> --идентификатор диалога, обязательно!
< phrase_list > --обязательный тег типа лист фразы
< phrase id="0"> --начало диалога т. е. первое что будет сказано будет
< text >escape_trader_para_voprosov_0< /text > --сам текст также бурется из stable_dialogs_escape.xml escape_trader_para_voprosov_0
< next >1< /next > -- следующая фраза
< /phrase>
< phrase id="1">
< text >escape_trader_para_voprosov_1< /text >
< next >2< /next > --вот тут имеется выбор у Меченого какой вопрос задать Сидоровичу
< next >3< /next >
< next >4< /next >
< next >5< /next >
< next >6< /next >
< next >7< /next >
< /phrase>
< phrase id="2">
< text >escape_trader_para_voprosov_2< /text >
< next >8< /next >
< /phrase>
< phrase id="3">
< text >escape_trader_para_voprosov_3< /text >
< next >9< /next >
< /phrase>
< phrase id="4">
< text >escape_trader_para_voprosov_4< /text >
< next >12< /next >
< /phrase>
< phrase id="5">
< text >escape_trader_para_voprosov_5< /text >
< next >13< /next >
< /phrase>
< phrase id="6">
< text >escape_trader_para_voprosov_6< /text >
< next >14< /next >
< /phrase>
< phrase id="7">
< text >escape_trader_para_voprosov_7< /text >
< next >15< /next >
< /phrase>
< phrase id="8">
< text >escape_trader_para_voprosov_8< /text >
< next >10< /next >
< /phrase>
< phrase id="9">
< text >escape_trader_para_voprosov_9< /text >
< next >11< /next >
< /phrase>
< phrase id="10">
< text >escape_trader_para_voprosov_10< /text >
< next >11< /next >
< /phrase>
< phrase id="11">
< text >escape_trader_para_voprosov_11< /text >
< /phrase> --нет перехода на другую фразу значит заканчивается
< phrase id="12">
< text >escape_trader_para_voprosov_12< /text >
< /phrase>
< phrase id="13">
< text >escape_trader_para_voprosov_13< /text >
< /phrase>
< phrase id="14">
< text >escape_trader_para_voprosov_14< /text >
< /phrase>
< phrase id="15">
< text >escape_trader_para_voprosov_15< /text >
< next >16< /next >
< /phrase>
< phrase id="16">
< text >escape_trader_para_voprosov_16< /text >
< next >17< /next >
< /phrase>
< phrase id="17">
< text >escape_trader_para_voprosov_17< /text >
< /phrase>
< /phrase_list>
< /dialog> --диалог закончился
Ну все теперь когда будешь у Сидоровича сможешь задать ему "пару опросов"

1

Byrrer спасибо, щас буду пробовать!

1

Леня Баньши что не понятно спрашивай,на что смогу на то отвечу!

1

Byrrer c Сидоровичем ни каких проблем, никаких вопросов; со структурой разобрался!
А вот с неписем:
rekongstor написал; Создать для НПС диалог.
В диалоге прописать:
< action >dialogs.actor_set_anarhist< /action >, т.е.
я создаю примитивный диалог, и где-то между фразами вставляю
< action >dialogs.actor_set_anarhist< /action >? Или я глубоко ошибаюсь?

1

Byurrer, если всё ещё нужен алл.спавн - вот он ( для 1.004):
http://www.playground.ru/files/31334/

1

Byrrer с неписем я сам разобрался, куда вставлять!
За-то теперь вылетает игра и пишет:
Expression : false
Function : CXml::Init
File : E:\stalker\patch_1_0004\xrXMLParser\xrXMLParser.cpp
Line : 87
Description : XML file:gameplay\dialogs_escape.xml value: errDescr:Error reading end tag.

Отыскал там следующие строки:

{phrase id="0"} -- на эту строчку жалуется
{text /}
{next}4{/next}
{next}5{/next}
{next}22{/next}
{/phrase}

< И > замнил на { и }

С лучилось после того как я добавил в dialogs_escape.xml :
< dialog id="vstuplenie" >
< phrase_list >

< phrase id="0" >
< text > vstuplenie_0 < /text >
< next > 1 < /next > -- следующая фраза
< /phrase>

< phrase id="1" >
< text > vstuplenie_1 < /text >
< next > 2 < /next >
< /phrase >

< phrase id="2" >
< text > vstuplenie_2 < /text >
< next > 3 < /next >
< /phrase >

< phrase id="3" >
< text > vstuplenie_3 < /text >
< /phrase >

< action > dialogs.actor_set_anarhist < /action >


< /phrase_list >
< /dialog >

1

помогите еще раз, пожалуйста! Попытался поставить новое оружие.
- Прописал в мп_ранкс.лтх
- Прописал в string_table_enc_weapons:


Арбалет


ТТХ: описание арбалета

- Прописал в текстур.лтх:
wpn\wpn_crossbow = bump_mode[use:wpn\wpn_crossbow_bump], material[2.85]
- в веапонс.лтх:
#include "w_crossbow.ltx"
- затем патроны:
в веапонс.лтх:
[ammo_arbolt]:ammo_base
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "weapons\ammo\ammo_arbolt" ; option for Level Editor
class = AMMO
cform = skeleton
visual = weapons\strela.ogf
description = enc_weapons1_ammo_ammo-arbolt
$prefetch = 64
cost = 55
box_size = 1
inv_name = ammo-arbolt
inv_name_short = ammo-arbolt
inv_weight = .05

inv_grid_width = 1
inv_grid_height = 3
inv_grid_x = 30
inv_grid_y = 23
k_dist = 1.7
k_disp = 1.5
k_hit = 2
k_impulse = 1
k_pierce = 0.5
impair = 1
buck_shot = 1
tracer = off
wm_size = 0.08
explosive = off
- в string_table_enc_weapons:


Арбалетный болт


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

Заранее спасибо

1

Леня Баньши < action > dialogs.actor_set_anarhist < /action > это нужно писать после строки
< phrase id="3" >
< text > vstuplenie_3 < /text >
< action > dialogs.actor_set_anarhist < /action >
< /phrase >
Description : XML file:gameplay\dialogs_escape.xml value: errDescr:Error reading end tag.
эта ошибка означает что не может читать закрывающий тег ну или типа того, возможно у тя два или несколько закрывающих тега!

1

stalker_ak спасибо большое скачаю!

1

Леня Баньши
{phrase id="0"} -- на эту строчку жалуется
{text /} -- у тебя тут написано неправльно
{next}4{/next}
{next}5{/next}
{next}22{/next}
{/phrase}
типа вот так должно быть
{ text } vstuplenie_0 { /text }

1

Byrrer дело в том что эти строки - {phrase id="0"}
{text /}
{next}4{/next}
{next}5{/next}
{next}22{/next}
{/phrase}
прописаны разрабами т.е. выше того что я прописал, на них то игра и стала жаловаться, после того как я свое добавил!

1

Byrrer я во всем разобрался!!!
Если делать точь в точь по твоему методу то игра и будет вылетать!!!
Написал ты все правильно, токма когда ты прописываешь в config\gameplay\dialogs_escape.xml
и в config\text\rus\stable_dialogs_escape.xml все свое добро,
то его втсавлять нужно между готовыми id.
Поясняю config\gameplay\dialogs_escape.xml:
< game_dialogs>
< dialog id="tutorial_wounded_give_medkit">
пошла структура диалога
< /phrase_list>
< /dialog>
здесь мы вставляем свое добро
< dialog id="xxx">
наша структура диалога
< /phrase_list>
< /dialog>
Затем идет:
< dialog id="escape_factory_assault_start">.
Так же по аналогии и с config\text\rus\stable_dialogs_escape.xml

1

Леня Баньши я забыл написать вот такую строчку
< dialog id="escape_trader_para_voprosov">
а к нему закрывающий тег написал, ошибка, извиняюсь, исправил!

1

Byrrer где прописать в инвентаре название группировки, а то когда вступаешь вылетает!

1

Леня Баньши string_table_general.xml? ну я вот здесь пишу а может быть скрипт неправильный?

1

Не пишет
Expression : no_assert
Function : CIni_IdToIndex::GetById
File : e:\stalker\patch_1_0004\xr_3da\xrgame\ini_id_loader.h
Line : 134
Description : item not found, id
Arguments : actor_anarhist

1

Леня Баньши эта ошибка означает, что не найден идентификатор, игра вылетает при загрузке или нет?

1

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

1

Byrrer когда уже говорю с неписем!

1

Леня Баньши щас буду пробовать вступать.

1

Леня Баньши не получилось, вот сам скрипт:
function actor_set_wind (actor, npc)
printf ("ACTOR NOW IN [WIND] COMMUNITY")
if db.actor then
db.actor:set_character_community ("actor_wind", 0, 0)
end
return true
end
wind - группировка

1

1ssstalkerrr1 если тебе еще нужно посмотри что нибудь здесь http://www.gameru.net/forum/index.php?showtopic=22233
мож че-нибудь полезное найдешь.

1

Подскажите как делать озвучку диалогов!

1

Подскажите как сделать с помощью X-Ray SDK так, чтобы stalker-npc ходил только по тому пути по которому я указал? А не стоял на месте или разгуливал по всей зоне. Вот например как военные под мостом(на Кордоне). И этот путь-ходьбы случайно не Way Points-ом (в LevelEditor) на до создавать? Кто может, знает помогите.

1

товарищ Byurrer, в том-то и прикол, нету ни кода ниуведомления винды о некорректной работе программы. Загрузка картинки,
вылет. Вообще ничего не пишет

1

Zhenyapetrenko попробуй такую фигню: когда игра вылетает открывай любой текстовый редактор и нажимай вставить, почти всегда вставляется код ошибки!!!

1

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

1

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

1

подскажите плз как можно уменьшить кол-во NPC в игре. заранее спасибо

1

В se_respawn.script начиная со строчки local simMaxCount = и заканчивая zombied_novice = 20, zombied_regular = 15, zombied_veteran = 10, zombied_master = 10,
изменяй числа на меньшие и НПС в зоне будет спавнится все меньше и меньше, наверное если поставишь 0 то спавнится не будут, но это респавн, а количество людей можно изменить через прогу xrSpawner, просто удаляя НПС, удалив они просто не будут спавнится вообще!

1

хе-хе, я не локи о оружие делаю. Локи потом будут... если не лень будет

1

Byurrer
огромное спасибо, а то надоело млин по Зоне как по ярмарке ходить)))

1

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

1

а кто-нибудь знает, что от меня хотят:

Expression : fatal error
Function : CInifile::r_section
File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
Line : 342
Description :
Arguments : Can't open section 'w_colt_python'

и еще:
с помощью sie вставляю новіе иконки. Но на все места не хватает, я розширил место под них (по горизонтали). И после того как я зашел в игрушку увидел, что все иконки сжались вдвое по горизонтали. Можно єто как-то исправить?

1

Zhenyapetrenko Arguments : Can't open section 'w_colt_python' это значит что игра не смогла открыть раздел w_colt_python, возможно ты его не верно указал, иконки просто сжались и все, или они по частям показывают? А ты не пробовал на основе других иконок сделать свою текстуру такого же формата и прописать ее ui?

1

Вопрос такой: как удалять с худа всякие шкалы и карту и др.?

1

Jonny Braun, нажми во время игры + или -(Плюс или минус), и худ изчезнет.

1

Dmitriy15 15
Так просто О_о
Спасибо, сейчас попробуем

1

У меня проблема: Я хотел закинуть в простой Сталкер тени Чернобыля костьюмы из мода Олд Гуд Сталкер. Все вроде закинул, заменил, торговцу прописал, купил. Но, когда надеваю у меня из игры выбивает, а в логе пишет:
[error]Expression : fatal error
[error]Function : CRender::texture_load
[error]File : E:\stalker\sources\trunk\xr_3da\xrRender\Texture.cpp
[error]Line : 295
[error]Description :
[error]Arguments : Can't find texture 'npc_icon_bandit_master_outfit'
Костюм Плащ бандита мастера. Текстуры вида Меченого в этом костюме, тоже заменил из мода в простую игру.
Подскажыте кто может.

1

Кстати, напишу как создать нового торговца ( так - же можно создать простого нпс по этой системе)
Это писал не я!

Сейчас мы научимся создавать нового торговца - Петровича:
1.Для начала создадим нового NPC, к которому и привяжем функцию торговли.
Cоздадим описание нашего NPC, для этого в папке gamedata\config\gameplay создадим xml файл, содержащий описание нашего торговца. Назовем его к примеру
Character_unique_by_qwerty111.xml (вообще называть можно как угодно).
В нем пишем:




Петрович
ui_npc_u_stalker_sv_balon_1

petrovich_trader

petrovich_trader
stalker

stalker_terrain

730
96
actors\svoboda\stalker_sv_balon_1
characters_voice\human_02\freedom\
-1


[spawn] \n
wpn_sig220 \n
ammo_11.43x23_hydro = 1 \n
wpn_sig550 \n
ammo_5.56x45_ap = 1 \n


hello_dialog




За тем прописываем его в npc_profile.xml(gamedata\config\gameplay), т.е под строчкой Новые Профиля пишем:

petrovich_trader
petrovich_trader

После этого регистрируем описание нашего торговца в файле gamedata\config\system.ltx
В секцию [profiles] дописываем в конец после запятой Character_unique_by_qwerty111.
3.Чтобы персонаж появился, нужно его заспавнить, для этого:
В папке gamedata\config\creatures есть замечательный файл spawn_sections.ltx
Будем править его.
Дабы не путаться потом, в самое его начало пишем:

[petrovich_trader_spawn]:stalker_trader
character_profile = petrovich_trader
spec_rank = veteran
community = stalker
use_single_item_rule = off
can_select_items = off
custom_data = scripts\petrovich_trader.ltx
Далее создаем скрипт с названием, например my_spawns.script в папке gamedata\scripts\
Прописываем в него функцию:

function petrovich_trader_spwn1()
local obj
local a = vector() -- Задаем тип переменной
local dir = db.actor:direction()

a.x = -246.51 -- координата X
a.y = -19.52 -- высота Y
a.z = -144.60 -- координата Z

obj = alife():create("petrovich_trader_spawn",a,13193,8,65535)
alife():create_ammo("ammo_9x18_fmj",
obj.position,
obj.m_level_vertex_id,
obj.m_game_vertex_id,
obj.id,
20) -- число патронов, которые будут спавнится при убиистве Петровича
end

Открываем блокнотом escape_dialog.script(gamedata\scripts\) и там в диалоге с Сидоровичем, например, после квеста с флешкой Шустрого,
функция: "function give_wounded_flash(first_speaker,second_speaker)"
(Можно впринципе в любой диалог)
вставляем:

my_spawns.petrovich_trader_spwn1()

вот так будет выглядеть разговор с Сидером:

function give_wounded_flash(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "esc_wounded_flash", "out")
dialogs.relocate_money(second_speaker, 1500, "in" )
my_spawns.petrovich_trader_spwn1() -- Вызов Петровича
end
Т.е наш персонаж появится только после выполнения задания с флешкой Шустрого, и когда Сидорович выдаст вам деньги за это задание, а торговец появляется по нашим координатам рядом с лагерем новичков.
4.Теперь в папке \gamedata\config\scripts создаем файл petrovich_trader.ltx
Этот файл является проводником к файлу торговли и логикой персонажа.
И в нем пишем:
[logic]
trade = misc\trade_petrovich.ltx
active = remark

[remark]
anim = wait

5.Теперь создаем в папке \gamedata\config\misc файл trade_petrovich.ltx
Это и есть файл торговли.
И в начале пишем:
[trader]
buy_condition = petrovich_generic_buy
sell_condition = petrovich_start_sell
buy_supplies = supplies_start

и потом как у других торговцев,т.е у бармена например [barman_generic_buy], а у нас будет [petrovich_generic_buy]
Если кому то не понятно можете посмотреть мой файл торговли: [Гости не могут видеть ссылки,регистрация не отнимет много времени :) ]

Все, торговец создан.

1

Can't find texture 'npc_icon_bandit_master_outfit'
тебе нужен файл gamedata\config\ui\ui_icons_npc.xml
и текстура для него - gamedata\textures\ui\ui_icons_npc.dds

1

Подскажите как вычислить направление взгляда НПС!

1

Byrrer глянь вот это http://www.playground.ru/redirect/www.stalkerin.gameru.net/modules.php?name=Downloads&d_op=getit&lid=248
там, если я не ошибаюсь, строчка dir отвечает за взгляд.

1

Создал точки респавна нпс новой группировки, только перехожу на ту локацию где точка респавна,
вылет, пишет:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
Помогите пожалуйста!!!

1

ну... попробуй открыть _g.script и заменить примерно на 20й строчке всю функцию на:
function printf(fmt) -- (c) улучшено by Rekongstor (Rek0) 11:28, 23.02.2010 (c)
get_console():execute(fmt) -- записываем всё в лог, а не вылетаем...
end -- завершаем функцию.

я это использовал в DarkScape Notes. называется "Динамический лог". Когда прийдёшь на точку респавна, будет вылет или нет, после выключения (или вылета) игры кидай мне файл лога - Мой компьютер\Общие документы\STALKER SHOK\logs\xray_*.log

1

Эээээ, Nekro264, надо бы посмотреть лог файла!
Повтори что ты сделал, и после вылета, просто открой любой текстовый редактор (хоть тот же блокнот)
и нажми правка-вставить, и отправь!

1

У меня такая проблема когда я спавню НПС на крыше домов они появляются на земле!!! Как сделать чтобы они спавнились на крыше?

1

Никак. У них на крышах нет AI сетки.

1

а можете подсказать еще где находится weapons\generic_weapon05 что это такое (ну и как его открыть если есть какие-то особенности)
Заранее спасибо

1

NeKrO264 а ты диалоги в config\gameplay\dialogs_escape.xml
и в config\text\rus\stable_dialogs_escape.xml между уже готовыми втавил?

1

Zhenyapetrenko, ты вообще о чём писал? О файле каком-то? Если да то его нет в распакованной игре.

1

NeKrO264, убери лишние знаки(=) в строке:

; |actor |act_dol|act_fre|act_wind|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader |arena_enemy|wind|
;===============================================================================================

а то форум расширяется!

1

Все, проблемы с табличкой уже нет. Я исправил и удалил сообщение на форуме (чтобы место не занимало)

1

Делаю мод, начинаю новую игру все нормально, сохраняю, тут же загружаю сохранение и при синхронизации вылет без лога, вот ошибка:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...:\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:391: attempt to concatenate field '?' (a nil value)
Что это значит и как исправить?

1

У меня было что - то подобное с Народной Солянкой 2010, но я так и не смог исправить тот глюк, и начал новую игру. Все вроде прошло.

1

а как конкретно расширить поля для иконок в Фотошопе?

1

Но не могу понять что это за точки path_walk, path_look! Объясните пожалуйста!

1

Как увеличить здоровье (у гг) и скорострельность (у винтовки)? Плиз объесните.

1

Minoid, насчёт здоровья - в файле actor ( находится в gamedata/config/creatures/ ) пораметры

[actor_immunities_gd_novice]
burn_immunity = 0.5
strike_immunity = 0.5
shock_immunity = 0.5
wound_immunity = 0.5
radiation_immunity = 0.5
telepatic_immunity = 0.5
chemical_burn_immunity = 0.5
explosion_immunity = 0.1
fire_wound_immunity = 0.5


поставь на более меньшие, то есть:

...
explosion_immunity = 0.05
fire_wound_immunity = 0.25


так здоровье будет убывать в 2 раза меньше( чем в оригинале ), при взрывах и пулевых ранениях!
Для каждой сложности игры свои параметры! ( чем меньше значение - тем легче играть )

1

Byurrer, я сам плохо разбираюсь в этом, но могу сказать что:

path_walk - точка в которую идёт персонаж( или через которую он проходит или в которой стоит )( то есть задаешь персонажу две точки, и он будет ходить от одной к другой ).
path_look - точка в которую он смотрит при остановках( если снайперу задать две таких точки, то он будет "сканировать" пространство меж ними )( больше двух - НЕзадавать ).

1

Zhenyapetrenko, про Фотошоп:

Нажимаешь вкладку "Изображение" вверху экрана, потом "Размер холста", там укажи размер ( Важно: указывай в пикселах ). Например:


Ширина: 1024
Высота: 2048


ставь:

Ширина: 2048 - это будет в два раза больше чем в оригинале.


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

1

А где в файле оружки (например у ак74) строчки отвечающие за силу скорострельность и так далее...

1

Max1m97
Ну и, что ты этим хотел сказать? Или же просто делился знаниями...?
абсолютно новый костюм с уникальным визуалом. - для уникального визуала не хватает новой огф модели.
Сложность: Тяжело - из трудного тут только разгадывание "недописок" в инструкции( таких как: Код

То, что отображается в игре (название) ) .

1

что-то не понял, что тут тяжелого?

1

NeKrO264, вот пример на АК-74

ammo_mag_size = 30 - максимум патронов в обойме
ammo_class = ammo_5.45x39_fmj, ammo_5.45x39_ap - тип патронов
grenade_class = ammo_vog-25, ammo_vog-25p - тип подствольных патронов
inv_weight = 3.3 - вес
hit_power = 0.35, 0.39, 0.42, 0.45 - повреждение; для каждой сложности
hit_impulse = 140 - сила ударения о предметы( чем больше, тем дальше отлетит предмет )
fire_distance = 1000 - расстояние в метрах, дальше которого пуля не летит
bullet_speed = 900 - сила выстрела( чем меньше, тем слабее пуля летит )
rpm = 600 - скорострельность

Там много параметров, но некоторые - с описанием. Я объяснил лишь главные, которые без описания.

1

Я сделал нового торговца (Петровича) и прицепил к нему квест. Но в файле task_manager.script я не знаю какую цифру поставить Петровичу:
local random_task = nil

local parent_by_story = {
[003] = "trader",
[500] = "barman",
[902] = "ecolog",
[507] = "dolg",
[707] = "freedom",
[006] = "wolf",
[004] = "shustriy",
[510] = "drunk_dolg",
[504] = "hunter",
[518] = "zastava_commander",
[506] = "petrenko",
[607] = "lisiy",
[515] = "mercenary"
[010] = "petrovich"
}

local story_by_parent = {
trader = 003,
barman = 500,
ecolog = 902,
dolg = 507,
freedom = 707,
wolf = 006,
shustriy = 004,
drunk_dolg = 510,
hunter = 504,
zastava_commander = 518,
petrenko = 506,
lisiy = 607,
mercenary = 515,
petrovich = 010,
}
Не знаю правильно ли я сделал или нет, но игра вылетела.
Лог:
FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description :
[error]Arguments : LUA error: d:\s.t.a.l.k.e.r. mod 1\gamedata\scripts\_g.script:1232: attempt to index global 'task_manager' (a nil value)

Петрович стоит возле Сидра на поверхности.

1

Точно не знаю, но я заметил, что персы на кордоне начинаются с цифры "0", а на баре с цифры "5". Похоже тебе надо ставить любое число начинающееся на ноль.

1

так я и поставил, пока не вылетело))

1
1

Max1m97 легко:
Для создания дополнительного квеста у Сидоровича нам понадобятся всего три файла:
gamedata\config\gameplay\storyline_info_taskmanager.xml
gamedata\config\misc\task_manager.ltx
gamedata\config\text\rus\stable_task_manager.xml

Открываем task_manager.ltx, в начале видим длинный список заданий, а уж потом сами задания и условия выполнения к ним. Т.е. cначала идет:
[...]
tm_kill_stalker_5
tm_kill_stalker_6
tm_kill_stalker_7
[...]

А затем то, что нам нужно:
[...]
[tm_kill_stalker_6]
type = kill_stalker
community = actor
text = tm_kill_stalker_6_text
description = tm_kill_stalker_6_descr
parent = trader
target = sim_stalker_novice
;reward_money = 1000
reward_reputation = +3
reward_rank = 2
reward_item = af_vyvert, conserva
time = 86400
prior = 1

[tm_kill_stalker_7]
type = kill_stalker
community = actor
text = tm_kill_stalker_7_text
description = tm_kill_stalker_7_descr
parent = trader
target = esc_wolf
reward_money = 10000
reward_reputation = +3
reward_rank = 2
reward_item = vodka, conserva
time = 86400
prior = 1
[...]

Рассмотрим структуру этих записей, заодно создав новую:
[tm_kill_stalker_7] – наше задание
type = kill_stalker – тип задания, в данном случае – убийство сталкера
community = actor – комьюнити, к которому принадлежит выполняющий задание (странный параметр, в игре используется - везде выставлен равным actor'у)
text = tm_kill_stalker_7_text – описание нашего задания в диалоге
description = tm_kill_stalker_7_descr – описание нашего задания в PDA
parent = trader - заказчик
target = esc_wolf – цель, в данном случае мы собираемся грохнуть Волка
reward_money = 10000 – сколько денег нам дадут за выполнение
reward_reputation = +3 – повышение/понижение репутации после выполнения задания
reward_rank = 2 – кличество очков ранга, выдаваемых за выполнение
reward_item = vodka, conserva – предметы, выдаваемые в награду за квест
time = 86400 – время выполнения квеста
prior = 1 – приоритет задания

Не забываем про PDA. В файл:
gamedata\config\gameplay\storyline_info_taskmanager.xml

Добавляем следующие строки:

tm_kill_stalker_7_descr


Текст на русском для задания нужен? Тогда открываем
gamedata\config\text\rus\stable_task_manager.xml

И туда вгоняем следующие строки:

Убить Волка


Достал меня Волк! Понимаешь, достал! Ворует у меня водку, понимаешь, потом идет и клянчит деньги на
тушенку, потому что новички его не слушают и есть ничего не дают, а вот сойти со своего места и пойти охотится на кабанов, он,
видите ли, не хочет, ибо ЛЕНЬ! Грохни его, Меченый, я в долгу не останусь.


Сидрыч заказал убийство Волка


Важно! Эти строки не должны выходить за пределы тегов и .

Вот и все, теперь у Сидоровича появился новый квест - "Убить Волка"

1

Max1m97, насчёт квеста - я незнаю( сам не пробовал )

NeKrO264, попробуй поставить самое большое число.

1

Я это пробывал но он даже не отображается у Сидора( Вот по другому вопрос поставлю как создать квест новому НПС (если надо его имя Нож)

1

Max1m97 легко:
Для создания дополнительного квеста у Сидоровича нам понадобятся всего три файла:
gamedata\config\gameplay\storyline_info_taskmanager.xml
gamedata\config\misc\task_manager.ltx
gamedata\config\text\rus\stable_task_manager.xml

Открываем task_manager.ltx, в начале видим длинный список заданий, а уж потом сами задания и условия выполнения к ним. Т.е. cначала идет:
[...]
tm_kill_stalker_5
tm_kill_stalker_6
tm_kill_stalker_7
[...]

А затем то, что нам нужно:
[...]
[tm_kill_stalker_6]
type = kill_stalker
community = actor
text = tm_kill_stalker_6_text
description = tm_kill_stalker_6_descr
parent = trader
target = sim_stalker_novice
;reward_money = 1000
reward_reputation = +3
reward_rank = 2
reward_item = af_vyvert, conserva
time = 86400
prior = 1

[tm_kill_stalker_7]
type = kill_stalker
community = actor
text = tm_kill_stalker_7_text
description = tm_kill_stalker_7_descr
parent = trader
target = esc_wolf
reward_money = 10000
reward_reputation = +3
reward_rank = 2
reward_item = vodka, conserva
time = 86400
prior = 1
[...]

Рассмотрим структуру этих записей, заодно создав новую:
[tm_kill_stalker_7] – наше задание
type = kill_stalker – тип задания, в данном случае – убийство сталкера
community = actor – комьюнити, к которому принадлежит выполняющий задание (странный параметр, в игре используется - везде выставлен равным actor'у)
text = tm_kill_stalker_7_text – описание нашего задания в диалоге
description = tm_kill_stalker_7_descr – описание нашего задания в PDA
parent = trader - заказчик
target = esc_wolf – цель, в данном случае мы собираемся грохнуть Волка
reward_money = 10000 – сколько денег нам дадут за выполнение
reward_reputation = +3 – повышение/понижение репутации после выполнения задания
reward_rank = 2 – кличество очков ранга, выдаваемых за выполнение
reward_item = vodka, conserva – предметы, выдаваемые в награду за квест
time = 86400 – время выполнения квеста
prior = 1 – приоритет задания

Не забываем про PDA. В файл:
gamedata\config\gameplay\storyline_info_taskmanager.xml

Добавляем следующие строки:

tm_kill_stalker_7_descr


Текст на русском для задания нужен? Тогда открываем
gamedata\config\text\rus\stable_task_manager.xml

И туда вгоняем следующие строки:

Убить Волка


Достал меня Волк! Понимаешь, достал! Ворует у меня водку, понимаешь, потом идет и клянчит деньги на
тушенку, потому что новички его не слушают и есть ничего не дают, а вот сойти со своего места и пойти охотится на кабанов, он,
видите ли, не хочет, ибо ЛЕНЬ! Грохни его, Меченый, я в долгу не останусь.


Сидрыч заказал убийство Волка


Важно! Эти строки не должны выходить за пределы тегов и .

Вот и все, теперь у Сидоровича появился новый квест - "Убить Волка"

1

Я тебе говорю он даже не отображается( Мне мне надо квест новому НПС (если надо его имя Нож)

1

NeKrO264, нет - то которое больше всех остальных чисел в таблице.

1

Почему не отображается?? У меня все прекрасно идет, я уже Волка убил.
А с НПС делай то же самое что и с Волком и еще:
Да, и зарегистрируйте сами ветки диалогов в файле dialogs.xml. Вот пример того, как это сделано для заданий "Долга":

task_manager.init_dolg_task_dialog


task_manager.init_dolg_reward_dialog
task_manager.has_active_vendor_task


Соответственно, пройдем туда, куда указывает строка task_manager.init_dolg_task_dialog - в task_manager.script:
function init_dolg_task_dialog(dlg)
get_random_task():init_task_dialog(dlg, "dolg")

По аналогии делаем и с нашим НПС.

1

Понятно ща попробуем кстати напишите как добавить к примеру оружие пистолет пулемет ФН п-90

1

О_о получилось круто) спасибо) про оружие напишите пожалуйста

1

Ну , смотри , тебе нужна модель , П-90 я видел на АМК форуме , там как я понимаю для самостоятельного добавления в игру , я добавлял по учебнику с
http://stalkerin.gameru.net/wiki/index.php/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F
Думаю проблем не будет =)
Кстати кто знает как конвертировать из КСС в сталкер модели оружия ?

1
1

Да , уже делал , но использовал модели других авторов

1

А что ты собираешься делать ?

1

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

1

Мозила категорически ругается
Все , сорь , браузер тупит
Уже зашел

1

Я пробовал спавнить неписеё через скрипт, но у меня не получилось! Вот статья:
http://sdk.stalker-game.com/ru/index.php?title=C%D0%BF%D0%B0%D0%B2%D0%BD_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82

0

Леня Баньши спасибо что постарался, хотя тегов все равно нет ну да ладно, я понял, буду пробовать щас пробую спавнить через all.spawn редактором xrSpawner, пока ниче не получается!

0

Да блин вроде вот пошло но вылет с ошибкой что не может найти идентификатор, буду пробовать авось получится. А на счет спавна через скрипт там можно чтобы НПС спавнились автоматически при пявлении ГГ в игре? Ну типа как через all.spawn

0

Пробовал через acdc дак там ваще распаковать не получается и эктивперл скачал установил и несколько этих acdc ничего не идет батник вроде правильный а не распаковывает. Помогите кто знает!

0

Подскажите как спавнить НПС через xrSpawner!!!!!!!

0

Леня Баньши значит так, пишешь вот это
В файле death_items_by_communities.ltx:
af_dummy_spring = 0
af_fuzz_kolobok = 0

;Еда
vodka = 0

[arena_enemy]
[actor_dolg]

[anarhist]: stalker
bread = 0
kolbasa = 0
vodka = 0
energy_drink = 0.3

0

Zhenyapetrenko
Расширять надо через фотошоп.Или вытащи расширеную из другого мода.

0

Спасибо за совет буду пробовать, если что кину файл лога!

0

Большое спасибо Rekongstor
У меня вопрос: после того как я изменил вид нпс Волка, и зашол в игру, у меня вылетело!
Поскажыет в чем проблема? (в лог я тогда забыл посмотреть, а теперь там нету проблемы с нпс))
Вот как я сделал:
Изменим некоторые параметры. Выдадим ему FN2000 и Desert Eagle, примем в "Долг" и сделаем неограниченное количество денег:



esc_wolf_name
ui_npc_u_stalker_neytral_balon_1
esc_wolf_bio

esc_wolf
dolg stalker_terrain

434
5


characters_voice\human_01\stalker\
-1

actors\neytral\stalker_neytral_balon_1

[spawn] \n
wpn_deagle \n
ammo_11.43x23_fmj = 1 \n
wpn_fn2000 \n
ammo_5.56x45_ap \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n


#include "gameplay\character_criticals_4.xml" //

escape_lager_volk_talk
dm_hello_dialog
dm_cool_info_dialog
dm_help_wounded_medkit_dialog
tm_wolf_dialog
tm_wolf_reward
После этого у меня игра перестала идти, и я ее переустановил.

0

Народ у меня еще одна проблема)
Создал свой квест, и вот захожу в игру и выбивает. В логе пишет:
FATAL ERROR

[error]Expression : false
[error]Function : CXml::Init
[error]File : E:\stalker\sources\trunk\xrXMLParser\xrXMLParser.cpp
[error]Line : 87
[error]Description : XML file:gameplay\dialogs_escape.xml value: errDescr:Error reading end tag.

Файл dialogs_escape.xml
Вот мой диалог о квесте:
(Петрович это торговец, которго я создал)

tutorial_end


petrovich_find_artefact_0
1


petrovich_find_artefact_1
2


petrovich_find_artefact_2
quest_petrovich_artefact
3


petrovich_find_artefact_3
dialogs.break_dialog


petrovich_find_artefact_4
escape_dialog.have_af_big_soul
escape_dialog.give_af_big_soul
7


kvest_petrovich_find_artefact_started
petrovich_find_artefact_5
6


petrovich_find_artefact_6
8


petrovich_find_artefact_7
test_quest_af_big_soul_give
escape_dialog.give_artefact_reward
8


petrovich_find_artefact_8

0

Насчёт скорострельности - заходи в любой файл в папке gamedata/config/weapons/ и исправляй параметр rpm на нужное значение, например:

rpm = 750

исправь на

rpm = 950
и будет стрелять быстрее!

0
0

нашел на форуме АМККак создать абсолютно новый костюм с уникальным визуалом.
Сложность:Тяжело
1. Открываем outfit.ltx (gamedata/config/misc)
Копируем секцию например СКАТ-10М в конец файла и редактируем:
Код
[ваше_название_костюма]:outfit_base
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "outfit\ваше_название_костюма"
;$prefetch = 32
class = E_STLK
cform = skeleton
visual = equipments\ваше_название_костюма
actor_visual = actors\soldier\ваша_модель.ogf

ef_equipment_type = 4

inv_name = ваше_название_костюма_в_конфиге
inv_name_short = ваше_название_костюма_в_конфиге
description = ваше_название_костюма_описание_в_конфиге
inv_weight = 16.0;;;;ВЕС КОСТЮМА;;;;
slot = 6
inv_grid_width = 2;;;;КООРДИНАТЫ ИКОНКИ;;;;
inv_grid_height = 3
inv_grid_x = 18
inv_grid_y = 17
full_icon_name = npc_icon_militaryspec_outfit

cost = 48000;;;;СТОИМОСТЬ КОСТЮМА;;;;
full_scale_icon = 10,6;иконка сталкера в костюме в полный рост

immunities_sect = ваше_название_костюма_immunities;;;;ЭТО УВЕЛИЧЕНИЕ ЗАЩИТЫ КОСТЮМА;;;;

; MEDIUM RESISTANCE
burn_protection = 0.5
strike_protection = 0.5
shock_protection = 0.5
wound_protection = 0.5
radiation_protection = 0.5
telepatic_protection = 0.5
chemical_burn_protection = 0.5
explosion_protection = 0.5
fire_wound_protection = 0.5

bones_koeff_protection = armor_helmet_damage

[ваше_название_костюма_immunities]
burn_immunity = 0.004;коэффициенты иммунитета самого

костюма
strike_immunity = 0.003
shock_immunity = 0.003
wound_immunity = 0.005
radiation_immunity = 0.00
telepatic_immunity = 0.00
chemical_burn_immunity = 0.003
explosion_immunity = 0.004
fire_wound_immunity = 0.006

2.Открываем файл string_table_outfits.xml из папки (gamedata/config/text/rus) и в конец файла

пишем:

Код

То, что отображается в игре (название)


То, что отображается в игре (описание)


3. Находим в папке gamedata/meshes/actors/soldier файл stalker_military_black.ogf делаем его
копию и переназываем её как хочется.
Например в stalker_military_white.ogf

Открываем её блокнотом и находим это: act\act_stalker_military_1.
Меняем на любой текст, но главное чтобы символов было столько же, иначе модель не будет работать. Меняем например на это:
_ct_stalker_military

4.Делаем тоже самое с stalker_comander_suit.ogf (gamedata/meshes/equipments).
Получаем stalker_comander_suit_white.ogf

5.Создаём текстуру с названием _ct_stalker_military.dds (можно взять готовую из любого

текстурного мода и переназвать как надо.

6.Прописываем в продажу торговцу и радуемся.

0

какое оружие делал? Поможешь мне с модом?

0

NeKrO264, скорее всего где-то еще напортачил

0

Понятно когда на сайт пройти сможешь?

0

Сталкер ак напиши как создавать диалоги если умеешь

0

Max1m97 я знаю:
Создание новых веток диалогов
Теория

1) Списки веток диалогов содержатся в файлах вида gamedata/config/gameplay/character_desc_*.xml

Это, например:

character_desc_zombied.xml character_desc_stalker.xml character_desc_garbage.xml ...

Файлы character_desc_*.xml можно сравнить со стволом дерева диалогов. В них перечисляется названия прикрепляемых веток диалогов

Например вот список веток диалога с Сидоровичем взятый из файла character_desc_escape.xml
escape_trader_start_dialog
escape_trader_talk_info
escape_trader_jobs
tm_trader_dialog
tm_trader_reward
escape_trader_done_blockpost_box

В свою очередь каждая ветка диалога также может ветвится.

2) Ветвление диалогов прописывается уже в других файлах.

Например, ветвление диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml Возьмем оттуда, например, ветвление escape_trader_jobs.

Ветвление имеет довольно большие масштабы, поэтому приведу только часть:

tutorial_end


escape_trader_talk_info_1
100
99
9995

...

escape_trader_talk_info_0
1




Далее, tutorial_end - это еще проверка, на наличие у игрока так называемых infoportions, выдаваемы в процессе ключевых диалогов. В данном случае это проверка на то, закончена ли определенная стадия туториала, или нет. Т.е. ветка допустится в список реплик если стадия туториала закончена.

А далее идут конкретные фразы, содержащие ссылки на вытекающие фразы, например:

escape_trader_talk_info_0
1


Это основа ветки escape_trader_talk_info.

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

1 - это ссылка на вытекающую фразу :

escape_trader_talk_info_1
100
99
9995


В свою очередь 100, 99, 9995 это ссылки на фразы веточки растущие из фразы .

3) Текст каждой фразы содержится в третьем файле. Для диалога с Сидоровичем тексты лежат в файле gamedata/config/text/rus/stable_dialogs_escape.xml

Есть несколько вопросов.


Спрашивай, только я ведь всего не знаю. Сам понимаешь, сижу тут
целыми днями, а жизнь - она вся там, снаружи, в Зоне. Могу рассказать о Зоне вообще, а немного
могу о ближайших окрестностях, где сам ходил.

...

Эти строки содержат тексты для фраз и

Итого диалоги разложены по трем, а то и более файлам.

Да кстати, путь по веткам может быть зацикленным, если того требует диалог. Например так:

...
1
2


...
11
12


...
1 - Это возврат к фразе №1 (зацикливание)
111

Практика

Добавим в диалог с Сидоровичем ветку своего собственного изготовления.Например такую:
Меченый: Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые?
Сидорович: Чего?!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.

Для этого:

1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для trader припишем свою ветку с произвольным названием. Это будет, например, escape_trader_letat_gusi.

Т.е у нас получится так:

...
escape_trader_start_dialog
escape_trader_talk_info
escape_trader_jobs
tm_trader_dialog
tm_trader_reward
escape_trader_done_blockpost_box
escape_trader_letat_gusi



Записываем изменения, с этим файлом пока всё.

2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml

Диалогу:
Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые?
Сидорович: Чего?!!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.

Будет соответствовать такая структура:

escape_trader_letat_gusi_0
1


escape_trader_letat_gusi_1
2


escape_trader_letat_gusi_2
3


escape_trader_letat_gusi_3


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

В итоге у нас получилась такая структура:

tutorial_end


escape_trader_letat_gusi_0
1


escape_trader_letat_gusi_1
2


escape_trader_letat_gusi_2
3


escape_trader_letat_gusi_3




Её нужно вставить в любом месте между dialog id'ами других веток в файле dialogs_escape.xml. Главное - не промахнутся и засунуть именно между, а не внутрь одного из dialog id.

После сохранения внесенных изменений с файлом dialogs_escape.xml все.

3) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml

Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию:

Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые?


Чего?!


Ты их совсем, совсем не кормишь?


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



В любом месте между уже существующими string id. После сохранения изменений, у нас все готово. Можно загружать игру и смотреть что получилось.

0

Это диалоги а они мне не надо они уже созданы) Как изменить снаряжение выдавшиеся волком?

0

Max1m97
S.T.A.L.K.E.R\gamedata\scripts
дальше ищешь строчку function give_weapon_to_actor (trader, actor)
и по аналогии со вставленным вставляешь туда свое оружие. У меня например Волк выдает огнемет и мп7а3.


З.Ы. помогите мне до конца разобраться с ui_icon_equipemet!!!!! я не могу добавить иконки волын т.к. места НЕТ!!!! и я не знаю как его розширить

0

zhenyapetrenko новое оружие или старое?

0

Лафугикс помню говорил как расширить , вот только как я не запомнил

0

а вот и я)))) http://forums.playground.ru/stalker_shadow_of_chernobyl/mods/609446

0

Помогите пожалуйста. Такая вот проблема. Я создал две абсолютно новые локации создал между ними переход. компиляция прошла успешно ну и остальные все шаги все удачно.(1aimap, 3levelgraph, 4gamegraph, 5allspawn) все нормально. Начинаю новую игру появляюсь на локации все нормально но как только хочу перейти с одной локации на другую выбивает с логом ошибки таким.
Expression : ai().game_graph().header().levels().end() != I
Function : CALifeGraphRegistry::setup_current_level
File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_graph_registry.cpp
Line : 91
Description : Graph point level ID not found!

Помогите очень нужно понять. что и куда. Или скажите как правильно создать переход между локациями.

0

График уровня точки ID не найден!
вот что значит эта ошибка, а остальное не знаю не занимался этим!

0

Помогите!!! Значит сделал я анимацию ну типа вот:
[logic]
active = remark@base
danger = danger_condition


[remark@base]
anim = hello_wpn
no_move = true
target = actor
meet = meet
и после нападения на НПС кого либо на том месте где НПС убил врага там и остается и тупо смотрит в одну сторону и все и дальше никуда не двигается!!! А как сделать чтоб он по окончании боя шел на свое исходное положение?!

0

Объясните что значат эти строчки из all.spawn
[esc_assault_escape_factory_return_path]
points = p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22
p0:name = wp01|a=run
p0:position = 87.2718887329102,-8.11210536956787,-17.6197128295898
p0:game_vertex_id = 114
p0:level_vertex_id = 383498
p0:links = p1(1)
Пожалуйста!!!

0

position - это координаты.
game_vertex - вертекс игры
level_vertex - вертекс уровня ( в данном случае Кордона)

0

Я уже разобрался но одного не могу понять как сделать чтоб сталкер ходил по определенному пути!

0

Люди добрые расскажите пожалуйста про создание логики!
А вообще распишите как для тупого про логику, все что знаете!
Хочу полностью ее разобрать!
Прошу объяснять самим или очень понятные уроки!
Читал уроки на WIKI но ничерта не понял!

0

Yra y menya polychilos sozdat qvest bez vilitov)))))) Igraya v Sgm mod for Stalker Shadow of Chernobyl ya zahotel zdelat takyy shtyky: Zahodish k Cidorovichy B podval i chtobi voiti k nemy B komnaty nyzhno dernyti rybilnik kak tak cdelati?
Kak cozdati tainik novii?

0

Lenya ya mogy zaliti fail ot Amk pro logiky) Prikolno tam) Ya sam ispolzyi dlya svoego moda)

0

Логика NPC
Содержание [показать]
[править]
Теория

Предполагается, что читатель этой статьи знаком с языком LUA и основами объектно-ориентированного программирования.
[править]
История

Подход к решению проблемы игрового ИИ, выбранный создателями S.T.A.L.K.E.R. (далее буду писать просто "Сталкер"), был впервые применён в 1957 году Гербертом Саймоном (Herbert Simon) и Алленом Ньюэллом (Allen Newell) в программе GPS (General Problem Solver или Универсальный Решатель Задач).
Суть этого подхода заключается в том, что сначала задача представляется в виде набора условий, набора операторов, изменяющих эти условия, и описания начального и конечного состояний. Затем осуществляется поиск последовательности операторов, переводящей начальное состояние системы в конечное.
В Сталкере подсистема поиска последовательности операторов называется «планировщик».
[править]
ИИ в Сталкере

Как видно, этот способ решения проблем не подходит для шутера, так как ситуация в игре может меняться непредсказуемым образом и построенный план решения (последовательность операторов) станет неприменимым к текущей ситуации. Поэтому планировщик запускается каждый раз при непредвиденном развитии событий и создаёт новую последовательность действий (операторов).
Условия в игре тоже вычисляются динамически. Для этого используются специальные объекты – эвалуаторы. Эвалуатор должен содержать метод evaluate(), возвращающий true, если условие выполняется и false в противном случае. Операторы также представлены как объекты. Планировщик вызывает метод initialize() при начале работы оператора, затем он периодически вызывает метод execute().
Например, можно создать эвалуатор для условия «NPC голоден», и привязать к этому условию оператор «поесть».
Планировщик будет периодически проверять это условие (вызывать метод evaluate() эвалуатора), и если оно выполняется, инициализирует и будет выполнять оператор «поесть» до тех пор, пока условие не станет ложным.
К сожалению, в большей части скриптов все возможности планировщика не используются.
[править]
Разбор настройки и работы планировщика на примере скрипта xr_kamp
Рассмотрим скрипт xr_kamp, заставляющий сталкеров сидеть у костра и рассказывать анекдоты. Настройка планировщика осуществляется в функции add_to_binder. Параметры функции: object – объект для которого настраивается планировщик (в нашем случае это сталкер), ini, scheme, section – инициализационный файл, название схемы действий, секция ини-файла (эти параметры будут подробно разобраны в части по созданию мода), storage – таблица для хранения текущих параметров схемы действий.
Разберём, что делает эта функция.
Сначала получаем планировщик для текущего объекта (object).
local manager = object:motivation_action_manager()
Затем присваиваем идентификаторы операторов и условий элементам массива. Это сделано просто для удобства.
Идентификаторы могут иметь любое целочисленное значение, главное, чтобы они были уникальными, то есть не использовались для других операторов и условий.
properties["kamp_end"]=xr_evaluators_id.stohe_kamp_base+1
properties["on_position"]=xr_evaluators_id.stohe_kamp_base+2
properties["contact"]=xr_evaluators_id.stohe_meet_base+1
operators["go_position"]=xr_actions_id.stohe_kamp_base+1
operators["wait"]=xr_actions_id.stohe_kamp_base+3
Для каждого идентификатора условия создадим соответствующий эвалуатор и добавим его в планировщик. В данном случае это условия: «закончить ли посиделки около костра?» и «пришёл ли я на своё место у костра?»
manager:add_evaluator (properties["kamp_end"],
this.evaluator_kamp_end ("kamp_end", storage, "kamp_end"))manager:add_evaluator (properties["on_position"],
this.evaluator_on_position ("kamp_on_position", storage, "kamp_on_position"))
Теперь создадим оператор «сидеть около костра, рассказывать анекдоты, жевать колбасу и т.д.». Можно было бы реализовать эти действия как набор разных операторов, выбором которых занимался бы планировщик, но автор скрипта решил сделать один сложный оператор.
local action = this.action_wait (object:name(),"action_kamp_wait", storage)
Задаем предусловия для этого оператора. Планировщик выберет этот оператор при выполнении всех условий. Всё это значит примерно следующее: я могу сидеть у костра, если:
action:add_precondition (world_property(stalker_ids.property_alive, true))
я живой,
action:add_precondition (world_property(stalker_ids.property_danger,false))
опасностей нет,
action:add_precondition (world_property(stalker_ids.property_enemy, false))
врагов нет,
action:add_precondition (world_property(stalker_ids.property_anomaly,false))
аномалий поблизости нет,
xr_motivator.addCommonPrecondition(action)
выполняются другие важные условия (игрок не собирается со мной поговорить, я не собираюсь никого бить по морде, я не ранен, я не собираюсь стрелять по вертолёту),
action:add_precondition (world_property(properties["on_position"], true))
я уже нахожусь около костра.
Скажем планировщику, что он должен ожидать от выполнения этого оператора. В данном случае после выполнения этого оператора условие «закончить ли посиделки около костра?» должно стать истинным. То есть если условие стало истинным, планировщик прекратит выполнение оператора.
action:add_effect (world_property(properties["kamp_end"], true))
Создание оператора завершено. Добавим его в планировщик.
manager:add_action (operators["wait"], action)
Эта строчка не имеет отношения к работе планировщика. Если коротко, то она позволяет объекту получать уведомления об определённых событиях (смерть NPC – вызывается метод death_callback(), попадание пули в NPC – вызывается метод hit_callback() и т.д.)
xr_logic.subscribe_action_for_events(object, storage, action)
Создаем оператор, отвечающий за доставку NPC к его месту у костра.
action = this.action_go_position (object:name(),"action_go_kamp", storage)
Добавляем предусловия, как и для предыдущего оператора.
action:add_precondition (world_property(stalker_ids.property_alive, true))
action:add_precondition (world_property(stalker_ids.property_danger,false))
action:add_precondition (world_property(stalker_ids.property_enemy, false))
action:add_precondition (world_property(stalker_ids.property_anomaly,false))
xr_motivator.addCommonPrecondition(action)
action:add_precondition (world_property(properties["on_position"], false))
Единственное отличие – последнее условие. Этот оператор будет выполняться только если NPC ещё не находится на своем месте у костра, то есть если функция evaluator_on_position.evaluate() возвращает false.
В результате выполнения этого действия условие «на своём ли я месте у костра?» должно стать истинным.
action:add_effect (world_property(properties["on_position"], true))
Создание оператора завершено. Добавляем его к планировщику.
manager:add_action (operators["go_position"], action)
Осталось ещё одна задача. Нужно запретить планировщику активировать оператор «alife», тот самый оператор, который заставляет NPC болтаться по карте, отстреливать собачек и в конце концов попадать в аномалию. Впрочем, отстрелом врагов занимается другой оператор с идентификатором stalker_ids.action_combat_planner.
Для этого мы получаем оператор «alife»
action = manager:action (xr_actions_id.alife)
И добавляем к его предусловиям следующее: условие «закончить ли посиделки у костра?» должно быть истинным.
action:add_precondition (world_property(properties["kamp_end"], true))
Итак, мы настроили планировщик. Посмотрим как всё это будет работать.
В некоторый момент времени гулаг, в который попал NPC, назначает ему работу: сидеть у костра. В результате условие «закончить ли посиделки у костра?» становится ложным. Планировщик видит это изменение и пытается выработать последовательность операторов, после выполнения которой, условие бы стало истинным и NPC снова бы вернулся к выполнению высокоприоритетного оператора «alife». Для выполнения этой задачи подходит оператор «посиделки у костра», но для него не выполняется условие «я на своем месте у костра». Поэтому планировщик создаёт план из двух операторов: «дойти до костра» и «посиделки у костра». Если во время выполнения одного из операторов возникнет непредвиденная ситуация (появится враг, главный герой начнёт приставать с вопросами и т.п.), то планировщик скорректирует план, добавив оператор для устранения этой непредвиденной ситуации.
Как видно система ИИ в Сталкере обладает весьма большой гибкостью, что мы и продемонстрируем при создании мода.
[править]
Модели (или схемы) поведения в Сталкере

В наборе скриптов Сталкера предусмотрена возможность объединять операторы и условия в модели поведения. Модель поведения – это набор логически связанных операторов и условий, служащих для выполнения определённой задачи. Так скрипт xr_kamp представляет собой модель поведения, состоящую из двух операторов и двух условий.
[править]
Регистрация модели поведения
Для включения новой модели поведения в набор моделей, доступных NPC, сначала необходимо её зарегистрировать. Предположим, нам нужно зарегистрировать модель поведения, описанную в скрипте actor_need_help.script. Регистрация моделей осуществляется в скрипте modules.script. Добавим туда следующие строки:
if actor_need_help then – в этой строке мы проверяем что наш скрипт действительно существует
load_scheme("actor_need_help", "actor_need_help", stype_stalker)
end
Первый параметр функции load_scheme задает имя файла скрипта, второй параметр – это название модели поведения, третий параметр – тип модели поведения (возможны следующие значения: stype_stalker – модель поведения NPC, stype_mobile – модель поведения монстра, stype_item – «модель поведения» физического объекта, stype_heli – модель поведения вертолёта, stype_restrictor – «модель поведения» области пространства). Скрипты для моделей поведения разных типов пишутся по-разному. Мы будем рассматривать только модели поведения NPC.
Внимание! Для успешной работы модели поведения её скрипт должен содержать функцию add_to_binder, выполняющую настройку планировщика.
[править]
Активация/деактивация модели поведения
Некоторые модели поведения применимы в любых ситуациях (например, реакция на попадание пули в NPC или реакция на появление врага). Такие модели должны активироваться/деактивироваться в функциях
enable_generic_schemes()/disable_generic_schemes() скрипта xr_logic. В случае с моделью поведения actor_need_help,
это будет выглядеть так:
1. Создаём функции set_actor_need_help и disable_scheme в нашем скрипте actor_need_help. Эти функции будут отвечать за активацию и деактивацию нашей модели поведения.
function set_actor_need_help(npc,ini,scheme)
local st=xr_logic.assign_storage_and_bind(npc, ini, scheme, “actor_need_help”)
st.enabled=true
end
function disable_scheme(npc,scheme)
local st = db.storage[npc:id()][scheme]
if st then
st.enabled = false
end
end
2. Добавляем следующую строку в скрипт xr_logic.script после строки «if stype == modules.stype_stalker then» в функции enable_generic_schemes()
actor_need_help.set_actor_need_help(npc,ini,”actor_need_help”)
3. Добавляем следующую строку в скрипт xr_logic.script после строки «if stype == modules.stype_stalker then» в функции disable_generic_schemes()
actor_need_help.disable_scheme(npc,”actor_need_help”)
Если же модель поведения предназначена только для использования в определённых ситуациях, то достаточно выполнить шаг 1 и использовать созданные функции по мере надобности. Например, активируя эту схему через диалог с NPC (как мы и сделаем в нашем моде).
Внимание! Я максимально упростил функции активации/деактивации модели поведения. Чтобы полностью разобраться с ними, посмотрите скрипты xr_combat, xr_kamp и другие подобные.
[править]
Приоритеты моделей поведения
Некоторые модели поведения настолько важны, что должны срабатывать в любой ситуации (например, реакция на попадание пули). Для этого в скрипте xr_motivator предусмотрена функция addCommonPrecondition(action), в эту функцию можно добавить одно из условий нашей модели поведения, чтобы другие модели поведения не могли сработать при выполнении этого условия (здесь есть свои тонкости, но мы рассмотрим их позже). Предположим, что у нас есть модель поведения actor_need_help, заставляющая NPC подбежать к ГГ и вылечить его. Пусть за проверку здоровья ГГ отвечает условие с идентификатором actor_need_help.property_actor_is_wounded. Значит, если мы хотим, чтобы NPC подбегал к ГГ не обращая внимание ни на что другое, то нужно добавить следующую строчку в функцию addCommonPrecondition(action):
action:add_precondition(world_property(actor_need_help.property_actor_is_wounded,false))
Эта строчка запретит выполнение всех других действий, если условие с идентификатором actor_need_help.property_actor_is_wounded станет истинным (в нашем случае это будет означать, что ГГ сильно ранен.
Конкретное значение здоровья ГГ при котором он считается сильно раненным будет определять эвалуатор этого условия).

[править]
Создаем мод

В этом разделе мы сделаем мод, позволяющий сказать дружественно настроенному NPC, чтобы он лечил главного героя во время боя.
[править]
Постановка задачи

Итак, мы хотим, чтобы дружественные NPC наконец начали приносить пользу. Для этого научим их лечить ГГ во время боя. Распишем по пунктам:
1. Нужно добавить дружественным NPC ветку в диалоге с просьбой присматривать за ГГ и лечить его, если в этом возникнет необходимость.
2. Добавить NPC модель поведения, реализующую выполнение этой просьбы.
2.1. NPC должен действовать согласно этой модели только если ГГ находится недалеко от него.
2.2. NPC не должен далеко отходить от ГГ во время боя.
2.3. Если здоровье ГГ упало ниже определённой отметки, NPC должен подойти/подбежать и вылечить ГГ.
[править]
Что потребуется для реализации

Нам придётся изменять диалоги для некоторых NPC, для этого нужно будет изменить файлы config\gameplay\character_dialogs.xml (диалоги для всех NPC), config\localization.ltx и config\system.ltx (подробнее см. статью BAC9-FLCL или Fr3nzy). Мы изменим диалоги для всех NPC, но для неподходящих NPC диалог будет отсекаться с помощью предусловия. Потребуется также добавить файлы с текстами диалогов и функции для проверки условий, используемых в диалогах.
Для включения новой модели поведения NPC нужно будет внести изменения в скрипты scripts\modules.script (регистрация моделей поведения) и scripts\xr_motivator.script (для установки высокого приоритета нашей модели). Модификации файла xr_logic.script, в котором происходит установка общих моделей поведения, не потребуется, так как мы будем активировать нашу схему поведения при выборе определённой ветки в диалоге.
Теперь решим какие условия и операторы нам понадобятся.
Условия:
1. Состояние главного героя. Если оно ниже определённого порога, то условие станет истинным. Назначим ему идентификатор property_actor_is_wounded и эвалуатор evaluator_actor_is_wounded. Далее я буду указывать идентификатор и эвалуатор в скобках через запятую.
2. Находится ли NPC достаточно близко, чтобы вылечить ГГ. (property_ready_to_heal, evaluator_ready_to_heal)
3. Есть ли у NPC аптечки. (property_has_medkit, evaluator_has_medkit)
4. Не отошёл ли NPC слишком далеко от ГГ или ГГ от NPC. (property_faraway, evaluator_faraway)
5. Находится ли ГГ достаточно близко, чтобы имело смысл помогать ему. (property_near_enough, evaluator_near_enough).
Операторы:
1. Лечить ГГ. (act_heal, action_heal)
2. Подбежать к ГГ на дистанцию, достаточную для лечения (act_run_to_actor, action_run_to_actor)
3. Крикнуть что аптечки кончились (act_no_medkit, action_no_medkit)
4. Подобраться поближе к ГГ, чтобы быть под рукой. (act_stay_close, action_stay_close).
[править]
Реализация

Я буду писать эту статью параллельно с разработкой мода, указывая все найденные ошибки. Надеюсь, это поможет другим моддерам. Чтобы отделить результаты тестирования от описания процесса разработки мода, я буду выделять свои комментарии другим шрифтом.
[править]
Диалоги
В этом моде будет всего один диалог, и довольно простой, поэтому начнём с него. Создаём файл config\gameplay\dialogs_need_help.xml. Чтобы не возиться с идентификаторами текстов попробуем обойтись без них. Начнём с простой тестовой версии:



actor_need_help.i_am_friend


Дружище, сможешь присмотреть за мной, если стрелять начнут? Промедольчику, там, вколоть или

перевязку сделать, если что...
1


Нет проблем, конечно помогу.




Добавляем строку с идентификатором этого диалога в config\gameplay\character_dialogs.xml:
actor_will_need_help
Дописываем имя файла диалога в config\system.ltx в секцию «dialogs». Осталось создать функцию i_am_friend. Наш скрипт с моделью поведения будет называться scripts\actor_need_help.script, заодно пропишем там и диалоговые функции.
function i_am_friend(actor,npc)
return npc:relation(actor)==game_object.friend
end
При первом тестировании я заменил game_object.friend на game_object.neutral, чтобы не искать друзей по всей карте.
Тестируем, что у нас получилось...
Диалог работает, но вместо текста – набор значков, оказалось, я написал текст в кодировке CP866 (DOS), нужно поменять её на CP1251. Так, теперь текст в порядке.
Выбранный подход к созданию диалога оказался удачным.
Обратите внимание, вместо идентификатора текста можно вписать сам текст. Это усложнит локализацию, но уменьшит время создания диалогов.
Теперь нам понадобятся функции проверки наличия аптечек у NPC, проверки активации схемы поведения, активации/деактивации схемы поведения. Добавляем их в наш скрипт-файл.
Первый вариант скрипта я не буду приводить, чтобы не увеличивать и так большую статью. Окончательный вариант смотрите в конце статьи. Дальше по тексту идёт простейший работающий вариант.
Теперь у нас должно быть два варианта начальной фразы для активной и неактивной схемы. Придётся экспериментировать.
'Вот первый проверенный вариант:



actor_need_help.i_am_friend


1
2


Дружище, сможешь присмотреть за мной, если стрелять начнут? Промедольчику, там, вколоть или

перевязку сделать, если что...
actor_need_help.scheme_is_not_active
11
12


Нет проблем, конечно помогу.
actor_need_help.npc_have_medkit
actor_need_help.activate_scheme


Извини, друг, аптечек совсем не осталось.
actor_need_help.npc_havent_medkit


Спасибо, друг, теперь я сам справлюсь.
actor_need_help.scheme_is_active
21


Да не за что, ты мне помог, я - тебе.
actor_need_help.deactivate_scheme




При первом запуске игра вылетела без сообщений об ошибках. Я внимательно просмотрел все файлы и оказалось, что в скриптах вместо комментария ‘--‘ (два минуса) я поставил просто минус (рекомендую пользоваться компилятором с [www.lua.org www.lua.org] для проверки корректности скриптов). После исправления ошибки игра запустилась, но диалог так и не появился. Небольшая дискуссия на форуме (спасибо Z.E.N. и Arhet) показала, что придётся сделать два диалога.
Кроме того, при тестах первых вариантов, выяснилось, что всегда выбирается вариант диалога с просьбой о помощи. То есть схема поведения не активируется.
Как оказалось, в качестве параметров в функции передаются не объекты ГГ и NPC, а объекты говорящего в данный момент персонажа и его собеседника. То есть, если фраза принадлежит NPC, то первый параметр будет объектом для NPC, а не для ГГ. Поэтому я изменил названия параметров и переписал функции.
Итак, все проблемы решены. Файл диалога принял следующий вид (config\gameplay\dialogs_need_help.xml):



actor_need_help.i_am_friend
actor_need_help.scheme_is_not_active


Дружище, сможешь присмотреть за мной, если стрелять начнут? Промедольчику, там, вколоть или

перевязку сделать, если что...
11
12


actor_need_help.npc_have_medkit
Нет проблем, конечно помогу.
actor_need_help.activate_scheme


actor_need_help.npc_havent_medkit
Извини, друг, аптечек совсем не осталось.




actor_need_help.i_am_friend
actor_need_help.scheme_is_active


Спасибо, друг, теперь я сам справлюсь.
21


Да не за что, ты мне помог, я - тебе.
actor_need_help.deactivate_scheme




Функции, поддерживающие работу диалога, теперь выглядят так (файл scripts\actor_need_help.script):
function i_am_friend(talker,target)
return target:relation(talker)==game_object.friend
end

-- За основу этой функции взята функция dialogs.actor_have_medkit
function npc_have_medkit(talker, target)
return talker:object("medkit") ~= nil or
talker:object("medkit_army") ~= nil or
talker:object("medkit_scientic") ~= nil
end
function npc_havent_medkit(talker, target)
return not npc_have_medkit(talker,target)
end

-- Так как модель поведения еще не написана, вставим заглушки
local scheme_status={}
function scheme_is_active(talker,target)
return scheme_status[target:id()]==true -- сравниваем с true, чтобы функция не возвращала nil
end
function scheme_is_not_active(talker,target)
return not scheme_is_active(talker,target)
end
function activate_scheme(talker,target)
scheme_status[talker:id()]=true
end
function deactivate_scheme(talker,target)
scheme_status[talker:id()]=nil -- присваиваем nil, чтобы освободить память, занятую этим элементом массива
end
И в файл config\gameplay\character_dialogs.xml добавлены строки:
actor_will_need_help
actor_will_not_need_help
В результате получился работающий диалог, но NPC выглядит просто как ходячая аптечка. В окончательном варианте, я добавил некоторые «человеческие» реакции. Да и сама модель поведения пока отсутствует - вместо неё стоят заглушки. Исправим это.
[править]
Модель поведения
Начнём создание модели поведения с разработки эвалуаторов. Эвалуатор должен представлять собой объект класса унаследованного от класса property_evaluator.
Возьмём для начала эвалуатор evaluator_faraway определяющий, что NPC находится слишком далеко от ГГ. Этот эвалуатор требуется для того, чтобы NPC не отходил слишком далеко от ГГ и мог в случае надобности быстро подбежать к нему и оказать помощь.
Объявляем класс эвалуатора:
class "evaluator_faraway" (property_evaluator)
Определяем функцию инициализации (в LUA это аналог конструктора объекта)
function evaluator_faraway:__init(name, storage) super (nil, name)
self.st = storage
end
Ключевое слово «super» служит для вызова конструктора базового класса. Член «st» будет хранить ссылку на таблицу состояния нашей модели поведения.
Теперь нужно определить функцию evaluate(), ради которой и создавался эвалуатор. По-видимому всё просто, нужно проверить расстояние от NPC до ГГ и вернуть true, если это расстояние больше определённого значения. Но давайте подумаем. Когда эвалуатор возвратит true, заработает оператор, заставляющий NPC подойти поближе к ГГ, то есть расстояние моментально уменьшится и эвалуатор начнёт возвращать false, что приведёт к переходу NPC под управление игрового ИИ. ИИ может опять решить удалиться от ГГ, что приведёт к повторному срабатыванию эвалуатора. В результате возникнет замкнутый цикл, и NPC будет крутиться на одном месте (на самом деле этот цикл рано или поздно разорвётся из-за изменения игровой ситуации, но лучше вообще избежать его).
Можно использовать разные пути для решения этой проблемы. Попробуем сделать так: будем использовать два расстояния, эвалуатор сработает при достижении первого и будет оставаться активным, пока расстояние не станет меньше второго.
local min_faraway_dist=10
local max_faraway_dist=20

function evaluator_faraway:evaluate()
local actor=db.actor
if not actor then
-- ГГ ещё не заспаунился
return false
end
local dist=actor:position():distance_to(self.object:position())
if dist>max_faraway_dist then
self.st.faraway=true
elseif distmax_faraway_dist then
-- если NPC находится слишком далеко от ГГ пусть пробежиться побыстрее
npc:set_mental_state(anim.panic)
else
npc:set_mental_state(anim.free)
end
end
Функция настройки планировщика.
function add_to_binder(object, char_ini, scheme, section, st)
local manager = object:motivation_action_manager()
local property_wounded = xr_evaluators_id.sidor_wounded_base

-- Удаляем эвалуатор, так как в xr_motivator мы установили его в property_evaluator_const
manager:remove_evaluator(property_faraway)
-- и заменяем его нашим
manager:add_evaluator(property_faraway, evaluator_faraway("evaluator_faraway",st))
-- Создаём оператор
local action = action_stay_close("action_stay_close",st)
-- и настраиваем предусловия. 1. Сталкер жив
action:add_precondition(world_property(stalker_ids.property_alive, true))
-- 2. Сталкер не ранен
action:add_precondition(world_property(property_wounded, false))
-- Я использую свой мод для обхода аномалий, иначе от помощников мало толку.
if anomaly_evader then
-- 3. Рядом нет аномалий
action:add_precondition (world_property(1099,false))
end
-- 4. Сталкер слишком далеко от ГГ
action:add_precondition(world_property(property_faraway, true))
action:add_effect (world_property(property_faraway, false))
-- Добавляем оператор в планировшик
manager:add_action (act_stay_close, action)
-- Теперь подкорректируем стандартные операторы, чтобы помощник не отвлекался на всякую ерунду.
action=manager:action(stalker_ids.action_alife_planner)
action:add_precondition(world_property(property_faraway, false))
action=manager:action(stalker_ids.action_combat_planner)
action:add_precondition(world_property(property_faraway, false))
action=manager:action(stalker_ids.action_danger_planner)
action:add_precondition(world_property(property_faraway, false))
end
Добавим функции активации/деактивации схемы поведения.
function set_help(npc, ini)
local st = xr_logic.assign_storage_and_bind(npc, ini, "actor_need_help")
st.enabled=true
end
function disable_scheme(npc, scheme)
local st = db.storage[npc:id()][scheme]
if st then
st.enabled = false
end
end
Изменим диалоговые функции-заглушки.
function activate_scheme(talker,target)
set_help(talker,talker:spawn_ini())
scheme_status[talker:id()]=true
end
function deactivate_scheme(talker,target)
disable_scheme(talker,"actor_need_help")
scheme_status[talker:id()]=nil
end
Добавим в функцию xr_motivator.addCommonPrecondition() следующие строки, чтобы заблокировать стандартные схемы поведения.
if actor_need_help then
action:add_precondition (world_property(actor_need_help.property_faraway,false))
end
Если попробовать запустить мод сейчас, то игра просто вылетит. Причина в том, что мы добавили предусловие для стандартных схем поведения, но не добавили эвалуатор этого условия. Поэтому добавляем в функцию xr_motivator.net_spawn() следующие строки:
local manager = self.object:motivation_action_manager()
if actor_need_help then
manager:add_evaluator(actor_need_help.property_faraway, property_evaluator_const(false))
end
Для того чтобы снизить нагрузку на процессор, используем property_evaluator_const, который всегда возвращает одно и тоже значение. В результате тестирования выяснилось, что не все NPC подчиняются нашей схеме поведения. Причины этого пока не ясны, требуется дополнительное тестирование и очень желательна помощь разработчиков (хотя бы для того чтобы узнать как выяснить какой оператор действует в данный момент на NPC).

Vot logikA

0

как лучше уменьшить здоровье НПС?

0

Max1m97 спасибо!
Но этот урок c WIKI, и я уже его читал много раз! Только ничего не понял!
Мне бы с подробными примерами! Что и где прописывать.

0

ДЛя начала напишите откуда брать и где прописывать
path_walk =
path_look =

0

Jonny Braun в фаиле gamedata/config/creatures/m_stalker вроде там/
Народ я поиграл в сигериус мод и мне понравилась такая фишка чтоб зайти к Сидоровичу нужно дернуть рубильник слева но в офицалке так делать не надо/
Как так сделать?

0

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

0

У меня вопрос по фотошопу. Как расширить место под иконки?? Я пробовал как писали раньше через изображения, но после изменений не хочет сохранять!!! (сам фотошоп сохраняет, а вот програмка DXT Tools не желает...)

0

Max1m97, ты его в mp_ranks не прописал. Там в строке с пистолетами (wpn_pist) или винтовками (wpn_auto) и потом в графах [rank_0] \ 1\ 2\ 3\ 4 или во всех сразу в строке available_items =. Что за волына кстати?

0

оооооо...... Много волын АК-47/101/ПП-19 Бизон/Фн-п90 женя на мой сайт зади там полны список

0

Скачай бета версию на моем сайте
legend-zone.3dn.ru

0

Народ я поиграл в сигериус мод и мне понравилась такая фишка чтоб зайти к Сидоровичу нужно дернуть рубильник слева но в офицалке так делать не надо/
Как так сделать?

0

NeKrO264
У меня вопрос по фотошопу. Как расширить место под иконки?? Я пробовал как писали раньше через изображения, но после изменений не хочет сохранять!!! (сам фотошоп сохраняет, а вот програмка DXT Tools не желает...)

Я знаю, такое бывает (у меня у самого бывало)! Попробуй перезагрузить комп или обнови плагин для фотошопа. Делай всё так же: оно пройдёт!

З.Ы. Если ничего не получается можешь скинуть мне файл, и тогда я попробую сделать.

0

Ура! Пошло! Все, теперь места есть ооочень много

0

NeKrO264, если у тебя больше 2000х2000, выложи плз. А то я с Фотожопом даже не на вы.

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

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...hing\s.t.a.l.k.e.r\gamedata\scripts\xrs_utils.script:888: bad argument #1 to 'find' (string expected, got nil)
что эта зараза от меня хочет?????
Да и исчье, кто знает, как с помощью СДК СКОПИРОВАТЬ партикл? (именно не создать)

заранее спасибо...

0

Помогите Я создал группировку и мне надо сделать для нее базу (где они шастают например Лестничество) Как это сделать

0

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

0

Max1m97 умеешь работать со спавном НПС? И с логикой (гулагами смрттерейном)? Со спавном подскажу а логику сам изучаю!

0

как можно прописать путь к иконке (не ui_icon_equipment) и возможно ли такое вообще?

0

я хочу изменить конфиги оружия, ставлю: gamedata/config/weapons/w_f1.ltx
но игра вылетает, что надо добавить???

0

TaYgaDolg после вылета открой блокнот выбери правка-всавить и отправь что там получилось!

0

Луис_ попробую просто за спавнить авто!

0

Может есть у кого ствол ТОЗ-34 с оптикой и пак гранат? А то самому лень делать...

0

Zhenyapetrenko а оптику к гранате не надо?! Тебе зачем оптика к двухстволке?! Ладно бы лазерный прицел (как в crysis) для ночного времени еще куда не шло и то чрез мерно !!!

0

Луис, в файле S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\system.ltx найди переменную start_blood_size – это минимальный размер раны при котором идет кровь.
Переменная blood_drop_size отвечает за размер капли крови, повысь её значение и крови будет больше.

Byurrer, в сталкере половина волын лишняя, и тем не менее все юзают арсенал
кстати, поставил грави-пушку в арсенал, подогнал партикл, загрузил игру и мне выбило ошибку про ufp_shader (типо нету одного). Так вот, где они находятся и что это такое. И главное как их добавить?

0

а может знаешь, можно ли выставить у отдельного ствола путь к другому ui_icon_equipment??

0

Конечно можно в файле нужного тебе оружия
inv_grid_height --высота
inv_grid_width --ширина
inv_grid_x --координаты иконки в ui_icon_equipment.dds по x
inv_grid_y --координаты иконки в ui_icon_equipment.dds по y

0

это я знаю... У меня места в файле уже нет. А как добавлять его я не знаю. Вот и думал может создать еще один такой файлик и все в него скинуть

0

Понял про че ты говоришь дай подумать!

0

А что если тебе открыть в паинте этот dds далее скопировать далее взять и заменить размер изображения(растянуть или ...) далее все выделить и удалить и вставить, так должно получиться!

0

ВОТ!!!! тоже подойдет. Только вместе с файлом разве не должны растянуться и уже вложенные иконки?
Спасибо!!!!

0

Они растянутся но ты до растяжения должен скопировать это изображение в буфер обмена а потом растянуть и вставить!

0

геймдата\кричерс (на инглише)
З.Ы. ходит легенда что некоторые неграмотные племена юзают ctrl+F в таких случаях

0

Все имеющие большое желание делать моды (даже новички без опыта) имеют возможность вступить в команду модмейкеров S.I.P
Все желающие пишите в личку!
Это молодая команда но довольно перспективная!

0

Над этим проектом я уже 2 год работаю сам щас стал собирать только тех у кого желание превышает его возможности, т. е. тех кто по истине хочет участвовать в проекте! Проект S.I.P это пока что команда модмейкеров, далее после модмейкерства Сталкер мы будем делать свою собственную игру на своем собственном движке (будем изучать, пробовать), но это не скоро! А пока наша цель выпустить аддон S.I.P - игра про Семипалатинский испытательный полигон! Это уже будет не Сталкер а S.I.P на движке Сnалкера x-ray!!!

0

Луис но как не странно я посчитал что новички имеющие большое желание будут особенно делать!!! И это так, так вот один новичок тожа с ПГ он тут писал занялся модмейкерством примерно месяц назад,писал я ему статьи, уроки, подсказывал что сам знал, а сейчас он уже не просто новичок его можно уже скоро будет отнести в ранг ветеранов, со спавном НПС справляется в раз. создание группировки это ничего, щас логику изучает ваще класс получается, дальше новичок фотошопер - щас он делает первоклассные текстуры даже такие которых нет на ПГ!!! А ведь этот проект существует примерно 3 недели (с момента формирования состава команды), и у нас у всех желание оооочень большое!!! Ну это я привел лишь несколько примеров, так что выбор за вами!!!

0

Сайт конечно, после 5 июня мы будем расширять свою сферу деятельности ( не могу сказать пока как секрет)!

0

Луис давай через личку! Есть одно условие - большое желание!!!

0

Zhenyapetrenko, (Если еще надо) кинь свой файл уи_икон_экьупимент - а я тебе расширю, как захочешь.

0

Народ у меня проблема!!! [img]http://oz.ucoz.net/smiles/81.gif[/img] Вот:
FATAL ERROR
[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description :
[error]Arguments : LUA error: ....r. s.i.p. mod\gamedata\scripts\death_manager.script:139: attempt to index field '?' (a nil value)
Все началось после того, как я решил сделать чтобы у трупов были сигареты и патроны 7.62х39
Проблема с файлом death_manager.script это очевидно.
Вот сам файл:
--' Ключем является группировка персонажа. Значением является таблица, содержашая имена секций предметов.
local item_by_community = {}
--' Зависимости в спауне предметов. Предмет спауниться только если есть хотя бы один из зависимых.
local item_dependence = {}
--' Множители и минимаксы для выпадения вещей в зависимости от уровня
local mul_by_level = {}
local count_by_level = {}
--' Предметы, которые нельзя удалять (квестовые например)
local always_keep_item = {}
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.
local ammo_sections = {}
local death_ini = ini_file("misc\\death_generic.ltx")
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg" }
for k,v in pairs(community_list) do
--' Необходимо заполнить таблицу
item_by_community[v] = {}
if death_ini:section_exist(v) then
local n = death_ini:line_count(v)
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line(v,i,"","")
item_by_community[v][id] = 100*tonumber(value)
end
end
end
--' Заполняем таблицу зависимостей
local n = death_ini:line_count("item_dependence")
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line("item_dependence",i,"","")
item_dependence[id] = {}
local vvv = parse_names(value)
for k,v in pairs(vvv) do
item_dependence[id][v] = true
end
end
--' Множители и минимаксы для выпадения вещей в зависимости от уровня
local level_name = level.name()
if not death_ini:section_exist(level_name) then
level_name = "default"
end
local n = death_ini:line_count(level_name)
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line(level_name,i,"","")
mul_by_level[id] = tonumber(value)
end
local item_count_section = "item_count_" .. level.get_game_difficulty()
local n = death_ini:line_count(item_count_section)
for i=0,n-1 do
result, id, value = death_ini:r_line(item_count_section,i,"","")
--' Нужно распарсить value в два значения
local t = parse_nums(value)
if t[1] == nil then
abort("Error on [death_ini] declaration. Section [%s], line [%s]", item_count_section, tostring(id))
end
local min = t[1]
local max = t[2]
if max == nil then
max = min
end
if mul_by_level[id] == nil then
mul_by_level[id] = 0
end
min = tonumber(min) * mul_by_level[id]
max = tonumber(max) * mul_by_level[id]
count_by_level[id] = {min = min, max = max}
end
--' Предметы, которые нельзя удалять (квестовые например)
local n = death_ini:line_count("keep_items")
for i=0,n-1 do
result, id, value = death_ini:r_line("keep_items",i,"","")
if value == "true" then
always_keep_item[id] = true
end
end
--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.
ammo_sections = {}
local n = death_ini:line_count("ammo_sections")
local id, value = "", ""
for i=0,n-1 do
result, id, value = death_ini:r_line("ammo_sections",i,"","")
ammo_sections[id] = true
end
end
class "drop_manager"
function drop_manager:__init(npc)
self.npc = npc
end
function drop_manager:create_release_item()
--' Спрашиваем у серверного объекта генерились ли предметы
local se_obj = alife():object(self.npc:id())
if se_obj.death_droped == true then
return
end
se_obj.death_droped = true
--' Запускаем итератор на удаление предметов
self.npc:iterate_inventory(keep_item, self.npc)
--' Проверка на отсутствие спауна лута
local ini = self.npc:spawn_ini()
if ini and ini:section_exist("dont_spawn_loot") then
return
end
--' Доспавниваем необходимое количество итемов:
--' Необходимо составить список объектов которые могут быть заспавнены для персонажа
local spawn_items = item_by_community[self.npc:character_community()]
for k,v in pairs(spawn_items) do
--' По каждому объекту необходимо получить зависимости
if check_item_dependence(self.npc, k) == true then
--' По каждому объекту необходимо получить количество
local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max))
--' Необходимо заспавнить нужное количество.
create_items(self.npc, k, number, v)
end
end
end
--' Функция вызывается для каждого предмета, если вернет false то предмет удалится.
function keep_item(npc, item)
local section = item:section()
if section == "bolt" then
return false
end
if always_keep_item[section] == true then
return true
end
local item_id = item:id()
local item_in_slot = npc:item_in_slot(1)
if item_in_slot ~= nil and
item_in_slot:id() == item_id
then
item:unload_magazine()
--' Тут надо уменьшить кондишн оружия
item:set_condition((math.random(15)+75)/100)
return true
end
item_in_slot = npc:item_in_slot(2)
if item_in_slot ~= nil and
item_in_slot:id() == item_id
then
item:unload_magazine()
--' Тут надо уменьшить кондишн оружия
item:set_condition((math.random(15)+75)/100)
return true
end
alife():release(alife():object(item:id()), true)
end
--' Функция спавнит необходимое число предметов
function create_items(npc, section, number, rnd)
--'printf("create %s of %s", tostring(number), tostring(section))
if ammo_sections[section] == true then
if number > 0 then
se_respawn.create_ammo(section,
npc:position(),
npc:level_vertex_id(),
npc:game_vertex_id(),
npc:id(),
number)
end
else
for i=1,number do
--' Проверяем вероятность появить каждый объект в отдельности
if math.random(100)

0

Zhenyapetrenko ты спрашывал что за команда. Команда у нас хорошая! Называется S.I.P. Мы делаем свой мод Сталкер. Если хочеш присоединяйся к нам! Мы берем даже новичков, но! У нас есть определенные правила. Мы должны отчитыватса на форуме, чтобы каждый знал что ты делаеш, за нарушения правил - выговор потом бан, а потом... ну, я надеюсь ты понял? Кароче, мы всегда рады новым людям!

0

скажите ,пожалуйста, что это значит:

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...g\s.t.a.l.k.e.r\gamedata\scripts\ogsm_anomaly.script:352: attempt to index global 'amk' (a nil value)

да и еще: где можно дернуть красивые текстурки брони и монстриков? Ну кроме бананы?

кто с солью играет????
выложте файлик shaders.xr пожалуйста

0

Блин, помогите пожалуйста, как выдрать спальник из АМК или истории прибоя?
Чтоб спать можно было!

0

config\misc\amk_mod_matras
dream
items
config\scripts\actorsleep
config\text\rus\string_table_amk_matras
config\ui\ui_cheat_wnd
ui_movies
meshes\equipments\item_rukzak
scripts\amk
amk_death_lists
amk_mod
ar_sleep
bind_stalker
sleep_manager
ui_cheat
xr_effects
textures\ui\ (навеерно токо иконки отсюда выдрать)

вроде так. Если скажешь как выкидывать сюда файлы, я тебе пак скину

з.ы. это из АМК

0

ты скажи как файлы выкладывать. И тебе меньше мороки будет, и мне полезно. Кстати на АМК форуме в теме РАРИТЕТЫ уже есть пак свыдертыми сном и матрасом

0

Мне самому охото разобраться!
На счет чтобы выложить,http://www.playground.ru/dox/other/1795/

0

Zhenyapetrenko Там вроде все понятно.

0

Zhenyapetrenko по поводу инвентаря вот прога http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewtheoned&lid=353 там можно сколько хош инвентарь расширять.

0

Подскажите как сделать типа постэффект на усталость ГГ как в FarCry2 когда ГГ бежит и устает и перед глазами мутнеет!

0

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

0

stalker_ak я думаю точно также, придется наверное вскрывать farcry2 или рыться самому в Сталкере!

0

А мож кто знает где и как отредактировать этот файл где усталость?

0

Леня Баньши у мну есть такая. Она неправильно расширяет - иконки сужаются
может, кто-нибудь знает,скажите ,пожалуйста, что это за фигня:

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description :
Arguments : LUA error: ...g\s.t.a.l.k.e.r\gamedata\scripts\ogsm_anomaly.script:352: attempt to index global 'amk' (a nil value)

0

Zhenyapetrenko эта ошибка означает что не получилось обратиться к глобальному индексу amk, возможно он написан неправильно (функция), хоть я в скриптах и не очень но всеж начинающий кинь гляну мож че и получиться (только скрипт)!

0

------------- Спавн динамических рандомных аномалий для OGSM 2.x. Хотел выдрать для 0.0004 --------------

-------------------- Copyright 2007-2008 DEXXX & Offbar -----------------------


local list_obj_id = {}
local list_noart_anom = {}
local list_orig_anom = {}
local console = get_console()
local check_game = 0

loc={
l01_escape = 1,
l02_garbage = 2,
l03_agroprom = 3,
l04_darkvalley = 4,
l06_rostok = 5,
l07_military = 6,
l10_radar = 7,
l11_pripyat = 8,

l03u_agr_underground = 0,
l04u_labx18 = 0,
l05_bar = 0,
l08_yantar = 0,
l08u_brainlab = 0,
l10u_bunker = 0,
l12_stancia = 0,
l12u_sarcofag = 0,
l12u_control_monolith = 0,
l12_stancia_2 = 0
}


-- Проверяем, попадает ли аномалия в "bad-сектор"
function bad_sector(p_vector)

local k
local bad_list = {} --формируется по принципу x1>x2, y2>y1

-- Кордон
if level.name()=="l01_escape" then
bad_list.x1 = { -238, -164, -107, -160, 145, -65, 136, 35, 373, -146 }
bad_list.x2 = { -259, -230, -150, -180, 90, -70, 125, 20, 346, -164 }
bad_list.y1 = { -138, -173, -400, -360, -50, 115, 305, 670, -49, -341 }
bad_list.y2 = { -125, -123, -350, -344, 12, 200, 325, 690, -15, -235 }
end

-- Свалка
if level.name() == "l02_garbage" then
bad_list.x1 = { 32, -41, 68, 38, -230, 306, -52 }
bad_list.x2 = { 29, -146, 15, 32, -306, 291, -72 }
bad_list.y1 = { -269, -9, 199, -323, -32, 132, -224 }
bad_list.y2 = { -260, 29, 262, -289, -13, 154, -211 }
end

-- Темная долина
if level.name() == "l04_darkvalley" then
bad_list.x1 = { -140, -119, -36, 191, 114, 51, 51, -29, -26, 20, 73, 62, }
bad_list.x2 = { -217, -145, -53, 106, 87, -12, -33, -73, -32, 8, 41, 50, }
bad_list.y1 = { -194, -526, -547, -301, -15, -91, 25, -23, -22, 5, -249, -225, }
bad_list.y2 = { -175, -478, -536, -223, -1, -16, 50, -18, 25, 17, -233, -179, }
end

-- Агропром
if level.name() == "l03_agroprom" then
bad_list.x1 = { 67, -195, -101, -61, 291 }
bad_list.x2 = { -53, -202, -200, -80, 265 }
bad_list.y1 = { -36, 85, -229, 6, 0 }
bad_list.y2 = { 58, 98, -124, 21, 5 }
end

-- Дикая территория
if level.name() == "l06_rostok" then
bad_list.x1 = { -85, -226, -235, -218, -113 }
bad_list.x2 = { -103, -235, -285, -242, -213 }
bad_list.y1 = { 119, 135, 78, 29, -123 }
bad_list.y2 = { 151, 165, 112, 64, -49 }
end

-- Армейские склады
if level.name() == "l07_military" then
bad_list.x1 = { -305, -317, -209, -259, -340, -160, -83, 96, 113, -218, -117, -43, -14, 77, -2, -186 }
bad_list.x2 = { -322, -347, -233, -277, -367, -195, -105, 89, 87, -242, -137, -84, -60, 0, -10, -202 }
bad_list.y1 = { 55, 37, 190, 234, 373, 350, 207, 308, 160, 39, 7, 8, -34, 10, 0, 35 }
bad_list.y2 = { 67, 50, 211, 249, 405, 391, 235, 318, 184, 58, 22, 41, -10, 23, 109, 46 }
end

-- Радар
if level.name() == "l10_radar" then
bad_list.x1 = { 149, 390, 664 }
bad_list.x2 = { 75, 377, 609 }
bad_list.y1 = { -35, 141, 167 }
bad_list.y2 = { -20, 162, 200 }
end

-- Припять
if level.name() == "l11_pripyat" then
bad_list.x1 = { 31, 118, 115, 36, 18 }
bad_list.x2 = { 11, 58, 96, 27, -17 }
bad_list.y1 = { -296, -2, 110, 280, 191 }
bad_list.y2 = { -266, 33, 159, 301, 210 }
end


for k,v in pairs(bad_list.x1) do
if (p_vector.x >= bad_list.x2[k] and p_vector.x = bad_list.y1[k] and p_vector.z level_vertexes[level.name()] then lv_new = math.random(1000,5000) end


pos_new = level.vertex_position(lv_new)

if not bad_sector(pos_new) then

local anom_types = {"noartf_mosquito_bald_weak", "noartf_mosquito_bald_average",
"noartf_gravi_zone_weak", "noartf_gravi_zone_average",
"noartf_witches_galantine_weak", "noartf_witches_galantine_average",
"noartf_zharka_static_weak", "noartf_zharka_static_average",
"noartf_mincer_weak", "noartf_mincer_average"}

local name_new_anom = anom_types[math.random(10)]
local rad_new_anom = math.random(2,3)

local obj = alife():create(name_new_anom, pos_new, lv_new, gv_id)
create_anom(obj, rad_new_anom, "anom_on")
--level.map_add_object_spot(obj.id, "green_location", obj:name())
else

anom_rand(lv_id, gv_id)

end

end


-- Получаем custom_data из нэт-пакета о вкл / выкл аномалии
function get_anomaly_mode(p_obj_id)
local obj = alife():object(p_obj_id)
local packet = net_packet()
obj:STATE_Write(packet)
local game_vertex_id = packet:r_u16()
local cse_alife_object__unk1_f32 = packet:r_float()
local cse_alife_object__unk2_u32 = packet:r_s32()
local level_vertex_id = packet:r_s32()
local object_flags = packet:r_s32()
local custom_data = packet:r_stringZ()
return custom_data
end


-- Обновляем менеджер аномалий
function anom_update()
if amk.load_variable("an"..loc[level.name()],0) == 0 and
has_alife_info("first_blowout") and
db.Flag2 == 0 then
add_anom("param")
end
if amk.load_variable("an"..loc[level.name()],0) == 1 then
on_game_load()
end
end


-- Спавним и записываем новые свойства аномалий через нет-пакет
function create_anom(p_obj, rad_anom, mode)

local packet = net_packet()
p_obj:STATE_Write(packet)

local game_vertex_id = packet:r_u16()
local cse_alife_object__unk1_f32 = packet:r_float()
local cse_alife_object__unk2_u32 = packet:r_s32()
local level_vertex_id = packet:r_s32()
local object_flags = packet:r_s32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_s32()
local cse_alife_object__unk3_u32 = packet:r_s32()

local shape_count = packet:r_u8()
for i=1,shape_count do
local shape_type = packet:r_u8()
if shape_type == 0 then
local center = packet:r_vec3()
local radius = packet:r_float()
else
local box = packet:r_matrix()
end
end

local restrictor_type = packet:r_u8()

local cse_alife_custom_zone__unk1_f32 = packet:r_float()
local cse_alife_custom_zone__unk2_u32 = packet:r_s32()
local on_off_mode_enabled_time = packet:r_s32()
local on_off_mode_disabled_time = packet:r_s32()
local on_off_mode_shift_time = packet:r_s32()

local offline_interactive_radius = packet:r_float()
local artefact_spawn_places_count = packet:r_u16()
local cse_alife_anomalous_zone__unk1_u32 = packet:r_s32()

local last_spawn_time_present = packet:r_u8()

if packet:r_elapsed() ~= 0 then abort("left=%d", packet:r_elapsed()) end

packet:w_u16(game_vertex_id)
packet:w_float(cse_alife_object__unk1_f32)
packet:w_s32(cse_alife_object__unk2_u32)
packet:w_s32(level_vertex_id)
packet:w_s32(object_flags)
if mode~=nil then custom_data = mode end
packet:w_stringZ(custom_data)
packet:w_s32(story_id)
packet:w_s32(cse_alife_object__unk3_u32)

packet:w_u8(1)
packet:w_u8(0)
local sphere_center = vector()
sphere_center:set(0, 0, 0)
packet:w_vec3(sphere_center)
radius = rad_anom
packet:w_float(radius)

packet:w_u8(restrictor_type)

packet:w_float(cse_alife_custom_zone__unk1_f32)
cse_alife_custom_zone__unk2_u32 = bit_not(0)
packet:w_s32(cse_alife_custom_zone__unk2_u32)
packet:w_s32(on_off_mode_enabled_time)
packet:w_s32(on_off_mode_disabled_time)
packet:w_s32(on_off_mode_shift_time)

packet:w_float(offline_interactive_radius)
packet:w_u16(artefact_spawn_places_count)
packet:w_s32(cse_alife_anomalous_zone__unk1_u32)

packet:w_u8(last_spawn_time_present)

p_obj:STATE_Read(packet, packet:w_tell()-packet:r_tell())
return p_obj
end

0

Поправляйте если я ошибаюсь я новичок в этом!

Судя по всему ошибка здесь:
-- Обновляем менеджер аномалий
function anom_update()
if amk.load_variable("an"..loc[level.name()],0) == 0 and ------ и именно в этой строчке
has_alife_info("first_blowout") and
db.Flag2 == 0 then
add_anom("param")
end
if amk.load_variable("an"..loc[level.name()],0) == 1 then
on_game_load()
end
end

Мне кажется что либо эта функция не прописана:
amk.load_variable
Либо если в папке со скриптами есть скрипт под названием amk.script то функция load_variable не прописана! А all.spawn имеется к данной модификации?

0

спавн-файл вроде есть, на что эту строчку исправить для оригинала?

0

Zhenyapetrenko проверь файл amk.script в папке скрипт, и если есть функцию load_variable! Извини но я только теорию знаю (и ту на3) и так сам пару простых скриптов смогу написать но такие крупные только изменять под себя! И все же проверь этот файл! Если есть такой то дело поправимое!

0

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

0

Byurrer, спасибо.
Попробуй посмотреть файлы водки - она же дает результат двоения в глазах. Думаю, тебе нужно что-то подобное...
кстати, я че-то туплю сегодня. Подправил максимальный вес для ходьбы а про бег забыл. Какая строка за него отвечает?
да, и исчье...
мне в голову пришла идея сделать зверушек-нейтралов на базах Долга и Свободы. Ну и Монолита. Я так понимаю, для этого надо замутить исчье три группировки и докинуть туды монстров?

0

Zhenyapetrenko у меня эта прога нормально расширяет!
Кстати сделал зависимость от сигарет, следующие вопросы:
1. как ее проверить.
2. Как сделать так чтоб когда захотел курить высвечивалась иконка на худе.
3. Как сделать что если долго бегать то быстрее захотелось курить!
На счет первого можно просто где-то между диалогами вставить?

0

У кого есть олл.спавн от ОГСМ? Они с АМК хоть похожи? мне только динам. аномалии передрать
и шейдерс.хр от соли?
я просто реально задрался искать, а качать 2 гб ради 2 файлов...

0

Подскажите как добавить при потреблении еды - звуки.
Типа как в ЗП.

0

помогите идиоту!
как использовать асдс? Я пути прописал, файлы все на месте. Захожу в скрипт, он че-то думает, затем выкидывает. В нужной папке (как и в остальных) розкрытого олл.спавна нет...

0

Zhenyapetrenko значит смотри:
Качай acdc отсюда! У нас насайте спроси у когонить!
Пиши если че в ЛС!

0

Zhenyapetrenko, про АСДС скажу - херня это галимая! У половины не получается распаковать( я в том числе ).

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

0

а есть какой-то другой способ вскрыть олл.спавн? ну кроме как друга попросить?

0

так мне надо из 4-х файлов перекинуть значения в один. А xr.Spawner только один файл за раз открывает

0

про АСДС скажу - херня это галимая! У половины не получается распаковать( я в том числе ).
все проблемы в /dev/hands

0

все проблемы в /dev/hands
все проблемы в /acdc/hernya_kakayato/lagi/generator_lagov/stupid.her
вот в чем проблемы!

0

отключи /generator_lagov, которым в большинстве случаев является /dev/hands и подключи /dev/brain

0

отключи /generator_lagov, которым в большинстве случаев является /dev/hands и подключи /dev/brain
подключить /dev/brain че то не получается, ругается:
Fatal error: this function can not be used due to insufficient memory.

и где /dev/hands отключить?
поищи на клавиатуре или мышке да рубани как следует!!!

0

Да мыш я вчера с балкона выронил за плохое поведение...
А dev/hands у меня криво стоит - порт чуть меньше чем надо для девайса. При подключении /dev/brain выкидывает без лога... че делать?

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

0

Да! Вижу вы все тут с acdc не дружите! А ведь это крутая штука и лучше ее нет! А xrSpawner не создает объекты!!! Вот ссылка
http://sipgame.ucoz.com/ACDC_MENU_2.2.rar
Извините что не с ПГ искал не нашел хотя я отсюда и качал!!! У меня тожа были проблемы с all.spawn но я скачал это acdc menu2 и все распаковал!!!

0

Спасибо за совет но это мне мало чем помогло!
Я все файлы что и в ЗП и ТЧ пролазил, вообще все поиском прошарил, мало что полезного нашел!

0

у мну есть и эта и третья версия проги... Может там его как-то по особому засунуть надо?

0

дА нет, просто АСДС не для всех алл.спавн-ов подходит

0
ЗАГРУЗИТЬ ВСЕ КОММЕНТАРИИ