(1.26) Всем привет, есть герои у которых отрицательная мана, а это значит, что при попытке купить предмет класса "Усиливающий" (Пример стандартных предметов: Книги, Монетка, Вязанка дров) нам напишет, что недостаточно маны и предмет купится, но упадет рядом с нами.
В общем при покупке предмета допустим "Книга1_Оглушение" герой должен получать способность или повышает её уровень.
Я использую для этого условие: GetItemTypeId(GetManipulatedItem()) == 'I00F', но тут как раз таки и случается проблема, что при отрицательной мане мы не получаем предмет, а он падает рядом.
  1. Как реализовать в таком случае Получение способности или повышение её уровня, когда мы не можем подобрать такой предмет из-за отрицательной маны?
  2. Как то можно использовать через код предметы типа "Усиливающий" для героев с отрицательным значением маны, дабы сработало событие на получение предмета?

Реализуй через продажу юнита вместо покупки предмета
Вроде как работает, через отслеживание Героя, который покупает предмет.
Есть ли разница в таком случае использовать при покупке Юнита или Предмет?
function SpellInc takes integer Spell returns nothing
local unit Hero=GetBuyingUnit()
local player NumberPlayer=GetOwningPlayer(Hero)
local integer PlayerId=GetPlayerId(NumberPlayer)
if GetUnitAbilityLevel(Hero, Spell) > 0 then
    if GetUnitAbilityLevel(Hero, Spell) < udg_aLvlskill then
                call IncUnitAbilityLevel(Hero,Spell)
            else
                call SetPlayerStateBJ(NumberPlayer, PLAYER_STATE_RESOURCE_LUMBER, ( GetPlayerState(NumberPlayer, PLAYER_STATE_RESOURCE_LUMBER) + 1 ) )
            endif
        else
            if udg_count_spells[PlayerId] > 0 then
                set udg_count_spells[PlayerId] = udg_count_spells[PlayerId] - 1
                call UnitAddAbility( Hero, Spell)
                if udg_NumberSpell[PlayerId] <= 7 then
                    set udg_NumberSpell[PlayerId] = ( udg_NumberSpell[PlayerId] + 1 )
                    set udg_SpellDel[PlayerId * 7 + udg_NumberSpell[PlayerId]] = Spell
                    call BJDebugMsg ( GetPlayerName(NumberPlayer) + ( "|c0086AD00" + ( ( "выучил способность" + GetAbilityName(Spell) ) + "|r" ) ) )
                else
                    set udg_SpellDel[udg_NumberSpellDelete[1]] = Spell
                    call BJDebugMsg ( GetPlayerName(NumberPlayer) + ( "|c0086AD00" + ( ( "выучил способность" + GetAbilityName(Spell) ) + "|r" ) ) )
                endif
            else
                call SetPlayerStateBJ(NumberPlayer, PLAYER_STATE_RESOURCE_LUMBER, ( GetPlayerState(NumberPlayer, PLAYER_STATE_RESOURCE_LUMBER) + 1 ) )
                call BJDebugMsg("Вы приобрели Максимум способностей")
            endif
        endif
set Hero=null
set NumberPlayer=null
endfunction

function SpellUpgrade takes nothing returns nothing
local item Predmet=GetSoldItem()
local integer SoldItem=GetItemTypeId(Predmet)
local integer Spell
    if SoldItem == 'I002' then
        set Spell = 'AOcr'
        call SpellInc(Spell)
		call RemoveItem(Predmet)
    endif
set Predmet = null
endfunction

//===========================================================================
function InitTrig_Test takes nothing returns nothing
    set gg_trg_Test = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Test, EVENT_PLAYER_UNIT_SELL_ITEM )
    call TriggerAddAction( gg_trg_Test, function SpellUpgrade )
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
13
Реализуй через продажу юнита вместо покупки предмета
11
Принятый ответ
Реализуй через продажу юнита вместо покупки предмета
Вроде как работает, через отслеживание Героя, который покупает предмет.
Есть ли разница в таком случае использовать при покупке Юнита или Предмет?
function SpellInc takes integer Spell returns nothing
local unit Hero=GetBuyingUnit()
local player NumberPlayer=GetOwningPlayer(Hero)
local integer PlayerId=GetPlayerId(NumberPlayer)
if GetUnitAbilityLevel(Hero, Spell) > 0 then
    if GetUnitAbilityLevel(Hero, Spell) < udg_aLvlskill then
                call IncUnitAbilityLevel(Hero,Spell)
            else
                call SetPlayerStateBJ(NumberPlayer, PLAYER_STATE_RESOURCE_LUMBER, ( GetPlayerState(NumberPlayer, PLAYER_STATE_RESOURCE_LUMBER) + 1 ) )
            endif
        else
            if udg_count_spells[PlayerId] > 0 then
                set udg_count_spells[PlayerId] = udg_count_spells[PlayerId] - 1
                call UnitAddAbility( Hero, Spell)
                if udg_NumberSpell[PlayerId] <= 7 then
                    set udg_NumberSpell[PlayerId] = ( udg_NumberSpell[PlayerId] + 1 )
                    set udg_SpellDel[PlayerId * 7 + udg_NumberSpell[PlayerId]] = Spell
                    call BJDebugMsg ( GetPlayerName(NumberPlayer) + ( "|c0086AD00" + ( ( "выучил способность" + GetAbilityName(Spell) ) + "|r" ) ) )
                else
                    set udg_SpellDel[udg_NumberSpellDelete[1]] = Spell
                    call BJDebugMsg ( GetPlayerName(NumberPlayer) + ( "|c0086AD00" + ( ( "выучил способность" + GetAbilityName(Spell) ) + "|r" ) ) )
                endif
            else
                call SetPlayerStateBJ(NumberPlayer, PLAYER_STATE_RESOURCE_LUMBER, ( GetPlayerState(NumberPlayer, PLAYER_STATE_RESOURCE_LUMBER) + 1 ) )
                call BJDebugMsg("Вы приобрели Максимум способностей")
            endif
        endif
set Hero=null
set NumberPlayer=null
endfunction

function SpellUpgrade takes nothing returns nothing
local item Predmet=GetSoldItem()
local integer SoldItem=GetItemTypeId(Predmet)
local integer Spell
    if SoldItem == 'I002' then
        set Spell = 'AOcr'
        call SpellInc(Spell)
		call RemoveItem(Predmet)
    endif
set Predmet = null
endfunction

//===========================================================================
function InitTrig_Test takes nothing returns nothing
    set gg_trg_Test = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Test, EVENT_PLAYER_UNIT_SELL_ITEM )
    call TriggerAddAction( gg_trg_Test, function SpellUpgrade )
endfunction
Чтобы оставить комментарий, пожалуйста, войдите на сайт.