Potatoider Опубликовано 12 апреля, 2016 Опубликовано 12 апреля, 2016 Да сделай ты игроку тупо резист от этого заклинания и все. Ну или реген хп всунь равный проходящему урону. По моему умирать от собственного заклинания совсем не ок.
GOLDEN_KINDER Опубликовано 12 апреля, 2016 Опубликовано 12 апреля, 2016 (изменено) Иммунитет от этого заклинания будет иметь нежить (вампиры, драугры, двемеры и т.д.) и дети. Все же остальные будут уязвимы. (т.е. мое заклинание будет резонно использовать вампиру) Да и вопрос был не в этом. Один очень хороший человек подсказал, что косяк не в заклинании, а во взрыве. + выдвинул теорию, которая вскоре подтвердилась: "Думаю причина серого экрана в том, что пока тело игрока не остановится, игра не завершится. Примерно такой же эффект наблюдается, когда ГГ падает со скалы (пока труп не остановился, игра не завершится), а тут мы умираем и превращаемся в горсть пепла, значит оболочки у него физической уже нету, поэтому и камеру игровую привязать некуда". + корень проблемы лежал в скрипте заклинания. (для теста мы убрали эффект превращения ГГ в желе). Так же в скрипте были маленькие подводные камни в виде ссылок на взрывы, которые в свою очередь ссылались на старые заклинания. (тоже подправили) В итоге сейчас заклинание имеет следующий функционал: 1) кастуем заклинание чумы 2) заражаются NPC 3) Когда NPC погибает, рядом с ним размещается объект взрыва 4) Объект взрыва содержит зачарование/чары 5) Зачарование/чары содержат заклинание чумы и далее по кругу Единственное, теперь если на ГГ "налаживается" объект взрыва, то он НЕ превращается в жижу (останки призрака), а просто умирает, как в дефолте. Теперь вопрос в следующем: (Представим, что все, что я писал выше - не было) Возможно ли, при смерти ГГ привязать камеру к жиже, с нормальным функционалом (т.е. что бы после смерти ГГ появляется загрузочный экран, а не "баганый" серый) Изменено 12 апреля, 2016 пользователем GOLDEN KINDER
werr Опубликовано 12 апреля, 2016 Опубликовано 12 апреля, 2016 Все возможно. Только вечером. И код скрипта выложи сюда, если не трудно. Ане на фишинговый сайт)) да, мой МинЮст меня бережёт. 1 A Random Dude's Story
GOLDEN_KINDER Опубликовано 12 апреля, 2016 Опубликовано 12 апреля, 2016 (изменено) 12.04.2016 08:39:23, werr сказал(-а): И код скрипта выложи сюда, если не трудно. Без проблем) [spoiler="Скрипт "Кровавой чумы" "]Scriptname DLC1nVampireBloodPlagueSCRIPT extends ActiveMagicEffect EXPLOSION PROPERTY corpseExplosion AUTO ; ////////// ; //ASH PILE VARIABLES ; ////////// float property fDelay = 0.75 auto {time to wait before Spawning Ash Pile} float property fDelayEnd = 1.65 auto {time to wait before Removing Base Actor} float property ShaderDuration = 0.00 auto {Duration of Effect Shader.} Activator property pDefaultAshPileGhost auto {The object we use as a pile.} Bool property bSetAlphaZero = True auto {The Effect Shader we want.} FormList Property pDisintegrationMainImmunityList auto {If the target is in this list, they will not be disintegrated.} EFFECTSHADER PROPERTY pGhostDeathFXShader AUTO {the shader to play while dying} race VictimRace ACTOR victim bool TargetIsImmune = True EVENT onEffectStart(Actor akTarget, Actor akCaster) victim = akTarget endEVENT EVENT onDying(ACTOR akKiller) victim.placeAtMe(corpseExplosion) createAshPile() endEVENT FUNCTION createAshPile() IF ( victim != game.getPlayer() ) ; //check to see if the target is in the immunity list IF(pDisintegrationMainImmunityList == none) TargetIsImmune = False ELSE ActorBase VictimBase = victim.GetBaseObject() as ActorBase VictimRace = VictimBase.GetRace() IF(pDisintegrationMainImmunityList.hasform(VictimRace) || pDisintegrationMainImmunityList.hasform(VictimBase)) TargetIsImmune = True ELSE TargetIsImmune = False ENDIF ENDIF ; //if the target is not immune, disintegrate them IF(TargetIsImmune == False) ; debug.trace("victim just died") victim.kill(game.getPlayer()) victim.SetCriticalStage(victim.CritStage_DisintegrateStart) IF(pGhostDeathFXShader != none) pGhostDeathFXShader.play(victim,ShaderDuration) ENDIF victim.SetAlpha (0.0,True) ; //attach the ash pile victim.AttachAshPile(pDefaultAshPileGhost) utility.wait(fDelayEnd) IF(pGhostDeathFXShader != none) pGhostDeathFXShader.stop(victim) ENDIF IF(bSetAlphaZero == True) victim.SetAlpha (0.0,True) ENDIF victim.SetCriticalStage(victim.CritStage_DisintegrateEnd) ENDIF ENDIF endFUNCTION[/spoiler] Изменено 12 апреля, 2016 пользователем GOLDEN KINDER
werr Опубликовано 12 апреля, 2016 Опубликовано 12 апреля, 2016 12.04.2016 08:45:57, GOLDEN KINDER сказал(-а): Без проблем) Спойлер начать стоит с того, что в скрипте у тебя игрок никак не фигурирует, так что че ты от него ждешь? Красное надо добавить. Не проверял в игре. Спойлер Scriptname DLC1nVampireBloodPlagueSCRIPT extends ActiveMagicEffect EXPLOSION PROPERTY corpseExplosion AUTO ; ////////// ; //ASH PILE VARIABLES ; ////////// float property fDelay = 0.75 auto {time to wait before Spawning Ash Pile} float property fDelayEnd = 1.65 auto {time to wait before Removing Base Actor} float property ShaderDuration = 0.00 auto {Duration of Effect Shader.} Activator property pDefaultAshPileGhost auto {The object we use as a pile.} Bool property bSetAlphaZero = True auto {The Effect Shader we want.} FormList Property pDisintegrationMainImmunityList auto {If the target is in this list, they will not be disintegrated.} EFFECTSHADER PROPERTY pGhostDeathFXShader AUTO {the shader to play while dying} race VictimRace ACTOR victim bool TargetIsImmune = True EVENT onEffectStart(Actor akTarget, Actor akCaster) victim = akTarget endEVENT EVENT onDying(ACTOR akKiller) victim.placeAtMe(corpseExplosion) createAshPile() endEVENT FUNCTION createAshPile() IF ( victim != game.getPlayer() ) ; //check to see if the target is in the immunity list IF(pDisintegrationMainImmunityList == none) TargetIsImmune = False ELSE ActorBase VictimBase = victim.GetBaseObject() as ActorBase VictimRace = VictimBase.GetRace() IF(pDisintegrationMainImmunityList.hasform(VictimRace) || pDisintegrationMainImmunityList.hasform(VictimBase)) TargetIsImmune = True ELSE TargetIsImmune = False ENDIF ENDIF ; //if the target is not immune, disintegrate them IF(TargetIsImmune == False) ; debug.trace("victim just died") victim.kill(game.getPlayer()) victim.SetCriticalStage(victim.CritStage_DisintegrateStart) IF(pGhostDeathFXShader != none) pGhostDeathFXShader.play(victim,ShaderDuration) ENDIF victim.SetAlpha (0.0,True) ; //attach the ash pile victim.AttachAshPile(pDefaultAshPileGhost) utility.wait(fDelayEnd) IF(pGhostDeathFXShader != none) pGhostDeathFXShader.stop(victim) ENDIF IF(bSetAlphaZero == True) victim.SetAlpha (0.0,True) ENDIF victim.SetCriticalStage(victim.CritStage_DisintegrateEnd) ENDIF ENDIF ;================================== if victim == game.getplayer() game.getPlayer().setactorvalue("Health", 0.0) game.getPlayer().SetCriticalStage(game.getPlayer().CritStage_DisintegrateStart) IF(pGhostDeathFXShader != none) pGhostDeathFXShader.play(game.getPlayer(),ShaderDuration) ENDIF game.getPlayer().SetAlpha (0.0,True) ; //attach the ash pile game.getPlayer().AttachAshPile(pDefaultAshPileGhost) utility.wait(fDelayEnd) IF(pGhostDeathFXShader != none) pGhostDeathFXShader.stop(game.getPlayer()) ENDIF IF(bSetAlphaZero == True) victim.SetAlpha (0.0,True) ENDIF game.getPlayer().SetCriticalStage(game.getPlayer().CritStage_DisintegrateEnd) endif ;================================= endFUNCTION 1 A Random Dude's Story
GOLDEN_KINDER Опубликовано 12 апреля, 2016 Опубликовано 12 апреля, 2016 (изменено) 12.04.2016 10:43:51, werr сказал(-а): начать стоит с того, что в скрипте у тебя игрок никак не фигурирует, так что че ты от него ждешь? Красное надо добавить. Не проверял в игре. Внес изменения в скрипт (внесение изменения в скрипт прошли без ошибок), далее опробовал в игре и увидел две проблемы: 1) Внесения изменения в скрипт возвращают проблему с "серым экраном" (думаю не нужно писать, как это происходит) 2) Внесения изменения в скрипт добавляют всем NPC при смерти визуальный эффект из заклинания, который просаживает фпс. Немного о внесенных правках: Я показал внесенные изменения человеку, который до этого правил этот скрипт. Цитирую: "ну для NPC работает, а он вроде продублировал тот же код, что для npc, только вписал игрока... интересно какой смысл, если переменная victim применима как npc, так и к игроку - т.е. к любому, кто попал под действие заклинания." Изменено 12 апреля, 2016 пользователем GOLDEN KINDER
Sirin... Опубликовано 12 апреля, 2016 Опубликовано 12 апреля, 2016 Может кто-нибудь помочь с переносом из одного домика Элианоры в другой ее же домик купели для снятия зачарований? Ну или хотя бы объяснить, как это сделать. Долго очень уже мучаюсь и никак не получается...
werr Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 12.04.2016 13:23:23, GOLDEN KINDER сказал(-а): Внес изменения в скрипт (внесение изменения в скрипт прошли без ошибок), далее опробовал в игре и увидел две проблемы: 1) Внесения изменения в скрипт возвращают проблему с "серым экраном" (думаю не нужно писать, как это происходит) 2) Внесения изменения в скрипт добавляют всем NPC при смерти визуальный эффект из заклинания, который просаживает фпс. Немного о внесенных правках: Я показал внесенные изменения человеку, который до этого правил этот скрипт. Цитирую: "ну для NPC работает, а он вроде продублировал тот же код, что для npc, только вписал игрока... интересно какой смысл, если переменная victim применима как npc, так и к игроку - т.е. к любому, кто попал под действие заклинания." Ну касательно игрока... Твой скрипт и ванильный скрипт различаются. В твоем скрипте с IF и ENDIF накосячено переделано, и получилось, что игрок не упоминается совсем. Т.е. когда происходит ивент умирания, к victim-у, если это не игрок применяются команды, а если victim имеет значегие игрок, то ничего не происходит. В ванильном скрипте такого нет. Я потыкал ванильный скрипт, в общем, было довольно сложно себя убить этим заклинанием, ибо окружающие умирают быстрее и, притом, неистово хилят игрока. Но один раз все-таки получилось себя убить и у меня тоже был серый экран. пока что хз что это, и почему игра не прекращается. 1 A Random Dude's Story
Potatoider Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 Тогда лучше обходными путями не давать игроку помереть. Просто же все.
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 (изменено) 13.04.2016 10:50:24, Dimonoider сказал(-а): Тогда лучше обходными путями не давать игроку помереть. Просто же все. Дело в том, что мне нужно, что бы ГГ мог заразиться от NPC, а в последствии умереть, если у него было мало хп. (напомню, ГГ будет иметь иммунитет, если он является вампиром. Опять же повторяюсь, что это заклинание будет резонно использовать именно вампиру) Изменено 13 апреля, 2016 пользователем GOLDEN KINDER
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 (изменено) 13.04.2016 10:36:10, werr сказал(-а): Я потыкал ванильный скрипт, в общем, было довольно сложно себя убить этим заклинанием, ибо окружающие умирают быстрее и, притом, неистово хилят игрока. Угу, есть такая проблема в дефолтном заклинании. Я это исправил. Вот скрины моего заклинания: Спойлер А по поводу серого экрана... Попробую описать ситуацию, как вижу её я: Наш ГГ умирает (от заражения NPC), тело падает и одновременно исчезает. Вместо тела появляется черная жижа (останки призрака) и тут же после этого, моментально появляется серый экран. Возможно причина серого экрана в исчезновении физической оболочки (тела), из-за которой некуда привязать игровую камеру. Опять же, если вместо дефолтного скрипта использовать тот, который выложил я (в этом скрипте ГГ не превращается в черную жижу), то в этом случае происходит обычная смерть без серого экрана, но я хочу добиться того, что бы ГГ ничем не отличался от NPC в плане смерти (т.е. падал, превращался в прах, и т.д. без серого экрана). Вообще, дефолтное заклинание использует несколько файлов: (вдруг кому пригодиться) Спойлер Изменено 13 апреля, 2016 пользователем GOLDEN KINDER
Potatoider Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 13.04.2016 12:14:05, GOLDEN KINDER сказал(-а): А шейдер срабатывает на игроке? Ибо ты выставил альфу 0.0. А это делает шейдеры бесполезными.Они не отображаются тупо. А вотесли 0.1. к примеру. То шейдер работает в полной мере. Не ручаюсь правда за порядок альфа-> шейдер или шейдер->альфа.
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 (изменено) 13.04.2016 12:36:17, Dimonoider сказал(-а): А шейдер срабатывает на игроке? Ибо ты выставил альфу 0.0. А это делает шейдеры бесполезными.Они не отображаются тупо. А вотесли 0.1. к примеру. То шейдер работает в полной мере. Не ручаюсь правда за порядок альфа-> шейдер или шейдер->альфа. Если ты о кейворде "ActorTypeUndead", то да. Все работает. Если ГГ является вампиром, то он не восприимчив на эффект заклинания. Изменено 13 апреля, 2016 пользователем GOLDEN KINDER
Potatoider Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 13.04.2016 12:39:00, GOLDEN KINDER сказал(-а): Если ты о кейворде "ActorTypeUndead", то да. Все работает. Если ГГ является вампиром, то он не восприимчив на эффект заклинания. Нет, я не о кейворде-_- Но у разрабов именно такая конструкция, хотя и странновато. В таком случае попробуй банально накинуть альфу на игрока и под ноги ему кинуть кучку пепла
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 (изменено) 13.04.2016 12:47:55, Dimonoider сказал(-а): В таком случае попробуй банально накинуть альфу на игрока и под ноги ему кинуть кучку пепла Можно чуть-чуть поподробнее?) Как именно это сделать? (Я в некотором роде чайник. CK познавал из видео-уроков и различных статей) Изменено 13 апреля, 2016 пользователем GOLDEN KINDER
Potatoider Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 13.04.2016 12:51:32, GOLDEN KINDER сказал(-а): Можно чуть-чуть поподробнее?) Как именно это сделать? (я в некотором роде чайник. CK познавал из видео уроков и различных статей) В общем вместо того чтобы присоеденять игроку пепел. """game.getPlayer().AttachAshPile(pDefaultAshPileGhost)""" Можно просто поместить модель этого "пепла" в точку где там невидимое тело игрока плюхнется. Вверху скрипта сделай: Activator property YourAshPile auto Далее вместо game.getPlayer().AttachAshPile(pDefaultAshPileGhost) Game.GetPlayer().PlaceAtMe(YourAshPile) Проверил, анимация появления кучки сработает вместе с ее появлением, и специально их запускать не потребуется Это должно убрать серый экран поскольку технически тело игрока осталось телом игрока, а ты лишь сделал его невидимым.
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 (изменено) 13.04.2016 13:00:10, Dimonoider сказал(-а): Далее вместо game.getPlayer().AttachAshPile(pDefaultAshPileGhost) Game.GetPlayer().PlaceAtMe(YourAshPile) Немного не понял с заменой. В скрипте нет строчки game.getPlayer().AttachAshPile(pDefaultAshPileGhost) (Для теста взял текст дефолтного скрипта). СпойлерScriptname BloodPlagueTestScript extends ActiveMagicEffect Activator property YourAshPile auto EXPLOSION PROPERTY corpseExplosion AUTO ; ////////// ; //ASH PILE VARIABLES ; ////////// float property fDelay = 0.75 auto {time to wait before Spawning Ash Pile} float property fDelayEnd = 1.65 auto {time to wait before Removing Base Actor} float property ShaderDuration = 0.00 auto {Duration of Effect Shader.} Activator property pDefaultAshPileGhost auto {The object we use as a pile.} Bool property bSetAlphaZero = True auto {The Effect Shader we want.} FormList Property pDisintegrationMainImmunityList auto {If the target is in this list, they will not be disintegrated.} EFFECTSHADER PROPERTY pGhostDeathFXShader AUTO {the shader to play while dying} race VictimRace ACTOR victim bool TargetIsImmune = True EVENT onEffectStart(Actor akTarget, Actor akCaster) victim = akTarget endEVENT EVENT onDying(ACTOR akKiller) victim.placeAtMe(corpseExplosion) createAshPile() endEVENT FUNCTION createAshPile() ; //check to see if the target is in the immunity list IF(pDisintegrationMainImmunityList == none) TargetIsImmune = False ELSE ActorBase VictimBase = victim.GetBaseObject() as ActorBase VictimRace = VictimBase.GetRace() IF(pDisintegrationMainImmunityList.hasform(VictimRace) || pDisintegrationMainImmunityList.hasform(VictimBase)) TargetIsImmune = True ELSE TargetIsImmune = False ENDIF ENDIF ; //if the target is not immune, disintegrate them IF(TargetIsImmune == False) ; debug.trace("victim just died") victim.kill(game.getPlayer()) victim.SetCriticalStage(victim.CritStage_DisintegrateStart) IF(pGhostDeathFXShader != none) pGhostDeathFXShader.play(victim,ShaderDuration) ENDIF victim.SetAlpha (0.0,True) ; //attach the ash pile victim.AttachAshPile(pDefaultAshPileGhost) utility.wait(fDelayEnd) IF(pGhostDeathFXShader != none) pGhostDeathFXShader.stop(victim) ENDIF IF(bSetAlphaZero == True) victim.SetAlpha (0.0,True) ENDIF victim.SetCriticalStage(victim.CritStage_DisintegrateEnd) ENDIF endFUNCTION Изменено 13 апреля, 2016 пользователем GOLDEN KINDER
Potatoider Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 13.04.2016 13:33:30, GOLDEN KINDER сказал(-а): Немного не понял с заменой. В скрипте нет строчки game.getPlayer().AttachAshPile(pDefaultAshPileGhost) (Для теста взял текст дефолтного скрипта). Я говорил про тот скрипт который тебе werr дописал) Там отдельно вынесено условие если виктим игрок.
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 :D: :D: :D: Понял)) Сейчас все изменю))
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 Опробовал. Серый экран не исчез(
Potatoider Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 13.04.2016 13:46:56, GOLDEN KINDER сказал(-а): Опробовал. Серый экран не исчез( Попробуй не убивать игрока. Чтоб отследить стадии скрипта. Визуально. Еще вариант "убийство" совершить после шейдеров и пепла"
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 (изменено) 13.04.2016 13:48:49, Dimonoider сказал(-а): Попробуй не убивать игрока. Чтоб отследить стадии скрипта. Визуально. Еще вариант "убийство" совершить после шейдеров и пепла" Вот что я делал: 1) заразил NPC (тот умер) 2) мы попали в радиус заклинания (ГГ заразился от NPC) 3) ГГ получает урон 100 ед. каждую секунду в течении 10 секунд (дабы не умереть, я выпивал хилки) 4) 10 секунд прошло - мы живы (все визуальные эффекты заклинания исчезли) 5) если умереть после - происходит обычная смерть. 6) попробовал прописать ГГ "kill" до и после смерти, под действием чумы - ГГ умер и появился серый экран Изменено 13 апреля, 2016 пользователем GOLDEN KINDER
Potatoider Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 13.04.2016 13:54:19, GOLDEN KINDER сказал(-а): эту строку game.getPlayer().setactorvalue("Health", 0.0) попробуй на ченить другое спихнуть. game.getPlayer().kill() или вообще не убивать принудительно игрока.
GOLDEN_KINDER Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 (изменено) 13.04.2016 14:03:43, Dimonoider сказал(-а): эту строку game.getPlayer().setactorvalue("Health", 0.0) попробуй на ченить другое спихнуть. game.getPlayer().kill() или вообще не убивать принудительно игрока. Т.е. заменить game.getPlayer().setactorvalue("Health", 0.0) на game.getPlayer().kill()? (Ты цитируешь мои сообщения, которые пусты) Изменено 13 апреля, 2016 пользователем GOLDEN KINDER
Potatoider Опубликовано 13 апреля, 2016 Опубликовано 13 апреля, 2016 13.04.2016 14:08:14, GOLDEN KINDER сказал(-а): Да. либо вообще удалить эту строку Я цитирую и просто убираю содержимое. Так пост не растягивается а тебе прилетает уведомление.
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти