CustomGames.ru - Dota 2 пользовательские игры

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

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Waltan

  • 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

Вот какая ошибка в игре:

Оффлайн kzmzhz

  • 4
  • Мощь: 0
Re: Помогите с написанием скрипта
« Ответ #1 : 26-08-2014, 16:44:53 »
Код
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]
« Последнее редактирование: 26-08-2014, 16:51:24 от kzmzhz »

Оффлайн Waltan

  • 19
  • Мощь: 0
Re: Помогите с написанием скрипта
« Ответ #2 : 26-08-2014, 17:00:47 »
Код
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]



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

« Последнее редактирование: 26-08-2014, 17:02:49 от Waltan »

Оффлайн doter.ua

  • Друзья CG
  • 272
  • Мощь: 1
Re: Помогите с написанием скрипта
« Ответ #3 : 26-08-2014, 17:08:43 »
В предмете, в событии его использования, перед "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

Вот какая ошибка в игре:


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

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

[свернуть]

Оффлайн Waltan

  • 19
  • Мощь: 0
Re: Помогите с написанием скрипта
« Ответ #4 : 26-08-2014, 17:18:19 »
Ремув и адед должны применятся к НПС:  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

  • Друзья CG
  • 272
  • Мощь: 1
Re: Помогите с написанием скрипта
« Ответ #5 : 26-08-2014, 17:26:18 »
НПС я могу получить через 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

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

[свернуть]

Оффлайн Waltan

  • 19
  • Мощь: 0
Re: Помогите с написанием скрипта
« Ответ #6 : 26-08-2014, 17:32:03 »
выведи в консоль значение зарядов, мб там не совсем то, что ожидается.
И еще что это за запись: -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

В результате:



Оффлайн Waltan

  • 19
  • Мощь: 0
Re: Помогите с написанием скрипта
« Ответ #7 : 26-08-2014, 18:05:45 »
Так. Вроде разобрался. Скрипт обращается к предмету не через имя (item_blink) а через:

Код
[VScript]: table: 0x035a61e8

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

Теперь надо понять, как добавить другой предмет.
« Последнее редактирование: 26-08-2014, 18:09:11 от Waltan »

Оффлайн doter.ua

  • Друзья CG
  • 272
  • Мощь: 1
Re: Помогите с написанием скрипта
« Ответ #8 : 26-08-2014, 18:24:32 »
Так. Вроде разобрался. Скрипт обращается к предмету не через имя (item_blink) а через:

Код
[VScript]: table: 0x035a61e8

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

Теперь надо понять, как добавить другой предмет.
Потому, что в АПИ так и написано: RemoveItem(handle a)  хэндл - указатель, если бы был int, тогда это чей-то индекс. Добавление тоже через хендлер: handle CreateItem(string item_name, handle owner, handle owner) можно так:  хендлер = CreateItem(item_longrange_rifle, nil, nil) а потом АддИтем (хендлер)
гайды
сурпрайз mthfckr :D

[свернуть]

Оффлайн Waltan

  • 19
  • Мощь: 0
Re: Помогите с написанием скрипта
« Ответ #9 : 26-08-2014, 19:36:48 »
Потому, что в АПИ так и написано: RemoveItem(handle a)  хэндл - указатель, если бы был int, тогда это чей-то индекс. Добавление тоже через хендлер: handle CreateItem(string item_name, handle owner, handle owner) можно так:  хендлер = CreateItem(item_longrange_rifle, nil, nil) а потом АддИтем (хендлер)

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

Теперь все работает. Спасибо большое.
« Последнее редактирование: 26-08-2014, 19:46:42 от Waltan »