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

Iron Talon - lua

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

Оффлайн Danis

  • Продвинутый
  • 278
  • Мощь: 2
Iron Talon - lua
« : 24-08-2016, 11:51:50 »
как сделать так чтобы на луа не выходила ошибка при касте на дерево или крипа, как не пробовал и не пытался все время ошибка
попытка первая
Код
if IsServer() then
if self:IsCooldownReady() then
local target = self:GetCursorTarget()

if  target:IsStanding() == nil then
self:StartCooldown(self:GetCooldown(self:GetLevel()))
target:SetHealth(target:GetHealth() / 2)
end

if target:IsCreep() == nil then
self:StartCooldown(self:GetCooldown(self:GetLevel()) / 4)
target:CutDown(self:GetCaster():GetTeamNumber())
end
end
end
[свернуть]
попытка вторая
Код
if IsServer() then
if self:IsCooldownReady() then
local target = self:GetCursorTarget()

if  target:IsCreep() then
self:StartCooldown(self:GetCooldown(self:GetLevel()))
target:SetHealth(target:GetHealth() / 2)
end

if target:IsStanding() then
self:StartCooldown(self:GetCooldown(self:GetLevel()) / 4)
target:CutDown(self:GetCaster():GetTeamNumber())
end
end
end
[свернуть]
попытка третья
Код
if IsServer() then
if self:IsCooldownReady() then
local target = self:GetCursorTarget()

if  target:IsCreep() and not target:IsStanding() then
self:StartCooldown(self:GetCooldown(self:GetLevel()))
target:SetHealth(target:GetHealth() / 2)
end

if target:IsStanding() and not target:IsCreep() then
self:StartCooldown(self:GetCooldown(self:GetLevel()) / 4)
target:CutDown(self:GetCaster():GetTeamNumber())
end
end
end
[свернуть]
И в конце концов выходит эта ошибка
если юзаю на крипа
Код
[ W VScript        ]: Script Runtime Error: ..._addons\arena\scripts\vscripts\items\item_light_pike.lua:17: attempt to call method 'IsStanding' (a nil value)
[свернуть]
если на дерево
Код
[ W VScript        ]: Script Runtime Error: ..._addons\arena\scripts\vscripts\items\item_light_pike.lua:22: attempt to call method 'IsCreep' (a nil value)
[свернуть]
[свернуть]
Я уже правда не знаю как это исправить, если кто знает расскажите?
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Iron Talon - lua
« Ответ #1 : 24-08-2016, 12:02:07 »
Прочти эту старенькую статью. Затем вновь подумай.

Если не допрешь после прочтения, глянь сюда
boolean это true или false. Кроме того IsStanding для CDOTA_MapTree, а не для CBaseEntity. А IsCreep для CDOTA_BaseNPC, а не CDOTA_MapTree
[свернуть]
« Последнее редактирование: 24-08-2016, 12:10:35 от Илья »

Оффлайн I_GRIN_I

  • Продвинутый
  • 616
  • Мощь: 11
  • Научиться бы скриптить...
Re: Iron Talon - lua
« Ответ #2 : 24-08-2016, 18:19:01 »
Danis, нужно было просто использовать оператор elseif в место второго if

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Iron Talon - lua
« Ответ #3 : 24-08-2016, 18:32:27 »
Если будешь ему готовые ответы давать, он так и не научится думать.

Оффлайн Danis

  • Продвинутый
  • 278
  • Мощь: 2
Re: Iron Talon - lua
« Ответ #4 : 24-08-2016, 18:36:12 »
эм, я elseif и так пробовал, не работает, выдает туже самую ошибку  :-\
попытка четвертая
Код
if IsServer() then
if self:IsCooldownReady() then
local target = self:GetCursorTarget()

if  target:IsCreep() then
self:StartCooldown(self:GetCooldown(self:GetLevel()))
target:SetHealth(target:GetHealth() / 2)
                       elseif target:IsStanding() then
self:StartCooldown(self:GetCooldown(self:GetLevel()) / 4)
target:CutDown(self:GetCaster():GetTeamNumber())
end
end
end
[свернуть]
« Последнее редактирование: 24-08-2016, 18:38:56 от Danis »
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн I_GRIN_I

  • Продвинутый
  • 616
  • Мощь: 11
  • Научиться бы скриптить...
Re: Iron Talon - lua
« Ответ #5 : 24-08-2016, 19:09:22 »
Илья, я с ним работаю в данный момент

Оффлайн CryDeS

  • Друзья CG
  • 1212
  • Мощь: 12
Re: Iron Talon - lua
« Ответ #6 : 24-08-2016, 20:21:47 »
эм, я elseif и так пробовал, не работает, выдает туже самую ошибку  :-\
попытка четвертая
Код
if IsServer() then
if self:IsCooldownReady() then
local target = self:GetCursorTarget()

if  target:IsCreep() then
self:StartCooldown(self:GetCooldown(self:GetLevel()))
target:SetHealth(target:GetHealth() / 2)
                       elseif target:IsStanding() then
self:StartCooldown(self:GetCooldown(self:GetLevel()) / 4)
target:CutDown(self:GetCaster():GetTeamNumber())
end
end
end
[свернуть]
Принтани и скинь сюда target:GetClassname() , поставив его до ошибки.

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Iron Talon - lua
« Ответ #7 : 25-08-2016, 10:19:28 »
Елки палки, да дело в том, что у тебя есть два класса с взаимно отсутствующими методами. В первом случае объект-крип с методом "а крип ли это" и объект дерево с методом "а дерево ли это (ну или похожим)". И эти методы свойственны только этим классам. Поэтому, когда ты используешь "а крип ли это" на дерево, тебе выдаст ошибку. То же самое с деревом и "а дерево ли это". Все это мог бы понять, прочитав статью. Подумай, как завертеть иначе.