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

Статус
В этой теме нельзя размещать новые ответы.

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Как поменять героя на другого сохранив все предметы , золото и опыт ?
В моем скрипте где-то ошибка...
+ шмотки такие как рапиры выпадают при перемене героя , получается 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 )
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Как поменять героя на другого сохранив все предметы , золото и опыт ?
В моем скрипте где-то ошибка...
+ шмотки такие как рапиры выпадают при перемене героя , получается 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 )
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,147
196
www.dotabuff.com
Проект
Roshan defense
Что бы поменять героя есть 1 апишка (меняет героя полностью,но лучше не апать xp,так как не удобно,лучше по своей системе,думаю сделаешь) Вот апи: PlayerResource:ReplaceHeroWith(player_id, hero_entity, gold, xp )
newHero = PlayerResource:ReplaceHeroWith(playerID, newHeroName, gold, experience)

ты бы хоть код посмотрел немного )
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,147
196
www.dotabuff.com
Проект
Roshan defense
Не понимаю,что тебе нужно,она свапает айтемы,скиллы,зачем у тебя там столько хлама?
Ну ,а ты что предлагаешь ?
Мне нужно поменять героя при этом золото , опыт и предметы остались у героя !
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Ну ,а ты что предлагаешь ?
Мне нужно поменять героя при этом золото , опыт и предметы остались у героя !
Сохранить золото в переменной,после свапа героя выдать эту голду,также с опытом.предметы от данной функции и так остаются
 

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,147
196
www.dotabuff.com
Проект
Roshan defense
Для таких вопросов нужно отдельную тему создавать
Сохранить золото в переменной,после свапа героя выдать эту голду,также с опытом.предметы от данной функции и так остаются
ну если с голдой более-менее понятно oldHero:GetGold()
то вот какая функция для опыта ? local experience = PlayerResource:GetTotalEarnedXP(playerID) или лучше int GetCurrentXP()
А на счет шмоток ты уверен ... ?
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
ну если с голдой более-менее понятно oldHero:GetGold()
то вот какая функция для опыта ? local experience = PlayerResource:GetTotalEarnedXP(playerID) или лучше int GetCurrentXP()
А на счет шмоток ты уверен ... ?
Я этой функцией пользуюсь,. Т.к у меня своя система опыта,то я через неё и апаю уровень героя.
 

shesmu

Продвинутый
22 Фев 2018
158
22
Создаю 30+ юнитов в секунду, без модели с партиклем, и лагать начинает, что надо прекешить, Партикль или юнита? И чем PrecacheUnitByNameSync() или PrecacheUnitByNameAsync()? Или прекеш не поможет?
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Создаю 30+ юнитов в секунду, без модели с партиклем, и лагать начинает, что надо прекешить, Партикль или юнита? И чем PrecacheUnitByNameSync() или PrecacheUnitByNameAsync()? Или прекеш не поможет?
Всё
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
Создаю 30+ юнитов в секунду, без модели с партиклем, и лагать начинает, что надо прекешить, Партикль или юнита? И чем PrecacheUnitByNameSync() или PrecacheUnitByNameAsync()? Или прекеш не поможет?
Во первых создавай юнитов через асинхронный метод, во вторых прекеш делай партикля и желательно в функции прекеш. Юнита не обязательно, если модельки нет или она инвисиблбокс
 

almazist1

Продвинутый
Привет всем) хочу сделать обилку которая будет превращать бревмастера только в огненного спирита на 20 секунд, но понятия не имею как делать абилку которая будет менять панду на фаер спирита. Кто может помочь?
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
Привет всем) хочу сделать обилку которая будет превращать бревмастера только в огненного спирита на 20 секунд, но понятия не имею как делать абилку которая будет менять панду на фаер спирита. Кто может помочь?
Не умеешь - научись. Тебе помогут мануалы и апи.
 

shesmu

Продвинутый
22 Фев 2018
158
22
Во первых создавай юнитов через асинхронный метод, во вторых прекеш делай партикля и желательно в функции прекеш. Юнита не обязательно, если модельки нет или она инвисиблбокс
асинхронный метод, это я так понимаю CreateUnitByNameAsync, но что за 7й аргумент hCallback, нашел один пример с использованием функции. А так же он возвращает number, и это не индекс юнита( через EntIndexToHScript проверил ), сам юнит бтв создается
 

shesmu

Продвинутый
22 Фев 2018
158
22
Во первых создавай юнитов через асинхронный метод, во вторых прекеш делай партикля и желательно в функции прекеш. Юнита не обязательно, если модельки нет или она инвисиблбокс
прекеша партикля и юнита кстати не хватает, фпс до 12 падает так же
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
асинхронный метод, это я так понимаю CreateUnitByNameAsync, но что за 7й аргумент hCallback, нашел один пример с использованием функции. А так же он возвращает number, и это не индекс юнита( через EntIndexToHScript проверил ), сам юнит бтв создается
Каллбек - это функция, которая будет вызвана при создании юнита, т.к. код пойдет дальше, из-за того, что функция асинхронная. Работает так: function(unit) unit:ForceKill(false) end
Unit - это как раз созданный юнит.
 
Статус
В этой теме нельзя размещать новые ответы.
Реклама: