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

Пересохранение мода


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

Скачал фермерский мод (http://fullrest.ru/files/morrowind/gameplay/farmer-mod), дающий возможность завести свою собственную ферму. К которой прилагаются стражники. Они могут защищать игрока от крейчеров и NPC, напавших первыми. Но если он напал сам - пытаются его убить.

Я попытался исправить это, вставив в скрипт охранников:

if ( GetTarget, player )

StopCombat;

endif

Но при сохранении скрипта в моем моде, использующем esm и Farmer Mod во многих скриптах последнего появляются ошибки, которых до этого не было.

При сохранении/рекомпиляции его в исходном моде - тоже.

Причем, вне зависимости от добавления моих строчек кода.

"Syntax Error Line 341. Could not find variable or function "tower."" - В скрипте fm_guardscript (код ниже)

if ( fm_cont_drom.tower == 1 ) - 341 строчка

Обращение к какому-то элементу класса, насколько я понял.

 

begin fm_guardscript

short state
short DoOnce
short wtower
short intower
short TowerSlot
short foundtower
short GuardType
short GuardRan
short BDay
short owned

short IsGuarding
short Followed
short GLCont
short GLContID
short cIsGuarding
short StayOutside

float GuardCounter

if ( DoOnce != 1 )
set StayOutside to 0
set cIsGuarding to 0
set intower to 0
set wtower to 0
set state to 0
set foundtower to 0
set IsGuarding to 0
set GuardCounter to 0
set Followed to 0
set DoOnce to 1
set GLCont to 0
set GLContID to 0

set GuardRan to Random, 100

if ( GuardRan < 25 )
	set GuardType to 1
elseif ( GuardRan < 45 )
	set GuardType to 2
elseif ( GuardRan < 60 )
	set GuardType to 3
elseif ( GuardRan < 75 )
	set GuardType to 4
elseif ( GuardRan < 85 )
	set GuardType to 5
elseif ( GuardRan < 92 )
	set GuardType to 6
elseif ( GuardRan < 98 )
	set GuardType to 7
elseif ( GuardRan <= 100 )
	set GuardType to 8
endif

if ( GuardType == 1 )
	SetLevel 5

	AddItem, "chitin cuirass" , 1
	AddItem, "chitin pauldron - left" , 1
	AddItem, "chitin pauldron - right" , 1
	AddItem, "chitin greaves" , 1
	AddItem, "chitin boots" , 1
	AddItem, "chitin guantlet - left" , 1
	AddItem, "chitin guantlet - right" , 1
	AddItem, "chitin spear" , 1
;		Additem, "chitin short bow", 1
;		Additem, "chitin arrow", 25

elseif ( GuardType == 2 )
	SetLevel 10
	AddSpell "fm_guardspell_10"

	AddItem, "iron_cuirass" , 1
	AddItem, "iron_pauldron_left" , 1
	AddItem, "iron_pauldron_right" , 1
	AddItem, "iron_greaves" , 1
	AddItem, "iron boots" , 1
	AddItem, "iron_gauntlet_left" , 1
	AddItem, "iron_gauntlet_right" , 1
	AddItem, "iron spear" , 1
;		Additem, "short bow", 1
;		Additem, "iron arrow", 25

elseif ( GuardType == 3 )
	SetLevel 15
	AddSpell "fm_guardspell_15"

	AddItem, "steel_cuirass" , 1
	AddItem, "steel_pauldron_left" , 1
	AddItem, "steel_pauldron_right" , 1
	AddItem, "steel_greaves" , 1
	AddItem, "steel_boots" , 1
	AddItem, "steel_gauntlet_left" , 1
	AddItem, "steel_gauntlet_right" , 1
	AddItem, "steel spear" , 1
;		Additem, "long bow", 1
;		Additem, "iron arrow", 25

elseif ( GuardType == 4 )
	SetLevel 20
	AddSpell "fm_guardspell_20"

	AddItem, "silver_cuirass" , 1
	AddItem, "imperial left pauldron" , 1
	AddItem, "imperial right pauldron" , 1
	AddItem, "imperial_greaves" , 1
	AddItem, "imperial boots" , 1
	AddItem, "imperial left gauntlet" , 1
	AddItem, "imperial right gauntlet" , 1
	AddItem, "silver spear" , 1
;		Additem, "long bow", 1
;		Additem, "steel arrow", 25

elseif ( GuardType == 5 )
	SetLevel 25
	AddSpell "fm_guardspell_25"

	AddItem, "bonemold_cuirass" , 1
	AddItem, "bonemold_armun-an_pauldron_l" , 1
	AddItem, "bonemold_armun-an_pauldron_r" , 1
	AddItem, "bonemold_greaves" , 1
	AddItem, "bonemold_boots" , 1
	AddItem, "bonemold_bracer_left" , 1
	AddItem, "bonemold_bracer_right" , 1
	AddItem, "silver spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "silver arrow", 25

elseif ( GuardType == 6 )
	SetLevel 30
	AddSpell "fm_guardspell_30"

	AddItem, "indoril cuirass" , 1
	AddItem, "indoril pauldron left" , 1
	AddItem, "indoril pauldron right" , 1
	AddItem, "indoril boots" , 1
	AddItem, "indoril left gauntlet" , 1
	AddItem, "indoril right gauntlet" , 1
	AddItem, "ebony spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "glass arrow", 25

elseif ( GuardType == 7 )
	SetLevel 40
	AddSpell "fm_guardspell_40"

	AddItem, "Helsethguard_cuirass" , 1
	AddItem, "Helsethguard_pauldron_left" , 1
	AddItem, "Helsethguard_pauldron_right" , 1
	AddItem, "Helsethguard_greaves" , 1
	AddItem, "Helsethguard_boots" , 1
	AddItem, "Helsethguard_gauntlet_left" , 1
	AddItem, "Helsethguard_gauntlet_right" , 1
	AddItem, "ebony spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "daedric arrow", 25

elseif ( GuardType == 8 )
	SetLevel 50
	AddSpell "fm_guardspell_50"

	AddItem, "adamantium_cuirass" , 1
	AddItem, "adamantium_pauldron_left" , 1
	AddItem, "adamantium_pauldron_right" , 1
	AddItem, "adamantium_greaves" , 1
	AddItem, "adamantium boots" , 1
	AddItem, "adamantium_bracer_left" , 1
	AddItem, "adamantium_bracer_right" , 1
	AddItem, "daedric spear" , 1
;		Additem, "daedric long bow", 1
;		Additem, "daedric arrow", 25

endif

AddSpell "fm_guardspell_base"

set BDay to DaysPassed
set owned to 0

endif

if ( GetDisabled == 1 )
return
endif

if ( owned == 0 )
if ( bday < DaysPassed )
	Disable
endif
endif

if ( cIsGuarding != 0 )
set IsGuarding to 0
set cIsGuarding to 0
set GuardCounter to 0.0
if ( GetItemCount "fm_heavy" > 0 )
	RemoveItem, "fm_heavy", 1
	StartScript "fm_c_EquipMelee"
endif
return
endif

if ( IsGuarding == 1 )

if ( GuardCounter >= 10 )

	if ( cIsGuarding != 0 )
		set IsGuarding to 0
		set cIsGuarding to 0
		set GuardCounter to 0.0
		if ( GetItemCount "fm_heavy" > 0 )
			RemoveItem, "fm_heavy", 1
			StartScript "fm_c_EquipMelee"
		endif
		return
	endif

	if ( GetWeaponDrawn == 0 )
		AiWander, 250,0,0,0,0,0,0,0,0
	endif

	if ( GetItemCount "fm_heavy" > 0 )
		StartScript "fm_c_EquipMelee"
	endif

	while ( GetItemCount "fm_heavy" > 0 )
		RemoveItem, "fm_heavy" , 1
	endwhile

	set GuardCounter to 0.0
	set Followed to 0

elseif ( GuardCounter >= 5 )

	if ( Followed == 0 )

		if ( cIsGuarding != 0 )
			set IsGuarding to 0
			set cIsGuarding to 0
			set GuardCounter to 0.0
			if ( GetItemCount "fm_heavy" > 0 )
				RemoveItem, "fm_heavy", 1
				StartScript "fm_c_EquipMelee"
			endif
			return
		endif

		set Followed to 1

		if ( GetWeaponDrawn == 0 )
			AiFollow, Player, 0,0,0,0
			AddItem, "fm_heavy" , 1
			StartScript "fm_c_EquipBow"
		endif				

	else
		if ( cIsGuarding == 0 )
			if ( GetItemCount "fm_heavy" > 0 )
				StartScript "fm_c_Refill"
			endif
		else
			set IsGuarding to 0
			set cIsGuarding to 0
			set GuardCounter to 0.0
			if ( GetItemCount "fm_heavy" > 0 )
				RemoveItem, "fm_heavy", 1
				StartScript "fm_c_EquipMelee"
			endif
			return
		endif
		set GuardCounter to ( GuardCounter + GetSecondsPassed )
	endif

else
;		if ( cIsGuarding != 0 )
;			set IsGuarding to 0
;			set cIsGuarding to 0
;			set GuardCounter to 0.0
;			if ( GetItemCount "fm_heavy" > 0 )
;				RemoveItem, "fm_heavy", 1
;				StartScript "fm_c_EquipMelee"
;			endif
;			return
;		endif
	set GuardCounter to ( GuardCounter + GetSecondsPassed )
endif

endif

if ( cIsGuarding == 1 )
set cIsGuarding to 0
endif

if ( GLCont == 0 )
if ( GetDistance, fm_cont_arano < 2000 )
	set Arano_GuardLevel to ( Arano_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 1
elseif ( GetDistance, fm_cont_ieneth < 2000 )
	set Ieneth_GuardLevel to ( Ieneth_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 2
elseif ( GetDistance, fm_cont_drom < 2000 )
	set Drom_GuardLevel to ( Drom_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 3
elseif ( GetDistance, fm_cont_new < 2000 )
	set New_GuardLevel to ( New_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 4
endif
else
if ( GLContID == 1 )
	if ( GetDistance, fm_cont_arano >= 2000 )
		set Arano_GuardLevel to ( Arano_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 2 )
	if ( GetDistance, fm_cont_ieneth >= 2000 )
		set Ieneth_GuardLevel to ( Ieneth_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 3 )
	if ( GetDistance, fm_cont_drom >= 2000 )
		set Drom_GuardLevel to ( Drom_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 4 )
	if ( GetDistance, fm_cont_new>= 2000 )
		set New_GuardLevel to ( New_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
endif
endif

if ( state == 1 )

if ( GetDistance, fm_cont_drom < 3000 )
	if ( fm_cont_drom.tower == 1 )
		if ( Drom_GTO < 2 )

			if ( Drom_GSlot1 == 0 )
				set TowerSlot to 0
				set Drom_GSlot1 to 1
			else
				set TowerSlot to 1
				set Drom_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 1
			set Drom_GTO to ( Drom_GTO + 1 )
			AiTravel 47503, -59819, 902
		else
			set foundtower to 1
			MessageBox "Áëèæàéøàÿ Ñòîðîæåâàÿ áàøíÿ íå ìîæåò âìåñòèòü â ñåáÿ áîëüøå îõðàííèêîâ"
		endif
	endif

elseif ( GetDistance, fm_cont_ieneth < 3000 )
	if ( fm_cont_ieneth.tower == 1 )
		if ( Ieneth_GTO < 2 )

			if ( Ieneth_GSlot1 == 0 )
				set TowerSlot to 0
				set Ieneth_GSlot1 to 1
			else
				set TowerSlot to 1
				set Ieneth_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 2
			set Ieneth_GTO to ( Ieneth_GTO + 1 )
			AiTravel 35267, -62677, 831
		else
			set foundtower to 1
			MessageBox "Áëèæàéøàÿ Ñòîðîæåâàÿ áàøíÿ íå ìîæåò âìåñòèòü â ñåáÿ áîëüøå îõðàííèêîâ"
		endif
	endif

elseif ( GetDistance, fm_cont_arano < 3000 )
	if ( fm_cont_arano.tower == 1 )
		if ( Arano_GTO < 2 )

			if ( Arano_GSlot1 == 0 )
				set TowerSlot to 0
				set Arano_GSlot1 to 1
			else
				set TowerSlot to 1
				set Arano_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 3
			set Arano_GTO to ( Arano_GTO + 1 )
			AiTravel 36141, -51108, 804
		else
			set foundtower to 1
			MessageBox "Áëèæàéøàÿ Ñòîðîæåâàÿ áàøíÿ íå ìîæåò âìåñòèòü â ñåáÿ áîëüøå îõðàííèêîâ"
		endif
	endif
endif
if ( foundtower == 0 )
	MessageBox "Ïîáëèçîñòè íåò Ñòîðîæåâûõ áàøåí"     
endif
set foundtower to 0
set state to 0
endif

if ( wtower != 0 )
if ( intower != 1 )
	if ( GetAiPackageDone == 1 )

		if ( wtower == 1 )
			if ( TowerSlot == 0 )
				position 47187, -60049, 1682, 97
			else
				position 47129, -59952, 1682, 349
			endif
		elseif ( wtower == 2 )
			if ( TowerSlot == 0 )
				position 34988, -62475, 1615, 57
			else
				position 34930, -62580, 1615, 189
			endif
		elseif ( wtower == 3 )
			if ( TowerSlot == 0 )
				position 36344, -51083, 1463, 200
			else
				position 36338, -50958, 1463, 333
			endif
		endif

		set intower to 1
		AddItem, "fm_heavy", 1
		AiFollow, player, 1,1,1,1

		; Levelled Section (Merged Scripts)

		if ( GetLevel == 5 )

			removeitem, "chitin spear",1
			additem, "chitin short bow",1
			additem, "chitin arrow",25

		elseif ( GetLevel == 10 )

			removeitem,"iron spear",1
			additem, "short bow",1
			additem, "iron arrow",25

		elseif ( GetLevel == 15 )

			removeitem,"steel spear",1
			additem, "long bow",1
			additem, "iron arrow",25

		elseif ( GetLevel == 20 )

			removeitem,"silver spear",1
			additem, "long bow",1
			additem, "steel arrow",25

		elseif ( GetLevel == 25 )

			removeitem,"silver spear",1
			additem, "bonemold long bow",1
			additem, "silver arrow",25

		elseif ( GetLevel == 30 )

			removeitem,"ebony spear",1
			additem, "bonemold long bow",1
			additem, "glass arrow",25

		elseif ( GetLevel == 40 )

			removeitem,"ebony spear",1
			additem, "bonemold long bow",1
			additem, "daedric arrow",25

		elseif ( GetLevel == 50 )

			removeitem,"daedric spear",1
			additem, "daedric long bow",1
			additem, "daedric arrow",25

		endif
	endif	
endif
endif

; Give the guard an infinite supply of arrows
; And a constantly renewing bow (so it doesn't brake)'

if ( intower == 1 )

; Another Leveled Area
if ( GetLevel == 5 )

	if ( GetItemCount "chitin arrow" < 1 )
		removeitem, "chitin short bow",1
		additem, "chitin short bow",1
		additem, "chitin arrow",25
	endif

elseif ( GetLevel == 10 )

	if ( GetItemCount "iron arrow" < 1 )
		removeitem, "short bow",1
		additem, "short bow",1
		additem, "iron arrow",25
	endif

elseif ( GetLevel == 15 )

	if ( GetItemCount "iron arrow" < 1 )
		removeitem, "long bow",1
		additem, "long bow",1
		additem, "iron arrow",25
	endif

elseif ( GetLevel == 20 )

	if ( GetItemCount "steel arrow" < 1 )
		removeitem, "long bow",1
		additem, "long bow",1
		additem, "steel arrow",25
	endif

elseif ( GetLevel == 25 )

	if ( GetItemCount "silver arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "silver arrow",25
	endif

elseif ( GetLevel == 30 )

	if ( GetItemCount "glass arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "glass arrow",25
	endif

elseif ( GetLevel == 40 )

	if ( GetItemCount "daedric arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "daedric arrow",25
	endif

elseif ( GetLevel == 50 )

	if ( GetItemCount "daedric arrow" < 1 )
		removeitem, "daedric long bow",1
		additem, "daedric long bow",1
		additem, "daedric arrow",25
	endif

endif
endif

if ( state == 2 )
set intower to 0

if ( GetLevel == 5 )

	additem, "chitin spear",1
	removeitem, "chitin short bow",1
	while ( GetItemCount, "chitin arrow" > 0 )
		removeitem, "chitin arrow",1
	endwhile

elseif ( GetLevel == 10 )

	additem, "iron spear",1
	removeitem, "short bow",1
	while ( GetItemCount, "iron arrow" > 0 )
		removeitem, "iron arrow",1
	endwhile

elseif ( GetLevel == 15 )

	additem, "steel spear",1
	removeitem, "long bow",1
	while ( GetItemCount, "steel arrow" > 0 )
		removeitem, "steel arrow",1
	endwhile

elseif ( GetLevel == 20 )

	additem, "silver spear",1
	removeitem, "long bow",1
	while ( GetItemCount, "steel arrow" > 0 )
		removeitem, "steel arrow",1
	endwhile

elseif ( GetLevel == 25 )

	additem, "silver spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "silver arrow" > 0 )
		removeitem, "silver arrow",1
	endwhile

elseif ( GetLevel == 30 )

	additem, "ebony spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "glass arrow" > 0 )
		removeitem, "glass arrow",1
	endwhile

elseif ( GetLevel == 40 )

	additem, "ebony spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "daedric arrow" > 0 )
		removeitem, "daedric arrow",1
	endwhile

elseif ( GetLevel == 50 )

	additem, "daedric spear",1
	removeitem, "daedric long bow",1
	while ( GetItemCount, "daedric arrow" > 0 )
		removeitem, "daedric arrow",1
	endwhile

endif 

if ( wtower == 1 )

	position 47409, -59804, 883, 46
	set Drom_GTO to ( Drom_GTO - 1 )
	if ( TowerSlot == 0 )
		set Drom_GSlot1 to 0
	else
		set Drom_GSlot2 to 0
	endif

elseif ( wtower == 2 )

	position 35265, -62719, 831, 120
	set Ieneth_GTO to ( Ieneth_GTO - 1 )
	if ( TowerSlot == 0 )
		set Ieneth_GSlot1 to 0
	else
		set Ieneth_GSlot2 to 0
	endif

elseif ( wtower == 3 )

	position 35977, -51160, 804, 263
	set Arano_GTO to ( Arano_GTO - 1 )
	if ( TowerSlot == 0 )
		set Arano_GSlot1 to 0
	else
		set Arano_GSlot2 to 0
	endif

endif

set wtower to 0
set state to 0
RemoveItem, "fm_heavy",1
set IsGuarding to 1

endif

if ( GetTarget, player ) 
   StopCombat;
endif

end

 

Как внести изменения в код, не угробив половину скриптов?

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

Можно сделать скрипт. Вешаешь скрипт на стражника.

Begin myyrnguardscript
short doonce
if ( doonce == 0 )
startscript fm_guardscript
set doonce to 1
endif
if ( GetTarget, player )

StopCombat;

endif
end

После stopcombat у тебя накой-то комментарий. В Морроувинде функции и процедуры не заканчиваются ";".

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

Можно сделать скрипт. Вешаешь скрипт на стражника.

На стражнике уже висит то, что под катом. Проблема именно во внезапном появлении ошибок при пересохранении скрипта.

После stopcombat у тебя накой-то комментарий. В Морроувинде функции и процедуры не заканчиваются ";".

Знаю. Но врядли это вызвало глюки )

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

1) Надо писать не просто StopCombat, а StopCombat, Player.

2) Можешь попробовать не пересохранять плагин в КС. Воспользуйся блокнотом.

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

2) Можешь попробовать не пересохранять плагин в КС. Воспользуйся блокнотом.

:what: Если я изменю скрипт в блокноте, а потом вставлю в TES, надо будет сохранить скрипт.

А чтобы оставить изменения в скрипте в силе, надо сохранить плагин.

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

На стражнике уже висит то, что под катом. Проблема именно во внезапном появлении ошибок при пересохранении скрипта.

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

Или вариант Moorindal'A.

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

КС сохраняет плагины глючно - это факт. В блокноте я не пересохранял, но предполагаю, что можно безнаказанно отредактировать нужные данные через него и сохранить. По-идее, все будет в порядке, если не нацеплять лишнего.
Ссылка на комментарий
Поделиться на другие сайты

Сам плагин, блин, а не скрипт.

Сейчас для теста скопировал Area Effect Arrows из базы, пересохранил копию в блокноте -

File 'Копия Area Effect Arrows.esp' is not a valid TES file.

при старте КС.

Хотя в теории такое же можно сделать хекас-редактором, MEE или MWEdit

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

Сейчас для теста скопировал Area Effect Arrows из базы, пересохранил копию в блокноте - при старте КС.

 

bi-666, да, действительно, при пересохранении блокнотом появляется такая хрень. Но тут, скорее, косячность самого блокнота виновата, потому, что при пересохранении в Notepad++ все нормально. Сейчас отредактировал скрипт через него. Все работало.

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

File 'Farmer Mod v4.3.esp' is not a valid TES file.

 

begin fm_guardscript

short state
short DoOnce
short wtower
short intower
short TowerSlot
short foundtower
short GuardType
short GuardRan
short BDay
short owned

short IsGuarding
short Followed
short GLCont
short GLContID
short cIsGuarding
short StayOutside

float GuardCounter

if ( GetTarget,player ) 
StopCombat,player;)

endif

if ( DoOnce != 1 )
set StayOutside to 0
set cIsGuarding to 0
set intower to 0
set wtower to 0
set state to 0
set foundtower to 0
set IsGuarding to 0
set GuardCounter to 0
set Followed to 0
set DoOnce to 1
set GLCont to 0
set GLContID to 0

set GuardRan to Random, 100

if ( GuardRan < 25 )
	set GuardType to 1
elseif ( GuardRan < 45 )
	set GuardType to 2
elseif ( GuardRan < 60 )
	set GuardType to 3
elseif ( GuardRan < 75 )
	set GuardType to 4
elseif ( GuardRan < 85 )
	set GuardType to 5
elseif ( GuardRan < 92 )
	set GuardType to 6
elseif ( GuardRan < 98 )
	set GuardType to 7
elseif ( GuardRan <= 100 )
	set GuardType to 8
endif

if ( GuardType == 1 )
	SetLevel 5

	AddItem, "chitin cuirass" , 1
	AddItem, "chitin pauldron - left" , 1
	AddItem, "chitin pauldron - right" , 1
	AddItem, "chitin greaves" , 1
	AddItem, "chitin boots" , 1
	AddItem, "chitin guantlet - left" , 1
	AddItem, "chitin guantlet - right" , 1
	AddItem, "chitin spear" , 1
;		Additem, "chitin short bow", 1
;		Additem, "chitin arrow", 25

elseif ( GuardType == 2 )
	SetLevel 10
	AddSpell "fm_guardspell_10"

	AddItem, "iron_cuirass" , 1
	AddItem, "iron_pauldron_left" , 1
	AddItem, "iron_pauldron_right" , 1
	AddItem, "iron_greaves" , 1
	AddItem, "iron boots" , 1
	AddItem, "iron_gauntlet_left" , 1
	AddItem, "iron_gauntlet_right" , 1
	AddItem, "iron spear" , 1
;		Additem, "short bow", 1
;		Additem, "iron arrow", 25

elseif ( GuardType == 3 )
	SetLevel 15
	AddSpell "fm_guardspell_15"

	AddItem, "steel_cuirass" , 1
	AddItem, "steel_pauldron_left" , 1
	AddItem, "steel_pauldron_right" , 1
	AddItem, "steel_greaves" , 1
	AddItem, "steel_boots" , 1
	AddItem, "steel_gauntlet_left" , 1
	AddItem, "steel_gauntlet_right" , 1
	AddItem, "steel spear" , 1
;		Additem, "long bow", 1
;		Additem, "iron arrow", 25

elseif ( GuardType == 4 )
	SetLevel 20
	AddSpell "fm_guardspell_20"

	AddItem, "silver_cuirass" , 1
	AddItem, "imperial left pauldron" , 1
	AddItem, "imperial right pauldron" , 1
	AddItem, "imperial_greaves" , 1
	AddItem, "imperial boots" , 1
	AddItem, "imperial left gauntlet" , 1
	AddItem, "imperial right gauntlet" , 1
	AddItem, "silver spear" , 1
;		Additem, "long bow", 1
;		Additem, "steel arrow", 25

elseif ( GuardType == 5 )
	SetLevel 25
	AddSpell "fm_guardspell_25"

	AddItem, "bonemold_cuirass" , 1
	AddItem, "bonemold_armun-an_pauldron_l" , 1
	AddItem, "bonemold_armun-an_pauldron_r" , 1
	AddItem, "bonemold_greaves" , 1
	AddItem, "bonemold_boots" , 1
	AddItem, "bonemold_bracer_left" , 1
	AddItem, "bonemold_bracer_right" , 1
	AddItem, "silver spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "silver arrow", 25

elseif ( GuardType == 6 )
	SetLevel 30
	AddSpell "fm_guardspell_30"

	AddItem, "indoril cuirass" , 1
	AddItem, "indoril pauldron left" , 1
	AddItem, "indoril pauldron right" , 1
	AddItem, "indoril boots" , 1
	AddItem, "indoril left gauntlet" , 1
	AddItem, "indoril right gauntlet" , 1
	AddItem, "ebony spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "glass arrow", 25

elseif ( GuardType == 7 )
	SetLevel 40
	AddSpell "fm_guardspell_40"

	AddItem, "Helsethguard_cuirass" , 1
	AddItem, "Helsethguard_pauldron_left" , 1
	AddItem, "Helsethguard_pauldron_right" , 1
	AddItem, "Helsethguard_greaves" , 1
	AddItem, "Helsethguard_boots" , 1
	AddItem, "Helsethguard_gauntlet_left" , 1
	AddItem, "Helsethguard_gauntlet_right" , 1
	AddItem, "ebony spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "daedric arrow", 25

elseif ( GuardType == 8 )
	SetLevel 50
	AddSpell "fm_guardspell_50"

	AddItem, "adamantium_cuirass" , 1
	AddItem, "adamantium_pauldron_left" , 1
	AddItem, "adamantium_pauldron_right" , 1
	AddItem, "adamantium_greaves" , 1
	AddItem, "adamantium boots" , 1
	AddItem, "adamantium_bracer_left" , 1
	AddItem, "adamantium_bracer_right" , 1
	AddItem, "daedric spear" , 1
;		Additem, "daedric long bow", 1
;		Additem, "daedric arrow", 25

endif

AddSpell "fm_guardspell_base"

set BDay to DaysPassed
set owned to 0

endif

if ( GetDisabled == 1 )
return
endif

if ( owned == 0 )
if ( bday < DaysPassed )
	Disable
endif
endif

if ( cIsGuarding != 0 )
set IsGuarding to 0
set cIsGuarding to 0
set GuardCounter to 0.0
if ( GetItemCount "fm_heavy" > 0 )
	RemoveItem, "fm_heavy", 1
	StartScript "fm_c_EquipMelee"
endif
return
endif

if ( IsGuarding == 1 )

if ( GuardCounter >= 10 )

	if ( cIsGuarding != 0 )
		set IsGuarding to 0
		set cIsGuarding to 0
		set GuardCounter to 0.0
		if ( GetItemCount "fm_heavy" > 0 )
			RemoveItem, "fm_heavy", 1
			StartScript "fm_c_EquipMelee"
		endif
		return
	endif

	if ( GetWeaponDrawn == 0 )
		AiWander, 250,0,0,0,0,0,0,0,0
	endif

	if ( GetItemCount "fm_heavy" > 0 )
		StartScript "fm_c_EquipMelee"
	endif

	while ( GetItemCount "fm_heavy" > 0 )
		RemoveItem, "fm_heavy" , 1
	endwhile

	set GuardCounter to 0.0
	set Followed to 0

elseif ( GuardCounter >= 5 )

	if ( Followed == 0 )

		if ( cIsGuarding != 0 )
			set IsGuarding to 0
			set cIsGuarding to 0
			set GuardCounter to 0.0
			if ( GetItemCount "fm_heavy" > 0 )
				RemoveItem, "fm_heavy", 1
				StartScript "fm_c_EquipMelee"
			endif
			return
		endif

		set Followed to 1

		if ( GetWeaponDrawn == 0 )
			AiFollow, Player, 0,0,0,0
			AddItem, "fm_heavy" , 1
			StartScript "fm_c_EquipBow"
		endif				

	else
		if ( cIsGuarding == 0 )
			if ( GetItemCount "fm_heavy" > 0 )
				StartScript "fm_c_Refill"
			endif
		else
			set IsGuarding to 0
			set cIsGuarding to 0
			set GuardCounter to 0.0
			if ( GetItemCount "fm_heavy" > 0 )
				RemoveItem, "fm_heavy", 1
				StartScript "fm_c_EquipMelee"
			endif
			return
		endif
		set GuardCounter to ( GuardCounter + GetSecondsPassed )
	endif

else
;		if ( cIsGuarding != 0 )
;			set IsGuarding to 0
;			set cIsGuarding to 0
;			set GuardCounter to 0.0
;			if ( GetItemCount "fm_heavy" > 0 )
;				RemoveItem, "fm_heavy", 1
;				StartScript "fm_c_EquipMelee"
;			endif
;			return
;		endif
	set GuardCounter to ( GuardCounter + GetSecondsPassed )
endif

endif

if ( cIsGuarding == 1 )
set cIsGuarding to 0
endif

if ( GLCont == 0 )
if ( GetDistance, fm_cont_arano < 2000 )
	set Arano_GuardLevel to ( Arano_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 1
elseif ( GetDistance, fm_cont_ieneth < 2000 )
	set Ieneth_GuardLevel to ( Ieneth_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 2
elseif ( GetDistance, fm_cont_drom < 2000 )
	set Drom_GuardLevel to ( Drom_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 3
elseif ( GetDistance, fm_cont_new < 2000 )
	set New_GuardLevel to ( New_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 4
endif
else
if ( GLContID == 1 )
	if ( GetDistance, fm_cont_arano >= 2000 )
		set Arano_GuardLevel to ( Arano_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 2 )
	if ( GetDistance, fm_cont_ieneth >= 2000 )
		set Ieneth_GuardLevel to ( Ieneth_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 3 )
	if ( GetDistance, fm_cont_drom >= 2000 )
		set Drom_GuardLevel to ( Drom_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 4 )
	if ( GetDistance, fm_cont_new>= 2000 )
		set New_GuardLevel to ( New_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
endif
endif

if ( state == 1 )

if ( GetDistance, fm_cont_drom < 3000 )
	if ( fm_cont_drom.tower == 1 )
		if ( Drom_GTO < 2 )

			if ( Drom_GSlot1 == 0 )
				set TowerSlot to 0
				set Drom_GSlot1 to 1
			else
				set TowerSlot to 1
				set Drom_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 1
			set Drom_GTO to ( Drom_GTO + 1 )
			AiTravel 47503, -59819, 902
		else
			set foundtower to 1
			MessageBox "Ближайшая Сторожевая башня не может вместить в себя больше охранников"
		endif
	endif

elseif ( GetDistance, fm_cont_ieneth < 3000 )
	if ( fm_cont_ieneth.tower == 1 )
		if ( Ieneth_GTO < 2 )

			if ( Ieneth_GSlot1 == 0 )
				set TowerSlot to 0
				set Ieneth_GSlot1 to 1
			else
				set TowerSlot to 1
				set Ieneth_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 2
			set Ieneth_GTO to ( Ieneth_GTO + 1 )
			AiTravel 35267, -62677, 831
		else
			set foundtower to 1
			MessageBox "Ближайшая Сторожевая башня не может вместить в себя больше охранников"
		endif
	endif

elseif ( GetDistance, fm_cont_arano < 3000 )
	if ( fm_cont_arano.tower == 1 )
		if ( Arano_GTO < 2 )

			if ( Arano_GSlot1 == 0 )
				set TowerSlot to 0
				set Arano_GSlot1 to 1
			else
				set TowerSlot to 1
				set Arano_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 3
			set Arano_GTO to ( Arano_GTO + 1 )
			AiTravel 36141, -51108, 804
		else
			set foundtower to 1
			MessageBox "Ближайшая Сторожевая башня не может вместить в себя больше охранников"
		endif
	endif
endif
if ( foundtower == 0 )
	MessageBox "Поблизости нет Сторожевых башен"     
endif
set foundtower to 0
set state to 0
endif

if ( wtower != 0 )
if ( intower != 1 )
	if ( GetAiPackageDone == 1 )

		if ( wtower == 1 )
			if ( TowerSlot == 0 )
				position 47187, -60049, 1682, 97
			else
				position 47129, -59952, 1682, 349
			endif
		elseif ( wtower == 2 )
			if ( TowerSlot == 0 )
				position 34988, -62475, 1615, 57
			else
				position 34930, -62580, 1615, 189
			endif
		elseif ( wtower == 3 )
			if ( TowerSlot == 0 )
				position 36344, -51083, 1463, 200
			else
				position 36338, -50958, 1463, 333
			endif
		endif

		set intower to 1
		AddItem, "fm_heavy", 1
		AiFollow, player, 1,1,1,1

		; Levelled Section (Merged Scripts)

		if ( GetLevel == 5 )

			removeitem, "chitin spear",1
			additem, "chitin short bow",1
			additem, "chitin arrow",25

		elseif ( GetLevel == 10 )

			removeitem,"iron spear",1
			additem, "short bow",1
			additem, "iron arrow",25

		elseif ( GetLevel == 15 )

			removeitem,"steel spear",1
			additem, "long bow",1
			additem, "iron arrow",25

		elseif ( GetLevel == 20 )

			removeitem,"silver spear",1
			additem, "long bow",1
			additem, "steel arrow",25

		elseif ( GetLevel == 25 )

			removeitem,"silver spear",1
			additem, "bonemold long bow",1
			additem, "silver arrow",25

		elseif ( GetLevel == 30 )

			removeitem,"ebony spear",1
			additem, "bonemold long bow",1
			additem, "glass arrow",25

		elseif ( GetLevel == 40 )

			removeitem,"ebony spear",1
			additem, "bonemold long bow",1
			additem, "daedric arrow",25

		elseif ( GetLevel == 50 )

			removeitem,"daedric spear",1
			additem, "daedric long bow",1
			additem, "daedric arrow",25

		endif
	endif	
endif
endif

; Give the guard an infinite supply of arrows
; And a constantly renewing bow (so it doesn't brake)'

if ( intower == 1 )

; Another Leveled Area
if ( GetLevel == 5 )

	if ( GetItemCount "chitin arrow" < 1 )
		removeitem, "chitin short bow",1
		additem, "chitin short bow",1
		additem, "chitin arrow",25
	endif

elseif ( GetLevel == 10 )

	if ( GetItemCount "iron arrow" < 1 )
		removeitem, "short bow",1
		additem, "short bow",1
		additem, "iron arrow",25
	endif

elseif ( GetLevel == 15 )

	if ( GetItemCount "iron arrow" < 1 )
		removeitem, "long bow",1
		additem, "long bow",1
		additem, "iron arrow",25
	endif

elseif ( GetLevel == 20 )

	if ( GetItemCount "steel arrow" < 1 )
		removeitem, "long bow",1
		additem, "long bow",1
		additem, "steel arrow",25
	endif

elseif ( GetLevel == 25 )

	if ( GetItemCount "silver arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "silver arrow",25
	endif

elseif ( GetLevel == 30 )

	if ( GetItemCount "glass arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "glass arrow",25
	endif

elseif ( GetLevel == 40 )

	if ( GetItemCount "daedric arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "daedric arrow",25
	endif

elseif ( GetLevel == 50 )

	if ( GetItemCount "daedric arrow" < 1 )
		removeitem, "daedric long bow",1
		additem, "daedric long bow",1
		additem, "daedric arrow",25
	endif

endif
endif

if ( state == 2 )
set intower to 0

if ( GetLevel == 5 )

	additem, "chitin spear",1
	removeitem, "chitin short bow",1
	while ( GetItemCount, "chitin arrow" > 0 )
		removeitem, "chitin arrow",1
	endwhile

elseif ( GetLevel == 10 )

	additem, "iron spear",1
	removeitem, "short bow",1
	while ( GetItemCount, "iron arrow" > 0 )
		removeitem, "iron arrow",1
	endwhile

elseif ( GetLevel == 15 )

	additem, "steel spear",1
	removeitem, "long bow",1
	while ( GetItemCount, "steel arrow" > 0 )
		removeitem, "steel arrow",1
	endwhile

elseif ( GetLevel == 20 )

	additem, "silver spear",1
	removeitem, "long bow",1
	while ( GetItemCount, "steel arrow" > 0 )
		removeitem, "steel arrow",1
	endwhile

elseif ( GetLevel == 25 )

	additem, "silver spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "silver arrow" > 0 )
		removeitem, "silver arrow",1
	endwhile

elseif ( GetLevel == 30 )

	additem, "ebony spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "glass arrow" > 0 )
		removeitem, "glass arrow",1
	endwhile

elseif ( GetLevel == 40 )

	additem, "ebony spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "daedric arrow" > 0 )
		removeitem, "daedric arrow",1
	endwhile

elseif ( GetLevel == 50 )

	additem, "daedric spear",1
	removeitem, "daedric long bow",1
	while ( GetItemCount, "daedric arrow" > 0 )
		removeitem, "daedric arrow",1
	endwhile

endif 

if ( wtower == 1 )

	position 47409, -59804, 883, 46
	set Drom_GTO to ( Drom_GTO - 1 )
	if ( TowerSlot == 0 )
		set Drom_GSlot1 to 0
	else
		set Drom_GSlot2 to 0
	endif

elseif ( wtower == 2 )

	position 35265, -62719, 831, 120
	set Ieneth_GTO to ( Ieneth_GTO - 1 )
	if ( TowerSlot == 0 )
		set Ieneth_GSlot1 to 0
	else
		set Ieneth_GSlot2 to 0
	endif

elseif ( wtower == 3 )

	position 35977, -51160, 804, 263
	set Arano_GTO to ( Arano_GTO - 1 )
	if ( TowerSlot == 0 )
		set Arano_GSlot1 to 0
	else
		set Arano_GSlot2 to 0
	endif

endif

set wtower to 0
set state to 0
RemoveItem, "fm_heavy",1
set IsGuarding to 1

endif

end

 

Но перед этим есть еще:

 

SCPTZ          SCHD4   fm_guardscript                                 SCVR   state DoOnce wtower intower TowerSlot foundtower GuardType GuardRan BDay owned IsGuarding Followed GLCont GLContID cIsGuarding StayOutside GuardCounter SCDT  x	 s  != 1s  0s  0s  0s  0s  0s  0s  0f  0s  0s  1s
 0s  0s  X!d 00	 s  < 25s  1	 s  < 45s  2	 s  < 60s  3	 s  < 75s  4	 s  < 85s  5	 s  < 92s  6	 s  < 98s  7 s  <= 100s  8			 s  == 1V Фchitin cuirass Фchitin pauldron - left Фchitin pauldron - right Фchitin greaves Фchitin boots Фchitin guantlet - left Фchitin guantlet - right Фchitin spear 
 s  == 2V
fm_guardspell_10Фiron_cuirass Фiron_pauldron_left Фiron_pauldron_right Фiron_greaves Ф
iron boots Фiron_gauntlet_left Фiron_gauntlet_right Ф
iron spear 
 s  == 3V fm_guardspell_15Ф
steel_cuirass Фsteel_pauldron_left Фsteel_pauldron_right Ф
steel_greaves Фsteel_boots Фsteel_gauntlet_left Фsteel_gauntlet_right Фsteel spear 
 s  == 4V fm_guardspell_20Фsilver_cuirass Фimperial left pauldron Фimperial right pauldron Фimperial_greaves Фimperial boots Фimperial left gauntlet Фimperial right gauntlet Фsilver spear 
 s  == 5V fm_guardspell_25Фbonemold_cuirass Фbonemold_armun-an_pauldron_l Фbonemold_armun-an_pauldron_r Фbonemold_greaves Фbonemold_boots Фbonemold_bracer_left Фbonemold_bracer_right Фsilver spear 		 s  == 6V fm_guardspell_30Фindoril cuirass Фindoril pauldron left Фindoril pauldron right Ф
indoril boots Фindoril left gauntlet Фindoril right gauntlet Фebony spear 
 s  == 7V( fm_guardspell_40ФHelsethguard_cuirass ФHelsethguard_pauldron_left ФHelsethguard_pauldron_right ФHelsethguard_greaves ФHelsethguard_boots ФHelsethguard_gauntlet_left ФHelsethguard_gauntlet_right Фebony spear 
 s  == 8V2 fm_guardspell_50Фadamantium_cuirass Фadamantium_pauldron_left Фadamantium_pauldron_right Фadamantium_greaves Фadamantium boots Фadamantium_bracer_left Фadamantium_bracer_right Ф
daedric spear 	fm_guardspell_bases	  G
DaysPassed s
 0		 XЬ == 1$		 s
 == 0 s	  < G
DaysPassed Ы			 s  != 0s  0s  0f  0.0 Xэ ofm_heavy > 0Хfm_heavy fm_c_EquipMelee	$	<	 s  == 1
f  >= 10	 s  != 0s  0s  0f  0.0 Xэ ofm_heavy > 0Хfm_heavy fm_c_EquipMelee	$		 X® == 0щ  zC                   	 Xэ ofm_heavy > 0fm_c_EquipMelee	
Xэ ofm_heavy > 0Хfm_heavy f  0.0s  0"	 f  >= 5	 s  == 0	 s  != 0s  0s  0f  0.0 Xэ ofm_heavy > 0Хfm_heavy fm_c_EquipMelee	$	s  1	 X® == 0цPlayer               Фfm_heavy 
fm_c_EquipBow		 s  == 0 Xэ ofm_heavy > 0fm_c_Refill	s  0s  0f  0.0 Xэ ofm_heavy > 0Хfm_heavy fm_c_EquipMelee	$	f 
f  X +	f 
f  X +			 s  == 1s  0		 s
 == 0 X, r
fm_cont_arano < 2000GArano_GuardLevel GArano_GuardLevel s  +s
 1s  1 X, rfm_cont_ieneth < 2000GIeneth_GuardLevel GIeneth_GuardLevel s  +s
 1s  2 X, rfm_cont_drom < 2000GDrom_GuardLevel GDrom_GuardLevel s  +s
 1s  3 X, rfm_cont_new < 2000GNew_GuardLevel GNew_GuardLevel s  +s
 1s  4		 s  == 1 X, r
fm_cont_arano >= 2000GArano_GuardLevel GArano_GuardLevel s  -s
 0		 s  == 2 X, rfm_cont_ieneth >= 2000GIeneth_GuardLevel GIeneth_GuardLevel s  -s
 0		 s  == 3 X, rfm_cont_drom >= 2000GDrom_GuardLevel GDrom_GuardLevel s  -s
 0		 s  == 4 X, rfm_cont_new>= 2000GNew_GuardLevel GNew_GuardLevel s  -s
 0			?	 s  == 1 X, rfm_cont_drom < 3000 rfm_cont_droms  == 1 GDrom_GTO < 2 GDrom_GSlot1 == 0s  0GDrom_GSlot1 1s  1GDrom_GSlot2 1	s  1s  1GDrom_GTO GDrom_GTO 1 +ш Џ9G «iЗ ЂaD s  1 1 Ближайшая башня не может содержать больше охраны.  		 X, rfm_cont_ieneth < 3000 rfm_cont_ieneths  == 1 G
Ieneth_GTO < 2 G
Ieneth_GSlot1 == 0s  0G
Ieneth_GSlot1 1s  1G
Ieneth_GSlot2 1	s  1s  2G
Ieneth_GTO G
Ieneth_GTO 1 +ш Г	G ХtЗ АOD s  1 1 Ближайшая башня не может содержать больше охраны.  		 X, r
fm_cont_arano < 3000 r
fm_cont_aranos  == 1 G	Arano_GTO < 2 GArano_GSlot1 == 0s  0GArano_GSlot1 1s  1GArano_GSlot2 1	s  1s  3G	Arano_GTO G	Arano_GTO 1 +ш -
G ¤GЗ  ID s  1 1 Ближайшая башня не может содержать больше охраны.  				 s  == 0 ! Поблизости нет башен охраны!       	s  0s  0	;	 s  != 09	 s  != 17	 Xы == 1	 s  == 1	 s  == 0 S8G ‘jЗ @ТD  ВB 8G 0jЗ @ТD Ђ®C		 s  == 2	 s  == 0 ¬G tЗ аЙD  dB rG ttЗ аЙD  =C		 s  == 3	 s  == 0 ш
G ‹GЗ а¶D  HC т
G GЗ а¶D Ђ¦C		s  1Фfm_heavy цplayer   Ђ?  Ђ?  Ђ? 	 XW == 5Хchitin spear Фchitin short bow Фchitin arrow 
XW == 10Х
iron spear Ф	short bow Ф
iron arrow 
XW == 15Хsteel spear Фlong bow Ф
iron arrow 
XW == 20Хsilver spear Фlong bow Фsteel arrow 
XW == 25Хsilver spear Фbonemold long bow Фsilver arrow 
XW == 30Хebony spear Фbonemold long bow Фglass arrow 
XW == 40Хebony spear Фbonemold long bow Ф
daedric arrow 
XW == 50Х
daedric spear Фdaedric long bow Ф
daedric arrow 				1	 s  == 1	 XW == 5 Xэ ochitin arrow < 1Хchitin short bow Фchitin short bow Фchitin arrow 	
XW == 10 Xэ o
iron arrow < 1Х	short bow Ф	short bow Ф
iron arrow 	
XW == 15 Xэ o
iron arrow < 1Хlong bow Фlong bow Ф
iron arrow 	
XW == 20 Xэ osteel arrow < 1Хlong bow Фlong bow Фsteel arrow 	
XW == 25 Xэ osilver arrow < 1Хbonemold long bow Фbonemold long bow Фsilver arrow 	
XW == 30 Xэ oglass arrow < 1Хbonemold long bow Фbonemold long bow Фglass arrow 	
XW == 40 Xэ o
daedric arrow < 1Хbonemold long bow Фbonemold long bow Ф
daedric arrow 	
XW == 50 Xэ o
daedric arrow < 1Хdaedric long bow Фdaedric long bow Ф
daedric arrow 			O	 s  == 2s  0	 XW == 5Фchitin spear Хchitin short bow 
Xэ, ochitin arrow > 0Хchitin arrow 
XW == 10Ф
iron spear Х	short bow 
Xэ, o
iron arrow > 0Х
iron arrow 
XW == 15Фsteel spear Хlong bow 
Xэ, osteel arrow > 0Хsteel arrow 
XW == 20Фsilver spear Хlong bow 
Xэ, osteel arrow > 0Хsteel arrow 
XW == 25Фsilver spear Хbonemold long bow 
Xэ, osilver arrow > 0Хsilver arrow 
XW == 30Фebony spear Хbonemold long bow 
Xэ, oglass arrow > 0Хglass arrow 
XW == 40Фebony spear Хbonemold long bow 
Xэ, o
daedric arrow > 0Х
daedric arrow 
XW == 50Ф
daedric spear Хdaedric long bow 
Xэ, o
daedric arrow > 0Х
daedric arrow 		 s  == 1 19G њiЗ А\D  8BGDrom_GTO GDrom_GTO 1 -	 s  == 0GDrom_GSlot1 0GDrom_GSlot2 0		 s  == 2 Б	G яtЗ АOD  рBG
Ieneth_GTO G
Ieneth_GTO 1 -	 s  == 0G
Ieneth_GSlot1 0G
Ieneth_GSlot2 0		 s  == 3 ‰G ШGЗ  ID ЂѓCG	Arano_GTO G	Arano_GTO 1 -	 s  == 0GArano_GSlot1 0GArano_GSlot2 0		s  0s  0Хfm_heavy s  1	SCTXщ;

 

Где мне сложно продублировать изменения )

Хотя в теории такое же можно сделать хекас-редактором

:kalian:

 

 

MEE - cейчас пробую.

Стражник нападает.

[buspoiler]

begin fm_guardscript

short state
short DoOnce
short wtower
short intower
short TowerSlot
short foundtower
short GuardType
short GuardRan
short BDay
short owned

short IsGuarding
short Followed
short GLCont
short GLContID
short cIsGuarding
short StayOutside

float GuardCounter

if ( GetTarget,player ) 
       StopCombat,player;)

endif

if ( DoOnce != 1 )
set StayOutside to 0
set cIsGuarding to 0
set intower to 0
set wtower to 0
set state to 0
set foundtower to 0
set IsGuarding to 0
set GuardCounter to 0
set Followed to 0
set DoOnce to 1
set GLCont to 0
set GLContID to 0

set GuardRan to Random, 100

if ( GuardRan < 25 )
	set GuardType to 1
elseif ( GuardRan < 45 )
	set GuardType to 2
elseif ( GuardRan < 60 )
	set GuardType to 3
elseif ( GuardRan < 75 )
	set GuardType to 4
elseif ( GuardRan < 85 )
	set GuardType to 5
elseif ( GuardRan < 92 )
	set GuardType to 6
elseif ( GuardRan < 98 )
	set GuardType to 7
elseif ( GuardRan <= 100 )
	set GuardType to 8
endif

if ( GuardType == 1 )
	SetLevel 5

	AddItem, "chitin cuirass" , 1
	AddItem, "chitin pauldron - left" , 1
	AddItem, "chitin pauldron - right" , 1
	AddItem, "chitin greaves" , 1
	AddItem, "chitin boots" , 1
	AddItem, "chitin guantlet - left" , 1
	AddItem, "chitin guantlet - right" , 1
	AddItem, "chitin spear" , 1
;		Additem, "chitin short bow", 1
;		Additem, "chitin arrow", 25

elseif ( GuardType == 2 )
	SetLevel 10
	AddSpell "fm_guardspell_10"

	AddItem, "iron_cuirass" , 1
	AddItem, "iron_pauldron_left" , 1
	AddItem, "iron_pauldron_right" , 1
	AddItem, "iron_greaves" , 1
	AddItem, "iron boots" , 1
	AddItem, "iron_gauntlet_left" , 1
	AddItem, "iron_gauntlet_right" , 1
	AddItem, "iron spear" , 1
;		Additem, "short bow", 1
;		Additem, "iron arrow", 25

elseif ( GuardType == 3 )
	SetLevel 15
	AddSpell "fm_guardspell_15"

	AddItem, "steel_cuirass" , 1
	AddItem, "steel_pauldron_left" , 1
	AddItem, "steel_pauldron_right" , 1
	AddItem, "steel_greaves" , 1
	AddItem, "steel_boots" , 1
	AddItem, "steel_gauntlet_left" , 1
	AddItem, "steel_gauntlet_right" , 1
	AddItem, "steel spear" , 1
;		Additem, "long bow", 1
;		Additem, "iron arrow", 25

elseif ( GuardType == 4 )
	SetLevel 20
	AddSpell "fm_guardspell_20"

	AddItem, "silver_cuirass" , 1
	AddItem, "imperial left pauldron" , 1
	AddItem, "imperial right pauldron" , 1
	AddItem, "imperial_greaves" , 1
	AddItem, "imperial boots" , 1
	AddItem, "imperial left gauntlet" , 1
	AddItem, "imperial right gauntlet" , 1
	AddItem, "silver spear" , 1
;		Additem, "long bow", 1
;		Additem, "steel arrow", 25

elseif ( GuardType == 5 )
	SetLevel 25
	AddSpell "fm_guardspell_25"

	AddItem, "bonemold_cuirass" , 1
	AddItem, "bonemold_armun-an_pauldron_l" , 1
	AddItem, "bonemold_armun-an_pauldron_r" , 1
	AddItem, "bonemold_greaves" , 1
	AddItem, "bonemold_boots" , 1
	AddItem, "bonemold_bracer_left" , 1
	AddItem, "bonemold_bracer_right" , 1
	AddItem, "silver spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "silver arrow", 25

elseif ( GuardType == 6 )
	SetLevel 30
	AddSpell "fm_guardspell_30"

	AddItem, "indoril cuirass" , 1
	AddItem, "indoril pauldron left" , 1
	AddItem, "indoril pauldron right" , 1
	AddItem, "indoril boots" , 1
	AddItem, "indoril left gauntlet" , 1
	AddItem, "indoril right gauntlet" , 1
	AddItem, "ebony spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "glass arrow", 25

elseif ( GuardType == 7 )
	SetLevel 40
	AddSpell "fm_guardspell_40"

	AddItem, "Helsethguard_cuirass" , 1
	AddItem, "Helsethguard_pauldron_left" , 1
	AddItem, "Helsethguard_pauldron_right" , 1
	AddItem, "Helsethguard_greaves" , 1
	AddItem, "Helsethguard_boots" , 1
	AddItem, "Helsethguard_gauntlet_left" , 1
	AddItem, "Helsethguard_gauntlet_right" , 1
	AddItem, "ebony spear" , 1
;		Additem, "bonemold long bow", 1
;		Additem, "daedric arrow", 25

elseif ( GuardType == 8 )
	SetLevel 50
	AddSpell "fm_guardspell_50"

	AddItem, "adamantium_cuirass" , 1
	AddItem, "adamantium_pauldron_left" , 1
	AddItem, "adamantium_pauldron_right" , 1
	AddItem, "adamantium_greaves" , 1
	AddItem, "adamantium boots" , 1
	AddItem, "adamantium_bracer_left" , 1
	AddItem, "adamantium_bracer_right" , 1
	AddItem, "daedric spear" , 1
;		Additem, "daedric long bow", 1
;		Additem, "daedric arrow", 25

endif

AddSpell "fm_guardspell_base"

set BDay to DaysPassed
set owned to 0

endif

if ( GetDisabled == 1 )
return
endif

if ( owned == 0 )
if ( bday < DaysPassed )
	Disable
endif
endif

if ( cIsGuarding != 0 )
set IsGuarding to 0
set cIsGuarding to 0
set GuardCounter to 0.0
if ( GetItemCount "fm_heavy" > 0 )
	RemoveItem, "fm_heavy", 1
	StartScript "fm_c_EquipMelee"
endif
return
endif

if ( IsGuarding == 1 )

if ( GuardCounter >= 10 )

	if ( cIsGuarding != 0 )
		set IsGuarding to 0
		set cIsGuarding to 0
		set GuardCounter to 0.0
		if ( GetItemCount "fm_heavy" > 0 )
			RemoveItem, "fm_heavy", 1
			StartScript "fm_c_EquipMelee"
		endif
		return
	endif

	if ( GetWeaponDrawn == 0 )
		AiWander, 250,0,0,0,0,0,0,0,0
	endif

	if ( GetItemCount "fm_heavy" > 0 )
		StartScript "fm_c_EquipMelee"
	endif

	while ( GetItemCount "fm_heavy" > 0 )
		RemoveItem, "fm_heavy" , 1
	endwhile

	set GuardCounter to 0.0
	set Followed to 0

elseif ( GuardCounter >= 5 )

	if ( Followed == 0 )

		if ( cIsGuarding != 0 )
			set IsGuarding to 0
			set cIsGuarding to 0
			set GuardCounter to 0.0
			if ( GetItemCount "fm_heavy" > 0 )
				RemoveItem, "fm_heavy", 1
				StartScript "fm_c_EquipMelee"
			endif
			return
		endif

		set Followed to 1

		if ( GetWeaponDrawn == 0 )
			AiFollow, Player, 0,0,0,0
			AddItem, "fm_heavy" , 1
			StartScript "fm_c_EquipBow"
		endif				

	else
		if ( cIsGuarding == 0 )
			if ( GetItemCount "fm_heavy" > 0 )
				StartScript "fm_c_Refill"
			endif
		else
			set IsGuarding to 0
			set cIsGuarding to 0
			set GuardCounter to 0.0
			if ( GetItemCount "fm_heavy" > 0 )
				RemoveItem, "fm_heavy", 1
				StartScript "fm_c_EquipMelee"
			endif
			return
		endif
		set GuardCounter to ( GuardCounter + GetSecondsPassed )
	endif

else
;		if ( cIsGuarding != 0 )
;			set IsGuarding to 0
;			set cIsGuarding to 0
;			set GuardCounter to 0.0
;			if ( GetItemCount "fm_heavy" > 0 )
;				RemoveItem, "fm_heavy", 1
;				StartScript "fm_c_EquipMelee"
;			endif
;			return
;		endif
	set GuardCounter to ( GuardCounter + GetSecondsPassed )
endif

endif

if ( cIsGuarding == 1 )
set cIsGuarding to 0
endif

if ( GLCont == 0 )
if ( GetDistance, fm_cont_arano < 2000 )
	set Arano_GuardLevel to ( Arano_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 1
elseif ( GetDistance, fm_cont_ieneth < 2000 )
	set Ieneth_GuardLevel to ( Ieneth_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 2
elseif ( GetDistance, fm_cont_drom < 2000 )
	set Drom_GuardLevel to ( Drom_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 3
elseif ( GetDistance, fm_cont_new < 2000 )
	set New_GuardLevel to ( New_GuardLevel + ( GuardType ) )
	set GLCont to 1
	set GLContID to 4
endif
else
if ( GLContID == 1 )
	if ( GetDistance, fm_cont_arano >= 2000 )
		set Arano_GuardLevel to ( Arano_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 2 )
	if ( GetDistance, fm_cont_ieneth >= 2000 )
		set Ieneth_GuardLevel to ( Ieneth_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 3 )
	if ( GetDistance, fm_cont_drom >= 2000 )
		set Drom_GuardLevel to ( Drom_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
elseif ( GLContID == 4 )
	if ( GetDistance, fm_cont_new>= 2000 )
		set New_GuardLevel to ( New_GuardLevel - ( GuardType ) )
		set GLCont to 0
	endif
endif
endif

if ( state == 1 )

if ( GetDistance, fm_cont_drom < 3000 )
	if ( fm_cont_drom.tower == 1 )
		if ( Drom_GTO < 2 )

			if ( Drom_GSlot1 == 0 )
				set TowerSlot to 0
				set Drom_GSlot1 to 1
			else
				set TowerSlot to 1
				set Drom_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 1
			set Drom_GTO to ( Drom_GTO + 1 )
			AiTravel 47503, -59819, 902
		else
			set foundtower to 1
			MessageBox "Ближайшая Сторожевая башня не может вместить в себя больше охранников"
		endif
	endif

elseif ( GetDistance, fm_cont_ieneth < 3000 )
	if ( fm_cont_ieneth.tower == 1 )
		if ( Ieneth_GTO < 2 )

			if ( Ieneth_GSlot1 == 0 )
				set TowerSlot to 0
				set Ieneth_GSlot1 to 1
			else
				set TowerSlot to 1
				set Ieneth_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 2
			set Ieneth_GTO to ( Ieneth_GTO + 1 )
			AiTravel 35267, -62677, 831
		else
			set foundtower to 1
			MessageBox "Ближайшая Сторожевая башня не может вместить в себя больше охранников"
		endif
	endif

elseif ( GetDistance, fm_cont_arano < 3000 )
	if ( fm_cont_arano.tower == 1 )
		if ( Arano_GTO < 2 )

			if ( Arano_GSlot1 == 0 )
				set TowerSlot to 0
				set Arano_GSlot1 to 1
			else
				set TowerSlot to 1
				set Arano_GSlot2 to 1
			endif

			set foundtower to 1
			set wtower to 3
			set Arano_GTO to ( Arano_GTO + 1 )
			AiTravel 36141, -51108, 804
		else
			set foundtower to 1
			MessageBox "Ближайшая Сторожевая башня не может вместить в себя больше охранников"
		endif
	endif
endif
if ( foundtower == 0 )
	MessageBox "Поблизости нет Сторожевых башен"     
endif
set foundtower to 0
set state to 0
endif

if ( wtower != 0 )
if ( intower != 1 )
	if ( GetAiPackageDone == 1 )

		if ( wtower == 1 )
			if ( TowerSlot == 0 )
				position 47187, -60049, 1682, 97
			else
				position 47129, -59952, 1682, 349
			endif
		elseif ( wtower == 2 )
			if ( TowerSlot == 0 )
				position 34988, -62475, 1615, 57
			else
				position 34930, -62580, 1615, 189
			endif
		elseif ( wtower == 3 )
			if ( TowerSlot == 0 )
				position 36344, -51083, 1463, 200
			else
				position 36338, -50958, 1463, 333
			endif
		endif

		set intower to 1
		AddItem, "fm_heavy", 1
		AiFollow, player, 1,1,1,1

		; Levelled Section (Merged Scripts)

		if ( GetLevel == 5 )

			removeitem, "chitin spear",1
			additem, "chitin short bow",1
			additem, "chitin arrow",25

		elseif ( GetLevel == 10 )

			removeitem,"iron spear",1
			additem, "short bow",1
			additem, "iron arrow",25

		elseif ( GetLevel == 15 )

			removeitem,"steel spear",1
			additem, "long bow",1
			additem, "iron arrow",25

		elseif ( GetLevel == 20 )

			removeitem,"silver spear",1
			additem, "long bow",1
			additem, "steel arrow",25

		elseif ( GetLevel == 25 )

			removeitem,"silver spear",1
			additem, "bonemold long bow",1
			additem, "silver arrow",25

		elseif ( GetLevel == 30 )

			removeitem,"ebony spear",1
			additem, "bonemold long bow",1
			additem, "glass arrow",25

		elseif ( GetLevel == 40 )

			removeitem,"ebony spear",1
			additem, "bonemold long bow",1
			additem, "daedric arrow",25

		elseif ( GetLevel == 50 )

			removeitem,"daedric spear",1
			additem, "daedric long bow",1
			additem, "daedric arrow",25

		endif
	endif	
endif
endif

; Give the guard an infinite supply of arrows
; And a constantly renewing bow (so it doesn't brake)

if ( intower == 1 )

; Another Leveled Area
if ( GetLevel == 5 )

	if ( GetItemCount "chitin arrow" < 1 )
		removeitem, "chitin short bow",1
		additem, "chitin short bow",1
		additem, "chitin arrow",25
	endif

elseif ( GetLevel == 10 )

	if ( GetItemCount "iron arrow" < 1 )
		removeitem, "short bow",1
		additem, "short bow",1
		additem, "iron arrow",25
	endif

elseif ( GetLevel == 15 )

	if ( GetItemCount "iron arrow" < 1 )
		removeitem, "long bow",1
		additem, "long bow",1
		additem, "iron arrow",25
	endif

elseif ( GetLevel == 20 )

	if ( GetItemCount "steel arrow" < 1 )
		removeitem, "long bow",1
		additem, "long bow",1
		additem, "steel arrow",25
	endif

elseif ( GetLevel == 25 )

	if ( GetItemCount "silver arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "silver arrow",25
	endif

elseif ( GetLevel == 30 )

	if ( GetItemCount "glass arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "glass arrow",25
	endif

elseif ( GetLevel == 40 )

	if ( GetItemCount "daedric arrow" < 1 )
		removeitem, "bonemold long bow",1
		additem, "bonemold long bow",1
		additem, "daedric arrow",25
	endif

elseif ( GetLevel == 50 )

	if ( GetItemCount "daedric arrow" < 1 )
		removeitem, "daedric long bow",1
		additem, "daedric long bow",1
		additem, "daedric arrow",25
	endif

endif
endif

if ( state == 2 )
set intower to 0

if ( GetLevel == 5 )

	additem, "chitin spear",1
	removeitem, "chitin short bow",1
	while ( GetItemCount, "chitin arrow" > 0 )
		removeitem, "chitin arrow",1
	endwhile

elseif ( GetLevel == 10 )

	additem, "iron spear",1
	removeitem, "short bow",1
	while ( GetItemCount, "iron arrow" > 0 )
		removeitem, "iron arrow",1
	endwhile

elseif ( GetLevel == 15 )

	additem, "steel spear",1
	removeitem, "long bow",1
	while ( GetItemCount, "steel arrow" > 0 )
		removeitem, "steel arrow",1
	endwhile

elseif ( GetLevel == 20 )

	additem, "silver spear",1
	removeitem, "long bow",1
	while ( GetItemCount, "steel arrow" > 0 )
		removeitem, "steel arrow",1
	endwhile

elseif ( GetLevel == 25 )

	additem, "silver spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "silver arrow" > 0 )
		removeitem, "silver arrow",1
	endwhile

elseif ( GetLevel == 30 )

	additem, "ebony spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "glass arrow" > 0 )
		removeitem, "glass arrow",1
	endwhile

elseif ( GetLevel == 40 )

	additem, "ebony spear",1
	removeitem, "bonemold long bow",1
	while ( GetItemCount, "daedric arrow" > 0 )
		removeitem, "daedric arrow",1
	endwhile

elseif ( GetLevel == 50 )

	additem, "daedric spear",1
	removeitem, "daedric long bow",1
	while ( GetItemCount, "daedric arrow" > 0 )
		removeitem, "daedric arrow",1
	endwhile

endif 

if ( wtower == 1 )

	position 47409, -59804, 883, 46
	set Drom_GTO to ( Drom_GTO - 1 )
	if ( TowerSlot == 0 )
		set Drom_GSlot1 to 0
	else
		set Drom_GSlot2 to 0
	endif

elseif ( wtower == 2 )

	position 35265, -62719, 831, 120
	set Ieneth_GTO to ( Ieneth_GTO - 1 )
	if ( TowerSlot == 0 )
		set Ieneth_GSlot1 to 0
	else
		set Ieneth_GSlot2 to 0
	endif

elseif ( wtower == 3 )

	position 35977, -51160, 804, 263
	set Arano_GTO to ( Arano_GTO - 1 )
	if ( TowerSlot == 0 )
		set Arano_GSlot1 to 0
	else
		set Arano_GSlot2 to 0
	endif

endif

set wtower to 0
set state to 0
RemoveItem, "fm_heavy",1
set IsGuarding to 1

endif

end

[/buspoiler]

Скрипт вбит через MEE.

if ( GetTarget,player ) 
       StopCombat,player;)

endif

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

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

1) StopCombat, player ;)

2) Поставь сразу после SetFight 30

3) Попробуй отредактировать и пересохранить в Notepad++ - любопытно, что получится.

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

 

1) StopCombat, player ;)

2) Поставь сразу после SetFight 30

3) Попробуй отредактировать и пересохранить в Notepad++ - любопытно, что получится.

if ( GetTarget Player == 1) 
       setfight 30
       messageBox"It works"
       StopCombat,player

В if не заходит.

С запятой - тот же эффект.

Notepad++ у меня нет, но изменения отобразились даже в CS.

Еще раз проверил - на стражнике висит именно этот скрипт, стражника тоже не перепутал.

GetTarget - рабочая.

Над локализацией мода работал кто-то с фулла?

messageBox"Script works"
if ( GetTarget Player == 1) 
       setfight 30
       messageBox"It works"
       StopCombat,player

endif

Первый messageBox не срабатывает.

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

 

UPD: Скрипт работает при нападении на другого NPC, но не на самого охранника.

По совету Муна сделал:

begin fm_guardscript
short doonce
if ( doonce == 0 )
     startscript red_guardscript
     set doonce to 1
endif
if ( GetTarget, player )
     StopCombat;
endif
if ( OnPCHitMe)
     StopCombat;
endif
end

Где red_guardscipt - начальный скрипт.

Вызывает сомнения doonce.

С ним начальный скрипт вызовется только 1 раз за игру?

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

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

Каждый фрейм. Разумеется, если объект рядом.

Вызывает сомнения doonce.

Да. На каждого стражника один раз. А зачем перегружать комп?

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

Да. На каждого стражника один раз. А зачем перегружать комп?

Там есть вызов скрипта, восполняющий им запас стрел при стрельбе с башни.

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

Вы про этот блок?

 

if ( intower == 1 )

; Another Leveled Area
       if ( GetLevel == 5 )

               if ( GetItemCount "chitin arrow" < 1 )
                       removeitem, "chitin short bow",1
                       additem, "chitin short bow",1
                       additem, "chitin arrow",25
               endif

       elseif ( GetLevel == 10 )

               if ( GetItemCount "iron arrow" < 1 )
                       removeitem, "short bow",1
                       additem, "short bow",1
                       additem, "iron arrow",25
               endif

       elseif ( GetLevel == 15 )

               if ( GetItemCount "iron arrow" < 1 )
                       removeitem, "long bow",1
                       additem, "long bow",1
                       additem, "iron arrow",25
               endif

       elseif ( GetLevel == 20 )

               if ( GetItemCount "steel arrow" < 1 )
                       removeitem, "long bow",1
                       additem, "long bow",1
                       additem, "steel arrow",25
               endif

       elseif ( GetLevel == 25 )

               if ( GetItemCount "silver arrow" < 1 )
                       removeitem, "bonemold long bow",1
                       additem, "bonemold long bow",1
                       additem, "silver arrow",25
               endif

       elseif ( GetLevel == 30 )

               if ( GetItemCount "glass arrow" < 1 )
                       removeitem, "bonemold long bow",1
                       additem, "bonemold long bow",1
                       additem, "glass arrow",25
               endif

       elseif ( GetLevel == 40 )

               if ( GetItemCount "daedric arrow" < 1 )
                       removeitem, "bonemold long bow",1
                       additem, "bonemold long bow",1
                       additem, "daedric arrow",25
               endif

       elseif ( GetLevel == 50 )

               if ( GetItemCount "daedric arrow" < 1 )
                       removeitem, "daedric long bow",1
                       additem, "daedric long bow",1
                       additem, "daedric arrow",25
               endif

       endif
endif

 

 

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

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

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

begin fm_guardscript ;Начало скрипта
short doonce ; объявление переменной. при первом запуске значение равно 0
if ( doonce == 0 ) ; если скрипт запущен впервые
     startscript red_guardscript ; запустить основной скрипт
     set doonce to 1 ; отметить, что скрипт уже был запущен
endif ;
if ( GetTarget, player ) ; если игрок выбран NPC для атаки
     StopCombat; остановить бой
endif ;
if ( OnPCHitMe) ; Если игрок ударил NPC
     StopCombat; остановить бой
endif ;
end ; Конец скрипта

Допустим, скрипт запустился 1 раз, когда стражника нет в башне.

doonce стало равно 1.

Т.е., если стражник будет в башне, то скрипт на обновление стрел не выполнится.

Это если переменная не инициализируется заново при запуске скрипта.

Если она каждый раз становится равна 0, тогда doonce не имеет смысла, т.к. при следующем запуске счетчик использования скриптов обнуляется.

:unsure:

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

Допустим, скрипт запустился 1 раз, когда стражника нет в башне.

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

Если обновление стрел -- блок приведенный мной выше, то оно в основном скрипте. А он запущен. Команды stopscript нет. Скрипт не остановится.

:facepalm2:

 

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

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

Если обновление стрел -- блок приведенный мной выше, то оно в основном скрипте. А он запущен. Команды stopscript нет. Скрипт не остановится.

:facepalm2:

 

:scratch:

Понятно)

Осталось понять, почему StopCombat не работает даже в таком виде:

 

begin fm_guardscript
short doonce
if ( doonce == 0 )
     startscript red_guardscript
     set doonce to 1
endif
if ( GetTarget, player )
     StopComba, playert;
endif
if ( OnPCHitMe)
     StopCombat, player;
endif
end

 

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

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

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

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

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

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

Войти

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

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

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