Пытаюсь тщетно апнуть скил.

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

UZzip

Продвинутый
2 Янв 2016
282
1
Вобщем у меня задача апнуть способность (скрытую) она есть у героя но не отображается в списке. Я пытаюсь её апнуть скриптом, но пока безуспешно, и подобная темка на форуме не помогла.

ВОТ мой addon_game_mode.lua и что то я намудрил...
Код:
if main == nil then
	_G.main = class({})
end

require('stat_GameMode')



function Precache( context )
PrecacheResource( "texture", "resource/flash3/images/items/longrange_rifle", context )
end


 
function Activate()
	main:InitGameMode()
end

function main:InitGameMode()


GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 3 )
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 3 )

ListenToGameEvent("dota_player_killed", Dynamic_Wrap(main, "OnHeroKilled"), self)
ListenToGameEvent('npc_spawned', Dynamic_Wrap(main, 'OnNPCSpawned'), self )


end


function main:OnHeroKilled(data)

local CountPlayers = PlayerResource:GetPlayerCountForTeam(DOTA_TEAM_GOODGUYS) + PlayerResource:GetPlayerCountForTeam(DOTA_TEAM_BADGUYS)

if (PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) + 1 ) > (10 * CountPlayers) then
  GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif (PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) +1) > (10 * CountPlayers) then
  GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end


function main:OnNPCSpawned(keys)
    print(" NPC Spawned")
    DeepPrintTable(keys)
    local npc = EntIndexToHScript(keys.entindex)

    if npc:IsRealHero() and npc.bFirstSpawned == nil then
        npc.bFirstSpawned = true
        main:OnHeroInGame(npc)
        npc:AddAbility("dota_ability_xp_granter"):SetLevel(1)
    end
end

function main:OnHeroInGame(hero)
    local ability_count = GetAbilityCount()
    for i = 0, ability_count do
        local ability = hero:GetAbilityByIndex(i)
        if ability then
            ability:SetLevel(1)
        end
    end
end

end
 
Последнее редактирование модератором:
по сути вот слушатель ListenToGameEvent('npc_spawned', Dynamic_Wrap(main, 'OnNPCSpawned'), self )
и функция
Код:
function main:OnNPCSpawned(keys)
    print(" NPC Spawned")
    DeepPrintTable(keys)
    local npc = EntIndexToHScript(keys.entindex)

    if npc:IsRealHero() and npc.bFirstSpawned == nil then
        npc.bFirstSpawned = true
        main:OnHeroInGame(npc)
        npc:AddAbility("dota_ability_xp_granter"):SetLevel(1)
    end
end

function main:OnHeroInGame(hero)
    local ability_count = GetAbilityCount()
    for i = 0, ability_count do
        local ability = hero:GetAbilityByIndex(i)
        if ability then
            ability:SetLevel(1)
        end
    end
end

Кстати мне нужно не все скилы апнуть а только вот этот "dota_ability_xp_granter"
 
Последнее редактирование модератором:
[quote author=UZzip link=topic=755.msg3045#msg3045 date=1456159895]
по сути вот слушатель ListenToGameEvent('npc_spawned', Dynamic_Wrap(main, 'OnNPCSpawned'), self )
и функция
Код:
function main:OnNPCSpawned(keys)
    print(" NPC Spawned")
    DeepPrintTable(keys)
    local npc = EntIndexToHScript(keys.entindex)

    if npc:IsRealHero() and npc.bFirstSpawned == nil then
        npc.bFirstSpawned = true
        main:OnHeroInGame(npc)
        npc:AddAbility("dota_ability_xp_granter"):SetLevel(1)
    end
end

function main:OnHeroInGame(hero)
    local ability_count = GetAbilityCount()
    for i = 0, ability_count do
        local ability = hero:GetAbilityByIndex(i)
        if ability then
            ability:SetLevel(1)
        end
    end
end

Кстати мне нужно не все скилы апнуть а только вот этот "dota_ability_xp_granter"
[/quote]

я не понимаю почему не поставить Barebones, там есть эта функция OmHeroInGame, и все проблемы твои фенито

Что касаемо абилки, hero:FindAbilityByName("kokoko"):SetLevel(1)
 
Последнее редактирование модератором:
Во первых: у тебя сейчас две функции реализованы внутри другой функции, что не есть правильно в твоем случае.

Добавь "end" перед "function main:OnNPCSpawned(keys)" и убери "end" в самом конце файла.

Далее, если я тебя правильно понял, то тебе не нужна функция "main:OnHeroInGame". Удаляй ее и все, что с ней связано.

Ну и должно все заработать.
 
Последнее редактирование модератором:
[quote author=Adam Smith]
я не понимаю почему не поставить Barebones, там есть эта функция OmHeroInGame, и все проблемы твои фенито
[/quote]
Обычно я предпочитаю лёгкие пути, но тут по воле обстоятельств мне попался сложный, и я хочу доделать эту карту без бранебойнес.

Илья, вот я сделал так:
Код:
if main == nil then
	_G.main = class({})
end

require('stat_GameMode')


function Precache( context )
PrecacheResource( "texture", "resource/flash3/images/items/longrange_rifle", context )
end

function Activate()
	main:InitGameMode()
end

function main:InitGameMode()


GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 3 )
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 3 )

ListenToGameEvent("dota_player_killed", Dynamic_Wrap(main, "OnHeroKilled"), self)
ListenToGameEvent('npc_spawned', Dynamic_Wrap(main, 'OnNPCSpawned'), self )


end

function main:OnHeroKilled(data)

local CountPlayers = PlayerResource:GetPlayerCountForTeam(DOTA_TEAM_GOODGUYS) + PlayerResource:GetPlayerCountForTeam(DOTA_TEAM_BADGUYS)

if (PlayerResource:GetTeamKills(DOTA_TEAM_BADGUYS) + 1 ) > (10 * CountPlayers) then
  GameRules:SetGameWinner(DOTA_TEAM_BADGUYS)
elseif (PlayerResource:GetTeamKills(DOTA_TEAM_GOODGUYS) +1) > (10 * CountPlayers) then
  GameRules:SetGameWinner(DOTA_TEAM_GOODGUYS)
end


end

function main:OnNPCSpawned(keys)
    print(" NPC Spawned")
    DeepPrintTable(keys)
    local npc = EntIndexToHScript(keys.entindex)

    if npc:IsRealHero() and npc.bFirstSpawned == nil then
        npc.bFirstSpawned = true
        main:OnHeroInGame(npc)
        npc:AddAbility("dota_ability_xp_granter"):SetLevel(1)
    end
end
уровень не повышается, во время игры на экране пищет ошибку.
 
Последнее редактирование модератором:
Код:
[ W VScript       ]: Script Runtime Error: ...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:55: attempt to call method 'OnHeroInGame' (a nil value)
[ W VScript       ]: stack traceback:
[ W VScript       ]: 	...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:55: in function <...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:48>

вот вроде текст ошибки
stack traceback: стек трассировки: что?
 
Последнее редактирование модератором:
[quote author=UZzip link=topic=755.msg3054#msg3054 date=1456217048]
Код:
[ W VScript       ]: Script Runtime Error: ...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:55: attempt to call method 'OnHeroInGame' (a nil value)
[ W VScript       ]: stack traceback:
[ W VScript       ]: 	...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:55: in function <...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:48>

вот вроде текст ошибки
stack traceback: стек трассировки: что?
[/quote]

attempt to call method 'OnHeroInGame' (a nil value) неправильно используешь функцию
 
Последнее редактирование модератором:
Реклама: