Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Да сделай ты игроку тупо резист от этого заклинания и все. Ну или реген хп всунь равный проходящему урону. По моему умирать от собственного заклинания совсем не ок.

Опубликовано (изменено)

Иммунитет от этого заклинания будет иметь нежить (вампиры, драугры, двемеры и т.д.) и дети. Все же остальные будут уязвимы. (т.е. мое заклинание будет резонно использовать вампиру) Да и вопрос был не в этом.
Один очень хороший человек подсказал, что косяк не в заклинании, а во взрыве. + выдвинул теорию, которая вскоре подтвердилась: "Думаю причина серого экрана в том, что пока тело игрока не остановится, игра не завершится. Примерно такой же эффект наблюдается, когда ГГ падает со скалы (пока труп не остановился, игра не завершится), а тут мы умираем и превращаемся в горсть пепла, значит оболочки у него физической уже нету, поэтому и камеру игровую привязать некуда". + корень проблемы лежал в скрипте заклинания. (для теста мы убрали эффект превращения ГГ в желе).
Так же в скрипте были маленькие подводные камни в виде ссылок на взрывы, которые в свою очередь ссылались на старые заклинания. (тоже подправили)
В итоге сейчас заклинание имеет следующий функционал:
1) кастуем заклинание чумы
2) заражаются NPC
3) Когда NPC погибает, рядом с ним размещается объект взрыва
4) Объект взрыва содержит зачарование/чары
5) Зачарование/чары содержат заклинание чумы и далее по кругу
Единственное, теперь если на ГГ "налаживается" объект взрыва, то он НЕ превращается в жижу (останки призрака), а просто умирает, как в дефолте. 
Теперь вопрос в следующем: (Представим, что все, что я писал выше - не было) Возможно ли, при смерти ГГ привязать камеру к жиже, с нормальным функционалом (т.е. что бы после смерти ГГ появляется загрузочный экран, а не "баганый" серый)

Изменено пользователем GOLDEN KINDER
Опубликовано (изменено)
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]

Изменено пользователем GOLDEN KINDER
Опубликовано
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
Опубликовано (изменено)
12.04.2016 10:43:51, werr сказал(-а):

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

Внес изменения в скрипт (внесение изменения в скрипт прошли без ошибок), далее опробовал в игре и увидел две проблемы: 
1) Внесения изменения в скрипт возвращают проблему с "серым экраном" (думаю не нужно писать, как это происходит) 
2) Внесения изменения в скрипт добавляют всем NPC при смерти визуальный эффект из заклинания, который просаживает фпс.
ScreenShot15.jpg
ScreenShot16.jpg

Немного о внесенных правках:
Я показал внесенные изменения человеку, который до этого правил этот скрипт.
Цитирую: "ну для NPC работает, а он вроде продублировал тот же код, что для npc, только вписал игрока... интересно какой смысл, если переменная victim применима как npc, так и к игроку - т.е. к любому, кто попал под действие заклинания."

Изменено пользователем GOLDEN KINDER
Опубликовано

Может кто-нибудь помочь с переносом из одного домика Элианоры в другой ее же домик купели для снятия зачарований?

Ну или хотя бы объяснить, как это сделать. Долго очень уже мучаюсь и никак не получается...

Опубликовано
12.04.2016 13:23:23, GOLDEN KINDER сказал(-а):

Внес изменения в скрипт (внесение изменения в скрипт прошли без ошибок), далее опробовал в игре и увидел две проблемы: 
1) Внесения изменения в скрипт возвращают проблему с "серым экраном" (думаю не нужно писать, как это происходит) 
2) Внесения изменения в скрипт добавляют всем NPC при смерти визуальный эффект из заклинания, который просаживает фпс.


Немного о внесенных правках:
Я показал внесенные изменения человеку, который до этого правил этот скрипт.
Цитирую: "ну для NPC работает, а он вроде продублировал тот же код, что для npc, только вписал игрока... интересно какой смысл, если переменная victim применима как npc, так и к игроку - т.е. к любому, кто попал под действие заклинания."

Ну касательно игрока... Твой скрипт и ванильный скрипт различаются. В твоем скрипте с IF и ENDIF накосячено переделано, и получилось, что игрок не упоминается совсем. Т.е. когда происходит ивент умирания, к victim-у, если это не игрок применяются команды, а если victim имеет значегие игрок, то ничего не происходит. В ванильном скрипте такого нет. 

 

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

  • Нравится 1
Опубликовано (изменено)
13.04.2016 10:50:24, Dimonoider сказал(-а):

Тогда лучше обходными путями не давать игроку помереть. Просто же все.

Дело в том, что мне нужно, что бы ГГ мог заразиться от NPC, а в последствии умереть, если у него было мало хп. (напомню, ГГ будет иметь иммунитет, если он является вампиром. Опять же повторяюсь, что это заклинание будет резонно использовать именно вампиру)

Изменено пользователем GOLDEN KINDER
Опубликовано (изменено)
13.04.2016 10:36:10, werr сказал(-а):

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

Угу, есть такая проблема в дефолтном заклинании. Я это исправил. Вот скрины моего заклинания:

Спойлер
l;'l;'.png
kl;.jpg
iop.jpg

 

А по поводу серого экрана... Попробую описать ситуацию, как вижу её я: Наш ГГ умирает (от заражения NPC), тело падает и одновременно исчезает. Вместо тела появляется черная жижа (останки призрака) и тут же после этого, моментально появляется серый экран. Возможно причина серого экрана в исчезновении физической оболочки (тела), из-за которой некуда привязать игровую камеру. Опять же, если вместо дефолтного скрипта использовать тот, который выложил я (в этом скрипте ГГ не превращается в черную жижу), то в этом случае происходит обычная смерть без серого экрана, но я хочу добиться того, что бы ГГ ничем не отличался от NPC в плане смерти (т.е. падал, превращался в прах, и т.д. без серого экрана).
 

Вообще, дефолтное заклинание использует несколько файлов: (вдруг кому пригодиться)

Спойлер
fdhfdh.jpg

  Изменено пользователем GOLDEN KINDER
Опубликовано
13.04.2016 12:14:05, GOLDEN KINDER сказал(-а):

 

 

А шейдер срабатывает на игроке?

Ибо ты выставил альфу 0.0. А это делает шейдеры бесполезными.Они не отображаются тупо. А вотесли 0.1. к примеру. То шейдер работает в полной мере. Не ручаюсь правда за порядок альфа-> шейдер или шейдер->альфа.

Опубликовано (изменено)
13.04.2016 12:36:17, Dimonoider сказал(-а):

А шейдер срабатывает на игроке?

Ибо ты выставил альфу 0.0. А это делает шейдеры бесполезными.Они не отображаются тупо. А вотесли 0.1. к примеру. То шейдер работает в полной мере. Не ручаюсь правда за порядок альфа-> шейдер или шейдер->альфа.

Если ты о кейворде "ActorTypeUndead", то да. Все работает. Если ГГ является вампиром, то он не восприимчив на эффект заклинания.

Изменено пользователем GOLDEN KINDER
Опубликовано
13.04.2016 12:39:00, GOLDEN KINDER сказал(-а):

Если ты о кейворде "ActorTypeUndead", то да. Все работает. Если ГГ является вампиром, то он не восприимчив на эффект заклинания.

Нет, я не о кейворде-_-

Но у разрабов именно такая конструкция, хотя и странновато.

В таком случае попробуй банально накинуть альфу на игрока и под ноги ему кинуть кучку пепла

Опубликовано (изменено)
13.04.2016 12:47:55, Dimonoider сказал(-а):

В таком случае попробуй банально накинуть альфу на игрока и под ноги ему кинуть кучку пепла

Можно чуть-чуть поподробнее?) Как именно это сделать? (Я в некотором роде чайник. CK познавал из видео-уроков и различных статей)

Изменено пользователем GOLDEN KINDER
Опубликовано
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)

Проверил, анимация появления кучки сработает вместе с ее появлением, и специально их запускать не потребуется

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

Опубликовано (изменено)
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

Изменено пользователем GOLDEN KINDER
Опубликовано
13.04.2016 13:33:30, GOLDEN KINDER сказал(-а):

Немного не понял с заменой. В скрипте нет строчки game.getPlayer().AttachAshPile(pDefaultAshPileGhost) (Для теста взял текст дефолтного скрипта).

Я говорил про тот скрипт который тебе werr дописал)

Там отдельно вынесено условие если виктим игрок.

Опубликовано
13.04.2016 13:46:56, GOLDEN KINDER сказал(-а):

Опробовал. Серый экран не исчез(

Попробуй не убивать игрока. Чтоб отследить стадии скрипта. Визуально. 

Еще вариант "убийство" совершить после шейдеров и пепла"
 

Опубликовано (изменено)
13.04.2016 13:48:49, Dimonoider сказал(-а):

Попробуй не убивать игрока. Чтоб отследить стадии скрипта. Визуально. 

Еще вариант "убийство" совершить после шейдеров и пепла"
 

Вот что я делал:
1) заразил NPC (тот умер)
2) мы попали в радиус заклинания (ГГ заразился от NPC)
3) ГГ получает урон 100 ед. каждую секунду в течении 10 секунд (дабы не умереть, я выпивал хилки)

4) 10 секунд прошло - мы живы (все визуальные эффекты заклинания исчезли)

5) если умереть после - происходит обычная смерть.
6) попробовал прописать ГГ "kill" до и после смерти, под действием чумы - ГГ умер и появился серый экран

Изменено пользователем GOLDEN KINDER
Опубликовано
13.04.2016 13:54:19, GOLDEN KINDER сказал(-а):

 

эту строку 

game.getPlayer().setactorvalue("Health", 0.0)

попробуй на ченить другое спихнуть.

game.getPlayer().kill()

или вообще не убивать принудительно игрока. 

Опубликовано (изменено)
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()? (Ты цитируешь мои сообщения, которые пусты)

Изменено пользователем GOLDEN KINDER
Опубликовано
13.04.2016 14:08:14, GOLDEN KINDER сказал(-а):

 

Да. либо вообще удалить эту строку

Я цитирую и просто убираю содержимое. Так пост не растягивается а тебе прилетает уведомление.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...