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

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

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

MaGoth

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

Вложения

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
kraw написал(а):
При создании мода возникла проблема. Нужно в некий момент (определяется в диалоге) очистить некую WP и ее окрестности от живности (чтобы не сломать сюжет).

Единственное, что пришло в голову, это переопределить монстров (сделать "именными") и удалить или умертвить их из скрипта диалога.

Но тут есть сложность, чтобы нормально пройти, придется начать игру заново. А хотелось бы сохранить преемственность между релизами мода (тем более, что его разработка вышла на финишную прямую).

Может есть какие приемы для решения этой задачи?
Эм... а RemoveHpc /монстр не работает чтоли?
Или можно написать новую аналогичную функцию, со вставкой и удалением непесей и запускать ее из диалога с переборкой всех ближайших точек, на предмет удаления живности. Например, если жив монстр/Нпс, значит удаляем его из мира, и т.д. Ну а потом обратно восстановить когда потребуется, или я что-то не допонял по вопросу? ::)
 
Последнее редактирование модератором:

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
я понял в чем проблема.
Как вариант: в диалоге вставляем на тот вайпойнт например, жука. и через его восприятие Wld_DetectNpc убираем монстров. Правда, такой фокус сработает, только когда ГГ войдёт в зону , когда игра начнет обрабатывать жизненный цикл жука. И главное, чтоб зона видимости тех монстров была меньше этого расстояния обработки игры. Иначе монстры исчезнут "на глазах". В-общем, можешь проверить.
-------------------

Либо поработай с жизненным циклом самих монстров, хотя опять же всё сработает, только в момент обработки игрой этих монстров.
 
Последнее редактирование модератором:

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
redleha
А не проще ли через:
if(Npc_GetDistToWP(hero,"SPAWN_OW_SHADOWBEAST_10_01") < 4000 ?
А дальше - хочешь скриптом, хочешь мечом-магией через счетчик.
 
Последнее редактирование модератором:

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
redleha написал(а):
я понял в чем проблема.
Как вариант: в диалоге вставляем на тот вайпойнт например, жука....

В одном случае точно сработает. Когда надо убрать кротокрысов из пещеры около прохода в орочьи земли в Минентале (Г1). А вот на открытых пространствах... не уверен, что прием сработает. Буду пробовать.

Тут важно, что жук окажется к ГГ ближе чем монстры и, возможно прием удастся.
 
Последнее редактирование модератором:

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
С кротокрысами в пещерами разобрался. Теперь новая проблема.

Есть персонаж вне гильдий, 5 уровень. Идут они с ГГ, ГГ использует свиток превращения в шершня, персонаж в панике убегает. Как бы избежать подобного исхода?
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
kraw написал(а):
С кротокрысами в пещерами разобрался. Теперь новая проблема.

Есть персонаж вне гильдий, 5 уровень. Идут они с ГГ, ГГ использует свиток превращения в шершня, персонаж в панике убегает. Как бы избежать подобного исхода?
не знаю как в первой готе, во второй можно:
1) установить взаимоотнощение НПСа с гильдией шершней.
2) присвоить на время НПСу aivar[AIV_ENEMYOVERRIDE]=TRUE;
3) просто копнуть функции B_AssessPlayer() и B_AssessEnemy() - проще всего и логичнее.
 
Последнее редактирование модератором:

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
redleha написал(а):
1) установить взаимоотнощение НПСа с гильдией шершней.

Ну тогда у персонажа станут неадекватными отношения с шершнями. Кроме того ГГ может превращаться не только в шершней. Да и этот пресонаж не единственный, с кем такое случается.

redleha написал(а):
2) присвоить на время НПСу aivar[AIV_ENEMYOVERRIDE]=TRUE;

А на какое время? Это же может случиться не только во время сопровождения ГГ.

redleha написал(а):
3) просто копнуть функции B_AssessPlayer() и B_AssessEnemy() - проще всего и логичнее.

Ну разве что в эту сторону копнуть.


PS: Подозреваю, что этот эффект - неотъемлимое свойство движка и с этим следует смириться.
 
Последнее редактирование модератором:

Looker

Участник форума
Регистрация
26 Мар 2009
Сообщения
13
Благодарности
0
Баллы
150
Всем привет, кто меня знает *flowers*
Не нашел подходящей темы (может просто потому, что я новенький здесь?)

Товарищи гуру, подскажите пжлст, как можно расшифровать в зен-файлах параметр trafoOSToWSRot ?
Объекты без ротации имеют значение raw:0000803f0000000000000000000000000000803f0000000000000000000000000000803f

остальные варианты значений поворота - набор 16-ричных знаков.
По логике вещей, здесь должно быть три флоат-числа - для обозначения поворота по каждой из осей.
Всего 72 знака, т.е. 24 символа на число. Буква f стоит вообще странно. Причем меняет свое положение.
Может этот момент всем известен, а я колесо, как обычно изобретаю?
Спасибо.

ПС. А может это не float вообще?

upd. Утром лезут свежие мысли (особенно, если всю ночь не спать, случайно заигравшись )) )
Судя по всему, это 9 4-хбайтных хекс-чисел, или соотв. матрица 3*3 )

Соответствено, матрица всего мира (никуда не перевернутого):
00 00 80 3f 00 00 00 00 00 00 00 00
00 00 00 00 00 00 80 3f 00 00 00 00
00 00 00 00 00 00 00 00 00 00 80 3f

или (что это означает)
1 0 0
0 1 0
0 0 1

