• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

Не стесняюсь спросить....

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
приложи свой пример скрипта..
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.414
Благодарности
3.242
Баллы
525
Я пытаюсь адаптировать болванку от камрада Efectivo, которую стянул из твоего поста как-то не так давно. Там есть такие секции, например:

Код:
;--------------------------------
;Установка (укажите каталоги и файлы для инсталляции).

SetOutPath "$INSTDIRSystem"

;File ".Systemmod.ini"
;File ".Systemmod.rtf"
;File ".Systemmod.ico"

SetOutPath "$INSTDIRDatamodvdf"

;File ".Datamodvdfmod.mod"

Код:
;Удаление (укажите файлы для деинсталляции).

;Delete "$INSTDIRSystemmod.ini"
;Delete "$INSTDIRSystemmod.rtf"
;Delete "$INSTDIRSystemmod.ico"

;Delete "$INSTDIRDatamodvdfmod.mod"

;RMDir "$INSTDIRsaves_mod"

Пока не расставил слэши в путях, компилятор ругался. Версия NSIS, кстати, 2.46. Возможно, слэши потерялись после вставки в сообщение на форуме. С расположением исходников, вроде бы, разобрался. Положил всё в одну папку, включая скрипт, для иконки пришлось прописать полный путь. Теперь вот затык на поиске установленного плейер-кита. В болванке, как я понимаю, прописан анализ реестра, а у меня плейер-кит для Г1 что-то как-то вручную установлен, без регистрации в реестре.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Я пытаюсь адаптировать болванку от камрада Efectivo, которую стянул из твоего поста как-то не так давно. Там есть такие секции, например:
Я же даже не помню где это писал и когда..
Но желательно прикладывать во вложение к посту сам файл а не выдержки его кода..


Пока не расставил слэши в путях, компилятор ругался. Версия NSIS, кстати, 2.46.
Если скрипт инсталлера находится в папке "а", то файлы находящиеся на этом же уровне должны быть прописаны как:
File "Systemmod.ini"

если они находятся во вложенных подкаталогах папки "а", то должны прописываться так:
File ".\setup\mod-de\Systemmod.ini"
где, setup и mod-de вложенные подкаталоги...

Теперь вот затык на поиске установленного плейер-кита. В болванке, как я понимаю, прописан анализ реестра, а у меня плейер-кит для Г1 что-то как-то вручную установлен, без регистрации в реестре.
Приложи оба файла инсталлера *.nsi и его хидер *.nsh
 

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.049
Благодарности
1.170
Баллы
340
Меш. я срезал лес в модели SURFACE.3DS . Как мне добавить изменения в ZEN ?
Меш помещается в директорию _work\data\Meshes\Level.
Зен открывается как некомпилируемый, затем производится компиляция мира и света. Если все сделано правильно, то меш должен быть автоматически заменен. Этот способ работает, только если имя измененного меша полностью совпадает с именем заменяемого.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.414
Благодарности
3.242
Баллы
525
Приложи оба файла инсталлера *.nsi и его хидер *.nsh

Хидера нет, если не считать стандартных НСИСовских. Всё в одном скрипте. Во вложении то, что пока получается. Функции автоматического определения пути и наличия установленной игры нужно допиливать. Или вовсе убирать, поскольку вариантов больше, чем два. Пока не понял, можно ли организовать выборочную установку по принципу "ИЛИ" (один из двух). Если можно, подскажи как. Также не разобрался пока, как организовать выборочное удаление компонентов.
 

Вложения

  • Gothic_Mod_TEST.txt
    7,6 KB · Просмотры: 180

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Хидера нет, если не считать стандартных НСИСовских. Всё в одном скрипте. Во вложении то, что пока получается.
Используй оригинальный из МДК2, там пример есть..

Функции автоматического определения пути и наличия установленной игры нужно допиливать. Или вовсе убирать, поскольку вариантов больше, чем два.
Она не нужна, ибо нормально работать не будет при любых раскладах, просто надо прописывать оригинальный пусть из игры..
Я в свое время делал это но там такой гемор со всем этим определением, что забил...


Пока не понял, можно ли организовать выборочную установку по принципу "ИЛИ" (один из двух). Если можно, подскажи как.
Если я тебя правильно понял, то можно.. Но подобная реализация будет блокировать любое управление чекбоксами на странице компонентов. Пример..
Секции с компонентами
Код:
Section /o "Компонент №1" ID_1
SectionEnd

Section "Компонент №2" ID_2
SectionEnd

Section /o "Компонент №3" ID_3
SectionEnd

Section /o "Компонент №4" ID_4
SectionEnd

Section "Компонент №5" ID_5
SectionEnd

Section /o "Компонент №6" ID_6
SectionEnd

Функция проверки отметки, обязательна
Код:
Function .onSelChange

; Выбор между компонентам 1, 2, 3
  !insertmacro StartRadioButtons $1
  !insertmacro RadioButton ${ID_1}
  !insertmacro RadioButton ${ID_2}
  !insertmacro RadioButton ${ID_3}
  !insertmacro EndRadioButtons

; Выбор между компонентам 5 и 6
  !insertmacro StartRadioButtons $2
  !insertmacro RadioButton ${ID_5}
  !insertmacro RadioButton ${ID_6}
  !insertmacro EndRadioButtons

FunctionEnd

Назначаем по-умолчанию отмеченные
Код:
Function .onInit

  StrCpy $1 ${ID_2}
  StrCpy $2 ${ID_5}

FunctionEnd

Также не разобрался пока, как организовать выборочное удаление компонентов.
Если использовать такой подход в чек боксах, то выборочность будет невозможна.. т.к. у тебя будет работать взаимоисключающая установка..
Единственное что можно сделать, изначально прописывать требуемое значения флага чекбокса куда нибудь, например, при установке проверяем есть ли флаг на чекбоксе 1, если есть прописываем это значение в реестр, а при удалении, деинсталлятором проверять этот ключ реестра, и если он равен 1, то переводить в активное состояние этот флаг для удаления требуемого компонента..
Так наверное.. ::)

По хидеру, прикладываю свой правленный файлик, сам стартер Г1 у тебя должен быть в подкаталоге инсталлятора System.

Хидер в скрипте подключаешь после брандинга и лангов:
Код:
!include "GOTHIC1Cls.nsh"

Прочее что должно быть в твоем скрипте для проверки плееркита, порядок именно такой(!):
Код:
Section -gmpk
  SetOverwrite on
  SetDetailsPrint none
  SetShellVarContext current
  !insertmacro GLOBAL_InstallPlayerKit
SectionEnd

Код:
Function .onInit
  Push $R0
  SetCurInstType 0
  !insertmacro MUI_LANGDLL_DISPLAY
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "setup.ini"
  StrCpy $1 ${SecMod}
  SetSilent normal
  IfFileExists "$INSTDIR\System\Gothic.exe" done
  Call GLOBAL_GetInstallLocation
  Pop $R0
  StrCmp $R0 "" done
  StrCpy $INSTDIR $R0
  done:
  Pop $R0
FunctionEnd

Код:
Function un.onInit
  !insertmacro MUI_UNGETLANGUAGE
  Push $R0
    StrCpy $1 ${unSecMod}
  IfFileExists "$INSTDIR\System\Gothic.exe" done
  ReadRegStr $R0 HKLM "${MOD_RKEY}" "InstallLocation"
  StrCmp $R0 "" wrong
  StrCpy $INSTDIR $R0
  IfFileExists "$INSTDIR\System\Gothic.exe" done
  wrong:
  MessageBox MB_YESNO|MB_ICONQUESTION "$(TextInstallationListInv)" IDYES done
    Pop $R0
    Abort
  done:
  Pop $R0
FunctionEnd

Код:
Var VerifyMessageOnce
Function .onVerifyInstDir
  !insertmacro GLOBAL_IfInstallVersion $INSTDIR "1.0.8.11" done
  !insertmacro GLOBAL_IfInstallVersionBase $INSTDIR "1.08k" code
  Goto nope
  code:
  !insertmacro GLOBAL_IfInstallVersionCode $INSTDIR 0 done
  nope:
  StrCmp $VerifyMessageOnce "done" +3
  MessageBox MB_OK|MB_ICONINFORMATION "$(TextVerifyInstDir)"
  StrCpy $VerifyMessageOnce "done"
  Abort
  done:
FunctionEnd

ПРИМЕЧАНИЕ:
Некоторые значения и переменные у меня изменены и тебе надо будет прописывать их под свою версию.
Свой скрипт инсталлера мода не даю по причине его абсолютной бесполезности для тебя, т.к. я использую расширенную и измененную на уровне ехе версию NSIS UNICODE, в отличие от твоей стандартной ANSI, работать на твоей версии ничего из моего не будет..
Файлик Хидера в кодировке Юникода, надо будет конвертнуть его в стандартную Анси.

Весь текст в твоем скрипте идущий от:
Код:
;--------------------------------
Section "Основные файлы мода." SecMain
и до конца, должен быть размещен здесь:
Код:
VIAddVersionKey "ProductVersion" "${MOD_VERSION}"


Function .onInit
Между этими двумя строками..

+ добавил справочник по Nsis-ке от моих друзей, будет тебе полезен на уровне разбора кода и примеров реализации.. ;)
 

Вложения

  • GOTHIC1Cls.rar
    2,1 KB · Просмотры: 103
  • nsis_help-1.5.chm
    1,6 MB · Просмотры: 423

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.770
Благодарности
557
Баллы
275
Напиши, что и как делал. Возможно, проблема с неправильной компиляцией, возможно, что-то с порталами, если правил меши.
В том и дело, что мэш оригинальный. Никаким изменениям не подвергался, но пропали все пещеры. Компилирую с Editmode, пещеры на месте. Компилирую без, ни одной нет. С остальными мэшами все в порядке.
Впрочем все решилось проделкой всех операций на другом компьютере. Видать опять Spacer глючит.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.414
Благодарности
3.242
Баллы
525
Вопрос по скрипту инсталлятора. Нужно вызвать функцию в момент выхода со страницы выбора директории установки (или в момент входа на страницу выбора компонентов). Цель:

Хочу дать юзеру возможность выбрать тип установки на данном этапе. Если в выбранной папке имеется мод-стартер, то инсталлятор предложит установить мод-фикс, как мод, то есть в папку Data/ModVDF с запуском через мод-стартер. Дело в том, что наличие мод-стартера не означает, что игрок использует его для запуска модов. Возможно, мод-стартер был установлен, только как обязательный элемент для последующей установки СистемПака.
Насколько я понимаю, для этого предназначены функции обратного вызова и в макросе MUI_PAGE_DIRECTORY (хидер System.nsh), например, эти функции даже определены:
Код:
!macro MUI_PAGE_DIRECTORY
  ...
  PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}directory

  PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryShow_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.DirectoryLeave_${MUI_UNIQUEID}
  ...
  PageExEnd
  ...
!macroend

Только я не въеду, могу ли я использовать одну из них для своих целей, и как? *???*
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Такой вопрос, как засунуть кусок локации под портал, вот например такая идея есть у меня островок, и его нужно положить под портал чтобы он стал indoor, как это правильно сделать? и да, компиляция как indoor НЕ ДОПУСТИМА в моем случае, нужно конкретно чтобы он был частью outdoor левела.
 

Beowulf

Участник форума
Регистрация
21 Ноя 2010
Сообщения
1.957
Благодарности
1.490
Баллы
465
Такой вопрос, как засунуть кусок локации под портал, вот например такая идея есть у меня островок, и его нужно положить под портал чтобы он стал indoor, как это правильно сделать?
В первой готике леса и часть болота были сделаны как индур-уровни. Почему бы не сделать по аналогии? Закрываешь свой островок полигонами по сторонам в соответсвии с очертаниями модели и сверху.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Да не так не пойдет, нету возможности везде пришить к мешу, ибо меш очень сложный
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Нужно вызвать функцию в момент выхода со страницы выбора директории установки (или в момент входа на страницу выбора компонентов).
Хм.. хз никогда этим не заморачивался, ибо смысла в этом мало.. В своих инсталлерах писал так.:
Все что нужно по выбору юзера, ярлыки и прочее всегда ставятся по-умолчанию не зависимо от юзера, но также все это автоматически удаляется и чистится, без оставления следов установки на компе юзера.
Вызывать можно через секцию .onInit она отрабатывает всегда в начале, или через другие секции/функции, но тут надо думать и логику правильную расписывать.
Могу порекомендовать в качестве примера глянуть на исходник инсталлера мода Оркадес, автор добавлял исходники инсталляции в архив ресурсов своего проекта, который в доступе, у него была вроде как реализована возможность опций выбора. Но все комменты там на дойче будут... ::)
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.414
Благодарности
3.242
Баллы
525
Могу порекомендовать в качестве примера глянуть на исходник инсталлера мода Оркадес...

Извиняюсь за беспокойство. Уже разобрался вчера. Помог камрад Гугл и скудное знание аглицкого. Если кому интересно, могу рассказать, как это делается.

1. У меня ещё кое-какие вопросы. Насколько нужно создание таких ключей:
Код:
WriteRegStr HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram "DisplayName" "${PRODUCT_NAME}"
WriteRegStr HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram "DisplayName" "${PRODUCT_NAME}"
WriteRegStr HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram "UninstallString" "$OUTDIR\uninst.exe"

2. Надёжно ли работает определение разрешения с помощью
Код:
System::Call 'user32::GetSystemMetrics(i 0) i .r0' ; Горизонталь
System::Call 'user32::GetSystemMetrics(i 1) i .r1' ; Вертикаль
Это можно использовать для автоматической фиксации наличия широкоэкранного монитора в системе. Но не будет ли проблем на каких-нибудь осях?

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Извиняюсь за беспокойство. Уже разобрался вчера. Помог камрад Гугл и скудное знание аглицкого. Если кому интересно, могу рассказать, как это делается.
У тебя есть справка по Нсис она ведет на сайт русского сообщества где обретаются все гуру Нсиськи, там проще всего спросить, если есть какие затруднения. Это на будущее, дабы по гуглам не шариться, но можно и сюда отписать, как вариант.. :)

1. У меня ещё кое-какие вопросы. Насколько нужно создание таких ключей:
Нужны и важны, первый прописывает инфу о установке твоей проги в ОС,третий инфу об деинсталлере..
Второй:
Код:
WriteRegStr HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram "DisplayName" "${PRODUCT_NAME}"
почему-то у тебя равнозначен первому, так быть не должно, и его надо удалить.

2. Надёжно ли работает определение разрешения с помощью
Ничего не скажу, ибо не заморачивался с этим вообще..

3. По какому признаку лучше определять наличие СистемПака в папке, выбранной для установки? По ИНИшнику? Или есть более надёжный способ?
Самый простой и надежный способ это проверка по либе систем пака и сравнению ее хеша(Контрольной суммы МДМ5, например), или как вариант по наличию его инишки(но ее может и не быть).
Или как вариант, можно через реестр посмотреть, установленный систем пак пишется в него, и если есть запись, то сверяться оттуда.. ::)
 

Tery

