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

Здоровье дерева

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

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Здоровье дерева
« : 12-09-2016, 19:53:30 »
У дерева есть какое либо значение хп? Мне нужно, чтобы, например, когда на дерево юзнули не таргет спелл(аое, можно на несколько деревьев) раз эдак 6-10(желательно рандомно), то дерево ломалось. Такое возможно?

Оффлайн ZLOY

  • Супермодератор
  • 395
  • Мощь: 5
Re: Здоровье дерева
« Ответ #1 : 12-09-2016, 20:39:37 »
Деревьям скорее всего нельзя нанести урон стандартными средствами. Но ты можешь добавить каждому дереву добавить свою переменную с "хп" и отнимать их при касте.

Оффлайн ZLOY

  • Супермодератор
  • 395
  • Мощь: 5
Re: Здоровье дерева
« Ответ #2 : 12-09-2016, 20:44:50 »
Код
function OnSpellStart(event)
local point =  event.target_points[1]
local radius = event.ability:GetSpecilaValueFor("radius")
local targets = GridNav:GetAllTreesAroundPoint(point, radius, true)
for tree,_ in pairs(targets) do
tree.health = tree.health or RandomInt(6, 10)
tree.health = tree.health - 1
if tree.health == 0 then
tree:CutDown(event.caster:GetTeam())
end
end
end
Как-то так

Онлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Здоровье дерева
« Ответ #3 : 12-09-2016, 20:45:59 »
 ХП у деревьев вряд ли есть, но можешь проверить.

А вырубать деревья в области спокойно можешь. GridNav функции как раз для этого. Есть и еще другие.

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Re: Здоровье дерева
« Ответ #4 : 12-09-2016, 20:47:02 »
ZLOY, а как можно через скрипты узнать на какое именно дерево способность использована?

Онлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Здоровье дерева
« Ответ #5 : 12-09-2016, 20:51:40 »
Поясни, в каком виде.

Можно, например, по координатам узнать.  А если через абилку, то по таргету.

Онлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Здоровье дерева
« Ответ #6 : 12-09-2016, 20:55:46 »
Да и вообще, дерево по сути тот же юнит, entity, только без хп и прочей лабуды.

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Re: Здоровье дерева
« Ответ #7 : 12-09-2016, 20:56:32 »
Илья, смотри: у меня есть аое способность с аое 150, которая ищет в этом радиусе деревья и, если они есть, добавляет в переменную игрока некоторое количество дерева. Мне нужно, чтобы, например, ты использовал скилл 6-10 раз на одну группу деревьев и деревья в этой области сломались, но если ты не доломал эти деревья, то другой игрок этой же способностью мог бы доломать их, но ему уже оставалось меньше использований способности.

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Re: Здоровье дерева
« Ответ #8 : 12-09-2016, 20:57:28 »
Илья, я, наверное, просто в скилле RollPercentage(30) сделаю и если выпадает, то ломаю деревья. Хотя хотелось бы через хп все таки

Оффлайн ZLOY

  • Супермодератор
  • 395
  • Мощь: 5
Re: Здоровье дерева
« Ответ #9 : 12-09-2016, 20:58:37 »
Почему он мой код все время игнорит?
Я стараюсь то(

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Re: Здоровье дерева
« Ответ #10 : 12-09-2016, 21:03:00 »
ZLOY, ой, прости, я не увидел, просто сайт сразу вниз промотал и я не прочитал, спасибо

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Re: Здоровье дерева
« Ответ #11 : 12-09-2016, 21:10:26 »
ZLOY,
Вот код после добавления твоего:
Код
function Gather(keys)
   local caster = keys.caster
   local ability = keys.ability
   local point = caster:GetCursorPosition()
   local findents = GridNav:GetAllTreesAroundPoint(point, 150, true)
   local playerid = caster:GetPlayerOwnerID()
   local woodmsg = "particles/wood_msg.vpcf"
   local stonemsg = "particles/stone_msg.vpcf"
   local woodmin = ability:GetSpecialValueFor("woodmin")
   local woodmax = ability:GetSpecialValueFor("woodmax")
   local stonemin = ability:GetSpecialValueFor("stonemin")
   local stonemax = ability:GetSpecialValueFor("stonemax")
   local multiplier = ability:GetSpecialValueFor("treemultiplier")
   local wood = math.random(woodmin,woodmax)
   local stone = math.random(stonemin,stonemax)
   local life = 3.0
   if #findents >= 1 then
      for tree,_ in pairs(findents) do
         tree.health = tree.health or RandomInt(6, 10)
         tree.health = tree.health - 1
         if tree.health == 0 then
            tree:CutDown(keys.caster:GetTeam())
         end
      end
      local trees = tonumber(#findents)
      local woodtotranslate = math.floor(wood * (1 + trees * multiplier))
      print(woodtotranslate)
      changes:changewood(playerid,tonumber(woodtotranslate))
      local string = string.len(woodtotranslate)
      local numbers = ParticleManager:CreateParticle( woodmsg, PATTACH_OVERHEAD_FOLLOW, caster )
      ParticleManager:SetParticleControl( numbers, 1, Vector( 1, woodtotranslate, 0 ) )
      ParticleManager:SetParticleControl( numbers, 2, Vector( life, string, 0 ) )
   else
      print(stone)
      changes:changestone(playerid,tonumber(stone))
      local string = string.len(stone)
      local numbers = ParticleManager:CreateParticle( stonemsg, PATTACH_OVERHEAD_FOLLOW, caster )
      ParticleManager:SetParticleControl( numbers, 1, Vector( 1, stone, 0 ) )
      ParticleManager:SetParticleControl( numbers, 2, Vector( life, string, 0 ) )
   end
end
А вот вылетающая ошибка(
Код
[   Developer       ]: ...rviveinthetaiga\scripts\vscripts\abilities\gathering.lua:19: attempt to index local 'tree' (a number value)
[   Developer       ]:    ...rviveinthetaiga\scripts\vscripts\abilities\gathering.lua:19: in function <...rviveinthetaiga\scripts\vscripts\abilities\gathering.lua:1>
[ W VScript         ]: Script Runtime Error: ...rviveinthetaiga\scripts\vscripts\abilities\gathering.lua:19: attempt to index local 'tree' (a number value)
[ W VScript         ]: stack traceback:
[ W VScript         ]:    ...rviveinthetaiga\scripts\vscripts\abilities\gathering.lua:19: in function <...rviveinthetaiga\scripts\vscripts\abilities\gathering.lua:1>
19 строка
Код
tree.health = tree.health or RandomInt(6, 10)

Оффлайн ZLOY

  • Супермодератор
  • 395
  • Мощь: 5
Re: Здоровье дерева
« Ответ #12 : 12-09-2016, 21:20:25 »
Код
for _,tree in pairs(findents) do
Небольшая опечатка, я перепутал ключ и значение местами

Оффлайн I_GRIN_I

  • Продвинутый
  • 517
  • Мощь: 9
  • Научиться бы скриптить...
Re: Здоровье дерева
« Ответ #13 : 12-09-2016, 21:26:22 »
ZLOY, все работает, огромное спасибо

Онлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Здоровье дерева
« Ответ #14 : 12-09-2016, 21:29:24 »
Почему он мой код все время игнорит?
Я стараюсь то(

хахаххаха, я так же вначале подумал: "че... ему уже скинули готовое решение, что значит "определить дерево", на карте что-ли?"