Под этим солнцем и небом мы тепло приветствуем Вас, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Бухта 2.0. Тёплая. Ламповая. Твоя.

Автор Тема: [Oblivion] Обсуждение/Вопросы по скриптам  (Прочитано 51729 раз)

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

Оффлайн SLOWPARD

  • *
  • Сообщений: 597
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #120 : 15 Сентября 2011, 19:03 »
0
Цитировать
Вопрос: почему оно не компиллируется?
Поподробнее.
Награды За неоценимую помощь по переводу форума на новый движок и техническое содействие  Локализатор-Довакин - за самый первый перевод Skyrim-мода

Оффлайн Alliria

  • *
  • Сообщений: 1068
  • Timeo mortalis et dona ferentes
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #121 : 16 Сентября 2011, 02:59 »
0
Что подробнее?)
Жму "сохранить и скомпиллировать" или "рекомпиллировать все активные скрипты" - эффекта 0. При переходе к другому скрипту или выходе из редактора предлагает сохранить - жду "да" - эффекта 0. При сохранении плагина выдает ошибку компилляции. (там в конце скрипта есть комментарий CSE). Wtf?
Вообще, скрипт изначально не мой, я его переписала. Оригинал тоже не компиллировался, но там были ошибки в синтаксисе.
Вот оригинал:
[hide]
scn SheoSheogorathsordersScript

short doOnce
Ref WhoAmI
short flag
short button
short chooseone

Begin ScriptEffectStart

if  ( GetPlayerinSEWorld == 1 )
    Set WhoAmI to GetSelf
    set flag to 1

if (GetIsRace GoldenSaint == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Следуй за мной крадучись.","Жди здесь.", "Покинь меня."
endif

if (GetIsRace DarkSeducer == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Следуй за мной крадучись.","Жди здесь.", "Покинь меня." 
endif

if (GetIsID SEHerdir == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."
endif


 if (GetIsID SEAnyaHerrick == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."
endif


 if (GetIsID SEKithlan == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."
endif


if (GetIsID SEGundlar == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."
endif


if (GetIsID SEWideEye == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."
endif

if (GetIsID SE14Healer1 == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."
endif


 if (GetIsID SE14Dancer1 == 1)
          Messagebox "Чем могу служить, господин?","Следуй за мной.", "Жди здесь.", "Станцуй.", "Покинь меня."
endif


if  ( GetPlayerinSEWorld == 0 )
Message "Это заклинание не работает за пределами Дрожащих Островов."
endif
End

begin gamemode
set button to getbuttonpressed

if (GetIsRace GoldenSaint == 1)       
   if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCSneakFollowPlayer
                WhoAmI.evp
    elseif button == 2
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 3
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 4
    endif
    endif
   endif
endif

if (GetIsRace DarkSeducer == 1)
   if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCSneakFollowPlayer
                WhoAmI.evp
    elseif button == 2
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 3
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 4
    endif
    endif
   endif
      endif





if (GetIsID SEHerdir == 1)
   if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 2
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 3
    endif
    endif
   endif
    endif
     




if (GetIsID SEAnyaHerrick == 1)

   if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 2
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 3
    endif
    endif
   endif
      endif
     
     



 if (GetIsID SEKithlan == 1)
   if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 2
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 3
    endif
    endif
   endif
      endif

     


if (GetIsID SEGundlar == 1)
   if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 2
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 3
    endif
    endif
   endif
      endif
     
     



 if (GetIsID SEWideEye == 1)
   if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 2
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 3
    endif
    endif
   endif
      endif
     

     



 if (GetIsID SE14Healer1 == 1)
   if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 2
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 3
    endif
    endif
   endif
      endif
     

     



 if (GetIsID SE14Dancer1 == 1)
      if button > -1
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp
    elseif button == 2
                WhoAmI.AddScriptPackage SheoNPCDancer
                WhoAmI.evp
    elseif button == 3
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
        elseif button == 4
    endif
    endif
    endif
      endif
endif
end




Begin ScriptEffectFinish

if  ( GetPlayerinSEWorld == 1 )

endif
End
[/hide]
« Последнее редактирование: 12 Августа 2012, 13:23 от a.king61 »
Награды Золотая Палитра - за самые красивые скриншоты (ПП 2013 года)

Оффлайн UNREAL

  • *
  • Сообщений: 813
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #122 : 16 Сентября 2011, 10:24 »
0
Я не вникал сам скрипт, но могу сказать по скриптам например Нехрима или оригинального Обливиона,
там где идет много условий по elseif(например) почти всегда скрипт не компилировался,
т.к. все они не были рассчитаны на использованик ОБСЕ
(если попытаться скомпилировать ориг скрипты облы с обсе произойдет тоже самое -будут ошибки)

тогда надо просто расставить все недостающие endif и все, в изменяемом скрипте



Оффлайн Alliria

  • *
  • Сообщений: 1068
  • Timeo mortalis et dona ferentes
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #123 : 16 Сентября 2011, 16:47 »
0
UNREAL, в том-то и дело, что я расставила все недостающие завершения условий. В итоговой версии (двумя постами выше) условий раза в 2-3 меньше, чем в оригинале, и тем не менее... Абыдна, скрипт-то простенький.
Но все равно большое спасибо за ответ, не знала насчет проблем с обсе.) Во всяком случае, скрипт поведения существ из ООО с кучей elseif у меня компиллился нормально.

З.ы. А вообще, авторам надо за такие скрипты руки отрывать.  
« Последнее редактирование: 16 Сентября 2011, 16:52 от Alliria »
Награды Золотая Палитра - за самые красивые скриншоты (ПП 2013 года)

Оффлайн AleksTirex

  • *
  • Сообщений: 424
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #124 : 17 Сентября 2011, 16:00 »
0
Цитата: Alliria
В наличии CSE 5.1 и следующий скрипт.
[hide]
     scn SheoSheogorathsordersScript


Ref WhoAmI
short flag
short button


Begin ScriptEffectStart

if  ( GetPlayerinSEWorld == 1 )
    Set WhoAmI to GetSelf
    set flag to 1

    if (GetIsRace GoldenSaint == 1) || (GetIsRace DarkSeducer == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Следуй за мной крадучись.","Жди здесь.", "Покинь меня."
    elseif
        return
    endif

        
    if (GetIsID SEHerdir == 1) || (GetIsID SEAnyaHerrick == 1) || (GetIsID SEKithlan == 1) || (GetIsID SEGundlar == 1) || (GetIsID SEWideEye == 1) || (GetIsID SE14Healer1 == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."

    elseif (GetIsID SE14Dancer1 == 1)
          Messagebox "Чем могу служить, господин?","Следуй за мной.", "Жди здесь.", "Станцуй.", "Покинь меня."
    endif

elseif
    Message "Это заклинание не работает за пределами Дрожащих Островов."
endif

End




begin gamemode

set button to getbuttonpressed

if (GetIsRace GoldenSaint == 1) || (GetIsRace DarkSeducer == 1)
    if button > -1
        if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
                WhoAmI.evp

        elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCSneakFollowPlayer
                WhoAmI.evp

        elseif button == 2
                WhoAmI.AddScriptPackage SheoNPCStayHere
                WhoAmI.evp

        elseif button == 3
                WhoAmI.RemoveScriptPackage
                WhoAmI.evp
      
        elseif button == 4
            return

        endif
    
    elseif
        return
    endif

elseif
    return
endif




if (GetIsID SEHerdir == 1) || (GetIsID SEAnyaHerrick == 1) || (GetIsID SEKithlan == 1) || (GetIsID SEGundlar == 1) || (GetIsID SEWideEye == 1) ||  (GetIsID SE14Healer1 == 1)
    if button > -1
        if button == 0
            WhoAmI.AddScriptPackage SheoNPCFollowPlayer
            WhoAmI.evp

        elseif button == 1
            WhoAmI.AddScriptPackage SheoNPCStayHere
            WhoAmI.evp

        elseif button == 2
            WhoAmI.RemoveScriptPackage
            WhoAmI.evp

        elseif button == 3
            return

        endif
    elseif
        return
    endif


elseif (GetIsID SE14Dancer1 == 1)
    if button > -1
        if button == 0
            WhoAmI.AddScriptPackage SheoNPCFollowPlayer
            WhoAmI.evp

        elseif button == 1
            WhoAmI.AddScriptPackage SheoNPCStayHere
            WhoAmI.evp

        elseif button == 2
            WhoAmI.AddScriptPackage SheoNPCDancer
            WhoAmI.evp

        elseif button == 3
            WhoAmI.RemoveScriptPackage
            WhoAmI.evp

        elseif button == 4
            return

        endif
    
    elseif
        return
    endif

elseif
    return
endif

End




Begin ScriptEffectFinish

if  ( GetPlayerinSEWorld == 1 )

endif

End
;<CSEBlock>
;<CSECaretPos> 660 </CSECaretPos>
;<CSEMessageEditor> This is an uncompiled script. Expect weird behavior during runtime execution </CSEMessageEditor>
;</CSEBlock>
[/hide]
Вопрос: почему оно не компиллируется?
Попробуй этот скрипт:
[hide]
    scn SheoSheogorathsordersScript

Ref WhoAmI
short flag
short button

Begin ScriptEffectStart

if  ( GetPlayerinSEWorld == 1 )
    Set WhoAmI to GetSelf

if (WhoAmI.GetIsRace GoldenSaint == 1) || (WhoAmI.GetIsRace DarkSeducer == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Следуй за мной крадучись.","Жди здесь.", "Покинь меня."
          set flag to 1
endif

if (WhoAmI.GetIsID SEHerdir == 1) || (WhoAmI.GetIsID SEAnyaHerrick == 1) || (WhoAmI.GetIsID SEKithlan == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."
          set flag to 2
endif

if (WhoAmI.GetIsID SEGundlar == 1) || (WhoAmI.GetIsID SEWideEye == 1) || (WhoAmI.GetIsID SE14Healer1 == 1)
          Messagebox "Чем могу служить, господин?" ,"Следуй за мной.","Жди здесь.", "Покинь меня."
          set flag to 2
endif

 if (WhoAmI.GetIsID SE14Dancer1 == 1)
          Messagebox "Чем могу служить, господин?","Следуй за мной.", "Жди здесь.", "Станцуй.", "Покинь меня."
          set flag to 3
endif

else
Message "Это заклинание не работает за пределами Дрожащих Островов."
endif

End

begin ScriptEffectUpdate
set button to getbuttonpressed

if flag > 0
   if button == -1
      return
   endif

  if flag == 1    
     if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
     elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCSneakFollowPlayer
     elseif button == 2
                WhoAmI.AddScriptPackage SheoNPCStayHere
     elseif button == 3
                If WhoAmI.getiscurrentPackage SheoNPCFollowPlayer || WhoAmI.getiscurrentPackage SheoNPCSneakFollowPlayer || WhoAmI.getiscurrentPackage SheoNPCStayHere
                   WhoAmI.RemoveScriptPackage
                endif
                WhoAmI.evp
     endif
     set flag to 0
  
  elseif flag == 2
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
    elseif button == 2
                If WhoAmI.getiscurrentPackage SheoNPCFollowPlayer || WhoAmI.getiscurrentPackage SheoNPCStayHere
                   WhoAmI.RemoveScriptPackage
                endif
                WhoAmI.evp
    endif
    set flag to 0

  elseif flag == 3
    if button == 0
                WhoAmI.AddScriptPackage SheoNPCFollowPlayer
    elseif button == 1
                WhoAmI.AddScriptPackage SheoNPCStayHere
    elseif button == 2
                WhoAmI.AddScriptPackage SheoNPCDancer
    elseif button == 3
                If WhoAmI.getiscurrentPackage SheoNPCFollowPlayer || WhoAmI.getiscurrentPackage SheoNPCDancer || WhoAmI.getiscurrentPackage SheoNPCStayHere
                   WhoAmI.RemoveScriptPackage
                endif
                WhoAmI.evp
    endif
    set flag to 0
  endif
endif    
    
if flag == 0
   WhoAmI.removeSpell SheoSheogorathsorders; ID заклинания
endif

end

Begin ScriptEffectFinish

End
[/hide]
« Последнее редактирование: 17 Сентября 2011, 19:44 от AleksTirex »
Награды Орден "Ремесленник" - за уникальный плагин "Мелисса"  Орден "Ремесленник" - за мод "Сказка о потерянном счастье"

Оффлайн Alliria

  • *
  • Сообщений: 1068
  • Timeo mortalis et dona ferentes
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #125 : 18 Сентября 2011, 07:32 »
0
AleksTirex, спасибо! Все сохранилось.
Награды Золотая Палитра - за самые красивые скриншоты (ПП 2013 года)

Оффлайн wowan tagil

  • *
  • Сообщений: 34
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #126 : 29 Октября 2011, 09:39 »
0
всем привет.народ нужна помощь!!!!!.создал себе в кс свой форт где можно награбленое хранить. в середине форта поставил магический стол ну типа круг.вопрос можно ли сделать так чтобы когда мой перс становился на стол у него восстонавливались жизни.скрипты писать не умую по этому че полегче пишите.зарание спасибо .

Оффлайн Обалдуй

  • *
  • Сообщений: 2122
  • Пол: Мужской
  • Граф Куст
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #127 : 30 Июля 2012, 14:07 »
0
вроде бы уже получал ответ на свой вопрос, но что-то не могу найти =\ как выдать расу за другую? то есть, чтобы при начале игры раса высших имперцев распознавалась как просто имперцы.

Оффлайн Horinf

  • *
  • Сообщений: 1832
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #128 : 08 Августа 2012, 12:04 »
0
Еще вопрос по скриптам.
Нужна функция, проверяющая состояние здоровья цели - полное или нет, каков максимальный уровень, какой процент от максимального уровня составляет текущее хп. По кс-вики искал на фразы health, modactorvalue, не преуспел.
Награды Орден "Ремесленник" - за необычные плагины (ВП 2011 года) Маяк - за неоценимую помощь в создании Бухты 2.0 За участие в Битве сонетов Плюшевый мишка - приз зрительских симпатий на Первом поэтическом конкурсе Бухты Орден "Ремесленник" - лучшему плагиностроителю (ПП 2012 года) Золотой Пергамент - за  прекрасные стихи (ПП 2012 года)

Оффлайн Рызоп

  • *
  • Сообщений: 1435
  • Пол: Мужской
  • Не ешь, подумой
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #129 : 08 Августа 2012, 12:48 »
0
Еще вопрос по скриптам.
Нужна функция, проверяющая состояние здоровья цели - полное или нет, каков максимальный уровень, какой процент от максимального уровня составляет текущее хп. По кс-вики искал на фразы health, modactorvalue, не преуспел.
http://cs.elderscrolls.com/index.php/GetBaseActorValue - возвращает базовое значение указанной характеристики. Нам нужно "GetBaseActorValue Health"
Собственно получаем базовое значение и текущее (при помощи обычного "getav") в скрипте. А процент от максимального уровня здоровья дальше не составит труда.

Награды За неоценимую помощь по переводу форума на новый движок и техническое содействие Отличительный знак "Пчела" - за трудолюбие, чуткость и отзывчивость

Оффлайн Horinf

  • *
  • Сообщений: 1832
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #130 : 08 Августа 2012, 12:58 »
0
 Это базовое. А максимальное - это базовое плюс всякие модификаторы, я неправ?
 getav = getactorvalue? Спасибо.
 Нужно, чтобы заклинание вызывало один эффект, если здоровье цели больше 50%, и другой - если меньше.
Награды Орден "Ремесленник" - за необычные плагины (ВП 2011 года) Маяк - за неоценимую помощь в создании Бухты 2.0 За участие в Битве сонетов Плюшевый мишка - приз зрительских симпатий на Первом поэтическом конкурсе Бухты Орден "Ремесленник" - лучшему плагиностроителю (ПП 2012 года) Золотой Пергамент - за  прекрасные стихи (ПП 2012 года)

Оффлайн Рызоп

  • *
  • Сообщений: 1435
  • Пол: Мужской
  • Не ешь, подумой
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #131 : 08 Августа 2012, 15:49 »
0
Если учитывать модификаторы - то тут вроде без обсе не обойтись
http://cs.elderscrolls.com/index.php/GetAVMod
Награды За неоценимую помощь по переводу форума на новый движок и техническое содействие Отличительный знак "Пчела" - за трудолюбие, чуткость и отзывчивость

Оффлайн AleksTirex

  • *
  • Сообщений: 424
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #132 : 08 Августа 2012, 16:28 »
0
Если учитывать модификаторы - то тут вроде без обсе не обойтись
Если принципиально не хочется применять OBSE, то можно и без него обойтись. Можно попробовать так:
[hide]
ref newRef

set newRef to actorRef.CreateFullActorCopy
newRef.saa 0
newRef.ResetHealth
if actorRef.getAV Health / newRef.getAV Health > 0.5
   ; делаем, если здоровье > 50%
else
   ; делаем, если здоровье < 50%
endif
newRef.DeleteFullActorCopy

Здесь у actorRef проверяется полное здоровье со всеми имеющимися модификаторами (зачарование, болезни и т.д.).
[/hide]

//применение тегов a.king61
« Последнее редактирование: 15 Августа 2012, 17:47 от a.king61 »
Награды Орден "Ремесленник" - за уникальный плагин "Мелисса"  Орден "Ремесленник" - за мод "Сказка о потерянном счастье"

Оффлайн Horinf

  • *
  • Сообщений: 1832
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #133 : 08 Августа 2012, 16:38 »
0
Спасибо за помощь. Сделал так. Применил перемещающийся активатор для каста спелла на цель.
[hide]
scn Spell

short fullhp
short currenthp
short reaping

ref target

begin ScriptEffectStart
  set target to getself
  set reaping to 0
  set fullhp to target.getbaseactorvalue health
  set currenthp to target.getactorvalue health
     if currenthp/fullhp >= 0.51
        set reaping to 1
     else
        set reaping to 2
     endif
     
end

begin ScriptEffectUpdate
  set target to getself
     If reaping == 1
        player.cast spellname1 target ; weakness spell
        player.additem essenceoflife
        set reaping to 0
     elseif reaping == 2
        player.cast spellname2 target ; damage spell
        player.additem essenceofagony
        set reaping to 0
     else
        return
     endif
     
end

begin ScriptEffectFinish

end
[/hide]

//применение тегов a.king61
« Последнее редактирование: 15 Августа 2012, 17:49 от a.king61 »
Награды Орден "Ремесленник" - за необычные плагины (ВП 2011 года) Маяк - за неоценимую помощь в создании Бухты 2.0 За участие в Битве сонетов Плюшевый мишка - приз зрительских симпатий на Первом поэтическом конкурсе Бухты Орден "Ремесленник" - лучшему плагиностроителю (ПП 2012 года) Золотой Пергамент - за  прекрасные стихи (ПП 2012 года)

Оффлайн Обалдуй

  • *
  • Сообщений: 2122
  • Пол: Мужской
  • Граф Куст
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #134 : 09 Августа 2012, 03:54 »
0
такс. кто подскажет, как создавать копии какого нибудь объекта и в последствии отмерять время жизни этого объекта? хочу с велкиндскими (или как они называются?) камнями похимичить. надо создать одиночную уникальную копию предмета и по прошествии времени преобразовать в стандартный.

Оффлайн AleksTirex

  • *
  • Сообщений: 424
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #135 : 09 Августа 2012, 15:29 »
0
Цитировать
Применил перемещающийся активатор для каста спелла на цель.
А почему в скрипте идёт привязка к игроку (player.cast ...)? Если данный эффект рассчитан только на игрока, то это можно нужно прописать в скрипте, например: if getself == player
Иначе, если этот спелл попадёт в другого актёра, а вот урон будет нанесён игроку, непорядок.
Переменные fullhp и currenthp должны быть float.
Этот скрипт можно упростить:
[hide]
scn Spell

ref target

begin ScriptEffectStart
     set target to getself
     if getactorvalue health / getbaseactorvalue health > 0.5
        player.cast spellname1 target ; weakness spell
        player.additem essenceoflife
     else
        player.cast spellname2 target ; damage spell
        player.additem essenceofagony
     endif
end

begin ScriptEffectUpdate

end

begin ScriptEffectFinish

end
[/hide]
Но вот с target и player надо разобраться, т.е. на кого может воздействовать данное заклинание. Если на любого актёра, то вместо player надо подставить target.

//применение тегов a.king61
« Последнее редактирование: 15 Августа 2012, 17:51 от a.king61 »
Награды Орден "Ремесленник" - за уникальный плагин "Мелисса"  Орден "Ремесленник" - за мод "Сказка о потерянном счастье"

Оффлайн Horinf

  • *
  • Сообщений: 1832
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #136 : 09 Августа 2012, 17:35 »
0
AlexTirex, там нужно, чтобы на цель читалось заклинание в соответствии с его здоровьем. С player.cast  там не прокатило, сделал невидимый активатор, который перемещается чуть выше цели и бьет ее.
Переменные можно заменить на float, но у меня и с short работало.

Здравствуй, Talvi.
Награды Орден "Ремесленник" - за необычные плагины (ВП 2011 года) Маяк - за неоценимую помощь в создании Бухты 2.0 За участие в Битве сонетов Плюшевый мишка - приз зрительских симпатий на Первом поэтическом конкурсе Бухты Орден "Ремесленник" - лучшему плагиностроителю (ПП 2012 года) Золотой Пергамент - за  прекрасные стихи (ПП 2012 года)

Оффлайн AleksTirex

  • *
  • Сообщений: 424
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #137 : 09 Августа 2012, 20:15 »
0
Цитировать
как создавать копии какого нибудь объекта и в последствии отмерять время жизни этого объекта?
По большому счёту, все объекты делятся на две группы: «живые» и «не живые», т.е. актёры и объекты (предметы и статики).
Актёры клонируются командой CreateFullActorCopy, например:
set newRef to actorRef.CreateFullActorCopy, где  создаётся копия актёра actorRef, а референс этой копии будет newRef, вот в последствии и можно будет управлять этой копией. (у копии нет АИ пакетов и фракций)
Простые объекты напрямую нельзя клонировать (по крайней мере, в дефолтном варианте). Можно базовый объект добавлять командой PlaceAtMe, этот добавленный предмет будет почти копией твоего предмета (об этом чуть ниже). Поскольку, ты хочешь «играться» с определённым предметом (велкиндский камень), то узнавать ID нет необходимости, он есть в КСе. А вот если надо клонировать предмет/объект из другого мода или случайный объект, то тут нужен OBSE. Например:
[i]ref clone
ref originalObject
ref cloneRef

set originalObject to myReference.GetBaseObject [/i] ; определяем ID базового объекта
[i]set clone to CloneForm originalObject[/i] ; клонируем этот базовый объект
[i]set cloneRef to markerRef.placeAtMe clone 1 0 0[/i] ; добавляем копию в нужное место и запоминаем его референс

 Здесь [i]clone[/i] – ID нового клонированного объекта, [i]cloneRef[/i] - референс клона, [i]markerRef[/i] - место создания клона (марекр).
Но сам предмет в игровом мире может отличаться от базового, например размерами. Если размер отличается от базового не более, чем в два раза, то это можно "подогнать размер" так:

[i]float aScale

set aScale to myReference.getScale
cloneRef.setScale aScale[/i]

Что же касательно «время жизни» клона, то здесь всё просто: надо в момент создания этого клона «зафиксировать» игровой день и/или текущее время.

[i]Floaf aGDP
Float aHour

...
set cloneRef to markerRef.placeAtMe
Set aGDP to GameDaysPassed
Set aHour to GameHour[/i]

Далее можно отслеживать/сверять эти значения с реальным временем:

[i]If GameDaysPassed > aGDP + 5
   ; что-то делаем, т.к. прошло 6 и более дней «жизни клона»
Endif[/i]
По этому же принципу поступаем с игровыми часами.

ПыСы Вот только не понятно: "преобразовать в стандартный" (?), что это означает?
« Последнее редактирование: 12 Августа 2012, 13:26 от a.king61 »
Награды Орден "Ремесленник" - за уникальный плагин "Мелисса"  Орден "Ремесленник" - за мод "Сказка о потерянном счастье"

Оффлайн Обалдуй

  • *
  • Сообщений: 2122
  • Пол: Мужской
  • Граф Куст
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #138 : 09 Августа 2012, 20:24 »
0
я не совсем ясно написал просьбу) мне в общем то, надо клонировать вещь в инвентаре и со временем менять характеристики. о размещении в мире этой вещи речи не идет) а по достижении определенных условий, определенного значения переменной заменить на обычный предмет

Оффлайн AleksTirex

  • *
  • Сообщений: 424
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #139 : 09 Августа 2012, 20:34 »
0
Цитировать
со временем менять характеристики
Характеристики этого предмета или актёра? И какие именно характеристики? Что-то скриптовое или чары?

Цитировать
заменить на обычный предмет
Это в смысле на незаскриптованный или незачарованный?

Если ID предмета, который надо клонировать известен, то можно просто добавить в инвентарь второй такой же премет. А вот с характеристиками... так всё зависит от самих характеристик.
Награды Орден "Ремесленник" - за уникальный плагин "Мелисса"  Орден "Ремесленник" - за мод "Сказка о потерянном счастье"

Оффлайн Обалдуй

  • *
  • Сообщений: 2122
  • Пол: Мужской
  • Граф Куст
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #140 : 09 Августа 2012, 20:42 »
0
Характеристики этого предмета или актёра? И какие именно характеристики? Что-то скриптовое или чары?
зачарование, скорее всего. и показывать уровень заряда, как у оружия.
Это в смысле на незаскриптованный или незачарованный?
обычный ванильный предмет) то есть, по достижении условия убрать заскриптованный предмет и добавить обычный.

проблема в том, что я не знаю как создавать копии предмета... ааа, точно. дошло. через уровень зачарования сделаю.

Оффлайн holtof55

  • *
  • Сообщений: 11
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #141 : 11 Августа 2012, 20:14 »
0
Здравствуйте всем, у меня есть такая проблемка, я открыл для себя облу сравнительно не давно, где-то год с небольшим...
Все мне очень интересно, а особенно возможность вмешиваться посредством кс в игру...Сейчас нахожусь на стадии обучения скриптам( получается плохо) видимо не совсем мое...я тут небольшой модик в "порядок" привожу и вот мне надо простенький скрипт, когда ГГ входит в помещение, должна вкл.музыка, это очень простой скрипт, но я себе всю голову сломал :D с этими командами... пока весь учебник изучу, наверно игра надоест...кто-то может помочь?
Я, вообще-то, в основном, общался на GameSource, потому как, "взрослая" тема, это основное, что держит так долго в игре, а там, на  GameSource, со скриптологами плохо, а кто были, видимо в Скайрим ушли, да и форум там,уже два дня как недоступен...здесь помогут?






Оффлайн Обалдуй

  • *
  • Сообщений: 2122
  • Пол: Мужской
  • Граф Куст
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #142 : 11 Августа 2012, 22:00 »
0
учебник этот смотрел?

Оффлайн holtof55

  • *
  • Сообщений: 11
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #143 : 11 Августа 2012, 22:31 »
0
учебник этот смотрел?

Учебник этот и смотрел..мне нужна всего одна команда проверки на местности типа,
scn (мое имя скрипта)
begin GameMode-или другая команда :-X
if plauer. -здесь наверно нужна команда проверки места-которую я не знаю!!! зашел, музыка играет, вышел-все...
StreamMusic "data\music\special\...тра-ля-ля
Message"....."
endif
       if plauer-то же самое
       StreamMusic "data\music\special\...тра-ля-ля
Message"...."
endif
end
Я вот как-то так его представляю...может я и не прав, поэтому и пишу

Я только только начал со скриптами, в основном локализация и...вот сейчас озвучка :-[ поэтому и скрипт такой понадобился
Добавление:во втором блоке, может быть надо будет указать стадию квеста, но это я так, с жиру бешусь...
« Последнее редактирование: 12 Августа 2012, 13:27 от a.king61 »

Оффлайн AleksTirex

  • *
  • Сообщений: 424
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #144 : 12 Августа 2012, 01:39 »
0
учебник этот смотрел?

Учебник этот и смотрел..мне нужна всего одна команда проверки на местности типа,
Не совсем так, здесь надо гораздо больше, чем одна проверка, кстати, а вот проверок вообще не надо никаких. Сам скрипт вешается на любой предмет из этого помещения, и когда игрок находится в том же помещении - скрипт работает, если игрока там нет - скрипт не работает (это вместо проверок). Если помещение дефолтное (не своё), то лучше скрипт сделать на "квестовом скрипте" и сделать проверку: player.GetInCell ID_локации (чтобы не изменять дефолтную локацию).
Но в любом случае, для работы команды StreamMusic необходимо, чтобы тип музыки в этой локации был не default (т.е. public или dungeon), иначе работать не будет.
К тому же есть проблема - чтобы выключить музыку, запущенную командой StreamMusic, надо или выйти в другую локацию (где тип музыки не дефолт), или режимом боя, по другому музыку не выключить.

Для начинающего скриптёра это немного сложновато, хотя и реально, а вот если в помещении сделать и повесть "красный колокольчик", который находится в разделе Sound, то музыка будет там постоянно, пока игрок находится в этом помещении. Параметры "колокольчика": сделать свой ID, поставить галочки "2D" и "Повторение", указать на аудио файл, который должен быть в формате WAV (желательно моно) и находиться в папке Data\sound\fx\своя папка. Потом его разместить в самом помещении.

Попробуй сперва такой вариант.
Награды Орден "Ремесленник" - за уникальный плагин "Мелисса"  Орден "Ремесленник" - за мод "Сказка о потерянном счастье"

Оффлайн holtof55

  • *
  • Сообщений: 11
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #145 : 12 Августа 2012, 03:04 »
0
Попробуй сперва такой вариант.
Попробовал, спасибо, все заиграло.., но все же это полумеры. Все таки хотелось бы полноценный скрипт, шоб вешать его куда надо..но, наверно это немного самонадеянно..я тут человек новый, ни чем себя не проявивший, но мне ответили, что уже само по себе вселяют надежду...может и я на что сгожусь, кто ж знает на перед... ;)

а та мебель..она вся дефолтная, скрип не повесить, но можно сделать и впихнуть туды табуретку или еще чего,  ;D ладно, это все завтра
« Последнее редактирование: 12 Августа 2012, 13:28 от a.king61 »

Оффлайн akba

  • *
  • Сообщений: 315
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #146 : 12 Августа 2012, 13:02 »
0
Там все немного сложнее, т.к. если войдешь в какое-нибудь меню - сузыка измениться сразу на дефолтную, этот скрипт хорошо реализован в ЖиМ, но где его искать я не помню уже.
Вот идеальный скрипт на дверь таверны Искателей сокровищ (ЖиМ)
scn aa2DoorOutTavernScr
float timer

begin onActivate
if IsActionRef Player == 1
set aaaInn7WaysRank.MusicInPir to 0
StreamMusic "data\music\7roads\0.mp3"
StreamMusic Public
endif
activate
end

begin gameMode
if aaaInn7WaysRank.MusicInPir == 1
if aaaInn7WaysRank.init == 0
set timer to 257
set aaaInn7WaysRank.init to 1
StreamMusic "data\music\7roads\1.mp3"
     else

if timer > 0
set timer to timer - getSecondsPassed
else

             set aaaInn7WaysRank.init to 0
endif
endif
endif
end


begin onLoad
if Player.GetInCell aaaPiratesTavernTSS01 == 1
if Player.IsInInterior == 1
set aaaInn7WaysRank.init to 0
endif
endif
end

begin MenuMode 1007
set aaaInn7WaysRank.init to 0
end

begin MenuMode 1
set aaaInn7WaysRank.init to 0
end

begin MenuMode 1013
set aaaInn7WaysRank.init to 0
end
Думаю с переменными все понятно
« Последнее редактирование: 12 Августа 2012, 13:30 от a.king61 »

Оффлайн holtof55

  • *
  • Сообщений: 11
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #147 : 12 Августа 2012, 14:04 »
0
Akba, Спасибо попробую ...

Оффлайн Horinf

  • *
  • Сообщений: 1832
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #148 : 15 Августа 2012, 10:10 »
0
Снова вопрос по скриптам.
Нужно наделить копию игрока (которая от createFullActorCopy) разными свойствами, пакетами АИ, топиками и прочим. 
Есть ли способ присвоить уже вызванной копии ID, либо вызвать этот ID через скрипт?
Можно ли оперировать с копией в скрипте, отличном от того, что ее вызывает?

Другая проблема. Вот фрагмент скрипта:
[hide]
       set clone1 to player.createfullactorcopy
         clone1.addScriptPackage 0FandPhantomPack
         clone1.addspell AbGhostNPC
         clone1.setghost 1
         setessential clone1 1
         clone1.setignorefriendlyhits 1
         clone1.moveto fcloneup
         clone1.removeallitems
         clone1.setactorfullname "Name"
[/hide]
при добавлении все новых строк, часть из них перестает выполняться. Кроме этого, Ghost State глючит.
Нужно, чтобы призрак был неуязвим для ударов и магии, не отвечал на атаки и прочее.
А тут он какое-то количество ударов неуязвим, потом по нему удается попасть, и он нападает.

//применение тегов a.king61
« Последнее редактирование: 15 Августа 2012, 17:54 от a.king61 »
Награды Орден "Ремесленник" - за необычные плагины (ВП 2011 года) Маяк - за неоценимую помощь в создании Бухты 2.0 За участие в Битве сонетов Плюшевый мишка - приз зрительских симпатий на Первом поэтическом конкурсе Бухты Орден "Ремесленник" - лучшему плагиностроителю (ПП 2012 года) Золотой Пергамент - за  прекрасные стихи (ПП 2012 года)

Оффлайн holtof55

  • *
  • Сообщений: 11
[Oblivion] Обсуждение/Вопросы по скриптам
« Ответ #149 : 19 Августа 2012, 19:37 »
0
Тут еще вопрос есть, во время диалога, на последней фразе, должен проиграться определенный звук, подскажите, плиз, а то уже все бошку сломал :-X
Скрипт на фразу ставлю, но или написал его криво либо функцию не та, не знаю... сам звук, конструктор проигрывает, я так понимаю он совсем простецкий, ну очень нужен...