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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

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

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Скрин свойств триггер-скрипта приведи. Может там что-то не так.
upload_2016-8-12_14-7-37.png

Я ждал этого вопроса.
Вот например обычная руна из ночь ворона:
Код:
instance ItRu_Thunderstorm(C_Item)
{
   name = NAME_Rune;
   mainflag = ITEM_KAT_RUNE;
   flags = 0;
   value = Value_Ru_Thunderstorm;
   visual = "ItRu_Water05.3DS";
   material = MAT_STONE;
   spell = SPL_Thunderstorm;
   mag_circle = 3;
   wear = WEAR_EFFECT;
   effect = "SPELLFX_WEAKGLIMMER_BLUE";
   description = NAME_SPL_Thunderstorm;
   text[0] = NAME_Mag_Circle;
   count[0] = mag_circle;
   text[1] = NAME_Manakosten;
   count[1] = SPL_Cost_Thunderstorm;
   text[2] = NAME_Damage;
   count[2] = SPL_DAMAGE_Thunderstorm;
   text[5] = NAME_Value;
   count[5] = value;
};
удали строку
effect = "SPELLFX_WEAKGLIMMER_BLUE";
И тогда будет без эффекта
Нужно удалить строчку в эффектах в инстанции VFX эффекта BERZERK.INIT.
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625
Нужно удалить строчку в эффектах в инстанции VFX эффекта BERZERK.INIT.
Ну, тоды и эффекта этого в игре не будет, и если к этому эффекту не только эта руна привязана, то косяков потом можно хапнуть.
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Ну, тоды и эффекта этого в игре не будет, и если к этому эффекту не только эта руна привязана, то косяков потом можно хапнуть.
Да не всю инстанцию то удалять надо, а строчку того эффекта, который привязан к визуалу BERZERK
 

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.119
Благодарности
584
Баллы
350
Я ждал этого вопроса.
Вот например обычная руна из ночь ворона:
Код:
instance ItRu_Thunderstorm(C_Item)
{
   name = NAME_Rune;
   mainflag = ITEM_KAT_RUNE;
   flags = 0;
   value = Value_Ru_Thunderstorm;
   visual = "ItRu_Water05.3DS";
   material = MAT_STONE;
   spell = SPL_Thunderstorm;
   mag_circle = 3;
   wear = WEAR_EFFECT;
   effect = "SPELLFX_WEAKGLIMMER_BLUE";
   description = NAME_SPL_Thunderstorm;
   text[0] = NAME_Mag_Circle;
   count[0] = mag_circle;
   text[1] = NAME_Manakosten;
   count[1] = SPL_Cost_Thunderstorm;
   text[2] = NAME_Damage;
   count[2] = SPL_DAMAGE_Thunderstorm;
   text[5] = NAME_Value;
   count[5] = value;
};
удали строку
effect = "SPELLFX_WEAKGLIMMER_BLUE";
И тогда будет без эффекта

А разве эта строчка
Да не всю инстанцию то удалять надо, а строчку того эффекта, который привязан к визуалу BERZERK
В нашем случае это "lightpresetname = "AURA";
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.777
Баллы
1.625

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
Открыть спойлер
По триггер-скрипту. Мне думается, что время задержки слишком велико. Зацикленная функция будет вызываться раз в секунду, что для логики её работы (перебор возможных вариантов) слишком редко.

По функции. Нет точки с запятой после блока сравнения часа. Нет блокировки вывода текста на экран, значений "t" и "m", если сравниваемые значения не совпадают с текущим временем. Поскольку переменные объявляются (обнуляются) в каждом цикле, то должны выводиться нули. Наверное, эти переменные должны быть глобальными, то есть объявленными вне функции. :oops:
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
По триггер-скрипту. Мне думается, что время задержки слишком велико.
Да вроде работало, не помню за давностью лет :)

По функции. Нет точки с запятой после блока сравнения часа.
А в оригинале она есть :D
https://worldofplayers.ru/threads/31401/#post-440054

Наверное, эти переменные должны быть глобальными, то есть объявленными вне функции. :oops:
Само собой!
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
По триггер-скрипту. Мне думается, что время задержки слишком велико. Зацикленная функция будет вызываться раз в секунду, что для логики её работы (перебор возможных вариантов) слишком редко.

По функции. Нет точки с запятой после блока сравнения часа. Нет блокировки вывода текста на экран, значений "t" и "m", если сравниваемые значения не совпадают с текущим временем. Поскольку переменные объявляются (обнуляются) в каждом цикле, то должны выводиться нули. Наверное, эти переменные должны быть глобальными, то есть объявленными вне функции. :oops:
Ага, ясно, ну время задержки поставил меньше. Пересмотрю еще функцию, вынесу переменные в общий файл.
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
По триггер-скрипту. Мне думается, что время задержки слишком велико. Зацикленная функция будет вызываться раз в секунду, что для логики её работы (перебор возможных вариантов) слишком редко.

По функции. Нет точки с запятой после блока сравнения часа. Нет блокировки вывода текста на экран, значений "t" и "m", если сравниваемые значения не совпадают с текущим временем. Поскольку переменные объявляются (обнуляются) в каждом цикле, то должны выводиться нули. Наверное, эти переменные должны быть глобальными, то есть объявленными вне функции. :oops:
И мне немного не понятно, что за блокировка вывода на экран. Мне бы попроще как нибудь. Этих блокировок у меня в функциях столько, что я уже запутался.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
что за блокировка вывода на экран
Ну, как мне кажется, если переменные t и m обнуляются в каждом цикле, а изменяются лишь иногда, когда переменные time_hour и time_minutes совпадают с текущим временем, то бОльшую часть циклов на экран будет выводиться "00:00", а уже на это будет накладываться правильное время. Если же переменные t и m объявить, как глобальные, то такого не будет происходить.
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Это точно не троллинг? Ты не прикалываешься? Как можно на полном серьёзе задавать такие вопросы?

Функция типа int сама по себе принимает какое-то значение и её можно использовать в условиях наравне с переменной:


Поскольку твоя функция прописана в скриптах, ты можешь использовать её в необходимых тебе целях, просто проверив её значение в условии.

Никакой "conditionFunc по-умолчанию" не существует. Если в свойствах объекта ничего не прописано, то движок в скриптах ничего не ищет. Если прописано допустимое название функции, то движок будет искать ИМЕННО её и ТОЛЬКО её.

Тогда поясни почему во всех 3 игровых мирах Пираний, во всех предметах строчка conditionFunc пустая и всё работает?
Если conditionFunc должна возвращать куда-то 1 или 0.
Если она возвращает и у нас не прописана функция = куда именно происходит операция записи значения 1 или 0?

Но вместо "ничего" у нас на экран выводится строчка "И как я это сделаю?" - значит без прописи функции conditionFunc сохраняет значение, но куда? (при закрытом замке на именной ключ (двери, сундука и т.д.))
 
Последнее редактирование:

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Ну, как мне кажется, если переменные t и m обнуляются в каждом цикле
А где это переменные обнуляются в каждом цикле, помоему они только обновляются?

то бОльшую часть циклов на экран будет выводиться "00:00", а уже на это будет накладываться правильное время.
Нет, эти переменные будут выводить сохраненные на данный момент времени данные.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
Но вместо "ничего" у нас на экран выводится строчка "И как я это сделаю?"
Если у ГГ нет ключа/отмычек/навыка, движок вызывает ещё какую-то или какие-то скриптовые функции, из которых и воспроизводятся реплики ГГ и формируются надписи на экране. Я со скриптами Г2 не сильно знаком. Если тебе интересно, можешь поискать сам, начиная с фразы "И как я это сделаю?" Используя поиск по проекту, это можно сделать за минуту.

А где это переменные обнуляются в каждом цикле, помоему они только обновляются?
Гм, а разве при объявлении переменной ей не присваивается нулевое значение?
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Если у ГГ нет ключа/отмычек/навыка, движок вызывает ещё какую-то или какие-то скриптовые функции, из которых и воспроизводятся реплики ГГ и формируются надписи на экране. Я со скриптами Г2 не сильно знаком. Если тебе интересно, можешь поискать сам, начиная с фразы "И как я это сделаю?" Используя поиск по проекту, это можно сделать за минуту.

Максимум можно проследить до B_RefuseAction.d

func void player_mob_missing_item()
{
Print(PRINT_MissingItem);
AI_PlayAni(self,"T_DONTKNOW");
B_Say_Overlay(self,self,"$MISSINGITEM");
};

И не одна из функций не является INT.
Смотрим справку VAM = void - пустой тип.
Смотрим дальше, useWithItem наиболее вероятно связана с player_mob_missing_item.

Далее связей не прослеживается, а нам нужно с conditionFunc связь найти.

Вопрос: где её искать?

А т.к. объектов с аналогичной структурой множество один из двух вариантов:

