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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

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

MaGoth

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

Вложения

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

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.172
Благодарности
6.153
Баллы
1.565
1594196140790.png
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.336
Благодарности
3.181
Баллы
525
Имеет ли смысл заморачиваться и что-то там делать?
Имеет смысл заморачиваться только там, где нужно снять только один флаг из нескольких. В большинстве же случаев это не актуально.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
674
Благодарности
655
Баллы
245
Небольшой вопрос.
Почему для Spell_Transform нет соответствующей функции Spell_Cast_Transform?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.802
Баллы
995
neromont, наверное от того что все что использует данная система "трансформация" юзается в двиге напрямую, потому и нет нужны в этом.. :)
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Тем не менее, отсутствие в скрипте этого блока, не говорит о том что он не будет работать при добавлении. Если ее добавить, должна вызыватся. А вообще, описания принципов работы спеллов в готане практически нету, нужно исправлять.
 

LikerGothic


Модостроитель
Регистрация
11 Фев 2017
Сообщения
1.490
Благодарности
2.100
Баллы
365
Кто знает, где хранится информация о том, какой радиус поражения будет у заклинания (к примеру, огненная буря, у которой огонь расходится в стороны).
В PFX или VisualFX? Если там, то какой параметр?
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.814
Баллы
240
LikerGothic, судя по всему в PFX поле shpDim_S
C++:
    // 2) Emitter: raeumliches Austoss-Verhalten
    zSTRING                    shpType_S;                    //    "point, line, box, circle, sphere, mesh"
    zSTRING                    shpFOR_S;                    //    "object,world"
    zSTRING                    shpOffsetVec_S;                //    (zVEC3 offset in objectSpace)
    zSTRING                    shpDistribType_S;            //    "RAND, UNIFORM, WALK"
    float                    shpDistribWalkSpeed;
//    int                        shpIsUniformDistrib;        
    int                        shpIsVolume;
    zSTRING                    shpDim_S;                    //    "10 20 30"    line: nur 1 Dimension !=0, circ/spher=radius
    zSTRING                    shpMesh_S;                    //    "cross.3ds"
    int                        shpMeshRender_B;
    zSTRING                    shpScaleKeys_S;                //    "[1.0] [0.8 0.9 0.2] [1.0]"
    int                        shpScaleIsLooping;
    int                        shpScaleIsSmooth;
    float                    shpScaleFPS;

По крайней мере, такой код увеличивает радиус поражения малой огненной бури до очень больших значений:
C++:
  void Game_Loop() {
      auto fx = zCParticleFX::s_pfxList.pfxListHead;



      for (int i = 0; i < zCParticleFX::s_pfxList.numInList; i++)
          if (fx)
          {
              if (fx->emitter && fx->emitter->particleFXName.CompareI("MFX_FIRESTORM_SPREAD_SMALL"))
              {
                fx->emitter->shpCircleSphereRadius = 10000;
              }
              fx = fx->nextPfx;
          }
  }
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.336
Благодарности
3.181
Баллы
525
судя по всему в PFX поле shpDim_S
Это размер области, в которой генерируются частицы. Сами частицы могут быть существенно крупнее размеров этой области. Но учитывается ли при определении зоны поражения размер частиц?
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.814
Баллы
240
Но учитывается ли при определении зоны поражения размер частиц?
Вряд ли. Вроде, у частиц размер двухмерный только - то есть только для наблюдателя.
Как я понял, множество частиц определяют бибокс визуала. Для некоторых заклинаний ищутся коллизии между бибоксом визуала и бибоксом персонажей. Для других - между линией-траекторией визуала и бибоксами персонажей.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.336
Благодарности
3.181
Баллы
525
А как думаешь, у огненного дождя может быть реализован просчёт попадания частиц по цели с нанесением урона?

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

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.039
Благодарности
1.814
Баллы
240
А как думаешь, у огненного дождя может быть реализован просчёт попадания частиц по цели с нанесением урона?
Думаю, что там то же самое - множество частиц образуют большой бибокс, пересечения с которым и ищутся.
Командой ztoggle vobbox можно посмотреть бибоксы заклинаний.

Затем же происходит нанесение растянутого во времени минимального урона, который наносится примерно раз в секунду, пока действует визуальный эффект поражения.
Ну в Г2 я такое только при заморозке видел, и оно в скриптах прописано в ZS_MagicFreeze_Loop.
 
Последнее редактирование:

Cbrhex

Участник форума
Регистрация
5 Окт 2019
Сообщения
42
Благодарности
2
Баллы
100
Подскажите, пожалуйста, где при убийстве NPC определяться умрет он или приляжет отдохнуть?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.236
Благодарности
2.575
Баллы
455
Cbrhex,
В Г1 зашито в движке.
В Г2(НВ) условия в функции AI\Human\C_Human\C_DropUnconscious.d
(Отредактировал перевод комментариев функции по ссылке, были перепутаны значения описания переменных self - other, жертва - нападающий)
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.172
Благодарности
6.153
Баллы
1.565
OFFTOP

Скриптеры понабежали )))

1603287771495.png


Cbrhex, Вопрос не из простых. Тут не только скрипты за это отвечают, но и движек. так же смерть/несмерть привязаны к гильдиям непися
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.846
Благодарности
5.274
Баллы
910
Если совсем коротко и для самостоятельного изучения.
Готика 2.
Начало всего идет в скриптах от функции
C_DropUnconscious
Также для установления факта мгновенной смерти без добивания для человеческих гильдии
const int AIV_DropDeadAndKill = 52;

Также урон DAM_POINT всегда убивает цель без перехода в ZS_Unconscious
Которое снова же определяет движок по функции C_DropUnconscious

Более опытные скриптеры могут дополнить.
 

Cbrhex

Участник форума
Регистрация
5 Окт 2019
Сообщения
42
Благодарности
2
Баллы
100
Если совсем коротко и для самостоятельного изучения.
Готика 2.
Начало всего идет в скриптах от функции
C_DropUnconscious
Также для установления факта мгновенной смерти без добивания для человеческих гильдии
const int AIV_DropDeadAndKill = 52;

Также урон DAM_POINT всегда убивает цель без перехода в ZS_Unconscious
Которое снова же определяет движок по функции C_DropUnconscious

Более опытные скриптеры могут дополнить.
Забыл сразу написать что Г1 :oops:
Пост автоматически объединён:

OFFTOP

Скриптеры понабежали )))
Посмотреть вложение 88853


Cbrhex, Вопрос не из простых. Тут не только скрипты за это отвечают, но и движек. так же смерть/несмерть привязаны к гильдиям непися
Может быть есть решение при помощи Union?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.236
Благодарности
2.575
Баллы
455
Gratt,
В екстендер для Г1
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
Myxomop, ну да, как вариант. Может тогда сразу целым списком добавить, если ещё что-то подобное есть?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.236
Благодарности
2.575
Баллы
455
Gratt,
Сразу не вспомнишь, в идеале все возможное вызываемое из движка Г2 перенести, но это нужно дизасмы сравнивать.
_work\data\Scripts\Content\Ai\Ai_intern\B_RefreshAtInsert.d - вот эта в G2 вызывается при детекте НПЦ в зоне видимости ГГ и там уже через скрипты освежается инвентарь, если НПЦ без оружия.
_work\data\Scripts\Content\Ai\Ai_intern\Player_Plunder_Is_Empty.d - вызывается в G2 при обыске НПЦ и пустом инвентаре, в скриптах рандомные фразы ГГ о пустом инвентаре.
 
Сверху Снизу