Участник форума
Регистрация
8 Ноя 2013
Сообщения
6
Благодарности
1
Баллы
150
Всем доброго времени суток! Такой вопрос - можно ли сделать зелье регенерации? Допустим чтобы после использования восстанавливалось хп 1ед/сек и так на протяжении минуты. Долго смотрела на функцию зелья скорости и хилки, так ни к чему и не пришла :(
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Можно, функция зелья скорости лежит глубоко в движке, так что тебе не туда надо. Тебе нужен зацикленный Триггер скрипт( в уроках должен быть), и с помощью него уже восстанавливать в цикле. вобщем завтра могу набросать пример скрипта.
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.578
Благодарности
4.171
Баллы
915
Прошу помощи у знатоков моддинга Gothic 3. На днях я попробовал произвести разделение текстур для южных и северных видов животных:
- куриц (Chicken) и белых куриц (WhiteChicken);
- коров (Cow, Montera_Cow_01) и белых коров (WhiteCow);
- оленей обычных, пугливых (Deer, Vangard_Deer_01) и белых, с плато (WhiteDeer, Hanson_Deer).
Дело в том, что все животные этих видов имеют одинаковые текстуры, например, у обоих видов куриц используется текстура G3_Monster_Chicken_Body_Diffuse_S1.ximg, хотя в паке_compiledImage.pak есть текстура и для белой курицы G3_Monster_Chicken_Body_Diffuse_S2.ximg. То же самое разделение текстур имеется для коров и оленей:
G3_Monster_Cow_Body_Diffuse_S1.ximg и G3_Monster_Cow_Body_Diffuse_S2.ximg, G3_Monster_Deer_Body_Diffuse_S1.ximg и G3_Monster_Deer_Body_Diffuse_S2.ximg.
Затем обратил внимание на цвет текстур у саблезубых тигров: оказывается, что южные виды почему-то имеют более светлый окрас без характерных поперечных полос, например, тёмный (Sabertooth_Dark) и подозрительный (Trelis_Sabertooth_01), а северные обычный (Sabertooth) и большой (Wolfclan_Sabertooth_01) имеют более тёмный окрас с поперечными полосами, т.е. в данном случае были перепутаны текстуры G3_Monster_Sabertooth_Body_Diffuse_S1.ximg и G3_Monster_Sabertooth_Body_Diffuse_S2.ximg.
Нашёл у себя текстовый файл, в котором расписаны взаимосвязи между основными ресурсами Gothic 3:
Код:
Templates - Templates:
.tple (NPC) -> .tple (Head/Body)
класс gCInventory_PS
в субклассах типа gCInventorySlot (gESlot_Head и gESlot_Body)
идёт ссылка на GUID Handler-Hash .tple головы/тела.

Templates - _compiledAnimation:
.tple (Head/Body) -> модели (.fxa/xact)
eCVisualAnimation_PS.ResourceFilePath=<model>.fxa/xact

Templates - _compiledImage:
.tple (Head/Body) -> иконки в инвентаре (.tga/ximg)
gCItem_PS.Texture=<icon>.tga/ximg (бывает не у всех тел)
.tple (Head/Body) -> номер текстуры (.tga/ximg)
eCVisualAnimation_PS.MaterialSwitch=n (0 - S1, 1 - S2, 2 - S3, и т.д.)

_compiledAnimation - _compiledImage:
модель (.fxa/xact) -> текстуры (.tga/ximg)
внутри модели явно указывается название 1 текстуры, например:
в G3_Hero_Body_Firemage.xact задано G3_Human_mage_Body_Diffuse_S1
Но здесь я столкнулся с глюком: текстура не изменяется на отличную от S1, если прописывать значение параметра MaterialSwitch в шаблоне существа, срабатывает только тогда, когда изменяем значение этого параметра через встроенный редактор. Причём нет разницы, начиналась или нет новая игра, находилось ли это существо в мире изначально или вставлялось позже командой spawn. На всякий случай я прилагаю архив с тестовым файлом Templates.p01, в котором пробовал изменить текстуры для белых куриц, коров, оленей, а также оленей с плато и 4 видов саблезубов.
Почему это разделение прекрасно работает для обычных и шерстистых бизонов (Bison и LonghairBison) и носорогов (Rhino и LonghairRhino)? И почему глючит при попытке сделать то же самое для куриц, коров, оленей и саблезубов?:confused:
 

Вложения

  • Templates_p01.rar
    41,6 KB · Просмотры: 86

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Всем доброго времени суток! Такой вопрос - можно ли сделать зелье регенерации? Допустим чтобы после использования восстанавливалось хп 1ед/сек и так на протяжении минуты. Долго смотрела на функцию зелья скорости и хилки, так ни к чему и не пришла :(
https://worldofplayers.ru/threads/31401/
Тут почитай, думаю поймешь.
 

Михаил Карсаков

Участник форума
Регистрация
17 Ноя 2014
Сообщения
85
Благодарности
2
Баллы
170
Привет всем. Спрашивал многих, но не кто толком не разъяснил. Если можно - то в л.с. Скажите пожалуйста, как создать и вставить, что бы без вылетов доспех к готике 2 нв (подробно) 1. Я вставляю все, в it_addon_armor - компилирую, доспех появился. Но одеть нельзя - вылет. Он невидим. Скажите, что не так, пожалуйста.
 
Сверху Снизу