Добавил персонажу спелл на вызов крыльев и способность летать, причем если крылья не надеты, то перс летать не может. Все это работает, как и задумано. Но есть одна проблемка. Скрипт, добавляющий крылья и абилку к полетам, должен также осматривать слот хвоста и, если там что-то было надето, то возвращать обратно, когда крылья снимаются. Однако, предмет, который был на слоте хвоста до того, как оделись крылья, обратно НЕ надевается, когда спелл снимает крылья. Вопрос в том, чтобы заставить скрипт одевать обратно на слот хвоста то, что было на нем до крыльев.
Вот, собственно, сам скрипт:
[hide]
SCN aaaWingsBodyScript
ref DemonEquippedTail ;сохраняет все, что надето на слот хвоста
short EquippedSlotsStored ;сохраняет один раз надетое снаряжение
BEGIN ScriptEffectStart
set DemonEquippedTail to 0
set EquippedSlotsStored to 0
;Добавляет/убирает крылья демона, способность летать и то, что было надето на слот хвоста
If (Player.GetItemCount aaaDemonWingsTail == 0)
If (Player.GetItemCount aaaDemonWingsTail == 0)
;Сохраняет то, что надето на слот хвоста
set DemonEquippedTail to GetEquippedObject 15 ;слот хвоста
set EquippedSlotsStored to 1
Player.AddItem aaaDemonWingsTail 1 ;добавляет крылья в инвентарь
Player.EquipItem aaaDemonWingsTail ;надевает крылья
EndIf
Player.AddSpell aaaDemonFlight ;добавляет способность летать
Else
If (Player.GetItemCount aaaDemonWingsTail == 1)
;Возвращает то, что было снято перед тем, как были надеты крылья
Player.UnEquipItem aaaDemonWingsTail ;снимает крылья
Player.RemoveItem aaaDemonWingsTail 1 ;удаляет крылья из инвентаря
If EquippedSlotsStored == 1
If DemonEquippedTail != 0
Player.EquipItem DemonEquippedTail ;одевает слот хвоста
EndIf
EndIf
set EquippedSlotsStored to 0
set DemonEquippedTail to 0
EndIf
Player.RemoveSpell aaaDemonFlight ;удаляет способность летать
EndIf
END
[/hide]
Вот пример на полное раздевание перса , скрипт работает как абилити (в течении некот времени:
Нетрудно далее в массиве оставить то, что Вам нужно, хоть один хвост
[hide]
Equipment Slot IDs*
0: head
1: hair
2: upper body
3: lower body
4: hand
5: foot
6: right ring
7: left ring
8: amulet
9: weapon
10: back weapon
11: side weapon
12: quiver
13: shield
14: torch
15: tail
16: weapon
17: ammo
18: lower and upper body
19: lower and upper and foot
20: lower, upper, hand and foot
21: lower, upper, and hand
22: upper and hand
scn aadkzzFFFsp
ref se
ref temp
array_var nude
int nidx
int ntotal
short ic
BEGIN ScriptEffectStart
let ntotal:=ar_size nude
if ntotal<0
let nude:=ar_construct array
endif
if ntotal>0
let nude:=ar_null
endif
set temp to se.GetEquippedObject 2
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 3
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 4
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 5
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 9
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 10
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 11
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 12
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 13
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 15
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 16
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 17
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 18
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 19
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 20
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 21
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 22
if temp
let nude[ar_size nude]:=temp
endif
set temp to se.GetEquippedObject 1
if temp
let nude[ar_size nude]:=temp
endif
let ntotal:=ar_size nude
if ntotal>0
set nidx to 0
while(nidx<ntotal)
let temp:=nude[nidx]
se.unequipitemns temp =========полное раздевание(или то чего Вам надо.см.выше что вносится в массив
set nidx to nidx+1
loop
endif
END
begin scripteffectupdate
if =============================какое-то условие(таймер например - полное одевание
if ntotal>0
set nidx to 0
while(nidx<ntotal)
let temp:=nude[nidx]
set ic to player.getitemcount temp
if ic>0
se.equipitemns temp
endif
set nidx to nidx+1
loop
let nude:=ar_null
endif
se.removespellns aadkzzNude
endif================================
end [/hide]