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

Задача


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

Вот мои наработки. Как вы уже догадались, не работает.

begin Script_id
float time
long x

if (OnActivate == 1)
set time to (time + GetSecondsPassed )
  if (time >= x*86400)
  	cost "Spell_id" Player
  	set x to (x+1)
  	elseif (time < x*86400)
	  Messagebox "Вы уже использовали предмет сегодня"
  endif
endif

end

Ссылка на комментарий
Поделиться на другие сайты

cost "Spell_id" Player
Надо cast.

 

И структуру скрипта надо как-то так выстроить:

begin Script_id
float time
short flag
long x

if (OnActivate == 1)
  set flag to 1
endif

if (flag == 1 )
set time to (time + GetSecondsPassed )
  if (time >= x*86400)
   cast "Spell_id" Player
   set x to (x+1)
   elseif (time < x*86400)
	  Messagebox "Вы уже использовали предмет сегодня"
  endif
endif

end

 

 

А вообще, почему бы не использовать day и gamehour?

Ссылка на комментарий
Поделиться на другие сайты

Я в этом деле новичок, строго не суди. Cost написал по памяти, в настоящем скрипте Cast. Про day и gamehour знать не знал, ведать не ведал.

Не работает. Срабатывает раз, но закл не используется (по крайней мере на ГГ), сообщение про предмет выводится каждый фрейм, даже через сутки закл не повторяется... Все, кажись.

Ссылка на комментарий
Поделиться на другие сайты

Begin _XYZ

short State
short SDay

if ( MenuMode == 1 )
Return
Endif

if ( OnActivate == 1 )
 if ( State == 0 )
set state to 1
 else
MessageBox "Вы уже использовали сегодня. Чачача!(с)"
 endif
endif

if ( State == 1 )
 Cast "SpellID" player
 set State to 2
 set sday to day
endif

if ( State == 2 )
 if ( sday != day )
set state to 0
 endif
endif

End _XYZ

Изменено пользователем NmLs
Ссылка на комментарий
Поделиться на другие сайты

Мож конфликт? Глянте кто-нибудь:

GameFile0=Bloodmoon.esm

GameFile1=Morrowind.esm

GameFile2=Tribunal.esm

GameFile3=Trib_BM_patch_1C.esm

GameFile4=100ProjectileStoreChance.esp

GameFile5=Animal Behaviour.esp

GameFile6=Better Clothes_v1.0_1C_my.esp

GameFile7=Better Heads Tribunal addon.esp

GameFile8=Better Heads.esp

GameFile9=Better_Sounds_1C.esp

GameFile10=Blight Bounties_1C.esp

GameFile11=BS_BM_WeatherChange.esp

GameFile12=Carry your Bedroll Rus.esp

GameFile13=Chrysamere Replacement_russian_edition.esp

GameFile14=ClearGlassEquipment_1C.esp

GameFile15=ClearIceEquipment_1C.esp

GameFile16=DB_Attack_Mod_1C.esp

GameFile17=DN_AshVampires.esp

GameFile18=Elemental BB2_2 Races.esp

GameFile19=FortFrostmothRestoration_1C.esp

GameFile20=GMST-Fix_1C.esp

GameFile21=Hidden Vampire M.T.B.esp

GameFile22=Hurt_fire_1C_Trib_BM.esp

GameFile23=IceNioLivRobeReplacerPLUS 1C.esp

GameFile24=Magic.esp

GameFile25=Manor on Ascadians Isles.esp *

GameFile26=MournholdTravelFix_1C.esp

GameFile27=OR_DaeRace.esp

GameFile28=SneakingRealism_v2_1.esp

GameFile29=Yagrum's_Book.esp

GameFile30=Better Bodies.esp

 

* - мой плагин, это здесь неработает скрипт.

Ссылка на комментарий
Поделиться на другие сайты

называть скрипты можно как угодно. во всех моих плагинах используется "_" и все работает. плагины тут не причем. надо думать над порядком блоков в скрипте, моррка на такие вещи очень капризная.
Ссылка на комментарий
Поделиться на другие сайты

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

 

Begin _XYZ

short State
short SDay

if ( MenuMode == 1 )
Return
Endif

if ( OnActivate == 1 )
 if ( State == 0 )
set state to 1
 endif
endif

if ( State == 1 )
 if ( sday != day )
set sday to day
Cast "SpellID" player
 else
MessageBox "Вы уже использовали сегодня. Чачача!(с)"
 endif
 set State to 0
endif

End _XYZ

Изменено пользователем Smokingbird
Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...
Объясните чайнику, чем вынесение if (OnActivate==1) в отдельный блок лучше применения этого ифа напрямую, если он только раз используется в скрипте да и то в начале?
Ссылка на комментарий
Поделиться на другие сайты

Объясните чайнику, чем вынесение if (OnActivate==1) в отдельный блок лучше применения этого ифа напрямую, если он только раз используется в скрипте да и то в начале?
Он не один раз используется, хех. Каждый раз, когда игрок кликает по активатору, выполняется условие ( OnActivate == 1 ).

А смысл таков, что каждый раз, когда выполняется условие ( OnActivate == 1 ), должны выполняться действия, описанные под условием ( State == 1 ). А сделанно так из-за особенностей морровиндовских скриптов - хорошим тоном считается обеспечение максимально четко расписанной последовательности событий.

Хотя, в принципе, попробовать можно, хех.

 

Кстати, скрипт так и не заработал? Может, поменять местами блоки ( OnActivate == 1 ) и ( State == 1 )?

Ссылка на комментарий
Поделиться на другие сайты

Что-то я не понял... Не один раз используется блок ОнАктивейт тут? Не вижу. Вижу только один раз применение условия... (Я ж не спрашивал, сколько раз и как часто СКРИПТ искользуется, я про условие внутри скрипта). Можно пояснить про замену местами чего-то? Не вижу этого варианта.
Ссылка на комментарий
Поделиться на другие сайты

Что-то я не понял... Не один раз используется блок ОнАктивейт тут? Не вижу. Вижу только один раз применение условия... (Я ж не спрашивал, сколько раз и как часто СКРИПТ искользуется, я про условие внутри скрипта). Можно пояснить про замену местами чего-то? Не вижу этого варианта.
А, это... Ну так - да, проверка используется один раз каждый фрейм, хех.

Если поменять блоки местами, то проверка на State будет в следующем фрейме - иногда тоже помогает. Еще можно вместо else использовать elseif, еще можно вложить "set State to 0" в оба подусловия проверки на sday... Морр любит подобное шаманство.

Ссылка на комментарий
Поделиться на другие сайты

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

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

Создать учетную запись

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

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

Войти

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

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

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