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

Статус
В этой теме нельзя размещать новые ответы.
Как поменять героя на другого сохранив все предметы , золото и опыт ?
В моем скрипте где-то ошибка...
+ шмотки такие как рапиры выпадают при перемене героя , получается 2 дубликата 1 у героя , второй на земле !

Код:
    local oldHero = keys.caster
    local playerID = oldHero:GetPlayerID()

     local newHero = nil
    local newHeroName = "npc_dota_hero_treant"
    local ability = nil
    local abilityCount = oldHero:GetAbilityCount()
    local gold = oldHero:GetGold() or 0
    local experience = PlayerResource:GetTotalEarnedXP(playerID)
    if playerID ~= nil and playerID ~= -1 then
        items_table = {}
        for i = 0, 11 do
            local item = oldHero:GetItemInSlot( i )

            if item ~= nil then        
                table.insert(items_table , item)
            end
           
        end
       
        for i = 0, abilityCount-1 do
            ability = oldHero:GetAbilityByIndex(i)
            if ability then
                oldHero:RemoveAbility(ability:GetAbilityName())
            end
        end
       
        newHero = PlayerResource:ReplaceHeroWith(playerID, newHeroName, gold, experience)
        newHero:RespawnHero(false, false)

        local items = items_table or {}
         for _,item in pairs(items) do  
             newHero:AddItem(item)
         end      
         UTIL_Remove(oldHero)
   end
[/QUOTEпонаписал
Что бы поменять героя есть 1 апишка (меняет героя полностью,но лучше не апать xp,так как не удобно,лучше по своей системе,думаю сделаешь) Вот апи: PlayerResource:ReplaceHeroWith(player_id, hero_entity, gold, xp )
 
Как поменять героя на другого сохранив все предметы , золото и опыт ?
В моем скрипте где-то ошибка...
+ шмотки такие как рапиры выпадают при перемене героя , получается 2 дубликата 1 у героя , второй на земле !

Код:
    local oldHero = keys.caster
    local playerID = oldHero:GetPlayerID()

     local newHero = nil
    local newHeroName = "npc_dota_hero_treant"
    local ability = nil
    local abilityCount = oldHero:GetAbilityCount()
    local gold = oldHero:GetGold() or 0
    local experience = PlayerResource:GetTotalEarnedXP(playerID)
    if playerID ~= nil and playerID ~= -1 then
        items_table = {}
        for i = 0, 11 do
            local item = oldHero:GetItemInSlot( i )

            if item ~= nil then        
                table.insert(items_table , item)
            end
           
        end
       
        for i = 0, abilityCount-1 do
            ability = oldHero:GetAbilityByIndex(i)
            if ability then
                oldHero:RemoveAbility(ability:GetAbilityName())
            end
        end
       
        newHero = PlayerResource:ReplaceHeroWith(playerID, newHeroName, gold, experience)
        newHero:RespawnHero(false, false)

        local items = items_table or {}
         for _,item in pairs(items) do  
             newHero:AddItem(item)
         end      
         UTIL_Remove(oldHero)
   end
Что бы поменять героя есть 1 апишка (меняет героя полностью,но лучше не апать xp,так как не удобно,лучше по своей системе,думаю сделаешь) Вот апи: PlayerResource:ReplaceHeroWith(player_id, hero_entity, gold, xp )
 
Что бы поменять героя есть 1 апишка (меняет героя полностью,но лучше не апать xp,так как не удобно,лучше по своей системе,думаю сделаешь) Вот апи: PlayerResource:ReplaceHeroWith(player_id, hero_entity, gold, xp )
newHero = PlayerResource:ReplaceHeroWith(playerID, newHeroName, gold, experience)

ты бы хоть код посмотрел немного )
 
Не понимаю,что тебе нужно,она свапает айтемы,скиллы,зачем у тебя там столько хлама?
Ну ,а ты что предлагаешь ?
Мне нужно поменять героя при этом золото , опыт и предметы остались у героя !
 
Ну ,а ты что предлагаешь ?
Мне нужно поменять героя при этом золото , опыт и предметы остались у героя !
Сохранить золото в переменной,после свапа героя выдать эту голду,также с опытом.предметы от данной функции и так остаются
 
Для таких вопросов нужно отдельную тему создавать
Сохранить золото в переменной,после свапа героя выдать эту голду,также с опытом.предметы от данной функции и так остаются
ну если с голдой более-менее понятно oldHero:GetGold()
то вот какая функция для опыта ? local experience = PlayerResource:GetTotalEarnedXP(playerID) или лучше int GetCurrentXP()
А на счет шмоток ты уверен ... ?
 
ну если с голдой более-менее понятно oldHero:GetGold()
то вот какая функция для опыта ? local experience = PlayerResource:GetTotalEarnedXP(playerID) или лучше int GetCurrentXP()
А на счет шмоток ты уверен ... ?
Я этой функцией пользуюсь,. Т.к у меня своя система опыта,то я через неё и апаю уровень героя.
 
Создаю 30+ юнитов в секунду, без модели с партиклем, и лагать начинает, что надо прекешить, Партикль или юнита? И чем PrecacheUnitByNameSync() или PrecacheUnitByNameAsync()? Или прекеш не поможет?
 
Создаю 30+ юнитов в секунду, без модели с партиклем, и лагать начинает, что надо прекешить, Партикль или юнита? И чем PrecacheUnitByNameSync() или PrecacheUnitByNameAsync()? Или прекеш не поможет?
Всё
 
Создаю 30+ юнитов в секунду, без модели с партиклем, и лагать начинает, что надо прекешить, Партикль или юнита? И чем PrecacheUnitByNameSync() или PrecacheUnitByNameAsync()? Или прекеш не поможет?
Во первых создавай юнитов через асинхронный метод, во вторых прекеш делай партикля и желательно в функции прекеш. Юнита не обязательно, если модельки нет или она инвисиблбокс
 
Привет всем) хочу сделать обилку которая будет превращать бревмастера только в огненного спирита на 20 секунд, но понятия не имею как делать абилку которая будет менять панду на фаер спирита. Кто может помочь?
 
Привет всем) хочу сделать обилку которая будет превращать бревмастера только в огненного спирита на 20 секунд, но понятия не имею как делать абилку которая будет менять панду на фаер спирита. Кто может помочь?
Не умеешь - научись. Тебе помогут мануалы и апи.
 
Во первых создавай юнитов через асинхронный метод, во вторых прекеш делай партикля и желательно в функции прекеш. Юнита не обязательно, если модельки нет или она инвисиблбокс
асинхронный метод, это я так понимаю CreateUnitByNameAsync, но что за 7й аргумент hCallback, нашел один пример с использованием функции. А так же он возвращает number, и это не индекс юнита( через EntIndexToHScript проверил ), сам юнит бтв создается
 
Во первых создавай юнитов через асинхронный метод, во вторых прекеш делай партикля и желательно в функции прекеш. Юнита не обязательно, если модельки нет или она инвисиблбокс
прекеша партикля и юнита кстати не хватает, фпс до 12 падает так же
 
асинхронный метод, это я так понимаю CreateUnitByNameAsync, но что за 7й аргумент hCallback, нашел один пример с использованием функции. А так же он возвращает number, и это не индекс юнита( через EntIndexToHScript проверил ), сам юнит бтв создается
Каллбек - это функция, которая будет вызвана при создании юнита, т.к. код пойдет дальше, из-за того, что функция асинхронная. Работает так: function(unit) unit:ForceKill(false) end
Unit - это как раз созданный юнит.
 
Статус
В этой теме нельзя размещать новые ответы.
Реклама: