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

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

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 574
Последнее редактирование модератором:

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
450
Благодарности
266
Баллы
230
Никто не пишет, не спрашивает, тогда я напишу...
Возможно ли как-то отследить какую анимацию в данный момент проигрывает НПС?
Только не "BS_" флаги, а например такие, как S_run, t_.... и т.д.

Посту ниже:

Нет, нельзя. Да и какой смысл?

Я бы не согласился с тем, что нельзя...
Посмотрел event теги и решил, а что если создать какой-то предмет в инвентаре(как мульти предмет) и поддерживать определённое кол-во этих предметов в инвентаре НПС(например, 1000), а во время анимации удалять определённое ко-во предметов данной инстанции(1000 - 800) и создать таймер(триггер + скрипт), который бы судил по разнице между начальным и конечным кол-вом данных предметов(осталось 200). Ну и пополнение предметов тоже надо реализовать либо через таймер, либо в самой фазе анимации.
НО, проблема в том, что как будет смотреться в инвентаре, например, ГГ - 1000 предметов без описания и с постоянно меняющимся кол-вом(если засечёт, т.е. если успеет открыть инвентарь во время выполнения фазы анимации)?
А что касается смысла, то может пригодиться в уникальных анимациях.(т.е. тех, которых нет в "BS_" константах).
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Нет, нельзя. Да и какой смысл? В игре, как правило, просто оценивается расстояние тела до какой-либо точки, и исходя из этого формируются воздействия. А для общей оценки есть BS_.
 

Iris Heart

Почетный форумчанин
Регистрация
17 Сен 2008
Сообщения
10.634
Благодарности
2.512
Баллы
965
первый раз в жизни делаю мод, и пытаюсь разобраться со скриптами, но у меня ничего не получается)) даже самые простейшие задачи.
мод, правда, не по готике, но всё равно.
вот, например, я создаю скрипт, чтобы в определенном месте ГГ давалось определенное количество опыта.
{
SetXP(oPC, 10000);
}


Вставляю ее в скрипт, вроде всё указано правильно, функция дать опыт, объект ПК-игрок, количество 10000.
Но у меня ничего не работает :-\

что я могу делать не так? :-\
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Usagi,
Какой-то странный у тебя скрипт *???*
В Г1 есть стандартная функция B_GiveXP(кол-во_экспы);
Г2а она называется B_GivePlayerXP(кол-во_экспы);

Jr13San,
Интересная идея использования эвент-тегов с триггером. А триггерные предметы можно создавать в инвентаре, когда ГГ начинает совершать какое-либо действие или например переходит в боевой режим и все их удалять, когда выходит из него и может открыть инвентарь.
 

Iris Heart

Почетный форумчанин
Регистрация
17 Сен 2008
Сообщения
10.634
Благодарности
2.512
Баллы
965
Usagi,
Какой-то странный у тебя скрипт *???*
В Г1 есть стандартная функция B_GiveXP(кол-во_экспы);
Г2а она называется B_GivePlayerXP(кол-во_экспы);
эм... мод не по Готике.
я просто хотела узнать тут у людей, работающих со скриптами, может помогут чем нибудб :)
вообще игра Nwn 1, редактор Aurora Toolset

так вот, там строки скриптов уже выстроены готовыми, их нужно лишь правильно подставить и собрать. я и взяла самый простой, чтобы дать ГГ экспу.
строчка описания там такая
// Sets oCreature's experience to nXpAmount.
void SetXP(object oCreature, int nXpAmount)
я прописываю как
1. void main()
2. {
3. SetXP(oPC, 10000);
4. }

где обьект - ПК игрок, а опыт - 10000.
но скрипт у меня не работает ::) вроде всё правильно указала. может быть я не так поставила скобки? =(
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
450
Благодарности
266
Баллы
230
Jr13San,
Интересная идея использования эвент-тегов с триггером. А триггерные предметы можно создавать в инвентаре, когда ГГ начинает совершать какое-либо действие или например переходит в боевой режим и все их удалять, когда выходит из него и может открыть инвентарь.
Да, я тоже об этом думал. Вообще то можно поставить триггер-скрипт, и при условии, что ГГ открывает инвентарь(BS_INVENTORY), удалять эти предметы(всмесле те, что для фиксирования фазы анимации), вот, и хранить кол-во предметов в переменной и создавать тогда, когда ГГ закрыват инвентарь и т. д. , но нужно сначала всё продумать...

Usagi,
Не знаю чем я могу тебе помочь, но попробуй написать свою функцию вот так:

func void main()
{
SetXP(oPC, 10000);
};

А может быть ты где-то не правильно, или точнее не в то место вставила свою функцию main(), или может быть так, что такая ф-ция уже существует и написана до твоей и данные берутся и операции выполняются от туда.

Посту ниже:

ukur, не плохая идёя использовать данную комбинацию, но я не уверен в том, что только в таком режиме можно открыть инвентарь(потому что есть такие люди, которые любой ценой поглядят на эту мульти итем:), т.е. есть такие читаки, которые могут послать ГГ на вейпоинт, и тогда твоя комбинация не будет работать и может быть в начатьный момент они смогут открыть инвентарь и получится так, что, например, ГГ идёт в город сам и у него открыт инвентарь), хотя для читаков не стоит и утруждаться ставить "защиту от дураков". И ещё, нужно просчитать время проверки данной комбинации состояний. Да, и ещё, похоже BS_INVENTORY - это одна из трещин движка, и не понятно когда она срабатывает.