Или хранит данные об conditionFunc того, что в зоне зрения ГГ - но будут глюки если выйти из зоны зрения ГГ и снова зайти на зону в которой мы были и мы видим предметы не изменили своих значений - открытые двери так и остались открытыми.
Значит второй вариант: где-то хранится массив данных обо всех conditionFunc для vob и под каким номером будет нам нужная дверь в массиве (угадай) + найди этот массив данных.

Но при смене локации в виде загрузки save или перехода на новую локацию все conditionFunc переводятся в состояние FALSE (это касается всех видов дверей, а вот как с сундуками дело происходит - не знаю точно, т.к. сундуки после вскрытия не остаются с откинутой крышкой).

В теории есть вероятность, что в загружаемую часть информации которую мы видим глазами ГГ и входит часть данных массива conditionFunc - что уже является движком игры, не чисто скриптовым уровнем.
 
Последнее редактирование:

Myxomop

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

Цитата из документации к спейсеру G1.
Lokale Variablen in Funktionen werden wie globale Variablen behandelt und behalten ihren Wert bei Verlassen der Funktion. Sie werden also nicht temporär erzeugt und anschliessend wieder gelöscht, wie es bei C++ der Fall ist.
Перевод: Локальные переменные в функциях обрабатываются как глобальные переменные и сохраняют свое значение при выходе из функции. Таким образом, они не генерируются временно, а затем удаляется, как в случае с C ++

http://www.worldofgothic.de/dl/download_28.htm
http://www.worldofgothic.de/dl/download_32.htm

Видимо локальные переменные живут до конца сессии игры.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
Но при смене локации в виде загрузки save или перехода на новую локацию все conditionFunc переводятся в состояние FALSE.
Если тебе нравится пребывать в плену своих иллюзий - флаг в руки. Но всё что мог, я про CF уже написал.

Смотрим дальше, useWithItem наиболее вероятно связана с player_mob_missing_item.
Здесь указывается инстанция предмета, который должен быть в инвентаре или слотах (руки, например) ГГ для разрешения взаимодействия с объектом. Указанный в свойствах объекта предмет фигурирует в сценариях анимаций взаимодействия уже без указания инстанции.

Видимо локальные переменные живут до конца сессии игры.
А как же тогда локальные переменные при выполнении функций распорядков? Один и тот-же распорядок могут выполнять ОДНОВРЕМЕННО десятки неписей, и у каждого непися будет своё значение какой-нибудь переменной random. Впрочем, движок может, и наверняка так и делает, выполнять функции ИИ разных неписей по очереди, поэтому одноимённые переменные не пересекаются.

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

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Если тебе нравится пребывать в плену своих иллюзий - флаг в руки. Но всё что мог, я про CF уже написал.

Точно у меня иллюзия, открой дверь save и снова загрузи этот же save - после скажи дверь осталась открытой или она оказалась закрытой.
И после поясни если дверь оказалась закрытой, по какой причине она оказалась закрытой.

Флаг в руки.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
по какой причине она оказалась закрытой
Это просто. В файле сохранения движок не запоминает состояние объектов. При инициализации мира все они переводятся в начальное значение. Почему разрабы выбрали этот подход, не скажу. Не знаю. В файле сохранения запоминается куча всего, в том числе, состав и координаты ВСЕХ объектов игрового мира. Почему бы не запоминать ещё немного, ума не приложу.
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Это просто. В файле сохранения движок не запоминает состояние объектов. При инициализации мира все они переводятся в начальное значение. Почему разрабы выбрали этот подход, не скажу. Не знаю. В файле сохранения запоминается куча всего, в том числе, состав и координаты ВСЕХ объектов игрового мира. Почему бы не запоминать ещё немного, ума не приложу.

Всё просто, чтобы не реализовывать закрывание дверей NPC. Пусть у людей складывается впечатление, что двери когда-то и кто-то закрывает.
Теперь вспомним сколько дверей у нас в Хоринисе? (Почему все дома без дверей, чтобы люди играющие в игру не увидели, что-то что было не реализовано)

Classes.d и Constants.d и AI_Constants.d массива который не имеет чёткого числа не найдено, а у нас каждый oCMOB снабжён conditionFunc (т.е. на каждой локации нужно запоминать от n-сотен до n-тысяч таких conditionFunc)

Итог: массива conditionFunc мне не удалось найти. Вот к Вам обратилось, может Вам удалось найти т.к. расширители движка делали = значит движок уже изучали и могли что-то найти.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Так что не всё тут так однозначно.
Ну по крайней мере у меня эта функция работает и отображает правильно время именно в том виде, как была описана в оригинальном ответе за 2010 год, сегодня перепроверил ради интереса.
 
Сверху Снизу