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

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

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

MaGoth

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

Вложения

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
И как много урона наносится?

вот тут ты наносишь урон:

Код:
    B_MagicHurtNpc (hero,self,(SPL_Damage_PalRepelEvil - self.protection[PROT_MAGIC]) );
пиши вместо SPL_Damage_PalRepelEvil что хочешь. можно вообще убиватью можешь процент отнимать от здоровья. можешь одну жизнь оставлять. крути его как хочешь. хочешь учитывай броню. хочешь не учитывай. я же не знаю что ты хочешь ;-)
Пост автоматически объединён:

По зомби и скелетам не проходит.
используется проверка C_NpcIsEvil, ты можешь написать свою.
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
Приветствую всех.
Возможно ли простыми средствами расширить данный список флагов, внеся туда больше типов оружия, типа "ITEM_RPR" (шпаги и рапиры), "ITEN_SPR" (копья), "ITEM_LBOW" (длинные луки) и т.д.?
1.png
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
KirTheSeeker, ты эти флаги как собираешься использоваться в скриптах? в скриптах оригинальной игры эти флаги вообще не используются ;-) но в модификациях их конечно можно задействовать для проверок :)

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

То есть тебе нужно понять(для себя) как ты собрался использовать эти флаги на уровне скриптов и исходя из этого уже начинать множить сущности.
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
То есть тебе нужно понять(для себя) как ты собрался использовать эти флаги на уровне скриптов и исходя из этого уже начинать множить сущности.
Чтобы ввести разные уровни скалирования дополнительного урона от атрибутов, для разных типов оружия. Примерно как описано здесь.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
KirTheSeeker, это можно сделать в том же функции OnDamage_Hit что и перехватывается ущерб, то есть там где мы писали ранее.
Пост автоматически объединён:

например: проверка на то оружие ближнего боя или дальнего, если ближнего то требует оно силу или ловкость, если ловкость то пишешь формулу урона какую хочешь.
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
например: проверка на то оружие ближнего боя или дальнего, если ближнего то требует оно силу или ловкость, если ловкость то пишешь формулу урона какую хочешь.
Мне кажется, правильнее всего сделать плагин, который мог бы полностью отключать оригинальный бонус, добавляя уже рассчитанный по соответствующим множителям бонус, для соответствующего флага. Такой расчёт будет более выверен, и позволит спокойно добавлять в него любые новые оружия, вроде тех же копий и т.п.

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

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
KirTheSeeker, у тебя расчёт для 1р и 2р требующую ловкость будет по одной формуле?
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
KirTheSeeker, у тебя расчёт для 1р и 2р требующую ловкость будет по одной формуле?
Не совсем понимаю вопроса. Формула должна быть своя для каждого типа оружия, согласно флагам, как я описал в том примере. Т.е. не имеет значения 1р/2р, а уж тем более его требования.
Если речь о конкретных формулах и конкретных типах оружия, то например для одноручных мечей и шпаг они будут разными, а именно:

DamageTotal_ITEM_SWD = DAM-WEAP (собственный урон оружия) + [ATR_STR_Total (полное значение силы со всеми бонусами от колец и т.п.) * 0.6] + [ATR_DEX_Total (полное значение ловкости со всеми бонусами от колец и т.п.) * 0.6]

DamageTotal_ITEM_RPR = DAM-WEAP (собственный урон оружия) + [ATR_STR_Total (полное значение силы со всеми бонусами от колец и т.п.) * 0.4] + [ATR_DEX_Total (полное значение ловкости со всеми бонусами от колец и т.п.) * 0.6]
 
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
KirTheSeeker, давай сначала. Топик называется "вопросы по скриптингу". Если ты хочешь определять это на уровне скриптов, то тебе необязательно плодить флаги, а потом перебивать их у УЖЕ имеющихся инстанций. с точки зрения скриптов это даже будет плохо, хотя конечно прекрасный zparser от Gratt и переварит правки инстанций.

На уровне скриптов ты можешь сделать простую проверку что бы определить какое оружие
Daedalus:
    func int ITEM_RPR (var C_Item ItMw)
    {
        var int weaponInstance;
        weaponInstance = Hlp_GetInstanceID(ItMw);

        if (weaponInstance == ItMw_1h_Vlk_Sword)
        {
            Hlp_PrintConsole ("Оружие ItMw_1h_Vlk_Sword");
            return true;
        };
       
        if (weaponInstance == ItMw_Rapier)
        {
            Hlp_PrintConsole ("Оружие ItMw_Rapier");
            return true;
        };  
       
        if (weaponInstance == ItMw_Meisterdegen)
        {
            Hlp_PrintConsole ("Оружие ItMw_Rapier");
            return true;
        };
       
        return false;
    };

вот эта часть понятна?
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
вот эта часть понятна?
Не особо. Ты написал код для определения оружия по его названию?
Я бы хотел сделать определение скейлов по имеющимся флагам (которые уже прописаны для каждого оружия в оригинале), с добавлением нескольких новых, т.к. это позволит сразу охватывать нужные группы разных оружий (без необходимости прописывать каждое отдельно), типа только шпаги/рапиры, либо только одноручные мечи, либо только двуручные топоры/молоты и т.д.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
с добавлением нескольких новых

а как ты планируешь менять флаги у оружия которое уже находится в мире?

Я бы хотел сделать определение скейлов по имеющимся флагам
это можно делать по флагам

Daedalus:
if (item.flags & ITEM_SWD) // одноручный меч
Daedalus:
if (item.flags & ITEM_2HD_AXE        ) // двуручный топор
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
а как ты планируешь менять флаги у оружия которое уже находится в мире?
Никак. Флаги будут скорректированы для мода заранее, через GothicSource. Мой вопрос вообще не об этом.
Как можно корректно добавить в имеющийся список пару флагов, чтобы ничего не сломать?
1.png
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
Как можно корректно добавить в имеющийся список пару флагов, чтобы ничего не сломать?
последний в списке это const int ITEM_KAT_MAGIC = 1 << 31;

Код:
////////////////////////////////////////////////////////////////////////////////
//
//    ITEM FLAGS
//

// categories (mainflag)
const int ITEM_KAT_NONE        = 1 <<  0;  // Sonstiges
const int ITEM_KAT_NF        = 1 <<  1;  // Nahkampfwaffen
const int ITEM_KAT_FF        = 1 <<  2;  // Fernkampfwaffen
const int ITEM_KAT_MUN        = 1 <<  3;  // Munition (MULTI)
const int ITEM_KAT_ARMOR    = 1 <<  4;  // Ruestungen
const int ITEM_KAT_FOOD        = 1 <<  5;  // Nahrungsmittel (MULTI)
const int ITEM_KAT_DOCS        = 1 <<  6;  // Dokumente
const int ITEM_KAT_POTIONS    = 1 <<  7;  // Traenke
const int ITEM_KAT_LIGHT    = 1 <<  8;  // Lichtquellen
const int ITEM_KAT_RUNE        = 1 <<  9;  // Runen/Scrolls
const int ITEM_KAT_MAGIC    = 1 << 31;  // Ringe/Amulette/Guertel
const int ITEM_KAT_KEYS        = ITEM_KAT_NONE;
// weapon type (flags)
const int ITEM_DAG            = 1 << 13;  // (OBSOLETE!)
const int ITEM_SWD            = 1 << 14;  // Schwert
const int ITEM_AXE            = 1 << 15;  // Axt
const int ITEM_2HD_SWD        = 1 << 16;  // Zweihaender
const int ITEM_2HD_AXE        = 1 << 17;  // Streitaxt
const int ITEM_SHIELD        = 1 << 18;  // (OBSOLETE!)
const int ITEM_BOW            = 1 << 19;  // Bogen
const int ITEM_CROSSBOW        = 1 << 20;  // Armbrust
// magic type (flags)
const int ITEM_RING            = 1 << 11;  // Ring
const int ITEM_AMULET        = 1 << 22;  // Amulett
const int ITEM_BELT            = 1 << 24;  // Guertel
// attributes (flags)
const int ITEM_DROPPED         = 1 << 10;  // (INTERNAL!)
const int ITEM_MISSION         = 1 << 12;  // Missionsgegenstand
const int ITEM_MULTI        = 1 << 21;  // Stapelbar
const int ITEM_NFOCUS        = 1 << 23;  // (INTERNAL!)
const int ITEM_CREATEAMMO    = 1 << 25;  // Erzeugt Munition selbst (magisch)
const int ITEM_NSPLIT        = 1 << 26;  // Kein Split-Item (Waffe als Interact-Item!)
const int ITEM_DRINK        = 1 << 27;  // (OBSOLETE!)
const int ITEM_TORCH        = 1 << 28;  // Fackel
const int ITEM_THROW        = 1 << 29;  // (OBSOLETE!)
const int ITEM_ACTIVE        = 1 << 30;  // (INTERNAL!)
попробуй следующий флаг. но создание новых флагов для реализации твоей задумки может иметь непредсказуемые последствия :)
проверка по флагам в скриптах осуществляется вот так
Daedalus:
if (item.flags & ITEM_SWD) // одноручный меч
подробнее читай тут Класс C_Item - ZenGin справочник - Gothic Library