Я думаю, что данная комбинация не во всех случаях сработает. Как, например, отследить анимацию поворота лебёдки, сидения на скамейке(ГГ будет не в боевом режиме и бует стоять, а потом будет проигрывать анимацию, вот в этот момент просто ничего нельзя отследить)? Я думаю не сработает. Нужно думать иную систему.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Jr13San,
Я уже как-то пробовал отследить открытие инвентаря через BS_INVENTORY - у меня не работало :) Зато например связка if(C_BodyStateContains(hero,BS_STAND)) - ГГ стоит на месте и if(Npc_IsInFightMode(hero,FMODE_NONE)) - ГГ не в боевом режиме отслеживается хорошо.
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Я бы не согласился с тем, что нельзя...
Посмотрел event теги и решил, а что если создать какой-то предмет в инвентаре(как мульти предмет) и поддерживать определённое кол-во этих предметов в инвентаре НПС(например, 1000), а во время анимации удалять определённое ко-во предметов данной инстанции(1000 - 800) и создать таймер(триггер + скрипт), который бы судил по разнице между начальным и конечным кол-вом данных предметов(осталось 200). Ну и пополнение предметов тоже надо реализовать либо через таймер, либо в самой фазе анимации.
А что касается смысла, то может пригодиться в уникальных анимациях.(т.е. тех, которых нет в "BS_" константах).

Тэги тэгами, но ты не сможешь вставить предмет, например, в цикле бега или, скажем, плавания. Предметы вставляются и удаляются только для специальных фаз на базе Sceme_name (это использование предметов или мобов). А тут уже можно использовать функцию диалога с мобом или ON_STATE- функцию для предмета. Вводим переменую и мониторим её значение. Таких фаз можно вводить сколько угодно- было бы желание их делать. Все прочие движения жёстко заданы и ничего нового тут реализовать нельзя (передвижение и боёвка).
Триггер скрипт штука незаменимая в некоторых случаях, но я лично отношу её к разряду "костылей" и пихать бы везде и всюду без надобности не стал. Часто возникает ситуации, когда всё работает, если играть "по правилам". Но стоит только геймеру сделать что-нибудь нестандартное, то могут вылезти дичайшие фатальные глюки. Если решение имеет хотя бы один возможный фатальный исход, оно уже нежизнеспособно.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
450
Благодарности
266
Баллы
230
Хорошо. Тогда такой вопрос: существует ли анимация, когда открывается инвентарь? или просто проигрывается S_RUN, а инвентарь показыватся на уровне движка?

Я просто хотел проиграть анимацию для ГГ, при условии, что у него открыт инвентарь.
Да толку то? всё равно движёк не позволяет делать ничего лишнего...
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Не существует. S_RUN (или S_WALK) в простое долбят цикл (на это в MDS-скрипте указывает префикс S_), и открытие инвентаря никак не влияет. Разве что только в тех случаях, когда ГГ в боевом режиме, движок автоматом переводит его в состояние простоя.
Нет ответа на главный вопрос: зачем нужна такая бесполезная функция, как отслеживание абстрактных фаз анимаций*???* Может, стоит описать проблему детальнее: что конкретно надо получить? Если это не военная тайна, конечно.
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Впрос такого плана: имеется каменная дверь и кнопка. Кнопка- обычний моб- подошёл и нажал. Дверь реализована как target-объект для кнопки и имеет два состояния: открыта и закрыта. При первом нажатии дверь открылась, при втором- закрылась. Всё работает.
Теперь нужно в определённый момент закрыть скриптом дверь (чтоб ГГ не убежал с поля боя) и чтоб она больше не открылась. Пробовал Wld_SetObjectRoutine(0,0,"BIG_DOOR",1), но ничего не работает*???*
 

Myxomop

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

Spielmann

Участник форума
Регистрация
22 Май 2010
Сообщения
106
Благодарности
7
Баллы
175
Імпорт моделей в 3ds max

Можно ли исправить скрипт імпорту моделей для Risen чтоби можна было імпортировать модели с Готики 3?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Re: Імпорт моделей в 3ds max

Думаю что нет, ибо этим по моему толком никто не занимается...
 

_ZEN_

Участник форума
Регистрация
9 Фев 2010
Сообщения
45
Благодарности
3
Баллы
170
Создал мир в 3dsMax, экспортировал плагином Керракса в .3ds, в Спэйсере из .3ds создал .zen, добавил в него разные объекты, потом заметил глюк, например, с полигоном. Подскажите, кто знает, как после поправок в 3dsMax, и получения после экспорта изменённого .3ds вернуть в него все объекты из старого .zen?
 

Wallerstein

Участник форума
Регистрация
26 Апр 2009
Сообщения
965
Благодарности
24
Баллы
195
_ZEN_
Сохранить зен как не компилированный, заменить 3DS файл в корневой папке с мешами миров, открыть некомпилированный зен, скомпиллировать зен, скомпилировать свет. Меш мира в зене заменится при компиляции
 

_ZEN_

Участник форума
Регистрация
9 Фев 2010
Сообщения
45
Благодарности
3
Баллы
170
Я правильно понял?.. После создания заготовки мира в 3dsMax и её экспорта, например, в world.3ds, я помещаю файл world.3ds в папку \_WORK\DATA\MESHES\LEVEL. Затем в Спэйсере:
File/Open Mesh. Загружаю \_WORK\DATA\MESHES\LEVEL\ world.3ds. 'Compile World' в главном меню, ‘outdoor’; ставлю галочку на ‘Editor Mode', ‘Compile’. Получаю в результате откомпилированный world.3ds. Сохраняю результат компиляции (‘Save Mesh’ из меню File) и перезаписываю исходный world.3ds в папке \_WORK\DATA\MESHES\LEVEL. Затем перезагружаю SPACER через File/Reset. Опять выбираю 'Open Mesh' из меню File и загружаю свой откомпилированный world.3ds . Далее,
'Compile World', ‘outdoor’, убираю галочку в ‘Editor Mode', ‘Compile’.
Из 3ds файла получаю ZEN файл. Сохраняю его: 'Save ZEN' из меню File в директории \_WORK\DATA\WORLDS\ как world.zen.
Добавляю объекты, монстров и т.п. в свой ZEN, периодически сохраняя его, как ZEN. Теперь, решаю изменить мир в 3dsMax. После конвертирования плагином Керракса, получаю новый world.3ds.
Далее, следуя Вашим рекомендациям, в Спэйсере открываю world.zen и сохраняю его, как некомпилированный . Если я делаю ‘Save Mesh’ из меню File, то появляется сообщение:
‘That works only in EditorCompiledMode’. Если делаю 'Compile World' в главном меню, ‘outdoor’; ставлю галочку на ‘Editor Mode', ‘Compile’, то мир на экране Спейсера исчезает и остаётся только небо. Далее делаю ‘Save Mesh’ из меню File. В результате создаётся файл world.3ds размером 48 байт!?
Поясните, пожалуйста более подробно, что означает «Сохранить зен как не компилированный», ведь само расширение ZEN указывает на то, что файл был получен в результате компиляции, как это сделать и куда сохранить, в папку \_WORK\DATA\WORLDS? «Заменить 3DS файл в корневой папке с мешами миров» - имеется ввиду папка \_WORK\DATA\MESHES\LEVEL?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
_ZEN_,
Не занимайся ерундой. Если у тебя есть исходный 3ds из которого ты ранее делал ЗЕН. Измени свой 3ds мешь как хочешь и в чем хочешь и сохрани также в 3ds в том же месте где он сейчас лежит.

Затем загрузи в спейсере твой текущий ZEN как "Uncompiled ZEN"


Перекомпилируй (т.к. в ZEN'е сохраняется информация о том, в какой поддиректории лежит исходный мешь, во время компиляции спейсер подхватит твой измененный мешь и заменит его в ZEN'е), полученный результат сохрани как ZEN, все.
 

_ZEN_

Участник форума
Регистрация
9 Фев 2010
Сообщения
45
Благодарности
3
Баллы
170
Всё, оказывается, так просто! Спасибо.
 

Wallerstein

Участник форума
Регистрация
26 Апр 2009
Сообщения
965
Благодарности
24
Баллы
195
Как можно к определенной части доспехов прилепить определенную систему частиц, учитывая что доспех сделан с нуля. Возможно надо какие то слоты в скелете добавить, или части меш - модели невидимые?
 
Сверху Снизу