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

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

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

MaGoth

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

Вложения

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

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
444
Благодарности
264
Баллы
230
Любые параметры gothic.ini можно перенсти в ini мод файла.

[OVERRIDES]
GAME.invCatOrder=COMBAT,POTION,FOOD,ARMOR,MAGIC,RUNE,DO CS,OTHER,NONE

Хм.. только странно, что нужно писать эти параметры в свитке "переопределённых", а не в том, в каком должен находиться параметр.
Очень странно...
По идее те параметры, что написаны в моём ini должны проинициализироваться и отразиться в проекте, а те парамерты, что я не указал - должны быть по умолчанию или браться из Gothic.ini.
Как-то так..
В принципе почти без разницы где править. Ведь есть функция замены одних значений другими, поэтому не так уж и долго. Я думаю, мало функций, которые проверяют флаги, прежде чем использовать предмет...
Всё равно полезная вещь ini, если таким образом настройки делать. Я просто не внедрялся глубоко в смысл этих значений и не заметил обращение такого типа: "INTERNAL.extendedMenu=1"

maggi1221, на счёт твоих возражений на фразу "Кто-то с форума писал о рейдах на РБ" - это можешь адресовать тому, кому это нужно было. Может быть я просто не удачно выразился? Или ты ярый фанат онлайн-игр?

можно сделать DummyInvisible Mob Object с кучей анимаций. Попробуй, что из этого выйдет)
Невозможно заставить PC_Hero взаимодействовать с mob-объектом или с предметом из инвентаря, если он сам того не хочет.
Поэтому большинство вариантов сразу отпадает.
Есть только вариант привязки предмета к определённому слоту в качестве "части тела" меша персонажа. Но только проблема в том, что придётся делать кучу мешей - с каждый предметом! И при визуализации нового меша возможна задержка в отрисовке персонажа. На более мощных машинах это должно быть менее заметно.

Кто броню одевал на довольно сильной машине, как, мелькает перерисовка или не заметно?

поподробнее можно?
http://forum.worldofplayers.ru/showthread.php?t=31401
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Как-то видел это не нужное создание. Думаю людям просто нечем заняться было.
Есть, конечно, нормальные проекты как у немцев, так и у других, но мультиплеер - это уже слишком. Кто-то с форума писал о рейдах на РБ. Понятно к чему это клонит. Хотя мб движение идёт ближе к Руне или другим похожим проектам.

maggi1221, причём хотят выделять сервера для этого мультиплеера...
Не знаю, мб ты фанат линейки или как, но я лично нет.
Ладно, заканчиваю офф топ.
Так то оно так,я согласен что гмп - УГ причем страшное, но сам факт, что работает на данный момент достаточно стабильно, заставляет задуматся=)
Да и вообще, мое мнение, нужно прогресировать, любыми методами....

Bump: И вот еще, классы чисто скриптами новые не добавить....
Тк по сути, это классы двига (C_NPC это кусочек класса oCNpc , в который перенесены некоторые поля oCNpc, да и система инициализации класа довольное "замудреная")
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Как создать/найти комнаты в спейсере?
я про те, что используются в функциях:

Wld_AssignRoomToGuild
Wld_AssignRoomToNpc
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Открываеш мир в EditorMode и смотришь имена материалов на порталах в помощениях(черный полигон на дверях), советую прочесть про систему индор/аутдор

ЗЫ: Только учти, у тебя должен быть 3ds исходник зена, чтобы это глянуть.
 

Fase

Участник форума
Регистрация
12 Янв 2011
Сообщения
208
Благодарности
3
Баллы
170
Извиняюсь за глупый вопрос.Когда открываю в spacer *.zen файлы лежащие в распакованной гоитке 2 возвращение 1.1(_work\data\worlds\newworld\... ) выскакивает окно
Код:
 Compile...
                  
          Options                     Engine 
         Delect Leaks                   Indoor
       Quick compile                  Outdoor
      Polycheck              



     Editormode  (for mesh-operations)


          Cancel                                                               Compile
 

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.048
Благодарности
1.163
Баллы
340
В чем суть вопроса то?
Куда что тыкать?
Для Нью Ворлд снимаешь галочку с Эдитор мод и ставишь Оутдор, затем компил.
Вообще такое окно при открытии зена бывает, если ты выбрал режим uncompilled.
Компилированные зены открываются сразу же.
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Как изменить дальность стрельбы? всмысле что за параметр отвечает за это и где он?
смотрел в perceptions, смотрел HitChance. остался еще 1 вариант - параметр range у луков и арбалетов... ведь дальность махания мечем это тоже range...
PS: хотел вернуть прежнюю дальность стрельбы, ограниченную Возвращением 1.1

Извиняюсь за глупый вопрос.Когда открываю в spacer *.zen файлы лежащие в распакованной гоитке 2 возвращение 1.1(_work\data\worlds\newworld\... ) выскакивает окно
Такое тоже у меня было, когда ZEN лежит не там, где он должен быть, а он должен быть в директории игры в правильных папках:
\_work\data\worlds\newworld\newworld.zen - рекомендую сделать еще 1 ZEN как резервную копию, так как иногда спейсер зависает во время сохранения. Хотя, оно длится довольно долго, нужно просто ждать и ничего не нажимать....
Есть тема по спейсеру: http://forum.worldofplayers.ru/showthread.php?t=12168
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
444
Благодарности
264
Баллы
230
Хм.. Интересно, кто-нибудь разбирался в настройках, в ini файле, в ветке "KEYS"?
По параметрам можно догадаться к чему каждый относится.
Вроде шестнадцатиричная система, а значения не понятно от куда такие берутся...
Или это разработчики так шифруют, чтобы сложно было исправить что-то?...
С другой стороны можно найти код каждой клавиши путём изменения настроек. Затем делать выводы. При условии, что нету мыслей на счёт того, откуда эти значения, можно просто записать как "константную" таблицу. Не знаю как для других систем, мб те же самые значения...
С одной стороны один ключ может принимать одновременно 2 значения, т.е. 2 байта.
С другой стороны можно было бы взять 2 байта и зашифровать их так, как шифруют RGB цвета...
Но тут всё по-разному.
А с третей стороны используемые ключи или клавиши ограничены в пределах сотни. Т.е. тут можно использовать другую систему шифрования данных.
[KEYS]
keyEnd=0100
keyHeal=2300
keyPotion=1900
keyLockTarget=4f00
keyParade=cf000d02
keyActionRight=d100
keyActionLeft=d300
keyUp=c8001100
keyDown=d0001f00
keyLeft=1000
keyRight=cd000b02
keyStrafeLeft=d3001e00
keyStrafeRight=d1002000
keyAction=0c021200
keySlow=2a003600
keySMove=9d003900
keyWeapon=02000300
keySneak=2d002e00
keyLook=13005200
keyLookFP=21005300
keyInventory=0f000e00
keyShowStatus=3000
keyShowLog=31002600
keyShowMap=3200
 

Fase

Участник форума
Регистрация
12 Янв 2011
Сообщения
208
Благодарности
3
Баллы
170
Помогите пожалуйста.Я сделал так чтобы ГГ мог жарить мясо на плите несколько штук за один раз.НО выходит баг.Получается даже если у ГГ нету сырого мяса,но есть сковорода и на плиту нажать левой мышкой,а после этого нажать закончить,то у ГГ в инвентаре появляется и мясо.Как это убрать?


Вот скрин как у меня прописано в спейсере:
 

Вложения

  • Снимок.JPG
    Снимок.JPG
    445,7 KB · Просмотры: 293

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
1)
Чем отличается использование ф-ии
Npc_ChangeAttribute(oth,ATR_HITPOINTS, -oth.attribute[ATR_HITPOINTS]);
от например этого (т.е прямого присвоения)
oth.attribute[ATR_HITPOINTS] = 0;
?

2)
Как узнать, нанес ли ГГ критический удар НПЦ в функции func void B_AssessDamage() ?
на данный момент есть 1 вариант, но некрасивый:
используя AIV AIV_HitByOtherNpc, сохранять кол-во здоровья НПЦ. а потом анализировать...
для чего это нужно? чтоб сделать физику магического посоха близкой к физике обычного оружия...
есть еще 1 вариант: с ним связан след. вопрос.

3)
Как (или в каком месте) можно перехватить старт игры? (это может быть загрузка из сохранений или новая игра) ? - самый важный вопрос...
вариант с триггерами не нравится, есть более элегантное решение?
зы: одноразовый перехват для настройки мира...
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Помогите пожалуйста.Я сделал так чтобы ГГ мог жарить мясо на плите несколько штук за один раз.НО выходит баг.Получается даже если у ГГ нету сырого мяса,но есть сковорода и на плиту нажать левой мышкой,а после этого нажать закончить,то у ГГ в инвентаре появляется и мясо.Как это убрать?


Вот скрин как у меня прописано в спейсере:

Во первых, используй сырое мясо вместо сковороды в спейсере в качестве объекта взаимодействия.
Во вторых: при добавлении новых диалогов нужно начать игру заново, иначе не увидишь их!
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Чем отличается использование ф-ии
Npc_ChangeAttribute(oth,ATR_HITPOINTS, -oth.attribute[ATR_HITPOINTS]);
от например этого (т.е прямого присвоения)
oth.attribute[ATR_HITPOINTS] = 0;
Практически нечем, присвоение идет самым обычным образом, через оператор присвоения, только тут есть доп плюшки, например если нпс гг, и включен режим "god mode" то аттрибуты не изменятся, если-же напрямую менять то изменится.

А так, разницы нету.


секция Init секции стартапа, она вызывается каждый раз при начале/загрузке новой игры.
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
вроде эта... func void INIT_NewWorld()

добавил в конец код, меняющий параметры мяса, изменений не заметил, даже стартовав новую игру.

func void INIT_NewWorld()
{
B_InitMonsterAttitudes();
B_InitGuildAttitudes();
B_InitNpcGlobals();
b_enter_newworld();
.....
INIT_SUB_NewWorld_Part_City_01();
INIT_SUB_NewWorld_Part_Farm_01();
INIT_SUB_NewWorld_Part_Xardas_01();
INIT_SUB_NewWorld_Part_Monastery_01();
INIT_SUB_NewWorld_Part_GreatPeasant_01();
INIT_SUB_NewWorld_Part_TrollArea_01();
INIT_SUB_NewWorld_Part_Forest_01();
INIT_SUB_NewWorld_Part_Pass_To_OW_01();
....

// вот мой код, он почему-то не работает
ItFoMutton.value = 1217;
ItFoMutton.count[1] = 94;
};
 

Fase

Участник форума
Регистрация
12 Янв 2011
Сообщения
208
Благодарности
3
Баллы
170
Во первых, используй сырое мясо вместо сковороды в спейсере в качестве объекта взаимодействия.
Во вторых: при добавлении новых диалогов нужно начать игру заново, иначе не увидишь их!


Использоывал сырое мясо.В итоге сковорода теперь добовляется.Причем если нажать "закончить" то мясо само с собой жарится(исчезает одно сырое,добавляется одно жареное и при этом ещё и сковорода добавляется)
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
вроде эта... func void INIT_NewWorld()

добавил в конец код, меняющий параметры мяса, изменений не заметил, даже стартовав новую игру.

func void INIT_NewWorld()
{
B_InitMonsterAttitudes();
B_InitGuildAttitudes();
B_InitNpcGlobals();
b_enter_newworld();
.....
INIT_SUB_NewWorld_Part_City_01();
INIT_SUB_NewWorld_Part_Farm_01();
INIT_SUB_NewWorld_Part_Xardas_01();
INIT_SUB_NewWorld_Part_Monastery_01();
INIT_SUB_NewWorld_Part_GreatPeasant_01();
INIT_SUB_NewWorld_Part_TrollArea_01();
INIT_SUB_NewWorld_Part_Forest_01();
INIT_SUB_NewWorld_Part_Pass_To_OW_01();
....

// вот мой код, он почему-то не работает
ItFoMutton.value = 1217;
ItFoMutton.count[1] = 94;
};

хЗ, лучше поставь вывод строки на экран по времени(секунд на 20 чтоб наверняка)
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Fase написал(а):
Использоывал сырое мясо.В итоге сковорода теперь добовляется.Причем если нажать "закончить" то мясо само с собой жарится(исчезает одно сырое,добавляется одно жареное и при этом ещё и сковорода добавляется)
Значит перечитай еще раз http://dimmell.com/forum/23-202-1
Написано же русским языком:
- при жарке на плите и сковороде движок забирает прописанную в строке useWithItem инстанцию: в случае плиты - сковородку, в случае сковородки - мясо. И добавляет в обоих случаях жареное мясо. Поэтому приходится корректировать количество вручную - при жарке 1 рыбы на плите изымать из инвентаря 1 кусок жареного мяса и добавлять 1 сковородку, при жарке на сковородке 1 рыбы приходится изымать 1 жареное мясо и добавлять 1 сырое.

maggi1221 написал(а):
добавил в конец код, меняющий параметры мяса, изменений не заметил, даже стартовав новую игру.
Если бы все так просто было. :D
Надо вначале получить ссылку на инстанцию.
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Надо вначале получить ссылку на инстанцию.
спс за совет, я поначалу о другом подумал...

Если кому-нибудь понадобится эта "техника" обновления предметов, то вот пример:

добавить в конец функции func void INIT_NewWorld (а также во все др. миры) следующий код:

if (Npc_HasItems(hero, ItFoMuttonRaw))
{
ItFoMuttonRaw.description = "Не ешьте сырое мясо";
};


Возник еще 1 вопрос:
как обойти это ограничение, когда нет возможности делать определения функций (definition). из-за этого приходится мудрить с порядком следования файлов в Gothic.src - очень неудобно...
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Заклинание Ледяная глыба наносит урон во времени (+заморозка) - это я нашел в скриптах.

Заклинание огненная стрела вызывает горение цели, что сопровождается повреждением здоровья во времени... Но это в скриптах не нашел, есть подозрения что это анимация горения наносит повреждения, но как тогда на это влияет интеллект? Вернее, он влияет, только на начальный, стартовый урон.

PS: возвращение 1.1
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
подозрения что это анимация горения наносит повреждения

Чего-чего? Анимация наносит урон? :D:D
Анимация - это движения. Она не может наносить урон...
Подозреваю, что после того, как непися атакуют огненной магией, он переходит в какое-то состояние, пребывание в котором и наносит ему урон... хотя это всего лишь догадки
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Заклинание Ледяная глыба наносит урон во времени (+заморозка) - это я нашел в скриптах.

Заклинание огненная стрела вызывает горение цели, что сопровождается повреждением здоровья во времени... Но это в скриптах не нашел, есть подозрения что это анимация горения наносит повреждения, но как тогда на это влияет интеллект? Вернее, он влияет, только на начальный, стартовый урон.

PS: возвращение 1.1

В момент попадания стрелы в нпс, запускается состояние Zs_burn это одна из версий, вторая версия двиг готы поджигает и наносит дамаг

Bump:
спс за совет, я поначалу о другом подумал...

Если кому-нибудь понадобится эта "техника" обновления предметов, то вот пример:

добавить в конец функции func void INIT_NewWorld (а также во все др. миры) следующий код:

if (Npc_HasItems(hero, ItFoMuttonRaw))
{
ItFoMuttonRaw.description = "Не ешьте сырое мясо";
};


Возник еще 1 вопрос:
как обойти это ограничение, когда нет возможности делать определения функций (definition). из-за этого приходится мудрить с порядком следования файлов в Gothic.src - очень неудобно...

Никак. это причуда двига готы, а сорсер - это таже самая гота только в другом исполнении.
 
Сверху Снизу