|
|
06.08.2007, 14:11
|
#1765
|
|
Re: М: Скриптинг в Готике
2Mager: если обратить внимание на то как это реализуется то можно увидеть что с каждой стороны лагеря есть 2 лебедки управляющие воротами. К примеру у северных ворот стоит бессмертный стражник - GRD_230_Gardist. Сравните его расписание до захвата шахты: func void Rtn_start_230() { TA_GuardWheelOpen(7,55,19,55,"OCC_MAINGATE_VWHEEL "); TA_GuardWheelOpen(19,55,7,55,"OCC_MAINGATE_VWHEEL "); }; и после: func void Rtn_FMTaken_230() { TA_GuardWheelClosed(7,0,20,0,"OCC_MAINGATE_VWHEEL "); TA_GuardWheelClosed(20,0,7,0,"OCC_MAINGATE_VWHEEL "); }; Измените в расписании Rtn_FMTaken_230 closed на open и будем вам счастье :)
Если копать глубже в сторону самих ZS, можно убедиться, что основная их часть -взаимодействие с мобом (т.е. воротам)
|
|
|
08.08.2007, 00:09
|
#1768
|
 |
|
 |
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
 |
|
 |
|
Re: М: Скриптинг в Готике
2Trazege2005:
Вопрос такой - кто нибудь знает как изменить время отображения текста в режиме диалога? Желательно скриптово....
|
А по точнее можно, и что подразумевается под временем? 2360:
А теперь собственно сам вопрос - scemeName = "MEAT": - где прописан (экзешник?)
|
От части да, но не совсем. Это в основном функции - описывающие реакцию Нпс Гг с предметом, а также анимация движений при реакции с ним, пример косяк болотника. Как Гг закурит косяк, включается подобная scemeName, но для косяка она своя, в итоге имеем, дым от болотной травы, анимация движений Гг, и эффекты визуализации. Выводы: - Частичная реализация в движке, - Специфика анимации в Numan.MDS - файле, - Эффекты визуализации, связанные с определенной scemeName, а также последовательность воспроизведения анимации, в VisualFX.dat - А также в скриптах Готики. :)
- как получить полны список всех scemeName?
|
- смотреть все предметы и выписывать себе в листочек где в теле описании инстанции есть такая строка, после чего искать Zc - функцию с таким именем, или именем этого предмета, вещи и т.д.
- реально ли изменить\добавить свою scemeName?
|
- В принципе да. :)
|
|
|
09.08.2007, 12:44
|
#1770
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от MaGoth link=board=gothic&t=1105030050&start=3664750#36647 67 date=08/07/07, в 23:09:58
2Trazege2005:
|
А по точнее можно, и что подразумевается под временем?
|
Длительность отображения текста диалога при разговоре ГГ с кем нибыло...
|
|
|
11.09.2007, 04:33
|
#1776
|
|
Re: М: Скриптинг в Готике
полностью вычещинные скрипты от Нпс и прочего сюжетного соответствующего Готике2 и Готике2-НВ
|
Именно это, помойму я использовал скрипты от WSA, качал с ВоГ.ру.
|
|
|
16.09.2007, 22:28
|
#1778
|
|
Re: М: Скриптинг в Готике
1.Хотелось бы узнать, как сделать чтоб после разговора ГГ с одним Нпс, у другого Нпс появлялась новая ветка диалога, если лень писать и обьяснять укажите хотяб диалог из оригинальной игры, где есть пример такой функции. 2.И ещё... как сделать чтоб после диалога у ГГ в дневнике появляласт новая запись?.. Я пытался сделать сам, но не вышло... вот кусок этого "нерабочего" кода:
B_LogEntry(TOPIC_V_NACHALE,"Текст записи");
B_GivePlayerXP(XP_VNACHALE);
|
При таком коде скрипты не компилятся.
B_LogEntry(TOPIC_RescueGorn,"Текст записи");
B_GivePlayerXP(XP_VNACHALE);
|
А при таком компилятся, опыт выдаётся, но записи в дневнике нет. Может для того чтоб создать свою (новую) запись в дневник, надо прописывать её инстанцию (к примеру RescueGorn) где-нибудь ещё? Я нигде не прописывал... Примечание: Использую почти "чистые" скрипты от акеллы, вычищал сам.
|
|
|
17.09.2007, 06:02
|
#1780
|
|
Re: М: Скриптинг в Готике
DEDROIT Думаю будет лучше если я напишу это здесь, ранее этого помоему тут не спрашивалось, и у других потом будет меньше вопросов ;). У меня такая пробема - я создал мага-бандита, но когда я к нему подхожу, то он только кричит что щас убьёт меня, но не атакует, более того, если его атаковать, он не отвечает на атаки, меч я ему не давал, мне надо чтоб он применял магию в бою. Вот его код:
instance bdt_2003_Storius (C_npc) { name = "Сториус" ; guild = GIL_BDT ; id = 2003 ; voice = 7 ; level = 20 ; npctype = NPCTYPE_AMBIENT ; aivar[AIV_MagicUser] = MAGIC_ALWAYS; B_SetAttributesToChapter(self,6); fight_tactic = FAI_HUMAN_MASTER; EquipItem(self,ItRu_ArmyOfDarkness); EquipItem(self,ItRu_Deathball); B_SetNpcVisual(self,MALE,"Hum_Head_Bald",Face_L_T oughBald01,BodyTex_L,ITAR_Xardas); B_GiveNpcTalents(self); B_SetFightSkills(self,500); Npc_SetTalentSkill(self,NPC_TALENT_MAGE,6); daily_routine = Rtn_Start_2003; };
|
|
|
|
18.09.2007, 01:20
|
#1781
|
|
Re: М: Скриптинг в Готике
2SMErtNIK:
он только кричит что щас убьёт меня, но не атакует
|
Для компьютерного НПЦ, выбор заклинания осуществляеться в функции AI\Magic\B_SelectSpell.d Для каждой гильдии и некоторых магических существ расписаны используемые заклы... Так вот гильдии бандита там нет :)
Соответственно нужно добавить в вышеописанную функцию нужную гильдию в нужный набор заклинаний.
|
|
|
24.09.2007, 03:10
|
#1782
|
|
Re: М: Скриптинг в Готике
пытаюсь скомпилировать предварительно разобранный gothic.dat от немки. имеется почти 60 ошибок "ф-ия должна возвращать значение". подскажите, как корректно поправить следущие скрипты: 1. два return в if-else
Cпойлер(щелкните, чтобы прочесть):
func int B_SetDayTolerance() { * * *if (Wld_IsTime (22, 0, 23, 59)) * * *{ * * * * * *return Wld_GetDay () + 1; * * *} * * *else * * *{ * * * * * *return Wld_GetDay (); * * *}; };
2. ни одного return-а
Cпойлер(щелкните, чтобы прочесть):
func int C_CanNewsBeSpread() { * * *PrintDebugNpc (PD_ZS_Check, "C_CanNewsBeSpread"); };
3. return в if
Cпойлер(щелкните, чтобы прочесть):
func int ZS_AssessQuietSound() { * * *PrintDebugNpc (PD_ZS_FRAME, "ZS_AssessQuietSound"); * * *C_ZSInit (); * * *if (self.guild == GIL_MEATBUG) * * *{ * * * * * *AI_ContinueRoutine (self); * * * * * *return 0; * * *}; * * *... * * *тра-ля-ля * * *... };
4. вообще пусто
Cпойлер(щелкните, чтобы прочесть):
func int Info_Bartholo_PERM_Condition() { };
вот вроде все встречающиеся ситуации. как я понимаю, return обязательно должен присутствовать, иначе скрипт не будет допущен до компилирования. если явно не задано значение можно ли возвращать что-то типа null? Добавление от 09/24/07, в 02:14:22
такс. первый тип поборол примерно также, как в случае портирования кода на дельфи под FPC:
Cпойлер(щелкните, чтобы прочесть):
func int B_SetDayTolerance() { * * *var int i; * * *i = 0; * * * * * *if (Wld_IsTime (22, 0, 23, 59)) * * *{ * * * * * *i = Wld_GetDay () + 1; * * *} * * *else * * *{ * * * * * *i = Wld_GetDay (); * * *}; * * *return i; };
насколько это правильно? Добавление от 09/24/07, в 02:30:55
второй как я понял лечится заменой типа int на void.
|
|
|
24.09.2007, 03:32
|
#1783
|
|
Re: М: Скриптинг в Готике
2HikeR:
если явно не задано значение можно ли возвращать что-то типа null?
|
Угу, НУЛЬ можно возвращать, но этот НУЛЬ должен быть прописан в константах, для этих целей уже есть FALSE - равная нулю, const int FALSE = 0; но никто не запрещает вписывать и саму циферку 0. В противовес FALSE, есть TRUE const int TRUE = 1; return FALSE; она же return 0; return TRUE; она же return 1; В условных функциях-проверках обычно используется FALSE - как ЛОЖЬ, TRUE - как ИСТИНА, другие int функции могут возвращать конкретные значения. 2HikeR:
func int B_SetDayTolerance() { var int i; i = 0; if (Wld_IsTime (22, 0, 23, 59)) { i = Wld_GetDay () + 1; } else { i = Wld_GetDay (); }; return i; };
|
Че за извращение? :) func int B_SetDayTolerance() { if(Wld_IsTime(22,0,23,59)) { return Wld_GetDay() + 1; }; return Wld_GetDay(); }; Более оптимальный вариант.
|
|
|
24.09.2007, 06:12
|
#1784
|
|
Re: М: Скриптинг в Готике
упс... как-то не учел, что по ретурну идет мгновенный выход из проверки или ф-ии. а вот по 3-ему варианту пока никак не догнать. если внутри ф-ии сработает условие - то выход происходит с заданным значением. а если не сработает, то что возвращать? любое взятое от балды значение, которое никогда не будет равно предположительному значению из условия? Добавление от 09/24/07, в 05:32:11
почти все поправил, кроме таких случаев: func int return_value() { * * if (i = 1) * * { * * * * * return 1; * * }; };что вернет ф-ия, если i <> 1? если игра нормально переваривает такие конструкции, то может она просто подставляет какое-то заранее определенное значение, типа return false? да, и поправленные скрипты для второй готики я видел в нескольких местах, а нет ли такого же для первой? сравнить, так сказать, свои правки с правильными. ну и последний вопрос. если удалить dat файл, и вместо него положить декомпилированные скрипты, готика будте работать с ними? и куда в таком случае их класть? и нужно ли обязательно начинать новую игру, если произошло редактирование скриптов?
|
|
|
24.09.2007, 16:14
|
#1787
|
 |
|
 |
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
 |
|
 |
|
Re: М: Скриптинг в Готике
2HikeR:
ну и последний вопрос. если удалить dat файл, и вместо него положить декомпилированные скрипты, готика будте работать с ними? и куда в таком случае их класть? и нужно ли обязательно начинать новую игру, если произошло редактирование скриптов?
|
В опциях настройки декомпилятора Вама, есть параметр "Безопасная вставка скриптов в игру". Пропиши путь до игры Г2.. как нужно, остальное программа сделает сама, оно верно как для Г2, так и для Г2-НВ. 2DimonKDF:
Как на основе имеющегося глорха сделать глорха другого цвета, притом чтобы оригинал остался. Пробовал создавать нового НПС (монстра) на основе старого, заменяя название код и пр. но в игре вечно ошибка вы скакивает по поводу ASC модели или монстр остается старый.
|
По твоему варианту ни как, игра не позволяет генерить разно текстуренных монстров, по одной инстанции... Для каждого вида нужно, прописывать свою инстанцию с нуля.. Также нужно, декомпилировать файлы монстрика и в его Асц файле изменить текстуруна новую... Именно из-за этого у тебя идет ошибка Асц. После того как в Асц файле пропишешь новую(ые) текстуры, у твоей новой инстанции монстрика будет новая шкура. :)
|
|
|
24.09.2007, 17:09
|
#1788
|
|
Re: М: Скриптинг в Готике
2MaGoth:
Для каждого вида нужно, прописывать свою инстанцию с нуля.
|
Я вообще-то этого и хотел. Напишу попобробнее. Вот скрипт глорха:
Код:
prototype Mst_Default_Snapper(C_Npc){ * * *name[0] = "Глорх"; * * *guild = GIL_SNAPPER; * * *aivar[AIV_MM_REAL_ID] = ID_SNAPPER; * * *level = 12; * * *attribute[ATR_STRENGTH] = 60; * * *attribute[ATR_DEXTERITY] = 60; * * *attribute[ATR_HITPOINTS_MAX] = 120; * * *attribute[ATR_HITPOINTS] = 120; * * *attribute[ATR_MANA_MAX] = 0; * * *attribute[ATR_MANA] = 0; * * *protection[PROT_BLUNT] = 60; * * *protection[PROT_EDGE] = 60; * * *protection[PROT_POINT] = 60; * * *protection[PROT_FIRE] = 60; * * *protection[PROT_FLY] = 60; * * *protection[PROT_MAGIC] = 0; * * *damagetype = DAM_EDGE; * * *fight_tactic = FAI_SNAPPER; * * *senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL; * * *senses_range = PERC_DIST_MONSTER_ACTIVE_MAX; * * *aivar[AIV_MM_ThreatenBeforeAttack] = TRUE; * * *aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM; * * *aivar[AIV_MM_FollowInWater] = TRUE; * * *aivar[AIV_MM_Packhunter] = TRUE; * * *start_aistate = ZS_MM_AllScheduler; * * *aivar[AIV_MM_RestStart] = OnlyRoutine;};func void B_SetVisuals_Snapper(){ * * *Mdl_SetVisual(self,"Snapper.mds"); * * *Mdl_SetVisualBody(self,"Sna_Body",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);};instance Snapper(Mst_Default_Snapper){ B_SetVisuals_Snapper(); Npc_SetToFistMode(self);};
Я хочу на основе него сделать такого же глорха, но другого цвета. Что мне нужно изменить и на что? И нужно ли создавать новую модель?
|
|
|
25.09.2007, 00:45
|
#1793
|
|
Re: М: Скриптинг в Готике
вот еще:
Cпойлер(щелкните, чтобы прочесть):
[pre]instance DIA_Ricelord_TRADE(C_Info) { * * *npc = Bau_900_Ricelord; * * *nr = 800; * * *condition = DIA_Ricelord_TRADE_Condition; * * *information = DIA_Ricelord_TRADE_Info; * * *permanent = 1; * * *description = "Мы могли бы заключить сделку..."; * * *trade = 1; };
func int DIA_Ricelord_TRADE_Condition() { };[/pre]
чему будет равно condition, и как исправить? и как можно проэмулировать работу скриптов?
|
|
|
25.09.2007, 01:39
|
#1794
|
|
Re: М: Скриптинг в Готике
2HikeR:
func int return_value() { if (i = 1) { return 1; }; };
|
func int return_value() { if (i = 1) { return 1; }; return 0; }; 2HikeR:
вот еще нашел. громадная func int Spell_ProcessMana(var int manaInvested) , которая вообще ниоткуда не вызывается.
|
Вообще-то нкоторые функции могут быть зашиты в движке, а вызываться в скриптах, изменение или удаление которых в скриптах, может привести к полной неработоспособности игры в дальнейшем :) 2HikeR:
чему будет равно condition, и как исправить?
|
Элементарно! Поставить в INT функцию ИСТИНУ, или ЛОЖЬ. В случае ИСТИНЫ - condition СРАБОТАЕТ, иначе диалога НЕ БУДЕТ. Пример 1: Сработает всегда func int DIA_Ricelord_TRADE_Condition() { return TRUE; }; Пример 2: Срабтает при условии бла-бла-бла func int DIA_Ricelord_TRADE_Condition() { if(бла-бла-бла) { return TRUE; }; return FALSE. }; Пример 3: Не сработает НИКОГДА func int DIA_Ricelord_TRADE_Condition() { return FALSE; }; 2DimonKDF:
Я хочу на основе него сделать такого же глорха, но другого цвета. Что мне нужно изменить и на что?
|
Можно на основе стандартной текстуры глорха Sna_Body_V0.tga, создать свою и изменять порядковый номер на 1, Sna_Body_V 1.tga, затем перегнать ГоМаноv в TEX формат Sna_Body_V 1-C.TEX, т.к. игра САМА может УВИДЕТЬ и автоматически КОНВЕРТИРОВАТЬ только 0 версию текстуры. Далее создать новую Инстанцию для глорха и Новую визуальную функцию, изменив в ней... func void B_SetVisuals_MySnapper() { Mdl_SetVisual(self,"Snapper.mds"); Mdl_SetVisualBody(self,"Sna_Body", 1,DEFAULT,"",DEFAULT,DEFAULT,-1); }; instance MySnapper(Mst_Default_Snapper) { B_SetVisuals_MySnapper(); Npc_SetToFistMode(self); };
|
|
|
25.09.2007, 02:20
|
#1795
|
|
Re: М: Скриптинг в Готике
2Ukur:
HikeR: чему будет равно condition, и как исправить? Элементарно! Поставить в INT функцию ИСТИНУ, или ЛОЖЬ.
|
согласен, что элементарно. только вот что ставить в таких случаях, когда ф-ия пуста, но объявлена как int? или это какая-то нереализованная задумка? сама игра-то как рассматривает такие ситуации? может она просто возвращает FALSE, если не указано обратное?
|
|
|
25.09.2007, 02:29
|
#1796
|
|
Re: М: Скриптинг в Готике
2HikeR:
согласен, что элементарно. только вот что ставить в таких случаях, когда ф-ия пуста, но объявлена как int? или это какая-то нереализованная задумка?
|
Ну так в чем проблема? Если сам ничиго не хочешь придумать, ставь retuern FALSE. Функция как не работала, так и не будет работать, но компилятор уже не будет на нее ругаться.. 2HikeR:
сама игра-то как рассматривает такие ситуации? может она просто возвращает FALSE, если не указано обратное?
|
Тебе же ясно было не раз сказано в теме декомпилятора - ВОЗМОЖНЫ потенциальные ошибки. P.S. Прекращай зафлуждать скриптовыми вопросами тему Декомпилятора.
|
|
|
25.09.2007, 04:43
|
#1797
|
|
Re: М: Скриптинг в Готике
Прекращай зафлуждать скриптовыми вопросами тему Декомпилятора.
|
сорри, но я и первое "внимание" прекрасно понял. еще вчера. поэтому все последующие вопросы имеют самое непосредственное отношение к обсуждаемому инструменту, а приведенные там скрипты - всего лишь "факты" (ну или рабочий материал)
Если сам ничиго не хочешь придумать, ставь retuern FALSE.
|
я не хочу ничего придумывать. есть желание довести скрипты до состояния безошибочной компиляции текущим инструментарием :) так как ответа на вопрос, "что возвращает func int имя_функции() {}; я не нашел, то решил просто проверить. в Menu.DAT есть ф-ия показа титров (ну или авторов) [pre]func int showcredits() {PlayVideo("credits.bik"); return 1; };[/pre] я ее немного видоизменил:
Cпойлер(щелкните, чтобы прочесть):
[pre]func int test() { * * *if (1 == 0) {return 10;}; //заведомо ложно };
func int showcredits() { * * *if (test () == -1) {PlayVideo("logo1.bik");}; * * *if (test () == 0) {PlayVideo("logo2.bik");}; * * *if (test () == 1) {PlayVideo("extro.bik");}; * * * * * *if (test () == 2) {PlayVideo("intro.bik");}; * * * * * *return 1; };[/pre]
компилятор на это дело поругался, но откомпилировать дал. предполагая, что в случае отсутствия явного указания значения возврата игровой движок вставляет что-то вроде return TRUE или return FALSE, то есть возвращает либо 0 либо 1, я рассчитывал по запущенному ролику определить, какая проверка сработала. запустил, и еще больше запутался. проигрались ролики logo2.bik и extro.bik, то есть сработали ДВЕ проверки. получается, что нечто, возвращаемое ф-ий test() не равно -1 и 2, но одновременно равно и нулю и еденице. ну и как это понимать? Добавление от 09/25/07, в 03:51:07
вроде немного въехал. если предварительно заюзать переменную, то страбатывает только условие проверки на ноль, то есть в нижеприведенном скрипте покажется только ролик intro.bik:
Cпойлер(щелкните, чтобы прочесть):
[pre]var int i; i = test(); if ( i == -1) {PlayVideo("logo1.bik");}; if ( i == 1) {PlayVideo("logo2.bik");}; if ( i == 2) {PlayVideo("extro.bik");}; * * * if ( i == 0) {PlayVideo("intro.bik");}; * * * return 1;[/pre]
а если сделать так:
Cпойлер(щелкните, чтобы прочесть):
[pre] * * *if ( test() == 0) {PlayVideo("logo1.bik");}; * * *if ( test() == 1) {PlayVideo("logo2.bik");}; * * *if ( test() == 1) {PlayVideo("extro.bik");}; * * *if ( test() == 0) {PlayVideo("intro.bik");};[/pre]
то есть при каждой проверке вызывать ф-ию, то проиграются первые три ролика, а четвертый - нет. получается, что при первом вызове ф-ии без явного указания значения возврата движок возвращает ноль, а при последующих вызовах - еденицу. (кстати, как правильно, "ноль" или "нуль"?) интересно, разрабы знают о таком поведении движка? если знают, то вдруг активно используют эту фичу? может все ф-ии без слова return в конце - это специальный тайный замысел, или недокументированная возможность? если так, то ручное добавление фиксированных значений выхода может сказаться на общей логике игры, что не есть хорошо. Добавление от 09/25/07, в 04:03:50
дополнение: если вызовы происходят в пределах одной ф-ии, то ситуация описана выше. а если из разных ф-ий - то все повторяется, сначала ноль, потом еденица. вобщем, остановился на том, что везде вставляю return 0, к чему это приведет - видимо узнаю не сразу ;)
|
|
|
Здесь присутствуют: 11 (пользователей: 0 , гостей: 11)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 13:30. Часовой пояс GMT +4.
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|