Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Общие вопросы и ответы
denis2000Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Помощь тем кто хочет знать больше о игре и модах

Если у вас появились вопросы по модостроению в игре S.T.A.L.K.E.R. Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Код
function abort(fmt, ...)
                     local reason = string.format(fmt, ...)
                     error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Код
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Код
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


Посты, для которых есть свои категории, из этой темы будут удаляться или перемещаться в соответсвующую тему. Персональных извещений в ЛС о переносе\удалении поста не будет, ищите сами. Учитывайте, что в системах Ucoz тема не обновляется в статистике при переносе поста.
Посты, написанные здесь-же после переноса, будут расцениваться как кросспостинг, со всеми вытекающими


[cut noguest=Первый юбилей нашей темы]

Здравствуйте господа модостроители, и все так или иначе причастные к этому.
Нашей теме исполнился 1 год.
От души поздравляю Всех Вас дорогие друзья, творческих успехов.
Хочу так же выразить отдельную благодарность denis2000 и ХОВАН.

tracker 23.06.11



[/cut]
 
CBO6ODAДата: Вт, 25.11.2014, 20:06 | Сообщение # 751
Отмычка
Пользователи
Сообщений: 30
Награды: 6
Репутация: [ 65 ]

sergej5500, Прописал, туда...
путь такой scripts\logic_soldier1.ltx

в файле:
[cut noguest=Тут текст][logic@esc_b1_commander_1]
active = walker@esc_b1_commander_1
suitable = {=check_npc_name(esc_b1_commander_1)} true
prior = 300

[walker@esc_b1_commander_1]
path_walk = commander_1_walk
path_look = commander_1_look
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
meet = meet
on_info = {!actor_friend} %=actor_friend%

[meet]
use = {!actor_enemy !actor_has_weapon !has_enemy} true, false
allow_break = false
trade_enable = true [/cut]

Игра не вылетает - однако НПС ГГ враг...
И он почему то ходит, хотя наверно из-за ГГ, так как он для ГГ враг..



SGM 2.2 CBO6ODA EDITION - 32% (24.04.2017)
 
sergej5500Дата: Вт, 25.11.2014, 20:14 | Сообщение # 752
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

CBO6ODA,

Возможно, что непись не принял свою логику. Попробуй поменять отношение всей группировки killer к ГГ в game_relations. Поставь нейтрала или друга. Непись перестанет обращать на игрока внимание. Если он не будет стремиться занять свое место, тогда он не принял логику.
 
makdmДата: Вт, 25.11.2014, 20:16 | Сообщение # 753
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата sergej5500 ()
Изучите спавн нового НПС. Там хорошо написано, как спавнить неписей.

sergej5500, с этого и надо было начинать.
Я об этом ещё здесь написал

http://sigerous.ru/forum/17-4972-1316719-16-1416749861

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

Устроили тут Ромашка: Помогло - Не помогло. biggrin
Для таких переговоров есть система Л.С.


Терпение......
И все получится!
 
CBO6ODAДата: Вт, 25.11.2014, 22:32 | Сообщение # 754
Отмычка
Пользователи
Сообщений: 30
Награды: 6
Репутация: [ 65 ]

sergej5500, Извольте, а где этот файл находится ?

Добавлено (25.11.2014, 22:32)
---------------------------------------------
Так, всё нашел.
Всё теперь норм, но вот...
НПС не слушает логику, а так-же... ходит
Теперь мне он нейтрал, а всё равно ходит, может я что с логикой не правильно делаю ?



SGM 2.2 CBO6ODA EDITION - 32% (24.04.2017)
 
suhar_Дата: Вт, 25.11.2014, 22:49 | Сообщение # 755
Бывалый
Пользователи
Сообщений: 106
Награды: 0
Репутация: [ 0 ]

Цитата denis2000 ()
Решить проблемму этого вылета можно двумя способами

Вы так говорите, будто правка движка - это дело пяти минут..
Первый способ очевиден, но нежелателен, т.к. мои бустеры имеют бОльшие физические размеры, нежели аптечки или жратва, и нужно, чтобы в инвентаре они тоже выглядели внушительно.
Дело в том, что это не совсем бустеры, а инвентарные комплексы, по типу мешочков денег в SGM. При их использовании в рюкзаке гг появляются некоторые вещи. Т.е. сам предмет не имеет стандартных параметров бустера типа boost_health_restore или eat_satiety.
Была мысль изменить класс S_FOOD на какой-нибудь другой (может быть даже ввести свой). Ставлю класс S_PDA, тогда пропадает возможность вызова контекстного меню со строкой "использовать". Можно ли в скриптах прописать классу возможность вызова такого контекстного меню или это тоже в движке зашито? Кстати, в SGM1.7 эта проблема тоже остаётся нерешённой. Некоторые предметы-бустеры имеют класс II_ANTIR, но сути это не меняет, предмет все так же остаётся бустером, который можно перетащить в ячейку быстрого доступа (после чего получить вылет).

з.ы.: Проще говоря, хочется сделать так, чтобы предмет можно было использовать только из рюкзака, вызвав нажатием на него меню со строкой "использовать" без возможности перетаскивания предмета в быстрые ячейки.


Сообщение отредактировал suhar_ - Вт, 25.11.2014, 23:03
 
denis2000Дата: Вт, 25.11.2014, 23:02 | Сообщение # 756
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата suhar_ ()
Вы так говорите, будто правка движка - это дело пяти минут

Это вы по особому сочетанию цветов шрифта в моем посте поняли? Так вот я такого не говорил!
Цитата suhar_ ()
Можно ли в скриптах прописать классу возможность вызова такого контекстного меню или это тоже в движке зашито?

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

"Съедобные" классы (именно у них есть возможность использования в инвентаре):
[table][tr][td]Идентификаторы класса[/td][td]Движковый класс[/td][td]Скриптовый класс[/td][/tr][tr][td]S_MEDKI[/td][td]CMedkit[/td][td]obj_medkit_s[/td][/tr][tr][td]S_BANDG[/td][td]CMedkit[/td][td]obj_bandage_s[/td][/tr][tr]
[td]S_ANTIR[/td][td]CAntirad[/td][td]obj_antirad_s[/td][/tr][tr][td]S_FOOD[/td][td]CFoodItem[/td][td]obj_food_s[/td][/tr]
[tr][td]S_BOTTL[/td][td]CBottleItem[/td][td]obj_bottle_s[/td][/tr][/table]

II_ANTIR - это устаревший идентификатор класса антирада (еще с ТЧ и ЧН) и использовать его можно, но я бы не рекомендовал.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 25.11.2014, 23:12 | Сообщение # 757
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата denis2000 ()
Теперь мне он нейтрал, а всё равно ходит, может я что с логикой не правильно делаю ?


Гадать тут можно бесконечно. Выложите все свои правки и секции, относящиеся к этому НПС.
 
suhar_Дата: Вт, 25.11.2014, 23:18 | Сообщение # 758
Бывалый
Пользователи
Сообщений: 106
Награды: 0
Репутация: [ 0 ]

denis2000, в ваших словах улавливается сарказм.
Цитата denis2000 ()
Или вы считаете, что мой пост про два варианта шутка?

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

Вот теперь вы правильно уловили смысл моих слов. Варианта действительно два, но у вас и у меня (как у подавляющего большинства) есть только один. denis2000
 
asd123Дата: Ср, 26.11.2014, 02:24 | Сообщение # 759
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Хотелось бы разобрать on_info. Вот у Сидоровича нашел вызов функции при торговле. В ней три строки запускающие разные функции:
on_info = {=trading =trade_exchanged} mob_trader@new_trade_exchanged
on_info2 = {!trading =trade_exchanged} mob_trader@new_trade_good
on_info3 = {!trading !trade_exchanged} mob_trader@new_trade_bad

Теперь вопрос: чем они различаются? То есть: как влияют = и ! ?


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Ср, 26.11.2014, 02:24
 
ДизельДата: Ср, 26.11.2014, 02:52 | Сообщение # 760
Сталкер
Разработчики
Сообщений: 260
Награды: 1
Репутация: [ 136 ]

new_trade_bad, new_trade_good, new_trade_exchanged влияют в комплеткте пакета, а так вообще не влияют. Это всего лишь название пакета, контейнера.
mob_trader - это скриптовая часть, вызывающая функцию.


andreyholkin
 
СахарДата: Ср, 26.11.2014, 03:25 | Сообщение # 761
Гражданский
Пользователи
Сообщений: 2
Награды: 4
Репутация: [ 69 ]

asd123, Доброго здравия. По поводу твоего вопроса в скобках приписываются проверочные условия, например для перехода на другую схему, запуска скрипта и т.д. Всего существует 2 типа проверки.

[cut=Описание всех проверок + примеры]+ Проверка выдан ли инфопоршень.
Пример:
on_info = {+tset_info} walker@2  
Пояснение:
То есть при получений инфопоршня tset_info НПС перейдёт на схему поведения  walker@2
- Проверка то что инфопоршень не был выдан.
Пример:
on_info = {-tset_info} walker@1  
= С помощью этого символа проверяются разные скриптовые проверки весь список можно посмотреть xr_conditions.script .
Пример:
on_info = {=is_day} walker@3
Пояснение:
то есть если ты пропишешь эту проверку НПС то он будет днём он прейдёт на схему  walker@3.
! Тоже что и = только на, оборот.
Пример:
on_info = {!is_day} walker@4
Пояснение:
Вроде тоже самое, но только НПС перейдёт на схему walker@4 ночью.[/cut]




Сообщение отредактировал Сахар - Ср, 26.11.2014, 06:06
 
asd123Дата: Ср, 26.11.2014, 14:45 | Сообщение # 762
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата Сахар ()
asd123, Доброго здравия. По поводу твоего вопроса в скобках приписываются проверочные условия, например для перехода на другую схему, запуска скрипта и т.д. Всего существует 2 типа проверки. [ Описание всех проверок + примеры ]+ Проверка выдан ли инфопоршень. Пример: on_info = {+tset_info} walker@2   Пояснение: То есть при получений инфопоршня tset_info НПС перейдёт на схему поведения  walker@2 - Проверка то что инфопоршень не был выдан. Пример: on_info = {-tset_info} walker@1   = С помощью этого символа проверяются разные скриптовые проверки весь список можно посмотреть xr_conditions.script . Пример: on_info = {=is_day} walker@3 Пояснение: то есть если ты пропишешь эту проверку НПС то он будет днём он прейдёт на схему  walker@3. ! Тоже что и = только на, оборот. Пример: on_info = {!is_day} walker@4 Пояснение: Вроде тоже самое, но только НПС перейдёт на схему walker@4 ночью.

Большое спасибо. А вот если on_info = %+agr_b2_commander_death%? Какое различие между скобками и процентами?

Ну и еще вопрос: Как сделать бесконечную выдачу работы от работодателей? В ошибках СГМа мне написали
что заданий 8, а 8 для меня.. маловато.


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Ср, 26.11.2014, 15:09
 
sergej5500Дата: Ср, 26.11.2014, 17:52 | Сообщение # 763
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

asd123,

Цитата asd123 ()
Какое различие между скобками и процентами?


В скобках пишут условие, при котором наступает действие. Если написано

on_info = {+test_info_1}, то действие запустится после выдачи инфопорции test_info_1.

Если написана on_info = {=test_info}, то действие запустится, если функция test_info примет значение true. Функция прописывается в xr_conditions.

В процентах пишут исполняемые функции.

Написано on_info = %+test_info%, значит выдается инфопорция.
Написано on_info = %=test_info%, значит сработает функция, прописанная в xr_effects

Цитата asd123 ()
Как сделать бесконечную выдачу работы от работодателей?


Каждый квест прописывается индивидуально. Исключение - квесты Бороды на артефакты. Изучите уроки Геонезиса. Тогда вы сможете прописать работодателям сколько угодно квестов.
 
CBO6ODAДата: Ср, 26.11.2014, 19:49 | Сообщение # 764
Отмычка
Пользователи
Сообщений: 30
Награды: 6
Репутация: [ 65 ]

Помогите найти причину вылета, логов нет.

У меня подозрения на мой первый диалог...

И так:
Я добавил в файл st_dialogs_zaton.xml
вот этот
[cut noguest=Текст] <string id="Mod_RealPasan_give_actor_dialog_0">
<text>Неужели! Я вижу Пулю... Ты у нас в легендах, слушай тут Кастет с тобой поговорить хотел...Я мало чё понял из его разговора....Сходи... к нему...</text>
</string>
<string id="Mod_RealPasan_actor_dialog_1">
<text>Привет,да было чем прославится...Хорошо пойду поговорю.</text>
</string>
<string id="Mod_RealPasan_give_actor_dialog_2">
<text>Хорошо, ты ток...Это про меня...слово Кастету замолви, окей?</text>
</string>
<string id="Mod_RealPasan_actor_dialog_3">
<text>Ладно,бывай.</text>
</string>[/cut]
Потом добавил в файл:
dialogs_zaton.xml
этот
[cut noguest=Текст]<phrase id="0">
<text>Mod_RealPasan_give_actor_dialog_0</text>
<next>1</next>
<next>2</next>
<next>3</next>
</phrase>[/cut]

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



SGM 2.2 CBO6ODA EDITION - 32% (24.04.2017)


Сообщение отредактировал CBO6ODA - Ср, 26.11.2014, 19:50
 
sergej5500Дата: Ср, 26.11.2014, 20:16 | Сообщение # 765
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

CBO6ODA,

Для создания диалогов лучше пользоваться программой DialogEditor. Входит в комплект СДК для ЗП. Теперь по диалогу.

1. Непонятно, кто начинает диалог. Актор или непись. Так как после нулевой фразы разветвление, то предполагаю, что это стартовый диалог НПС.

2. Диалог должен выглядеть примерно так.

[cut=st_dialogs_zaton]
<string id="Mod_RealPasan_give_actor_dialog_2">
<text>Неужели! Я вижу Пулю... Ты у нас в легендах, слушай тут Кастет с тобой поговорить хотел...Я мало чё понял из его разговора....Сходи... к нему...</text>
</string>
<string id="Mod_RealPasan_give_actor_dialog_3">
<text>Привет,да было чем прославится...Хорошо пойду поговорю.</text>
</string>
<string id="Mod_RealPasan_give_actor_dialog_4">
<text>Хорошо, ты ток...Это про меня...слово Кастету замолви, окей?</text>
</string>
<string id="Mod_RealPasan_give_actor_dialog_5">
<text>Ладно,бывай.</text>
</string>[/cut]

[cut=dialogs_zaton] <dialog id="Mod_RealPasan_give_actor_dialog">
<phrase_list>
<phrase id="0">
<text></text>
<next>1</next>
</phrase>
<phrase id="1">
<text></text>
<next>2</next>
</phrase>
<phrase id="2">
<text>Mod_RealPasan_give_actor_dialog_2</text>
<next>3</next>
<next>4</next>
<next>5</next>
</phrase>
<phrase id="3">
<text>Mod_RealPasan_give_actor_dialog_3</text>
</phrase>
<phrase id="4">
<text>Mod_RealPasan_give_actor_dialog_4</text>
</phrase>
<phrase id="5">
<text>Mod_RealPasan_give_actor_dialog_5</text>
</phrase>
</phrase_list>
</dialog>[/cut]
 
Поиск: