Перейти к содержимому


Фотография
- - - - -

Помогите со скриптом плз)

скума скрипт выпить

  • Авторизуйтесь для ответа в теме

#1 Ссылка на это сообщение Sobakapppoe

Sobakapppoe
  • Искренний Доброжелатель
  • 73 сообщений
  •  

Отправлено

Привет всем, Такой вопрос: "Как привязать начало квеста к питью допустим Скумы))?" То есть Выпил бутылку(только один раз, после уже не важно) и тебе выскакивает сообщение(ну это для примера) . Данная схема не работает:

scn 1skumaquesttest
     begin OnActorEquip PotionSkooma
          Message "Fuuuuuckkk", 100
     end

Потому что тип блока OnActorEquip не относится к съеданию ингра и питью зелья, так? Может другой тип блока использовать, но какой?или можно пойти другим путем, если так, то направьте плз меня, дальше я уж сам)


stepashka.jpgДобра всем! ^_^



  • Авторизуйтесь для ответа в теме
Сообщений в теме: 32

#2 Ссылка на это сообщение Sobakapppoe

Sobakapppoe
  • Искренний Доброжелатель
  • 73 сообщений
  •  

Отправлено

Заработал)

scn 1skumaquesttest

     begin OnEquip
          Message "Fuuuuuckkk", 100
     end 

совсем в простом сглупил)) Простите)


stepashka.jpgДобра всем! ^_^


#3 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

Не нашел подходящей темы, по этому пишу сюда, Вообщем недавно начал изучать TES CS и сейчас вплотную остановился на теме скриптов, 

Вообщем Придумал я сделать такую штуку- Денежное дерево, суть такова Дерево, трясешь его, сверху сыпятся септимы, вообщем попробовал я все реализовать так-

Объекта активатора с моделью дерева я не нашел, по этому поставил дерево на алтарь к алтарю прикрепил скрипт активатор который включает основной скрипт который я повесил на другой объект висящий над деревом этот обьект я задисаблил,

Скрипт для обьекта

 

 

scn AZIstochnikGoldScript

 

short controlvar
float time

 

Begin OnActivate
If controlvar == 0
set controlvar to 1
EndIf
End

 

Begin GameMode
If time < 3 && controlvar == 1
PlaceAtMe gold001, 1, 50, 0
Set time to time + getsecondspassed
Else
set Controlvar to 0
set time to 0
EndIf
End

 

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


Сообщение отредактировал EpicFan: 21 мая 2015 - 20:51


#4 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

Заработал)

scn 1skumaquesttest

     begin OnEquip
          Message "Fuuuuuckkk", 100
     end 

совсем в простом сглупил)) Простите)

 

Незнаю может поздно но скрипт будет выглядить так

 

scn ScoomaDrinkActivateMineQuest

 

Begin OnActivate

SetStage MineQuest 10 ; MineQuest - название вашего квеста, 10 первая стадия вашего квеста

Activate ;если не написать здесь Activate то скуума не выпьется но скрипт все равно сработает

End

 

этот скрипт цепляем на скуму, только надо создать бутылочку с новым айди а то любая скума будет срабатывать на включение квеста


Сообщение отредактировал EpicFan: 21 мая 2015 - 21:03


#5 Ссылка на это сообщение ЛЯйтенант

ЛЯйтенант
  • Скиталец
  • 32 сообщений
  •  

Отправлено

Создай переменную, присвой ей рандомное значение командой ранд (обсе) или гетрандомпроцент. Замени ею координату в пласекатми.

Сообщение отредактировал ЛЯйтенант: 22 мая 2015 - 08:00


#6 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

Создай переменную, присвой ей рандомное значение командой ранд (обсе) или гетрандомпроцент. Замени ею координату в пласекатми.

 

так и думал что предложат гетрандомперцент, но вот дело в том что я уже пробовал так делать, все как в OSFM написано, результат изменился, но не очень, монетки действительно стали появляться рандомно в каждом фрейме но вот почему то направление и расстояние их появления не очень изменилось, они все время появляются на окружности с углом от 0 до 90 гр



#7 Ссылка на это сообщение ЛЯйтенант

ЛЯйтенант
  • Скиталец
  • 32 сообщений
  •  

Отправлено

Создай четвертую рандомную переменную. Замени ею последний аргумент. Зрачение от 1 до 4 точно непомню означает спереди сзади слеа справа. Но можно еще использовать мувто или мувтумаркер. Способов много.

#8 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

Создай четвертую рандомную переменную. Замени ею последний аргумент. Зрачение от 1 до 4 точно непомню означает спереди сзади слеа справа. Но можно еще использовать мувто или мувтумаркер. Способов много.

 

 

Тож думал добавить четвертую переменную, вообщем благодарю, думаю что проще будет сделать через мувто или что то подобное, но на самом деле все это я пробую для тренировки и лучшего понятия скриптов,

 

а теперь у меня по серьезнее вопрос

вообщем хочу сделать контейнер с таким скриптом что бы когда скидываешь туда вещи то после закрытия выскакивало сообщение "продать все за "переменная для подсчета золота" "продавать" "не продавать"

вообщем скрипт у меня работает но почему то не работает проверка кнопок

 

сам скрипт

 

scn AZGoldContainer

 

short act
short gld
short itm1
short itm2
short button

 

Begin MenuMode 1008
Set itm1 to GetItemCount WeapIronShortsword
Set itm2 to GetItemCount WeapIronWarhammer
set gld to itm1 * 10 + itm2 * 60
if gld > 0
Set act to 1
EndIf
End

 

Begin GameMode
If act == 1
messagebox "продать все вещи за %5.0f золотых", gld,  "продать", "не продавать"
Set button to GetButtonPressed
if button == -1
return
ElseIf button == 0
set act to 0
Player.additem gold001 gld
RemoveAllItems
Else
RemoveAllItems Player
set act to 0
EndIf
EndIf
End

 

вообщем при открытии и закрытии все работает как обычный контейнер как и задумывалось но вот стоит скинуть туда вещь и переменная gld становится больше нуля то включается блок gamemode но кнопки почему то не работают так как после нажатия первой кнопки должно переменной act присваиватся значение 0 и по сути блок gamemode должен больше не работать но сообщение с назойливой настойчивостью выскакивает на экран и то что должно выполнятся после ElseIf button == 0 добавление денег игроку и удаление всех обьектов из инвентаря не происходит, вообщем прошу помочь может вы знаете в чем дело ))



#9 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

Вообщем нашел уже решение я переместил функцию проверки кнопок в отдельный gamemode блок и теперь все пашет )) сижу и пишу дальше свою портянку, скрипт получится длиннющий так как огромное количество предметов в игре ))



#10 Ссылка на это сообщение ЛЯйтенант

ЛЯйтенант
  • Скиталец
  • 32 сообщений
  •  

Отправлено

Чтобы скрипты не плучались длиннющие есть великий и могучий ОБСЕ. 21 версия божественна.

#11 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

Чтобы скрипты не плучались длиннющие есть великий и могучий ОБСЕ. 21 версия божественна.

про OBSE уже думал но вот думаю сначала надо научится обычным скриптам, а потом уж когда придет понимание как реализовывать свои идеи, я потихонечку перейду на OBSE ))



#12 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

Чтобы скрипты не плучались длиннющие есть великий и могучий ОБСЕ. 21 версия божественна.

 

Вот жесть! только все стало получатся как бац! вообщем скрипт работает все как и хотелось но вот беда! почему то если загрузится один раз то скрипт пашет, но вот если загрузить после первого раза еще раз то же самое сохранение то скрипт не работает!!! мож я какие глобальные переменные обьявил вместо локальных???



#13 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

scn AZGoldContainer1

 

short act
short gld
short itm
short button

 

Begin MenuMode 1008

 

If itm == 0
Set itm to GetItemCount DarkInfernalFrost
Set gld to itm * 7000
Set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount GoblinShamanStaff
set gld to gld + itm * 6550
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount UniqueWeapHatred
set gld to gld + itm * 6200
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount SEAmberMagicHammer5
set gld to gld + itm * 6100
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount SEAmberHammer5
set gld to gld + itm * 6100
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount SEWeapDaedricWarHammerDurable
set gld to gld + itm * 6000
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount SE11ShadowBlade30
set gld to gld + itm * 6000
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount SE11ShadowAxe30
set gld to gld + itm * 6000
set itm to 0
EndIf

 

if gld > 0
Set act to 1
EndIf
End

 

Begin GameMode
If act == 1
messagebox "продать все вещи за %5.0f золотых", gld,  "продать", "не продавать"
Set act to 2
EndIf
End

 

Begin GameMode
If act == 2
Set button to GetButtonPressed
if button == -1
return
ElseIf button == 0
RemoveAllItems
Player.additem gold001 gld
set act to 0
Else
RemoveAllItems Player
set act to 0
EndIf
EndIf
End

 

вообщем когда я ставлю скрипт тот что сверху все норм и работает как надо, но если писать отдельный блок If EndIf для каждой вещи то получается просто огромная портянка, и я подумал почему бы не объединить вещи с одинаковой стоимостью в один блок If EndIf и вот что у меня получилось

 

scn AZGoldContainer1

 

short act
short gld
short itm
short button

 

Begin MenuMode 1008

 

If itm == 0
Set itm to GetItemCount DarkInfernalFrost
Set gld to itm * 7000
Set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount GoblinShamanStaff
set gld to gld + itm * 6550
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount UniqueWeapHatred
set gld to gld + itm * 6200
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount SEAmberMagicHammer5
set gld to gld + itm * 6100
set itm to 0
EndIf

 

If itm == 0
Set itm to GetItemCount SEAmberHammer5
set gld to gld + itm * 6100
set itm to 0
EndIf

 

If itm == 0
Set itm to ( GetItemCount SEWeapDaedricWarHammerDurable + GetItemCount SE11ShadowBlade30 + GetItemCount SE11ShadowAxe30 )

; в пред идущем блоке я объединил то что в первом скрипте я записывал в отдельный блок

set gld to gld + itm * 6000

set itm to 0
EndIf

 

if gld > 0
Set act to 1
EndIf
End

 

Begin GameMode
If act == 1
messagebox "продать все вещи за %5.0f золотых", gld,  "продать", "не продавать"
Set act to 2
EndIf
End

 

Begin GameMode
If act == 2
Set button to GetButtonPressed
if button == -1
return
ElseIf button == 0
RemoveAllItems
Player.additem gold001 gld
set act to 0
Else
RemoveAllItems Player
set act to 0
EndIf
EndIf
End

 

И второй скрипт заработал!! все считалось добавлялось удалялось как надо, но почему то если загрузить снова то же сохранение что и раньше то скрипт уже не работает!!! в чем может быть проблема???



#14 Ссылка на это сообщение Sobakapppoe

Sobakapppoe
  • Искренний Доброжелатель
  • 73 сообщений
  •  

Отправлено

Не нашел подходящей темы, по этому пишу сюда, Вообщем недавно начал изучать TES CS и сейчас вплотную остановился на теме скриптов, 

Вообщем Придумал я сделать такую штуку- Денежное дерево, суть такова Дерево, трясешь его, сверху сыпятся септимы, вообщем попробовал я все реализовать так-

Объекта активатора с моделью дерева я не нашел, по этому поставил дерево на алтарь к алтарю прикрепил скрипт активатор который включает основной скрипт который я повесил на другой объект висящий над деревом этот обьект я задисаблил,

Скрипт для обьекта

 

 

scn AZIstochnikGoldScript

 

short controlvar
float time

 

Begin OnActivate
If controlvar == 0
set controlvar to 1
EndIf
End

 

Begin GameMode
If time < 3 && controlvar == 1
PlaceAtMe gold001, 1, 50, 0
Set time to time + getsecondspassed
Else
set Controlvar to 0
set time to 0
EndIf
End

 

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

С монетками можно сделать красивее намного. Чтобы они именно падали. Для этого стоит вспомнить немного физику, забить функцию свободного падения, начальную и конечную координаты по z. Также с рандомом их генерить в кроне дерева и они будут падать. Я бы сопроводил это еще и красивым шейдером каким-нибудь (можно в Дрожащих островах покопаться). И тогда конфетка получится вообще). Жаль что с физикой самого движка падение не проканает, нужно его вручную прописать и тогда норм все будет. Если интересно могу кусок своего скрипта скинуть. Приходилось делать свободное падение со вращением в полете. Ну по теме я понял, что Вы серьезно уже продвинулись в скриптах, так что проблем не возникнет. Если что в лс можете написать. 


stepashka.jpgДобра всем! ^_^


#15 Ссылка на это сообщение ЛЯйтенант

ЛЯйтенант
  • Скиталец
  • 32 сообщений
  •  

Отправлено

Проверь где скрипт срабатывает командой print $"Скрипт сработал" к примеру:

 

 

Печатать будет в консоли


Сообщение отредактировал ЛЯйтенант: 22 мая 2015 - 15:35


#16 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

С монетками можно сделать красивее намного. Чтобы они именно падали. Для этого стоит вспомнить немного физику, забить функцию свободного падения, начальную и конечную координаты по z. Также с рандомом их генерить в кроне дерева и они будут падать. Я бы сопроводил это еще и красивым шейдером каким-нибудь (можно в Дрожащих островах покопаться). И тогда конфетка получится вообще). Жаль что с физикой самого движка падение не проканает, нужно его вручную прописать и тогда норм все будет. Если интересно могу кусок своего скрипта скинуть. Приходилось делать свободное падение со вращением в полете. Ну по теме я понял, что Вы серьезно уже продвинулись в скриптах, так что проблем не возникнет. Если что в лс можете написать. 

 

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


Проверь где скрипт срабатывает командой print $"Скрипт сработал" к примеру:

 

 

Печатать будет в консоли

 

Благодарю!! вы мне подсказали полезную вещь ) обязательно попробую,

я кстати дописал скрипт первым способом, и оказалось что скрипты не могут иметь больше 1056 строк )) мой где то на полторы тыщи тянул ))) пришлось урезать за то теперь все оружие начиная стоимость прописаной в редакторе от 1650 продается быстро без лишних движений и за свою цену в отличие от имперских торговцев бомжей )))


Сообщение отредактировал EpicFan: 22 мая 2015 - 16:22


#17 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

Вчера до меня дошло почему второй способ не работал )) я проверял его на грязном сохранении, теперь все пашет и скрипт стал в триста строк )) кстати я теперь знаю что скрипты ограничены высотой в 1056 строк и шириной в 512 символов )), так как скрипт получился относительно короткий и в него влезло все оружие стоимостью от 1500 септимов, теперь я смогу осуществить задуманное вписать туда и броню ))) а может еще и кольца влезут )))



#18 Ссылка на это сообщение EpicFan

EpicFan
  • Скиталец
  • 30 сообщений
  •  

Отправлено

кстати кто знает каким образом вычисляются цены в игре? допустим есть оружие у которого в редакторе стоит цена в 6000 септимов но в игре показывает больше 9000, значит как то влияет уровень определенных навыков и умений??



#19 Ссылка на это сообщение angel-deff

angel-deff
  • Авантюрист
  • 173 сообщений
  •  

Отправлено

Вопрос по скриптам. В плагине Unholly Darkness есть зелье солнечного щита. Его скрипт прикреплён ниже. Я бы хотел сделать такое заклинание или способность для ГГ но не зелье. Как из этого сделать скрипт заклинания с тем же эффектом? Делаю заклинание и вешаю на него этот скрипт толку 0.

scn VampireSunBlock
short SunDamageShort

Begin ScriptEffectStart

If Player.IsSpellTarget KiVampSunDamage01
Player.RemoveSpell KIVampSunDamage01
set SunDamageShort to 1
endif

If Player.IsSpellTarget KiVampSunDamage02
Player.RemoveSpell KIVampSunDamage02
set SunDamageShort to 2
endif

If Player.IsSpellTarget KiVampSunDamage03
Player.RemoveSpell KIVampSunDamage03
set SunDamageShort to 3
endif

End

Begin ScriptEffectFinish

If SunDamageShort == 1
Player.AddSpell KIVampSunDamage01
set SunDamageShort to 0
endif

If SunDamageShort == 2
Player.AddSpell KIVampSunDamage02
set SunDamageShort to 0
endif

If SunDamageShort == 3
Player.AddSpell KIVampSunDamage03
set SunDamageShort to 0
endif

End



#20 Ссылка на это сообщение Rybak2

Rybak2
  • Профи
  • 380 сообщений
  •  

Отправлено

Вот два скрипта:

 

scn 00QuestScriptSchilddesBoten
short triggered
Begin OnTriggerActor Player

if triggered == 0
set triggered to 1
MessageBox "Это ведь знак? Кому понадобилось оставить его? Я пойду по этому следу."
endif
end

 

 

scn 00TriggerboxScriptSchilddesBoten

Short triggered

Begin OnTriggerActor Player

if triggered == 00
set triggered to 1
  messagebox"Это знак? Кто оставил его? Следы ведут в это направление."
endif
end

 

Я так понимаю, сценарии у них одинаковые, но названия разные и на первый, конструктор "выкидывает" сообщение: "Script block not supported by current script type".

 

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






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых