• Добро пожаловать, Гость. Войдите или зарегистрируйтесь.

Автор Тема: Спецы по Скриптам помогите!!!!!!  (Прочитано 6354 раз)

Описание:

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GanibalSSV

  • *
  • Сообщений: 5
  • Репутация: 0
    • Просмотр профиля
    • Email
0
Добрый день всем!!!!!!   :)
Есть здесь спецы которые умеют штамповать скрипты?
Я сам пытался но понял что без понимания этого дела это бесполезно.
Помогите если не сложно!!!!
Скрипт по ходу сложный.   :D
Задумка такая - хочу сделать чтоб можно было сумонить Стража одеванием кольца, и убирать Стража снятием кольца.
Я переделал одного призрака в "Стража врат" хорошая находка для некроманта   :yahoo:

Оффлайн D.I.-сеня

  • *
  • Сообщений: 9
  • Репутация: 0
  • Пол: Мужской
    • ICQ клиент - 487662078
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #1 : 01 Июнь, 2009, 21:11:53 »
0
Помогите, пожалуйста, скрипт вроде правильный, но в чем-то ошибка, посмотрите пожалуйста :)

scriptname KainKnockoutGlobalScript

Begin ScriptEffectUpdate
    float timer
    short NPChealth
    short currenthealth
    float NPCborderhealth
    ref self
    short ModParameter
    short DoOnce
    short DoOnce2
    If DoOnce == 0
        set timer to 10.0
    Endif
End

Begin ScriptEffectUpdate
    set self to GetSelf
    If player.GetIsReference self
        self.removespell KainKnockoutGlobalDisease
        return
    endif
    set NPChealth to GetBaseActorValue health
    set currenthealth to GetActorValue health
    set npcborderhealth to npchealth * 0.1
    set ModParameter to (npcborderhealth - currenthealth)
End

Begin ScriptEffectUpdate
    If DoOnce2 == 0
        If currenthealth <= 0
            self.resurrect 1
            self.ModActorValue2 Health ModParameter
            set DoOnce2 to 1
        else
        Endif
    Endif
Endif
End

Begin ScriptEffectUpdate
    if currenthealth <= npcborderhealth
        self.ForceActorValue fatigue -100000
        if timer > 0
            If self.IsSpellTarget KainBloodDryingForTarget
                return
            Endif
            set timer to timer - GetSecondsPassed
        else
            self.Kill
        Endif
    Endif
    set DoOnce to 1
    set DoOnce2 to 1
End

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #2 : 01 Июнь, 2009, 21:34:10 »
0
Наш движок форума поддерживает отступы, поэтому я слегка отредактировал твой скрипт.
И вот самое первое, что бросилось в глаза:

Begin ScriptEffectUpdate
    If DoOnce2 == 0
        If currenthealth <= 0
            self.resurrect 1
            self.ModActorValue2 Health ModParameter
            set DoOnce2 to 1
        else ; если после else ничего нет, можно и не писать в таком случае
        Endif
    Endif
Endif ; ?????
End
Награды За огромный вклад в развитие Румора

Оффлайн D.I.-сеня

  • *
  • Сообщений: 9
  • Репутация: 0
  • Пол: Мужской
    • ICQ клиент - 487662078
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #3 : 01 Июнь, 2009, 22:11:47 »
0
Вобще вот все скрипты которые нужно проверить
 
Кстати скрипты не мои они нашего единственного и неповторимого скриптера "milten_fire_mage"


Исходный код глобальной болезни нокаута перед смертью:
scriptname KainKnockoutGlobalScript

Begin ScriptEffectUpdate
float timer
short NPChealth
short currenthealth
float NPCborderhealth
ref self
short ModParameter
short DoOnce
short DoOnce2
If DoOnce == 0
set timer to 10.0
Endif
End

Begin ScriptEffectUpdate
set self to GetSelf
If player.GetIsReference self
self.removespell KainKnockoutGlobalDisease
return
endif
set NPChealth to GetBaseActorValue health
set currenthealth to GetActorValue health
set npcborderhealth to npchealth * 0.1
set ModParameter to (npcborderhealth - currenthealth)
End

Begin ScriptEffectUpdate
If DoOnce2 == 0
If currenthealth <= 0
self.resurrect 1
self.ModActorValue2 Health ModParameter
set DoOnce2 to 1
else
Endif
Endif
Endif
End

Begin ScriptEffectUpdate
if currenthealth <= npcborderhealth
self.ForceActorValue fatigue -100000
if timer > 0
If self.IsSpellTarget KainBloodDryingForTarget
return
Endif
set timer to timer - GetSecondsPassed
else
self.Kill
Endif
Endif
set DoOnce to 1
set DoOnce2 to 1
End

Исходный код скрипта включения заклинания при нажатии клавиши "X":
scriptname KainBloodDryingPressedKeyScript

Begin ScriptEffectUpdate
float timer
short curKey
short KeyDown
ref self
ref CrosshairTarget
short DoOnce
If DoOnce == 0
set timer to 1.0
set curKey to 0
Set DoOnce to 1
Endif
set self to GetSelf
end


begin ScriptEffectUpdate
If curKey == 88 && IsKeyPressed curKey && KeyDown == 0
set KeyDown to 1
elseif curKey == 0 && KeyDown
set KeyDown to 0
if crosshairtarget.IsSpellTarget KainBloodDryingForTarget && crosshairtarget.GetDead == 0
crosshairtarget.removespell KainBloodDryingForTarget
self.removespell KainBloodDryingForPlayer
crosshairtarget.kill
EnablePlayerControls
Endif
Endif
end

begin ScriptEffectUpdate
If curKey == 88 && KeyDown && IsKeyPressed curKey
set CrosshairTarget to GetCrosshairRef
if crosshairtarget.IsActor == 1
if player.GetIsReference crosshairtarget
return
Endif
end

begin ScriptEffectUpdate
If GetKnockedState crosshairtarget == 1 && self.GetDistance crosshairtarget < 150
DisablePlayerControls
crosshairtarget.addspell KainBloodDryingForTarget
crosshairtarget.cast KainBloodDryingForTarget crosshairtarget
self.addspell KainBloodDryingForPlayer
self.cast KainBloodDryingForPlayer self
return
Endif
Endif
Endif
end

begin ScriptEffectUpdate
If IsKeyPressed 88 == 1
if timer > 0
set timer to timer - GetSecondsPassed
else
set curKey to 88
Endif
else
set curKey to 0
set timer to 1
Endif
End

Исходный код способности, накладываемой на игрока, пока действует заклинание:
scriptname KainBloodDryingScriptForPlayer

Begin ScriptEffectUpdate
ref self
ref crosshairtarget
set self to GetSelf
set crosshairtarget to GetCrosshairRef
if crosshairtarget.GetDead == 0
self.ModActorValue2 health 10
else
self.removespell KainBloodDryingForPlayer
EnablePlayerControls
Endif
End

Исходный код способности, накладываемой на цель заклинания, пока действует заклинание:
scriptname KainBloodDryingScriptForTarget

Begin ScriptEffectUpdate
ref self
short currenthealth
set self to GetSelf
set currenthealth to self.GetActorValue health
if currenthealth > 0
self.ModActorValue2 health -10
else
self.removespell KainBloodDryingForTarget
self.kill
Endif
End

Оффлайн milten_fire_mage

  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
  • Страж Баланса и Сновидец
    • ICQ клиент - 425694460
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #4 : 01 Июнь, 2009, 22:37:56 »
0
Привет. Как можно догадаться по моему нику, я и есть автор этих скриптов. Правда, я ещё неопытный скриптёр. Сами скрипты будет использоваться в проекте Reanimation: Legacy of Kain Blood Omen (надеюсь, Великий администратор и модераторы не сочтут это за рекламу) в заклинании "Высасывание крови". Я уже неделю ищу в них ошибку, но найти не могу. Теперь кое-какая информация по этому скрипту, надеюсь это поможет проверить их. Во-первых, в скриптах широко используется OBSE (Oblivion Script Extender). Во-вторых, ожидаемый результат и видимые ошибки. Скрипт глобального нокаута перед смертью: он должен по замыслу перед смертью цели скрипта ввести его на 10 секунд в нокаут. А потом убить. Если на владетеле используется определённое заклинание, то таймер останавливается. Неполадка: По непонятной причине, обладатель этой способности не умирает через 10 секунд. Мало того, если его специально ударить мечом и убить, когда он лежит в нокауте, он возрождается, правда всё так же в нокауте. Скрипт зажатой клавиши: он должен при зажатии клавиши X более, чем на 1 секунду запускать две других способности, уоторые описаны ниже. Работает только на нокаутированном противнике. Так же он должен выключить заклинание, если клавишу отпустить до окончания высасывания. И ещё он должна отключить игроку возможности двигаться, ждать, активировать предметы или получать доступ к журналу, пока он сосёт кровь. Но почему-то, когда зажимаешь клавишу X, ничего не происходит. Почему - не знаю. Скрипт, налагаемый на игрока: этот скрипт должен накладываться на игрока в результате действия предыдущего скрипта и должен параллельно со следующим скриптом прибавлять ему по 10 очков здоровья за фрейм, пока цель в перекрестии не мертва. Также он должна включать игроку способность двигаться, ждать, активировать предметы или получать доступ к журналу после смерти цели.. Также она должна удалить саму себя, когда цель в перекрестии умрёт. Проверить работоспособность способности по понятным причинам не удалось. Скрипт, налагаемыйна жертву: этот скрипт должен накладываться на цель высасывания в результате действия второго скрипта и должен параллельно со третьим скриптом отнимать ей по 10 очков здоровья за фрейм, пока она не умрёт. Также он должна удалить самого себя, когда это произойдёт. Проверить работоспособность способности по понятным причинам не удалось. Вот и всё. Надеюсь, вы поможете найти ошибку.
"You see,senorita, mystery is important. To know the whole truth, there's no magic in that." - Cortez
"История начинается и заканчивается здесь..." - Кортез
"Монетка ещё вертится" - Каин.

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #5 : 01 Июнь, 2009, 23:20:15 »
0
Сами скрипты будет использоваться в проекте Reanimation: Legacy of Kain Blood Omen (надеюсь, Великий администратор и модераторы не сочтут это за рекламу) в заклинании "Высасывание крови".
Если вы не рекламируете детские подгузники, а занимаетесь нужным делом - созданием плагинов или же игры на движке Обливион, то это дело благородное и на нашем портале такая информация всячески поддерживается.
Что касается скриптов...
К сожалению, я сейчас на сессии и совершенно нет времени углубленно заниматься их разбором. Тем не менее в остальных скриптах я вижу все те же грабли... Для начала проверьте блоки скриптов на количество If и Endif - они должны быть равны. А у вас в одних местах Endif с избытком, а в других недостает... Впрочем, в OSFM на RUMOR WIKI об этом написано.
Награды За огромный вклад в развитие Румора

Оффлайн milten_fire_mage

  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
  • Страж Баланса и Сновидец
    • ICQ клиент - 425694460
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #6 : 02 Июнь, 2009, 09:32:26 »
0
Насчёт того, что не реклама - ясно. А про If и EndIf... Просто я после создания и теста скрипта ещё потом попробовал разделить его на блоки. Подумал, вдруг поможет. Не помогло. А за лишним кодом и впрямь чуть-чуть не уследил. Но EndIf всё-таки везде хватает (может быть, там их больше, чем нужно, но уж явно не меньше), иначе компилятор бы выдавал ошибку. А про лишний код - скрипту он помешать не может. Это просто код, без которого можно было бы обойтись. Но на сам скрипт он толком не влияет. Только усложняет его читаемость и отнимает время у скриптёра (если я ошибаюсь и он всё-таки на что-то влияет - напиши мне, пожалуйста). Так что это явно не та ошибка, что мешает скрипту. Но всё равно, спасибо. Надеюсь, что кто-нибудь всё-таки найдёт ошибку.
"You see,senorita, mystery is important. To know the whole truth, there's no magic in that." - Cortez
"История начинается и заканчивается здесь..." - Кортез
"Монетка ещё вертится" - Каин.

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #7 : 02 Июнь, 2009, 13:13:59 »
0
Но EndIf всё-таки везде хватает (может быть, там их больше, чем нужно, но уж явно не меньше), иначе компилятор бы выдавал ошибку.
begin ScriptEffectUpdate
    If curKey == 88 && KeyDown && IsKeyPressed curKey
        set CrosshairTarget to GetCrosshairRef
        if crosshairtarget.IsActor == 1
            if player.GetIsReference crosshairtarget
                return
            Endif
; а где еще 2 Endif?
end

Он что - берет эти недостающие Endif из соседнего блока, где они лишние?
Ломается вся структура программы. И прежде чем искать другие причины, надо тщательно изучить синтаксис и не допускать элементарных ошибок.
В скриптах TES это очень важно (да и в любом программировании тоже!).
А еще я настоятельно советую не лениться и писать скрипты с отступами.
Это позволяет мгновенно увидеть несуразицу, например, те же пропущенные команды.
Так или иначе это связано с культурой программирования.
Награды За огромный вклад в развитие Румора

Оффлайн milten_fire_mage

  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
  • Страж Баланса и Сновидец
    • ICQ клиент - 425694460
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #8 : 06 Июнь, 2009, 12:26:09 »
0
Правда? А я не знал. И не заметил. Попробую исправить. Но, как я уже говорил, все эти несуразицы с EndIf появились после того, как я разделил скрипт на блоки. До этого несуразиц не было, но скрипт не работал. Так что не уверен, что это истинная ошибка. Но попробую исправить. Может заработает. В общем, спасибо. Я скажу, если не поможет. А про элементарные ошибки и отступы - это мой третий в жизни скрипт. Так что я ещё ОЧЕНЬ неопытный. Но спасибо, буду знать. По моему, для третьего в жизни скрипта этот довольно сложный.
"You see,senorita, mystery is important. To know the whole truth, there's no magic in that." - Cortez
"История начинается и заканчивается здесь..." - Кортез
"Монетка ещё вертится" - Каин.

Оффлайн milten_fire_mage

  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
  • Страж Баланса и Сновидец
    • ICQ клиент - 425694460
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #9 : 10 Июнь, 2009, 13:09:56 »
0
Исправил. Особого эффекта не возымело. Видно, дело в чём-то другом. Ошибку уже 3 недели ищу. Пожалуйста, кто нибудь, помогите!!!  :help:
"You see,senorita, mystery is important. To know the whole truth, there's no magic in that." - Cortez
"История начинается и заканчивается здесь..." - Кортез
"Монетка ещё вертится" - Каин.

Оффлайн Visman

  • *
  • Сообщений: 185
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
    • AllTES: Плагины и моды
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #10 : 10 Июнь, 2009, 21:00:18 »
0
По твоему коду ни чего не понять!
Почему куча блоков Begin ScriptEffectUpdate идет в одном скрипте? Или это разные скрипты?
Почему переменные объвляются внутри блоков?
З.Ы. Используй при написании скриптов отступы в обязательном порядке для читабильности кода!
Вам не кажется, что plаygrоund.ru есть синоним слову ворье?

Оффлайн Poison Angel

  • Супермодератор форума
  • *
  • Сообщений: 662
  • Репутация: 4.7
  • Пол: Мужской
    • ICQ клиент - 282758820
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #11 : 10 Июнь, 2009, 21:43:56 »
0
Исправил. Особого эффекта не возымело. Видно, дело в чём-то другом. Ошибку уже 3 недели ищу. Пожалуйста, кто нибудь, помогите!!!  :help:
Выложи финальную версию скрипта. Никто ведь не будет брать исходную, править, и предполагать, что у тебя именно так получилось...



Чем больше я узнаю людей, тем больше люблю собак.
Награды За огромный вклад в развитие Румора Активным модераторам публичных разделов форума, проработавшим более года

Оффлайн milten_fire_mage

  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
  • Страж Баланса и Сновидец
    • ICQ клиент - 425694460
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #12 : 11 Июнь, 2009, 08:24:36 »
0
Ничего не понять? Жаль. Про блоки - раньше всё было в одном, но у меня не работало и кое-кто посоветовал мне попробовать разделить скрипт на отдельные блоки. Я не понял зачем, но на всякий случай разделил. Заодно тогда же и ошибки с Endif появились. Там 4 разных скрипта и перед каждым написано, что это новый скрипт и для чего он. А внутри этих надписей один скрипт. Про отступления - раньше не знал, сейчас сделал. Возможно, ещё стоит поставить комментарии. А то я ещё не приучился их ставить. Про скрипт - выложу через несколько дней. А то у меня на этом компьютере CS нет. Спасибо за замечания.
"You see,senorita, mystery is important. To know the whole truth, there's no magic in that." - Cortez
"История начинается и заканчивается здесь..." - Кортез
"Монетка ещё вертится" - Каин.

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #13 : 11 Июнь, 2009, 13:32:05 »
0
Итак, вот отредактированный первый скрипт.
Переменные теперь в заголовке, блоки объединены, лишние Endif и Else убраны.
Сделаны отступы. Поставлена задача и описана проблема.

Скрипт №1.   Глобальный ноккаут перед смертью.

Задача:
Скрипт глобального ноккаута перед смертью: он должен по замыслу перед смертью цели скрипта ввести его на 10 секунд в нокаут. А потом убить. Если на владетеле используется определённое заклинание, то таймер останавливается.

Неполадка:
По непонятной причине, обладатель этой способности не умирает через 10 секунд. Мало того, если его специально ударить мечом и убить, когда он лежит в ноккауте, он возрождается, правда, всё так же в ноккауте.

Исходный код глобального ноккаута перед смертью:

scriptname KainKnockoutGlobalScript

float timer
short NPChealth
short currenthealth
float NPCborderhealth
ref self
short ModParameter
short DoOnce
short DoOnce2

Begin ScriptEffectUpdate

    If DoOnce == 0
        set timer to 10.0
    Endif
    set self to GetSelf

    If player.GetIsReference self
        self.removespell KainKnockoutGlobalDisease
        return
    endif
    set NPChealth to GetBaseActorValue health
    set currenthealth to GetActorValue health
    set npcborderhealth to npchealth * 0.1
    set ModParameter to (npcborderhealth - currenthealth)

    If DoOnce2 == 0
        If currenthealth <= 0
            self.resurrect 1
            self.ModActorValue2 Health ModParameter
            set DoOnce2 to 1
        Endif
    Endif

    if currenthealth <= npcborderhealth
        self.ForceActorValue fatigue -100000
        if timer > 0
            If self.IsSpellTarget KainBloodDryingForTarget
                return
            Endif
            set timer to timer - GetSecondsPassed
        else
            self.Kill
        Endif
    Endif
    set DoOnce to 1
    set DoOnce2 to 1
End
Награды За огромный вклад в развитие Румора

Оффлайн Visman

  • *
  • Сообщений: 185
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
    • AllTES: Плагины и моды
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #14 : 11 Июнь, 2009, 14:59:40 »
0
Тут
    If DoOnce == 0
        set timer to 10.0
    Endif
пишем сразу так
    If DoOnce == 0
       set DoOnce to 1
       set timer to 10.0
    Endif
Наверное ;)

Зачем этот блок сделан
  If DoOnce2 == 0
        If currenthealth <= 0
            self.resurrect 1
            self.ModActorValue2 Health ModParameter
            set DoOnce2 to 1
        Endif
    Endif
тут он как раз возрождается, но не по правилам.

Это
            If self.IsSpellTarget KainBloodDryingForTarget
                return
            Endif
реакция на оживление в течении 10 сек?
Тогда перед ретурном нужно добавить команду уничтожения заклинания (эффекта от заклинания) в котором скрипт работает.
Вам не кажется, что plаygrоund.ru есть синоним слову ворье?

Оффлайн milten_fire_mage

  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
  • Страж Баланса и Сновидец
    • ICQ клиент - 425694460
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #15 : 13 Июнь, 2009, 13:54:02 »
0
Про DoOnce - позже исправил. Вроде бы. Про возрождение - по каким правилам? Про If - для того, чтобы при действии определённого заклинания, таймер прекращал отчёт.
"You see,senorita, mystery is important. To know the whole truth, there's no magic in that." - Cortez
"История начинается и заканчивается здесь..." - Кортез
"Монетка ещё вертится" - Каин.

Оффлайн Visman

  • *
  • Сообщений: 185
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
    • AllTES: Плагины и моды
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #16 : 13 Июнь, 2009, 18:13:52 »
0
Вот я и хочу узнать зачем тут блок для поднятия мертвецов? Задача стоит на умертвдление, а не на оживление. Или я не прав?
И так как у тебя сделано таймер не остановишь. Добавляй команду на удаление этого работающего заклинания перед return.
Вам не кажется, что plаygrоund.ru есть синоним слову ворье?

Оффлайн milten_fire_mage

  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
  • Страж Баланса и Сновидец
    • ICQ клиент - 425694460
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #17 : 14 Июнь, 2009, 08:26:31 »
0
Зачем - посмотри сам ниже. Нужен. Про остановку - переработаю. Надо сначала заставить таймер вообще заработать.

Выкладываю код всех скриптов, переработанный и с подробными комментариями. Требуется OBSE.


Скрипт 1, вводящий всех, кроме игрока, в нокаут перед смертью

scriptname KainKnockoutGlobalScript ;Единстенный скрипт - магический эффект для способности KainKnockoutGlobalDisease

float timer ;Объявление переменных
short NPChealth
short currenthealth
float NPCborderhealth
ref self
short ModParameter
short DoOnce
short DoOnce2

Begin ScriptEffectUpdate
   If DoOnce == 0
       set timer to 10.0 ;Единичное присвоение значения переменной
       set DoOnce to 1
   Endif
   set self to GetSelf ;Постоянное присваивание значения переменным
   set NPChealth to GetBaseActorValue health
   set currenthealth to GetActorValue health
   set npcborderhealth to npchealth * 0.1
   set ModParameter to (npcborderhealth - currenthealth)
   If player.GetIsReference self   ;Если игрок - владелец способности, остановить скрипт и удалить способность
      self.removespell KainKnockoutGlobalDisease
      return
   endif
   If DoOnce2 == 0
      If currenthealth <= 0  ;Если цель умерла до перехождения в состояние нокаута, воскресить её и присвоить одну десятую от всего здоровья один раз
         self.resurrect 1
         self.ModActorValue2 Health ModParameter
         set DoOnce2 to 1
      Endif
   Endif
   if currenthealth <= npcborderhealth ;Если здоровье цели способности меньше или равно одной десятой, перевести её в нокаут (присвоить её запасу сил отрицательное значение)
      self.ForceActorValue fatigue -100000
      if timer > 0 ;Начать отсчёт времени, которое цель способности провела в нокауте
         If self.IsSpellTarget KainBloodDryingForTarget ;Если цель способности находится под действием заклинания высасывания крови, прекратить отсчёт
            return
         Endif
         set timer to timer - GetSecondsPassed
      else ;Если цель способности в нокауте больше 10 секунд и на ней не применялось заклинание высасывания крови, убить её
         self.Kill
      Endif
   Endif
   set DoOnce to 1 ;Присвоение значения переменным, которые отвечают за исполнение некоторых областей скрипта один раз
   set DoOnce2 to 1
End


Скрипт 2, запускающий заклинание высасывания крови при нажатой клавише "X":

scriptname KainBloodDryingPressedKeyScript ; Единстенный скрипт-магический эффект для способности KainBloodDryingPressedKeySpell

float timer ;Объявление переменных
short curKey
short KeyDown
ref self
ref CrosshairTarget
short DoOnce

begin ScriptEffectUpdate
   If DoOnce == 0 ;Единичное присвоение значения переменным
      set timer to 1.0
      set curKey to 0
      Set DoOnce to 1
   Endif
   set self to GetSelf ;Постоянное присвоение значения переменной
   If curKey == 88 && IsKeyPressed curKey && KeyDown == 0 ;Проверка, нажата ли клавиша "X"
      set KeyDown to 1 ;Присвоение истинного значения переменной, показывающей, что клавиша нажата
   elseif curKey == 0 && KeyDown ;Проверка, нажата ли клавиша "X"
      set KeyDown to 0 ;Присвоение ложного значения переменной, показывающей, что клавиша нажата
      if crosshairtarget.IsSpellTarget KainBloodDryingForTarget && crosshairtarget.GetDead == 0 ;Если цель не мертва, убить её, закончить действие заклинания и вернуть игроку контроль над персонажем
         crosshairtarget.removespell KainBloodDryingForTarget
         self.removespell KainBloodDryingForPlayer
         crosshairtarget.kill
         EnablePlayerControls
      Endif
   Endif
   If curKey == 88 && KeyDown && IsKeyPressed curKey ;Проверка, нажата ли клавиша "X"
      set CrosshairTarget to GetCrosshairRef ;Присвоение переменной-ссылке значение предмета, находящегося в перекрестии игрока
      if crosshairtarget.IsActor == 1
         if player.GetIsReference crosshairtarget ;Если игрок - цель перекрестия, остановить скрипт
            return
         Endif
      Endif
   Endif
   If GetKnockedState crosshairtarget == 1 && self.GetDistance crosshairtarget < 150 ;Проверка, в нокауте ли цель заклинания и не слишком ли далеко от неё игрок
      DisablePlayerControls ;Отключение контроля игрока
      crosshairtarget.addspell KainBloodDryingForTarget ;Добавление части заклинания (способность) для жертвы заклинания жертве заклинания
      self.addspell KainBloodDryingForPlayer ;Добавление части заклинания для игрока (способность) игроку
      return
   Endif
   If IsKeyPressed 88 == 1;Проверка, нажата ли клавиша "X"
      if timer > 0 ;Проверка, нажата ли клавиша больше секунды
         set timer to timer - GetSecondsPassed ;Отнятие прошедших секунд
      else
         set curKey to 88 ;Если клавиша нажата больше секунды, присвоение переменной значения, означающего клавишу "X"
      Endif
   else
      set curKey to 0 :Если клавиша не нажата, присвоение переменным значения, означающего конец действия заклинания
      set timer to 1
   Endif
End


Скрипт 3, добавляющий здоровье игроку, пока действует заклинание высасывания крови:

scriptname KainBloodDryingScriptForPlayer ;Единственный скрипт-магический эффект для способности KainBloodDryingForPlayer

ref self ;Объявление переменных
ref crosshairtarget

Begin ScriptEffectUpdate
   set self to GetSelf ;Присвоение значения переменным
   set crosshairtarget to GetCrosshairRef
   if crosshairtarget.GetDead == 0 ;Если цель перекрестия игрока не мертва, пополнять ему здоровье по десять пунктов в фрейм
      self.ModActorValue2 health 10
   else ;Если цель мертва, удалить способность у игрока и включить его контроль над персонажем
      self.removespell KainBloodDryingForPlayer
      EnablePlayerControls
   Endif
End


Скрипт 4, отнимающий здоровье у цели заклинания, пока действует заклинание высасывания крови:

scriptname KainBloodDryingScriptForTarget ;Единственный скрипт-магический эффект для способности KainBloodDryingForTarget

ref self ;Объявление переменных
short currenthealth

Begin ScriptEffectUpdate
   set self to GetSelf ;Присвоение значения переменным
   set currenthealth to self.GetActorValue health
   if currenthealth > 0 ;Пока цель заклинания высасывания крови жива, отнимать ей по десять пунктов здоровья в фрейм
      self.ModActorValue2 health -10
   else ;Когда у цели заклинания здоровье меньше нуля, удалить способность и убить её
      self.removespell KainBloodDryingForTarget
      self.kill
   Endif
End

Всё. Так, надеюсь, нормально.
"You see,senorita, mystery is important. To know the whole truth, there's no magic in that." - Cortez
"История начинается и заканчивается здесь..." - Кортез
"Монетка ещё вертится" - Каин.

Оффлайн Visman

  • *
  • Сообщений: 185
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
    • AllTES: Плагины и моды
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #18 : 16 Июнь, 2009, 19:00:24 »
0
Скрипт 1:
1. Вот этой строчкой
   set ModParameter to (npcborderhealth - currenthealth)
Что хочешь получить? Какие значения предусматривает?
2. Вот эти строчки
   set DoOnce to 1 ;Присвоение значения переменным, которые отвечают за исполнение некоторых областей скрипта один раз
   set DoOnce2 to 1
удали из скрипта.
3. Эти строки
   set NPChealth to GetBaseActorValue health
   set currenthealth to GetActorValue health
на всякий случай замини на
   set NPChealth to self.GetBaseActorValue health
   set currenthealth to self.GetActorValue health
4. Может тут
   self.ForceActorValue fatigue -100000
поставить это
   self.ModActorValue2 fatigue -1000
5, И это
         set timer to timer - GetSecondsPassed
заменить этим
         set timer to timer - ScriptEffectElapsedSeconds

Скрипт 3 на что накладывается? На игрок или на НПС?
Скрипт 4 на что накладывается? На игрок или на НПС?
Вам не кажется, что plаygrоund.ru есть синоним слову ворье?

Оффлайн milten_fire_mage

  • *
  • Сообщений: 15
  • Репутация: 0
  • Пол: Мужской
  • Страж Баланса и Сновидец
    • ICQ клиент - 425694460
    • Просмотр профиля
Re: Спецы по Скриптам помогите!!!!!!
« Ответ #19 : 16 Июнь, 2009, 21:48:30 »
0
1. Значение, на которое стоит уменьшить число пунктов жизни цели нокаута. Значение должно получиться отрицательным, таким образом здоровье уменьшится до одной десятой.
2. Первая - это просто подстраховка. Она и впрямь не нужна. А вот вторая важна. Иначе уже умершего после десяти секунд один раз воскресят. Так как другое присвоение значения идёт внутри скобок.
3. Попробую.
4. Разницы нет. Всё равно нокаут будет.
5. Я, кстати, ещё в OSFM не понял, что это за функция? Что она делает? Но попробую.

Скрипт 3 накладывается на игрока. Скрипт 4 на NPC. Спасибо за помощь.
"You see,senorita, mystery is important. To know the whole truth, there's no magic in that." - Cortez
"История начинается и заканчивается здесь..." - Кортез
"Монетка ещё вертится" - Каин.

Теги:
 

Помогите разобраться

Автор GARRETTРаздел TES III: Morrowind, Tribunal, Bloodmoon

Ответов: 1
Просмотров: 3416
Последний ответ 19 Август, 2005, 14:51:39
от GL.Sam
Обучение скриптам

Автор GL.SamРаздел Деканат(закрыт на бессрочные каникулы)

Ответов: 10
Просмотров: 7576
Последний ответ 18 Август, 2007, 22:29:29
от Tiberius Flavius
Помогите! Не могу молот разыскать

Автор КсенияРаздел TES III: Morrowind, Tribunal, Bloodmoon

Ответов: 5
Просмотров: 4063
Последний ответ 07 Январь, 2007, 15:44:48
от GL.Sam
Помогите плиииз написать скрипт отключающий свет

Автор VintРаздел Скриптинг под TES IV

Ответов: 3
Просмотров: 2637
Последний ответ 06 Март, 2008, 19:09:58
от LiLu
Помогите написать скрипт для кольца!!!!!!

Автор GanibalSSVРаздел Скриптинг под TES IV

Ответов: 1
Просмотров: 2483
Последний ответ 31 Май, 2008, 23:49:20
от GanibalSSV
Помогите со скриптом

Автор ElderXardasРаздел Скриптинг под TES IV

Ответов: 19
Просмотров: 5738
Последний ответ 10 Январь, 2011, 09:03:59
от Galib
Анимация и скрипты - очень важный вопрос! Пожалуйста помогите

Автор @NAVI@Раздел Анимация в TES: Morrowind, Oblivion, Skyrim

Ответов: 2
Просмотров: 5558
Последний ответ 12 Июль, 2008, 20:30:27
от @NAVI@
Помогите с деревянными НПС

Автор SaruonРаздел Мастерская TES IV

Ответов: 1
Просмотров: 1714
Последний ответ 12 Сентябрь, 2010, 10:57:17
от AzAzEL
Помогите с квестом Дома Редоран!

Автор ТеуРиРаздел TES III: Morrowind, Tribunal, Bloodmoon

Ответов: 1
Просмотров: 2977
Последний ответ 02 Октябрь, 2008, 20:08:32
от Devil
Помогите с CS

Автор ВэнРаздел Мастерская TES IV

Ответов: 8
Просмотров: 2625
Последний ответ 15 Январь, 2009, 19:41:51
от Visman

Поиск

 
Top
SimplePortal 2.3.5 © 2008-2012, SimplePortal