(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
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
13
2 года назад
0
Реализуй через продажу юнита вместо покупки предмета
1
3
2 года назад
Отредактирован Smeto
1
Реализуй через продажу юнита вместо покупки предмета
Вроде как работает, через отслеживание Героя, который покупает предмет.
Есть ли разница в таком случае использовать при покупке Юнита или Предмет?
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
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.