А объект (первый попавшийся), перевернутый лицом назад (на сколько-то градусов по У):
0e f9 7f bf 00 00 00 00 10 fc 6e bc
00 00 00 00 00 00 80 3f 00 00 00 00
10 fc 6e 3c 00 00 00 00 0e f9 7f bf
, что действительно похоже на формулу афинного поворота по оси у:
cos(f) 0 sin(f)
0 1 0
-sin(f) 0 cos(f)

осталось дошурупить, каким это образом эти hex-числа можно перевести в нормальные цифры...
Судя по всему, знаковый бит - восьмой справа, те "-1"должно выглядеть как 000080bf
Итак, задачка: что это за форма представления чисел, что:
(0e f9 7f bf)^2 + (10 fc 6e bc)^2 = 00 00 80 3f (1)
)))
 
Последнее редактирование модератором:

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Мне вот тоже интересно, как в ЗЕНах прописываются порталы, если смотреть в блокноте. ;)
Но, похоже, никто не знает. :)
 

Looker

Участник форума
Регистрация
26 Мар 2009
Сообщения
13
Благодарности
0
Баллы
150
Короче, чего я буду всех доставать? ::) Как и можно было предположить, все это - наверняка какая-нибудь типичная форма представлений флоат-чисел.
Быстренько написал сейчас конвертор, и вот, к примеру, имеем:
Оригинал: 0ef97fbf0000000010fc6ebc000000000000803f0000000010fc6e3c000000000ef97fbf
Результат:
-0.99989402
0.00000000
-0.01458646

Все это, как я уже говорил, синусы/косинусы.

ПС. Разработчикам нового движка на заметку ;)
 

Дедушка

Участник форума
Регистрация
4 Ноя 2008
Сообщения
3.153
Благодарности
774
Баллы
325
не знаю куда обратиться за помощью, необходима помощь старому чайнику
проблема- пытаюсь совместить мод пак Г 3 с квест паком 3, выложу в личку что сделал, вернее что посоветовали на другом форуме
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.862
Благодарности
6.742
Баллы
1.625
stp, не нужно вылаживатьв личку, еслихочешьчтобпомогли- выложи публично,и тебе помогут. не оздавай боьлше такихпостов. Ок?
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Есть функция:
void Wld_SpawnNpcRange (c_npc self, int npcInstance, int number, float time); - НПС self около себя создает НПС (ссылка на него npcInstance) количеством number на время жизни time. Используется в заклинаниях вызова.
Кто-нибудь разобрался с "временем жизни"?
Жрет любые значения - целые, с точкой и без - результат одинаков.
И, вообще, как понимать:
float - число с плавающей точкой
если
const float NPC_COLLISION_CORRECTION_SCALER = 0.75;
const float VIEW_TIME_PER_CHAR = 550;
И что имелось ввиду под "числом с плавающей точкой"? ???
 
Последнее редактирование модератором:

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Dimmell
И что имелось ввиду под "числом с плавающей точкой"?
Если брать по C++ то это число от 3.4 * (10**-38) до 3.4 * (10**+38) в памяти занимает 4 байта…
Проще… число которое имеет запятую в числе… к примеру число 2.3 может иметь тип Float… тип Int имеет целое число, например – 3…
Проще будет узнать про типы, взяв учебник по программированию для начинающих, и посмотреть классификацию типов данных ;) :)
 
Последнее редактирование модератором:

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Geor'G
А я думал, кто мне поможет! :)
Напиши, ПЛЗ, работающее значение time для времени жизни 2 мин для этой функции:
void Wld_SpawnNpcRange (c_npc self, int npcInstance, int number, float time)
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Dimmell
Призвать 3 мясных жука, ровно на 2 минуты ::)
Wld_SpawnNpcRange(hero, Meatbug, 3, 2000) ;)
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Geor'G написал(а):
Dimmell
Призвать 3 мясных жука, ровно на 2 минуты ::)
Wld_SpawnNpcRange(hero, Meatbug, 3, 2000) ;)
Фактическое время жизни - 5мин 16 сек. ;)
Как и при любых других значениях. :D
 
Последнее редактирование модератором:

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Dimmell
Ошибся, здесь не как обычно в 1 минуте 1000 мсек, как-то по другому игра считает ::)
Надо поставить 500... тогда будет жить 2 минуты *flowers*

З.Ы. посмотри instance Spell_SummonWolf(C_Spell_Proto) там вызов "Рунного Волка"рассчитано на 2 мин (как раз из аддона"Возвращение") ;)

Пост ниже:
Откуда такая уверенность?
А я проверил ::), живет две минуты :p... Хм... может у тебя баг какой :-\
 
Последнее редактирование модератором:

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Geor'G написал(а):
Dimmell
Ошибся, здесь не как обычно в 1 минуте 1000 мсек, как-то по другому игра считает ::)
Надо поставить 500... тогда будет жить 2 минуты *flowers*

З.Ы. посмотри instance Spell_SummonWolf(C_Spell_Proto) там вызов "Рунного Волка"рассчитано на 2 мин (как раз из аддона"Возвращение") ;)
Откуда такая уверенность?
Я уже начинаю ощущать себя полным идиотом. :D :D
По барабану:
что 100, что 500, что 1000, что 0.001 (полный список очень длинный) - время жизни 5 мин. 16+-1сек.
Даже при значении "0"и отрицательных.

Поизвращавшись с const int MONSTER_SUMMON_TIME = 60; (переведя ее в переменную и переприсваивая значения) также ничего не добился. Время убито впустую, но с безценным опытом. :)
 
Последнее редактирование модератором:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
@Dimmell
А ты НоДвд и прочие отлучалки не юзаешь случаем?! ::)
Проблема может быть в них ибо они движок лагают. Что до остального, то там все правильно значения времени изменяются, Георг верно говорит. ;)
 
Сверху Снизу