Как создать через скрипт функцию создания существа?

  • Автор темы Автор темы Danis
  • Дата начала Дата начала

Danis

Продвинутый
12 Июн 2016
285
0
Проект
Custom Hero Arena
Как создать существо через скрипт с кастомными характеристиками как у форжей инвока,только без функции сдыхания через время.
Пытался сделать но не очень получилось
Код:
local caster = keys.caster
	local ability = keys.ability
	local TowerBuff = "modifier_tinker_tower_summon"
	local player = caster:GetPlayerOwnerID()
	local tower_hp = ability:GetSpecialValueFor("tower_hp", ability:GetLevel()-1)
	local tower_mana = ability:GetSpecialValueFor("tower_mana", ability:GetLevel()-1)
	local tower_armor = ability:GetSpecialValueFor("tower_armor", ability:GetLevel()-1)
	local tower_dmg	= ability:GetSpecialValueFor("tower_dmg", ability:GetLevel()-1)
	local tower_bat = ability:GetSpecialValueFor("tower_bat", ability:GetLevel()-1)
	local tower_atk_speed = ability:GetSpecialValueFor("bonus_atk_speed", ability:GetLevel()-1)

	if TowerLevel >= 1 and TowerLevel <= 14 then
		local Tower = CreateUnitByName("tinker_tower", TowerLevel, keys.target_points[1], false, keys.caster, keys.caster, keys.caster:GetTeam())
		Tower:SetControllableByPlayer(keys.caster:GetPlayerID(), true)
		Tower:SetOwner(keys.caster)
		Tower:SetBaseMaxHealth(tower_hp)
		Tower:SetMana(tower_mana)
		
		--Display particle effects for Venomancer as well as the plague ward.
		local Tower_cast_particle = ParticleManager:CreateParticle("particles/units/heroes/hero_venomancer/venomancer_ward_cast.vpcf", PATTACH_ABSORIGIN, keys.caster)
		local Tower_spawn_particle = ParticleManager:CreateParticle("particles/units/heroes/hero_venomancer/venomancer_ward_spawn.vpcf", PATTACH_ABSORIGIN, plague_ward_unit)
	
		Tower:ApplyDataDrivenModifier(Tower, ability, "modifier_tinker_tower_summon", {})
end
В игре ошибку не пишет но юнит просто не спавнится.
 
Последнее редактирование модератором:
ability:GetSpecialValueFor принимает 1 аргумент
 
ability:GetLevelSpecialValueFor("reduce_percent", ability:GetLevel() - 1)
ability:GetSpecialValueFor("reduce_percent")
 
Последнее редактирование модератором:
[quote author=CryDeS link=topic=995.msg5341#msg5341 date=1468941800]
ability:GetLevelSpecialValueFor("reduce_percent", ability:GetLevel() - 1)
[/quote]
Как-будто в 2014 побывал
 
Последнее редактирование модератором:
Ну суть в той что сейчас юзать такую конструкцию бессмысленно
 
убрал level и проверку лвла юнита но не работает так же, и ошибку не выдает.
P.S. прекаш модельки юнита сделал
 
Понапроверяй принтами места, где проходит компилятор, и где нет.
 
И чет я не вижу у тебя определения переменной "TowerLevel".
 
Последнее редактирование модератором:
теперь функция вызывается только оно не может определить:
Код:
[ W VScript       ]: Script Runtime Error: ...est01\scripts\vscripts\abilities\tinker_tower_summon.lua:34: attempt to index local 'tower_unit' (a nil value)
[ W VScript       ]: stack traceback:
[ W VScript       ]: 	...est01\scripts\vscripts\abilities\tinker_tower_summon.lua:34: in function <...est01\scripts\vscripts\abilities\tinker_tower_summon.lua:1>
И вот код того что оно не может определить:
Код:
local tower_unit = CreateUnitByName("tinker_" .. tinker_tower_level .. "_tower", keys.target_points[1], false, keys.caster, keys.caster, keys.caster:GetTeamNumber())
		tower_unit:SetControllableByPlayer(keys.caster:GetPlayerID(), true)
		tower_unit:SetOwner(keys.caster)
		tower_unit:SetBaseMaxHealth(tower_hp)
		tower_unit:SetMana(tower_mana)
 
Последнее редактирование модератором:
[quote author=Danis link=topic=995.msg5352#msg5352 date=1469037515]
теперь функция вызывается только оно не может определить:
Код:
[ W VScript       ]: Script Runtime Error: ...est01\scripts\vscripts\abilities\tinker_tower_summon.lua:34: attempt to index local 'tower_unit' (a nil value)
[ W VScript       ]: stack traceback:
[ W VScript       ]: 	...est01\scripts\vscripts\abilities\tinker_tower_summon.lua:34: in function <...est01\scripts\vscripts\abilities\tinker_tower_summon.lua:1>
И вот код того что оно не может определить:
Код:
local tower_unit = CreateUnitByName("tinker_" .. tinker_tower_level .. "_tower", keys.target_points[1], false, keys.caster, keys.caster, keys.caster:GetTeamNumber())
		tower_unit:SetControllableByPlayer(keys.caster:GetPlayerID(), true)
		tower_unit:SetOwner(keys.caster)
		tower_unit:SetBaseMaxHealth(tower_hp)
		tower_unit:SetMana(tower_mana)
[/quote]
Потому что время на создания юнита >> времени выполнения следующей строки
 
Последнее редактирование модератором:
Последнее редактирование модератором:
Ты уверен что юнит с именем "tinker_" .. tinker_tower_level .. "_tower" вообще существует в kv-файле?
 
Последнее редактирование модератором:
Наскольк я помню, подобное склеивание не срабатывает в обе стороны:

Код:
"tinker_" .. tinker_tower_level .. "_tower"

И синтаксис луа немного другой. Проверь это.
 
Последнее редактирование модератором:
Почему просто не создать в кв файле несколбко юнитов и не призывать их в зависимости от уровня? И попробуй призывать юнитов через датадрайвен. Еще посмотри в лиа, как у тимбера реализован завод.
 
Почему просто не создать в кв файле несколбко юнитов и не призывать их в зависимости от уровня? И попробуй призывать юнитов через датадрайвен. Еще посмотри в лиа, как у тимбера реализован завод.

Почему не в датардрайвен?Легче будет сделать через луа призыв а не делать овер 7 юнитов с разными хар-ками.и через луа там только 4 строчки нужно вот код если кому-то понадобтся
Код:
local tower_unit = CreateUnitByName("tinker_tower", keys.target_points[1], false, keys.caster, keys.caster, keys.caster:GetTeamNumber())
		tower_unit:SetControllableByPlayer(keys.caster:GetPlayerID(), true)
		tower_unit:SetOwner(keys.caster)
		tower_unit:SetBaseMaxHealth(tower_hp)
		tower_unit:SetMana(tower_mana)
		tower_unit:SetBaseDamageMin(tower_dmg)
		tower_unit:SetBaseDamageMax(tower_dmg)
		tower_unit:SetBaseAttackTime(tower_bat)
		tower_unit:CreatureLevelUp(tinker_tower_level - 11)
 
Последнее редактирование модератором:
Код:
tostring("tinker_" .. tinker_tower_level .. "_tower")
Может так заработает, посмотри
 
Последнее редактирование модератором:
Вот ответ почему не работает же
[quote author=Se7eN link=topic=995.msg5401#msg5401 date=1469387979]
Код:
tostring("tinker_" .. tinker_tower_level .. "_tower")
Может так заработает, посмотри
[/quote]
Ребят вы что не видели что я выше скинул рабочий код? он работает.
 
Последнее редактирование модератором:
Реклама: