Странно работает CastOnPickup

Danis

Продвинутый
12 Июн 2016
285
0
Проект
Custom Hero Arena
Хотел сделать мешочек с золотом, на подобии руны, чтобы при поднятии он активировался и давал золото, но работает странно, только 1 раз и все, если просто использовать то все нормально.

Код:
"item_gold_bag"
    {
        "ID" "2204"
        "BaseClass"                     "item_lua"
        "ItemPurchasable"               "0"
        "ScriptFile"                    "items/item_gold_bag.lua"
        "AbilityBehavior"               "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK | DOTA_ABILITY_BEHAVIOR_IMMEDIATE | DOTA_ABILITY_BEHAVIOR_IGNORE_CHANNEL | DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT"
        "Model"                         "models/props_gameplay/red_box.vmdl"
        "Effect"                        "particles/generic_gameplay/dropped_item.vpcf"
        "ItemCastOnPickup"              "1"
        "ItemQuality"                   "consumable"
       
        "AbilitySpecial"
        {
            "01"
            {
                "var_type"  "FIELD_INTEGER" //FIELD_FLOAT or FIELD_INTEGER
                "gold_min"          "10"
            }
            "02"
            {
                "var_type"  "FIELD_INTEGER" //FIELD_FLOAT or FIELD_INTEGER
                "gold_max"          "30"
            }
        }
    }

Код:
if item_gold_bag == nil then item_gold_bag = class({}) end

--require('libraries/StatsFinder')

function item_gold_bag:OnSpellStart()
    local caster = self:GetCaster()
    local greed = nil
    local midas1 = nil
    local midas2 = nil
    local multiplier = 1
    local gold_min = self:GetSpecialValueFor("gold_min")
    local gold_max = self:GetSpecialValueFor("gold_max")
    local gold_mul = 1
    local gold_mul_greed = 0
    local gold_mul_midas1 = 0
    local gold_mul_midas2 = 0
    local gold_rnd = RandomInt(gold_min,gold_max)

    if caster:FindAbilityByName("alchemist_goblins_greed") then 
        greed = caster:FindAbilityByName("alchemist_goblins_greed")
        gold_mul_greed = greed:GetSpecialValueFor("bounty_multiplier_tooltip")
    else
        gold_mul_greed = 0
    end

    if caster:FindItemByName("item_hand_of_midas_custom") then
        midas1 = caster:FindItemByName("item_hand_of_midas_custom")
        gold_mul_midas1 = midas1:GetSpecialValueFor("rune")*0.01
    else
        gold_mul_midas1 = 0
    end

    if caster:FindItemByName("item_hand_of_midas_custom_two") then
        midas2 = caster:FindItemByName("item_hand_of_midas_custom_two")
        gold_mul_midas2 = midas2:GetSpecialValueFor("rune")*0.01
    else
        gold_mul_midas2 = 0
    end

    local gold_mul = gold_mul + gold_mul_greed/2 + gold_mul_midas1/2 + gold_mul_midas2/2
    local gold = (20 + (gold_rnd*0.5*TIME/60) )* gold_mul
    print("Gold: "..gold.."\nGoldMul: "..gold_mul.."\nGreed: "..gold_mul_greed.."\nMidas1: "..gold_mul_midas1.."\nMidas2: "..gold_mul_midas2)
        caster:ModifyGold(gold, false, 0)
        SendOverheadEventMessage( caster,  OVERHEAD_ALERT_GOLD , caster, gold, nil )
    --if self then
    --    caster:RemoveItem(self)
    --end
end
 

vulkantsk

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

Danis

Продвинутый
12 Июн 2016
285
0
Проект
Custom Hero Arena
Или есть у кого рабочий код похожей штуки?
 

bobi

Активный
24 Июл 2017
99
18
попробуй через OrderFilter сделать
DOTA_UNIT_ORDER_PICKUP_ITEM ;)
на форуме даже гайд есть
 

Danis

Продвинутый
12 Июн 2016
285
0
Проект
Custom Hero Arena
попробуй через OrderFilter сделать
DOTA_UNIT_ORDER_PICKUP_ITEM ;)
на форуме даже гайд есть

Но тогда это получается что он просто будет использовать предмет когда он попадает в инвентарь, и не сможет его активировать если не будет места.
 

bobi

Активный
24 Июл 2017
99
18
Но тогда это получается что он просто будет использовать предмет когда он попадает в инвентарь, и не сможет его активировать если не будет места.
Фильтр срабатывает сразу как был отдан приказ подобрать предмет тоесть до самого события, вообщем можно сделать как ты хочешь. Я так себе руну делал, работает как часы)
 

Danis

Продвинутый
12 Июн 2016
285
0
Проект
Custom Hero Arena
Фильтр срабатывает сразу как был отдан приказ подобрать предмет тоесть до самого события, вообщем можно сделать как ты хочешь. Я так себе руну делал, работает как часы)
Хм, ну раз ты так говоришь..
Спасибо, попробую.
 
Реклама: