Помогите с написанием скрипта

Waltan

Пользователь
23 Авг 2014
19
0
1
17
Реакции
0 0 0
#1
В предмете, в событии его использования, перед "SpendCharge" {} вызываю такой скрипт:

Код:
"RunScript"
		{
		"Target" 					"CASTER"
		"ScriptFile" 				"ammo.lua"
		"Function"					"empty_weapon"
		}
Код:
function empty_weapon(item)

if item:GetCurrentCharges()-1 == 0 then
RemoveItem(item_longrange_rifle)
AddItem(item_longrange_rifle_empty)
end

end
Вот какая ошибка в игре:
proxy.php?image=http%3A%2F%2Fpuu.sh%2Fb8HJW%2F9b9633b3e2.png&hash=7e006876e688183b4681d96195d34cf3
 
Последнее редактирование модератором:

kzmzhz

Новичок
26 Авг 2014
4
0
1
17
Реакции
0 0 0
#2
Код:
function empty_weapon(keys)
item=keys.ability
if item:GetCurrentCharges()-1 == 0 then
RemoveItem(item_longrange_rifle)
AddItem(item_longrange_rifle_empty)
end

end
[code]

[/pre]
 

Waltan

Пользователь
23 Авг 2014
19
0
1
17
Реакции
0 0 0
#3
[quote author=kzmzhz link=topic=32.msg130#msg130 date=1409071493]
Код:
function empty_weapon(keys)
item=keys.ability
if item:GetCurrentCharges()-1 == 0 then
RemoveItem(item_longrange_rifle)
AddItem(item_longrange_rifle_empty)
end

end
[code]

[/pre]
[/quote]

proxy.php?image=http%3A%2F%2Fpuu.sh%2Fb8Nti%2F33433d081c.png&hash=bc4af0238fa7d81fb9142a03863398d5


тоже самое, если поменять местами

proxy.php?image=http%3A%2F%2Fpuu.sh%2Fb8NCL%2F45a6a94ff5.png&hash=85c9d51eefea632fe78352918d0fde1f
 

doter.ua

Продвинутый
17 Авг 2014
280
4
18
24
UA
Реакции
4 0 0
#4
[quote author=Waltan link=topic=32.msg129#msg129 date=1409067338]
В предмете, в событии его использования, перед "SpendCharge" {} вызываю такой скрипт:

Код:
"RunScript"
		{
		"Target" 					"CASTER"
		"ScriptFile" 				"ammo.lua"
		"Function"					"empty_weapon"
		}
Код:
function empty_weapon(item)

if item:GetCurrentCharges()-1 == 0 then
RemoveItem(item_longrange_rifle)
AddItem(item_longrange_rifle_empty)
end

end
Вот какая ошибка в игре:
proxy.php?image=http%3A%2F%2Fpuu.sh%2Fb8HJW%2F9b9633b3e2.png&hash=7e006876e688183b4681d96195d34cf3

[/quote]

Распечатай содержимое таблицы и посмотри че там есть. (передается в аргументах функции) у гамбургеров есть либа для этого: require("util")
вот например https://github.com/LordSk/IMW/blob/master/scripts/vscripts/util.lua

Ремув и адед должны применятся к НПС: local npc = ... npc:AddItem ...
 
Последнее редактирование модератором:

Waltan

Пользователь
23 Авг 2014
19
0
1
17
Реакции
0 0 0
#5
Ремув и адед должны применятся к НПС: local npc = ... npc:AddItem ...
НПС я могу получить через keys.caster
Я поправил код, теперь ошибок не появляется, но предмет не создается.
Код:
function empty_weapon(keys)

item = keys.ability
caster = keys.caster

if item:GetCurrentCharges()-1 == 0 then


caster:AddItem(item_longrange_rifle_empty)
caster:RemoveItem(item_longrange_rifle)

end

end
 
Последнее редактирование модератором:
Реклама:

doter.ua

Продвинутый
17 Авг 2014
280
4
18
24
UA
Реакции
4 0 0
#6
[quote author=Waltan link=topic=32.msg136#msg136 date=1409073499]
НПС я могу получить через keys.caster
Я поправил код, теперь ошибок не появляется, но предмет не создается.
Код:
function empty_weapon(keys)

item = keys.ability
caster = keys.caster

if item:GetCurrentCharges()-1 == 0 then


caster:AddItem(item_longrange_rifle_empty)
caster:RemoveItem(item_longrange_rifle)

end

end
[/quote]

выведи в консоль значение зарядов, мб там не совсем то, что ожидается.
И еще что это за запись: -1 == 0, не легче сделать == 1 ?
 

Waltan

Пользователь
23 Авг 2014
19
0
1
17
Реакции
0 0 0
#7
выведи в консоль значение зарядов, мб там не совсем то, что ожидается.
И еще что это за запись: -1 == 0, не легче сделать == 1 ?
-1 написал, потому что вызывал скрипт до "SpendCharge" {}, но теперь неважно. Отнимание заряда я тоже сделал через скрипт и даже при каждом выстреле выводил их количество в консоль:

Код:
function empty_weapon(keys)

item = keys.ability
caster = keys.caster

item:SetCurrentCharges(item:GetCurrentCharges()-1)
print(item:GetCurrentCharges())

if item:GetCurrentCharges() == 0 then
print("weapon is empty")

caster:RemoveItem(item_longrange_rifle)
print("item removed")

end
end
В результате:
proxy.php?image=http%3A%2F%2Fpuu.sh%2Fb8PG1%2F9e56bc025f.png&hash=67f873f8619e1dab5bc5f0771e2700b0
 
Последнее редактирование модератором:

Waltan

Пользователь
23 Авг 2014
19
0
1
17
Реакции
0 0 0
#8
Так. Вроде разобрался. Скрипт обращается к предмету не через имя (item_blink) а через:

Код:
[VScript]: table: 0x035a61e8
Следовательно, чтобы удалить предмет, надо обращаться к нему через keys.ability
Код:
item = keys.ability
caster:RemoveItem(item)
Теперь надо понять, как добавить другой предмет.
 

doter.ua

Продвинутый
17 Авг 2014
280
4
18
24
UA
Реакции
4 0 0
#9
[quote author=Waltan link=topic=32.msg141#msg141 date=1409076345]
Так. Вроде разобрался. Скрипт обращается к предмету не через имя (item_blink) а через:

Код:
[VScript]: table: 0x035a61e8
Следовательно, чтобы удалить предмет, надо обращаться к нему через keys.ability
Код:
item = keys.ability
caster:RemoveItem(item)
Теперь надо понять, как добавить другой предмет.
[/quote]
Потому, что в АПИ так и написано: RemoveItem(handle a) хэндл - указатель, если бы был int, тогда это чей-то индекс. Добавление тоже через хендлер: handle CreateItem(string item_name, handle owner, handle owner) можно так: хендлер = CreateItem(item_longrange_rifle, nil, nil) а потом АддИтем (хендлер)
 

Waltan

Пользователь
23 Авг 2014
19
0
1
17
Реакции
0 0 0
#10
[quote author=doter.ua link=topic=32.msg142#msg142 date=1409077472]
Потому, что в АПИ так и написано: RemoveItem(handle a) хэндл - указатель, если бы был int, тогда это чей-то индекс. Добавление тоже через хендлер: handle CreateItem(string item_name, handle owner, handle owner) можно так: хендлер = CreateItem(item_longrange_rifle, nil, nil) а потом АддИтем (хендлер)
[/quote]

сделал, не забывайте про кавычки!
Код:
test = CreateItem("item_oblivion_staff", nil, nil)
caster:AddItem(test)
Теперь все работает. Спасибо большое.
 
Последнее редактирование модератором:
Реклама:
Реклама: