Closed Kor-Angar closed 3 years ago
Это не получится сделать настройкой. Только отдельные скрипты. И как быть со свитками превращения? У них ведь нет рун.
Это не получится сделать настройкой. Только отдельные скрипты.
жаль
И как быть со свитками превращения? У них ведь нет рун.
посмотреть на стоимость в Готике 2 Классик
посмотреть на стоимость в Готике 2 Классик
Хотя расоход маны в Готике 2 классик ниже в 2-3 раза относительно Готики 2 НВ. поэтому наверное необходимое кол-во маны на свиток превращения можно увеличить. Например
Готика 2 классик | Готика 2 НВ | Готика 2 НВ | Готика 2 НВ | |
---|---|---|---|---|
_ | Варинат 1 | Варинат 2 | Варинат 3 | |
простые | 5 маны | 10 | 10 | 15 |
средния | 10 маны | 20 | 25 | 30 |
сложные | 15 маны | 30 | 45 | 50 |
Третий вариант самый нормальный - заставит во второй главе обзавестись в Яркендаре бижутерией, либо бегать и собирать грибы, либо попытаться собрать хотя бы 10 старых каменных таблиц. Плюс нет возможности зачистить полХориниса варгом, огненным вараном и драконьим снеппером.
Третий вариант мягко говоря драконовский по расценкам :-) и герой наверное в первой главе 50 маны без прокачки не наберёт. Можно начать например с первого варианта, поиграть, а потом если что еще усложнить.
Это не получится сделать настройкой.
а если в файлы Spell_ххх.d добавить проверку на опцию xxxMode ?
если опция выключена цена идёт свитка, а если опция включена, то цена идёт единая и для свитка и для руны). На примере огненного дождя.
func int Spell_Logic_Firerain(var int manaInvested)
{
if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll) && (xxxMode == False))
{
return SPL_SENDCAST;
}
else if(self.attribute[ATR_MANA] >= SPL_Cost_Firerain)
{
return SPL_SENDCAST;
}
else
{
return SPL_SENDSTOP;
};
};
func void Spell_Cast_Firerain()
{
if((Npc_GetActiveSpellIsScroll(self))&& (xxxMode == False))
{
self.attribute[ATR_MANA] -= SPL_Cost_Scroll;
}
else
{
self.attribute[ATR_MANA] -= SPL_Cost_Firerain;
};
self.aivar[AIV_SelectSpell] += 1;
};
попробовал у себя, вроде скрипт сработал.
Это да, но как быть с описаниями свитков? У них всегда будет написано 5 маны, потому что эти значения - константы и записываются прямо в свойства созданных предметов.
пока это можно реализовать в тестовой версии: потестить, подумать, посмотреть. а там уже и видно как говорится будет :-)
смотри какая смешная проверка :-)
if((Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll)) || (self.attribute[ATR_MANA] >= SPL_Cost_TrfSheep))
расходы маны на "забыть"(SPL_Cost_Charm) можно сделать такой же как и у сна 30.
сейчас SPL_Cost_Charm = 50 :-) при том что руны то нет :-))
гм... а в g2mdk-2.6 расход маны на свитки превращения стоит 10... а у Акеллы точно 5?
// *********************
// Alle Transform Spells
// *********************
const int SPL_Cost_TrfSheep = 10;
const int SPL_Cost_TrfScavenger = 10;
const int SPL_Cost_TrfGiantRat = 10;
const int SPL_Cost_TrfGiantBug = 10;
const int SPL_Cost_TrfWolf = 10;
const int SPL_Cost_TrfLurker = 10;
const int SPL_Cost_TrfSnapper = 10;
const int SPL_Cost_TrfWaran = 10;
const int SPL_Cost_TrfWarg = 10;
const int SPL_Cost_TrfFireWaran = 10;
const int SPL_Cost_TrfShadowbeast = 10;
const int SPL_Cost_TrfDragonSnapper = 10;
Это да, но как быть с описаниями свитков? У них всегда будет написано 5 маны, потому что эти значения - константы и записываются прямо в свойства созданных предметов.
Что мешает записать туда результат вызова функции? Правда уже созданные свитки обновятся только после перезагрузки сейва.
На примере огненного дождя.
У заклинаний превращения нет SpellCast*.
Что мешает записать туда результат вызова функции?
Ничего, но если всё это только для теста, то проще просто изменить существующие константы.
гм... а в g2mdk-2.6 расход маны на свитки превращения стоит 10... а у Акеллы точно 5?
5 - стандартное требование маны для свитков (SPL_Cost_Scroll). 10 - требования для заклинаний превращения (SPL_Cost_Trf*). В игре они не используются, потому что рун превращения нет.
10 - требования для заклинаний превращения (SPL_Cost_Trf*). В игре они не используются, потому что рун превращения нет.
давай я просто опубликую код из g2mdk-2.6, что бы мы не множили сущности:-)
// *********************
// Alle Transform Spells
// *********************
const int SPL_Cost_TrfSheep = 10;
const int SPL_Cost_TrfScavenger = 10;
const int SPL_Cost_TrfGiantRat = 10;
const int SPL_Cost_TrfGiantBug = 10;
const int SPL_Cost_TrfWolf = 10;
const int SPL_Cost_TrfWaran = 10;
const int SPL_Cost_TrfSnapper = 10;
const int SPL_Cost_TrfWarg = 10;
const int SPL_Cost_TrfFireWaran = 10;
const int SPL_Cost_TrfLurker = 10;
const int SPL_Cost_TrfShadowbeast = 10;
const int SPL_Cost_TrfDragonSnapper = 10;
// ------ Instanz fьr alle Transform-Sprьche ------
INSTANCE Spell_Transform (C_Spell_Proto)
{
time_per_mana = 0;
spelltype = SPELL_NEUTRAL;
targetCollectAlgo = TARGET_COLLECT_NONE;
canTurnDuringInvest = 0;
};
// ------ Schaf ------
func int Spell_Logic_TrfSheep (var int manaInvested)
{
if ((Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll)))
|| (self.attribute[ATR_MANA] >= SPL_Cost_TrfSheep)
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_TrfSheep;
Npc_SetActiveSpellInfo(self, Sheep);
return SPL_SENDCAST;
}
else
{
return SPL_SENDSTOP;
};
};
мы видим что в оригинальных скриптах заклинания превращения фактически отнимают 10 маны, т.к. в них не используется "SPL_Cost_Scroll". в этих скриптах такая же история https://github.com/dosinabox/g2nr_unofficial_update/blob/d6a0bc1ecebbb3aad43ba9278a9a11820a3ca03f/PrjGOTHIC/AI/Magic/Spells/Spell_Transform.d#L36 только значение SPL_Cost_Trf** изменено с 10 до 5.
Какое-то старое изменение. Одно из первых.
Исправлены несоответствия в стоимости использования заклинаний превращения (взято из DNdR Script Patch).
Привет. Так получится добавить опционально в тестовой версии? :)
Привет, завтра сделаю. Определись с вариантом.
Определись с вариантом.
если про свитки превращения то "вариант 2"
// *********************
// Alle Transform Spells
// *********************
const int SPL_Cost_TrfSheep = 10;
const int SPL_Cost_TrfScavenger = 10;
const int SPL_Cost_TrfGiantRat = 10;
const int SPL_Cost_TrfGiantBug = 10;
const int SPL_Cost_TrfWolf = 10;
const int SPL_Cost_TrfLurker = 25;
const int SPL_Cost_TrfSnapper = 25;
const int SPL_Cost_TrfWaran = 25;
const int SPL_Cost_TrfWarg = 25;
const int SPL_Cost_TrfFireWaran = 45;
const int SPL_Cost_TrfShadowbeast = 45;
const int SPL_Cost_TrfDragonSnapper = 45;
Вот: https://dropmefiles.com/vyWpH
Если нужно, меняй в свежих скриптах эти константы, свитки теперь используют именно их:
const int SPL_Cost_TrfSheep = 5;
const int SPL_Cost_TrfScavenger = 5;
const int SPL_Cost_TrfGiantRat = 5;
const int SPL_Cost_TrfGiantBug = 5;
const int SPL_Cost_TrfWolf = 5;
const int SPL_Cost_TrfWaran = 5;
const int SPL_Cost_TrfSnapper = 5;
const int SPL_Cost_TrfWarg = 5;
const int SPL_Cost_TrfFireWaran = 5;
const int SPL_Cost_TrfLurker = 5;
const int SPL_Cost_TrfShadowbeast = 5;
const int SPL_Cost_TrfDragonSnapper = 5;
а как включить?
уже включено - константы изменены
А огненный дождь 5 маны отнимает 😀
наверное мы как обычно про разное говорим. я предложил сделать расход маны на свитки в игре, как это было в Готике 1 и Готики 2. что бы усложнить таким образом игру. в таком случае герой первого уровня не сможет например убить всех паладинов в порту или всех бандитов в лагере Декстера через свиток огненный дождь. в последствие когда герой прокачает ману или найдёт бонусы к мане и соберет/купки шмотки на ману он сможет использовать сложные свитки типа огненный дождь, вызов демона. но не в начале игры.
Для этого мною было предложено ввести переменную, что бы это можно протестировать, сравнить, понять целесообразность, определить узкие моменты и прочее.
у тебя же почему то всё это свелось к свиткам превращения :-(
Сказываются события последних дней в моей стране и постоянные нервные недосыпы. Пока не до экспериментов. Поэтому релиз того что есть будет через неделю. По этой же причине в нем не будет ребаланса оружия в продаже.
Ясно. Надо поспать 😀
поиграл я сегодня с правками на свитки. пока впечатления исключительно положительные. в начале игры герой ограничен в свитках и не может воспользоваться даже свитком заморозки. что бы его задействовать без прокачки маны за ЛП надо одеть два кольца и найти первые 50 грибов :-) в тоже время если герой планирует идти в маги и в начале игры готов вкладывать ЛП в ману получает наоборот на старте бонус: можно свитки использовать :-) ну и конечно же ни о каких огненных дождях в первой главе и речи не может идти :-)
сделал у себя константы в IT_Scrolls.d
const int SPL_SC_Cost_PalLight = 5;
const int SPL_SC_Cost_PalLightHeal = 5;
const int SPL_SC_Cost_PalHolyBolt = 5;
сделал func void SPL_SC_Cost которая меняла бы стоимость
func void SPL_SC_Cost()
{
if (ScrollMode == True)
{
SPL_SC_Cost_PalLight = SPL_Cost_PalLight ;
SPL_SC_Cost_PalLightHeal = SPL_Cost_PalLightHeal ;
SPL_SC_Cost_PalHolyBolt = SPL_Cost_PalHolyBolt ;
}
else
{
SPL_SC_Cost_PalLight = SPL_Cost_Scroll ;
SPL_SC_Cost_PalLightHeal = SPL_Cost_Scroll ;
SPL_SC_Cost_PalHolyBolt = SPL_Cost_Scroll ;
};
};
подскажите пожалуйста куда лучше воткнуть вызов SPL_SC_Cost();
а то у меня ума нет и я её в SleepABit.d засунул, что наверное не очень правильно :-) хотя и работает :-)
сделал у себя константы в IT_Scrolls.d
Суть констант в том, что они определяются только один раз и дальше только используются без переопределений. Поэтому здесь нужны не const, а var. И изначально без определений, они будут позже:
var int SPL_SC_Cost_PalLight;
var int SPL_SC_Cost_PalLightHeal;
var int SPL_SC_Cost_PalHolyBolt;
подскажите пожалуйста куда лучше воткнуть вызов
У меня есть функция B_CheckDynamicText(), которая вызывается при каждой инициализации каждого мира (при переходе из другого или при загрузке сохранения). Добавляй свой код туда.
в итоге вызов SPL_SC_Cost() добавил в Startup.d под B_CheckDynamicText(),
Поэтому здесь нужны не const, а var
спасибо!
Заметь, что добавлять нужно четыре раза: в init каждого мира.
угу, я через поиск так сказать :-) вот только при старте игры не отображается на свитках сколько надо маны. приходится сохранить игру, а потом загрузить. но я думаю в процессе осознаю что не так :-)
кстати а что это заклинание лечения нельзя произнести если жизни полные? :-)
кстати а что это заклинание лечения нельзя произнести если жизни полные? :-)
а зачем? в Г1 тоже нельзя.
в 4 главе у ледяного дракона у силовика ОнД маны не хватило на то что бы задействовать огненный дождь. видимо оттого что ОНД не получал бонус к мане за молитву + у меня не было амулету на ману (но был посох) + я не покупал эликсиры к мане.
в целом вот это действительно способно усложнить игру :-) не виртуально, а реально. при этом баланс то Пираней. и идея Пираней. и концепция тоже Пираней. и главное что теперь понятно, что никакой там левый НПС не может гипотетически просто взять свиток и что то там сделать. так как у него маны просто не хватит.. даже на банальный ледяной блок :-)
кстати а что это заклинание лечения нельзя произнести если жизни полные? :-)
а зачем? в Г1 тоже нельзя.
в Готике 1 у исцеления другая механика ;-)
играю в Готику 2 классик и местами она конечно Готики 2 НВ. особенно на свитках это чувствуется. в связи с этим вопрос, а нельзя ли в неоф. обновление опционально сделать что бы свитки требовали столько же маны сколько требуют и руны? технически это возможно?
Было бы интересно поиграть с такими настройками и в плане баланса (усложнения игры) и в плане "конона".