Home Risen Risen2 Forum English Russian

Registrieren Hilfe Kalender Heutige Beiträge
Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 36
  1. #1 Zitieren
    Mod-Starter Project  Avatar von LordOfWAR
    Registriert seit
    Mar 2008
    Ort
    Ukraine
    Beiträge
    3.981
    Nico Bendlin, которого все мы знаем как NicoDE, опубликовал 1 октября все свои наработки за прошедший год с дня релиза Risen .

    Тема на форуме модификаций (англ) - [release] RisenSDK.

    Чтобы обяснить что это такое, пожалуйста, прочтите полный текст описания который идет ниже :

    Code:
    
                                От коммюнити, не полный
                           Software Development Kit для Risen
                            Version 1.0.96124.0 (Patch 1.10)
    
    1. Лицензия
    ~~~~~~~~~~
    
      В общем, RisenSDK распостраняется под лицензией - Creative Commons BY-NC-SA 3.0
      (за более детальной информацией, посетите - http://creativecommons.org/licenses/by-nc-sa/3.0/).
      Все остальные имена, которые использовались в SDK пренадлежат их владельцам.
    
      RisenSDK - это полностью независимый проект и если не считать самой игры - не имеет
      никакого отношения к разработчикам Piranha Bytes или издателю Deep Silver.
      Пожалуйста, не обращайтесь к ним за помощю или поддержкой по данному SDK.
      Они не сделали никакого вклада (не сделали ничего) чтобы он появился.
    
    2. Предисловие
    ~~~~~~~~~~
    
        Игрок: Как мне попасть в замок?
        Охранник: Тебе нельзя. Только люди Гомеза могут туда попасть.
        Игрок: Хорошо.
    
      Этот SDK предназначен только для разработчиков ПО с большим опытом в C++
      и обратной разработке/реинжинирингу (reverse engineering) (Microsoft Visual
      C++ бинарные программы в частности).
      Без этого опыта, рано или поздно вы скорее всего потеряетесь в коде.
    
      Идея этого проекта лежит в использовании экспортированых класов, функций
      и данных библиотек движка Genome, чтобы улучшить Risen и сделать возможным
      создание своих программ или плагинов.
      Из-за нескольких причин (распределение памяти и т.п.) мы привязаны к
      использованию такого-же компилятора, который использовали Piranha Bytes
      при создании Risen (Visual C++ 2005 SP1).
      К счастью, бесплатный Visual C++ 2005 Express Edition ISO-образ еще можно
      скачать с сайта Microsoft (ищите в google - "0434C5AF-8FB5-4D64-B8D8-E9BDF3C83152").
      Также необходимый - "Windows Server 2003 R2 Platform SDK" (заменен на
      Windows SDK, но в новых SDK не включены ATL/MFC заголовки) можно добавить
      к среде разработки бесплатно.
    
      Чтобы корректно обрабатывать экспортированые данные и функции, мне пришлось
      разработать утилиту для создания импортируемых библиотек, которые можно найти
      в папке "\lib" каталога SDK. Эта программа не является частью данного проекта
      (но я думаю что это не будет проблемой, она работает и никаких изменений пока
      не предвидится).
    
      Для вашего собственного исследования кода, вы можете попробовать сами убрать
      защитную Solidshield-обгортку файлов программы (bin/Risen.exe) и защищенных
      библиотек (bin/Engine.dll, bin/Game.dll и bin/scripts/Script_Game.dll) чтобы
      иметь возможность анализировать статический (непосредственно) код.
      Не будем тратить время, файлы со снятой защитой не будут опубликованы из-за
      понятных причин.
    
    3. Загрузка
    ~~~~~~~~~~
    
        Игрок: Мне нужно попасть в замок!
                У меня есть письмо для высшего мага огня.
        Охранник: И ты ожидаешь что я тебя пропущу в замок
                чтобы ты отдал послание и забрал свою награду?
        Игрок: Конечно.
    
      Найти SDK можно в репозитарии SVN (Subversion repository)
      по адресу svn://nicode.net/risensdk/trunk/ (структура файлов
      такая-же как и в папке Risen после установки).
      Чтобы иметь возможность редактировать исходники (права на запись), вам нужен
      логин и пароль (если кто захочет такой доступ - отправтье мне запрос на email).
    
      Чтобы просто просмотреть репозитарий SVN (в этом случае - RisenSDK), вы можете
      использовать обычный интернет браузер, для этого перейдите по следующей ссылке :
    
                                      http://svn.nicode.net/risensdk/trunk/
    
    4. Игра
    ~~~~~~~~~~
    
        Ксардас: КТО СМЕЕТ БЕСПОКОИТЬ МЕНЯ В МОИХ ИССЛЕДОВАНИЯХ?
        Игрок: Меня зовут...
        Ксардас: Я не желаю знать твоего имени. Это не имеет никакого значения.
                Важно то, что ты первый кто за долгие годы смог разгадать тайну
                моих Големов.
    
      Как вы уже заметили, RisenSDK находится еще на очень раннем этапе. Экспорт
      библиотеки - SharedBase.dll завершен, но исходный код еще полон ошибок и 
      заданий на будущее (еще много надо доделать).
      Ожидаемым есть нахождение многих проблем и багов в шаблоне классов (разработан
      очень приблизительно, коечто надо переписать) и почти все параметры идут без
      имен. Причина очень проста - нехватает времени. Большинство кода было написано
      за две недели. Библиотека - SharedBase.dll была наиболее легкой частью.
      Понадобится куда больше времени чтобы добавить поддержку "foundation" (FF) и
      "framework" (FX) модулей. Виртуальное наследование является хорошей особенностью
      для интерфейсов, которые должны изменяться за жизненный цикл продукта.
      Но это далеко не весело анализировать специальный код (thunks) и
      методы доступа к памяти, с отрицательными смещениями (negative offsets).
    
      Чтобы ваш новый код подгрузился в движок игры, вам нужно создать "скриптовую"
      библиотеку, со следующем названием - /bin/scripts/Script_*.dll - посмотрите
      пример такого проекта в SDK - /source/Scripts/Script_Library (добавление
      новой консольной команды).
    
    5. Окончание
    ~~~~~~~~~~
    
        Шакал: Эй, смотри кого пытаешся обмануть!
                Возвращайся когда будет руда!
    
      Этот проект пока относительно слишком маленький и появился слишком поздно чтобы
      быть действительно полезным для Risen.
      Но если Piranha Bytes будут использовать части того-же движка Genome для
      следующего проекта, это значительно ускорит процесс разработки программ, утилит
      и плагинов от комюнити для Risen 2.
    
      Длинная история..., ну и Спасибо за Всю Рыбу !
      Nico Bendlin <nicode@gmx.net>
    ____________________

    @NicoDE - Thanks you very much for all what you are doing for supporting modding community

    __

    У нас сейчас существует несколько тем для обсуждения вопросов моддинга, но я думаю что все что связано с SDK - давайте оставлять/обсуждать именно в этой, отдельной теме .
    #Stand With Ukraine
    LordOfWAR ist offline

  2. #2 Zitieren
    Krieger Avatar von Pateytos
    Registriert seit
    Mar 2010
    Ort
    Russia
    Beiträge
    448
    Это очень и очень авесомно!
    Значит, пусть даже сейчас SDK и сырой, но всё таки есть шанс делать глобальные моды для Risen!

    NicoDE, просто нет слов...
    Трудился, не жалея клавы О_О.

    Спасибо тебе!
    Pateytos ist offline

  3. #3 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    Спасибо, Нико и поздравляю с релизом

    Уже немного посмотрел исходники и появилось несколько вопросов:
    1. По назначению импортируемых классов. Пытался понять назначение по набору предоставляемых методов.
    Итак:
    eCScriptProxy - класс менеджера для управления скриптами
    gCScriptProxyAIFunction - класс менеджера для управления AI-скриптами
    gCScriptProcessingUnit - класс функций для обработки кода скриптов.

    Насколько верны мои предположения?

    Еще бы несколько слов о принятой нотации в коде. То есть пояснения для некоторых префиксов. Читать код полегче бы было

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

    3. Вроде нашел фрагмент кода чтение бинарного файла и экспорта данных.
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    //получаем файл бинарника по имени: путь_до_бинарного_файла + имя_бинарного_файла + расширение_бинарного_файла
     eCArchiveFile ArchiveFile = eCArchiveManager::GetInstance().GetFile( Config.m_strBinaryPath + Config.m_strBinaryName + Config.m_strBinaryExt );
    if( ArchiveFile.Open( eCArchiveFile::bEArchiveFileAccessMode_Read, GETrue ) )
    {
      GEU32 u32Token = 0;
      GEU8 u8Version = 0;
      GEU32 u32Count = 0;
      ArchiveFile >> u32Token;
      ArchiveFile >> u8Version;
      ArchiveFile >> u32Count;
    
       if( (0x31303056 == u32Token) && (0x01 == u8Version) && (arrDocuments.GetCount() == static_cast< GEInt >( u32Count )) )
      {
         for( bTRefPropertyArray< eCDocObject * >::bCConstIterator pDocument = arrDocuments.Begin(); pDocument != arrDocuments.End(); ++pDocument )
       {
         SFFFileTime FileTime;
         bCString strFileName;
         ArchiveFile >> FileTime.m_FileTime.dwHighDateTime;
         ArchiveFile >> FileTime.m_FileTime.dwLowDateTime;
         ArchiveFile >> strFileName;
         {
           bCString strRawFilePath = (*pDocument)->GetRawFilePath();
           if( eCVirtualFileSystem::GetInstance().MakeAbsPhysicalPath(strRawFilePath ) && !strRawFilePath.IsEmpty() )
           {
              FFLPVoid hFile = g_FFCreateFile( strRawFilePath, EFFFileCreate_OpenExisting, EFFFileAccess_Write, 0, 0, 0 );
              if( g_FFIsValidFileHandle( hFile ) )
              {
                  g_FFSetFileTime( hFile, &FileTime, &FileTime, &FileTime );
                  g_FFCloseFile( hFile );
              }
           }
         }
       }
    
      }
    }

    Это весь код для чтения бинарного файла и экспорта данных?

    4. Не понял, где именно регистрируется новая функция, чтобы в консоли появилась новая команда...
    Я так понимаю новая функция добавляется вот этой строчкой:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    s_ScriptFunctions.m_arrScripts.Add( gSScript( "CON_library", __FILE__, CON_library ) );
    Digan ist offline Geändert von Digan (02.10.2010 um 21:26 Uhr)

  4. #4 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.410
    Zitat Zitat von Digan Beitrag anzeigen
    По назначению импортируемых классов. Пытался понять назначение по набору предоставляемых методов.
    Итак:
    eCScriptProxy - класс менеджера для управления скриптами
    gCScriptProxyAIFunction - класс менеджера для управления AI-скриптами
    gCScriptProcessingUnit - класс функций для обработки кода скриптов.
    The purpose of a "proxy" is to resolve and/or encapsulate functionality, and sometimes to resolve (circular) references.
    In this case Proxy classes resolve a name (string) to a script function and vis versa (e.g. to store script references in persistent data (content and savegame)).

    The gCScriptProcessingUnit (short SPU) is something like the "script context" that is passed to the script functions (includes "self", "other", and many other script states, times, references, ...).

    Zitat Zitat von Digan Beitrag anzeigen
    Еще бы несколько слов о принятой нотации в коде. То есть пояснения для некоторых префиксов. Читать код полегче бы было
    From my memory:
    (<Prefix>|<Module>)<Type><Identifier>
    Prefix: a_ = argument (parameter), m_ = member, ms_ = static member
    Module: a = application, b = (shared)base, e = engine, g = game, i = importer | GE = Genome, FF = foundation, FX = framework, ...
    Type: C = class, E = enumeration, S = structure, T = template | b = bool, i = int, pc = char pointer, str = bCString, u32 = unsigned long, ...

    Zitat Zitat von Digan Beitrag anzeigen
    Структура eSDocArchiveConfig служит для задания абсолютный путь до бинарного файла, названия бинарного файла, расширения бинарного файла и для задания пути для экспорта данных из бинарного файла.
    Yes, eSDocArchiveConfig is just a structure to configure/initialize an eCDocArchive class object.

    Zitat Zitat von Digan Beitrag anzeigen
    Вроде нашел фрагмент кода чтение бинарного файла и экспорта данных.
    This is just a workaround for a missing feature of eCDocArchive.ExportRaw(). The timestamps are not set by the engine code. But this results in rebuilding the bin (even if the content is identical, because the timestamps are checked). So I was forced to implement this feature - (like the eCDocArchive) I open the file with the help of the eCArchiveFile class, read the signature and the array with names and timestamps, and use them to fix the timestamps.

    See this older documentation for file format details:
    [spec][genomfle] Risen Archive file format
    eCDocArchive::CHeader persistance

    Zitat Zitat von Digan Beitrag anzeigen
    Это весь код для чтения бинарного файла и экспорта данных?
    Yes and no. It just (manually) reads the bTObjArray<eCDocArchive::CHeader>. I could have implemented both streaming operators.

    Zitat Zitat von Digan Beitrag anzeigen
    Не понял, где именно регистрируется новая функция, чтобы в консоли появилась новая команда...
    I mentioned the script library interface a while ago here: http://forum.worldofplayers.de/forum...3#post11426573
    Console commands are "registered" with a naming convention CON_<command>. That is all you have to do (well, you should also write some code ).
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    NicoDE ist offline Geändert von NicoDE (03.10.2010 um 21:16 Uhr)

  5. #5 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    Перевод ответа Нико:
    Цель "прокси" состоит в том, чтобы разрешить и/или скрыть реализацию функциональности, и иногда разрешать ссылки.
    В этом случае Прокси-классы разрешают имя (строку) к функции скрипта и наоборот (например, чтобы сохранить ссылки скрипта в персистентных данных (таких как контент и сохранения игр)). gCScriptProcessingUnit (сокращенно SPU) является чем-то вроде "контекста скрипта", который передается к функциям скрипта (включая "сам", "другой", и много других состояний скрипта, время, ссылки...).
    Насколько помню:
    (<Префикс>|<Модуль>)<Тип><Идентификатор>
    Префикс: a_ = аргумент (параметр), m_ = элемент, ms_ = статический элемент
    Модуль: a = приложение, b = (общая)база, e = движок, g = игра, i = средство импорта | GE = Геном, FF = основа, FX = платформа, ...
    Тип: C = класс, E = перечисление, S = структура, T = шаблон | b = логический тип данных, i = целый тип данных, pc = указатель на символьный тип данных, str = тип bCString, u32 = тип unsigned long, ...
    Да, eSDocArchiveConfig - только структура, чтобы конфигурировать/инициализировать объект класса eCDocArchive .
    Это - только обходное решение для недостающей возможности eCDocArchive. ExportRaw (). Метки времени не установлены кодом движка. Но это приводит к перестроению бинарных файлов (даже если контент идентичен, потому что метки времени проверены). Таким образом, я был вынужден реализовать эту возможность - (как eCDocArchive) я открываю файл с помощью класса eCArchiveFile, читаю подпись и массив с именами и метками времени, и использую их, чтобы фиксировать метки времени. Смотрите более старую документацию для подробностей о формате файла:
    [spec][genomfle] Формат архивного файла Risen
    eCDocArchive::CHeader persistance
    Да и нет. Это только (вручную) читает bTObjArray <eCDocArchive:: CHeader>. Я, возможно, реализовал оба потоковых оператора.
    Я упоминал интерфейс библиотеки скриптов только что здесь: http://forum.worldofplayers.de/forum...3#post11426573
    Консольные команды "регистрируются" согласно имени CON_<имя_команды>. Это - все, что Вы должны сделать (хорошо если напишите еще какой-нибудь код ).
    Digan ist offline Geändert von Digan (25.10.2010 um 15:29 Uhr)

  6. #6 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    Hi, Nico
    Almost all of the functions of Script_Game.dll have a parameter - a reference to gCScriptProcessingUnit.
    This is similar to using Lua, where each function has a parameter - a reference to lua_State.

    Can please you tell me - in which files there is Risen(game) -scripts?

    Where remaining functions are called? (Except CON_* functions which are called from the console)

    Script_Game.dll contains functions used by the game scripts?

    For example lua link to library and uses its functions so:
    Code:
    package.cpath = './MyScripts.dll'
    
    require 'MyScriptFunctions'
    
    MyScriptFunctions.run()
    I know that Risen uses not Lua. Interesting as similar it is arranged in scripts of Risen
    Digan ist offline Geändert von Digan (24.10.2010 um 13:39 Uhr)

  7. #7 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.410
    Due to very limited spare time, I did not any research for the "scripting" interface/logic. Therefore I cannot answer your questions, sorry.

    There are several points in the game where script functions are called...

    One of them are the quests. Searching for QuestScript="[^"] in all data\raw\quests\*.xqst you will find 56 non-empty SucceededQuestScript properties. E.g. in Alvaro_Cellar.xqst the script function OnQuestSuccess_ChangeRoutineAlvaro is referenced. The function gets the entity named "Alvaro", sets the routine "Nightwatch", and calls FullStop + ContinueRoutine.

    Another source are the infos. Searching for Script" in all data\raw\infos\*.xinf you will find many gCInfoCommandAddInfoSystemEndScript, gCInfoCommandRunAIScript, gCInfoCommandRunScript, and gCInfoConditionScript entries.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    NicoDE ist offline

  8. #8 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    Zitat Zitat von NicoDE Beitrag anzeigen
    Due to very limited spare time, I did not any research for the "scripting" interface/logic. Therefore I cannot answer your questions, sorry.

    There are several points in the game where script functions are called...

    One of them are the quests. Searching for QuestScript="[^"] in all data\raw\quests\*.xqst you will find 56 non-empty SucceededQuestScript properties. E.g. in Alvaro_Cellar.xqst the script function OnQuestSuccess_ChangeRoutineAlvaro is referenced. The function gets the entity named "Alvaro", sets the routine "Nightwatch", and calls FullStop + ContinueRoutine.

    Another source are the infos. Searching for Script" in all data\raw\infos\*.xinf you will find many gCInfoCommandAddInfoSystemEndScript, gCInfoCommandRunAIScript, gCInfoCommandRunScript, and gCInfoConditionScript entries.
    Перевод:
    Из-за очень ограниченного свободного времени, я не сделал никакого исследования интерфейса/логики "скриптов". Поэтому я не могу ответить на Ваши вопросы, извините.

    Есть несколько точек в игре, где вызываются функции скриптов...

    Одна из таких точек - квесты. Поискав строчки QuestScript = "[^"] во всех файлах data\raw\quests\*.xqst Вы найдете 56 непустых свойств SucceededQuestScript. Например, в файле Alvaro_Cellar.xqst это свойство имеет значение имени скриптовой функции OnQuestSuccess_ChangeRoutineAlvaro. Функция получает объект, который называется "Alvaro", устанавливает действие "Nightwatch", и вызывает функции FullStop + ContinueRoutine.

    Другой источник - infos. Поискав строчки Script" во всех файлах data\raw\infos\*.xinf Вы найдете множество записей gCInfoCommandAddInfoSystemEndScript, gCInfoCommandRunAIScript, gCInfoCommandRunScript, and gCInfoConditionScript

    Thanks, Nico
    I have found some properties in xqst files.
    For example in Alvaro_Cellar.xqst:
    Code:
    CancelledQuestScript=""
    FailedQuestScript=""
    LostQuestScript=""
    ObsoleteQuestScript=""
    RunningQuestScript=""
    SucceededQuestScript="OnQuestSuccess_ChangeRoutineAlvaro"
    Value has only property SucceededQuestScript.
    Function OnQuestSuccess_ChangeRoutineAlvaro in Script_Game.dll looks so:
    Code:
    OnQuestSuccess_ChangeRoutineAlvaro(gCScriptProcessingUnit *,void *,void *,int)
    Will it work if write Script_ *. dll with own function and called her in xqst?
    Digan ist offline Geändert von Digan (26.10.2010 um 14:12 Uhr)

  9. #9 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.410
    Zitat Zitat von Digan Beitrag anzeigen
    Will it work if write Script_ *. dll with own function and called her in xqst?
    Yes, it will work.
    Make sure you add it in the right (last) list.

    I dumped the list of all Script_Game functions/callbacks and attached it to this posting:
    http://forum.worldofplayers.de/forum...php?p=13509836
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    NicoDE ist offline

  10. #10 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    Zitat Zitat von NicoDE Beitrag anzeigen
    Yes, it will work.
    Make sure you add it in the right (last) list.

    I dumped the list of all Script_Game functions/callbacks and attached it to this posting:
    http://forum.worldofplayers.de/forum...php?p=13509836
    Перевод:
    Да, это будет работать.
    Убедитесь, что вы добавляете это в правый (последний) список.

    Я вывел список всех Script_Game функций/функций обратного вызова и присоединил к этому посту:
    http://forum.worldofplayers.de/forum...php?p=13509836
    Many thanks!
    Code:
    SelectWeapon (c:\Project\platform\pc\source\Scripts\Script_Game\Script\Ai\AI_Tasks\Reaction_Tasks\ZS_Attack.cpp)
    It means, what Risen uses as scripting language - C++?
    I thought for scripts the high-level language was used more...
    Digan ist offline

  11. #11 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.410
    Zitat Zitat von Digan Beitrag anzeigen
    It means, what Risen uses as scripting language - C++?
    Yes, you got it right. There is no interpreted/intermediate scripting language. It’s native x86 assembly generated from C++ code. It is very likely that the "scripters" use macros and/or templates to write the "script" functions. That is the reason why the bin\Script.dll exists - it wraps the access to the engine/game classes in simple functions/classes.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    NicoDE ist offline

  12. #12 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    I want to try to add a new item. Item is a copy of an existing Item (uses lrenter), but with a different content. How to generate a new GUID?
    And how to use own tple file with this item?
    Probably the name of a item (except lrent) needs to be added somewhere still...
    Digan ist offline Geändert von Digan (30.10.2010 um 20:36 Uhr)

  13. #13 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.410
    Zitat Zitat von Digan Beitrag anzeigen
    How to generate a new GUID?
    bCGuid::Generate() uses g_CoCreateGuid() and this one calls CoCreateGuid().
    In short, it is random.

    I cannot answer rest of the questions, because I do not care about the file format and game data logic (yet). My approach is very generic and it will take time to achieve practicable methods.

    You should ask Shak-otay and/or Baltram. Their work is more practical.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    NicoDE ist offline

  14. #14 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    There was still a question on project settings in Visual Studio.
    Project Scripts_Library is building without problems.
    In the same solution has added the new project and has adjusted properties as Scripts_Library.
    Code:
    Output Directory: ..\..\..\bin\scripts
    Intermediate Directory: ..\..\..\build\$(ConfigurationName)\$(ProjectName)
    Configuration Type: Dinamic Library(.dll)
    Character Set: Use Multi-Byte Character Set
    Additional Include Directory: ..\..\
    Preprocessor Definitions: WIN32;NDEBUG;_CONSOLE
    Calling Convention: __stdcall (/Gz)
    Ignore Import Library:  Yes
    Additional Dependencies: kernel32.lib $(NoInherit)
    Generate Manifest: No
    My including file is copy Script_Library.h file.
    Compile: without problems.
    Building:
    Problem in ScriptInit() function.
    Spoiler:(zum lesen bitte Text markieren)

    extern "C" __declspec( dllexport )
    gSScriptFunctions * GE_STDCALL ScriptInit( void )
    {
    #pragma warning( push )
    #pragma warning( disable : 4640 ) // construction of local static object is not thread-safe

    static gSScriptFunctions s_ScriptFunctions;

    #pragma warning( pop )

    s_ScriptFunctions.m_arrScriptAIStates.Clear();
    s_ScriptFunctions.m_arrScriptAIFunction.Clear();
    s_ScriptFunctions.m_arrScriptAICallbacks.Clear();
    s_ScriptFunctions.m_arrScripts.Clear();
    s_ScriptFunctions.m_arrScripts.Add( gSScript( "printMessage", __FILE__, printMessage ) );

    return &s_ScriptFunctions;
    }

    So:
    bCMemoryAdmin::Realloc()
    bCMemoryAdmin:: GetInstance()
    bCMemoryAdmin::Free()
    bCString::~bCString()
    bCString::bCString()
    bTArrayBase<struct gSScript>::New()

    But it is in SharedBase, which is in the solution...
    Digan ist offline Geändert von Digan (08.11.2010 um 12:51 Uhr)

  15. #15 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.410
    Zitat Zitat von Digan Beitrag anzeigen
    But it is in SharedBase, which is in the solution...
    I assume you forgot to edit the Project Dependencies...
    (else the SharedBase project and the included import library is not linked into your new project)
    You could manually link the resulting SharedBase object/library into your project. But specifying the project dependencies also manages the build order.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    NicoDE ist offline Geändert von NicoDE (31.10.2010 um 15:51 Uhr)

  16. #16 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    Zitat Zitat von NicoDE Beitrag anzeigen
    I assume you forgot to edit the Project Dependencies...
    (else the SharedBase project and the included import library is not linked into your new project)
    You could manually link the resulting SharedBase object/library into your project. But specifying the project dependencies also manages the build order.
    Many thanks. Set Project Dependencies and project builded
    How can I uses xqst files(edited) ? mountlist_packed.ini file exists, but game does not use xqst files. (Tried to change ExperiencePoints parameter)
    Digan ist offline

  17. #17 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.410
    Zitat Zitat von Digan Beitrag anzeigen
    mountlist_packed.ini file exists, but game does not use xqst files.
    Make sure all Root/NoXxx are set to false in the bin\mountlist_packed.ini.

    Test:
    • add bin\mountlist_packed.ini and enable physical files
    • install bin\scripts\Script_Library.dll
    • create output directory for raw quests: data\raw\quests
    • start Risen, enable devmode, open console, execute library export quests
    • close Risen
    • create output directory for compiled quests: data\compiled\library
    • edit data\raw\quests\Player_LookForSurvivers.xqst and change ExperiencePoints to 50
    • start Risen... the game will automatically detect the modification and will compile the quests into data\compiled\library\compiled_quests.bin

    Make sure you do not have other modified files in any other mounted directory (e.g. %LocalAppData%\Risen).
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Player_LookForSurvivers.png  
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    NicoDE ist offline

  18. #18 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    Thanks
    I wrote some simple functions.
    ---
    And tried to call them Neil_FindSword.xqst.

    Spoiler:(zum lesen bitte Text markieren)
    Code:
    <Document
    	ActivationTime_Day="0"
    	ActivationTime_Hour="0"
    	ActivationTime_Year="0"
    	CancelledQuestScript="CancelledQuest"
    	ClassName="gCQuest"
    	DestinationEntity="Object_Interact_Animated_Chest_Poor_Neil"
    	EndChapter="-1"
    	ExperiencePoints="50"
    	FailedQuestScript="FailedQuest"
    	GuideWalkMode="gEWalkMode_Run"
    	LocationInfo="gEInfoLocation_Main"
    	LogTopic="QUEST_HOGEX2_2008-10-07_14-06-35_00"
    	LostQuestScript="LostQuest"
    	ObsoleteQuestScript="ObsoleteQuest"
    	OverlayClient="map_overlay_client_default"
    	RunningQuestScript="RunningQuest"
    	RunningTimeDays="0"
    	RunningTimeHours="0"
    	RunningTimeYears="0"
    	Silent="False"
    	StartChapter="-1"
    	Status="gEQuestStatus_Open"
    	SucceededQuestScript="SucceededQuest"
    	Type="gEQuestType_Plunder"
    	WonQuestScript="WonQuest"
    	OverlayTarget="map_overlay_target_default"
    	>
    	<FinishedQuests>
    	</FinishedQuests>
    	<LogText>
    	</LogText>
    	<ModifySkillsSuccess>
    	</ModifySkillsSuccess>
    	<DeliveryEntities>
    		<Item>
    			<Value
    				Entity="It_1H_Sword"
    				Amount="1"
    			>
    			</Value>
    		</Item>
    	</DeliveryEntities>
    	<Actors>
    		<Item>
    			<Value
    				Actor="Neil"
    				ClassName="gCQuestActor"
    				ActorType="gEQuestActor_Client"
    			>
    			</Value>
    		</Item>
    		<Item>
    			<Value
    				Actor="Object_Interact_Animated_Chest_Poor_Neil"
    				ClassName="gCQuestActor"
    				ActorType="gEQuestActor_Target"
    			>
    			</Value>
    		</Item>
    	</Actors>
    </Document>

    It is still very simple, but it works
    Digan ist offline Geändert von Digan (07.11.2010 um 17:15 Uhr)

  19. #19 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.410
    Zitat Zitat von Digan Beitrag anzeigen
    It is still very simple, but it works
    Congratulations!

    Maybe you should start/help to wrap the exported Script.dll classes
    That would allow you to actually implement something useful in your functions.
    Currently I’m skiving off work and have no time to work on my spare time projects - but next week I will be back.
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    NicoDE ist offline Geändert von NicoDE (04.11.2010 um 10:47 Uhr)

  20. #20 Zitieren
    Ritter Avatar von Digan
    Registriert seit
    Oct 2009
    Ort
    Russian Federation
    Beiträge
    1.666
    I wrapped several classes of script.dll.

    For classes:
    Spoiler:(zum lesen bitte Text markieren)

    Achievement
    Effect
    EffectSystem
    Entity
    Focus
    GUI2
    InfComAttack
    InfComHeal
    InfComInfoWait
    InfComPickPocket
    InfComRunAIScript
    InfComSay
    InfComSayConfirm
    InfComSayHoldingPosition
    InfComSayKeepItUp
    InfComSaySVM
    InfComSaySound
    InfComSetSectorStatus
    InfComSleep
    InfComThink
    InfComUse
    InfoSystem
    Input
    Music
    ScriptActionTimer
    ScriptCommentManager
    ScriptDestinationCollector
    Template
    Tutorial
    World


    Also for several classes of Engine.dll
    Spoiler:(zum lesen bitte Text markieren)

    eCApplication
    eCEntity
    eCGeometryEntity
    eCTemplateEntityProxy

    And for several classes Game.dll
    Spoiler:(zum lesen bitte Text markieren)

    gCSession

    http://upload.worldofplayers.de/files5/Script_.rar
    Maybe will be useful

    Remained PS classes.
    Strange. PS classes not have a constructors / destructor ...

    Also I tried to write a common part of all scripts.
    Pseudocode from IDA:
    Spoiler:(zum lesen bitte Text markieren)

    Code:
      Entity__Entity(&v18);
      v4 = a_pSPU;
      if ( a_pSelfEntity )
      {
        Entity__operator_(&v18, a_pSelfEntity);
      }
      else
      {
        v5 = gCScriptProcessingUnit__GetSelfEntity(a_pSPU);
        Entity__AttachTo(&v18, v5);
      }
      Entity__Entity(&v17);
      if ( a_pOtherEntity )
      {
        Entity__operator_(&v17, a_pOtherEntity);
      }
      else
      {
        v6 = gCScriptProcessingUnit__GetOtherEntity(v4);
        Entity__AttachTo(&v17, v6);
      }

    I tried this to rewrite on in C++:
    Spoiler:(zum lesen bitte Text markieren)

    Code:
    Entity* selfEntity = new Entity();
    
    if(a_pSelfEntity)
    {
        selfEntity = (Entity *)a_pSelfEntity;
    }
    else
    {
        selfEntity->AttachTo(SPU->GetSelfEntity());
        fprintf(selfEntityFile,"selfEntity: %s",selfEntity->GetName());
    }
    
    Entity* otherEntity = new Entity();
    if(a_pOtherEntity)
    {
        otherEntity = (Entity *)a_pOtherEntity;
    }
    else
    {
        otherEntity->AttachTo(SPU->GetOtherEntity());
        fprintf(otherEntityFile,"otherEntity: %s",otherEntity->GetName());
    }

    After a text files contains:
    selfEntity: <invalid>
    otherEntity: <invalid>

    Also I wrote own script function.
    Code:
    GEInt GE_STDCALL SucceededQuest( gCScriptProcessingUnit * a_pSPU, GELPVoid a_pSelfEntity, GELPVoid a_pOtherEntity, GEInt a_iArgs )
    {
        GUI2* gui = new GUI2();
        gui->PlayVideo("Outro.bik",true);
        return 1;
    }
    It works

    GUI2 it class from Script.dll.
    Digan ist offline Geändert von Digan (07.11.2010 um 21:48 Uhr)

Seite 1 von 2 12 Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •