Простые вопросы #2

almazist1

Продвинутый
создал пасивную абилку для юнита, которая при получении модификатора заменяет этого юнита на другого, но почему то не дает контроль над вторым, в чем причина?
Lua:
function sf1_2(keys)
    local caster = keys.caster
    local player = caster:GetPlayerOwnerID()
    local team    = caster:GetTeam()
    local unit_position = caster:GetAbsOrigin()

if caster.HasModifier(caster, "modifier_lvlup") then
ApplyDamage({victim = keys.caster, attacker = keys.caster, damage = 999999999, damage_type = DAMAGE_TYPE_PURE,})
local unit = CreateUnitByName("npc_dota_sf_2", unit_position + RandomVector( RandomFloat( 0, 60)), true, caster, caster, team)
unit:SetControllableByPlayer(player, true)
unit:SetOwner(caster)

    end
    if not caster.HasModifier(caster, "modifier_lvlup") then
    return
end
end
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,334
99
создал пасивную абилку для юнита, которая при получении модификатора заменяет этого юнита на другого, но почему то не дает контроль над вторым, в чем причина?
Lua:
function sf1_2(keys)
    local caster = keys.caster
    local player = caster:GetPlayerOwnerID()
    local team    = caster:GetTeam()
    local unit_position = caster:GetAbsOrigin()

if caster.HasModifier(caster, "modifier_lvlup") then
ApplyDamage({victim = keys.caster, attacker = keys.caster, damage = 999999999, damage_type = DAMAGE_TYPE_PURE,})
local unit = CreateUnitByName("npc_dota_sf_2", unit_position + RandomVector( RandomFloat( 0, 60)), true, caster, caster, team)
unit:SetControllableByPlayer(player, true)
unit:SetOwner(caster)

    end
    if not caster.HasModifier(caster, "modifier_lvlup") then
    return
end
end
Очевидно, что ты сначала убиваешь юнита, а потом новому хозяином выставляешь этого самого уже мертвого юнита.
 

vulkantsk

Друзья CG
21 Июн 2017
726
72
www.dotabuff.com
Проект
Roshan defense
а, точно, блин... ладно буду что-то думать) спс
вот тебе абилка, которая проверяет колво ентити на карте общее и каждого по отдельности
Код:
test_entities = class({})

function test_entities:OnSpellStart()

    local savedEntities = {}--savedEntities or {}
    local current = Entities:First()
    local newEntities = {}
    local index = 0
    while current do
        local classname = current:GetClassname()

        savedEntities[classname] = savedEntities[classname] and savedEntities[classname] + 1 or 1
        savedEntities["total_enities"] = savedEntities["total_enities"] and savedEntities["total_enities"] + 1 or 1
        current = Entities:Next(current)
    end
    print("total entities = "..savedEntities["total_enities"])
    DeepPrintTable( savedEntities )

end
 
20 Дек 2016
791
120
вот тебе абилка, которая проверяет колво ентити на карте общее и каждого по отдельности
Код:
test_entities = class({})

function test_entities:OnSpellStart()

    local savedEntities = {}--savedEntities or {}
    local current = Entities:First()
    local newEntities = {}
    local index = 0
    while current do
        local classname = current:GetClassname()

        savedEntities[classname] = savedEntities[classname] and savedEntities[classname] + 1 or 1
        savedEntities["total_enities"] = savedEntities["total_enities"] and savedEntities["total_enities"] + 1 or 1
        current = Entities:Next(current)
    end
    print("total entities = "..savedEntities["total_enities"])
    DeepPrintTable( savedEntities )

end
почему ты так уверен, что у него есть DeepPrintTable?
 

almazist1

Продвинутый
Другого овнера выставить лол
все равно не дает контроль, это крип созданный от крипа, который тоже создан крипом
Lua:
function sf1_2(keys)
    local caster = keys.caster
    local team    = caster:GetTeam()
    local unit_position = caster:GetAbsOrigin()
    local owner = caster:GetOwner()
   
if caster.HasModifier(caster, "modifier_lvlup") then

local unit = CreateUnitByName("npc_dota_sf_2", unit_position + RandomVector( RandomFloat( 0, 50)), true, caster, caster, team)
unit:SetControllableByPlayer(caster:GetPlayerOwnerID(), true)
unit:SetOwner(owner)
ApplyDamage({victim = keys.caster, attacker = keys.caster, damage = 999999999, damage_type = DAMAGE_TYPE_PURE,})

    end
    if not caster.HasModifier(caster, "modifier_lvlup") then
    return
end
end
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,334
99
все равно не дает контроль, это крип созданный от крипа, который тоже создан крипом
Lua:
function sf1_2(keys)
    local caster = keys.caster
    local team    = caster:GetTeam()
    local unit_position = caster:GetAbsOrigin()
    local owner = caster:GetOwner()
  
if caster.HasModifier(caster, "modifier_lvlup") then

local unit = CreateUnitByName("npc_dota_sf_2", unit_position + RandomVector( RandomFloat( 0, 50)), true, caster, caster, team)
unit:SetControllableByPlayer(caster:GetPlayerOwnerID(), true)
unit:SetOwner(owner)
ApplyDamage({victim = keys.caster, attacker = keys.caster, damage = 999999999, damage_type = DAMAGE_TYPE_PURE,})

    end
    if not caster.HasModifier(caster, "modifier_lvlup") then
    return
end
end
Героя передавай туда
 
  • Нравится
Реакции: almazist1

I_GRIN_I

Друзья CG
15 Мар 2016
1,334
99
все равно не дает контроль, это крип созданный от крипа, который тоже создан крипом
Lua:
function sf1_2(keys)
    local caster = keys.caster
    local team    = caster:GetTeam()
    local unit_position = caster:GetAbsOrigin()
    local owner = caster:GetOwner()
  
if caster.HasModifier(caster, "modifier_lvlup") then

local unit = CreateUnitByName("npc_dota_sf_2", unit_position + RandomVector( RandomFloat( 0, 50)), true, caster, caster, team)
unit:SetControllableByPlayer(caster:GetPlayerOwnerID(), true)
unit:SetOwner(owner)
ApplyDamage({victim = keys.caster, attacker = keys.caster, damage = 999999999, damage_type = DAMAGE_TYPE_PURE,})

    end
    if not caster.HasModifier(caster, "modifier_lvlup") then
    return
end
end
У тебя крип умирает, я же сказал тебе омг
 
  • Нравится
Реакции: almazist1

almazist1

Продвинутый
У тебя крип умирает, я же сказал тебе омг
сделал как ты когда-то, спасибо! может кому понадобится
Lua:
function sf1_2(keys)
    local caster = keys.caster
    local team    = caster:GetTeam()
    local unit_position = caster:GetAbsOrigin()

    
if caster.HasModifier(caster, "modifier_lvlup") and PlayerResource:IsValidPlayer(0) then
     local player = PlayerResource:GetSelectedHeroEntity(0)
local unit = CreateUnitByName("npc_dota_sf_2", unit_position + RandomVector( RandomFloat( 0, 50)), true, player, player:GetOwner(), team)
unit:SetControllableByPlayer(0, true)
unit:SetOwner(player)
ApplyDamage({victim = keys.caster, attacker = keys.caster, damage = 999999999, damage_type = DAMAGE_TYPE_PURE,})

    end
    if not caster.HasModifier(caster, "modifier_lvlup") then
    return
end
end
 

xDes

Активный
8 Ноя 2018
122
7
Проект
Boss Survival Adventure
вот тебе абилка, которая проверяет колво ентити на карте общее и каждого по отдельности
Код:
test_entities = class({})

function test_entities:OnSpellStart()

    local savedEntities = {}--savedEntities or {}
    local current = Entities:First()
    local newEntities = {}
    local index = 0
    while current do
        local classname = current:GetClassname()

        savedEntities[classname] = savedEntities[classname] and savedEntities[classname] + 1 or 1
        savedEntities["total_enities"] = savedEntities["total_enities"] and savedEntities["total_enities"] + 1 or 1
        current = Entities:Next(current)
    end
    print("total entities = "..savedEntities["total_enities"])
    DeepPrintTable( savedEntities )

end
спасибо, но не понятно, что оно мне даст? total entities = 11109 и список энтити.. и что?)
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,334
99
сделал как ты когда-то, спасибо! может кому понадобится
Lua:
function sf1_2(keys)
    local caster = keys.caster
    local team    = caster:GetTeam()
    local unit_position = caster:GetAbsOrigin()

   
if caster.HasModifier(caster, "modifier_lvlup") and PlayerResource:IsValidPlayer(0) then
     local player = PlayerResource:GetSelectedHeroEntity(0)
local unit = CreateUnitByName("npc_dota_sf_2", unit_position + RandomVector( RandomFloat( 0, 50)), true, player, player:GetOwner(), team)
unit:SetControllableByPlayer(0, true)
unit:SetOwner(player)
ApplyDamage({victim = keys.caster, attacker = keys.caster, damage = 999999999, damage_type = DAMAGE_TYPE_PURE,})

    end
    if not caster.HasModifier(caster, "modifier_lvlup") then
    return
end
end
У тебя игрок 1? Если нет, то где нули ты должен плеер айди вставлять
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,334
99
это понятно) прикол в том, что это не все) у меня по триггерам вызываются еще куча ентити
Ну оптимизируй тогда, убери лишних крипов, удаляй тех, что игрок уже не увидит, создавай крипов только когда герой рядом и тд
 
Реклама: