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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, спешите принять участие в поэтическом конкурсе "Весенние поэты 2024"!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

Gothic Sourcer

marazmus

★★★★★★★★★★★
Основатель
Регистрация
7 Янв 2003
Сообщения
2.117
Благодарности
912
Баллы
385
  • Первое сообщение
  • #1

Kerrax

Почетный форумчанин
Регистрация
19 Фев 2008
Сообщения
222
Благодарности
682
Баллы
220
Re: Исходники Готики

вот еще 1 вариант. (похож на работу компилятора си)
IMHO это уже куда-то не туда...
Если проводить аналогии с С++, то и оригинальный вариант тоже не плох:
Код:
                 Daedalus             C++

имя файла       gothic.src        main.cpp

содержимое      file1.d           #include "file1.h" // в одном из
                file2.d           #include "file2.h" // этих файлов
                file3.d           #include "file3.h" // содержится
                file4.d           #include "file4.h" // ф-ия start()
                                                     
                                   void main()
                                   {
                                        start();
                                   }

Т.е. в С++ тоже можно весь функционал разместить в заголовочных файлах, а единственный cpp-файл будет их просто все включать.
src-файл является аналогом cpp-файла, а d-файл - аналогом h-файла в вышеприведенной программе.

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

Я согласен, иногда напрягает, что надо при вставке нового файла в GothicSourcer угадывать для него место среди остальных файлов в gothic.src. Ну так это можно исправить аккуратнее, например, можно заставить GothicSourcer самому находить правильную позицию для вставленного файла, исходя из того, какие функции этот файл вызывает, и какие определяет сам. Я имею в виду, можно изменить принцип работы GothicSourcer'а, но не компилятора, а GUI: сделать так, чтобы при вставке нового файла в проект никаких запросов типа "Выберите позицию для вставки" не появлялось, GothicSourcer просто сам добавит новый файл в сначала в конец gothic.src, а потом, перед первой компиляцией расставит все строки gothic.src в правильном порядке. Мне кажется, так было бы лучше. И с совместимостью все было бы ОК.

UPD: В целом, мне кажется, лучше реализуй вначале макросы, а потом, если получится, можно будет еще пообсуждать этот вопрос.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Kerrax,
Я имею в виду, можно изменить принцип работы GothicSourcer'а, но не компилятора, а GUI: сделать так, чтобы при вставке нового файла в проект никаких запросов типа "Выберите позицию для вставки" не появлялось, GothicSourcer просто сам добавит новый файл в сначала в конец gothic.src, а потом, перед первой компиляцией расставит все строки gothic.src в правильном порядке. Мне кажется, так было бы лучше. И с совместимостью все было бы ОК.
Есть один маленький нюанс, я не знаю с чем он связан, но иногда при перемещении "стандартных" функций/файлов *.d в Gothic.src (получается когда добавляешь свою и она не может найти место, приходится перемещать стандартные), при компиляции ошибок и вниманий нет после перемещения - могут появляться необъяснимые глюки. Типа, начинаешь новую игру, играешь, все в шоколаде, все работает - попытка перейти в Яркендар - вылет на рабочий стол. Все прописано корректно. Вот как это будет отслеживаться и с чем оно связано?
 

Saturas


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

Kerrax

Почетный форумчанин
Регистрация
19 Фев 2008
Сообщения
222
Благодарности
682
Баллы
220
Dimmel,
Боюсь, я не знаю точного ответа.
Насколько я знаю, стандартные файлы в списке gothic.src можно перемещать, в разумных пределах. Правда, не совсем понятно, зачем это делать: по идее, ты либо добавляешь свои файлы, либо редактируешь их, либо удаляешь (причем последнее делается только для самых простых файлов). Менять стандартные файлы местами в gothic.src смысла вроде бы нет. И, как кажется, куда бы ты не добавлял свои файлы (в разумных пределах, понятно - т.е. чтобы все необходимое было уже определено), глюки от этого возникнуть не должны были.

