я столкнулся с проблемой, код вроде как работает и отнимает ресурсы если они так уж и быть были, но если их нет - не беда, все равно мы дадим картование скила.
library AbilityCostLib initializer Init
 
    private function GetAbilityGold takes integer abilid returns integer
        return LoadInteger(udg_Hashtable, StringHash("KingAbilityCost | Gold"), abilid)
    endfunction

    private function GetAbilityWood takes integer abilid returns integer
        return LoadInteger(udg_Hashtable, StringHash("KingAbilityCost | Wood"), abilid)
    endfunction

    private function GetAbilityFood takes integer abilid returns integer
        return LoadInteger(udg_Hashtable, StringHash("KingAbilityCost | Food"), abilid)
    endfunction

    private function SaveAbilityCost takes integer abilid, integer gold, integer wood, integer food returns nothing
        call SaveInteger(udg_Hashtable, StringHash("KingAbilityCost | Gold"), abilid, gold)
        call SaveInteger(udg_Hashtable, StringHash("KingAbilityCost | Wood"), abilid, wood)
        call SaveInteger(udg_Hashtable, StringHash("KingAbilityCost | Food"), abilid, food)
    endfunction

    private function InitAbilityCost takes nothing returns nothing

        // Шаблон способности: Айди, золото, дерево, пища

        call SaveAbilityCost('A00H', 300, 0, 0) //Массовая благодать
        call SaveAbilityCost('A01I', 3000, 1500, 24) //Королевские гвардейцы
        call SaveAbilityCost('A01H', 3000, 1500, 24) //Королевские Лучники
        call SaveAbilityCost('A01J', 3000, 1500, 8) //Капитан Гвардии
        call SaveAbilityCost('A01Y', 500, 0, 0) //Ярость Нежити
        call SaveAbilityCost('A03R', 200, 0, 3) //Белый Волк
        call SaveAbilityCost('A03H', 1000, 0, 0) //Темная Стая(Король)
        call SaveAbilityCost('A08C', 600, 400, 0) //Спавн шахты
    
    endfunction

//=========================================================================================================

    private function CheckAbilityCost_Conditions takes nothing returns boolean
        local integer abGold = GetAbilityGold(GetSpellAbilityId())
        local integer abWood = GetAbilityWood(GetSpellAbilityId())
        local integer abFood = GetAbilityFood(GetSpellAbilityId())
        return abGold > 0 or abWood > 0 or abFood > 0
    endfunction

    private function GetUnusedFood takes player target returns integer
        return GetPlayerState(target, PLAYER_STATE_RESOURCE_FOOD_CAP) - GetPlayerState(target, PLAYER_STATE_RESOURCE_FOOD_USED)
    endfunction

    private function CheckAbilityCost_Actions takes nothing returns nothing
        local unit caster = GetTriggerUnit()
        local player pl = GetOwningPlayer(caster)
        local integer userGold = GetPlayerState(pl, PLAYER_STATE_RESOURCE_GOLD)
        local integer userWood = GetPlayerState(pl, PLAYER_STATE_RESOURCE_LUMBER)
        local integer userFood = GetUnusedFood(pl)
        local integer abGold = GetAbilityGold(GetSpellAbilityId())
        local integer abWood = GetAbilityWood(GetSpellAbilityId())        
        local integer abFood = GetAbilityFood(GetSpellAbilityId())

        if userGold >= abGold and userWood >= abWood and (userFood >= abFood or abFood == 0) then
            call AdjustPlayerStateBJ(-abGold, pl, PLAYER_STATE_RESOURCE_GOLD)
            call AdjustPlayerStateBJ(-abWood, pl, PLAYER_STATE_RESOURCE_LUMBER)
        else
            call IssueImmediateOrder(caster, "stop")
            call DisplayTextToPlayer(pl, 0, 0, "У вас недостаточно ресурсов!")
        endif
    endfunction

    //===========================================================================
    private function Init takes nothing returns nothing
        local trigger initACost = CreateTrigger()
        local trigger checkCost = CreateTrigger()

        call TriggerRegisterTimerEventSingle( initACost, 0.00 )
        call TriggerAddAction( initACost, function InitAbilityCost )
        
        call TriggerRegisterAnyUnitEventBJ( checkCost, EVENT_PLAYER_UNIT_SPELL_EFFECT )
        call TriggerAddCondition( checkCost, Condition( function CheckAbilityCost_Conditions ) )
        call TriggerAddAction( checkCost, function CheckAbilityCost_Actions )
    
        set checkCost = null
        set initACost = null
    endfunction

endlibrary
к сожалению сам не нашел проблему.

у меня отменяется каст

если тебе не нравится, что мана исчезает, то восстанавливай её
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
у меня отменяется каст

если тебе не нравится, что мана исчезает, то восстанавливай её
Загруженные файлы
Принятый ответ
1
у меня отменяется каст

если тебе не нравится, что мана исчезает, то восстанавливай её
так прикол в том, что он работает даже если ресурсов нет, не отменяя каст

если так будет более понятно, то я прекреплю, как джассспай видит логи
Загруженные файлы
28
Excalimbur, я же тебе сказал, он всё отменяет, у меня спеллы не кастуются, только ману отнимает, в чём прикол? что не понятно? посмотри на отдельной карте, с кодом всё ок
1
Excalimbur, я же тебе сказал, он всё отменяет, у меня спеллы не кастуются, только ману отнимает, в чём прикол? что не понятно? посмотри на отдельной карте, с кодом всё ок
ясно, значит что-то не так с картой..
12
По коду вроде все нормально.
Возможно стоит поменять событие каста способности с EVENT_PLAYER_UNIT_SPELL_EFFECT на
EVENT_PLAYER_UNIT_SPELL_CAST (начинает применять способность) , тогда и мана отниматься не будет. так как каст не пройдет при ошибке
Чтобы оставить комментарий, пожалуйста, войдите на сайт.