Возможно, у вас стоит галочка ModelSpaceNormal в разделе SgaderFlag1... он отвечает за нормали на телах людей - они там рассчитаны на 360°, а нормали только на 90... попробуйте...
Альфа-канал в нормали отвечает не только за блеск, но и за силу альфа-канала... если сделать полностью чёрный альфа-канал у нормали, то это будет равносильно тому, что бы вообще не ставили карту нормали. Тогда какой в ней смысл?
А вообще, в любой нормали альфа-канал нужно уметь делать. Так, например, для углублений нужно затемнять альфа-канал, поскольку, в реальном мире, если есть углубление - то туда попадает меньше света (т.к. его перекрывают выступы), а значит, и блестеть будет меньше. К тому же различные участки могут по разному блестеть. Например, кованная часть меча - будет блестеть меньше, но она нуждается в большей силе альфа-канала, тогда как заточенная часть будет более гладкой, и блестеть сильнее, хотя в то же время ей нормаль не сильно нужна, т.к. там итак всё гладко.
А на счёт блеска - есть много настроек в нифскопе, например, Glossines или Enveroment. В них тоже нужно понимать разницу. Так же в текстурном шейдере есть настройка двух цветов (они чаще всего белый и чёрный). Если их поднастроить, можно добиться более правильного результата. Так что, тупо заливать альфа-канал в карте нормалей я бы никогда не советов (если вы не делаете монотонный монолит).
Разумеется, потому что когда вы удаляете альфа-канал (или выбираете DXT1 сжатие) то альфа читается белой точкой. А если делать альфа-канал чёрным - то проще вообще не ставить нормаль. Что бы убрать блеск - нужно контролировать это в нифскопе, не больше. Посмотрите хотя бы текстуры деревянного лука или драконьей кости - у них альфа-канал очень далёк от чёрного. И поковыряйте настройки текстурного шейдера в нифскопе у тех деревяшек или костей, и поймёте, в чём кроется секрет.
И ещё один вопрос попутно: Я нашёл способ, как сделать, что бы при рукопашной повышались карманные кражи - повесил на удары кулаком скрипт, который повышает навык. А как сделать, что бы при взломе замков повышался навык карманных краж (если вдруг я захочу объединить эти две ветки)? И есть ли способ хитрее того, который придумал я?
Пытаюсь на основе взлома замков из этого мода создать свой (как обычно). Хочу написать формулу, которая будет расчитывать рандом, умноженный на навык взлома и делённый на уровень замка (Random*LockpickingLevel/LockLevel). Да только проблема - как написать "Определить уровень навыка взлома"?
Пробовал вписать LockPickLevel == Player.GetSkill("LockPicking"), пробовал LockPickLevel == Player.GetSkillLevel("LockPicking") - ничего не подходит. Не подскажете, как быть?
А у меня ещё вопрос: Есть ли функция, которая определяет, стоит ли перед персонажем другой персонаж? Т.е. хочу сделать скрипт, который кидает заклинание перед персонажем, но только если перед ним стоит другой персонаж.
Как ни странно, но именно этого я и хочу. Главное, что бы перед ним враг был, а так, скрипт, который кастует через несколько секунд заклинания я уже сделал (знаю, это очень простой скрипт, но для меня и это подвиг). А то странно будет, что в бою он кидает заклинания каждые 8 секунд куда-попало.
Multigone, боюсь, без вашей помощи никак не обойтись...
Сделал Способность (постоянный эффект на себя), которая постоянно висит на существе (для проб создал амулет с зачарованием). На способности висит скрипт:
Idle property TuumIdle auto Sound property DragonFireBreath auto Spell property CheckActorSpell auto Perk property ActorYesPerk auto Spell property DragonTuumSpell auto
Event OnEffectStart(actor T, actor Ca)
CheckEffect(T, Ca)
EndEvent
Function CheckEffect(Actor T, Actor Ca)
If (Ca.IsInCombat()) CheckActorSpell.Cast(Ca) If (Ca.HasPerk(ActorYesPerk)) Ca.PlayIdle(TuumIdle) DragonFireBreath.play(Ca) DragonTuumSpell.Cast(Ca) Else ;(ничего) EndIf
Else ;(ничего) EndIf
Utility.Wait(3) CheckEffect(T, C)
EndFunction
CheckActorSpell - это заклинание, которое он кидает для проверки (скопированный Захват Душ). На заклинании скрипт:
Event OnEffectStart(actor X, actor Y) Y.AddPerk(_LEXO_Perk) endEvent
Event OnEffecFinish(actor X, actor Y) Y.RemovePerk(_LEXO_Perk) endEvent
Т.е. летит заклинание. Если попало по кому-то, то даётся перк, необходимый для кастования заклинания из скрипта. Через секунду перк отбирается, поскольку эффект заканчивается.
Теперь проблема: когда нет боя - он ничего не кастует. Как только наступает бой, он каждые 3 секунды пуляет заклинание, и не важно, есть перед ним враг или нет. Как только бой заканчивается - всё проходит. Не подскажете, в чём я промахнулся?
Стоп. Как это? Я создал "Яд некроза", в котором прописано "Perk to Apply" мой перк, который сводит к нулю действие лечебных заклинаний и зелий. Проверял на врагах - и действительно они не лечатся. Или то, что ты написал относится только к скриптам?
Хм... вот как... спасибо большое! Но на счёт "Perk to Apply" - он работает на НИПов. Просто эта штука работает только на эффектах "На себя". Создай яд (все зелья действуют "на себя") и повесь на него эффект с перком... убедись, что это работает...
Кстати, Multigone, проблема... Когда скрипт кидает заклинание для проверки, то, даже если заклинание попадёт, есть же вероятность, что враг будет смотреть куда-нибудь в сторону. Тогда эффект не возвратится и скрипт не сработает. Что делать?
К тому же у меня какая-то байда... я слегка переделал скрипт:
Spell property CheckActorSpell auto ; заклинание-проверка Spell property ActorYesSpell auto ; ответ на заклинание-проверку MagicEffect Property pM2 Auto ; Эффект заклинания-проверки.
Spell property DragonTuumSpell auto ; драконий крик Idle property DragonTuumIdle auto ; анимация Sound property DragonTorShul auto ; звук крика
Actor FollowersDrago ; Дракон
Actor selfref
Event OnEffectStart(actor T, actor C)
selfref = T OnUpdate() ; Старт.
ENDEVENT
EVENT OnUpdate() IF CheckEffect() ;Debug.Notification("Зажигаем!") FollowersDrago.PlayIdle(DragonTuumIdle) DragonTorShul.play(FollowersDrago) DragonTuumSpell.Cast(FollowersDrago) ENDIF
RegisterForSingleUpdate(1.0) ; ENDEVENT
Bool FUNCTION CheckEffect() ; Основная функция-проверка. If (FollowersDrago.IsInCombat()) CheckActorSpell.Cast(FollowersDrago) ; Бьем заклинанием и ждем ответа. Int iC = 50 ; Даем 0.5с на возврат.
WHILE iC && !FollowersDrago.HasMagicEffect(pM2) ; Ждем, пока эффект ответа не будет на источнике или не истечет время. Utility.Wait(0.01) iC -= 1 ENDWHILE
IF iC ; Если время не истекло. FollowersDrago.DispelSpell(ActorYesSpell) ; Снимаем. RETURN true ENDIF EndIf ; По умолчанию возвр. false. ENDFUNCTION
Проблема в том, что он не кидает заклинание. Не пойму почему... специально делал заклинание с видимым эффектом для проверки и ставил не на актёра, а на цель... не кидает, и всё тут. Если убираю всё, кроме проверки на бой - то в бою он постоянно "дышит" заклинанием... а как только добавляю остальные - перестаёт.
Извините, народ, но не могу не написать - очень интересный вопрос возник.
Возможно ли сделать такой скрипт, который брал бы имя одного персонажа и назначал его на другого?
Хочу сделать ритуал воскрешения, но в другом облике, что бы исчезал полностью старый персонаж, на его месте появлялся другой, но с таким же именем.
P.S.: Думаю, подобную вещь можно произвести с помощью команды SetRace и добавления невидимой брони (всё как у вампира-лорда), но вдруг можно сделать так, как я описал выше?
1.загружаем в макс без подгрузки скелетов модели капюшона и шлема.
А ещё проще всё перетащить в нифскопе... никаких 3D максов не надо... у шлемов, как правило, 1 кость - Head. Открываем 2 модели в нифскопе, из одной в другую вставляем NiTriShapeData (скорее всего, перед этим придётся переименовать самый первый нод на название второй модели). После такой махинации даже ничего переделывать не нужно (если, конечно, вам не надо уменьшить\переместить\повернуть одну из моделей)...
Слушайте, у меня тут проблема... создаём заклинание... планировалось сначала создать призыв существа (блуждающий огонёк), который будет всё время находиться рядом и лечить (только лечить, и ничего больше)... получилось всё, кроме одного - существо в бою начинает убегать куда-подальше... пробовали ставить пакет Follow, пробовали Follow to Player - ничего не помогает, поэтому, решили изменить идею:
Сделали заклинание призыв магического света, который будет лечить игрока... и всё было хорошо - когда эффект висит, он лечит игрока при повреждении... когда эффект заканчивается - не лечит... но... когда кастуешь эффект второй раз - он лечит 2 раза и перестаёт... в чём может быть проблема?
Spell Property HealOther Auto ;- Лечение Spell Property GrandHealing Auto ;- Великое Лечение Actor Property Player auto MagicEffect Property _WisplHealerLightFFSelf auto float property Health95 = 0.95 auto float property Health50 = 0.5 auto
Event OnEffectStart(actor target, actor caster) RegisterForSingleUpdate(2) EndEvent
Event onupdate() if (Player.HasMagicEffect_WisplHealerLightFFSelf)) if (Player.GetActorValuePercentage("health") < Health95) && \ (Player.GetActorValuePercentage("health") > Health50) HealOther.Cast(Player, Player) ;- Лечим elseif (Player.GetActorValuePercentage("health") <= Health50) GrandHealing.Cast(Player, Player) ;- Сильно Лечим RegisterForSingleUpdate(2) EndIf else ;ничего не происходит EndIf EndEvent
эффект немоты для ГГ, при котором он не сможет пользоваться криками
Это не в раздел скриптов писать надо...
Создаёшь перк, в котором выбираешь Entry Point - Mod Shout OK, выставляешь Set Value = 0.
Создаёшь магический эффект, архитип не важен, поэтому можно скрипт... в разделе Perk To Apply выставляешь созданный выше перк и всё - по-идее должно помочь.
Добавлено (06 Августа 2016, 21:43) --------------------------------------------- Но у меня самого вопрос:
Создаём эффект превращения из одного существа в другое... вот скрипт:
idle property IdleVampireTransformation auto actor property TransformActor auto actor property selfRef auto hidden explosion property FXVampChangeExplosion auto float property DragoLifeTime auto
Event OnEffectStart(actor Target, actor Caster) selfRef = caster
if Target == none return endIf ;actor CombatTarget = Target.GetCombatTarget() Target.placeatme(FXVampChangeExplosion as form, 1, false, false) Target.disable(false) TransformActor.MoveTo(Target as objectreference, 0 as Float, 0 as Float, 10 as Float, true) TransformActor.Enable(false) ;if CombatTarget != none ;TransformActor.StartCombat(CombatTarget) ;endIf
endFunction
Function TransformBack(actor Target)
TransformActor.placeatme(FXVampChangeExplosion as form, 1, false, false) TransformActor.Disable(false) Target.MoveTo(TransformActor as objectreference, 0 as Float, 0 as Float, 10 as Float, true) Target.Enable(false)
EndFunction
Превращение происходит, взрыв наблюдается, спустя определённое время обратное превращение тоже происходит... но есть 2 проблемы: Во-первых, не происходит анимация вампира (которая там написана)... Во-вторых появляющийся чудик начинает сразу сражаться со стражниками... так же он сражался и с модовскими спутниками, но после добавления им фракции Игрока он перестал это делать... но со стражниками проблема остаётся... пробовали поставить это существо просто рядом со стражником - всё спокойно... но как только появляется с помощью скрипта - агрессивный... в чём может быть проблема?.. заранее благодарен...
SpookyPVP, если не ошибаюсь, тело вервульфа - это броня. Надо найти броню, и среди рас, для которых доступна это броня (правое окошечко), нужно выбрать вашу расу. По-идее, должно помочь...
Есть вопрос - возможно ли в перке реализовать критический урон от заклинаний огня, мороза или электричества?
Легко: Создаёшь перк, в котором выбираешь Entery Point "Mod Spell Magnitude", выбрав "Multiply Value, выставляешь силу, с которой должно критовать заклинание. В Conditions разделе Spell вписываешь "HasKeyword: (какой там кейворд у электрических заклинаний?)", а в разделе Perk Owner выбираешь "GetRandomPercent" и выставляешь процент, с которым хочешь критровать.
Собственно, я и направил SoulDiablo, сюда, т.к. вы мне очень много раз помогали... на счёт циферблата - тоже особой проблемы нету... среди моделей в Скайриме я как-то раз обнаружил странную штуку, которую никогда не видел... в нифскопе это выглядит как какие-то цифры, а в СК это представляет из себя как раз-таки таймер с обратным отсчётом... забавно выглядит... но суть не в этом...
Эффект заклинания SoulDiablo - на себя. Так что, скрипт с предыдущей страницы вполне подойдёт...
Народ, а есть в скриптах функция, которая отвечает за то, что бы спутник был в группе? И ещё, что бы определить расстояние до спутника...
Просто делаем спутника, который, как бы это банально не звучало, должен лечить... всё есть, всё работает... осталось только сделать наличие его в спутниках и близко.
Есть несколько модов на таких спутников, но... там ТАКАЯ куча скриптов и они такие огромные, что запутаться легко...
Ребят, такая штука: сделал скрипт на изменение погоды. Погода меняется, но... когда по окончанию скрипта погода возвращается на нормальную, получается вот такая ерундень:
1) Писать надо не сюда, а вооон туда. 2) Самый лучший (хоть и не простой) вариант - подружиться с Максом. 3) На нексусе есть такой раздел, как "Ресурсы" - там предоставляются в свободном доступе различные паки всего-подряд (может быть даже и флоры)
Не помню, задавался ли тут такой вопрос, но... возможно ли проверить, какой тип оружия экипирован? Конкретно, проверить, экипирован ли боевой молот? Пытался сделать эффект отбрасывания, как при Безжалостной силе, но... молоты почему-то вообще не хотят воспринимать никакие эффекты через Apply Combat Hit Spell... вот я и подумал сделать эффект через скрипт... не подскажете способ, как это сделать?
Добавлено (15 Декабря 2016, 08:24) --------------------------------------------- Опа... заметил, что проблемы с молотами возникли только в моём моде, потому что без него всё работает... надо понять, что я натворил с молотами...
Но вопрос всё-ровно интересный - можно ли в скрипте сделать проверку на тип оружия?
Теперь у меня новый вопрос... вот нашёл способ, как кидать заклинание во время атаки оружием... а можно сделать различие между атакой правой рукой и левой?
Народ, простите мою тупость, но я уже 2 дня голову себе ломаю, никак не могу добиться желаемого результата...
Заклинание должно убирать из инвентаря предмет, кидать прожектайл. Когда прожектайл взрывается, на месте взрыва должен появиться тот самый предмет (желательно реф, а не базовый).
Примерно так делаю:
Event OnEffectStart(actor B, actor A) Selfref = A Selfref.RemoveItem(_LEXO_Item) RegisterForSingleUpdate(1) EndEvent
Прожектайл этого заклинания создаёт взрыв. Взрыв создаёт активатор.
GlobalVariable property _LEXO_Drop Auto
Event OnLoad()
If (_LEXO_Drop.GetValue() == 0) _LEXO_Drop.SetValue(1) EndIf
EndEvent
Но у меня всё время проблема... либо он не хочет компилировать - проблема в "ActivatorRef = _LEXO_PlacedActivator.Getref()".
А если что-то и закомпилируется, то не работает. Заклинание кидается, предмет удаляется, но валяться на месте не хочет... подскажите, пожалуйста, что не так...
PitrPokir, да, говорят, что после обновления 1.7 (если не ошибаюсь) Беседчики сделали так, что призыв существ и поднятие нежити становится эффектом "На себя". Кстати, это создало кучу проблем, с поглощением заклинаний (талант "Атронах" и т.п.). Поэтому надо что-то думать...