Saturas
Модостроитель
- Регистрация
- 11 Фев 2009
- Сообщения
- 2.512
- Благодарности
- 1.334
- Баллы
- 315
- Первое сообщение
- #1
Предыстория:
Дело было вечером, делать было нечего
Конец предыстории
Давно уже хотел сделать библиотеку, с новыми скриптовыми функциями для готики 2, но в силу лени, отсутствия нормального екста, не мог все это сделать, но теперь некоторые вещи изменились, у меня появилось время и нормальный екст, грубо говоря под словом нормальный, имеется в виду совсем другой екст, не тот что был в саге, и не тот что по первому запросу в гугле, исходники пока давать не буду, ибо там много наработок вама(привет Исходники готики а вот готовое расширение функционала готы есть.
И так поехали
Также в код вшита одна "Циклическая" функция Global_cycle достаточно, просто создать, функцию с именем Global_cycle и во время игры, эта функция будет непрерывно вызываться, из глобального цикла oCGame::Render()
Так же, для нее есть вспомогательная функция Ext_GetTimerTick() пример использования 2х функций сейчас я вам покажу:
И вот еще чуть не забыл, для того чтобы запустить игру с этими функциями, и тд
Нужно распаковать содержимое архива External.7z в папку с игрой(Gothic2\Externals)
Для запуска используем файл Start.bat (он запустит игру в оконном режиме!), если же вам нужно запустить игру в полный екран, запускать с файла - Inject.exe
Для компиляции скриптов, нужно использовать саму игру, с ключем -zreparse
а проще, запустить с файла Start_Compile.bat, немного его подредактировав, что конкретно редактировать показано ниже:
Для компиляции скриптов игрой, нужно поместить все ваши скрипты, в папки игры где должны лежать исходники скриптов:
_work\Data\Scripts\Content - в эту папку идут скрипты gothic.src и fight.src со всеми скриптами
_work\Data\Scripts\System - в эту папку идут скрипты, музыки и прочего
А вообще, советую Вам установить г2мдк со скриптами, и тогда все будет лежать на своих местах, ваша задача будет только заменить скрипты игры в папке Content которые относятся к gothic.src
Когда все сделанно, запускаем игру с файла Start_Compile.bat и скрипты будут автоматически собраны, и распиханы по своим папкам, для компиляции ou.bin - воспользуйтесь спейсером, либо скомпильте Ваш проект в готик сорсере как делаю я, хотя спейсером тоже можно.
Врроде все, удачи в новых начинаниях!
И вот еще, огромная благодарность за код Инжектора, Анониму с форума ехе лаб
Дело было вечером, делать было нечего
Конец предыстории
Давно уже хотел сделать библиотеку, с новыми скриптовыми функциями для готики 2, но в силу лени, отсутствия нормального екста, не мог все это сделать, но теперь некоторые вещи изменились, у меня появилось время и нормальный екст, грубо говоря под словом нормальный, имеется в виду совсем другой екст, не тот что был в саге, и не тот что по первому запросу в гугле, исходники пока давать не буду, ибо там много наработок вама(привет Исходники готики а вот готовое расширение функционала готы есть.
И так поехали
Немного переработанная функция, одевания предметов
функция именно ОДЕВАЕТ броню/шлемы/оружие/и тд
а не просто меняет флаг, как аналогичная функция готы
по этой самой причине, не одевались головные убры(шлема) с помощью скрипта
usage:
npc - нпс который одевает предмет
itm - сам предмет
Ext_EquipItem(C_NPC npc,C_ITEM itm);
//**********************************
вставить предмет в слот
usage:
npc - нпс который одевает предмет
slot - имя слота(ZS_LEFTHAND, ZS_RIGHTHAND, и тд)
item - предмет/нпс которого вставляем в слот(да, нпс тожеможно вставить в слот
но не сейчас, пока эта возможность отключена)
Ext_PutInSlot(C_NPC npc, string slot, C_ITEM item);
//**********************************
Объявить игроком
usage:
npc - нпс которого нужно сделать игроком
Ext_SetAsPlayer(C_NPC npc);
//**********************************
Закрыть сундук name
name - имя сундука в мире
state - состояние закрыт открыт(TRUE/FALSE)
Ext_SetLocked(string name,int state);
//**********************************
задать инстанцию ключа для сундука(двери) name
name - имя сундука(двери) в мире
inst - имя инстации предмета (прим: "itmi_lockpick")
Ext_SetKeyInstance(string name,string inst);
//**********************************
Задать комбинацию замка
name - имя сундука(двери) в мире
combo - комбинация в виде "LRLR" где L - лево R - право
Ext_SetPickLockStr(string name,string combo)
//**********************************
Получить время с момента запуска игры(в ms)
Ext_GetTimerTick() возвращает значение int
//**********************************
Сохранить игру
Сохраняет игру в slot от 1 до 20
Ext_WriteSaveGame(int slot)
//**********************************
Загрузить игру
Загружает игру из слота от 1 до 20
Ext_ReadSaveGame(int slot)
//**********************************
вспомогательная функция.
позволяет включать Тест режим, отображение часов,
а также убирать все эелементы GUI
int Hlp_Otions(var int desctop,var int clock,var int testmode);
//**********************************
Функция перехоад между уровнями
targetpoint - точка появления гг в другом мире
levelname - имя мира
Ext_ChangeLevel(string targetpoint,string levelname)
//**********************************
функция печати цветного текста
все в принципе так же как и в обычном PrintScreen
только добавилось еще 3 параметра
r - красный цвет
g - синий цвет
b - зеленый цвет
PRINTTEXT ( VAR STRING text, VAR INT x, VAR INT y, VAR STRING font, VAR INT time, VAR INT r, VAR INT g, VAR INT b )
функция именно ОДЕВАЕТ броню/шлемы/оружие/и тд
а не просто меняет флаг, как аналогичная функция готы
по этой самой причине, не одевались головные убры(шлема) с помощью скрипта
usage:
npc - нпс который одевает предмет
itm - сам предмет
Ext_EquipItem(C_NPC npc,C_ITEM itm);
//**********************************
вставить предмет в слот
usage:
npc - нпс который одевает предмет
slot - имя слота(ZS_LEFTHAND, ZS_RIGHTHAND, и тд)
item - предмет/нпс которого вставляем в слот(да, нпс тожеможно вставить в слот
но не сейчас, пока эта возможность отключена)
Ext_PutInSlot(C_NPC npc, string slot, C_ITEM item);
//**********************************
Объявить игроком
usage:
npc - нпс которого нужно сделать игроком
Ext_SetAsPlayer(C_NPC npc);
//**********************************
Закрыть сундук name
name - имя сундука в мире
state - состояние закрыт открыт(TRUE/FALSE)
Ext_SetLocked(string name,int state);
//**********************************
задать инстанцию ключа для сундука(двери) name
name - имя сундука(двери) в мире
inst - имя инстации предмета (прим: "itmi_lockpick")
Ext_SetKeyInstance(string name,string inst);
//**********************************
Задать комбинацию замка
name - имя сундука(двери) в мире
combo - комбинация в виде "LRLR" где L - лево R - право
Ext_SetPickLockStr(string name,string combo)
//**********************************
Получить время с момента запуска игры(в ms)
Ext_GetTimerTick() возвращает значение int
//**********************************
Сохранить игру
Сохраняет игру в slot от 1 до 20
Ext_WriteSaveGame(int slot)
//**********************************
Загрузить игру
Загружает игру из слота от 1 до 20
Ext_ReadSaveGame(int slot)
//**********************************
вспомогательная функция.
позволяет включать Тест режим, отображение часов,
а также убирать все эелементы GUI
int Hlp_Otions(var int desctop,var int clock,var int testmode);
//**********************************
Функция перехоад между уровнями
targetpoint - точка появления гг в другом мире
levelname - имя мира
Ext_ChangeLevel(string targetpoint,string levelname)
//**********************************
функция печати цветного текста
все в принципе так же как и в обычном PrintScreen
только добавилось еще 3 параметра
r - красный цвет
g - синий цвет
b - зеленый цвет
PRINTTEXT ( VAR STRING text, VAR INT x, VAR INT y, VAR STRING font, VAR INT time, VAR INT r, VAR INT g, VAR INT b )
Также в код вшита одна "Циклическая" функция Global_cycle достаточно, просто создать, функцию с именем Global_cycle и во время игры, эта функция будет непрерывно вызываться, из глобального цикла oCGame::Render()
Так же, для нее есть вспомогательная функция Ext_GetTimerTick() пример использования 2х функций сейчас я вам покажу:
Код:
//В этом примере, мы используем внутриигровой таймер,
//совместно с глобальным циклом
//переменная таймера
var int timer;
func void InitVariables()
{
//инициализируем переменную на всякий случай
timer = 0;
}
func void Global_cycle()
{
timer += Ext_GetTimerTick();
//по прошествии 10 секунд, выводим текст на экран
//и обнуляем таймер
if(timer >= 10000)
{
timer = 0;
Print("Прошло 10 секунд!");
};
};
Или пример как отключить злополучный МАРВИН!;D
func void Global_cycle()
{
//вешаем на цикл эту функцию, и она будет при каждом вызове отключать марвин если тот был включен)
Hlp_Otions(1,0,0);
};
И вот еще чуть не забыл, для того чтобы запустить игру с этими функциями, и тд
Нужно распаковать содержимое архива External.7z в папку с игрой(Gothic2\Externals)
Для запуска используем файл Start.bat (он запустит игру в оконном режиме!), если же вам нужно запустить игру в полный екран, запускать с файла - Inject.exe
Для компиляции скриптов, нужно использовать саму игру, с ключем -zreparse
а проще, запустить с файла Start_Compile.bat, немного его подредактировав, что конкретно редактировать показано ниже:
Код:
Inject.exe 0 -zwindow -zreparse -game:mod.ini
на место mod.ini дописать ини файл Вашего мода, при этом все *.mod файлы из вашего ini файла будут пропущены!
Чтобы добавить мод файл нужно дописать его в ExternalModList.cfg
Пример:
[FILES]
VDF=MyMod.mod MyMod2.mod
_work\Data\Scripts\Content - в эту папку идут скрипты gothic.src и fight.src со всеми скриптами
_work\Data\Scripts\System - в эту папку идут скрипты, музыки и прочего
А вообще, советую Вам установить г2мдк со скриптами, и тогда все будет лежать на своих местах, ваша задача будет только заменить скрипты игры в папке Content которые относятся к gothic.src
Когда все сделанно, запускаем игру с файла Start_Compile.bat и скрипты будут автоматически собраны, и распиханы по своим папкам, для компиляции ou.bin - воспользуйтесь спейсером, либо скомпильте Ваш проект в готик сорсере как делаю я, хотя спейсером тоже можно.
Врроде все, удачи в новых начинаниях!
И вот еще, огромная благодарность за код Инжектора, Анониму с форума ехе лаб