|
|
14.12.2006, 21:23
|
#1562
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2Уризель:
Да, можно хоть самого Белиара, прописать, в инвентарь и под него. :) только это зависит еще от того, именной этот Непесь или нет. С имеными проще там в каждой инстанции непеся прописываешь, что тебе надо, а у прочих... немного по другому... Короче!!! Обзаведись, тотуром Vama, в нем все расписано, что, кто где и как. Усе.
|
|
|
19.12.2006, 18:56
|
#1564
|
|
Re: Скриптинг в Готике
Цитата:
Сообщение от Dark Leshiy link=board=gothic&t=1105030050&start=1550#1562 date=12/19/06, в 03:50:22
... перепробовал всё прочитал кучу туторов (даже немецкий от Piranha Bytes) создаю всё правильно а один хрен у меня вместо комнаты за порталом пустота. И что ещё интересно так это то что если в Spacer'е я накладываю текстуру на портал сохраняю mesh а потом, НЕ нажимая кнопку Сбросить(Reset) открываю его портал работает нормально, else вместо комнаты у меня пустота....
|
А порталы вообще вещь чрезвычайно геморная *>:( И если ты внимательно читал немецкие туторы, там есть фраза про утечку. Так вот, если в замкнутом объеме за порталом есть утечка, то может быть все, что угодно (в том числе и твои "пустоты")
|
|
|
21.12.2006, 09:32
|
#1566
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Roomper link=board=gothic&t=1105030050&start=1560#1564 date=12/20/06, в 21:44:22
У меня проблема: непись не хочет выполнять новый распорядок дня. По сути мой НПС должен идти в одну пещеру и мочить бандитов, но он намертво застрял на одном месте и никуда не идет. Подскажите что ли, как пользоваться функцией B_StartOtherRoutine().
|
Лучший пример - скрипт Кавалорна в Г2а. Он там прекрасно "идет в пещеру и мочит бандитов". Делаем копию для своего персонажа. Если работает, все нормально. Если нет, значит есть еще неучтенные детали.
|
|
|
21.12.2006, 18:49
|
#1567
|
|
Re: М: Скриптинг в Готике
2marazmus: Все получилось! И в этом мне помог предложенный тобой скрипт Кавалорна. Правда, был один момент, котрый я видимо не учел, а точнее - ошибка, которую я упустил. В новом распорядке дня я неправильно указал вейпоинт, и поэтому непись стоял на одном месте. Все равно спасибо!
Вопрос ко всем: есть ли где-нибудь краткое описание внешних функций на русском языке? Ну тех, что разрабы написали через скрипты, вроде B_Attack(), B_StartOtherRoutine(), B_GiveInvItems()?
|
|
|
21.12.2006, 21:38
|
#1568
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: М: Скриптинг в Готике
Вопрос ко всем: есть ли где-нибудь краткое описание внешних функций на русском языке? Ну тех, что разрабы написали через скрипты, вроде B_Attack(), B_StartOtherRoutine(), B_GiveInvItems()?
|
Уроки Vam'a в формате chm.Размер около 180 кб. Начинающим скриптологам к прочтению _обязательны_. Касаясь твоего вопроса - там крайне внятно и понятно описаны B-функции. Понятней написать не смогут даже сами пираньи :)
|
|
|
22.12.2006, 11:00
|
#1569
|
|
Re: М: Скриптинг в Готике
Столкнулся с еще одной проблемой. Короче написал я скрипт предмета – письмо. Просмотрел я весь класс C_Item и не нашел подходящей элемента, которому можно было присвоить функцию, чтобы та вызывалась один раз после прочтения этого письма. var func on_state[4] – не подходит, так как функция, присвоенная этому элементу, вызывается каждый раз после использования предмета. Подскажите, пожалуйста, где можно написать (в смысле, в каком скрипте) условие задуманного мной действия, и при этом чтобы оно выполнялось.
|
|
|
22.12.2006, 12:12
|
#1570
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Roomper link=board=gothic&t=1105030050&start=1560#1568 date=12/22/06, в 10:00:44
Столкнулся с еще одной проблемой. Короче написал я скрипт предмета – письмо. Просмотрел я весь класс C_Item и не нашел подходящей элемента, которому можно было присвоить функцию, чтобы та вызывалась один раз после прочтения этого письма. var func on_state[4] – не подходит, так как функция, присвоенная этому элементу, вызывается каждый раз после использования предмета. Подскажите, пожалуйста, где можно написать (в смысле, в каком скрипте) условие задуманного мной действия, и при этом чтобы оно выполнялось.
|
Самыми общими словами: Заводим переменную. Присваиваем этой переменной true при первом вызове вышеприведенной функции on_state. В дальнейшем (при последующих вызовах) проверяем эту переменную на значение - если она уже true, то далее код просто не выполняем. Для примера - тот же нещщастный скрипт Кавалорна :)
Код:
func void DIA_Addon_Cavalorn_MeetingIsRunning_Info(){ if(DIA_Addon_Cavalorn_MeetingIsRunning_OneTime == FALSE) { AI_Output(self,other,"DIA_Addon_Cavalorn_MeetingIsRunning_08_00"); //Добро пожаловать в 'Кольцо', мой друг. DIA_Addon_Cavalorn_MeetingIsRunning_OneTime = TRUE; } else { AI_Output(self,other,"DIA_Addon_Gaan_MeetingIsRunning_08_01"); //Ватрас даст тебе следующее задание. }; AI_StopProcessInfos(self);};
Обьяснений, мне кажется, тут даже не требуется :).
|
|
|
24.12.2006, 23:20
|
#1576
|
|
Re: М: Скриптинг в Готике
2MaGoth:Скрипт, конечно, я еще не доделал, но все работает как надо. Вот он.
Cпойлер(щелкните, чтобы прочесть):
func void EVT_MagicDamage_s1() { Wld_PlayEffect("spellFX_BELIARSRAGE",hero,hero,0,0 ,0,FALSE); B_MagicHurtNpc(self,hero,100); };
При этом функцию EVT_MagicDamage я прописал в свойстве контейнера on_statefunc. Но это еще не окончательный вариант. Еще нужно задействовать проверку. А как ее реализовать – понятия не имею.
|
|
|
25.12.2006, 16:28
|
#1577
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Roomper link=board=gothic&t=1105030050&start=1570#1573 date=12/24/06, в 20:14:19
Но встает еще одна проблема: как реализовать проверку, ошибся ли игрок с комбинацией взлома замка?
|
Мое мнение - реализация невозможна. Именно из-за того, что невозможно скриптами отловить момент ошибки. Если бы этот "отлов" был возможен, похожую идею уже давно бы реализовали. Да и есть еще тыща идей по "наказанию" игрока за ковыряние игрока в сундуках (чужих - особенно) :) p.s. (Крик души) Ну почему, почему столько всего пираньи оставили внутри экзешника?! :(
|
|
|
03.01.2007, 21:12
|
#1581
|
|
Re: М: Скриптинг в Готике
Раз никто не хочет подробно описывать, как реализованы циклы в Готике 2, хоть помогите решить небольшую проблемку. Короче, написал я функцию состояния:
Cпойлер(щелкните, чтобы прочесть):
Код:
var int PlayerCanTalkDragon;func void ZS_HealthReload(){ };func int ZS_HealthReload_loop(){ if(hero.attribute[ATR_HITPOINTS] < 80) { Npc_ChangeAttribute(hero,ATR_HITPOINTS,hero.attribute[ATR_HITPOINTS_MAX]); }; if(Npc_GetStateTime(hero) > 60) { PlayerCanTalkDragon = TRUE; return LOOP_END; }; return LOOP_CONTINUE;};func void ZS_HealthReload_End(){};
Но задуманное мной событие почему-то не выполняется. Пробовал вызывать этот цикл с помощью операторов: AI_StartState(hero, ZS_HealthReload,0,""); hero.start_aistate = ZS_HealthReload; Вся та же трабла. В чем я ошибся, поправьте пожалуйста. P. S. А цикл хоть я правильно написал? По идее все должно работать, как надо: восстановление здоровья будет выполняться до тех пор, пока не истечет 60 сек (функция-цикл, возвратив значения Loop_End, прекратит выполнение операторов в теле этой функции и перейдет к выполнению func void ZS_HealthReload_End()). А пока не пройдет 60 сек, функция будет «возвращаться» к началу (за это отвечает return LOOP_CONTINUE). Правильно ли я все понял?
|
|
|
04.01.2007, 09:30
|
#1582
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2Roomper: Ну ты даешь, :) интересно а как оно будет выполнятся если у тебя тело функции цикла пустое ??? [spoiler]
Код:
func void ZS_HealthReload(){ };
[/spoiler] Ты в инициализацию, пропиши условие начало старта/выполнения цикла, а в тело вставь выполнение.;)
|
|
|
04.01.2007, 10:58
|
#1583
|
|
Re: М: Скриптинг в Готике
2MaGoth:Я не понимаю, а нафига писать условие выполнения цикла, если цикл можно вызвать в определенном месте при определенном условии специальной функцией? ZS_xxx – все таки функция инициализации, а не проверка на истинность условия (к тому же данная функция имеет тип void, т. е на выходе она ничего возвращать не будет). А может я просто не догоняю? Ну, допустим напишу я в теле инициализации цикла следующее:
Код:
B_ResetAll (self);B_ClearPerceptions (self);
Но все-равно цикл не будет выполняться – его же надо как-то вызвать! Но как?! Неужто придется создавать невидимого непися и прописывать ему распорядок дня, в котором вызывается функция состояния, то бишь мой цикл ZS_ HealthReload? А другого способа нет?
|
|
|
07.01.2007, 03:04
|
#1590
|
|
Re: М: Скриптинг в Готике
2A1exXx:
Люди нужна помощь, какой прогой открывает файл *.MRM или есть какой нить компилятор
|
Во первых, *.MRM - это уже компилированный вариант "сырого" *.3ds меша. Компилятором же является движок игры. А вот инструмента (декомпилятора), преобразовывающего уже компилированный *.MRM файл в "сырое" состояние насколько мне известно не существует.
|
|
|
08.01.2007, 15:02
|
#1592
|
|
Re: М: Скриптинг в Готике
2A1exXx: Скачай с ВоГа АSC файлы ;)
|
|
|
08.01.2007, 19:50
|
#1593
|
|
Re: М: Скриптинг в Готике
После мучительной возни со скриптами я наконец-то дошел до того, как можно реализовать задуманное мной действие! Если кто не в курсе, разъясняю, что я хотел сделать: после разговора с драконом (он начинает нападать) запускается событие, где идет проверка на кол-во имеющегося здоровья у игрока. Если оно меньше 50, то оно полностью восстанавливается. Как только пройдет 3 таких восстановления, дракон становится нейтральным по отношению к нам и начинает диалог. Итак, расписываю весь алгоритм. 1. Открываем файл Content\AI\Monster\ZS_Monster\ ZS_MM_Attack.d и в теле цикла ZS_MM_Attack_Loop() вписываем следуещее:
Код:
if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(My_DragonFire)){if((hero.attribute[ATR_HITPOINTS] < 50) && (count < 3)){hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS_MAX];count = count + 1;};if(count == 3){self.aivar[AIV_EnemyOverride] = TRUE;Npc_ClearAIQueue(self);B_ClearPerceptions(self);B_SetAttitude(My_DragonFire,ATT_NEUTRAL);PlayerCanTalkDragon = TRUE;return LOOP_END;};};
2. Объявляем где-нибудь переменные PlayerCanTalkDragon и count, например, в самом начале файла ZS_MM_Attack.d
Код:
var int count;var int PlayerCanTalkDragon;
3. В условии начала диалога этого непися (ну дракона, как вам угодно) вписываем несколько строк:
Код:
if(PlayerCanTalkDragon == TRUE){return TRUE;};
4. Компилируем скрипты прогой GothiccSourser v 3.1, запускаем игру и наслаждаемся собственным творением. ------------------------------------------------------- P.S. Надеюсь, написать говорящего дракона и диалог к нему не составит труда. А если возникнут вопросы – задавайте. Постараюсь ответить.
|
|
|
09.01.2007, 01:34
|
#1595
|
|
Re: М: Скриптинг в Готике
2A1exXx:
И что мне тогда делать, как мне с 1-ой готики пихнуть доспехи во 2-ую готику, в аддоне ночь ворона както сделали
|
Издеваетесь, уважаемый? Спрашиваете про одно, затем делаете выводы совершенно о другом. Доспехи в компилированном виде имеют расширение *.MDM, а "сырое" *.АSC и декомпилятор на данный тип файлов в отличие от *.MRM все же СУЩЕСТВУЕТ, где-то здесь на форуме есть ветка "Декомпилятор..." 2Добрый Кот:
2A1exXx: Скачай с ВоГа АSC файлы
|
Тоже выход, но если понадобится какая нибудь уникальная модель из Г1, например Спящий, или Королева ползунов, то в сыром виде ее уже в официальном порядке нигде не скачаешь.. См. тему "Декомпилятор..."
|
|
|
09.01.2007, 16:50
|
#1597
|
|
Re: М: Скриптинг в Готике
2Roomper:
Все вы, наверняка, играли в крупный мод "Диккурик". Так вот, там используется интересная фишка, что-то вроде управления игроком через скрипты. Хотелось бы научиться делать подобную шутку, но не знаю с чего начать.
|
Думаю, что начать лучше с самых низких движковых функций, типа - поди туда, возьми то, отнеси туда, а дальше знатоки подскажут ;)
|
|
|
10.01.2007, 00:58
|
#1598
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Roomper link=board=gothic&t=1105030050&start=1575#1595 date=01/09/07, в 08:49:28
...используется интересная фишка, что-то вроде управления игроком через скрипты. *
|
ГГ такой же NPC, как и все остальные. Посему им можно управлять так же, через функции типа: AI_StandUp, AI_Wait, AI_UseItem и так далее. Например: AI_GotoWP (hero, "WAYPOINT");
|
|
|
10.01.2007, 08:47
|
#1600
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Roomper link=board=gothic&t=1105030050&start=1590#1598 date=01/10/07, в 04:37:12
Попутный вопрос: можно ли перевести игрока через скрипты в какое-нибудь состояние (ZS_XXX-функции)?
|
Лучший способ - попробовать :) Для простоты - в функции диалога...
|
|
|
Здесь присутствуют: 23 (пользователей: 0 , гостей: 23)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 04:01. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|