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

Waltan

Пользователь
23 Авг 2014
19
0
В предмете, в событии его использования, перед "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

Вот какая ошибка в игре:
9b9633b3e2.png
 
Последнее редактирование модератором:

kzmzhz

Новичок
26 Авг 2014
4
0
Код:
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
[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]

33433d081c.png


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

45a6a94ff5.png
 

doter.ua

Продвинутый
17 Авг 2014
280
5
[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

Вот какая ошибка в игре:
9b9633b3e2.png

[/quote]

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

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

Waltan

Пользователь
23 Авг 2014
19
0
Ремув и адед должны применятся к НПС: 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
5
[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 == 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

В результате:
9e56bc025f.png
 
Последнее редактирование модератором:

Waltan

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

Код:
[VScript]: table: 0x035a61e8

Следовательно, чтобы удалить предмет, надо обращаться к нему через keys.ability
Код:
item = keys.ability
caster:RemoveItem(item)

Теперь надо понять, как добавить другой предмет.
 

doter.ua

Продвинутый
17 Авг 2014
280
5
[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
[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)

Теперь все работает. Спасибо большое.
 
Последнее редактирование модератором:
Реклама: