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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

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

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Без расширений всё прекрасно делается. Именно меняя параметр munition.
Главное - его сохранять хотя бы через какую-нибудь переменную, чтобы не сбрасывалось на обычные стрелы.
Я и подумываю о скриптовой части. Что если сделать стрелы предметом который можно экипировать. Тогда можно будет на каждый лук повесить скрипт проверки что экипировано и если экипированы стрелы то значение чем стреляет лук по умолчанию меняется на экипированный элемент. Но как сделать возможность экипировать предмет ??
 

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.227
Благодарности
1.909
Баллы
370
Кстати может кто нибудь знает почему скрипты Gothic 1.04 вообще невозможно декомпилировать, пишет мол файл dat не поддерживается, а кроме Sourcer есть программы для декомпилирования?
 

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Кстати может кто нибудь знает почему скрипты Gothic 1.04 вообще невозможно декомпилировать, пишет мол файл dat не поддерживается, а кроме Sourcer есть программы для декомпилирования?
Может ты выбираешь не тот движок для декомпиляции ?? Например ставишь движок готика 2 а декомпилируешь дат файл готики 1
 

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.227
Благодарности
1.909
Баллы
370
Может ты выбираешь не тот движок для декомпиляции ?? Например ставишь движок готика 2 а декомпилируешь дат файл готики 1
Нет, я все правильно делаю, скрипты просто не декомпилируются
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.255
Благодарности
6.254
Баллы
1.595
Нет, я все правильно делаю, скрипты просто не декомпилируются
Впервые конечно такое вижу. Попробуй2 старыми версиями сурсера разобрать датник. испробуй все версии.
А пока не попробуешь, на другие проги сылки не дам :)
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Кстати может кто нибудь знает почему скрипты Gothic 1.04 вообще невозможно декомпилировать, пишет мол файл dat не поддерживается, а кроме Sourcer есть программы для декомпилирования?
Эта версия если конечно это она у тебя, в чем я сомневаюсь, не декомпилится сурсером, или декомпилится но только частично, без всего блока комментов диалогов в скриптах ибо ее на декомпиляцию не прогоняли при создании Сурсера этой версии в 2006 г..
Для частичной декомпиляции этого файла нужно запускать консольный сурсер 2.40 из командной строки с ключем для демки Г1, версия 3.14 и выше его не возьмут. Всю прочую инфу читаем в справке Сурсера..
 

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.227
Благодарности
1.909
Баллы
370
Впервые конечно такое вижу. Попробуй2 старыми версиями сурсера разобрать датник. испробуй все версии.
А пока не попробуешь, на другие проги сылки не дам :)
Попробовал 2.20 2.30 2.40 и новыми , ошибки вылезают и не декомпилируется

Эта версия если конечно это она у тебя, в чем я сомневаюсь, не декомпилится сурсером, или декомпилится но только частично, без всего блока комментов диалогов в скриптах ибо ее на декомпиляцию не прогоняли. при создании Сурсера этой версии в 2006 г..
Для частичной декомпиляции этого файла нужно запускать консольный сурсер 2.40 из командной строки с ключем для демки Г1, версия 3.14 и выше его не возьмут. Всю прочую инфу читаем в справке Сурсера..
Скрипты демоверсии 1.04 весит 3338кб
 
Последнее редактирование модератором:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Скрипты демоверсии 1.04 весит 3338кб
Сравнил со своей, у меня для версии gothic1-1.04d_german-demo.exe так.:

GOTHIC.DAT - 3,25 МБ (3 417 636 байт)
CRC32: B7840FA7
MD5: 5D7642497FAC96AD6D4165A8ECBE1CC8
SHA-1: 0D750641316D253A0058D6C223EAB309DFF9E820

Зы, thorus1995, не даблпость, здесь не чат.
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
вместо self используй hero, если надо проверять "хероя".

Добрый вечер. Пришлось делать так,
if(Npc_HasItems(self,ITAR_PAL_H_01) >= 1)
{
if(Npc_HasItems(Hero,ITAR_PAL_H_01) >= 1)
{
Self - блокирует проникновение движка во время разговора с NPC.
Hero - блокирует проникновение движка в остальных случаях.

Но тут вопрос, если self это параметр выше порядка чем hero, почему hero (если иного не указано) не наследует значение self? (Это критическая ошибка разработчиков получается)
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Но тут вопрос, если self это параметр выше порядка чем hero, почему hero (если иного не указано) не наследует значение self?
Глобальная инстанция self - может присваивается любому НПЦ, в зависимости от того где используется, а hero он везде и всегда hero *facepalm*
З.Ы. еще бывают victim и other например.

(Это критическая ошибка разработчиков получается)
Нет, это критическая ошибка понимания скриптинга.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Self - блокирует проникновение движка во время разговора с NPC.
Hero - блокирует проникновение движка в остальных случаях.
Чего оно делает ?! :eek:


почему hero (если иного не указано) не наследует значение self?
Потому что это глобальные, динамически изменяемые переменные движка, каждая из которых полностью самостоятельная и ни с чем кроме как с классом от которого порождены не связанные.

Их нужно знать в лицо:
VAR C_NPC self;
VAR C_NPC other;
VAR C_NPC victim;
VAR C_NPC hero;
VAR C_NPC item;
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Их нужно знать в лицо:
VAR C_NPC self;
VAR C_NPC other;
VAR C_NPC victim;
VAR C_NPC hero;
VAR C_NPC item;

А у меня такие в Classes.d

instance self(C_Npc)
{
};

instance other(C_Npc)
{
};

instance victim(C_Npc)
{
};

instance item(C_Item)
{
};

instance hero(C_Npc)
{
};
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Последнее редактирование:

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.563
Благодарности
4.157
Баллы
915
Что произойдёт, если будет объявлен локальный идентификатор, имя которого совпадёт с именем глобального? Например, здесь используется локальная переменная Victim, которая имеет то же имя, что и глобальная victim?
Код:
func void B_GiveDeathXP(var C_Npc Killer, var C_Npc Victim)
{
    if((Npc_IsPlayer(Killer) || (Killer.aivar[AIV_PARTYMEMBER] == TRUE)) && (Victim.aivar[AIV_VictoryXPGiven] == FALSE))
    {
        B_GivePlayerXP(Victim.level * XP_PER_VICTORY);
        Victim.aivar[AIV_VictoryXPGiven] = TRUE;
    };
};
Во всяком случае GothicSourcer во время компиляции не выдал никаких предупреждений.
 

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Друзья мои подскажите пожалуйста как в готике осуществляется респавн монстров и трав ?? где можно посмотреть этот процесс ??
 

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.227
Благодарности
1.909
Баллы
370
Друзья мои подскажите пожалуйста как в готике осуществляется респавн монстров и трав ?? где можно посмотреть этот процесс ??
Задается функцией Wld_InsertNpcAndRespawn(название НПС, вейпоинт, время) аналогично предметам но заместо npc item (для предметов лучше использовать фрипоинт, иначе предметы будут висеть в воздухе)
 
Последнее редактирование:

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Добрый вечер. Возник вопрос:
Каким образом игра отделяет запрос игрока на снятие предмета от такого же запроса на снятие предмета npc.
Bdt_1013_Bandit_L и ГГ имеют Тяжелый сук весом в 1 кг
При одевании ГГ Тяжелый сук имеем вес в 1 кг
Если ГГ убивает Bdt_1013_Bandit_L программа Тяжелый сук снимает с npc и вес становится равен 0. Т.к. выполнена команда unequip в которой указано при снятии Тяжелый сук вес сделать равным 0.

Как прописать в unequip, чтобы программа вес приравнивала 0, если только Тяжелый сук будет снимать ГГ?

Upd: AI_UnequipArmor нашлось в тестовом персонаже, для пояса, лука, арбалета, меча осталось найти сокращения.

Updd: if(AI_UnequipWeapons(Hero,ItMw_1h_Bau_Mace)) вызывает ошибку Func does not return an int.

Мне нужно проверить, ГГ снял ли Тяжелый сук, но не вызвать обязательное снятие любого оружия.
+ мне нужно проверку прописать.
AI_UnequipWeapons(hero); делает принудительное снятие всего оружия.
Но как прописать проверку на снятие конкретного оружия?

Даже если каждой вещи присвоить номер и по номеру возвращать вес, как указать в проверке (произошло ли снятие брони или оружия)?

KG_1 = 0;
if(KG_1 == 0) && (KGN_1 == 6)
{
KG_1 = 1;
AI_EquipBestMeleeWeapon(hero);
};

Но меня интересует, чтобы была одета палка т.к. она идёт под номером 6, а не любое оружие.

Любой вариант реализации не возможен:

1 - вариант: нет проверки какое оружие, лук, арбалет, доспех, пояс были сняты
2 - вариант: нет возможности одеть определённое оружие, есть только команда AI_EquipBestMeleeWeapon(hero) и AI_EquipBestRangedWeapon(hero), но нету как с бронёй AI_EquipArmor(hero,ITAR_Mil_L)

Если кто-то знает команду на одевание определённого оружия, прошу пожалуйста сообщить (иначе ограничение движка не обойти).
 
Последнее редактирование:

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.238
Благодарности
2.579
Баллы
455
Лебедев

Ну что ты несешь... *facepalm**facepalm**facepalm**facepalm**facepalm*

Вот тебе пример из игры, надеюсь для себя сможешь адаптировать

INSTANCE ItMw_1h_Vlk_Sword (C_Item)
{
name = "Degen";

mainflag = ITEM_KAT_NF;
flags = ITEM_SWD;
material = MAT_METAL;

value = Value_VLKSchwert;

damageTotal = Damage_VLKSchwert;
damagetype = DAM_EDGE;
range = RANGE_VLKSchwert;

on_equip = Equip_1H_05; //Функция выполняется при одевании оружия
on_unequip = UnEquip_1H_05; //Функция выполняется при снимании оружия

cond_atr[2] = ATR_DEXTERITY;
cond_value[2] = Condition_VLKSchwert;
visual = "ItMw_018_1h_SwordCane_01.3ds";

description = name;
TEXT[2] = NAME_Damage; COUNT[2] = damageTotal;
TEXT[3] = NAME_Dex_needed; COUNT[3] = cond_value[2];
TEXT[4] = NAME_ADDON_BONUS_1H; COUNT[4] = Waffenbonus_05;
TEXT[5] = NAME_Value; COUNT[5] = value;
};


Эти функции для одноручников прописаны здесь _work\Data\Scripts\Content\Items\Einhand_EquipBonus.d

FUNC VOID Equip_1H_05()
{
if(self.ID == 0) //Срабатывает только для ГГ
{
//Здесь прибавляешь вес
};
};

FUNC VOID UnEquip_1H_05()
{
if(self.ID == 0) //Срабатывает только для ГГ
{
//Здесь вычитаешь вес
};
};
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Лебедев

Ну что ты несешь... *facepalm**facepalm**facepalm**facepalm**facepalm*

Вот тебе пример из игры, надеюсь для себя сможешь адаптировать

INSTANCE ItMw_1h_Vlk_Sword (C_Item)
{
name = "Degen";

mainflag = ITEM_KAT_NF;
flags = ITEM_SWD;
material = MAT_METAL;

value = Value_VLKSchwert;

damageTotal = Damage_VLKSchwert;
damagetype = DAM_EDGE;
range = RANGE_VLKSchwert;

on_equip = Equip_1H_05; //Функция выполняется при одевании оружия
on_unequip = UnEquip_1H_05; //Функция выполняется при снимании оружия

cond_atr[2] = ATR_DEXTERITY;
cond_value[2] = Condition_VLKSchwert;
visual = "ItMw_018_1h_SwordCane_01.3ds";

description = name;
TEXT[2] = NAME_Damage; COUNT[2] = damageTotal;
TEXT[3] = NAME_Dex_needed; COUNT[3] = cond_value[2];
TEXT[4] = NAME_ADDON_BONUS_1H; COUNT[4] = Waffenbonus_05;
TEXT[5] = NAME_Value; COUNT[5] = value;
};


Эти функции для одноручников прописаны здесь _work\Data\Scripts\Content\Items\Einhand_EquipBonus.d

FUNC VOID Equip_1H_05()
{
if(self.ID == 0) //Срабатывает только для ГГ
{
//Здесь прибавляешь вес
};
};

FUNC VOID UnEquip_1H_05()
{
if(self.ID == 0) //Срабатывает только для ГГ
{
//Здесь вычитаешь вес
};
};

Спасибо, все скрипты просмотрены были, но в этот не заглянулось.

Equip и unequip на данный момент 204 прописано и сделаны дополнительные функции, чтобы оптимизировать код на более 200 кб.

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

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

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.227
Благодарности
1.909
Баллы
370
Количество навыков в Готике 1 ограничено или можно новые создавать? Я пытался сделать новый ,но он не работал заменил им старый заработал, ещё при создании нового навыка координаты его изображения в дневнике тоже не срабатывают( можно лишь старые передвигать) незнаю может я что то неправильно сделал
 
Сверху Снизу