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

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

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

Gothic ½ Конструктор заклинаний | zSpells

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
zSpells
Конструктор заклинаний


Доступно к скачиванию через Менеджер ресурсов в разделе 'Плагины'
- Скачать Менеджер Ресурсов -
Требования: Union 1.0h или выше
Платформа: Gothic I, Gothic Sequel, Gothic II, Gothic II NoTR

Данный плагин позволяет создавать новые заклинания без особых заморочек, по схеме 1 файл скрипта - одно заклинание, то есть теперь для создания нового заклинания. В менеджере ресурсов есть уже готовые примеры новых и старых заклинаний, в виде отдельного скриптового плагина.


Краткий список возможностей:
+Что бы ваше заклинание обрабатывалось новой системой, необходимо что бы оно имело индекс >500
+Отвязка от "стардартных" массивов имен, анимаций и тд. Все данные заклинания объявляются в C_SPELL_DATA
+Можно использовать уже имеющиеся наборы эффектов заклинаний, в оригинале это было невозможно изза конфликта имен.
+Теперь можно создавать заклинания трансформации независимо от индекса, условие что бы индекс был выше 500, а C_SPELL.spellType = SPL_TRANSFORM.
+Для новых многоуровневых заклинаний, вроде большого огненного шара, более не нужно указывать заклинание в общей функции Spelll_ProcessMana_Release, теперь для каждого заклинания эта функция своя, пример смотрите в скриптовом плагине с новыми заклинаниями.
+Так же упразднена функция func int Spell_ProcessMana(var int manaInvested), вместо нее теперь система напрямую обращается к функции Spell_Logic_XXX.

Добавлены 2 внешние функции для работы с заклинаниями:


Daedalus:
//Вызывает событие Invest next level для визуального эффекта, прибавляет +1 к уровню заклинания
//caster - кастующий нпс, self
func void Spl_InvestNext(var C_NPC caster);
//Непосредственно задает уровень зарядки заклинания, количество допустимых уровней зарядки для заклинания в г2а - от 0 до 20.
////caster - кастующий нпс, self. level - уровень
func void Spl_SetLevel(var C_NPC caster, var int level);
Если возникнут какие то вопросы - задавать тут.
 

Вложения

  • zSpells.zip
    181,6 KB · Просмотры: 88
  • zSpells_ExampleScripts.zip
    6,7 KB · Просмотры: 88
Последнее редактирование:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Daedalus:
//Spell_Collide_SPELL_ID
//для всех новых заклинаний начиная с индекса 500, функция func int C_CanNpcCollideWithSpell(var int spellType)
//Объявляется для каждого заклинания отдельно в файле скрипта заклинания
//Имя функции должно быть формата Spell_Collide_XXX где XXX индекс заклинания, в файле Spell_OtherHeal, показан пример отработки этой функции для отдельного заклинания.
//Если функция для заклинания не объявлена, в zSPY будет выведено предупреждении об отсутствии функции, а в обработчик коллизий пойдет COLL_DOEVERYTHING ( Полное воздействие)

const int SPL_OtherHeal = 504;

//---------------------------------------
// Spell data instance
//---------------------------------------
instance Spell_OtherHeal_data (C_SPL_DATA)
{
    instName        = "OtherHeal";
    spellID         = SPL_OtherHeal;
    spellName        = "Исцеление соратника";
    spellAniName    = "WND";
    visualFxName    = "OtherHeal";
    damage            = 100;
    cost            = 50;
    energyType        = ATR_MANA;
};

//---------------------------------------
// Spell instance
//---------------------------------------
instance Spell_OtherHeal (C_Spell_Proto)
{
    time_per_mana            = 0;
    spelltype                 = SPELL_GOOD;
    targetCollectAlgo        = TARGET_COLLECT_FOCUS;
    targetCollectRange        = 1000;                    // 10m
    targetCollectType        = TARGET_TYPE_NPCS;
};

//---------------------------------------
// Item instance
//---------------------------------------
instance ItRu_OtherHeal(C_Item)
{
    name = NAME_Rune;
    mainflag = ITEM_KAT_RUNE;
    flags = 0;
    value = 0;
    visual = "ItRu_FullHeal.3ds";
    material = MAT_STONE;
    spell = SPL_OtherHeal;
    wear = WEAR_EFFECT;
    effect = "SPELLFX_WEAKGLIMMER_YELLOW";
    description = "Хилка друзей";
};

//---------------------------------------
// Spell logic
//---------------------------------------
func int Spell_Logic_OtherHeal (var int manaInvested)
{  
    if(other.attribute[ATR_HITPOINTS] == other.attribute[ATR_HITPOINTS_MAX] && !C_NpcIsEvil(other))
    {
        return SPL_SENDSTOP;
    };
    if (self.attribute[ATR_MANA] >= Spell_OtherHeal_data.cost)
    {                  
        return SPL_SENDCAST;
    }
    else //nicht genug Mana
    {
        return SPL_SENDSTOP;
    };
};

//---------------------------------------
// Spell cast func
//---------------------------------------
func void Spell_Cast_OtherHeal()
{
    if ( Npc_GetActiveSpell(self) == SPL_OtherHeal)  
    {  
        self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - Spell_OtherHeal_data.cost;
    };
};

//SELF - жертва,  OTHER - атакующий
func int Spell_Collide_504()
{
    if(C_NpcIsEvil(self))
    {
        return COLL_APPLYHALVEDAMAGE;
    }
    else
    {
        Npc_ChangeAttribute    (self,ATR_HITPOINTS, +Spell_OtherHeal_data.damage);
        return COLL_DONOTHING;
    };
};

Качаем обнову, теперь по моему АБСОЛЮТНО ВСЕ данные заклинания, в одном файле, больше нет гемороя.
 
Последнее редактирование:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
То-есть теперь можно для своих спеллов, не юзать функции:
Spell_ProcessMana
Spell_ProcessMana_Release
C_CanNpcCollideWithSpell,
И не объявлять константы спела в массивах:
spellFxAniLetters - имена анимаций спеллов.
spellFxInstanceNames - имена эффектов VFX
TXT_SPELLS - имена заклинаний выводимые на экран

Все это теперь объявляется в самом файле заклинания, посредством класса C_SPELL_DATA, и индивидуальных обработчиков событий заклинания.

Нужны тесты системы, особенно на магах-неписях, там могут быть глюки, а могут и не быть. Так что жду тестов.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Только что для себя обнаружил ШОКИРУЮЩУЮ плюшку этого плагина, можно менять визуальный эффект заклинания, прямо на ходу, вот пример.
До каста, эффект был OtherHeal и анимация WND, после каста стало IceFire, HEA и происходит это без убирания спела, а прямо в процессе!
1603320362297.png unknown[1].png

На скрине результат работы, а конкретно сразу второй каст после первого, сам был удивлен что мой плагин так умеет.

ПОЧУВСТВУЙ СИЛУ связанных классов daedalus+c++
 
Последнее редактирование:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Скрипты спелла Рандомный огненный шар. Во врага летит 2 огненных шара по рандомным траекториям. Пользуйтесь.
 

Вложения

  • Spell_RandFireBall.d
    2,1 KB · Просмотры: 40
  • RandomFireball.d
    3,7 KB · Просмотры: 42

Saturas


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

верней вечером скину
 
Последнее редактирование:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
те глючный был обработчик коллизий, а поправить никак не получится ?! членово, если нет.. *lupa*
AI_TOT (Teleport → Gratt) :D
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.638
Баллы
625
Сначала выясните объект какого класса крашит при вызове Release, а потом суммоньте меня
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.693
Баллы
910
Небольшой спеллпак. Создан чисто для изучения создания спеллов.
Заклинания почти все являются просто переносом из спелл пака за авторством mud-freak
[Modderdatenbank] Zauberpaket

Заклинание вскрытие замков является моим (Мой pfx/sfx и сам спелл) с дописанными функциями от Gratt
В принципе нам надо, чтобы кто-нибудь побегал, поиграл ну или прошел мод/оригинал с ним, чтобы проверить новые возможности написанные в нем, которые перекочуют (если багов не будет) в плагин zParserExtender.
Перенес не все, потому что на оставшиеся 4 заклинания мне было уже лень делать:D
Плагин использует id спеллов c 501-510
В плагине используется zParserExtender, zModelProtoExtender ну и сам zSpells
А pfx для вскрытие замка создавал через редактор Saturas Union Spacer

Требование Готика 2а и Union 1.0h или новее.
zFutureSpell.vdf поместить в Gothic 2\Data
Если у вас стоят новее zParserExtender, zModelProtoExtender - будут использоваться они, так что ничего делать с ними не надо (если установлено)

В принципе, полезное только вскрытие замков (для всех) и равновесие для магов. Удачи.
И да вскрытие замков работает только на сундуках с кодом, сундуки с ключом идут мимо.

В игре добавляем Union_FutureSpell_CreateRune_01, который добавит все руны в инвентарь. Руны не имеют цены, чтобы не получать выгоду с них, кругов магии у рун нет, может воспользоваться каждый, если хватит маны.
 

Вложения

  • zFutureSpell.vdf
    3,8 MB · Просмотры: 63
Последнее редактирование:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Вобщем пофиксил баг, скоро выложим рабочую версию.

А нет, показалось, лол. ЖДИТЕ

Вобщем пофиксили, все ок теперь, точно почти
 
Последнее редактирование:

Masty

Участник форума
Регистрация
3 Дек 2020
Сообщения
5
Благодарности
0
Баллы
55
Hi, I have a problem using this plugin when I try to make a new "multi-level" or "charged" spell.
In your example spells there is a charged spell (pyroblast) that uses Spl_InvestNext (self);
The problem is that if I use that function, I get an error because it was not declared first when compiling with Gothic Sourcer 3.16. I assume this function is declared inside the Union plugin, is there a way for me to compile scripts avoiding this error?
Thank you, amazing plugin!
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.693
Баллы
910
Hi, I have a problem using this plugin when I try to make a new "multi-level" or "charged" spell.
In your example spells there is a charged spell (pyroblast) that uses Spl_InvestNext (self);
The problem is that if I use that function, I get an error because it was not declared first when compiling with Gothic Sourcer 3.16. I assume this function is declared inside the Union plugin, is there a way for me to compile scripts avoiding this error?
Thank you, amazing plugin!
Help - Show External function
add it
// add function prototypes here
func void Spl_InvestNext(VAR C_NPC caster);
func void Spl_SetLevel(VAR C_NPC caster,var int level);

After reboot GS
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.931
Благодарности
560
Баллы
275
В игре добавляем Union_FutureSpell_CreateRune_01, который добавит все руны в инвентарь. Руны не имеют цены, чтобы не получать выгоду с них, кругов магии у рун нет, может воспользоваться каждый, если хватит маны.
А как именно это "добавить"? Что конкретно вводить в консоли, подскажи, пожалуйста?
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.693
Баллы
910

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.176
Благодарности
5.693
Баллы
910
Сат, в английской версии мода L`Hiver плагин ломает коллизии заклов, а именно перестают отрабатывать частицы spread
Достаточно просто положить в автозапуск zspells.dll, в игре вставить закл firestorm, вставить рядом два ch и кастануть в одного из них.
Сам мод (Мод без расширителей,
Yandex.disk
Будешь фиксить? Вот видео для наглядности.
Youtube
Об этом написал автор перевода - Masty
Не робит на фулл голой игре, только юна, мод и dll в autorun
1619963059215.png1619963074701.png1619963084173.png
К слову, заклов новых нет в моде
1619963425576.png1619963436105.png

Потестил, вообще не робит с любым модом, кроме голого оригинала.
 
Последнее редактирование:

alexeich2019

Участник форума
Регистрация
28 Июн 2019
Сообщения
191
Благодарности
73
Баллы
175
N1kX, а если .mod файлы перенести в Data и в vdf переименовать, работает?
 

alexeich2019

Участник форума
Регистрация
28 Июн 2019
Сообщения
191
Благодарности
73
Баллы
175
N1kX, не смотрел скрины, предположил. Сори.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Ага, на днях гляну, ща просто завал по работе жуткий.

а вообще там где то по моему в одной строчке баг, крч завтра найду сорсы - пофиксию
 
Последнее редактирование:
Сверху Снизу