т.к. это позволит сразу охватывать нужные группы разных оружий (без необходимости прописывать каждое отдельно)
это вопрос организации проверок. имеющихся данных в инстанции достаточно что бы сгруппировать оружие по группам.
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
последний в списке это const int ITEM_KAT_MAGIC = 1 << 31;
попробуй следующий флаг.
Если ты имеешь в виду ХХХ = 1 << 32, то это, насколько я понимаю, некорректно. Целочисленная переменная состоит из 4 байт или 32 бит. Флаг 1 << 31 - это старший бит. Дальше двигать некуда.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
Флаг 1 << 31 - это старший бит. Дальше двигать некуда.
ну гражданин же хочет:- ) пусть попробует. он же отказывается понимать что есть флаг. пусть убедится в том что это
создание новых флагов для реализации твоей задумки может иметь непредсказуемые последствия :)


****

имеющихся данных в инстанции достаточно
  • флаги 1р/2р
  • флаги меч/топор
  • требование сила/ловкости
  • тип урона
  • радиус
  • урон
  • хозяин НПС
  • хозяин Гильдия
 
Последнее редактирование:

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
Если ты имеешь в виду ХХХ = 1 << 32, то это, насколько я понимаю, некорректно. Целочисленная переменная состоит из 4 байт или 32 бит. Флаг 1 << 31 - это старший бит. Дальше двигать некуда.
Ясно, т.е. просто прописать несколько новых типов оружия через флаги не выйдет. Жаль.
флаги 1р/2р
  • флаги меч/топор
  • требование сила/ловкости
  • тип урона
  • радиус
  • урон
  • хозяин НПС
  • хозяин Гильдия
Это выглядит как костыли. Например, к шпаге мастера будут требования по ловкости и силе, а урон, если уж отталкиваться от анимаций, она наносят режущий. Как их выделить из мечей?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
Это выглядит как костыли.
а как ты костыль отличаешь не от костыля?

Например, к шпаге мастера будут требования по ловкости и силе, а урон, если уж отталкиваться от анимаций, они наносят режущий. Как их выделить из мечей?
флаг + требует сила + требует ловкость.

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

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
а как ты костыль отличаешь не от костыля?
Проверка по одному флагу = "быстро и просто, т.е. не костыль".
Проверка по 3-4, либо вообще составление списка оружия = "как костыль".
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
2.000
Благодарности
969
Баллы
295
Проверка по одному флагу = "быстро и просто, т.е. не костыль".
Проверка по 3-4, либо вообще составление списка оружия = "как костыль".
в таком случае скрипты Готики это мега-большой склад одних костылей ;-)
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.928
Благодарности
557
Баллы
275
флаг + требует сила + требует ловкость.
Многие мечи тоже будут иметь раздельные требования.


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