Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
пиши вместо SPL_Damage_PalRepelEvil что хочешь. можно вообще убиватью можешь процент отнимать от здоровья. можешь одну жизнь оставлять. крути его как хочешь. хочешь учитывай броню. хочешь не учитывай. я же не знаю что ты хочешь ;-)
Приветствую всех.
Возможно ли простыми средствами расширить данный список флагов, внеся туда больше типов оружия, типа "ITEM_RPR" (шпаги и рапиры), "ITEN_SPR" (копья), "ITEM_LBOW" (длинные луки) и т.д.?
KirTheSeeker, ты эти флаги как собираешься использоваться в скриптах? в скриптах оригинальной игры эти флаги вообще не используются ;-) но в модификациях их конечно можно задействовать для проверок
если их как то гипотетически обрабатывает движок, то фактически в игре это ни на что не влияет, так например топор может иметь как рубящий, так и дробящий ущерб.
То есть тебе нужно понять(для себя) как ты собрался использовать эти флаги на уровне скриптов и исходя из этого уже начинать множить сущности.
KirTheSeeker, это можно сделать в том же функции OnDamage_Hit что и перехватывается ущерб, то есть там где мы писали ранее.
Пост автоматически объединён:
например: проверка на то оружие ближнего боя или дальнего, если ближнего то требует оно силу или ловкость, если ловкость то пишешь формулу урона какую хочешь.
например: проверка на то оружие ближнего боя или дальнего, если ближнего то требует оно силу или ловкость, если ловкость то пишешь формулу урона какую хочешь.
Мне кажется, правильнее всего сделать плагин, который мог бы полностью отключать оригинальный бонус, добавляя уже рассчитанный по соответствующим множителям бонус, для соответствующего флага. Такой расчёт будет более выверен, и позволит спокойно добавлять в него любые новые оружия, вроде тех же копий и т.п.
В любом случае, я понятия не имею как грамотно написать подобный скрипт, так что прошу помощи в этом у знающих людей.
Не совсем понимаю вопроса. Формула должна быть своя для каждого типа оружия, согласно флагам, как я описал в том примере. Т.е. не имеет значения 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]
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;
};
Не особо. Ты написал код для определения оружия по его названию?
Я бы хотел сделать определение скейлов по имеющимся флагам (которые уже прописаны для каждого оружия в оригинале), с добавлением нескольких новых, т.к. это позволит сразу охватывать нужные группы разных оружий (без необходимости прописывать каждое отдельно), типа только шпаги/рапиры, либо только одноручные мечи, либо только двуручные топоры/молоты и т.д.
Никак. Флаги будут скорректированы для мода заранее, через GothicSource. Мой вопрос вообще не об этом.
Как можно корректно добавить в имеющийся список пару флагов, чтобы ничего не сломать?
последний в списке это 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!)
попробуй следующий флаг. но создание новых флагов для реализации твоей задумки может иметь непредсказуемые последствия
проверка по флагам в скриптах осуществляется вот так
Если ты имеешь в виду ХХХ = 1 << 32, то это, насколько я понимаю, некорректно. Целочисленная переменная состоит из 4 байт или 32 бит. Флаг 1 << 31 - это старший бит. Дальше двигать некуда.
Если ты имеешь в виду ХХХ = 1 << 32, то это, насколько я понимаю, некорректно. Целочисленная переменная состоит из 4 байт или 32 бит. Флаг 1 << 31 - это старший бит. Дальше двигать некуда.
Это выглядит как костыли. Например, к шпаге мастера будут требования по ловкости и силе, а урон, если уж отталкиваться от анимаций, она наносят режущий. Как их выделить из мечей?
Например, к шпаге мастера будут требования по ловкости и силе, а урон, если уж отталкиваться от анимаций, они наносят режущий. Как их выделить из мечей?
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.