По твоему описанию можно заподозрить, что ты не начал новую игру после замены скриптов, но ты говоришь, что начал... Или что-то случилось с функцией STARTUP_AddonWorld...
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Kerrax,
Я когда тестирую важные изменения всегда начинаю новую игру и чищу дампы. Это уже дурная привычка. Причем тестирую без марвина, а только наигрышем. Да, тупыми забегами по локации, часто даже без рун телепорта.
Если добавлять простейшие функции - то да, проблем нет. А если например делать как написано с очисткой инвентаря торговцев через B_ClearRuneInv(self) ЗДЕСЬ мы получаем что вызов функции B_ClearRuneInv(self) идет раньше, чем она прописана в порядке файлов в Gothic.src. Пошел нубским путем (просто хотел проверить работу функции, у меня очистка шла по другому пути) - передвинул выше ZS_MagicFreeze в списке. Скомпилировал без ошибок и проблем. Начал новую игру, ГГ появился не в башне Ксардаса как положено, а в незатекстуренном порту Хориниса. Вот как таких косяков избежать? И почему такое было?
ЗЫ, Это из последних "экспериментов" с перемещением файлов в Gothic.src, после таких косяков использую просто свои нубские функции, пусть длиннее, тупее и т.д. но прописанные прямолинейно и независимо от других.
ЗЫЫ. Есть еще одна уникальная ошибка вылета - StackOverflow при смене локации и она может быть вызвана чем угодно и когда угодно, отследить причину просто невозможно.
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Dimmel, а я 2-3 дня потратил на то, чтобы перепахать все то, что надекомпилил GothicSourcer, собрал всех нпц одной гильдии в соответствующие файлы, все предметы разделил на декларацию предмета и их функции (при надевании и тд.), сделал базовые файлы...короче теперь более менее удобно, можно в любой момент сделать функцию какую тебе нужно и засунуть ее гарантированно в список без проблем...

вот список:

_Intern\Constants.d
_Intern\Classes.d
_Intern\Focus.d
_Intern\Species.d
_Intern\AI_Constants.d
_Intern\XP_Constants.d
_Intern\Text.d
_Intern\Vars.d
_Intern\Npc_Globals.d
_Intern\SVM.d
AI\Human\Guilds.d
Items\IT_Amulette.d
Items\IT_Written.d
Items\IT_Melee_weapons.d
Items\IT_Addon_BeliarWeapons.d
Items\IT_Belts.d
Items\IT_Food.d
Items\IT_Plants.d
Items\IT_Potions.d
Items\IT_Misk.d
Items\IT_Keys.d
Items\IT_Secrets.d
Items\IT_Ringe.d
Items\IT_Scrolls.d
Items\IT_Runes.d
Items\IT_AnimalTrophy.d
Items\IT_Ranged_weapons.d
Items\IT_StonePlates.d
Items\IT_Armour.d
Items\IT_MissionItems.d
AI\Human\TA.d
Story\NPC_Scripts\Npc_Default.d
AI\AI_Intern\PrintDebug.d
Story\NPC\B_InitNpc_fn.d
Story\NPC\PC_HERO.d
Story\NPC\XOR.d
Story\NPC\HUN.d
Story\NPC\TPL.d
Story\NPC\XBS.d
Story\NPC\NONE.d
Story\NPC\SEK.d
Story\NPC\KDW.d
Story\NPC\KDF.d
Story\NPC\STRF.d
Story\NPC\MIL.d
Story\NPC\BAU.d
Story\NPC\SLD.d
Story\NPC\DJG.d
Story\NPC\PIR.d
Story\NPC\BDT.d
Story\NPC\DMT.d
Story\NPC\VLK.d
Story\NPC\PAL.d
Story\NPC\Monster\B_SetVisuals.d
Story\NPC\Monster\B_SetVisuals_Lesser_Skeleton.d
Story\NPC\Monster\b_setvisuals_skeleton_knight.d
Story\NPC\Monster\b_setvisuals_orc.d
Story\NPC\Monster\MST_Common.d
Story\NPC\Monster\MST_Undead.d
Story\NPC\Monster\MST_Golem.d
Story\NPC\Monster\MST_Gobbo.d
Story\NPC\Monster\MST_Dragon.d
Story\NPC\Monster\MST_Orc.d
Story\Dialoge\Common\DIA_Common.d
_misk_\BitMask.d
Story\B_Story\B_GetLearnCostTalent.d
Story\B_Story\B_GetLearnCostAttribute.d
Story\B_Story\B_BuildLearnString.d
Story\B_Story\b_formnumberstring.d
Story\B_Story\b_movetimeahead.d
_misk_\print_percent_bar.d
Story\B_Story\B_GiveDeathInv.d
Story\B_GiveTradeInv\B_ClearRuneInv.d
Story\B_GiveTradeInv\B_ClearJunkTradeInv.d
Story\B_Story\b_checkguildroom.d
_misk_\C_Functions_core.d
_misk_\B_Functions_core.d

AI\Monster\B_Monster\B_InitMonsterAttitudes.d
Story\Log_Entries\B_CheckLog.d
AI\AI_Intern\Perception.d
_misk_\B_Functions_core2.d
Story\B_Story\B_InitGuildAttitudes.d
Story\B_Story\B_RaiseAttribute.d
Story\B_Story\B_GivePlayerXP.d
_misk_\C_Functions.d
_misk_\B_Functions.d

AI\Human\B_Human\B_Human.d
Story\B_Story\b_beginnewshedule.d
Story\B_Story\b_bigfight_moveorcstohumans.d
Story\B_Story\b_bigfight_moveorcsonposition.d
Story\B_Story\b_paladinattackcastle.d
Story\B_Story\b_gatherallonbigfarm.d
Story\B_Story\b_enter_abandonedmine_kapitel_1.d
Story\B_Story\B_Enter_AddonWorld.d
Story\B_Story\b_enter_deadgrot_kapitel_1.d
Story\B_Story\b_enter_demoncave_kapitel_1.d
Story\B_Story\b_enter_demonstower_kapitel_1.d
Story\B_Story\b_enter_firecave_kapitel_1.d
Story\B_Story\b_enter_freemine_kapitel_1.d
Story\B_Story\b_enter_freeminelager_kapitel_1.d
Story\B_Story\b_enter_guardianchambers_kapitel_1.d
Story\B_Story\b_enter_haradrimarena_kapitel_1.d
Story\B_Story\b_enter_lostisland_kapitel_1.d
Story\B_Story\B_Enter_NewWorld.d
Story\B_Story\b_enter_oldmine_kapitel_1.d
Story\B_Story\B_Enter_OldWorld.d
Story\B_Story\b_enter_orccity_kapitel_1.d
Story\B_Story\b_enter_orcgraveyard_kapitel_1.d
Story\B_Story\b_enter_orctempel_kapitel_1.d
Story\B_Story\b_enter_paladinfort_kapitel_1.d
Story\B_Story\b_enter_psicamp_kapitel_1.d
Story\B_Story\b_enter_secretisland_kapitel_1.d
Story\B_Story\b_enter_shvalley_kapitel_1.d
Story\B_Story\b_enter_undeadzone_kapitel_1.d
Story\B_Story\B_Kapitelwechsel.d
Story\B_Story\b_enter_dragonisland.d
Story\B_Content\B_RangerMeeting.d
Story\G_Functions\G_CanNot.d
Story\G_Functions\G_PickLock.d
_misk_\B_Beliars_weapon.d
Story\B_Content\B_ProcessAdditionalDamage.d
Story\B_Story\B_LoadGameHook.d
AI\Human\B_Human\B_Say.d
Items\IT_Amulette_fn.d
Items\IT_Written_fn.d
Items\IT_Melee_weapons_fn.d
Items\IT_Belts_fn.d
Items\IT_Food_fn.d
Items\IT_Plants_fn.d
Items\IT_Potions_fn.d
Items\IT_Misk_fn.d
Items\IT_Secrets_fn.d
Items\IT_Ringe_fn.d
Items\IT_StonePlates_fn.d
Items\IT_Armour_fn.d
Items\IT_MissionItems_fn.d

AI\Human\B_Human\B_Attack.d
...
далее идет все как обычно...

C_Functions_core.d - базовые condition функции.
B_Functions_core.d - базовые функции.
C_Functions.d - condition функции.
B_Functions.d - вспомогательные функции (для функций диалогов, событий, ZS_xxx итд)
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
maggi1221,
Если я ничего не забыл, разговор шел не о том, что и как у кого сделано, а о работе соурсера и планах по его дальнейшему развитию. :)
можно в любой момент сделать функцию какую тебе нужно и засунуть ее гарантированно в список без проблем...
сделать и засунуть можно, вопрос в том, как это будет в игре. Замечено, что некоторые косяки имеют эффект мины замедленного действия - сразу все шоколадно, а возвращаешься из Миненталя - висяк, а причина - хз.
Пока мы имеем структуру файлов предложенную Соурсером, и Соурсер будет собирать их обратно. И вот надо или научить его сделать это более красиво и правильно, или не учить его по причинам...невозможности, сложности и т.д.То что каждый для себя делает со структурой скриптов и как - это его проблемы и умения/желания. Изначально мы имеем скрипты оригинала Г2а декомпилированные Соурсером. *flowers*
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
maggi1221, слушай, так это... Запили тогда попутно чтобы можно было определять "встроенные функции" тоесть.
Создал я на г2ексте функцию Npc_SetAsPlayer(var C_NPC), но сорсером ее ессно не скомпилить, тк она не где не объявляется, вот мне и нужно, чтобы можно было брать объявление встроенных функций из какогонить файла типа Externals.d.
Как идея?
 

clumb

Участник форума
Регистрация
21 Июн 2010
Сообщения
302
Благодарности
13
Баллы
180
У меня появилась одна интереснейшая проблема, некоторые скрипты, а точнее их содержимое превратилось в такое нечто!
Код:
iЗixЗiаЗiHИi°ИiЙiЂЙiиЙiPКiёКi Лi€ЛiрЛiXМiАМi(НiђНiшНi`ОiИОi0Пi˜ПiРipРiШРi@СiЁСiТixТiаТiHУi°УiФiЂФiиФiPХiёХi Цi€ЦiрЦiXЧiАЧi(ШiђШiшШi`ЩiИЩi0Ъi˜Ъi
Подскажите как это убрать.
 

Ur-tRall

Участник форума
Регистрация
16 Май 2009
Сообщения
4.102
Благодарности
2.122
Баллы
475
А никто не подскажет ссылку на руководство по ошибкам Готик Соусера? А то они лежат на старом домене этого сайта и их не открыть. Сам столкнулся с одной ошибкой при компилировании 35.
 

xterm

Участник форума
Регистрация
25 Июн 2009
Сообщения
5.177
Благодарности
16
Баллы
400
А никто не подскажет ссылку на руководство по ошибкам Готик Соусера? А то они лежат на старом домене этого сайта и их не открыть. Сам столкнулся с одной ошибкой при компилировании 35.

\GothicSourcer V3.14\GothicSourcer\errors_ru.doc
Тут посмотри. Но про ошибку 35 там ничего нет по-моему.
 

Ur-tRall

Участник форума
Регистрация
16 Май 2009
Сообщения
4.102
Благодарности
2.122
Баллы
475
\GothicSourcer V3.14\GothicSourcer\errors_ru.doc
Тут посмотри. Но про ошибку 35 там ничего нет по-моему.
Соусер у меня версии 3.13. Про ошибку такую не нашёл в соседних документах. Пишет переопределённый идентификатор: TOPIC_OUTTEACHER. Хотя я слышал, что из-за разных версий возникают ошибки, до этого я кажется работал в 3.14.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Ur-tRall,
Соусер у меня версии 3.13. Про ошибку такую не нашёл в соседних документах.
Последняя версия 3.14 используй ее, ибо с 3.13 есть гарантия нарваться на кучу подарков в виде исчезновения целых кусков кода из файлов при компилляции и декомпилляции.
Сурсер качаем отсюда (первый линк): https://worldofplayers.ru/node/565


Пишет переопределённый идентификатор: TOPIC_OUTTEACHER.
Это означает что данная переменная уже где-то используется ранее, и была прописана/декларирована повторно, ищем ее дубликат и удаляем его в своем проекте.

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

Руководство здесь: https://worldofplayers.ru/node/568

Зы, При переходе на версию 3.14 проверь(точнее сверь, его с немецким оригиналаом) последний файл который прописан в срц, на целостность кода, ибо из него выпиливались куски кода, если я правильно помню.
 

Жан-Жак Грущу

Участник форума
Регистрация
8 Авг 2012
Сообщения
55
Благодарности
4
Баллы
155
Проблема следующего характера.
Сижу я значит, перевожу скрипты gothic.dat, не декомпилируя предварительно, всё идет успешно. Переодически, кстати, делаю резервные копии, потому что практически всегда, когда я пытаюсь напечатать точку, программа завершает свою работу. Но и не в этом вся проблема! А в том, что когда я сохранил датник и перезагрузил комп, и открыл этот датник, чтобы продолжить перевод - что я увидел? Одну, сплошную строку NUL, и больше ничего. Как бы, вообще ничего. При том, что файл весит столько же, сколько и его копии, выполненные часами ранее. Я в ужасе - 6 часов перевода коту под хвост? Что делать, помогите... *???*
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Жан-Жак Грущу,
Сижу я значит, перевожу скрипты gothic.dat, не декомпилируя предварительно, всё идет успешно.
Не декомпилируя? Т.е. ты просто открыл Gothic.dat в сорсере вместо декомпилированного скрипта?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Жан-Жак Грущу, Научится правильно работать со скриптами их компиляцией и декомпиляцией. Если не можешь сам попроси других, может кто поможет.
Всю справку по работе с Сурсером смотри на сайте моды модостроение, или в корне установленной программы файлы Ридми и т.д.

Зы, Перевод может осуществляется только в файлах с расширением *.d, т.е. декомпилированных.
 

Жан-Жак Грущу

Участник форума
Регистрация
8 Авг 2012
Сообщения
55
Благодарности
4
Баллы
155
Когда захочу, тогда и декомпилирую, в чем проблема? Мод над каторым я работаю не поддаеться декомпиляции на соусе, а спейсер я сейчас не хочу устанавливать. Где смотреть статьи по скриптологии и возможные ошибки я знаю. Кстати, моей ошибки нет ни в редми, ни на сайте.
Конкретный ответ на конкретный вопрос того, как это случилось и возможен ли факт восстановления кто-нибудь может дать?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Жан-Жак Грущу, Проблема в том что кто-то не внимательно читает что ему пишут.
Со всеми вопросами по компиляции/декомпиляции скриптов пишем в тему скриптов.
Здесь обсуждается только программа и ее работа.
 

Жан-Жак Грущу

Участник форума
Регистрация
8 Авг 2012
Сообщения
55
Благодарности
4
Баллы
155
MaGoth, А я и обсуждаю здесь только программу и её работу. Я обсуждал написание скриптов? Я жаловался, почему такая-сякая программа не хочет декомпелировать мод? Нет! Я спросил как решить проблему восстановления файла, сохранение которого реализует данная программа. В данном случее сохранение произошло неккоректно, либо произошло нечто иное. Поэтому я спрашиваю (в особенности это касаеться авторов программы), в чем проблема?

И да, Вы правы, проблема именно в том, что вы сказали. Я не хочу вступать в распри с администрацией, но если вам нечего сказать по существу, лучше промолчать, не? Политика на форуме именно такая.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Жан-Жак Грущу,
1. Я тебе уже писал раньше в своих ответах: что скрипты этого мода Сурсером декомпилировать нельзя. Что из этого тебе непонятно?
2. Будешь продолжать флудить в теме по этому поводу последуют банные процедуры. Коли тебе лень читать, мне лень отвечать по десять раз.

Вопрос закрыт.
 
Сверху Снизу